LLVM 19.0.0git
Namespaces | Enumerations | Functions
X86BaseInfo.h File Reference
#include "X86MCTargetDesc.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/Support/DataTypes.h"
#include "llvm/Support/ErrorHandling.h"

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 
namespace  llvm::X86
 Define some predicates that are used for node matching.
 
namespace  llvm::X86II
 X86II - This namespace holds all of the target specific flags that instruction info tracks.
 

Enumerations

enum  {
  llvm::X86::AddrBaseReg = 0 , llvm::X86::AddrScaleAmt = 1 , llvm::X86::AddrIndexReg = 2 , llvm::X86::AddrDisp = 3 ,
  llvm::X86::AddrSegmentReg = 4 , llvm::X86::AddrNumOperands = 5
}
 
enum  llvm::X86::STATIC_ROUNDING {
  llvm::X86::TO_NEAREST_INT = 0 , llvm::X86::TO_NEG_INF = 1 , llvm::X86::TO_POS_INF = 2 , llvm::X86::TO_ZERO = 3 ,
  llvm::X86::CUR_DIRECTION = 4 , llvm::X86::NO_EXC = 8
}
 AVX512 static rounding constants. More...
 
enum  llvm::X86::IPREFIXES {
  llvm::X86::IP_NO_PREFIX = 0 , llvm::X86::IP_HAS_OP_SIZE = 1U << 0 , llvm::X86::IP_HAS_AD_SIZE = 1U << 1 , llvm::X86::IP_HAS_REPEAT_NE = 1U << 2 ,
  llvm::X86::IP_HAS_REPEAT = 1U << 3 , llvm::X86::IP_HAS_LOCK = 1U << 4 , llvm::X86::IP_HAS_NOTRACK = 1U << 5 , llvm::X86::IP_USE_VEX = 1U << 6 ,
  llvm::X86::IP_USE_VEX2 = 1U << 7 , llvm::X86::IP_USE_VEX3 = 1U << 8 , llvm::X86::IP_USE_EVEX = 1U << 9 , llvm::X86::IP_USE_DISP8 = 1U << 10 ,
  llvm::X86::IP_USE_DISP32 = 1U << 11
}
 The constants to describe instr prefixes if there are. More...
 
enum  llvm::X86::OperandType : unsigned { llvm::X86::OPERAND_ROUNDING_CONTROL = MCOI::OPERAND_FIRST_TARGET , llvm::X86::OPERAND_COND_CODE }
 
enum  llvm::X86::CondCode {
  llvm::X86::COND_O = 0 , llvm::X86::COND_NO = 1 , llvm::X86::COND_B = 2 , llvm::X86::COND_AE = 3 ,
  llvm::X86::COND_E = 4 , llvm::X86::COND_NE = 5 , llvm::X86::COND_BE = 6 , llvm::X86::COND_A = 7 ,
  llvm::X86::COND_S = 8 , llvm::X86::COND_NS = 9 , llvm::X86::COND_P = 10 , llvm::X86::COND_NP = 11 ,
  llvm::X86::COND_L = 12 , llvm::X86::COND_GE = 13 , llvm::X86::COND_LE = 14 , llvm::X86::COND_G = 15 ,
  llvm::X86::LAST_VALID_COND = COND_G , llvm::X86::COND_NE_OR_P , llvm::X86::COND_E_AND_NP , llvm::X86::COND_INVALID
}
 
enum class  llvm::X86::FirstMacroFusionInstKind {
  llvm::X86::Test , llvm::X86::Cmp , llvm::X86::And , llvm::X86::AddSub ,
  llvm::X86::IncDec , llvm::X86::Invalid
}
 
enum class  llvm::X86::SecondMacroFusionInstKind { llvm::X86::AB , llvm::X86::ELG , llvm::X86::SPO , llvm::X86::Invalid }
 
enum  llvm::X86::AlignBranchBoundaryKind : uint8_t {
  llvm::X86::AlignBranchNone = 0 , llvm::X86::AlignBranchFused = 1U << 0 , llvm::X86::AlignBranchJcc = 1U << 1 , llvm::X86::AlignBranchJmp = 1U << 2 ,
  llvm::X86::AlignBranchCall = 1U << 3 , llvm::X86::AlignBranchRet = 1U << 4 , llvm::X86::AlignBranchIndirect = 1U << 5
}
 Defines the possible values of the branch boundary alignment mask. More...
 
