mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
ARM: fix assert on unpredictable POP instruction.
POP instructions are aliased to the ARM LDM variants but have different syntax. This caused two problems: we tried to access a non-existent operand to annotate the '!', and the error message didn't make much sense. With some vigorous hand-waving in the error message both problems can be fixed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193322 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1a03bec227
commit
cdd776d13f
@ -5466,9 +5466,8 @@ validateInstruction(MCInst &Inst,
|
|||||||
case ARM::t2STMIA_UPD:
|
case ARM::t2STMIA_UPD:
|
||||||
case ARM::t2STMDB_UPD: {
|
case ARM::t2STMDB_UPD: {
|
||||||
if (listContainsReg(Inst, 3, Inst.getOperand(0).getReg()))
|
if (listContainsReg(Inst, 3, Inst.getOperand(0).getReg()))
|
||||||
return Error(Operands[4]->getStartLoc(),
|
return Error(Operands.back()->getStartLoc(),
|
||||||
"writeback operator '!' not allowed when base register "
|
"writeback register not allowed in register list");
|
||||||
"in register list");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ARM::tMUL: {
|
case ARM::tMUL: {
|
||||||
|
@ -433,6 +433,8 @@
|
|||||||
ldm r2!, {r2, r3}
|
ldm r2!, {r2, r3}
|
||||||
ldmdb r2!, {r2, r3}
|
ldmdb r2!, {r2, r3}
|
||||||
ldmda r2!, {r2, r3}
|
ldmda r2!, {r2, r3}
|
||||||
@ CHECK-ERRORS: error: writeback operator '!' not allowed when base register in register list
|
popeq {sp}
|
||||||
@ CHECK-ERRORS: error: writeback operator '!' not allowed when base register in register list
|
@ CHECK-ERRORS: error: writeback register not allowed in register list
|
||||||
@ CHECK-ERRORS: error: writeback operator '!' not allowed when base register in register list
|
@ CHECK-ERRORS: error: writeback register not allowed in register list
|
||||||
|
@ CHECK-ERRORS: error: writeback register not allowed in register list
|
||||||
|
@ CHECK-ERRORS: error: writeback register not allowed in register list
|
||||||
|
@ -71,7 +71,7 @@ error: invalid operand for instruction
|
|||||||
@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list
|
@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list
|
||||||
@ CHECK-ERRORS-V8: ldm r2!, {r2, r3, r4, r10}
|
@ CHECK-ERRORS-V8: ldm r2!, {r2, r3, r4, r10}
|
||||||
@ CHECK-ERRORS-V8: ^
|
@ CHECK-ERRORS-V8: ^
|
||||||
@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list
|
@ CHECK-ERRORS-V8: error: writeback register not allowed in register list
|
||||||
@ CHECK-ERRORS-V8: ldmdb r2!, {r2, r3, r4}
|
@ CHECK-ERRORS-V8: ldmdb r2!, {r2, r3, r4}
|
||||||
@ CHECK-ERRORS-V8: ^
|
@ CHECK-ERRORS-V8: ^
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ error: invalid operand for instruction
|
|||||||
@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list
|
@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list
|
||||||
@ CHECK-ERRORS-V8: stm r2!, {r2, r9}
|
@ CHECK-ERRORS-V8: stm r2!, {r2, r9}
|
||||||
@ CHECK-ERRORS-V8: ^
|
@ CHECK-ERRORS-V8: ^
|
||||||
@ CHECK-ERRORS-V8: error: writeback operator '!' not allowed when base register in register list
|
@ CHECK-ERRORS-V8: error: writeback register not allowed in register list
|
||||||
@ CHECK-ERRORS-V8: stmdb r2!, {r0, r2}
|
@ CHECK-ERRORS-V8: stmdb r2!, {r0, r2}
|
||||||
@ CHECK-ERRORS-V8: ^
|
@ CHECK-ERRORS-V8: ^
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user