Merge branch 'gallium-tex-surfaces' into gallium-0.1
[profile/ivi/mesa.git] / src / gallium / auxiliary / draw / draw_vs_aos.c
index 9e9f8ba..45f36cf 100644 (file)
@@ -532,10 +532,10 @@ static struct x86_reg fetch_src( struct aos_compilation *cp,
    if (swz != SSE_SWIZZLE_NOOP || negs != 0 || abs != 0) {
       struct x86_reg dst = aos_get_xmm_reg(cp);
 
-      if (swz != SSE_SWIZZLE_NOOP) {
+      if (swz != SSE_SWIZZLE_NOOP)
          emit_pshufd(cp, dst, arg0, swz);
-         arg0 = dst;
-      }
+      else
+         sse_movaps(cp->func, dst, arg0);
 
       if (negs && negs != 0xf) {
          struct x86_reg imm_swz = aos_get_internal_xmm(cp, IMM_SWZ);
@@ -550,15 +550,13 @@ static struct x86_reg fetch_src( struct aos_compilation *cp,
                           (negs & 2) ? 1 : 0,
                           (negs & 4) ? 1 : 0,
                           (negs & 8) ? 1 : 0));
-         sse_mulps(cp->func, dst, arg0);
+         sse_mulps(cp->func, dst, tmp);
 
          aos_release_xmm_reg(cp, tmp.idx);
-         arg0 = dst;
       }
       else if (negs) {
          struct x86_reg imm_negs = aos_get_internal_xmm(cp, IMM_NEGS);
          sse_mulps(cp->func, dst, imm_negs);
-         arg0 = dst;
       }
 
 
@@ -569,13 +567,14 @@ static struct x86_reg fetch_src( struct aos_compilation *cp,
          struct x86_reg neg = aos_get_internal(cp, IMM_NEGS);
          struct x86_reg tmp = aos_get_xmm_reg(cp);
 
-         sse_movaps(cp->func, tmp, arg0);
+         sse_movaps(cp->func, tmp, dst);
          sse_mulps(cp->func, tmp, neg);
-         sse_maxps(cp->func, dst, arg0);
+         sse_maxps(cp->func, dst, tmp);
 
          aos_release_xmm_reg(cp, tmp.idx);
-         arg0 = dst;
       }
+
+      return dst;
    }
       
    return arg0;
@@ -962,8 +961,8 @@ static boolean emit_COS( struct aos_compilation *cp, const struct tgsi_full_inst
    return TRUE;
 }
 
-
 /* The dotproduct instructions don't really do that well in sse:
+ * XXX: produces wrong results -- disabled.
  */
 static boolean emit_DP3( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
 {
@@ -985,8 +984,6 @@ static boolean emit_DP3( struct aos_compilation *cp, const struct tgsi_full_inst
    return TRUE;
 }
 
-
-
 static boolean emit_DP4( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
 {
    struct x86_reg arg0 = fetch_src(cp, &op->FullSrcRegisters[0]);