[PowerPC] Support blrl and variants in the asm parser
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 24 Jun 2013 11:01:55 +0000 (11:01 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 24 Jun 2013 11:01:55 +0000 (11:01 +0000)
This patch adds support for blrl and its conditional variants.
The patterns are (currently) used for the asm parser only.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184718 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCInstrInfo.td
test/MC/PowerPC/ppc64-encoding-ext.s

index 4f006024d376b4751d99aad8ca82f29e4d5c3f26..534327056b080559e162be700af26a9d979151a3 100644 (file)
@@ -926,6 +926,14 @@ let isCall = 1, PPC970_Unit = 7, Defs = [LR] in {
     def BCCTRL : XLForm_2_br<19, 528, 1, (outs), (ins pred:$cond),
                              "b${cond:cc}ctrl ${cond:reg}", BrB, []>;
   }
+  let Uses = [LR, RM] in {
+    def BLRL : XLForm_2_ext<19, 16, 20, 0, 1, (outs), (ins),
+                            "blrl", BrB, []>;
+
+    let isCodeGenOnly = 1 in
+    def BCLRL : XLForm_2_br<19, 16, 1, (outs), (ins pred:$cond),
+                            "b${cond:cc}lrl ${cond:reg}", BrB, []>;
+  }
 }
 
 let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1, Uses = [RM] in
