diff options
author | Rafael Auler <rafaelauler@fb.com> | 2018-02-15 21:20:31 +0000 |
---|---|---|
committer | Rafael Auler <rafaelauler@fb.com> | 2018-02-15 21:20:31 +0000 |
commit | de9ad4ba848729f0826131a947fdbaae98df6d05 (patch) | |
tree | 235da52f857bfe603877b4767a9494b868cb6ab7 /llvm/utils/TableGen/X86DisassemblerTables.cpp | |
parent | 775c7af4f9ff934a85d4b6d521fffc7f5ac26cc0 (diff) | |
download | llvm-de9ad4ba848729f0826131a947fdbaae98df6d05.zip llvm-de9ad4ba848729f0826131a947fdbaae98df6d05.tar.gz llvm-de9ad4ba848729f0826131a947fdbaae98df6d05.tar.bz2 |
[X86][3DNOW] Teach decoder about AMD 3DNow! instrs
Summary:
This patch makes the decoder understand old AMD 3DNow!
instructions that have never been properly supported in the X86
disassembler, despite being supported in other subsystems. Hopefully
this should make the X86 decoder more complete with respect to binaries
containing legacy code.
Reviewers: craig.topper
Reviewed By: craig.topper
Subscribers: llvm-commits, maksfb, bruno
Differential Revision: https://reviews.llvm.org/D43311
llvm-svn: 325295
Diffstat (limited to 'llvm/utils/TableGen/X86DisassemblerTables.cpp')
-rw-r--r-- | llvm/utils/TableGen/X86DisassemblerTables.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/utils/TableGen/X86DisassemblerTables.cpp b/llvm/utils/TableGen/X86DisassemblerTables.cpp index fce41f7..e410af0 100644 --- a/llvm/utils/TableGen/X86DisassemblerTables.cpp +++ b/llvm/utils/TableGen/X86DisassemblerTables.cpp @@ -546,6 +546,8 @@ static inline bool inheritsFrom(InstructionContext child, case IC_EVEX_L2_W_XD_KZ_B: case IC_EVEX_L2_W_OPSIZE_KZ_B: return false; + case IC_3DNOW: + return false; default: errs() << "Unknown instruction class: " << stringForContext((InstructionContext)parent) << "\n"; @@ -888,7 +890,7 @@ void DisassemblerTables::emitInstructionInfo(raw_ostream &o, } void DisassemblerTables::emitContextTable(raw_ostream &o, unsigned &i) const { - const unsigned int tableSize = 16384; + const unsigned int tableSize = 32768; o.indent(i * 2) << "static const uint8_t " CONTEXTS_STR "[" << tableSize << "] = {\n"; i++; @@ -896,7 +898,9 @@ void DisassemblerTables::emitContextTable(raw_ostream &o, unsigned &i) const { for (unsigned index = 0; index < tableSize; ++index) { o.indent(i * 2); - if (index & ATTR_EVEX) { + if (index & ATTR_3DNOW) + o << "IC_3DNOW"; + else if (index & ATTR_EVEX) { o << "IC_EVEX"; if (index & ATTR_EVEXL2) o << "_L2"; |