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

2005-10-25 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.54 -> 1.55
PPCInstrInfo.td updated: 1.135 -> 1.136
---
Log message:

Allow pseudos to have patterns, no functionality change


---
Diffs of the changes:  (+13 -13)

 PPCInstrFormats.td |4 ++--
 PPCInstrInfo.td|   22 +++---
 2 files changed, 13 insertions(+), 13 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.54 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.55
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.54 Wed Oct 19 14:51:16 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Oct 25 15:58:43 2005
@@ -550,10 +550,10 @@
 
 
//===--===//
 def NoItin : InstrItinClass;
-class Pseudo
+class Pseudo pattern>
 : I<0, OL, asmstr, NoItin> {
   let PPC64 = 0;
   let VMX = 0;
-
+  let Pattern = pattern;
   let Inst{31-0} = 0;
 }


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.135 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.136
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.135   Tue Oct 25 15:55:47 2005
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Oct 25 15:58:43 2005
@@ -147,25 +147,25 @@
 // PowerPC Instruction Definitions.
 
 // Pseudo-instructions:
-def PHI : Pseudo<(ops variable_ops), "; PHI">;
+def PHI : Pseudo<(ops variable_ops), "; PHI", []>;
 
 let isLoad = 1 in {
-def ADJCALLSTACKDOWN : Pseudo<(ops u16imm:$amt), "; ADJCALLSTACKDOWN">;
-def ADJCALLSTACKUP : Pseudo<(ops u16imm:$amt), "; ADJCALLSTACKUP">;
+def ADJCALLSTACKDOWN : Pseudo<(ops u16imm:$amt), "; ADJCALLSTACKDOWN", []>;
+def ADJCALLSTACKUP : Pseudo<(ops u16imm:$amt), "; ADJCALLSTACKUP", []>;
 }
-def IMPLICIT_DEF_GPR : Pseudo<(ops GPRC:$rD), "; $rD = IMPLICIT_DEF_GPRC">;
-def IMPLICIT_DEF_F8  : Pseudo<(ops F8RC:$rD), "; %rD = IMPLICIT_DEF_F8">;
-def IMPLICIT_DEF_F4  : Pseudo<(ops F4RC:$rD), "; %rD = IMPLICIT_DEF_F4">;
+def IMPLICIT_DEF_GPR : Pseudo<(ops GPRC:$rD), "; $rD = IMPLICIT_DEF_GPRC", []>;
+def IMPLICIT_DEF_F8  : Pseudo<(ops F8RC:$rD), "; %rD = IMPLICIT_DEF_F8", []>;
+def IMPLICIT_DEF_F4  : Pseudo<(ops F4RC:$rD), "; %rD = IMPLICIT_DEF_F4", []>;
 
 // SELECT_CC_* - Used to implement the SELECT_CC DAG operation.  Expanded by 
the
 // scheduler into a branch sequence.
 let usesCustomDAGSchedInserter = 1 in {  // Expanded by the scheduler.
   def SELECT_CC_Int : Pseudo<(ops GPRC:$dst, CRRC:$cond, GPRC:$T, GPRC:$F,
-  i32imm:$BROPC), "; SELECT_CC PSEUDO!">;
+  i32imm:$BROPC), "; SELECT_CC PSEUDO!", []>;
   def SELECT_CC_F4  : Pseudo<(ops F4RC:$dst, CRRC:$cond, F4RC:$T, F4RC:$F,
-  i32imm:$BROPC), "; SELECT_CC PSEUDO!">;
+  i32imm:$BROPC), "; SELECT_CC PSEUDO!", []>;
   def SELECT_CC_F8  : Pseudo<(ops F8RC:$dst, CRRC:$cond, F8RC:$T, F8RC:$F,
-  i32imm:$BROPC), "; SELECT_CC PSEUDO!">;
+  i32imm:$BROPC), "; SELECT_CC PSEUDO!", []>;
 }
 
 
@@ -176,12 +176,12 @@
 }
 
 let Defs = [LR] in
-  def MovePCtoLR : Pseudo<(ops piclabel:$label), "bl $label">;
+  def MovePCtoLR : Pseudo<(ops piclabel:$label), "bl $label", []>;
 
 let isBranch = 1, isTerminator = 1 in {
   def COND_BRANCH : Pseudo<(ops CRRC:$crS, u16imm:$opc,
 target:$true, target:$false),
-   "; COND_BRANCH">;
+   "; COND_BRANCH", []>;
   def B   : IForm<18, 0, 0, (ops target:$func), "b $func", BrB>;
 //def BA  : IForm<18, 1, 0, (ops target:$func), "ba $func", BrB>;
   def BL  : IForm<18, 0, 1, (ops target:$func), "bl $func", BrB>;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2005-11-29 Thread Nate Begeman


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.57 -> 1.58
PPCInstrInfo.td updated: 1.145 -> 1.146
---
Log message:

Add the remainder of the AltiVec 4 x float instructions.  Further
enhancements will be necessary to teach the code generator that since
there is no fmul, it will have to do vmaddfp, adding +0.0.


---
Diffs of the changes:  (+61 -14)

 PPCInstrFormats.td |   14 
 PPCInstrInfo.td|   61 -
 2 files changed, 61 insertions(+), 14 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.57 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.58
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.57 Sat Nov 26 16:39:34 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Nov 29 02:04:45 2005
@@ -582,6 +582,20 @@
   let Inst{21-31} = xo;
 }
 
