diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-02-11 14:50:54 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-02-11 14:50:54 +0000 |
commit | 478e8de8efd4dca4734571fc9e42700b8f618318 (patch) | |
tree | d0604c278fc8eeaf3fe8a914af6c8ded495ccfcb /llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c | |
parent | 911fdf47cda1a5a6278430a3cdfffe0d1ff23a2b (diff) | |
download | bcm5719-llvm-478e8de8efd4dca4734571fc9e42700b8f618318.tar.gz bcm5719-llvm-478e8de8efd4dca4734571fc9e42700b8f618318.zip |
Reuse the enum names from X86Desc in the X86Disassembler.
This requires some gymnastics to make it available for C code. Remove the names
from the disassembler tables, making them relocation free.
llvm-svn: 150303
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c')
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c index a7becdb2c70..c15709d33da 100644 --- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c +++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c @@ -712,7 +712,7 @@ static BOOL is16BitEquvalent(const char* orig, const char* equiv) { * @return - 0 if the ModR/M could be read when needed or was not needed; * nonzero otherwise. */ -static int getID(struct InternalInstruction* insn) { +static int getID(struct InternalInstruction* insn, void *miiArg) { uint8_t attrMask; uint16_t instructionID; @@ -844,8 +844,12 @@ static int getID(struct InternalInstruction* insn) { } specWithOpsize = specifierForUID(instructionIDWithOpsize); - - if (is16BitEquvalent(spec->name, specWithOpsize->name)) { + + const char *specName = x86DisassemblerGetInstrName(instructionID, miiArg); + const char *specWithOpSizeSizeName = + x86DisassemblerGetInstrName(instructionIDWithOpsize, miiArg); + + if (is16BitEquvalent(specName, specWithOpSizeSizeName)) { insn->instructionID = instructionIDWithOpsize; insn->spec = specWithOpsize; } else { @@ -1608,6 +1612,7 @@ int decodeInstruction(struct InternalInstruction* insn, void* readerArg, dlog_t logger, void* loggerArg, + void* miiArg, uint64_t startLoc, DisassemblerMode mode) { memset(insn, 0, sizeof(struct InternalInstruction)); @@ -1623,7 +1628,7 @@ int decodeInstruction(struct InternalInstruction* insn, if (readPrefixes(insn) || readOpcode(insn) || - getID(insn) || + getID(insn, miiArg) || insn->instructionID == 0 || readOperands(insn)) return -1; |