gallium: added ppc_vload_float(), for limited cases
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 22 Oct 2008 20:48:33 +0000 (14:48 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 22 Oct 2008 20:48:33 +0000 (14:48 -0600)
src/gallium/auxiliary/rtasm/rtasm_ppc.c
src/gallium/auxiliary/rtasm/rtasm_ppc.h

index 2d9f4e079ec4e0189fc114ea77211f67ab1666d8..65df676eae6b5d54d9b63b15655fb7463183ed92 100644 (file)
@@ -603,6 +603,24 @@ ppc_lvewx(struct ppc_function *p, uint vr, uint ra, uint rb)
    emit_x(p, 31, vr, ra, rb, 71);
 }
 
+/** vector load float: vr = splats(imm) */
+void
+ppc_vload_float(struct ppc_function *p, uint vr, float imm)
+{
+   if (imm == 0.0f) {
+      ppc_vxor(p, vr, vr, vr);
+   }
+   else if (imm == 1.0f) {
+      /* use 2^0=1 to get 1.0 */
+      ppc_vxor(p, vr, vr, vr);  /* vr = {0,0,0,0} */
+      ppc_vexptefp(p, vr, vr);  /* vr = 0^0 */
+   }
+   else {
+      assert(0);
+   }
+}
+
+
 
 
 /**
index 85679b4886192cdbe5084fac9a286dc499ae1fab..9f1e3fcd845496e9df40832da043941864068bf5 100644 (file)
@@ -158,6 +158,10 @@ ppc_lvx(struct ppc_function *p, uint vR, uint vA, uint vB);
 extern void
 ppc_lvewx(struct ppc_function *p, uint vR, uint vA, uint vB);
 
+/** vector load float: vr = splats(imm) */
+extern void
+ppc_vload_float(struct ppc_function *p, uint vr, float imm);
+
 
 
 /**