+class VXForm_2 xo, dag OL, string asmstr,
+   InstrItinClass itin, list pattern>
+: I<4, OL, asmstr, itin> {
+  bits<5> VD;
+  bits<5> VB;
+  
+  let Pattern = pattern;
+  
+  let Inst{6-10}  = VD;
+  let Inst{11-15} = 0;
+  let Inst{16-20} = VB;
+  let Inst{21-31} = xo;
+}
+
 // E-4 VXR-Form
 class VXRForm_1 xo, bit rc, dag OL, string asmstr,
InstrItinClass itin, list pattern>


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.145 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.146
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.145   Sat Nov 26 16:39:34 2005
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Nov 29 02:04:45 2005
@@ -767,32 +767,65 @@
   []>, isPPC64;
 
 // VA-Form instructions.  3-input AltiVec ops.
-def VMADDFP: VAForm_1<46, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
-  "vmaddfp $vD, $vA, $vB, $vC", VecFP,
-  []>;
+def VMADDFP : VAForm_1<46, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
+   "vmaddfp $vD, $vA, $vC, $vB", VecFP,
+   [(set VRRC:$vD, (fadd (fmul VRRC:$vA, VRRC:$vC),
+ VRRC:$vB))]>;
+def VNMSUBFP: VAForm_1<47, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
+  "vnmsubfp $vD, $vA, $vC, $vB", VecFP,
+  [(set VRRC:$vD, (fneg (fsub (fmul VRRC:$vA, 
+VRRC:$vC),
+  VRRC:$vB)))]>;
 
 // VX-Form instructions.  AltiVec arithmetic ops.
 def VADDFP : VXForm_1<10, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
   "vaddfp $vD, $vA, $vB", VecFP,
-  []>;
-def VADDUWM: VXForm_1<128, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
-  "vadduwm $vD, $vA, $vB", VecGeneral,
-  []>;
-def VAND   : VXForm_1<1028, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
-  "vand $vD, $vA, $vB", VecGeneral,
-  []>;
+  [(set VRRC:$vD, (fadd VRRC:$vA, VRRC:$vB))]>;
 def VCFSX  : VXForm_1<842, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
   "vcfsx $vD, $vB, $UIMM", VecFP,
   []>;
 def VCFUX  : VXForm_1<778, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
   "vcfux $vD, $vB, $UIMM", VecFP,
   []>;
-def VOR: VXForm_1<1156, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
-  "vor $vD, $vA, $vB", VecGeneral,
+def VCTSXS : VXForm_1<970, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
+  "vctsxs $vD, $vB, $UIMM", VecFP,
   []>;
-def VXOR   : VXForm_1<1220, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
-  "vxor $vD, $vA, $vB", VecGeneral,
+def VCTUXS : VXForm_1<906, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
+  "vctuxs $vD, $vB, $UIMM", VecFP,
   []>;
+def VEXPTEFP : VXForm_2<394, (ops VRRC:$vD, VRRC:$vB),
+"vexptefp $vD, $vB", VecFP,
+[]>;
+def VLOGEFP  : VXForm_2<458, (ops VRRC:$vD, VRRC:$vB),
+"vlogefp $vD, $vB", VecFP,
+[]>;
+def VMAXFP : VXForm_1<1034, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+  "vmaxfp $vD, $vA, $vB", VecFP,
+  []>;
+def VMINFP : VXForm_1<1098, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+  "vminfp $vD, $vA, $vB", VecFP,
+  []>;
+def VREFP  : VXForm_2<266, (ops VRRC:$vD, VRRC:$vB),
+  "vrefp $vD, $vB", VecFP,
+  []>;
+def VRFIM  : VXForm_2<714, (ops VRRC:$vD, VRRC:$vB),
+  "vrfim $vD, $vB", VecFP,
+  []>;
+def VRFIN  : VXForm_2<522, (ops VRRC:$vD, VRRC:$vB),
+  "vrfin $vD, $vB", VecFP,
+  []>;
+def VRFIP  : VXForm_2<650, (ops VRRC:$vD, VRRC:$vB),
+  "vrfip $vD, $vB", VecFP,
+  

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

2005-11-29 Thread Nate Begeman


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.58 -> 1.59
PPCInstrInfo.td updated: 1.146 -> 1.147
---
Log message:

Represent the encoding of the SPR instructions as they actually are, so
that we can use the correct SPR numbers in the InstrInfo.td file.  This is
necessary to support VRsave.


---
Diffs of the changes:  (+18 -8)

 PPCInstrFormats.td |   12 ++--
 PPCInstrInfo.td|   14 --
 2 files changed, 18 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.58 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.59
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.58 Tue Nov 29 02:04:45 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Nov 29 16:42:50 2005
@@ -361,7 +361,16 @@
   bits<10> SPR;
 
   let Inst{6-10}  = RT;
