mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-14 14:24:05 +00:00
LLVM combines the offset mode of A8.6.199 A1 & A2 into STRBT.
The insufficient encoding information of the combined instruction confuses the decoder wrt UQADD16. Add extra logic to recover from that. Fixed an assert reported by Sean Callanan git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127354 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -94,6 +94,9 @@ static unsigned decodeARMInstruction(uint32_t &insn) {
|
|||||||
// As a result, the decoder fails to deocode USAT properly.
|
// As a result, the decoder fails to deocode USAT properly.
|
||||||
if (slice(insn, 27, 21) == 0x37 && slice(insn, 5, 4) == 1)
|
if (slice(insn, 27, 21) == 0x37 && slice(insn, 5, 4) == 1)
|
||||||
return ARM::USAT;
|
return ARM::USAT;
|
||||||
|
// As a result, the decoder fails to deocode UQADD16 properly.
|
||||||
|
if (slice(insn, 27, 20) == 0x66 && slice(insn, 7, 4) == 1)
|
||||||
|
return ARM::UQADD16;
|
||||||
|
|
||||||
// Ditto for ADDSrs, which is a super-instruction for A8.6.7 & A8.6.8.
|
// Ditto for ADDSrs, which is a super-instruction for A8.6.7 & A8.6.8.
|
||||||
// As a result, the decoder fails to decode UMULL properly.
|
// As a result, the decoder fails to decode UMULL properly.
|
||||||
|
@ -139,3 +139,6 @@
|
|||||||
|
|
||||||
# CHECK: bx r12
|
# CHECK: bx r12
|
||||||
0x1c 0xff 0x2f 0xe1
|
0x1c 0xff 0x2f 0xe1
|
||||||
|
|
||||||
|
# CHECK: uqadd16mi r6, r11, r8
|
||||||
|
0x18 0x60 0x6b 0x46
|
||||||
|
Reference in New Issue
Block a user