Fix disassembly of Thumb2 LDRSH with a #-0 offset.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139943 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2011-09-16 21:08:33 +00:00
parent 642caea2c6
commit 705b48ff86
3 changed files with 9 additions and 3 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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)