tnl: Optimize SSE load[23]f_1 since they don't need the identity swizzle.
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>
Tue, 9 Dec 2008 21:10:56 +0000 (13:10 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 9 Dec 2008 21:17:48 +0000 (13:17 -0800)
SSE movss from memory zeroes out everything above the destination dword, so
we get the (a, 0) or (a, 0, 0) result that these functions needed.

Bug #16520.

src/mesa/tnl/t_vertex_sse.c

index d8021a3d2ca07deec976250d42014c42c5bdf2c0..07adc1ed79e854e87e0798a4bf0fbcdad980fe69 100644 (file)
@@ -146,7 +146,8 @@ static void emit_load3f_1( struct x86_program *p,
                           struct x86_reg dest,
                           struct x86_reg arg0 )
 {
-   emit_load4f_1(p, dest, arg0);
+   /* Loading from memory erases the upper bits. */
+   sse_movss(&p->func, dest, arg0);
 }
 
 static void emit_load2f_2( struct x86_program *p, 
@@ -160,7 +161,8 @@ static void emit_load2f_1( struct x86_program *p,
                           struct x86_reg dest,
                           struct x86_reg arg0 )
 {
-   emit_load4f_1(p, dest, arg0);
+   /* Loading from memory erases the upper bits. */
+   sse_movss(&p->func, dest, arg0);
 }
 
 static void emit_load1f_1( struct x86_program *p,