asm: Fix x86 assembly for inverse matrix operations
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 2 Dec 2020 22:38:07 +0000 (14:38 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 3 Dec 2020 19:39:47 +0000 (11:39 -0800)
In commit 3175b63a0dfa290430f9f7eb651387788933a02b, Marek stopped
allocating the GLmatrix::inv field with malloc, instead embedding
it directly in the structure.  So, we need to drop a level of
indirection here and use (matrix pointer + MATRIX_INV) as the
inverse matrix array directly, rather than reading a pointer at
that offset and chasing it.

Fixes: 3175b63a0df ("mesa: don't allocate matrices with malloc")
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7889>

src/mesa/x86/sse_normal.S

index b04a77a..4a6573c 100644 (file)
@@ -57,7 +57,7 @@ GLNAME(_mesa_sse_transform_rescale_normals_no_rot):
        MOV_L   ( ARG_DEST, EDI )                       /* ptr to dest GLvector3f */
 
        MOV_L   ( ARG_MAT, EDX )                        /* ptr to matrix */
-       MOV_L   ( REGOFF(MATRIX_INV, EDX), EDX)         /* matrix->inv */
+       ADD_L   ( CONST(MATRIX_INV), EDX )              /* matrix->inv */
 
        MOV_L   ( REGOFF(V4F_COUNT, ESI), ECX )         /* source count */
 
@@ -119,7 +119,7 @@ GLNAME(_mesa_sse_transform_rescale_normals):
        MOV_L   ( ARG_DEST, EDI )                       /* ptr to dest GLvector3f */
 
        MOV_L   ( ARG_MAT, EDX )                        /* ptr to matrix */
-       MOV_L   ( REGOFF(MATRIX_INV, EDX), EDX)         /* matrix->inv */
+       ADD_L   ( CONST(MATRIX_INV), EDX )              /* matrix->inv */
 
        MOV_L   ( REGOFF(V4F_COUNT, ESI), ECX )         /* source count */
 
@@ -212,7 +212,7 @@ GLNAME(_mesa_sse_transform_normals_no_rot):
        MOV_L   ( ARG_DEST, EDI )                       /* ptr to dest GLvector3f */
 
        MOV_L   ( ARG_MAT, EDX )                        /* ptr to matrix */
-       MOV_L   ( REGOFF(MATRIX_INV, EDX), EDX)         /* matrix->inv */
+       ADD_L   ( CONST(MATRIX_INV), EDX )              /* matrix->inv */
 
        MOV_L   ( REGOFF(V4F_COUNT, ESI), ECX )         /* source count */