Add a bunch of new instructions for intrinsics.
authorChris Lattner <sabre@nondot.org>
Thu, 30 Mar 2006 23:07:36 +0000 (23:07 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 30 Mar 2006 23:07:36 +0000 (23:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27265 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCInstrAltivec.td

index 13c0a395bd8049bb6100a0256ccbd0aecda45fe1..0935a097d911bfd77a7e2b67c11d50a04be87c15 100644 (file)
@@ -84,12 +84,14 @@ def LVXL : XForm_1<31, 359, (ops VRRC:$vD, memrr:$src),
                    [(set VRRC:$vD, (int_ppc_altivec_lvxl xoaddr:$src))]>;
 }
 
-def LVSL : XForm_1<31,   6, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
-                   "lvsl $vD, $base, $rA", LdStGeneral,
-                   []>, PPC970_Unit_LSU;
-def LVSR : XForm_1<31,  38, (ops VRRC:$vD,  GPRC:$base, GPRC:$rA),
-                   "lvsl $vD, $base, $rA", LdStGeneral,
-                   []>, PPC970_Unit_LSU;
+def LVSL : XForm_1<31,   6, (ops VRRC:$vD, memrr:$src),
+                   "lvsl $vD, $src", LdStGeneral,
+                   [(set VRRC:$vD, (int_ppc_altivec_lvsl xoaddr:$src))]>,
+                   PPC970_Unit_LSU;
+def LVSR : XForm_1<31,  38, (ops VRRC:$vD, memrr:$src),
+                   "lvsl $vD, $src", LdStGeneral,
+                   [(set VRRC:$vD, (int_ppc_altivec_lvsr xoaddr:$src))]>,
+                   PPC970_Unit_LSU;
 
 let isStore = 1, noResults = 1, PPC970_Unit = 2 in {   // Stores.
 def STVEBX: XForm_8<31, 135, (ops VRRC:$rS, memrr:$dst),
@@ -236,6 +238,29 @@ def VMRGLW : VXForm_1<396, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
                       "vmrglw $vD, $vA, $vB", VecFP,
                       [(set VRRC:$vD,
                        (int_ppc_altivec_vmrglw VRRC:$vA, VRRC:$vB))]>;
+
+def VMULESB : VXForm_1<776, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vmulesb $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vmulesb VRRC:$vA, VRRC:$vB))]>;
+def VMULESH : VXForm_1<840, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vmulesh $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vmulesh VRRC:$vA, VRRC:$vB))]>;
+def VMULEUB : VXForm_1<520, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vmuleub $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vmuleub VRRC:$vA, VRRC:$vB))]>;
+def VMULEUH : VXForm_1<584, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vmuleuh $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vmuleuh VRRC:$vA, VRRC:$vB))]>;
+def VMULOSB : VXForm_1<264, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vmulosb $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vmulosb VRRC:$vA, VRRC:$vB))]>;
+                       
+                       
 def VREFP  : VXForm_2<266, (ops VRRC:$vD, VRRC:$vB),
                       "vrefp $vD, $vB", VecFP,
                       [(set VRRC:$vD, (int_ppc_altivec_vrefp VRRC:$vB))]>;
@@ -414,6 +439,62 @@ def VSPLTISW : VXForm_3<908, (ops VRRC:$vD, s5imm:$SIMM),
                        "vspltisw $vD, $SIMM", VecPerm,
                        [(set VRRC:$vD, (v4f32 vecspltisw:$SIMM))]>;
 
+// Vector Pack.
+def VPKPX   : VXForm_1<782, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkpx $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkpx VRRC:$vA, VRRC:$vB))]>;
+def VPKSHSS : VXForm_1<398, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkshss $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkshss VRRC:$vA, VRRC:$vB))]>;
+def VPKSHUS : VXForm_1<270, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkshus $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkshus VRRC:$vA, VRRC:$vB))]>;
+def VPKSWSS : VXForm_1<462, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkswss $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkswss VRRC:$vA, VRRC:$vB))]>;
+def VPKSWUS : VXForm_1<334, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkswus $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkswus VRRC:$vA, VRRC:$vB))]>;
+def VPKUHUM : VXForm_1<14, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkuhum $vD, $vA, $vB", VecFP,
+                       [/*TODO*/]>;
+def VPKUHUS : VXForm_1<142, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkuhus $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkuhus VRRC:$vA, VRRC:$vB))]>;
+def VPKUWUM : VXForm_1<78, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkuwum $vD, $vA, $vB", VecFP,
+                       [/*TODO*/]>;
+def VPKUWUS : VXForm_1<206, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB),
+                       "vpkuwus $vD, $vA, $vB", VecFP,
+                       [(set VRRC:$vD,
+                            (int_ppc_altivec_vpkuwus VRRC:$vA, VRRC:$vB))]>;
+
+// Vector Unpack.
+def VUPKHPX : VXForm_2<846, (ops VRRC:$vD, VRRC:$vB),
+                       "vupkhpx $vD, $vB", VecFP,
+                       [(set VRRC:$vD, (int_ppc_altivec_vupkhpx VRRC:$vB))]>;
+def VUPKHSB : VXForm_2<526, (ops VRRC:$vD, VRRC:$vB),
+                       "vupkhsb $vD, $vB", VecFP,
+                       [(set VRRC:$vD, (int_ppc_altivec_vupkhsb VRRC:$vB))]>;
+def VUPKHSH : VXForm_2<590, (ops VRRC:$vD, VRRC:$vB),
+                       "vupkhsh $vD, $vB", VecFP,
+                       [(set VRRC:$vD, (int_ppc_altivec_vupkhsh VRRC:$vB))]>;
+def VUPKLPX : VXForm_2<974, (ops VRRC:$vD, VRRC:$vB),
+                       "vupklpx $vD, $vB", VecFP,
+                       [(set VRRC:$vD, (int_ppc_altivec_vupklpx VRRC:$vB))]>;
+def VUPKLSB : VXForm_2<654, (ops VRRC:$vD, VRRC:$vB),
+                       "vupklsb $vD, $vB", VecFP,
+                       [(set VRRC:$vD, (int_ppc_altivec_vupklsb VRRC:$vB))]>;
+def VUPKLSH : VXForm_2<718, (ops VRRC:$vD, VRRC:$vB),
+                       "vupklsh $vD, $vB", VecFP,
+                       [(set VRRC:$vD, (int_ppc_altivec_vupklsh VRRC:$vB))]>;
+
 
 // Altivec Comparisons.