-  let Inst{11-20} = SPR;
+  let Inst{11}= SPR{4};
+  let Inst{12}= SPR{3};
+  let Inst{13}= SPR{2};
+  let Inst{14}= SPR{1};
+  let Inst{15}= SPR{0};
+  let Inst{16}= SPR{9};
+  let Inst{17}= SPR{8};
+  let Inst{18}= SPR{7};
+  let Inst{19}= SPR{6};
+  let Inst{20}= SPR{5};
   let Inst{21-30} = xo;
   let Inst{31}= 0;
 }
@@ -411,7 +420,6 @@
   let Inst{31}= 0;
 }
 
-
 class XFXForm_7 opcode, bits<10> xo, dag OL, string asmstr,
 InstrItinClass itin>
   : XFXForm_1;


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.146 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.147
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.146   Tue Nov 29 02:04:45 2005
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Nov 29 16:42:50 2005
@@ -560,15 +560,17 @@
 // Note that although LR should be listed as `8' and CTR as `9' in the SPR
 // field, the manual lists the groups of bits as [5-9] = 0, [0-4] = 8 or 9
 // which means the SPR value needs to be multiplied by a factor of 32.
-def MFCTR : XFXForm_1_ext<31, 339, 288, (ops GPRC:$rT), "mfctr $rT", SprMFSPR>;
-def MFLR  : XFXForm_1_ext<31, 339, 256, (ops GPRC:$rT), "mflr $rT", SprMFSPR>;
+def MFCTR : XFXForm_1_ext<31, 339, 9, (ops GPRC:$rT), "mfctr $rT", SprMFSPR>;
+def MFLR  : XFXForm_1_ext<31, 339, 8, (ops GPRC:$rT), "mflr $rT",  SprMFSPR>;
 def MFCR  : XFXForm_3<31, 19, (ops GPRC:$rT), "mfcr $rT", SprMFCR>;
 def MTCRF : XFXForm_5<31, 144, (ops crbitm:$FXM, GPRC:$rS),
   "mtcrf $FXM, $rS", BrMCRX>;
-def MFOCRF : XFXForm_5a<31, 19, (ops GPRC:$rT, crbitm:$FXM),
-"mfcr $rT, $FXM", SprMFCR>;
-def MTCTR : XFXForm_7_ext<31, 467, 288, (ops GPRC:$rS), "mtctr $rS", SprMTSPR>;
-def MTLR  : XFXForm_7_ext<31, 467, 256, (ops GPRC:$rS), "mtlr $rS", SprMTSPR>;
+def MFOCRF: XFXForm_5a<31, 19, (ops GPRC:$rT, crbitm:$FXM),
+   "mfcr $rT, $FXM", SprMFCR>;
+def MTCTR : XFXForm_7_ext<31, 467, 9, (ops GPRC:$rS), "mtctr $rS", SprMTSPR>;
+def MTLR  : XFXForm_7_ext<31, 467, 8, (ops GPRC:$rS), "mtlr $rS", SprMTSPR>;
+def MTSPR : XFXForm_7<31, 467, (ops GPRC:$rS, u16imm:$UIMM), "mtspr $UIMM, 
$rS",
+  SprMTSPR>;
 
 // XS-Form instructions.  Just 'sradi'
 //



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2005-12-04 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.59 -> 1.60
PPCInstrInfo.td updated: 1.147 -> 1.148
---
Log message:

Define BR in the .td file now that Evan made tblgen smarter.


---
Diffs of the changes:  (+10 -5)

 PPCInstrFormats.td |3 ++-
 PPCInstrInfo.td|   12 
 2 files changed, 10 insertions(+), 5 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.59 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.60
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.59 Tue Nov 29 16:42:50 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Sun Dec  4 12:42:54 2005
@@ -31,8 +31,9 @@
 
 // 1.7.1 I-Form
 class IForm opcode, bit aa, bit lk, dag OL, string asmstr,