enum  llvm::X86::EncodingOfSegmentOverridePrefix : uint8_t {
  llvm::X86::CS_Encoding = 0x2E , llvm::X86::DS_Encoding = 0x3E , llvm::X86::ES_Encoding = 0x26 , llvm::X86::FS_Encoding = 0x64 ,
  llvm::X86::GS_Encoding = 0x65 , llvm::X86::SS_Encoding = 0x36
}
 Defines the encoding values for segment override prefix. More...
 
enum  llvm::X86II::TOF {
  llvm::X86II::MO_NO_FLAG , llvm::X86II::MO_GOT_ABSOLUTE_ADDRESS , llvm::X86II::MO_PIC_BASE_OFFSET , llvm::X86II::MO_GOT ,
  llvm::X86II::MO_GOTOFF , llvm::X86II::MO_GOTPCREL , llvm::X86II::MO_GOTPCREL_NORELAX , llvm::X86II::MO_PLT ,
  llvm::X86II::MO_TLSGD , llvm::X86II::MO_TLSLD , llvm::X86II::MO_TLSLDM , llvm::X86II::MO_GOTTPOFF ,
  llvm::X86II::MO_INDNTPOFF , llvm::X86II::MO_TPOFF , llvm::X86II::MO_DTPOFF , llvm::X86II::MO_NTPOFF ,
  llvm::X86II::MO_GOTNTPOFF , llvm::X86II::MO_DLLIMPORT , llvm::X86II::MO_DARWIN_NONLAZY , llvm::X86II::MO_DARWIN_NONLAZY_PIC_BASE ,
  llvm::X86II::MO_TLVP , llvm::X86II::MO_TLVP_PIC_BASE , llvm::X86II::MO_SECREL , llvm::X86II::MO_ABS8 ,
  llvm::X86II::MO_COFFSTUB
}
 Target Operand Flag enum. More...
 
