diff options
| author | Jim Grosbach <grosbach@apple.com> | 2011-07-19 21:59:29 +0000 | 
|---|---|---|
| committer | Jim Grosbach <grosbach@apple.com> | 2011-07-19 21:59:29 +0000 | 
| commit | 80d01dd3d19a84621324ac444c6749602df7a513 (patch) | |
| tree | 9684806ada83c04be89601fe76d6e59ff62140b7 /lib/Target | |
| parent | f1a009007374d8ae1c1565f34d9cea3b83665e5f (diff) | |
| download | external_llvm-80d01dd3d19a84621324ac444c6749602df7a513.zip external_llvm-80d01dd3d19a84621324ac444c6749602df7a513.tar.gz external_llvm-80d01dd3d19a84621324ac444c6749602df7a513.tar.bz2  | |
ARM assembly parsing of MRS instruction.
Teach the parser to recognize the APSR and SPSR system register names. Add
and update tests accordingly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135527 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
| -rw-r--r-- | lib/Target/ARM/ARMInstrInfo.td | 12 | ||||
| -rw-r--r-- | lib/Target/ARM/ARMRegisterInfo.td | 6 | 
2 files changed, 11 insertions, 7 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index cd0e2a1..23a7c1b 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -3769,20 +3769,22 @@ def MCRR2 : MovRRCopro2<"mcrr2", 0 /* from ARM core register to coprocessor */,  def MRRC2 : MovRRCopro2<"mrrc2", 1 /* from coprocessor to ARM core register */>;  //===----------------------------------------------------------------------===// -// Move between special register and ARM core register -- for disassembly only +// Move between special register and ARM core register  //  // Move to ARM core register from Special Register -def MRS : ABI<0b0001, (outs GPR:$Rd), (ins), NoItinerary, "mrs", "\t$Rd, cpsr", -              [/* For disassembly only; pattern left blank */]> { +def MRS : ABI<0b0001, (outs GPR:$Rd), (ins), NoItinerary, +              "mrs", "\t$Rd, apsr", []> {    bits<4> Rd;    let Inst{23-16} = 0b00001111;    let Inst{15-12} = Rd;    let Inst{7-4} = 0b0000;  } -def MRSsys : ABI<0b0001, (outs GPR:$Rd), (ins), NoItinerary,"mrs","\t$Rd, spsr", -              [/* For disassembly only; pattern left blank */]> { +def : InstAlias<"mrs${p} $Rd, cpsr", (MRS GPR:$Rd, pred:$p)>, Requires<[IsARM]>; + +def MRSsys : ABI<0b0001, (outs GPR:$Rd), (ins), NoItinerary, +                 "mrs", "\t$Rd, spsr", []> {    bits<4> Rd;    let Inst{23-16} = 0b01001111;    let Inst{15-12} = Rd; diff --git a/lib/Target/ARM/ARMRegisterInfo.td b/lib/Target/ARM/ARMRegisterInfo.td index 76eb496..98357d4 100644 --- a/lib/Target/ARM/ARMRegisterInfo.td +++ b/lib/Target/ARM/ARMRegisterInfo.td @@ -182,8 +182,10 @@ def QQQQ3 : ARMReg<3, "qqqq3", [QQ6, QQ7]>;  // Current Program Status Register.  def CPSR    : ARMReg<0, "cpsr">; -def FPSCR   : ARMReg<1, "fpscr">; -def ITSTATE : ARMReg<2, "itstate">; +def APSR    : ARMReg<1, "apsr">; +def SPSR    : ARMReg<2, "spsr">; +def FPSCR   : ARMReg<3, "fpscr">; +def ITSTATE : ARMReg<4, "itstate">;  // Special Registers - only available in privileged mode.  def FPSID   : ARMReg<0, "fpsid">;  | 
