diff options
Diffstat (limited to 'llvm/utils/TableGen')
-rw-r--r-- | llvm/utils/TableGen/X86DisassemblerTables.cpp | 8 | ||||
-rw-r--r-- | llvm/utils/TableGen/X86RecognizableInstr.cpp | 9 |
2 files changed, 12 insertions, 5 deletions
diff --git a/llvm/utils/TableGen/X86DisassemblerTables.cpp b/llvm/utils/TableGen/X86DisassemblerTables.cpp index 959e0fd..06e7ec3 100644 --- a/llvm/utils/TableGen/X86DisassemblerTables.cpp +++ b/llvm/utils/TableGen/X86DisassemblerTables.cpp @@ -213,6 +213,8 @@ static inline bool inheritsFrom(InstructionContext child, (WIG && inheritsFrom(child, IC_EVEX_W_OPSIZE)) || (VEX_LIG && inheritsFrom(child, IC_EVEX_L_OPSIZE)) || (VEX_LIG && inheritsFrom(child, IC_EVEX_L2_OPSIZE)); + case IC_EVEX_OPSIZE_ADSIZE: + return false; case IC_EVEX_K: return (VEX_LIG && WIG && inheritsFrom(child, IC_EVEX_L_W_K)) || (VEX_LIG && WIG && inheritsFrom(child, IC_EVEX_L2_W_K)) || @@ -885,7 +887,9 @@ void DisassemblerTables::emitContextTable(raw_ostream &o, unsigned &i) const { for (unsigned index = 0; index < ATTR_max; ++index) { o.indent(i * 2); - if ((index & ATTR_EVEX) || (index & ATTR_VEX) || (index & ATTR_VEXL)) { + if ((index & ATTR_EVEX) && (index & ATTR_OPSIZE) && (index & ATTR_ADSIZE)) + o << "IC_EVEX_OPSIZE_ADSIZE"; + else if ((index & ATTR_EVEX) || (index & ATTR_VEX) || (index & ATTR_VEXL)) { if (index & ATTR_EVEX) o << "IC_EVEX"; else @@ -906,7 +910,7 @@ void DisassemblerTables::emitContextTable(raw_ostream &o, unsigned &i) const { else if (index & ATTR_XS) o << "_XS"; - if ((index & ATTR_EVEX)) { + if (index & ATTR_EVEX) { if (index & ATTR_EVEXKZ) o << "_KZ"; else if (index & ATTR_EVEXK) diff --git a/llvm/utils/TableGen/X86RecognizableInstr.cpp b/llvm/utils/TableGen/X86RecognizableInstr.cpp index 6e03fc1..47ee954 100644 --- a/llvm/utils/TableGen/X86RecognizableInstr.cpp +++ b/llvm/utils/TableGen/X86RecognizableInstr.cpp @@ -265,9 +265,12 @@ InstructionContext RecognizableInstr::insnContext() const { } } // No L, no W - else if (OpPrefix == X86Local::PD) - insnContext = EVEX_KB(IC_EVEX_OPSIZE); - else if (OpPrefix == X86Local::XD) + else if (OpPrefix == X86Local::PD) { + if (AdSize == X86Local::AdSize32) + insnContext = IC_EVEX_OPSIZE_ADSIZE; + else + insnContext = EVEX_KB(IC_EVEX_OPSIZE); + } else if (OpPrefix == X86Local::XD) insnContext = EVEX_KB(IC_EVEX_XD); else if (OpPrefix == X86Local::XS) insnContext = EVEX_KB(IC_EVEX_XS); |