Improve error checking for tPUSH and tPOP register lists.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138295 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Grosbach 2011-08-22 23:17:34 +00:00
parent 796c3659c9
commit 6dcafc0d0b
2 changed files with 32 additions and 0 deletions

View File

@ -3109,6 +3109,26 @@ validateInstruction(MCInst &Inst,
break;
}
case ARM::tPOP: {
for (unsigned i = 2; i < Inst.getNumOperands(); ++i) {
unsigned Reg = Inst.getOperand(i).getReg();
// Anything other than a low register isn't legal here.
if (!isARMLowRegister(Reg) && Reg != ARM::PC)
return Error(Operands[2]->getStartLoc(),
"registers must be in range r0-r7 or pc");
}
break;
}
case ARM::tPUSH: {
for (unsigned i = 2; i < Inst.getNumOperands(); ++i) {
unsigned Reg = Inst.getOperand(i).getReg();
// Anything other than a low register isn't legal here.
if (!isARMLowRegister(Reg) && Reg != ARM::LR)
return Error(Operands[2]->getStartLoc(),
"registers must be in range r0-r7 or lr");
}
break;
}
}
return false;

View File

@ -57,6 +57,18 @@ error: invalid operand for instruction
@ CHECK-ERRORS: ^
@ Invalid writeback and register lists for PUSH/POP
pop {r1, r2, r10}
push {r8, r9}
@ CHECK-ERRORS: error: registers must be in range r0-r7 or pc
@ CHECK-ERRORS: pop {r1, r2, r10}
@ CHECK-ERRORS: ^
@ CHECK-ERRORS: error: registers must be in range r0-r7 or lr
@ CHECK-ERRORS: push {r8, r9}
@ CHECK-ERRORS: ^
@ Out of range immediates for LSL instruction.
lsls r4, r5, #-1
lsls r4, r5, #32