[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC.h PPCInstrFormats.td PPCInstrInfo.td

Chris Lattner sabre at nondot.org
Fri Nov 3 21:43:03 PST 2006



Changes in directory llvm/lib/Target/PowerPC:

PPC.h updated: 1.35 -> 1.36
PPCInstrFormats.td updated: 1.79 -> 1.80
PPCInstrInfo.td updated: 1.252 -> 1.253
---
Log message:

encode BLR predicate info for the JIT


---
Diffs of the changes:  (+29 -15)

 PPC.h              |   20 ++++++++++----------
 PPCInstrFormats.td |   13 +++++++++++++
 PPCInstrInfo.td    |   11 ++++++-----
 3 files changed, 29 insertions(+), 15 deletions(-)


Index: llvm/lib/Target/PowerPC/PPC.h
diff -u llvm/lib/Target/PowerPC/PPC.h:1.35 llvm/lib/Target/PowerPC/PPC.h:1.36
--- llvm/lib/Target/PowerPC/PPC.h:1.35	Fri Nov  3 23:27:39 2006
+++ llvm/lib/Target/PowerPC/PPC.h	Fri Nov  3 23:42:48 2006
@@ -28,17 +28,17 @@
   class MachineCodeEmitter;
   
   namespace PPC {
-    /// Predicate - These are "(BO << 5) | BI"  for various predicates.
+    /// Predicate - These are "(BI << 5) | BO"  for various predicates.
     enum Predicate {
-      PRED_ALWAYS = (20 << 5) | 0,
-      PRED_LT     = (12 << 5) | 0,
-      PRED_LE     = ( 4 << 5) | 1,
-      PRED_EQ     = (12 << 5) | 2,
-      PRED_GE     = ( 4 << 5) | 0,
-      PRED_GT     = (12 << 5) | 1,
-      PRED_NE     = ( 4 << 5) | 2,
-      PRED_UN     = (12 << 5) | 3,
-      PRED_NU     = ( 4 << 5) | 3
+      PRED_ALWAYS = (0 << 5) | 20,
+      PRED_LT     = (0 << 5) | 12,
+      PRED_LE     = (1 << 5) |  4,
+      PRED_EQ     = (2 << 5) | 12,
+      PRED_GE     = (0 << 5) |  4,
+      PRED_GT     = (1 << 5) | 12,
+      PRED_NE     = (2 << 5) |  4,
+      PRED_UN     = (3 << 5) | 12,
+      PRED_NU     = (3 << 5) |  4
     };
   }
   


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.79 llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.80
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.79	Thu Jul 13 16:52:41 2006
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td	Fri Nov  3 23:42:48 2006
@@ -399,6 +399,19 @@
   let Inst{31}    = lk;
 }
 
+class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
+                  dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
+  : XLForm_2<opcode, xo, lk, OL, asmstr, itin, pattern> {
+  bits<7> BIBO;  // 2 bits of BI and 5 bits of BO.
+  bits<3>  CR;
+  
+  let BO = BIBO{0-4};
+  let BI{0-1} = BIBO{5-6};
+  let BI{2-4} = CR;
+  let BH = 0;
+}
+
+
 class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,  bits<5> bi, bit lk,
                   dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
   : XLForm_2<opcode, xo, lk, OL, asmstr, itin, pattern> {


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.252 llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.253
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.252	Fri Nov  3 23:27:39 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td	Fri Nov  3 23:42:48 2006
@@ -255,9 +255,9 @@
   let MIOperandInfo = (ops i32imm, ptr_rc);
 }
 
-// PowerPC Predicate operand.  640 = ((20<<5)|0) = always, CR0 is a dummy reg
+// PowerPC Predicate operand.  20 = (0<<5)|20 = always, CR0 is a dummy reg
 // that doesn't matter.
-def pred : PredicateOperand<(ops imm, CRRC), (ops (i32 640), CR0)> {
+def pred : PredicateOperand<(ops imm, CRRC), (ops (i32 20), CR0)> {
   let PrintMethod = "printPredicateOperand";
 }
 
@@ -317,9 +317,10 @@
 
 let isTerminator = 1, isBarrier = 1, noResults = 1, PPC970_Unit = 7 in {
   let isReturn = 1 in
-    def BLR : XLForm_2_ext<19, 16, 20, 0, 0,
-                           (ops pred:$p),
-                           "b${p:cc}lr ${p:reg}", BrB, [(retflag)]>;
+    def BLR : XLForm_2_br<19, 16, 0,
+                          (ops pred:$p),
+                          "b${p:cc}lr ${p:reg}", BrB, 
+                          [(retflag)]>;
   def BCTR : XLForm_2_ext<19, 528, 20, 0, 0, (ops), "bctr", BrB, []>;
 }
 






More information about the llvm-commits mailing list