ARM assembly parsing two operand forms for shift instructions.
authorJim Grosbach <grosbach@apple.com>
Tue, 15 Nov 2011 22:27:54 +0000 (22:27 +0000)
committerJim Grosbach <grosbach@apple.com>
Tue, 15 Nov 2011 22:27:54 +0000 (22:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144713 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrInfo.td
test/MC/ARM/basic-arm-instructions.s

index c7772875c364abe3f4df191c1e141316994f3a7b..da3a1be71ba8c2c285a584232afb1f7a24bc029f 100644 (file)
@@ -5023,6 +5023,16 @@ def LSLi : ARMAsmPseudo<"lsl${s}${p} $Rd, $Rm, $imm",
 def RORi : ARMAsmPseudo<"ror${s}${p} $Rd, $Rm, $imm",
                         (ins GPR:$Rd, GPR:$Rm, imm0_31:$imm, pred:$p,
                              cc_out:$s)>;
+// shifter instructions also support a two-operand form.
+def : ARMInstAlias<"asr${s}${p} $Rm, $imm",
+                   (ASRi GPR:$Rm, GPR:$Rm, imm0_32:$imm, pred:$p, cc_out:$s)>;
+def : ARMInstAlias<"lsr${s}${p} $Rm, $imm",
+                   (LSRi GPR:$Rm, GPR:$Rm, imm0_32:$imm, pred:$p, cc_out:$s)>;
+def : ARMInstAlias<"lsl${s}${p} $Rm, $imm",
+                   (LSLi GPR:$Rm, GPR:$Rm, imm0_31:$imm, pred:$p, cc_out:$s)>;
+def : ARMInstAlias<"ror${s}${p} $Rm, $imm",
+                   (RORi GPR:$Rm, GPR:$Rm, imm0_31:$imm, pred:$p, cc_out:$s)>;
+
 
 // 'mul' instruction can be specified with only two operands.
 def : ARMInstAlias<"mul${s}${p} $Rn, $Rm",
index 2217c8aaae50df7ee35da5b3bfc4521a9f6705a8..da216fa335affec97d27c0369ea987b1e5ca4d5b 100644 (file)
@@ -262,10 +262,12 @@ Lforward:
        asr r2, r4, #32
        asr r2, r4, #2
        asr r2, r4, #0
+       asr r4, #2
 
 @ CHECK: asr   r2, r4, #32             @ encoding: [0x44,0x20,0xa0,0xe1]
 @ CHECK: asr   r2, r4, #2              @ encoding: [0x44,0x21,0xa0,0xe1]
 @ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: asr   r4, r4, #2              @ encoding: [0x44,0x41,0xa0,0xe1]
 
 
 @------------------------------------------------------------------------------
@@ -794,10 +796,12 @@ Lforward:
        lsl r2, r4, #31
        lsl r2, r4, #1
        lsl r2, r4, #0
+       lsl r4, #1
 
 @ CHECK: lsl   r2, r4, #31             @ encoding: [0x84,0x2f,0xa0,0xe1]
 @ CHECK: lsl   r2, r4, #1              @ encoding: [0x84,0x20,0xa0,0xe1]
 @ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: lsl   r4, r4, #1              @ encoding: [0x84,0x40,0xa0,0xe1]
 
 
 @------------------------------------------------------------------------------
@@ -806,10 +810,12 @@ Lforward:
        lsr r2, r4, #32
        lsr r2, r4, #2
        lsr r2, r4, #0
+       lsr r4, #2
 
 @ CHECK: lsr   r2, r4, #32             @ encoding: [0x24,0x20,0xa0,0xe1]
 @ CHECK: lsr   r2, r4, #2              @ encoding: [0x24,0x21,0xa0,0xe1]
 @ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: lsr   r4, r4, #2              @ encoding: [0x24,0x41,0xa0,0xe1]
 
 
 @------------------------------------------------------------------------------
@@ -1346,10 +1352,12 @@ Lforward:
        ror r2, r4, #31
        ror r2, r4, #1
        ror r2, r4, #0
+       ror r4, #1
 
 @ CHECK: ror   r2, r4, #31             @ encoding: [0xe4,0x2f,0xa0,0xe1]
 @ CHECK: ror   r2, r4, #1              @ encoding: [0xe4,0x20,0xa0,0xe1]
 @ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: ror   r4, r4, #1              @ encoding: [0xe4,0x40,0xa0,0xe1]
 
 
 @------------------------------------------------------------------------------