@@ -2183,6 +2191,11 @@ multiclass BranchExtendedMnemonic<string name, int bibo> {
   def : InstAlias<"b"#name#"ctr",
                   (BCCTR bibo, CR0)>;
 
+  def : InstAlias<"b"#name#"lrl $cc",
+                  (BCLRL bibo, crrc:$cc)>;
+  def : InstAlias<"b"#name#"lrl",
+                  (BCLRL bibo, CR0)>;
+
   def : InstAlias<"b"#name#"ctrl $cc",
                   (BCCTRL bibo, crrc:$cc)>;
   def : InstAlias<"b"#name#"ctrl",
index 883edbf066065ddb09d8dd1906d43893de34dd99..3c45c60f1feb7339a12e786de7b98fb8481c57b9 100644 (file)
@@ -9,7 +9,8 @@
          blr
 # CHECK: bctr                            # encoding: [0x4e,0x80,0x04,0x20]
          bctr
-# FIXME: blrl
+# CHECK: blrl                            # encoding: [0x4e,0x80,0x00,0x21]
+         blrl
 # CHECK: bctrl                           # encoding: [0x4e,0x80,0x04,0x21]
          bctrl
 
 # FIXME: bltl target
 # FIXME: bltla 2, target
 # FIXME: bltla target
-# FIXME: bltlrl 2
-# FIXME: bltlrl
+# CHECK: bltlrl 2                        # encoding: [0x4d,0x88,0x00,0x21]
+         bltlrl 2
+# CHECK: bltlrl 0                        # encoding: [0x4d,0x80,0x00,0x21]
+         bltlrl
 # CHECK: bltctrl 2                       # encoding: [0x4d,0x88,0x04,0x21]
          bltctrl 2
 # CHECK: bltctrl 0                       # encoding: [0x4d,0x80,0x04,0x21]
 # FIXME: blel target
 # FIXME: blela 2, target
 # FIXME: blela target
-# FIXME: blelrl 2
-# FIXME: blelrl
+# CHECK: blelrl 2                        # encoding: [0x4c,0x89,0x00,0x21]
+         blelrl 2
+# CHECK: blelrl 0                        # encoding: [0x4c,0x81,0x00,0x21]
+         blelrl
 # CHECK: blectrl 2                       # encoding: [0x4c,0x89,0x04,0x21]
          blectrl 2
 # CHECK: blectrl 0                       # encoding: [0x4c,0x81,0x04,0x21]
 # FIXME: beql target
 # FIXME: beqla 2, target
 # FIXME: beqla target
-# FIXME: beqlrl 2
-# FIXME: beqlrl
+# CHECK: beqlrl 2                        # encoding: [0x4d,0x8a,0x00,0x21]
+         beqlrl 2
+# CHECK: beqlrl 0                        # encoding: [0x4d,0x82,0x00,0x21]
+         beqlrl
 # CHECK: beqctrl 2                       # encoding: [0x4d,0x8a,0x04,0x21]
          beqctrl 2
 # CHECK: beqctrl 0                       # encoding: [0x4d,0x82,0x04,0x21]
 # FIXME: bgel target
 # FIXME: bgela 2, target
 # FIXME: bgela target
-# FIXME: bgelrl 2
-# FIXME: bgelrl
+# CHECK: bgelrl 2                        # encoding: [0x4c,0x88,0x00,0x21]
+         bgelrl 2
+# CHECK: bgelrl 0                        # encoding: [0x4c,0x80,0x00,0x21]
+         bgelrl
 # CHECK: bgectrl 2                       # encoding: [0x4c,0x88,0x04,0x21]
          bgectrl 2
 # CHECK: bgectrl 0                       # encoding: [0x4c,0x80,0x04,0x21]
 # FIXME: bgtl target
 # FIXME: bgtla 2, target
 # FIXME: bgtla target
-# FIXME: bgtlrl 2
-# FIXME: bgtlrl
+# CHECK: bgtlrl 2                        # encoding: [0x4d,0x89,0x00,0x21]
+         bgtlrl 2
+# CHECK: bgtlrl 0                        # encoding: [0x4d,0x81,0x00,0x21]
+         bgtlrl
 # CHECK: bgtctrl 2                       # encoding: [0x4d,0x89,0x04,0x21]
          bgtctrl 2
 # CHECK: bgtctrl 0                       # encoding: [0x4d,0x81,0x04,0x21]
 # FIXME: bnll target
 # FIXME: bnlla 2, target
 # FIXME: bnlla target
-# FIXME: bnllrl 2
-# FIXME: bnllrl
+# CHECK: bgelrl 2                        # encoding: [0x4c,0x88,0x00,0x21]
+         bnllrl 2
+# CHECK: bgelrl 0                        # encoding: [0x4c,0x80,0x00,0x21]
+         bnllrl
 # CHECK: bgectrl 2                       # encoding: [0x4c,0x88,0x04,0x21]
          bnlctrl 2
 # CHECK: bgectrl 0                       # encoding: [0x4c,0x80,0x04,0x21]
 # FIXME: bnel target
 # FIXME: bnela 2, target
 # FIXME: bnela target
-# FIXME: bnelrl 2
-# FIXME: bnelrl
+# CHECK: bnelrl 2                        # encoding: [0x4c,0x8a,0x00,0x21]
+         bnelrl 2
+# CHECK: bnelrl 0                        # encoding: [0x4c,0x82,0x00,0x21]
+         bnelrl
 # CHECK: bnectrl 2                       # encoding: [0x4c,0x8a,0x04,0x21]
          bnectrl 2
 # CHECK: bnectrl 0                       # encoding: [0x4c,0x82,0x04,0x21]
 # FIXME: bngl target
 # FIXME: bngla 2, target
 # FIXME: bngla target
-# FIXME: bnglrl 2
-# FIXME: bnglrl
+# CHECK: blelrl 2                        # encoding: [0x4c,0x89,0x00,0x21]
+         bnglrl 2
+# CHECK: blelrl 0                        # encoding: [0x4c,0x81,0x00,0x21]
+         bnglrl
 # CHECK: blectrl 2                       # encoding: [0x4c,0x89,0x04,0x21]
          bngctrl 2
 # CHECK: blectrl 0                       # encoding: [0x4c,0x81,0x04,0x21]
 # FIXME: bsol target
 # FIXME: bsola 2, target
 # FIXME: bsola target
-# FIXME: bsolrl 2
-# FIXME: bsolrl
+# CHECK: bunlrl 2                        # encoding: [0x4d,0x8b,0x00,0x21]
+         bsolrl 2
+# CHECK: bunlrl 0                        # encoding: [0x4d,0x83,0x00,0x21]
+         bsolrl
 # CHECK: bunctrl 2                       # encoding: [0x4d,0x8b,0x04,0x21]
          bsoctrl 2
 # CHECK: bunctrl 0                       # encoding: [0x4d,0x83,0x04,0x21]
 # FIXME: bnsl target
 # FIXME: bnsla 2, target
 # FIXME: bnsla target
-# FIXME: bnslrl 2
-# FIXME: bnslrl
+# CHECK: bnulrl 2                        # encoding: [0x4c,0x8b,0x00,0x21]
+         bnslrl 2
+# CHECK: bnulrl 0                        # encoding: [0x4c,0x83,0x00,0x21]
+         bnslrl
 # CHECK: bnuctrl 2                       # encoding: [0x4c,0x8b,0x04,0x21]
          bnsctrl 2
 # CHECK: bnuctrl 0                       # encoding: [0x4c,0x83,0x04,0x21]
 # FIXME: bunl target
 # FIXME: bunla 2, target
 # FIXME: bunla target
-# FIXME: bunlrl 2
-# FIXME: bunlrl
+# CHECK: bunlrl 2                        # encoding: [0x4d,0x8b,0x00,0x21]
+         bunlrl 2
+# CHECK: bunlrl 0                        # encoding: [0x4d,0x83,0x00,0x21]
+         bunlrl
 # CHECK: bunctrl 2                       # encoding: [0x4d,0x8b,0x04,0x21]
          bunctrl 2
 # CHECK: bunctrl 0                       # encoding: [0x4d,0x83,0x04,0x21]
 # FIXME: bnul target
 # FIXME: bnula 2, target
 # FIXME: bnula target
-# FIXME: bnulrl 2
-# FIXME: bnulrl
+# CHECK: bnulrl 2                        # encoding: [0x4c,0x8b,0x00,0x21]
+         bnulrl 2
+# CHECK: bnulrl 0                        # encoding: [0x4c,0x83,0x00,0x21]
+         bnulrl
 # CHECK: bnuctrl 2                       # encoding: [0x4c,0x8b,0x04,0x21]
          bnuctrl 2
 # CHECK: bnuctrl 0                       # encoding: [0x4c,0x83,0x04,0x21]