16 #ifndef LLVM_LIB_TARGET_X86_DISASSEMBLER_X86DISASSEMBLERDECODER_H 17 #define LLVM_LIB_TARGET_X86_DISASSEMBLER_X86DISASSEMBLERDECODER_H 23 namespace X86Disassembler {
26 #define modFromModRM(modRM) (((modRM) & 0xc0) >> 6) 27 #define regFromModRM(modRM) (((modRM) & 0x38) >> 3) 28 #define rmFromModRM(modRM) ((modRM) & 0x7) 29 #define scaleFromSIB(sib) (((sib) & 0xc0) >> 6) 30 #define indexFromSIB(sib) (((sib) & 0x38) >> 3) 31 #define baseFromSIB(sib) ((sib) & 0x7) 32 #define wFromREX(rex) (((rex) & 0x8) >> 3) 33 #define rFromREX(rex) (((rex) & 0x4) >> 2) 34 #define xFromREX(rex) (((rex) & 0x2) >> 1) 35 #define bFromREX(rex) ((rex) & 0x1) 37 #define rFromEVEX2of4(evex) (((~(evex)) & 0x80) >> 7) 38 #define xFromEVEX2of4(evex) (((~(evex)) & 0x40) >> 6) 39 #define bFromEVEX2of4(evex) (((~(evex)) & 0x20) >> 5) 40 #define r2FromEVEX2of4(evex) (((~(evex)) & 0x10) >> 4) 41 #define mmFromEVEX2of4(evex) ((evex) & 0x3) 42 #define wFromEVEX3of4(evex) (((evex) & 0x80) >> 7) 43 #define vvvvFromEVEX3of4(evex) (((~(evex)) & 0x78) >> 3) 44 #define ppFromEVEX3of4(evex) ((evex) & 0x3) 45 #define zFromEVEX4of4(evex) (((evex) & 0x80) >> 7) 46 #define l2FromEVEX4of4(evex) (((evex) & 0x40) >> 6) 47 #define lFromEVEX4of4(evex) (((evex) & 0x20) >> 5) 48 #define bFromEVEX4of4(evex) (((evex) & 0x10) >> 4) 49 #define v2FromEVEX4of4(evex) (((~evex) & 0x8) >> 3) 50 #define aaaFromEVEX4of4(evex) ((evex) & 0x7) 52 #define rFromVEX2of3(vex) (((~(vex)) & 0x80) >> 7) 53 #define xFromVEX2of3(vex) (((~(vex)) & 0x40) >> 6) 54 #define bFromVEX2of3(vex) (((~(vex)) & 0x20) >> 5) 55 #define mmmmmFromVEX2of3(vex) ((vex) & 0x1f) 56 #define wFromVEX3of3(vex) (((vex) & 0x80) >> 7) 57 #define vvvvFromVEX3of3(vex) (((~(vex)) & 0x78) >> 3) 58 #define lFromVEX3of3(vex) (((vex) & 0x4) >> 2) 59 #define ppFromVEX3of3(vex) ((vex) & 0x3) 61 #define rFromVEX2of2(vex) (((~(vex)) & 0x80) >> 7) 62 #define vvvvFromVEX2of2(vex) (((~(vex)) & 0x78) >> 3) 63 #define lFromVEX2of2(vex) (((vex) & 0x4) >> 2) 64 #define ppFromVEX2of2(vex) ((vex) & 0x3) 66 #define rFromXOP2of3(xop) (((~(xop)) & 0x80) >> 7) 67 #define xFromXOP2of3(xop) (((~(xop)) & 0x40) >> 6) 68 #define bFromXOP2of3(xop) (((~(xop)) & 0x20) >> 5) 69 #define mmmmmFromXOP2of3(xop) ((xop) & 0x1f) 70 #define wFromXOP3of3(xop) (((xop) & 0x80) >> 7) 71 #define vvvvFromXOP3of3(vex) (((~(vex)) & 0x78) >> 3) 72 #define lFromXOP3of3(xop) (((xop) & 0x4) >> 2) 73 #define ppFromXOP3of3(xop) ((xop) & 0x3) 98 #define EA_BASES_16BIT \ 134 #define EA_BASES_32BIT \ 170 #define EA_BASES_64BIT \ 328 #define REGS_SEGMENT \ 354 #define REGS_CONTROL \ 378 #define ALL_EA_BASES \ 383 #define ALL_SIB_BASES \ 409 #define ENTRY(x) EA_BASE_##x, 412 #define ENTRY(x) EA_REG_##x, 424 #define ENTRY(x) SIB_INDEX_##x, 436 #define ENTRY(x) SIB_BASE_##x, 452 #define ENTRY(x) MODRM_REG_##x, 508 typedef int (*
byteReader_t)(
const void *arg, uint8_t *byte, uint64_t address);
552 uint8_t vectorExtensionPrefix[4];
623 uint64_t immediates[2];
671 const void *readerArg,
682 void Debug(
const char *
file,
unsigned line,
const char *s);
*ViewGraph Emit a dot run run gv on the postscript file
bool consumedDisplacement
void(* dlog_t)(void *arg, const char *log)
Type for the logging function that the consumer can provide to get debugging output from the decoder...
VectorExtensionType vectorExtensionType
This class represents lattice values for constants.
The specification for how to extract and interpret a full instruction and its operands.
int(* byteReader_t)(const void *arg, uint8_t *byte, uint64_t address)
Type for the byte reader that the consumer must provide to the decoder.
EADisplacement
Possible displacement types for effective-address computations.
amode Optimize addressing mode
SIBIndex
All possible values of the SIB index field.
Reg
All possible values of the reg field in the ModR/M byte.
uint8_t numImmediatesTranslated
SegmentOverride segmentOverride
VEXLeadingOpcodeByte
Possible values for the VEX.m-mmmm field.
int decodeInstruction(InternalInstruction *insn, byteReader_t reader, const void *readerArg, dlog_t logger, void *loggerArg, const void *miiArg, uint64_t startLoc, DisassemblerMode mode)
Decode one instruction and store the decoding results in a buffer provided by the consumer...
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
EABase
All possible values of the base field for effective-address computations, a.k.a.
void Debug(const char *file, unsigned line, const char *s)
Print a message to debugs()
The x86 internal instruction, which is produced by the decoder.
VEXPrefixCode
Possible values for the VEX.pp/EVEX.pp field.
StringRef GetInstrName(unsigned Opcode, const void *mii)
EADisplacement eaDisplacement
ArrayRef< OperandSpecifier > operands
const InstructionSpecifier * spec
SegmentOverride
All possible segment overrides.
uint8_t displacementOffset
SIBBase
All possible values of the SIB base field.
uint8_t numImmediatesConsumed
static void logger(void *arg, const char *log)
logger - a callback function that wraps the operator<< method from raw_ostream.
StringRef - Represent a constant reference to a string, i.e.
DisassemblerMode
Decoding mode for the Intel disassembler.