mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-04 18:58:44 +00:00
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
This commit is contained in:
parent
a9608f7f0e
commit
793e2aaa73
@ -2463,12 +2463,14 @@ class LDRTImmediate<bit has_offset, string args, dag iops>
|
||||
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<bit has_offset, string args, dag iops>
|
||||
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<bit has_offset, string args, dag iops>
|
||||
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<bit has_offset, string args, dag iops>
|
||||
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)>;
|
||||
}
|
||||
|
12
test/MC/Disassembler/ARM/addrmode2-reencoding.txt
Normal file
12
test/MC/Disassembler/ARM/addrmode2-reencoding.txt
Normal file
@ -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]
|
||||
|
Loading…
Reference in New Issue
Block a user