Add an ARM RSBrr instruction for disassembly only.
authorBob Wilson <bob.wilson@apple.com>
Thu, 5 Aug 2010 18:23:43 +0000 (18:23 +0000)
committerBob Wilson <bob.wilson@apple.com>
Thu, 5 Aug 2010 18:23:43 +0000 (18:23 +0000)
Partial fix for PR7792.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110358 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrInfo.td
test/MC/Disassembler/arm-tests.txt

index 2e78328ff0d99aad84c37c67619b771c56f7b293..2ca241531384b0698ec1f56d1f386fadf8227a24 100644 (file)
@@ -1629,13 +1629,21 @@ defm ADCS : AI1_adde_sube_s_irs<0b0101, "adcs",
 defm SBCS : AI1_adde_sube_s_irs<0b0110, "sbcs",
                           BinOpFrag<(sube_live_carry node:$LHS, node:$RHS) >>;
 
-// These don't define reg/reg forms, because they are handled above.
 def RSBri : AsI1<0b0011, (outs GPR:$dst), (ins GPR:$a, so_imm:$b), DPFrm,
                   IIC_iALUi, "rsb", "\t$dst, $a, $b",
                   [(set GPR:$dst, (sub so_imm:$b, GPR:$a))]> {
     let Inst{25} = 1;
 }
 
+// The reg/reg form is only defined for the disassembler; for codegen it is
+// equivalent to SUBrr.
+def RSBrr : AsI1<0b0011, (outs GPR:$dst), (ins GPR:$a, GPR:$b), DPFrm,
+                  IIC_iALUr, "rsb", "\t$dst, $a, $b",
+                  [/* For disassembly only; pattern left blank */]> {
+    let Inst{25} = 0;
+    let Inst{11-4} = 0b00000000;
+}
+
 def RSBrs : AsI1<0b0011, (outs GPR:$dst), (ins GPR:$a, so_reg:$b), DPSoRegFrm,
                   IIC_iALUsr, "rsb", "\t$dst, $a, $b",
                   [(set GPR:$dst, (sub so_reg:$b, GPR:$a))]> {
index 45f739f11438791bfba126fdbf52bf30a47b52aa..242d5ec1102a6cd0ff4dd53c4cc7fd7c4b5e9824 100644 (file)
 # CHECK:       rfedb   r0!
 0x00 0x0a 0x30 0xf9
 
+# CHECK-NOT:   rsbeq   r0, r2, r0, lsl #0
+# CHECK:       rsbeq   r0, r2, r0
+0x00 0x00 0x62 0x00
+
 # CHECK:       sbcs    r0, pc, #1
 0x01 0x00 0xdf 0xe2