summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-08-25 18:30:18 +0000
committerOwen Anderson <resistor@mac.com>2011-08-25 18:30:18 +0000
commit5e30972cfff2a49cb0d5952a74cc10c10b996112 (patch)
tree5d7d6c296f993e9a51082dbdd61500d214d8400f
parent69e9464340af6889c163bd867c2b5b8812b7985a (diff)
downloadbcm5719-llvm-5e30972cfff2a49cb0d5952a74cc10c10b996112.tar.gz
bcm5719-llvm-5e30972cfff2a49cb0d5952a74cc10c10b996112.zip
Port over additional encoding tests to decoding tests, and fix an operand ordering bug this exposed.
llvm-svn: 138575
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp2
-rw-r--r--llvm/test/MC/Disassembler/ARM/thumb1.txt31
2 files changed, 32 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
index 83a8f800608..0d945fdf591 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
@@ -2539,8 +2539,8 @@ static DecodeStatus DecodeThumbAddSPReg(llvm::MCInst &Inst, uint16_t Insn,
Rdm |= fieldFromInstruction16(Insn, 7, 1) << 3;
CHECK(S, DecodeGPRRegisterClass(Inst, Rdm, Address, Decoder));
- Inst.addOperand(MCOperand::CreateReg(ARM::SP));
CHECK(S, DecodeGPRRegisterClass(Inst, Rdm, Address, Decoder));
+ Inst.addOperand(MCOperand::CreateReg(ARM::SP));
} else if (Inst.getOpcode() == ARM::tADDspr) {
unsigned Rm = fieldFromInstruction16(Insn, 3, 4);
diff --git a/llvm/test/MC/Disassembler/ARM/thumb1.txt b/llvm/test/MC/Disassembler/ARM/thumb1.txt
index d07cd84abce..3e0722d32ef 100644
--- a/llvm/test/MC/Disassembler/ARM/thumb1.txt
+++ b/llvm/test/MC/Disassembler/ARM/thumb1.txt
@@ -29,6 +29,29 @@
0x42 0x44
#------------------------------------------------------------------------------
+# ADD (SP plus immediate)
+#------------------------------------------------------------------------------
+# CHECK: add sp, #508
+# CHECK: add sp, #4
+# CHECK: add r2, sp, #8
+# CHECK: add r2, sp, #1020
+
+0x7f 0xb0
+0x01 0xb0
+0x02 0xaa
+0xff 0xaa
+
+
+#------------------------------------------------------------------------------
+# ADD (SP plus register)
+#------------------------------------------------------------------------------
+# CHECK: add sp, r3
+# CHECK: add r2, sp, r2
+
+0x9d 0x44
+0x6a 0x44
+
+#------------------------------------------------------------------------------
# ASR (immediate)
#------------------------------------------------------------------------------
# CHECK: asrs r2, r3, #32
@@ -442,6 +465,14 @@
0xd1 0x1a
+#------------------------------------------------------------------------------
+# SUB (SP minus immediate)
+#------------------------------------------------------------------------------
+# CHECK: sub sp, #12
+# CHECK: sub sp, #508
+
+0x83 0xb0
+0xff 0xb0
#------------------------------------------------------------------------------
# SVC
OpenPOWER on IntegriCloud