//===-- HexagonBaseInfo.h - Top level definitions for Hexagon --*- C++ -*--===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file contains small standalone helper functions and enum definitions for
// the Hexagon target useful for the compiler back-end and the MC libraries.
// As such, it deliberately does not include references to LLVM core
// code gen types, passes, etc..
//
//===----------------------------------------------------------------------===//

#ifndef HEXAGONBASEINFO_H
#define HEXAGONBASEINFO_H

#include "HexagonMCTargetDesc.h"
#include "llvm/Support/ErrorHandling.h"

namespace llvm {

/// HexagonII - This namespace holds all of the target specific flags that
/// instruction info tracks.
///
namespace HexagonII {
  // *** The code below must match HexagonInstrFormat*.td *** //

  // Insn types.
  // *** Must match HexagonInstrFormat*.td ***
  enum Type {
    TypePSEUDO  = 0,
    TypeALU32   = 1,
    TypeCR      = 2,
    TypeJR      = 3,
    TypeJ       = 4,
    TypeLD      = 5,
    TypeST      = 6,
    TypeSYSTEM  = 7,
    TypeXTYPE   = 8,
    TypeMEMOP   = 9,
    TypeNV      = 10,
    TypePREFIX  = 30, // Such as extenders.
    TypeENDLOOP = 31  // Such as end of a HW loop.
  };

  enum SubTarget {
    HasV2SubT     = 0xf,
    HasV2SubTOnly = 0x1,
    NoV2SubT      = 0x0,
    HasV3SubT     = 0xe,
    HasV3SubTOnly = 0x2,
    NoV3SubT      = 0x1,
    HasV4SubT     = 0xc,
    NoV4SubT      = 0x3,
    HasV5SubT     = 0x8,
    NoV5SubT      = 0x7
  };

  enum AddrMode {
    NoAddrMode     = 0,  // No addressing mode
    Absolute       = 1,  // Absolute addressing mode
    AbsoluteSet    = 2,  // Absolute set addressing mode
    BaseImmOffset  = 3,  // Indirect with offset
    BaseLongOffset = 4,  // Indirect with long offset
    BaseRegOffset  = 5   // Indirect with register offset
  };

  enum MemAccessSize {
    NoMemAccess = 0,            // Not a memory acces instruction.
    ByteAccess = 1,             // Byte access instruction (memb).
    HalfWordAccess = 2,         // Half word access instruction (memh).
    WordAccess = 3,             // Word access instrution (memw).
    DoubleWordAccess = 4        // Double word access instruction (memd)
  };

  // MCInstrDesc TSFlags
  // *** Must match HexagonInstrFormat*.td ***
  enum {
    // This 5-bit field describes the insn type.
    TypePos  = 0,
    TypeMask = 0x1f,

    // Solo instructions.
    SoloPos  = 5,
    SoloMask = 0x1,

    // Predicated instructions.
    PredicatedPos  = 6,
    PredicatedMask = 0x1,
    PredicatedFalsePos  = 7,
    PredicatedFalseMask = 0x1,
    PredicatedNewPos  = 8,
    PredicatedNewMask = 0x1,

    // New-Value consumer instructions.
    NewValuePos  = 9,
    NewValueMask = 0x1,

    // New-Value producer instructions.
    hasNewValuePos  = 10,
    hasNewValueMask = 0x1,

    // Which operand consumes or produces a new value.
    NewValueOpPos  = 11,
    NewValueOpMask = 0x7,

    // Which bits encode the new value.
    NewValueBitsPos  = 14,
    NewValueBitsMask = 0x3,

    // Stores that can become new-value stores.
    mayNVStorePos  = 16,
    mayNVStoreMask = 0x1,

    // New-value store instructions.
    NVStorePos  = 17,
    NVStoreMask = 0x1,

    // Extendable insns.
    ExtendablePos  = 18,
    ExtendableMask = 0x1,

    // Insns must be extended.
    ExtendedPos  = 19,
    ExtendedMask = 0x1,

    // Which operand may be extended.
    ExtendableOpPos  = 20,
    ExtendableOpMask = 0x7,

    // Signed or unsigned range.
    ExtentSignedPos = 23,
    ExtentSignedMask = 0x1,

    // Number of bits of range before extending operand.
    ExtentBitsPos  = 24,
    ExtentBitsMask = 0x1f,

    // Valid subtargets
    validSubTargetPos = 29,
    validSubTargetMask = 0xf,

    // Addressing mode for load/store instructions.
    AddrModePos = 33,
    AddrModeMask = 0x7,

    // Access size of memory access instructions (load/store).
    MemAccessSizePos = 36,
    MemAccesSizeMask = 0x7
  };

  // *** The code above must match HexagonInstrFormat*.td *** //

  // Hexagon specific MO operand flag mask.
  enum HexagonMOTargetFlagVal {
    //===------------------------------------------------------------------===//
    // Hexagon Specific MachineOperand flags.
    MO_NO_FLAG,

    HMOTF_ConstExtended = 1,

    /// MO_PCREL - On a symbol operand, indicates a PC-relative relocation
    /// Used for computing a global address for PIC compilations
    MO_PCREL,

    /// MO_GOT - Indicates a GOT-relative relocation
    MO_GOT,

    // Low or high part of a symbol.
    MO_LO16, MO_HI16,

    // Offset from the base of the SDA.
    MO_GPREL
  };

} // End namespace HexagonII.

} // End namespace llvm.

#endif
