[MC][ARM] Reject Thumb "ror rX, #0"
The ROR instruction can only handle immediates between 1 and 31. The would-be encoding for ROR #0 is actually the RRX instruction. Reviewed By: nickdesaulniers Differential Revision: https://reviews.llvm.org/D102455
This commit is contained in:
parent
757a851a2c
commit
65d0264ba2
@ -2683,7 +2683,7 @@ def : T2Pat<(ARMusat (sra GPRnopc:$Rn, asr_imm:$shft), imm0_31:$pos),
|
||||
defm t2LSL : T2I_sh_ir<0b00, "lsl", imm1_31, shl>;
|
||||
defm t2LSR : T2I_sh_ir<0b01, "lsr", imm_sr, srl>;
|
||||
defm t2ASR : T2I_sh_ir<0b10, "asr", imm_sr, sra>;
|
||||
defm t2ROR : T2I_sh_ir<0b11, "ror", imm0_31, rotr>;
|
||||
defm t2ROR : T2I_sh_ir<0b11, "ror", imm1_31, rotr>;
|
||||
|
||||
// LSL #0 is actually MOV, and has slightly different permitted registers to
|
||||
// LSL with non-zero shift
|
||||
|
@ -49,6 +49,12 @@
|
||||
@ CHECK-ERRORS-V7: operand must be an immediate in the range [0,15]
|
||||
@ CHECK-ERRORS-V8: invalid instruction
|
||||
|
||||
@ Out of range immediate for ROR.
|
||||
@ (Assembling this instruction to "mov r1, r1" might also be OK.)
|
||||
ror r1, r1, #0
|
||||
@ CHECK-ERRORS: invalid instruction
|
||||
@ CHECK-ERRORS: operand must be an immediate in the range [1,31]
|
||||
|
||||
isb #-1
|
||||
isb #16
|
||||
@ CHECK-ERRORS: error: immediate value out of range
|
||||
|
Loading…
x
Reference in New Issue
Block a user