diff options
| author | Jim Grosbach <grosbach@apple.com> | 2011-07-19 20:35:35 +0000 | 
|---|---|---|
| committer | Jim Grosbach <grosbach@apple.com> | 2011-07-19 20:35:35 +0000 | 
| commit | ccfd9313d11aa29551f93fe99428946837c97729 (patch) | |
| tree | 60fb1a831f61d4d9c89069638995938743b30f53 /lib/Target | |
| parent | cc7ecc72909fe3f2a3eba9e7ac79cd1a13b3e8f2 (diff) | |
| download | external_llvm-ccfd9313d11aa29551f93fe99428946837c97729.zip external_llvm-ccfd9313d11aa29551f93fe99428946837c97729.tar.gz external_llvm-ccfd9313d11aa29551f93fe99428946837c97729.tar.bz2  | |
ARM assembly parsing for MRC/MRC2/MRRC/MRRC2.
Add range checking to the immediate operands. Update tests accordingly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135521 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
| -rw-r--r-- | lib/Target/ARM/ARMInstrInfo.td | 8 | ||||
| -rw-r--r-- | lib/Target/ARM/ARMInstrThumb2.td | 9 | 
2 files changed, 8 insertions, 9 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 04f157b..cd0e2a1 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -3671,8 +3671,8 @@ def MCR : MovRCopro<"mcr", 0 /* from ARM core register to coprocessor */,                                    imm:$CRm, imm:$opc2)]>;  def MRC : MovRCopro<"mrc", 1 /* from coprocessor to ARM core register */,                      (outs GPR:$Rt), -                    (ins p_imm:$cop, i32imm:$opc1, c_imm:$CRn, c_imm:$CRm, -                         i32imm:$opc2), []>; +                    (ins p_imm:$cop, imm0_7:$opc1, c_imm:$CRn, c_imm:$CRm, +                         imm0_7:$opc2), []>;  def : ARMPat<(int_arm_mrc imm:$cop, imm:$opc1, imm:$CRn, imm:$CRm, imm:$opc2),               (MRC imm:$cop, imm:$opc1, imm:$CRn, imm:$CRm, imm:$opc2)>; @@ -3708,8 +3708,8 @@ def MCR2 : MovRCopro2<"mcr2", 0 /* from ARM core register to coprocessor */,                                       imm:$CRm, imm:$opc2)]>;  def MRC2 : MovRCopro2<"mrc2", 1 /* from coprocessor to ARM core register */,                        (outs GPR:$Rt), -                      (ins p_imm:$cop, i32imm:$opc1, c_imm:$CRn, c_imm:$CRm, -                           i32imm:$opc2), []>; +                      (ins p_imm:$cop, imm0_7:$opc1, c_imm:$CRn, c_imm:$CRm, +                           imm0_7:$opc2), []>;  def : ARMV5TPat<(int_arm_mrc2 imm:$cop, imm:$opc1, imm:$CRn,                                imm:$CRm, imm:$opc2), diff --git a/lib/Target/ARM/ARMInstrThumb2.td b/lib/Target/ARM/ARMInstrThumb2.td index 44cb931..d1d0a97 100644 --- a/lib/Target/ARM/ARMInstrThumb2.td +++ b/lib/Target/ARM/ARMInstrThumb2.td @@ -3389,13 +3389,12 @@ def t2MCR2 : t2MovRCopro<0b1111, "mcr2", 0,  /* from coprocessor to ARM core register */  def t2MRC : t2MovRCopro<0b1110, "mrc", 1, -           (outs GPR:$Rt), -           (ins p_imm:$cop, i32imm:$opc1, c_imm:$CRn, c_imm:$CRm, i32imm:$opc2), -           []>; +             (outs GPR:$Rt), (ins p_imm:$cop, imm0_7:$opc1, c_imm:$CRn, +                                  c_imm:$CRm, imm0_7:$opc2), []>;  def t2MRC2 : t2MovRCopro<0b1111, "mrc2", 1, -             (outs GPR:$Rt), (ins p_imm:$cop, i32imm:$opc1, c_imm:$CRn, -                                  c_imm:$CRm, i32imm:$opc2), []>; +             (outs GPR:$Rt), (ins p_imm:$cop, imm0_7:$opc1, c_imm:$CRn, +                                  c_imm:$CRm, imm0_7:$opc2), []>;  def : T2v6Pat<(int_arm_mrc  imm:$cop, imm:$opc1, imm:$CRn, imm:$CRm, imm:$opc2),                (t2MRC imm:$cop, imm:$opc1, imm:$CRn, imm:$CRm, imm:$opc2)>;  | 
