17 #ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86BASEINFO_H
18 #define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86BASEINFO_H
22 #include "llvm/Support/DataTypes.h"
680 return 1 + HasVEX_4V + HasEVEX_K;
683 return 1 + HasEVEX_K;
703 return 0 + HasVEX_4V + HasEVEX_K;
733 if ((RegNo >= X86::XMM8 && RegNo <= X86::XMM31) ||
734 (RegNo >= X86::YMM8 && RegNo <= X86::YMM31) ||
735 (RegNo >= X86::ZMM8 && RegNo <= X86::ZMM31))
740 case X86::R8:
case X86::R9:
case X86::R10:
case X86::R11:
741 case X86::R12:
case X86::R13:
case X86::R14:
case X86::R15:
742 case X86::R8D:
case X86::R9D:
case X86::R10D:
case X86::R11D:
743 case X86::R12D:
case X86::R13D:
case X86::R14D:
case X86::R15D:
744 case X86::R8W:
case X86::R9W:
case X86::R10W:
case X86::R11W:
745 case X86::R12W:
case X86::R13W:
case X86::R14W:
case X86::R15W:
746 case X86::R8B:
case X86::R9B:
case X86::R10B:
case X86::R11B:
747 case X86::R12B:
case X86::R13B:
case X86::R14B:
case X86::R15B:
748 case X86::CR8:
case X86::CR9:
case X86::CR10:
case X86::CR11:
749 case X86::CR12:
case X86::CR13:
case X86::CR14:
case X86::CR15:
750 case X86::DR8:
case X86::DR9:
case X86::DR10:
case X86::DR11:
751 case X86::DR12:
case X86::DR13:
case X86::DR14:
case X86::DR15:
760 return ((RegNo >= X86::XMM16 && RegNo <= X86::XMM31) ||
761 (RegNo >= X86::YMM16 && RegNo <= X86::YMM31) ||
762 (RegNo >= X86::ZMM16 && RegNo <= X86::ZMM31));
767 return (reg == X86::SPL || reg == X86::BPL ||
768 reg == X86::SIL || reg == X86::DIL);
MO_SECREL - On a symbol operand this indicates that the immediate is the offset from beginning of sec...
bool isX86_64NonExtLowByteReg(unsigned reg)
MO_TLSLD - On a symbol operand this indicates that the immediate is the offset of the GOT entry with ...
MO_TLVP_PIC_BASE - On a symbol operand this indicates that the immediate is some TLS offset from the ...
AddRegFrm - This form is used for instructions like 'push r32' that have their one register operand a...
Describe properties that are true of each instruction in the target description file.
MachineInstrBuilder MachineInstrBuilder &DefMI const MCInstrDesc & Desc
RawFrmImm8 - This is used for the ENTER instruction, which has two immediates, the first of which is ...
MO_GOTPCREL - On a symbol operand this indicates that the immediate is offset to the GOT entry for th...
MO_DTPOFF - On a symbol operand this indicates that the immediate is the offset of the GOT entry with...
MRMSrcReg - This form is used for instructions that use the Mod/RM byte to specify a source...
XOP - Opcode prefix used by XOP instructions.
unsigned isImmPCRel(uint64_t TSFlags)
isImmPCRel - Return true if the immediate of the specified instruction's TSFlags indicates that it is...
AddrSegmentReg - The operand # of the segment in the memory operand.
MO_DARWIN_NONLAZY_PIC_BASE - On a symbol operand "FOO", this indicates that the reference is actually...
MRMSrcMem4VOp3 - This form is used for instructions that encode operand 3 with VEX.VVVV and load from memory.
MRMXm - This form is used for instructions that use the Mod/RM byte to specify a memory source...
MRMSrcMem - This form is used for instructions that use the Mod/RM byte to specify a source...
VEX_L - Stands for a bit in the VEX opcode prefix meaning the current instruction uses 256-bit wide r...
MO_GOT - On a symbol operand this indicates that the immediate is the offset to the GOT entry for the...
MO_GOTTPOFF - On a symbol operand this indicates that the immediate is the offset of the GOT entry wi...
RawFrmMemOffs - This form is for instructions that store an absolute memory offset as an immediate wi...
MRMSrcMemOp4 - This form is used for instructions that use the Mod/RM byte to specify the fourth sour...
MRM_XX - A mod/rm byte of exactly 0xXX.
bool hasImm(uint64_t TSFlags)
MO_DARWIN_NONLAZY - On a symbol operand "FOO", this indicates that the reference is actually to the "...
bool isX86_64ExtendedReg(unsigned RegNo)
isX86_64ExtendedReg - Is the MachineOperand a x86-64 extended (r8 or higher) register? e.g.
AddrNumOperands - Total number of operands in a memory reference.
MO_GOT_ABSOLUTE_ADDRESS - On a symbol operand, this represents a relocation of: SYMBOL_LABEL + [...
MO_GOTNTPOFF - On a symbol operand this indicates that the immediate is the offset of the GOT entry w...
MO_TLVP - On a symbol operand this indicates that the immediate is some TLS offset.
MO_TLSLDM - On a symbol operand this indicates that the immediate is the offset of the GOT entry with...
MO_NTPOFF - On a symbol operand this indicates that the immediate is the negative thread-pointer offs...
unsigned getOperandBias(const MCInstrDesc &Desc)
getOperandBias - compute any additional adjustment needed to the offset to the start of the memory op...
unsigned isImmSigned(uint64_t TSFlags)
isImmSigned - Return true if the immediate of the specified instruction's TSFlags indicates that it i...
VEX_4V - Used to specify an additional AVX/SSE register.
RawFrmImm16 - This is used for CALL FAR instructions, which have two immediates, the first of which i...
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
int getOperandConstraint(unsigned OpNum, MCOI::OperandConstraint Constraint) const
Returns the value of the specific constraint if it is set.
Windows x64, Windows Itanium (IA-64)
MO_TLSGD - On a symbol operand this indicates that the immediate is the offset of the GOT entry with ...
MRM[0-7][rm] - These forms are used to represent instructions that use a Mod/RM byte, and use the middle field to hold extended opcode information.
MO_TPOFF - On a symbol operand this indicates that the immediate is the thread-pointer offset for the...
static bool is32ExtendedReg(unsigned RegNo)
is32ExtendedReg - Is the MemoryOperand a 32 extended (zmm16 or higher) registers? e...
MRMXr - This form is used for instructions that use the Mod/RM byte to specify a register source...
MRMSrcReg4VOp3 - This form is used for instructions that encode operand 3 with VEX.VVVV and do not load from memory.
VEX_W - Has a opcode specific functionality, but is used in the same way as REX_W is for regular SSE ...
unsigned char getBaseOpcodeFor(uint64_t TSFlags)
bool isKMergeMasked(uint64_t TSFlags)
isKMergedMasked - Is this a merge masked instruction.
MO_GOTOFF - On a symbol operand this indicates that the immediate is the offset to the location of th...
MO_INDNTPOFF - On a symbol operand this indicates that the immediate is the absolute address of the G...
unsigned getSizeOfImm(uint64_t TSFlags)
getSizeOfImm - Decode the "size of immediate" field from the TSFlags field of the specified instructi...
TOF
Target Operand Flag enum.
STATIC_ROUNDING
AVX512 static rounding constants.
bool isKMasked(uint64_t TSFlags)
isKMasked - Is this a masked instruction.
Has3DNow0F0FOpcode - This flag indicates that the instruction uses the wacky 0x0F 0x0F prefix for 3DN...
Explicitly specified rounding control.
MO_PLT - On a symbol operand this indicates that the immediate is offset to the PLT entry of symbol n...
RawFrmDst - This form is for instructions that use the destination index register DI/EDI/ESI...
MRMSrcRegOp4 - This form is used for instructions that use the Mod/RM byte to specify the fourth sour...
RawFrmSrc - This form is for instructions that use the source index register SI/ESI/ERI with a possib...
RawFrmSrc - This form is for instructions that use the source index register SI/ESI/RSI with a possib...
unsigned getNumOperands() const
Return the number of declared MachineOperands for this MachineInstruction.
MO_PIC_BASE_OFFSET - On a symbol operand this indicates that the immediate should get the value of th...
Raw - This form is for instructions that don't have any operands, so they are just a fixed opcode val...
MRMDestReg - This form is used for instructions that use the Mod/RM byte to specify a destination...
MO_DLLIMPORT - On a symbol operand "FOO", this indicates that the reference is actually to the "__imp...
int getMemoryOperandNo(uint64_t TSFlags)
getMemoryOperandNo - The function returns the MCInst operand # for the first field of the memory oper...