mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Thumb2 ADD/SUB instructions encoding selection outside IT block.
Outside an IT block, "add r3, #2" should select a 32-bit wide encoding rather than generating an error indicating the 16-bit encoding is only legal in an IT block (outside, the 'S' suffic is required for the 16-bit encoding). rdar://10348481 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143201 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
be5d6bcfc6
commit
5d0492cfc4
@ -3861,6 +3861,16 @@ def : t2InstAlias<"add${s}${p} $Rd, $Rn, $Rm",
|
||||
def : t2InstAlias<"add${s}${p} $Rd, $Rn, $ShiftedRm",
|
||||
(t2ADDrs GPRnopc:$Rd, GPRnopc:$Rn, t2_so_reg:$ShiftedRm,
|
||||
pred:$p, cc_out:$s)>;
|
||||
// ... and with the destination and source register combined.
|
||||
def : t2InstAlias<"add${s}${p} $Rdn, $imm",
|
||||
(t2ADDri GPRnopc:$Rdn, GPRnopc:$Rdn, t2_so_imm:$imm, pred:$p, cc_out:$s)>;
|
||||
def : t2InstAlias<"add${p} $Rdn, $imm",
|
||||
(t2ADDri12 GPRnopc:$Rdn, GPRnopc:$Rdn, imm0_4095:$imm, pred:$p)>;
|
||||
def : t2InstAlias<"add${s}${p} $Rdn, $Rm",
|
||||
(t2ADDrr GPRnopc:$Rdn, GPRnopc:$Rdn, rGPR:$Rm, pred:$p, cc_out:$s)>;
|
||||
def : t2InstAlias<"add${s}${p} $Rdn, $ShiftedRm",
|
||||
(t2ADDrs GPRnopc:$Rdn, GPRnopc:$Rdn, t2_so_reg:$ShiftedRm,
|
||||
pred:$p, cc_out:$s)>;
|
||||
|
||||
// Aliases for SUB without the ".w" optional width specifier.
|
||||
def : t2InstAlias<"sub${s}${p} $Rd, $Rn, $imm",
|
||||
@ -3872,6 +3882,17 @@ def : t2InstAlias<"sub${s}${p} $Rd, $Rn, $Rm",
|
||||
def : t2InstAlias<"sub${s}${p} $Rd, $Rn, $ShiftedRm",
|
||||
(t2SUBrs GPRnopc:$Rd, GPRnopc:$Rn, t2_so_reg:$ShiftedRm,
|
||||
pred:$p, cc_out:$s)>;
|
||||
// ... and with the destination and source register combined.
|
||||
def : t2InstAlias<"sub${s}${p} $Rdn, $imm",
|
||||
(t2SUBri GPRnopc:$Rdn, GPRnopc:$Rdn, t2_so_imm:$imm, pred:$p, cc_out:$s)>;
|
||||
def : t2InstAlias<"sub${p} $Rdn, $imm",
|
||||
(t2SUBri12 GPRnopc:$Rdn, GPRnopc:$Rdn, imm0_4095:$imm, pred:$p)>;
|
||||
def : t2InstAlias<"sub${s}${p} $Rdn, $Rm",
|
||||
(t2SUBrr GPRnopc:$Rdn, GPRnopc:$Rdn, rGPR:$Rm, pred:$p, cc_out:$s)>;
|
||||
def : t2InstAlias<"sub${s}${p} $Rdn, $ShiftedRm",
|
||||
(t2SUBrs GPRnopc:$Rdn, GPRnopc:$Rdn, t2_so_reg:$ShiftedRm,
|
||||
pred:$p, cc_out:$s)>;
|
||||
|
||||
|
||||
// Alias for compares without the ".w" optional width specifier.
|
||||
def : t2InstAlias<"cmn${p} $Rn, $Rm",
|
||||
|
@ -73,6 +73,7 @@ _func:
|
||||
add r12, r6, #0x100
|
||||
addw r12, r6, #0x100
|
||||
adds r1, r2, #0x1f0
|
||||
add r2, #1
|
||||
|
||||
@ CHECK: itet eq @ encoding: [0x0a,0xbf]
|
||||
@ CHECK: addeq r1, r2, #4 @ encoding: [0x11,0x1d]
|
||||
@ -85,6 +86,7 @@ _func:
|
||||
@ CHECK: add.w r12, r6, #256 @ encoding: [0x06,0xf5,0x80,0x7c]
|
||||
@ CHECK: addw r12, r6, #256 @ encoding: [0x06,0xf2,0x00,0x1c]
|
||||
@ CHECK: adds.w r1, r2, #496 @ encoding: [0x12,0xf5,0xf8,0x71]
|
||||
@ CHECK: add.w r2, r2, #1 @ encoding: [0x02,0xf1,0x01,0x02]
|
||||
|
||||
|
||||
@------------------------------------------------------------------------------
|
||||
@ -2533,6 +2535,7 @@ _func:
|
||||
sub r12, r6, #0x100
|
||||
subw r12, r6, #0x100
|
||||
subs r1, r2, #0x1f0
|
||||
sub r2, #1
|
||||
|
||||
@ CHECK: itet eq @ encoding: [0x0a,0xbf]
|
||||
@ CHECK: subeq r1, r2, #4 @ encoding: [0x11,0x1f]
|
||||
@ -2545,6 +2548,7 @@ _func:
|
||||
@ CHECK: sub.w r12, r6, #256 @ encoding: [0xa6,0xf5,0x80,0x7c]
|
||||
@ CHECK: subw r12, r6, #256 @ encoding: [0xa6,0xf2,0x00,0x1c]
|
||||
@ CHECK: subs.w r1, r2, #496 @ encoding: [0xb2,0xf5,0xf8,0x71]
|
||||
@ CHECK: sub.w r2, r2, #1 @ encoding: [0xa2,0xf1,0x01,0x02]
|
||||
|
||||
|
||||
@------------------------------------------------------------------------------
|
||||
|
@ -125,10 +125,10 @@ error: invalid operand for instruction
|
||||
add sp, #3
|
||||
add sp, sp, #512
|
||||
add r2, sp, #1024
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
|
||||
@ CHECK-ERRORS: add sp, #-1
|
||||
@ CHECK-ERRORS: ^
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
|
||||
@ CHECK-ERRORS: add sp, #3
|
||||
@ CHECK-ERRORS: ^
|
||||
@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
|
||||
|
Loading…
Reference in New Issue
Block a user