swrast/sse: Fix _mesa_sse_transform_pointsX_3d_no_rot
authorPauli Nieminen <suokkos@gmail.com>
Tue, 2 Feb 2010 18:50:22 +0000 (20:50 +0200)
committerPauli Nieminen <suokkos@gmail.com>
Thu, 4 Feb 2010 11:13:52 +0000 (13:13 +0200)
PXOR user in code were causing the lowest SP float register to have NaN
values which made all math operations in that slot fail. Correct istruction
to clear float registers is XORPS which handles single precission floats
correctly.

Fixes progs/tests/fog in swrast SSE mode.

Now the correct commit instead of 66d09e4a2a6b770ddb which is not even close
of correct fix for the bug.

src/mesa/x86/sse_xform2.S
src/mesa/x86/sse_xform3.S

index 91b82e729719e4faad997fa0db06ddb2d0a9bd68..a443dad35cc8a19f643b9bc5f43b8f3511e94204 100644 (file)
@@ -186,6 +186,7 @@ GLNAME(_mesa_sse_transform_points2_3d_no_rot):
     MOV_L( REGOFF(V4F_START, EDI), EDI )       /* ptr to first dest vertex */
     ADD_L( EDI, ECX )                          /* count += dest ptr */
 
+    XORPS( XMM0, XMM0 )                         /* clean the working register */
 
 ALIGNTEXT32
     MOVSS    ( M(0), XMM1 )                    /* - | - |  -  | m0  */
index 1fc79ef21bdb7816481678e995b6cfc9f2ea71bb..4bc22d8a545b948f7d1fbaeec5f233d8e51a0a21 100644 (file)
@@ -198,6 +198,7 @@ GLNAME(_mesa_sse_transform_points3_3d_no_rot):
     MOV_L( REGOFF(V4F_START, EDI), EDI )       /* ptr to first dest vertex */
     ADD_L( EDI, ECX )                          /* count += dest ptr */
 
+    XORPS( XMM0, XMM0 )                         /* clean the working register */
 
 ALIGNTEXT32
     MOVSS    ( M(0), XMM1 )                    /* - | - |  -  | m0  */