enum  : uint64_t {
  llvm::X86II::Pseudo = 0 , llvm::X86II::RawFrm = 1 , llvm::X86II::AddRegFrm = 2 , llvm::X86II::RawFrmMemOffs = 3 ,
  llvm::X86II::RawFrmSrc = 4 , llvm::X86II::RawFrmDst = 5 , llvm::X86II::RawFrmDstSrc = 6 , llvm::X86II::RawFrmImm8 = 7 ,
  llvm::X86II::RawFrmImm16 = 8 , llvm::X86II::AddCCFrm = 9 , llvm::X86II::PrefixByte = 10 , llvm::X86II::MRMDestRegCC = 18 ,
  llvm::X86II::MRMDestMemCC = 19 , llvm::X86II::MRMDestMem4VOp3CC = 20 , llvm::X86II::MRMr0 = 21 , llvm::X86II::MRMSrcMemFSIB = 22 ,
  llvm::X86II::MRMDestMemFSIB = 23 , llvm::X86II::MRMDestMem = 24 , llvm::X86II::MRMSrcMem = 25 , llvm::X86II::MRMSrcMem4VOp3 = 26 ,
  llvm::X86II::MRMSrcMemOp4 = 27 , llvm::X86II::MRMSrcMemCC = 28 , llvm::X86II::MRMXmCC = 30 , llvm::X86II::MRMXm = 31 ,
  llvm::X86II::MRM0m = 32 , llvm::X86II::MRM1m = 33 , llvm::X86II::MRM2m = 34 , llvm::X86II::MRM3m = 35 ,
  llvm::X86II::MRM4m = 36 , llvm::X86II::MRM5m = 37 , llvm::X86II::MRM6m = 38 , llvm::X86II::MRM7m = 39 ,
  llvm::X86II::MRMDestReg = 40 , llvm::X86II::MRMSrcReg = 41 , llvm::X86II::MRMSrcReg4VOp3 = 42 , llvm::X86II::MRMSrcRegOp4 = 43 ,
  llvm::X86II::MRMSrcRegCC = 44 , llvm::X86II::MRMXrCC = 46 , llvm::X86II::MRMXr = 47 , llvm::X86II::MRM0r = 48 ,
  llvm::X86II::MRM1r = 49 , llvm::X86II::MRM2r = 50 , llvm::X86II::MRM3r = 51 , llvm::X86II::MRM4r = 52 ,
  llvm::X86II::MRM5r = 53 , llvm::X86II::MRM6r = 54 , llvm::X86II::MRM7r = 55 , llvm::X86II::MRM0X = 56 ,
  llvm::X86II::MRM1X = 57 , llvm::X86II::MRM2X = 58 , llvm::X86II::MRM3X = 59 , llvm::X86II::MRM4X = 60 ,
  llvm::X86II::MRM5X = 61 , llvm::X86II::MRM6X = 62 , llvm::X86II::MRM7X = 63 , llvm::X86II::MRM_C0 = 64 ,
  llvm::X86II::MRM_C1 = 65 , llvm::X86II::MRM_C2 = 66 , llvm::X86II::MRM_C3 = 67 , llvm::X86II::MRM_C4 = 68 ,
  llvm::X86II::MRM_C5 = 69 , llvm::X86II::MRM_C6 = 70 , llvm::X86II::MRM_C7 = 71 , llvm::X86II::MRM_C8 = 72 ,
  llvm::X86II::MRM_C9 = 73 , llvm::X86II::MRM_CA = 74 , llvm::X86II::MRM_CB = 75 , llvm::X86II::MRM_CC = 76 ,
  llvm::X86II::MRM_CD = 77 , llvm::X86II::MRM_CE = 78 , llvm::X86II::MRM_CF = 79 , llvm::X86II::MRM_D0 = 80 ,
  llvm::X86II::MRM_D1 = 81 , llvm::X86II::MRM_D2 = 82 , llvm::X86II::MRM_D3 = 83 , llvm::X86II::MRM_D4 = 84 ,
  llvm::X86II::MRM_D5 = 85 , llvm::X86II::MRM_D6 = 86 , llvm::X86II::MRM_D7 = 87 , llvm::X86II::MRM_D8 = 88 ,
  llvm::X86II::MRM_D9 = 89 , llvm::X86II::MRM_DA = 90 , llvm::X86II::MRM_DB = 91 , llvm::X86II::MRM_DC = 92 ,
  llvm::X86II::MRM_DD = 93 , llvm::X86II::MRM_DE = 94 , llvm::X86II::MRM_DF = 95 , llvm::X86II::MRM_E0 = 96 ,
  llvm::X86II::MRM_E1 = 97 , llvm::X86II::MRM_E2 = 98 , llvm::X86II::MRM_E3 = 99 , llvm::X86II::MRM_E4 = 100 ,
  llvm::X86II::MRM_E5 = 101 , llvm::X86II::MRM_E6 = 102 , llvm::X86II::MRM_E7 = 103 , llvm::X86II::MRM_E8 = 104 ,
  llvm::X86II::MRM_E9 = 105 , llvm::X86II::MRM_EA = 106 , llvm::X86II::MRM_EB = 107 , llvm::X86II::MRM_EC = 108 ,
  llvm::X86II::MRM_ED = 109 , llvm::X86II::MRM_EE = 110 , llvm::X86II::MRM_EF = 111 , llvm::X86II::MRM_F0 = 112 ,
  llvm::X86II::MRM_F1 = 113 , llvm::X86II::MRM_F2 = 114 , llvm::X86II::MRM_F3 = 115 , llvm::X86II::MRM_F4 = 116 ,
  llvm::X86II::MRM_F5 = 117 , llvm::X86II::MRM_F6 = 118 , llvm::X86II::MRM_F7 = 119 , llvm::X86II::MRM_F8 = 120 ,
  llvm::X86II::MRM_F9 = 121 , llvm::X86II::MRM_FA = 122 , llvm::X86II::MRM_FB = 123 , llvm::X86II::MRM_FC = 124 ,
  llvm::X86II::MRM_FD = 125 , llvm::X86II::MRM_FE = 126 , llvm::X86II::MRM_FF = 127 , llvm::X86II::FormMask = 127 ,
  llvm::X86II::OpSizeShift = 7 , llvm::X86II::OpSizeMask = 0x3 << OpSizeShift , llvm::X86II::OpSizeFixed = 0 << OpSizeShift , llvm::X86II::OpSize16 = 1 << OpSizeShift ,
  llvm::X86II::OpSize32 = 2 << OpSizeShift , llvm::X86II::AdSizeShift = OpSizeShift + 2 , llvm::X86II::AdSizeMask = 0x3 << AdSizeShift , llvm::X86II::AdSizeX = 0 << AdSizeShift ,
  llvm::X86II::AdSize16 = 1 << AdSizeShift , llvm::X86II::AdSize32 = 2 << AdSizeShift , llvm::X86II::AdSize64 = 3 << AdSizeShift , llvm::X86II::OpPrefixShift = AdSizeShift + 2 ,
  llvm::X86II::OpPrefixMask = 0x3 << OpPrefixShift , llvm::X86II::PD = 1 << OpPrefixShift , llvm::X86II::XS = 2 << OpPrefixShift , llvm::X86II::XD = 3 << OpPrefixShift ,
  llvm::X86II::OpMapShift = OpPrefixShift + 2 , llvm::X86II::OpMapMask = 0xF << OpMapShift , llvm::X86II::OB = 0 << OpMapShift , llvm::X86II::TB = 1 << OpMapShift ,
  llvm::X86II::T8 = 2 << OpMapShift , llvm::X86II::TA = 3 << OpMapShift , llvm::X86II::XOP8 = 4 << OpMapShift , llvm::X86II::XOP9 = 5 << OpMapShift ,
  llvm::X86II::XOPA = 6 << OpMapShift , llvm::X86II::ThreeDNow = 7 << OpMapShift , llvm::X86II::T_MAP4 = 8 << OpMapShift , llvm::X86II::T_MAP5 = 9 << OpMapShift ,
  llvm::X86II::T_MAP6 = 10 << OpMapShift , llvm::X86II::T_MAP7 = 11 << OpMapShift , llvm::X86II::REXShift = OpMapShift + 4 , llvm::X86II::REX_W = 1 << REXShift ,
  llvm::X86II::ImmShift = REXShift + 1 , llvm::X86II::Imm8 = 1 << ImmShift , llvm::X86II::Imm8PCRel = 2 << ImmShift , llvm::X86II::Imm8Reg = 3 << ImmShift ,
  llvm::X86II::Imm16 = 4 << ImmShift , llvm::X86II::Imm16PCRel = 5 << ImmShift , llvm::X86II::Imm32 = 6 << ImmShift , llvm::X86II::Imm32PCRel = 7 << ImmShift ,
  llvm::X86II::Imm32S = 8 << ImmShift , llvm::X86II::Imm64 = 9 << ImmShift , llvm::X86II::ImmMask = 15 << ImmShift , llvm::X86II::FPTypeShift = ImmShift + 4 ,
  llvm::X86II::FPTypeMask = 7 << FPTypeShift , llvm::X86II::NotFP = 0 << FPTypeShift , llvm::X86II::ZeroArgFP = 1 << FPTypeShift , llvm::X86II::OneArgFP = 2 << FPTypeShift ,
  llvm::X86II::OneArgFPRW = 3 << FPTypeShift , llvm::X86II::TwoArgFP = 4 << FPTypeShift , llvm::X86II::CompareFP = 5 << FPTypeShift , llvm::X86II::CondMovFP = 6 << FPTypeShift ,
  llvm::X86II::SpecialFP = 7 << FPTypeShift , llvm::X86II::LOCKShift = FPTypeShift + 3 , llvm::X86II::LOCK = 1 << LOCKShift , llvm::X86II::REPShift = LOCKShift + 1 ,
  llvm::X86II::REP = 1 << REPShift , llvm::X86II::SSEDomainShift = REPShift + 1 , llvm::X86II::EncodingShift = SSEDomainShift + 2 , llvm::X86II::EncodingMask = 0x3 << EncodingShift ,
  llvm::X86II::LEGACY = 0 << EncodingShift , llvm::X86II::VEX = 1 << EncodingShift , llvm::X86II::XOP = 2 << EncodingShift , llvm::X86II::EVEX = 3 << EncodingShift ,
  llvm::X86II::OpcodeShift = EncodingShift + 2 , llvm::X86II::VEX_4VShift = OpcodeShift + 8 , llvm::X86II::VEX_4V = 1ULL << VEX_4VShift , llvm::X86II::VEX_LShift = VEX_4VShift + 1 ,
  llvm::X86II::VEX_L = 1ULL << VEX_LShift , llvm::X86II::EVEX_KShift = VEX_LShift + 1 , llvm::X86II::EVEX_K = 1ULL << EVEX_KShift , llvm::X86II::EVEX_ZShift = EVEX_KShift + 1 ,
  llvm::X86II::EVEX_Z = 1ULL << EVEX_ZShift , llvm::X86II::EVEX_L2Shift = EVEX_ZShift + 1 , llvm::X86II::EVEX_L2 = 1ULL << EVEX_L2Shift , llvm::X86II::EVEX_BShift = EVEX_L2Shift + 1 ,
  llvm::X86II::EVEX_B = 1ULL << EVEX_BShift , llvm::X86II::CD8_Scale_Shift = EVEX_BShift + 1 , llvm::X86II::CD8_Scale_Mask = 7ULL << CD8_Scale_Shift , llvm::X86II::EVEX_RCShift = CD8_Scale_Shift + 3 ,
  llvm::X86II::EVEX_RC = 1ULL << EVEX_RCShift , llvm::X86II::NoTrackShift = EVEX_RCShift + 1 , llvm::X86II::NOTRACK = 1ULL << NoTrackShift , llvm::X86II::ExplicitOpPrefixShift = NoTrackShift + 1 ,
  llvm::X86II::ExplicitREX2Prefix = 1ULL << ExplicitOpPrefixShift , llvm::X86II::ExplicitVEXPrefix = 2ULL << ExplicitOpPrefixShift , llvm::X86II::ExplicitEVEXPrefix = 3ULL << ExplicitOpPrefixShift , llvm::X86II::ExplicitOpPrefixMask = 3ULL << ExplicitOpPrefixShift ,
  llvm::X86II::EVEX_NFShift = ExplicitOpPrefixShift + 2 , llvm::X86II::EVEX_NF = 1ULL << EVEX_NFShift , llvm::X86II::TwoConditionalOps_Shift = EVEX_NFShift + 1 , llvm::X86II::TwoConditionalOps = 1ULL << TwoConditionalOps_Shift
}
 

