mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
ARM MCR/MCR2 assembly parsing operand constraints.
The immediate operands are restricted to 0-7. Enforce that when parsing assembly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135189 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5cf9fcdad1
commit
e540c7422c
@ -3649,8 +3649,8 @@ class MovRCopro<string opc, bit direction, dag oops, dag iops,
|
||||
|
||||
def MCR : MovRCopro<"mcr", 0 /* from ARM core register to coprocessor */,
|
||||
(outs),
|
||||
(ins p_imm:$cop, i32imm:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, i32imm:$opc2),
|
||||
(ins p_imm:$cop, imm0_7:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, imm0_7:$opc2),
|
||||
[(int_arm_mcr imm:$cop, imm:$opc1, GPR:$Rt, imm:$CRn,
|
||||
imm:$CRm, imm:$opc2)]>;
|
||||
def MRC : MovRCopro<"mrc", 1 /* from coprocessor to ARM core register */,
|
||||
@ -3686,8 +3686,8 @@ class MovRCopro2<string opc, bit direction, dag oops, dag iops,
|
||||
|
||||
def MCR2 : MovRCopro2<"mcr2", 0 /* from ARM core register to coprocessor */,
|
||||
(outs),
|
||||
(ins p_imm:$cop, i32imm:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, i32imm:$opc2),
|
||||
(ins p_imm:$cop, imm0_7:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, imm0_7:$opc2),
|
||||
[(int_arm_mcr2 imm:$cop, imm:$opc1, GPR:$Rt, imm:$CRn,
|
||||
imm:$CRm, imm:$opc2)]>;
|
||||
def MRC2 : MovRCopro2<"mrc2", 1 /* from coprocessor to ARM core register */,
|
||||
|
@ -3377,13 +3377,13 @@ class t2MovRRCopro<bits<4> Op, string opc, bit direction,
|
||||
/* from ARM core register to coprocessor */
|
||||
def t2MCR : t2MovRCopro<0b1110, "mcr", 0,
|
||||
(outs),
|
||||
(ins p_imm:$cop, i32imm:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, i32imm:$opc2),
|
||||
(ins p_imm:$cop, imm0_7:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, imm0_7:$opc2),
|
||||
[(int_arm_mcr imm:$cop, imm:$opc1, GPR:$Rt, imm:$CRn,
|
||||
imm:$CRm, imm:$opc2)]>;
|
||||
def t2MCR2 : t2MovRCopro<0b1111, "mcr2", 0,
|
||||
(outs), (ins p_imm:$cop, i32imm:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, i32imm:$opc2),
|
||||
(outs), (ins p_imm:$cop, imm0_7:$opc1, GPR:$Rt, c_imm:$CRn,
|
||||
c_imm:$CRm, imm0_7:$opc2),
|
||||
[(int_arm_mcr2 imm:$cop, imm:$opc1, GPR:$Rt, imm:$CRn,
|
||||
imm:$CRm, imm:$opc2)]>;
|
||||
|
||||
|
@ -89,8 +89,6 @@
|
||||
@ CHECK: mrs r8, cpsr @ encoding: [0x00,0x80,0x0f,0xe1]
|
||||
mrs r8, cpsr
|
||||
|
||||
@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
|
||||
mcr p7, #1, r5, c1, c1, #4
|
||||
@ CHECK: mrc p14, #0, r1, c1, c2, #4 @ encoding: [0x92,0x1e,0x11,0xee]
|
||||
mrc p14, #0, r1, c1, c2, #4
|
||||
@ CHECK: mcrr p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x44,0xec]
|
||||
@ -98,8 +96,6 @@
|
||||
@ CHECK: mrrc p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x54,0xec]
|
||||
mrrc p7, #1, r5, r4, c1
|
||||
|
||||
@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
|
||||
mcr2 p7, #1, r5, c1, c1, #4
|
||||
@ CHECK: mrc2 p14, #0, r1, c1, c2, #4 @ encoding: [0x92,0x1e,0x11,0xfe]
|
||||
mrc2 p14, #0, r1, c1, c2, #4
|
||||
@ CHECK: mcrr2 p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x44,0xfc]
|
||||
|
@ -619,6 +619,24 @@ _func:
|
||||
@ CHECK: ldmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe8]
|
||||
@ CHECK: ldmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe9]
|
||||
|
||||
@------------------------------------------------------------------------------
|
||||
@ FIXME: LDR*
|
||||
@------------------------------------------------------------------------------
|
||||
@------------------------------------------------------------------------------
|
||||
@ FIXME: LSL
|
||||
@------------------------------------------------------------------------------
|
||||
@------------------------------------------------------------------------------
|
||||
@ FIXME: LSR
|
||||
@------------------------------------------------------------------------------
|
||||
|
||||
@------------------------------------------------------------------------------
|
||||
@ MCR/MCR2
|
||||
@------------------------------------------------------------------------------
|
||||
mcr p7, #1, r5, c1, c1, #4
|
||||
mcr2 p7, #1, r5, c1, c1, #4
|
||||
|
||||
@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
|
||||
@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
|
||||
|
||||
@------------------------------------------------------------------------------
|
||||
@ STM*
|
||||
|
@ -68,3 +68,13 @@
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ Double-check that we're synced up with the right diagnostics.
|
||||
@ CHECK-ERRORS: dbg #16
|
||||
|
||||
@ Out of range immediate for MCR/MCR2
|
||||
mcr p7, #8, r5, c1, c1, #4
|
||||
mcr p7, #2, r5, c1, c1, #8
|
||||
mcr2 p7, #8, r5, c1, c1, #4
|
||||
mcr2 p7, #1, r5, c1, c1, #8
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
@ CHECK-ERRORS: error: invalid operand for instruction
|
||||
|
Loading…
Reference in New Issue
Block a user