From 1e4cd12c8bf5c7ecf829f203b0162f7268da03cc Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 2 Dec 2020 14:38:07 -0800 Subject: [PATCH] asm: Try to fix sparc assembly for inverse matrix operations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is completely untested! 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 Reviewed-by: Marek Olšák Part-of: --- src/mesa/sparc/norm.S | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mesa/sparc/norm.S b/src/mesa/sparc/norm.S index f0b1fdeeba6..0f12500a8fe 100644 --- a/src/mesa/sparc/norm.S +++ b/src/mesa/sparc/norm.S @@ -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