asm: Try to fix sparc assembly for inverse matrix operations

This is completely untested!

In commit 3175b63a0d, 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: 3175b63a0d ("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>
This commit is contained in:
Kenneth Graunke
2020-12-02 14:38:07 -08:00
parent 70762b826b
commit 1e4cd12c8b

View File

@@ -29,7 +29,7 @@ _mesa_sparc_transform_normalize_normals:
ld [%sp + STACK_VAR_OFF+0x4], %f15 ! f15 = scale
add %sp, 16, %sp
LDPTR [%o0 + MATRIX_INV], %o0 ! o0 = mat->inv
add %o0, MATRIX_INV, %o0 ! o0 = mat->inv
LDPTR [%o2 + V4F_START], %o5 ! o5 = 'from' in->start
ld [%o2 + V4F_COUNT], %g1 ! g1 = in->count
ld [%o2 + V4F_STRIDE], %g2 ! g2 = in->stride
@@ -168,7 +168,7 @@ _mesa_sparc_transform_normalize_normals_no_rot:
ld [%sp + STACK_VAR_OFF+0x4], %f15 ! f15 = scale
add %sp, 16, %sp
LDPTR [%o0 + MATRIX_INV], %o0 ! o0 = mat->inv
add %o0, MATRIX_INV, %o0 ! o0 = mat->inv
LDPTR [%o2 + V4F_START], %o5 ! o5 = 'from' in->start
ld [%o2 + V4F_COUNT], %g1 ! g1 = in->count
ld [%o2 + V4F_STRIDE], %g2 ! g2 = in->stride
@@ -273,7 +273,7 @@ _mesa_sparc_transform_rescale_normals_no_rot:
ld [%sp + STACK_VAR_OFF+0x0], %f15 ! f15 = scale
add %sp, 16, %sp
LDPTR [%o0 + MATRIX_INV], %o0 ! o0 = mat->inv
add %o0, MATRIX_INV, %o0 ! o0 = mat->inv
LDPTR [%o2 + V4F_START], %o5 ! o5 = 'from' in->start
ld [%o2 + V4F_COUNT], %g1 ! g1 = in->count
ld [%o2 + V4F_STRIDE], %g2 ! g2 = in->stride
@@ -324,7 +324,7 @@ _mesa_sparc_transform_rescale_normals:
ld [%sp + STACK_VAR_OFF+0x0], %f15 ! f15 = scale
add %sp, 16, %sp
LDPTR [%o0 + MATRIX_INV], %o0 ! o0 = mat->inv
add %o0, MATRIX_INV, %o0 ! o0 = mat->inv
LDPTR [%o2 + V4F_START], %o5 ! o5 = 'from' in->start
ld [%o2 + V4F_COUNT], %g1 ! g1 = in->count
ld [%o2 + V4F_STRIDE], %g2 ! g2 = in->stride
@@ -384,7 +384,7 @@ _mesa_sparc_transform_rescale_normals:
.globl _mesa_sparc_transform_normals_no_rot
_mesa_sparc_transform_normals_no_rot:
/* o0=mat o1=scale o2=in o3=lengths o4=dest */
LDPTR [%o0 + MATRIX_INV], %o0 ! o0 = mat->inv
add %o0, MATRIX_INV, %o0 ! o0 = mat->inv
LDPTR [%o2 + V4F_START], %o5 ! o5 = 'from' in->start
ld [%o2 + V4F_COUNT], %g1 ! g1 = in->count
ld [%o2 + V4F_STRIDE], %g2 ! g2 = in->stride
@@ -426,7 +426,7 @@ _mesa_sparc_transform_normals_no_rot:
.globl _mesa_sparc_transform_normals
_mesa_sparc_transform_normals:
/* o0=mat o1=scale o2=in o3=lengths o4=dest */
LDPTR [%o0 + MATRIX_INV], %o0 ! o0 = mat->inv
add %o0, MATRIX_INV, %o0 ! o0 = mat->inv
LDPTR [%o2 + V4F_START], %o5 ! o5 = 'from' in->start
ld [%o2 + V4F_COUNT], %g1 ! g1 = in->count
ld [%o2 + V4F_STRIDE], %g2 ! g2 = in->stride