Functions

FirstMacroFusionInstKind llvm::X86::classifyFirstOpcodeInMacroFusion (unsigned Opcode)
 
SecondMacroFusionInstKind llvm::X86::classifySecondCondCodeInMacroFusion (X86::CondCode CC)
 
bool llvm::X86::isMacroFused (FirstMacroFusionInstKind FirstKind, SecondMacroFusionInstKind SecondKind)
 
EncodingOfSegmentOverridePrefix llvm::X86::getSegmentOverridePrefixForReg (unsigned Reg)
 Given a segment register, return the encoding of the segment override prefix for it.
 
bool llvm::X86II::isPrefix (uint64_t TSFlags)
 
bool llvm::X86II::isPseudo (uint64_t TSFlags)
 
uint8_t llvm::X86II::getBaseOpcodeFor (uint64_t TSFlags)
 
bool llvm::X86II::hasImm (uint64_t TSFlags)
 
unsigned llvm::X86II::getSizeOfImm (uint64_t TSFlags)
 Decode the "size of immediate" field from the TSFlags field of the specified instruction.
 
bool llvm::X86II::isImmPCRel (uint64_t TSFlags)
 
bool llvm::X86II::isImmSigned (uint64_t TSFlags)
 
unsigned llvm::X86II::getOperandBias (const MCInstrDesc &Desc)
 Compute whether all of the def operands are repeated in the uses and therefore should be skipped.
 
bool llvm::X86II::hasNewDataDest (uint64_t TSFlags)
 
int llvm::X86II::getMemoryOperandNo (uint64_t TSFlags)
 
bool llvm::X86II::isXMMReg (unsigned RegNo)
 
bool llvm::X86II::isYMMReg (unsigned RegNo)
 
bool llvm::X86II::isZMMReg (unsigned RegNo)
 
bool llvm::X86II::isApxExtendedReg (unsigned RegNo)
 
bool llvm::X86II::isX86_64ExtendedReg (unsigned RegNo)
 
bool llvm::X86II::canUseApxExtendedReg (const MCInstrDesc &Desc)
 
static bool llvm::X86II::is32ExtendedReg (unsigned RegNo)
 
bool llvm::X86II::isX86_64NonExtLowByteReg (unsigned reg)
 
bool llvm::X86II::isKMasked (uint64_t TSFlags)
 
bool llvm::X86II::isKMergeMasked (uint64_t TSFlags)
 
bool llvm::X86II::needSIB (unsigned BaseReg, unsigned IndexReg, bool In64BitMode)