diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-04-20 21:52:16 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-04-20 21:52:16 +0000 |
commit | ac15f1cda3d36954d017978f66585ea3dae34472 (patch) | |
tree | 63f4a0be0ddba4c5963885ccc982bfe02004e905 /llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp | |
parent | 82b47d5660c45981101e95f136366940afe7200f (diff) | |
download | bcm5719-llvm-ac15f1cda3d36954d017978f66585ea3dae34472.tar.gz bcm5719-llvm-ac15f1cda3d36954d017978f66585ea3dae34472.zip |
Don't provide two different definitions of ModRMDecision, OpcodeDecision, and ContextDecision in different source files (depending on #define magic).
llvm-svn: 206720
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp')
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp index b80e3a90a61..070b365fd48 100644 --- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp +++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp @@ -22,6 +22,29 @@ using namespace llvm::X86Disassembler; +/// Specifies whether a ModR/M byte is needed and (if so) which +/// instruction each possible value of the ModR/M byte corresponds to. Once +/// this information is known, we have narrowed down to a single instruction. +struct ModRMDecision { + uint8_t modrm_type; + uint16_t instructionIDs; +}; + +/// Specifies which set of ModR/M->instruction tables to look at +/// given a particular opcode. +struct OpcodeDecision { + ModRMDecision modRMDecisions[256]; +}; + +/// Specifies which opcode->instruction tables to look at given +/// a particular context (set of attributes). Since there are many possible +/// contexts, the decoder first uses CONTEXTS_SYM to determine which context +/// applies given a specific set of attributes. Hence there are only IC_max +/// entries in this table, rather than 2^(ATTR_max). +struct ContextDecision { + OpcodeDecision opcodeDecisions[IC_max]; +}; + #include "X86GenDisassemblerTables.inc" #define TRUE 1 |