diff options
author | Craig Topper <craig.topper@gmail.com> | 2012-09-13 05:45:42 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2012-09-13 05:45:42 +0000 |
commit | 963305b4508265ff96a7c2e15ccdfdd2884c39cd (patch) | |
tree | ac2379fba80b0962ee3c14d6720cc0cb1a9976fe /llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c | |
parent | f453907a6d4cec0f70d1c12d20f89d765f5d2eb5 (diff) | |
download | bcm5719-llvm-963305b4508265ff96a7c2e15ccdfdd2884c39cd.tar.gz bcm5719-llvm-963305b4508265ff96a7c2e15ccdfdd2884c39cd.zip |
Add a new compression type to ModRM table that detects when the memory modRM byte represent 8 instructions and the reg modRM byte represents up to 64 instructions. Reduces modRM table from 43k entreis to 25k entries. Based on a patch from Manman Ren.
llvm-svn: 163774
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c')
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c index af444d196eb..b24f5172099 100644 --- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c +++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c @@ -138,6 +138,10 @@ static InstrUID decode(OpcodeType type, if (modFromModRM(modRM) == 0x3) return modRMTable[dec->instructionIDs+((modRM & 0x38) >> 3)+8]; return modRMTable[dec->instructionIDs+((modRM & 0x38) >> 3)]; + case MODRM_SPLITMISC: + if (modFromModRM(modRM) == 0x3) + return modRMTable[dec->instructionIDs+(modRM & 0x3f)+8]; + return modRMTable[dec->instructionIDs+((modRM & 0x38) >> 3)]; case MODRM_FULL: return modRMTable[dec->instructionIDs+modRM]; } |