From 793e2aaa73dfd19ee223ccad24f8b7a6de53812a Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 10 Jan 2014 16:22:47 +0000 Subject: ARM: fix regression caused by r198914 The disassembler would no longer be able to disambiguage between the two variants (explicit immediate #0 vs implicit, omitted #0) for the ldrt, strt, ldrbt, strbt mnemonics as both versions indicated the disassembler routine. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198944 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMInstrInfo.td | 25 +++++++++++++++-------- test/MC/Disassembler/ARM/addrmode2-reencoding.txt | 12 +++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 test/MC/Disassembler/ARM/addrmode2-reencoding.txt diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index ad134d3f99..3d38cc9896 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -2463,12 +2463,14 @@ class LDRTImmediate let Inst{21} = 1; // overwrite let Inst{19-16} = addr; let Inst{11-0} = !if(has_offset, offset{11-0}, 0); - let DecoderMethod = "DecodeAddrMode2IdxInstruction"; } def LDRT_POST_IMM : LDRTImmediate<1, "\t$Rt, $addr, $offset", - (ins addr_offset_none:$addr, am2offset_imm:$offset)>; + (ins addr_offset_none:$addr, am2offset_imm:$offset)> { + let DecoderMethod = "DecodeAddrMode2IdxInstruction"; +} + def LDRT_POST_IMM_0 : LDRTImmediate<0, "\t$Rt, $addr", (ins addr_offset_none:$addr)>; @@ -2504,12 +2506,14 @@ class LDRBTImmediate let Inst{21} = 1; // overwrite let Inst{19-16} = addr; let Inst{11-0} = !if(has_offset, offset{11-0}, 0); - let DecoderMethod = "DecodeAddrMode2IdxInstruction"; } def LDRBT_POST_IMM : LDRBTImmediate<1, "\t$Rt, $addr, $offset", - (ins addr_offset_none:$addr, am2offset_imm:$offset)>; + (ins addr_offset_none:$addr, am2offset_imm:$offset)> { + let DecoderMethod = "DecodeAddrMode2IdxInstruction"; +} + def LDRBT_POST_IMM_0 : LDRBTImmediate<0, "\t$Rt, $addr", (ins addr_offset_none:$addr)>; @@ -2785,12 +2789,15 @@ class STRBTImmediate let Inst{21} = 1; // overwrite let Inst{19-16} = addr; let Inst{11-0} = !if(has_offset, offset{11-0}, 0); - let DecoderMethod = "DecodeAddrMode2IdxInstruction"; } def STRBT_POST_IMM : STRBTImmediate<1, "\t$Rt, $addr, $offset", - (ins GPR:$Rt, addr_offset_none:$addr, am2offset_imm:$offset)>; + (ins GPR:$Rt, addr_offset_none:$addr, am2offset_imm:$offset)> { + let DecoderMethod = "DecodeAddrMode2IdxInstruction"; +} + + def STRBT_POST_IMM_0 : STRBTImmediate<0, "\t$Rt, $addr", (ins GPR:$Rt, addr_offset_none:$addr)>; @@ -2826,12 +2833,14 @@ class STRTImmediate let Inst{21} = 1; // overwrite let Inst{19-16} = addr; let Inst{11-0} = !if(has_offset, offset{11-0}, 0); - let DecoderMethod = "DecodeAddrMode2IdxInstruction"; } def STRT_POST_IMM : STRTImmediate<1, "\t$Rt, $addr, $offset", - (ins GPR:$Rt, addr_offset_none:$addr, am2offset_imm:$offset)>; + (ins GPR:$Rt, addr_offset_none:$addr, am2offset_imm:$offset)> { + let DecoderMethod = "DecodeAddrMode2IdxInstruction"; +} + def STRT_POST_IMM_0 : STRTImmediate<0, "\t$Rt, $addr", (ins GPR:$Rt, addr_offset_none:$addr)>; } diff --git a/test/MC/Disassembler/ARM/addrmode2-reencoding.txt b/test/MC/Disassembler/ARM/addrmode2-reencoding.txt new file mode 100644 index 0000000000..128b4b971c --- /dev/null +++ b/test/MC/Disassembler/ARM/addrmode2-reencoding.txt @@ -0,0 +1,12 @@ +# RUN: llvm-mc -triple armv7 -show-encoding -disassemble < %s | FileCheck %s + +0x00 0x10 0xb0 0xe4 +0x00 0x10 0xf0 0xe4 +0x00 0x10 0xa0 0xe4 +0x00 0x10 0xe0 0xe4 + +# CHECK: ldrt r1, [r0] @ encoding: [0x00,0x10,0xb0,0xe4] +# CHECK: ldrbt r1, [r0] @ encoding: [0x00,0x10,0xf0,0xe4] +# CHECK: strt r1, [r0] @ encoding: [0x00,0x10,0xa0,0xe4] +# CHECK: strbt r1, [r0] @ encoding: [0x00,0x10,0xe0,0xe4] + -- cgit v1.2.3