-InstrItinClass itin>
+InstrItinClass itin, list pattern>
  : I {
+  let Pattern = pattern;
   bits<24> LI;
 
   let Inst{6-29}  = LI;


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.147 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.148
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.147   Tue Nov 29 16:42:50 2005
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Sun Dec  4 12:42:54 2005
@@ -128,7 +128,7 @@
 def s16immX4  : Operand {   // Multiply imm by 4 before printing.
   let PrintMethod = "printS16X4ImmOperand";
 }
-def target : Operand {
+def target : Operand {
   let PrintMethod = "printBranchOperand";
 }
 def calltarget : Operand {
@@ -194,7 +194,9 @@
   def COND_BRANCH : Pseudo<(ops CRRC:$crS, u16imm:$opc,
 target:$true, target:$false),
"; COND_BRANCH", []>;
-  def B   : IForm<18, 0, 0, (ops target:$func), "b $func", BrB>;
+  def B   : IForm<18, 0, 0, (ops target:$dst),
+  "b $dst", BrB,
+  [(br bb:$dst)]>;
 
   // FIXME: 4*CR# needs to be added to the BI field!
   // This will only work for CR0 as it stands now
@@ -223,8 +225,10 @@
   LR,CTR,
   CR0,CR1,CR5,CR6,CR7] in {
   // Convenient aliases for call instructions
-  def BL  : IForm<18, 0, 1, (ops calltarget:$func, variable_ops), "bl $func", 
BrB>;
-  def BLA : IForm<18, 1, 1, (ops aaddr:$func, variable_ops), "bla $func", BrB>;
+  def BL  : IForm<18, 0, 1, (ops calltarget:$func, variable_ops), 
+"bl $func", BrB, []>;
+  def BLA : IForm<18, 1, 1, (ops aaddr:$func, variable_ops),
+"bla $func", BrB, []>;
   def BCTRL : XLForm_2_ext<19, 528, 20, 0, 1, (ops variable_ops), "bctrl", 
BrB>;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2005-12-09 Thread Nate Begeman


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.60 -> 1.61
PPCInstrInfo.td updated: 1.152 -> 1.153
---
Log message:

Add support patterns to many load and store instructions which will
hopefully use patterns in the near future.


---
Diffs of the changes:  (+133 -76)

 PPCInstrFormats.td |   69 +++---
 PPCInstrInfo.td|  140 +++--
 2 files changed, 133 insertions(+), 76 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.60 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.61
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.60 Sun Dec  4 12:42:54 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Fri Dec  9 17:54:17 2005
@@ -58,23 +58,27 @@
 
 // 1.7.4 D-Form
 class DForm_base opcode, dag OL, string asmstr, InstrItinClass itin,
- list pattern>
-   : I {
-  let Pattern = pattern;
+ list pattern> 
+  : I {
   bits<5>  A;
   bits<5>  B;
   bits<16> C;
+
+  let Pattern = pattern;
   
   let Inst{6-10}  = A;
   let Inst{11-15} = B;
   let Inst{16-31} = C;
 }
 
-class DForm_1 opcode, dag OL, string asmstr, InstrItinClass itin>
-   : I {
+class DForm_1 opcode, dag OL, string asmstr, InstrItinClass itin,
+  list pattern>
+  : I {
   bits<5>  A;
   bits<16> C;
   bits<5>  B;
+
+  let Pattern = pattern;
   
   let Inst{6-10}  = A;
   let Inst{11-15} = B;
@@ -99,12 +103,13 @@
 }
 
 // Currently we make the use/def reg distinction in ISel, not tablegen
-class DForm_3 opcode, dag OL, string asmstr, InstrItinClass itin>
-  : DForm_1;
+class DForm_3 opcode, dag OL, string asmstr, InstrItinClass itin,
+  list pattern>
+  : DForm_1;
 
 class DForm_4 opcode, dag OL, string asmstr, InstrItinClass itin,
   list pattern>
- : I {
+  : I {
   bits<5>  B;
   bits<5>  A;
   bits<16> C;
@@ -116,8 +121,9 @@
   let Inst{16-31} = C;
 }
   
-class DForm_4_zero opcode, dag OL, string asmstr, InstrItinClass itin>
-  : DForm_1 {
+class DForm_4_zero opcode, dag OL, string asmstr, InstrItinClass itin,
+   list pattern>
+  : DForm_1 {
   let A = 0;
   let B = 0;
   let C = 0;
@@ -150,22 +156,26 @@
   let L = PPC64;
 }
 
-class DForm_8 opcode, dag OL, string asmstr, InstrItinClass itin>
-  : DForm_1 {
+class DForm_8 opcode, dag OL, string asmstr, InstrItinClass itin,
+  list pattern>
+  : DForm_1 {
 }
 
-class DForm_9 opcode, dag OL, string asmstr, InstrItinClass itin>
-  : DForm_1 {
+class DForm_9 opcode, dag OL, string asmstr, InstrItinClass itin,
+  list pattern>
+  : DForm_1 {
 }
 
 // 1.7.5 DS-Form
 class DSForm_1 opcode, bits<2> xo, dag OL, string asmstr,
-   InstrItinClass itin>
+   InstrItinClass itin, list pattern>
  : I {
   bits<5>  RST;
   bits<14> DS;
   bits<5>  RA;
 
+  let Pattern = pattern;
+  
   let Inst{6-10}  = RST;
   let Inst{11-15} = RA;
   let Inst{16-29} = DS;
@@ -173,17 +183,19 @@
 }
 
 class DSForm_2 opcode, bits<2> xo, dag OL, string asmstr,
-   InstrItinClass itin>
-  : DSForm_1;
+   InstrItinClass itin, list pattern>
+  : DSForm_1;
 
 // 1.7.6 X-Form
-class XForm_base_r3xo opcode, bits<10> xo, 
-  dag OL, string asmstr, InstrItinClass itin>
+class XForm_base_r3xo opcode, bits<10> xo, dag OL, string asmstr, 
+  InstrItinClass itin, list pattern>
   : I {
   bits<5> RST;
   bits<5> A;
   bits<5> B;
 
+  let Pattern = pattern;
+
   bit RC = 0;// set by isDOT
 
   let Inst{6-10}  = RST;
@@ -214,8 +226,8 @@
 
 
 class XForm_1 opcode, bits<10> xo, dag OL, string asmstr,
-  InstrItinClass itin> 
-  : XForm_base_r3xo;
+  InstrItinClass itin, list pattern> 
+  : XForm_base_r3xo;
 
 class XForm_6 opcode, bits<10> xo, dag OL, string asmstr,
   InstrItinClass itin, list pattern> 
@@ -224,8 +236,8 @@
 }
 
 class XForm_8 opcode, bits<10> xo, dag OL, string asmstr,
-  InstrItinClass itin> 
-  : XForm_base_r3xo;
+  InstrItinClass itin, list pattern> 
+  : XForm_base_r3xo;
 
 class XForm_10 opcode, bits<10> xo, dag OL, string asmstr,
InstrItinClass itin, list pattern> 
@@ -279,20 +291,19 @@
 }
 
 class XForm_25 opcode, bits<10> xo, dag OL, string asmstr,
-   InstrItinClass itin> 
-  : XForm_base_r3xo {
+   InstrItinClass itin, list pattern> 
+  : XForm_base_r3xo {
 }
 
 class XForm_26 opcode, bits<10> xo, dag OL, string asmstr,
InstrItinClass itin, list pattern>
-  : XForm_base_r3xo {
+  : XForm_base_r3xo {
   let A = 0;
-  let Pattern = pattern;
 }
 
 class XForm_28 opcode, bits<10> xo, dag OL, string asmstr,
-   InstrItinClass itin> 
-  : XForm_base_r3xo {
+   InstrItinClass itin, list pattern> 
+  : XForm_base_r3xo {
 }
 
 // 1.7.7 XL-Form


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/T

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

2005-12-13 Thread Nate Begeman


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.61 -> 1.62
PPCInstrInfo.td updated: 1.156 -> 1.157
---
Log message:

Add support for fmul node of type v4f32.

void %foo(<4 x float> * %a) {
entry:
  %tmp1 = load <4 x float> * %a;
  %tmp2 = mul <4 x float> %tmp1, %tmp1
  store <4 x float> %tmp2, <4 x float> *%a
  ret void
}

Is selected to:

_foo:
li r2, 0
lvx v0, r2, r3
vxor v1, v1, v1
vmaddfp v0, v0, v0, v1
stvx v0, r2, r3
blr


---
Diffs of the changes:  (+21 -0)

 PPCInstrFormats.td |8 
 PPCInstrInfo.td|   13 +
 2 files changed, 21 insertions(+)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.61 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.62
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.61 Fri Dec  9 17:54:17 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Dec 13 18:34:09 2005
@@ -602,6 +602,14 @@
   let Inst{21-31} = xo;
 }
 
+class VXForm_setzero xo, dag OL, string asmstr,
+   InstrItinClass itin, list pattern>
+: VXForm_1 {
+  let VA = VD;
+  let VB = VD;
+}
+
+
 class VXForm_2 xo, dag OL, string asmstr,
InstrItinClass itin, list pattern>
 : I<4, OL, asmstr, itin> {


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.156 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.157
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.156   Tue Dec 13 16:55:22 2005
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Dec 13 18:34:09 2005
@@ -897,6 +897,16 @@
 def VSUBFP : VXForm_1<74, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
   "vsubfp $vD, $vA, $vB", VecFP,
   [(set VRRC:$vD, (fsub VRRC:$vA, VRRC:$vB))]>;
+def VXOR : VXForm_1<1220, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+  "vxor $vD, $vA, $vB", VecFP,
+  []>;
+  
+// VX-Form Pseudo Instructions
+
+def V_SET0 : VXForm_setzero<1220, (ops VRRC:$vD),
+  "vxor $vD, $vD, $vD", VecFP,
+  []>;
+
 
 
//===--===//
 // PowerPC Instruction Patterns
@@ -951,6 +961,9 @@
 def : Pat<(add GPRC:$in, (PPChi tconstpool:$g, 0)),
   (ADDIS GPRC:$in, tconstpool:$g)>;
 
+def : Pat<(fmul VRRC:$vA, VRRC:$vB),
+  (VMADDFP VRRC:$vA, (V_SET0), VRRC:$vB)>; 
+
 // Fused multiply add and multiply sub for packed float.  These are represented
 // separately from the real instructions above, for operations that must have
 // the additional precision, such as Newton-Rhapson (used by divide, sqrt)



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2006-01-26 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.63 -> 1.64
PPCInstrInfo.td updated: 1.174 -> 1.175
---
Log message:

PHI and INLINEASM are now built-in instructions provided by Target.td


---
Diffs of the changes:  (+1 -5)

 PPCInstrFormats.td |3 +--
 PPCInstrInfo.td|3 ---
 2 files changed, 1 insertion(+), 5 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.63 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.64
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.63 Mon Dec 19 18:26:01 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Thu Jan 26 19:46:15 2006
@@ -644,9 +644,8 @@
 }
 
 
//===--===//
-def NoItin : InstrItinClass;
 class Pseudo pattern>
-: I<0, OL, asmstr, NoItin> {
+: I<0, OL, asmstr, NoItinerary> {
   let PPC64 = 0;
   let VMX = 0;
   let Pattern = pattern;


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.174 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.175
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.174   Wed Jan 11 20:05:36 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Thu Jan 26 19:46:15 2006
@@ -194,7 +194,6 @@
 // PowerPC Instruction Definitions.
 
 // Pseudo-instructions:
-def PHI : Pseudo<(ops variable_ops), "; PHI", []>;
 
 let isLoad = 1, hasCtrlDep = 1 in {
 def ADJCALLSTACKDOWN : Pseudo<(ops u16imm:$amt),
@@ -1087,8 +1086,6 @@
 // PowerPCInstrInfo Definition
 //
 def PowerPCInstrInfo : InstrInfo {
-  let PHIInst  = PHI;
-
   let TSFlagsFields = [ "VMX", "PPC64" ];
   let TSFlagsShifts = [ 0, 1 ];
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2006-03-21 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.66 -> 1.67
PPCInstrInfo.td updated: 1.201 -> 1.202
---
Log message:

Fix the JIT encoding of the VAForm_1 instructions, including vmaddfp


---
Diffs of the changes:  (+8 -9)

 PPCInstrFormats.td |2 +-
 PPCInstrInfo.td|   15 +++
 2 files changed, 8 insertions(+), 9 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.66 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.67
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.66 Sun Mar 12 23:15:10 2006
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Mar 21 19:44:36 2006
@@ -595,8 +595,8 @@
 : I<4, OL, asmstr, itin> {
   bits<5> VD;
   bits<5> VA;
-  bits<5> VB;
   bits<5> VC;
+  bits<5> VB;
 
   let Pattern = pattern;
   


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.201 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.202
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.201   Mon Mar 20 18:51:38 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Mar 21 19:44:36 2006
@@ -948,22 +948,21 @@
 
 let PPC970_Unit = 5 in {  // VALU Operations.
 // VA-Form instructions.  3-input AltiVec ops.
-def VMADDFP : VAForm_1<46, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
+def VMADDFP : VAForm_1<46, (ops VRRC:$vD, VRRC:$vA, VRRC:$vC, VRRC:$vB),
"vmaddfp $vD, $vA, $vC, $vB", VecFP,
[(set VRRC:$vD, (fadd (fmul VRRC:$vA, VRRC:$vC),
  VRRC:$vB))]>,
Requires<[FPContractions]>;
-def VNMSUBFP: VAForm_1<47, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
+def VNMSUBFP: VAForm_1<47, (ops VRRC:$vD, VRRC:$vA, VRRC:$vC, VRRC:$vB),
"vnmsubfp $vD, $vA, $vC, $vB", VecFP,
-   [(set VRRC:$vD, (fneg (fsub (fmul VRRC:$vA, 
- VRRC:$vC),
-  VRRC:$vB)))]>,
+   [(set VRRC:$vD, (fneg (fsub (fmul VRRC:$vA, VRRC:$vC),
+   VRRC:$vB)))]>,
Requires<[FPContractions]>;
 
-def VPERM   : VAForm_1<43, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
-   "vperm $vD, $vA, $vB, $vC", VecPerm,
+def VPERM   : VAForm_1<43, (ops VRRC:$vD, VRRC:$vA, VRRC:$vC, VRRC:$vB),
+   "vperm $vD, $vA, $vC, $vB", VecPerm,
[(set VRRC:$vD,
- (PPCvperm (v4f32 VRRC:$vA), VRRC:$vB, 
VRRC:$vC))]>;
+ (PPCvperm (v4f32 VRRC:$vA), VRRC:$vC, 
VRRC:$vB))]>;
 
 
 // VX-Form instructions.  AltiVec arithmetic ops.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2006-11-10 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.81 -> 1.82
PPCInstrInfo.td updated: 1.255 -> 1.256
---
Log message:

dform 8/9 are identical to dform 1


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

 PPCInstrFormats.td |9 -
 PPCInstrInfo.td|   12 ++--
 2 files changed, 6 insertions(+), 15 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.81 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.82
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.81 Mon Nov  6 19:51:50 2006
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Fri Nov 10 11:51:02 2006
@@ -174,15 +174,6 @@
   let L = PPC64;
 }
 
-class DForm_8 opcode, dag OL, string asmstr, InstrItinClass itin,
-  list pattern>
-  : DForm_1 {
-}
-
-class DForm_9 opcode, dag OL, string asmstr, InstrItinClass itin,
-  list pattern>
-  : DForm_1 {
-}
 
 // 1.7.5 DS-Form
 class DSForm_1 opcode, bits<2> xo, dag OL, string asmstr,


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.255 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.256
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.255   Thu Nov  9 20:08:47 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Fri Nov 10 11:51:02 2006
@@ -422,10 +422,10 @@
   "lwz $rD, $src", LdStGeneral,
   [(set GPRC:$rD, (load iaddr:$src))]>;
 
-def LFS : DForm_8<48, (ops F4RC:$rD, memri:$src),
+def LFS : DForm_1<48, (ops F4RC:$rD, memri:$src),
   "lfs $rD, $src", LdStLFDU,
   [(set F4RC:$rD, (load iaddr:$src))]>;
-def LFD : DForm_8<50, (ops F8RC:$rD, memri:$src),
+def LFD : DForm_1<50, (ops F8RC:$rD, memri:$src),
   "lfd $rD, $src", LdStLFD,
   [(set F8RC:$rD, (load iaddr:$src))]>;
 
@@ -452,11 +452,11 @@
"lwzu $rD, $disp($rA)", LdStGeneral,
[]>, RegConstraint<"$rA = $rA_result">;
 
-def LFSU : DForm_8<49, (ops F4RC:$rD, ptr_rc:$rA_result, i32imm:$disp,
+def LFSU : DForm_1<49, (ops F4RC:$rD, ptr_rc:$rA_result, i32imm:$disp,
 ptr_rc:$rA),
   "lfs $rD, $disp($rA)", LdStLFDU,
   []>, RegConstraint<"$rA = $rA_result">;
-def LFDU : DForm_8<51, (ops F8RC:$rD, ptr_rc:$rA_result, i32imm:$disp,
+def LFDU : DForm_1<51, (ops F8RC:$rD, ptr_rc:$rA_result, i32imm:$disp,
 ptr_rc:$rA),
   "lfd $rD, $disp($rA)", LdStLFD,
   []>, RegConstraint<"$rA = $rA_result">;
@@ -537,10 +537,10 @@
  "cmplwi $dst, $src1, $src2", IntCompare>;
 }
 let isStore = 1, noResults = 1, PPC970_Unit = 2 in {
-def STFS : DForm_9<52, (ops F4RC:$rS, memri:$dst),
+def STFS : DForm_1<52, (ops F4RC:$rS, memri:$dst),
"stfs $rS, $dst", LdStUX,
[(store F4RC:$rS, iaddr:$dst)]>;
-def STFD : DForm_9<54, (ops F8RC:$rS, memri:$dst),
+def STFD : DForm_1<54, (ops F8RC:$rS, memri:$dst),
"stfd $rS, $dst", LdStUX,
[(store F8RC:$rS, iaddr:$dst)]>;
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2006-06-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.73 -> 1.74
PPCInstrInfo.td updated: 1.220 -> 1.221
---
Log message:

Add PowerPC intrinsics to support dcbz[l]


---
Diffs of the changes:  (+25 -0)

 PPCInstrFormats.td |   17 +
 PPCInstrInfo.td|8 
 2 files changed, 25 insertions(+)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.73 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.74
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.73 Wed Apr  5 17:27:14 2006
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Jun  6 16:29:23 2006
@@ -325,6 +325,23 @@
   : XForm_base_r3xo {
 }
 
+// DCB_Form - Form X instruction, used for dcb* instructions.
+class DCB_Form xo, bits<5> immfield, dag OL, string asmstr, 
+  InstrItinClass itin, list pattern>
+  : I<31, OL, asmstr, itin> {
+  bits<5> A;
+  bits<5> B;
+
+  let Pattern = pattern;
+
+  let Inst{6-10}  = immfield;
+  let Inst{11-15} = A;
+  let Inst{16-20} = B;
+  let Inst{21-30} = xo;
+  let Inst{31}= 0;
+}
+
+
 // DSS_Form - Form X instruction, used for altivec dss* instructions.
 class DSS_Form xo, dag OL, string asmstr, 
   InstrItinClass itin, list pattern>


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.220 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.221
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.220   Wed May 17 14:00:46 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Jun  6 16:29:23 2006
@@ -318,6 +318,14 @@
[(PPCbctrl)]>;
 }
 
+// DCB* instructions.
+def DCBZ : DCB_Form<1014, 0, (ops memrr:$dst),
+"dcbz $dst", LdStDCBF, [(int_ppc_dcbz xoaddr:$dst)]>,
+PPC970_DGroup_Single;
+def DCBZL : DCB_Form<1014, 1, (ops memrr:$dst),
+ "dcbzl $dst", LdStDCBF, [(int_ppc_dcbzl xoaddr:$dst)]>,
+ PPC970_DGroup_Single;
+   
 // D-Form instructions.  Most instructions that perform an operation on a
 // register and an immediate are of this type.
 //



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2006-06-20 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.74 -> 1.75
PPCInstrInfo.td updated: 1.229 -> 1.230
---
Log message:

remove unused flag


---
Diffs of the changes:  (+0 -2)

 PPCInstrFormats.td |1 -
 PPCInstrInfo.td|1 -
 2 files changed, 2 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.74 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.75
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.74 Tue Jun  6 16:29:23 2006
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Jun 20 18:15:07 2006
@@ -16,7 +16,6 @@
   field bits<32> Inst;
 
   bit PPC64 = 0;  // Default value, override with isPPC64
-  bit VMX = 0;// Default value, override with isVMX
 
   let Name = "";
   let Namespace = "PPC";


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.229 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.230
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.229   Tue Jun 20 18:11:36 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Jun 20 18:15:07 2006
@@ -167,7 +167,6 @@
 // PowerPC Flag Definitions.
 
 class isPPC64 { bit PPC64 = 1; }
-class isVMX   { bit VMX = 1; }
 class isDOT   {
   list Defs = [CR0];
   bit RC  = 1;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2005-11-22 Thread Nate Begeman


Changes in directory llvm/lib/Target/PowerPC:

PPCInstrFormats.td updated: 1.55 -> 1.56
PPCInstrInfo.td updated: 1.143 -> 1.144
PPCRegisterInfo.td updated: 1.20 -> 1.21
---
Log message:

Some first bits of AltiVec stuff: Instruction Formats, Encodings, and
Registers.  Apologies to Jim if the scheduling info so far isn't accurate.

There's a few more things like VRsave support that need to be finished up
in my local tree before I can commit code that Does The Right Thing for
turning 4 x float into the various altivec packed float instructions.


---
Diffs of the changes:  (+123 -1)

 PPCInstrFormats.td |   45 +
 PPCInstrInfo.td|   49 +
 PPCRegisterInfo.td |   30 +-
 3 files changed, 123 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/PowerPC/PPCInstrFormats.td
diff -u llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.55 
llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.56
--- llvm/lib/Target/PowerPC/PPCInstrFormats.td:1.55 Tue Oct 25 15:58:43 2005
+++ llvm/lib/Target/PowerPC/PPCInstrFormats.td  Tue Nov 22 23:29:52 2005
@@ -548,6 +548,51 @@
   let Inst{31}= RC;
 }
 
+// E-1 VA-Form
+class VAForm_1 xo, dag OL, string asmstr,
+   InstrItinClass itin, list pattern>
+: I<4, OL, asmstr, itin> {
+  bits<5> VD;
+  bits<5> VA;
+  bits<5> VB;
+  bits<5> VC;
+  
+  let Inst{6-10}  = VD;
+  let Inst{11-15} = VA;
+  let Inst{16-20} = VB;
+  let Inst{21-25} = VC;
+  let Inst{26-31} = xo;
+}
+
+// E-2 VX-Form
+class VXForm_1 xo, dag OL, string asmstr,
+   InstrItinClass itin, list pattern>
+: I<4, OL, asmstr, itin> {
+  bits<5> VD;
+  bits<5> VA;
+  bits<5> VB;
+  
+  let Inst{6-10}  = VD;
+  let Inst{11-15} = VA;
+  let Inst{16-20} = VB;
+  let Inst{21-31} = xo;
+}
+
+// E-4 VXR-Form
+class VXRForm_1 xo, bit rc, dag OL, string asmstr,
+   InstrItinClass itin, list pattern>
+: I<4, OL, asmstr, itin> {
+  bits<5> VD;
+  bits<5> VA;
+  bits<5> VB;
+  
+  let Inst{6-10}  = VD;
+  let Inst{11-15} = VA;
+  let Inst{16-20} = VB;
+  let Inst{21}= rc;
+  let Inst{22-31} = xo;
+}
+
 
//===--===//
 def NoItin : InstrItinClass;
 class Pseudo pattern>


Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.143 
llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.144
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.143   Thu Nov 17 13:16:08 2005
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Tue Nov 22 23:29:52 2005
@@ -360,6 +360,18 @@
"lwzx $dst, $base, $index", LdStGeneral>;
 def LDX  : XForm_1<31,  21, (ops GPRC:$dst, GPRC:$base, GPRC:$index),
"ldx $dst, $base, $index", LdStLD>, isPPC64;
+def LVEBX: XForm_1<31,   7, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
+   "lvebx $vD, $base, $rA", LdStGeneral>;
+def LVEHX: XForm_1<31,  39, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
+   "lvehx $vD, $base, $rA", LdStGeneral>;
+def LVEWX: XForm_1<31,  71, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
+   "lvewx $vD, $base, $rA", LdStGeneral>;
+def LVX  : XForm_1<31, 103, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
+   "lvx $vD, $base, $rA", LdStGeneral>;
+def LVSL : XForm_1<31,   6, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
+   "lvsl $vD, $base, $rA", LdStGeneral>;
+def LVSR : XForm_1<31,  38, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
+   "lvsl $vD, $base, $rA", LdStGeneral>;
 }
 def NAND : XForm_6<31, 476, (ops GPRC:$rA, GPRC:$rS, GPRC:$rB),
"nand $rA, $rS, $rB", IntGeneral,
@@ -431,6 +443,14 @@
"stdx $rS, $rA, $rB", LdStSTD>, isPPC64;
 def STDUX : XForm_8<31, 181, (ops GPRC:$rS, GPRC:$rA, GPRC:$rB),
"stdux $rS, $rA, $rB", LdStSTD>, isPPC64;
+def STVEBX: XForm_8<31, 135, (ops VRRC:$rS, GPRC:$rA, GPRC:$rB),
+   "stvebx $rS, $rA, $rB", LdStGeneral>;
+def STVEHX: XForm_8<31, 167, (ops VRRC:$rS, GPRC:$rA, GPRC:$rB),
+   "stvehx $rS, $rA, $rB", LdStGeneral>;
+def STVEWX: XForm_8<31, 199, (ops VRRC:$rS, GPRC:$rA, GPRC:$rB),
+   "stvewx $rS, $rA, $rB", LdStGeneral>;
+def STVX  : XForm_8<31, 231, (ops VRRC:$rS, GPRC:$rA, GPRC:$rB),
+   "stvx $rS, $rA, $rB", LdStGeneral>;
 }
 def SRAWI : XForm_10<31, 824, (ops GPRC:$rA, GPRC:$rS, u5imm:$SH), 
  "srawi $rA, $rS, $SH", IntShift,
@@ -746,6 +766,35 @@
   "rldicr $rA, $rS, $SH, $ME", IntRotateD,
   []>, isPPC64;
 
+// VA-Form instructions.  3-input AltiVec ops.
+def VMADDFP: VAForm_1<46, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
+  "vmaddfp $vD, $vA, $vB, $vC", VecFP,
+  []>;
+
+// VX-Form instructions.  AltiVec arithmetic ops.
+def VADDFP : VXForm_1<10, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+