diff --git a/lib/Target/ARM/ARMInstrThumb2.td b/lib/Target/ARM/ARMInstrThumb2.td index d6598e38304f..bf3d820e7b7d 100644 --- a/lib/Target/ARM/ARMInstrThumb2.td +++ b/lib/Target/ARM/ARMInstrThumb2.td @@ -4706,6 +4706,19 @@ def : t2InstSubst<"and${s}${p} $Rd, $Rn, $imm", def : t2InstSubst<"and${s}${p} $Rdn, $imm", (t2BICri rGPR:$Rdn, rGPR:$Rdn, t2_so_imm_not:$imm, pred:$p, cc_out:$s)>; +// And ORR <--> ORN +def : t2InstSubst<"orn${s}${p} $Rd, $Rn, $imm", + (t2ORRri rGPR:$Rd, rGPR:$Rn, t2_so_imm_not:$imm, + pred:$p, cc_out:$s)>; +def : t2InstSubst<"orn${s}${p} $Rdn, $imm", + (t2ORRri rGPR:$Rdn, rGPR:$Rdn, t2_so_imm_not:$imm, + pred:$p, cc_out:$s)>; +def : t2InstSubst<"orr${s}${p} $Rd, $Rn, $imm", + (t2ORNri rGPR:$Rd, rGPR:$Rn, t2_so_imm_not:$imm, + pred:$p, cc_out:$s)>; +def : t2InstSubst<"orr${s}${p} $Rdn, $imm", + (t2ORNri rGPR:$Rdn, rGPR:$Rdn, t2_so_imm_not:$imm, + pred:$p, cc_out:$s)>; // Likewise, "add Rd, t2_so_imm_neg" -> sub def : t2InstSubst<"add${s}${p} $Rd, $Rn, $imm", (t2SUBri GPRnopc:$Rd, GPRnopc:$Rn, t2_so_imm_neg:$imm, diff --git a/test/MC/ARM/negative-immediates-fail.s b/test/MC/ARM/negative-immediates-fail.s index dd45e4316389..959e55eebb5a 100644 --- a/test/MC/ARM/negative-immediates-fail.s +++ b/test/MC/ARM/negative-immediates-fail.s @@ -11,3 +11,8 @@ ADC r0, r1, #0xFFFFFE02 ADD.W r0, r0, #0xFF01FF01 # CHECK: error: immediate operand must be in the range [0,7] + +ORR r0, r1, #0xFFFFFF00 +# CHECK: error: instruction requires: thumb2 +ORN r0, r1, #0xFFFFFF00 +# CHECK: error: instruction requires: thumb2 diff --git a/test/MC/ARM/negative-immediates-thumb1-fail.s b/test/MC/ARM/negative-immediates-thumb1-fail.s index 0e8525ede903..3648721203a0 100644 --- a/test/MC/ARM/negative-immediates-thumb1-fail.s +++ b/test/MC/ARM/negative-immediates-thumb1-fail.s @@ -13,3 +13,8 @@ SUBs r1, r0, #0xFFFFFFF5 SUBs r0, #0xFFFFFEFF # CHECK: error: immediate operand must be in the range [0,255] + +ORRs r0, r1, #0xFFFFFF00 +# CHECK: error: instruction requires: thumb2 +ORNs r0, r1, #0xFFFFFF00 +# CHECK: error: instruction requires: thumb2 diff --git a/test/MC/ARM/negative-immediates.s b/test/MC/ARM/negative-immediates.s index aa3998163d88..38a6bbb1b7b4 100644 --- a/test/MC/ARM/negative-immediates.s +++ b/test/MC/ARM/negative-immediates.s @@ -98,6 +98,22 @@ # CHECK: and r0, r1, #16777472 @ encoding: [0x01,0xf0,0x01,0x20] # CHECK-DISABLED: error: instruction requires: NegativeImmediates # CHECK-DISABLED: BIC + ORR r0, r1, #0xFFFFFF00 +# CHECK-DISABLED: error: instruction requires: NegativeImmediates +# CHECK-DISABLED: ORR +# CHECK: orn r0, r1, #255 + ORR r0, r1, #0xFEFFFEFF +# CHECK: orn r0, r1, #16777472 @ encoding: [0x61,0xf0,0x01,0x20] +# CHECK-DISABLED: error: instruction requires: NegativeImmediates +# CHECK-DISABLED: ORR + ORN r0, r1, #0xFFFFFF00 +# CHECK: orr r0, r1, #255 +# CHECK-DISABLED: error: instruction requires: NegativeImmediates +# CHECK-DISABLED: ORN + ORN r0, r1, #0xFEFFFEFF +# CHECK: orr r0, r1, #16777472 @ encoding: [0x41,0xf0,0x01,0x20] +# CHECK-DISABLED: error: instruction requires: NegativeImmediates +# CHECK-DISABLED: ORN CMP r0, #0xFFFFFF01 # CHECK: cmn.w r0, #255 # CHECK-DISABLED: error: instruction requires: NegativeImmediates