mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 21:20:37 +00:00
Fix disassembling of reverse register/register forms of ADD/SUB/XOR/OR/AND/SBB/ADC/CMP/MOV.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139485 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
842f58f9be
commit
038197988b
@ -650,6 +650,15 @@ class BinOpRR_Rev<bits<8> opcode, string mnemonic, X86TypeInfo typeinfo>
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
// BinOpRR_F_Rev - Instructions like "cmp reg, reg" (reversed encoding).
|
||||
class BinOpRR_F_Rev<bits<8> opcode, string mnemonic, X86TypeInfo typeinfo>
|
||||
: ITy<opcode, MRMSrcReg, typeinfo, (outs),
|
||||
(ins typeinfo.RegClass:$src1, typeinfo.RegClass:$src2),
|
||||
mnemonic, "{$src2, $src1|$src1, $src2}", []> {
|
||||
// The disassembler should know about this, but not the asmparser.
|
||||
let isCodeGenOnly = 1;
|
||||
}
|
||||
|
||||
// BinOpRM - Instructions like "add reg, reg, [mem]".
|
||||
class BinOpRM<bits<8> opcode, string mnemonic, X86TypeInfo typeinfo,
|
||||
dag outlist, list<dag> pattern>
|
||||
@ -1017,10 +1026,10 @@ multiclass ArithBinOp_F<bits<8> BaseOpc, bits<8> BaseOpc2, bits<8> BaseOpc4,
|
||||
def #NAME#64rr : BinOpRR_F<BaseOpc, mnemonic, Xi64, opnode>;
|
||||
} // isCommutable
|
||||
|
||||
def #NAME#8rr_REV : BinOpRR_Rev<BaseOpc2, mnemonic, Xi8>;
|
||||
def #NAME#16rr_REV : BinOpRR_Rev<BaseOpc2, mnemonic, Xi16>;
|
||||
def #NAME#32rr_REV : BinOpRR_Rev<BaseOpc2, mnemonic, Xi32>;
|
||||
def #NAME#64rr_REV : BinOpRR_Rev<BaseOpc2, mnemonic, Xi64>;
|
||||
def #NAME#8rr_REV : BinOpRR_F_Rev<BaseOpc2, mnemonic, Xi8>;
|
||||
def #NAME#16rr_REV : BinOpRR_F_Rev<BaseOpc2, mnemonic, Xi16>;
|
||||
def #NAME#32rr_REV : BinOpRR_F_Rev<BaseOpc2, mnemonic, Xi32>;
|
||||
def #NAME#64rr_REV : BinOpRR_F_Rev<BaseOpc2, mnemonic, Xi64>;
|
||||
|
||||
def #NAME#8rm : BinOpRM_F<BaseOpc2, mnemonic, Xi8 , opnode>;
|
||||
def #NAME#16rm : BinOpRM_F<BaseOpc2, mnemonic, Xi16, opnode>;
|
||||
|
@ -161,3 +161,15 @@
|
||||
|
||||
# CHECK: pause
|
||||
0xf3 0x90
|
||||
|
||||
# CHECK: addl %eax, %edi
|
||||
0x01 0xc7
|
||||
|
||||
# CHECK: addl %edi, %eax
|
||||
0x03 0xc7
|
||||
|
||||
# CHECK: movl %eax, %edi
|
||||
0x89 0xc7
|
||||
|
||||
# CHECK: movl %edi, %eax
|
||||
0x8b 0xc7
|
||||
|
@ -345,7 +345,7 @@ RecognizableInstr::filter_ret RecognizableInstr::filter() const {
|
||||
return FILTER_STRONG;
|
||||
|
||||
if (Form == X86Local::Pseudo ||
|
||||
IsCodeGenOnly)
|
||||
(IsCodeGenOnly && Name.find("_REV") == Name.npos))
|
||||
return FILTER_STRONG;
|
||||
|
||||
if (Form == X86Local::MRMInitReg)
|
||||
|
Loading…
Reference in New Issue
Block a user