From 7782a58b87923cc293d4e4422729ac0a582bb5c1 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Tue, 13 Sep 2011 20:46:26 +0000 Subject: [PATCH] Correct disassembly printing of Thumb2 post-incremented LDRD and STRD. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139639 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMInstrThumb2.td | 4 ++-- lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp | 11 +++++++---- test/MC/Disassembler/ARM/thumb2.txt | 11 +++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/Target/ARM/ARMInstrThumb2.td b/lib/Target/ARM/ARMInstrThumb2.td index 4e7787b587a..15ca7244912 100644 --- a/lib/Target/ARM/ARMInstrThumb2.td +++ b/lib/Target/ARM/ARMInstrThumb2.td @@ -1441,7 +1441,7 @@ def t2LDRD_PRE : T2Ii8s4<1, 1, 1, (outs rGPR:$Rt, rGPR:$Rt2, GPR:$wb), def t2LDRD_POST : T2Ii8s4post<0, 1, 1, (outs rGPR:$Rt, rGPR:$Rt2, GPR:$wb), (ins addr_offset_none:$addr, t2am_imm8s4_offset:$imm), - IIC_iLoad_d_ru, "ldrd", "\t$Rt, $Rt2, $addr, $imm", + IIC_iLoad_d_ru, "ldrd", "\t$Rt, $Rt2, $addr$imm", "$addr.base = $wb", []>; def t2STRD_PRE : T2Ii8s4<1, 1, 0, (outs GPR:$wb), @@ -1455,7 +1455,7 @@ def t2STRD_PRE : T2Ii8s4<1, 1, 0, (outs GPR:$wb), def t2STRD_POST : T2Ii8s4post<0, 1, 0, (outs GPR:$wb), (ins rGPR:$Rt, rGPR:$Rt2, addr_offset_none:$addr, t2am_imm8s4_offset:$imm), - IIC_iStore_d_ru, "strd", "\t$Rt, $Rt2, $addr, $imm", + IIC_iStore_d_ru, "strd", "\t$Rt, $Rt2, $addr$imm", "$addr.base = $wb", []>; // T2Ipl (Preload Data/Instruction) signals the memory system of possible future diff --git a/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp b/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp index 6453604b309..7eec0dddf8a 100644 --- a/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp +++ b/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp @@ -842,10 +842,13 @@ void ARMInstPrinter::printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, const MCOperand &MO1 = MI->getOperand(OpNum); int32_t OffImm = (int32_t)MO1.getImm() / 4; // Don't print +0. - if (OffImm < 0) - O << "#-" << -OffImm * 4; - else if (OffImm > 0) - O << "#" << OffImm * 4; + if (OffImm != 0) { + O << ", "; + if (OffImm < 0) + O << "#-" << -OffImm * 4; + else if (OffImm > 0) + O << "#" << OffImm * 4; + } } void ARMInstPrinter::printT2AddrModeSoRegOperand(const MCInst *MI, diff --git a/test/MC/Disassembler/ARM/thumb2.txt b/test/MC/Disassembler/ARM/thumb2.txt index 9618a8736e6..28914f4ad06 100644 --- a/test/MC/Disassembler/ARM/thumb2.txt +++ b/test/MC/Disassembler/ARM/thumb2.txt @@ -945,3 +945,14 @@ 0xf5 0x1b 0x11 0x1d +#------------------------------------------------------------------------------ +# STRD (immediate) +#------------------------------------------------------------------------------ +# CHECK: strd r6, r3, [r5], #-8 +# CHECK-NOT: strd r8, r5, [r5], +# CHECK: strd r7, r4, [r5], #-4 + +0x65 0xe8 0x02 0x63 +0x65 0xe8 0x00 0x85 +0x65 0xe8 0x01 0x74 +