summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-09-16 21:08:33 +0000
committerOwen Anderson <resistor@mac.com>2011-09-16 21:08:33 +0000
commitfe82365cb04bb30072384d786e55e01bd15733e3 (patch)
tree0382165f2b188e269d1f352e71a8cc5ad948996f
parent92606beeae874da1d0a3b2f7ca8ec4ec6ab225a9 (diff)
downloadbcm5719-llvm-fe82365cb04bb30072384d786e55e01bd15733e3.tar.gz
bcm5719-llvm-fe82365cb04bb30072384d786e55e01bd15733e3.zip
Fix disassembly of Thumb2 LDRSH with a #-0 offset.
llvm-svn: 139943
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp5
-rw-r--r--llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp4
-rw-r--r--llvm/test/MC/Disassembler/ARM/thumb2.txt3
3 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
index 685b921b4ed..2818e77afc9 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
@@ -2731,7 +2731,10 @@ static DecodeStatus DecodeT2AddrModeImm0_1020s4(llvm::MCInst &Inst,unsigned Val,
static DecodeStatus DecodeT2Imm8(llvm::MCInst &Inst, unsigned Val,
uint64_t Address, const void *Decoder) {
int imm = Val & 0xFF;
- if (!(Val & 0x100)) imm *= -1;
+ if (Val == 0)
+ imm = INT32_MIN;
+ else if (!(Val & 0x100))
+ imm *= -1;
Inst.addOperand(MCOperand::CreateImm(imm));
return MCDisassembler::Success;
diff --git a/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp b/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
index 0a0f1d07b53..0cae4776273 100644
--- a/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
+++ b/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
@@ -802,7 +802,9 @@ void ARMInstPrinter::printT2AddrModeImm8Operand(const MCInst *MI,
int32_t OffImm = (int32_t)MO2.getImm();
// Don't print +0.
- if (OffImm < 0)
+ if (OffImm == INT32_MIN)
+ O << ", #-0";
+ else if (OffImm < 0)
O << ", #-" << -OffImm;
else if (OffImm > 0)
O << ", #" << OffImm;
diff --git a/llvm/test/MC/Disassembler/ARM/thumb2.txt b/llvm/test/MC/Disassembler/ARM/thumb2.txt
index bf1328afe05..dea590e5943 100644
--- a/llvm/test/MC/Disassembler/ARM/thumb2.txt
+++ b/llvm/test/MC/Disassembler/ARM/thumb2.txt
@@ -751,13 +751,14 @@
# CHECK: ldrsh.w r5, [r6, #33]
# CHECK: ldrsh.w r5, [r6, #257]
# CHECK: ldrsh.w lr, [r7, #257]
+# CHECK: ldrsh r10, [r5, #-0]
0x35 0xf9 0x04 0x5c
0xb6 0xf9 0x20 0x50
0xb6 0xf9 0x21 0x50
0xb6 0xf9 0x01 0x51
0xb7 0xf9 0x01 0xe1
-
+0x35 0xf9 0x00 0xac
#------------------------------------------------------------------------------
# LDRSH(register)
OpenPOWER on IntegriCloud