X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fx86%2F3dnow_normal.S;h=7f5f6b357f459caf72e68918a0f51b7a00c382f2;hb=64644ec3b21884d4a974fa29087fa98c4ed9e112;hp=e7659a6ba6a11842008f90764450f245f3c780c3;hpb=5c31f8678b7ad10145c434c00461115449a357e0;p=mesa.git diff --git a/src/mesa/x86/3dnow_normal.S b/src/mesa/x86/3dnow_normal.S index e7659a6ba6a..7f5f6b357f4 100644 --- a/src/mesa/x86/3dnow_normal.S +++ b/src/mesa/x86/3dnow_normal.S @@ -1,4 +1,3 @@ -/* $Id: 3dnow_normal.S,v 1.4 2003/01/28 22:41:18 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -28,6 +27,9 @@ * 3Dnow assembly code by Holger Waechtler */ +#ifdef USE_3DNOW_ASM + +#include "assyntax.h" #include "matypes.h" #include "norm_args.h" @@ -39,9 +41,10 @@ ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_transform_normalize_normals) +HIDDEN(_mesa_3dnow_transform_normalize_normals) GLNAME(_mesa_3dnow_transform_normalize_normals): - #define FRAME_OFFSET 12 +#define FRAME_OFFSET 12 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -50,25 +53,25 @@ GLNAME(_mesa_3dnow_transform_normalize_normals): MOV_L ( ARG_LENGTHS, EDI ) MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EBP ) /* dest->count = in->count */ - MOV_L ( EBP, REGOFF(V3F_COUNT, EAX) ) - MOV_L ( REGOFF(V3F_START, ESI), EDX ) /* in->start */ - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_COUNT, ESI), EBP ) /* dest->count = in->count */ + MOV_L ( EBP, REGOFF(V4F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_START, ESI), EDX ) /* in->start */ + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ MOV_L ( ARG_MAT, ECX ) MOV_L ( REGOFF(MATRIX_INV, ECX), ECX ) /* mat->inv */ CMP_L ( CONST(0), EBP ) /* count > 0 ?? */ JE ( LLBL (G3TN_end) ) - MOV_L ( REGOFF (V3F_COUNT, ESI), EBP ) + MOV_L ( REGOFF (V4F_COUNT, ESI), EBP ) FEMMS PUSH_L ( EBP ) PUSH_L ( EAX ) PUSH_L ( EDX ) /* save counter & pointer for */ /* the normalize pass */ - #undef FRAME_OFFSET - #define FRAME_OFFSET 24 +#undef FRAME_OFFSET +#define FRAME_OFFSET 24 MOVQ ( M(0), MM3 ) /* m1 | m0 */ MOVQ ( M(4), MM4 ) /* m5 | m4 */ @@ -126,8 +129,8 @@ LLBL (G3TN_transform): PREFETCH ( REGIND(EDX) ) MOVD ( MM1, REGOFF(-8, EAX) ) /* write r2 */ - DEC_L ( EBP ) /* decrement normal counter */ - JA ( LLBL (G3TN_transform) ) + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ + JNZ ( LLBL (G3TN_transform) ) POP_L ( EDX ) /* end of transform --- */ @@ -161,9 +164,9 @@ LLBL (G3TN_norm_w_lengths): MOVD ( MM1, REGOFF(8, EAX) ) /* write new x2 */ ADD_L ( CONST(16), EAX ) /* next r */ - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ - JA ( LLBL (G3TN_norm_w_lengths) ) + JNZ ( LLBL (G3TN_norm_w_lengths) ) JMP ( LLBL (G3TN_exit_3dnow) ) ALIGNTEXT32 @@ -189,7 +192,7 @@ LLBL (G3TN_norm): MOVQ ( MM5, MM4 ) PUNPCKLDQ ( MM3, MM3 ) - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ PFMUL ( MM5, MM5 ) PFRSQIT1 ( MM3, MM5 ) @@ -201,7 +204,7 @@ LLBL (G3TN_norm): PFMUL ( MM5, MM1 ) /* | x2 (normalize*/ MOVD ( MM1, REGOFF(-8, EAX) ) /* write new x2 */ - JA ( LLBL (G3TN_norm) ) + JNZ ( LLBL (G3TN_norm) ) LLBL (G3TN_exit_3dnow): FEMMS @@ -216,10 +219,11 @@ LLBL (G3TN_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_transform_normalize_normals_no_rot) +HIDDEN(_mesa_3dnow_transform_normalize_normals_no_rot) GLNAME(_mesa_3dnow_transform_normalize_normals_no_rot): - #undef FRAME_OFFSET - #define FRAME_OFFSET 12 +#undef FRAME_OFFSET +#define FRAME_OFFSET 12 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -228,12 +232,12 @@ GLNAME(_mesa_3dnow_transform_normalize_normals_no_rot): MOV_L ( ARG_LENGTHS, EDI ) MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EBP ) /* dest->count = in->count */ - MOV_L ( EBP, REGOFF(V3F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_COUNT, ESI), EBP ) /* dest->count = in->count */ + MOV_L ( EBP, REGOFF(V4F_COUNT, EAX) ) MOV_L ( ARG_MAT, ECX ) - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ MOV_L ( REGOFF(MATRIX_INV, ECX), ECX ) /* mat->inv */ - MOV_L ( REGOFF(V3F_START, ESI), EDX ) /* in->start */ + MOV_L ( REGOFF(V4F_START, ESI), EDX ) /* in->start */ CMP_L ( CONST(0), EBP ) /* count > 0 ?? */ JE ( LLBL (G3TNNR_end) ) @@ -285,13 +289,13 @@ LLBL (G3TNNR_norm_w_lengths): /* use precalculated lengths */ ADD_L ( CONST(4), EDI ) /* next length */ PFMUL ( MM3, MM6 ) /* x1 (normalized) | x0 (normalized) */ - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ MOVQ ( MM6, REGOFF(-16, EAX) ) /* write r0, r1 */ MOVD ( MM7, REGOFF(-8, EAX) ) /* write r2 */ MOVD ( REGIND(EDI), MM3 ) /* | length (x) */ - JA ( LLBL (G3TNNR_norm_w_lengths) ) + JNZ ( LLBL (G3TNNR_norm_w_lengths) ) JMP ( LLBL (G3TNNR_exit_3dnow) ) ALIGNTEXT32 @@ -327,7 +331,7 @@ LLBL (G3TNNR_norm): /* need to calculate lengths */ PFMUL ( MM5, MM5 ) PFRSQIT1 ( MM3, MM5 ) - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ PFRCPIT2 ( MM4, MM5 ) PFMUL ( MM5, MM6 ) /* x1 (normalized) | x0 (normalized) */ @@ -336,7 +340,7 @@ LLBL (G3TNNR_norm): /* need to calculate lengths */ PFMUL ( MM5, MM7 ) /* | x2 (normalized) */ MOVD ( MM7, REGOFF(-8, EAX) ) /* write r2 */ - JA ( LLBL (G3TNNR_norm) ) + JNZ ( LLBL (G3TNNR_norm) ) LLBL (G3TNNR_exit_3dnow): @@ -355,10 +359,11 @@ LLBL (G3TNNR_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_transform_rescale_normals_no_rot) +HIDDEN(_mesa_3dnow_transform_rescale_normals_no_rot) GLNAME(_mesa_3dnow_transform_rescale_normals_no_rot): - #undef FRAME_OFFSET - #define FRAME_OFFSET 12 +#undef FRAME_OFFSET +#define FRAME_OFFSET 12 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -366,13 +371,13 @@ GLNAME(_mesa_3dnow_transform_rescale_normals_no_rot): MOV_L ( ARG_IN, EAX ) MOV_L ( ARG_DEST, EDX ) - MOV_L ( REGOFF(V3F_COUNT, EAX), EBP ) /* dest->count = in->count */ - MOV_L ( EBP, REGOFF(V3F_COUNT, EDX) ) + MOV_L ( REGOFF(V4F_COUNT, EAX), EBP ) /* dest->count = in->count */ + MOV_L ( EBP, REGOFF(V4F_COUNT, EDX) ) MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_MAT, ECX ) MOV_L ( REGOFF(MATRIX_INV, ECX), ECX ) /* mat->inv */ - MOV_L ( REGOFF(V3F_START, EDX), EAX ) /* dest->start */ - MOV_L ( REGOFF(V3F_START, ESI), EDX ) /* in->start */ + MOV_L ( REGOFF(V4F_START, EDX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, ESI), EDX ) /* in->start */ CMP_L ( CONST(0), EBP ) JE ( LLBL (G3TRNR_end) ) @@ -406,11 +411,11 @@ LLBL (G3TRNR_rescale): PFMUL ( MM2, MM5 ) /* | x2*m10 */ ADD_L ( CONST(16), EAX ) /* next r */ - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ MOVQ ( MM4, REGOFF(-16, EAX) ) /* write r0, r1 */ MOVD ( MM5, REGOFF(-8, EAX) ) /* write r2 */ - JA ( LLBL (G3TRNR_rescale) ) /* cnt > 0 ? -> process next normal */ + JNZ ( LLBL (G3TRNR_rescale) ) /* cnt > 0 ? -> process next normal */ FEMMS @@ -426,10 +431,11 @@ LLBL (G3TRNR_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_transform_rescale_normals) +HIDDEN(_mesa_3dnow_transform_rescale_normals) GLNAME(_mesa_3dnow_transform_rescale_normals): - #undef FRAME_OFFSET - #define FRAME_OFFSET 8 +#undef FRAME_OFFSET +#define FRAME_OFFSET 8 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -437,10 +443,10 @@ GLNAME(_mesa_3dnow_transform_rescale_normals): MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) MOV_L ( ARG_MAT, ECX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EDI ) /* dest->count = in->count */ - MOV_L ( EDI, REGOFF(V3F_COUNT, EAX) ) - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ - MOV_L ( REGOFF(V3F_START, ESI), EDX ) /* in->start */ + MOV_L ( REGOFF(V4F_COUNT, ESI), EDI ) /* dest->count = in->count */ + MOV_L ( EDI, REGOFF(V4F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, ESI), EDX ) /* in->start */ MOV_L ( REGOFF(MATRIX_INV, ECX), ECX ) /* mat->inv */ CMP_L ( CONST(0), EDI ) @@ -505,8 +511,8 @@ LLBL (G3TR_rescale): PFADD ( MM2, MM1 ) /* *not used* | x0*m8+x1*m9+x2*m10 */ MOVD ( MM1, REGOFF(-8, EAX) ) /* write r2 */ - DEC_L ( EDI ) /* decrement normal counter */ - JA ( LLBL (G3TR_rescale) ) + SUB_L ( CONST(1), EDI ) /* decrement normal counter */ + JNZ ( LLBL (G3TR_rescale) ) FEMMS @@ -523,10 +529,11 @@ LLBL (G3TR_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_transform_normals_no_rot) +HIDDEN(_mesa_3dnow_transform_normals_no_rot) GLNAME(_mesa_3dnow_transform_normals_no_rot): - #undef FRAME_OFFSET - #define FRAME_OFFSET 8 +#undef FRAME_OFFSET +#define FRAME_OFFSET 8 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -534,10 +541,10 @@ GLNAME(_mesa_3dnow_transform_normals_no_rot): MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) MOV_L ( ARG_MAT, ECX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EDI ) /* dest->count = in->count */ - MOV_L ( EDI, REGOFF(V3F_COUNT, EAX) ) - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ - MOV_L ( REGOFF(V3F_START, ESI), EDX ) /* in->start */ + MOV_L ( REGOFF(V4F_COUNT, ESI), EDI ) /* dest->count = in->count */ + MOV_L ( EDI, REGOFF(V4F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, ESI), EDX ) /* in->start */ MOV_L ( REGOFF(MATRIX_INV, ECX), ECX ) /* mat->inv */ CMP_L ( CONST(0), EDI ) @@ -567,11 +574,11 @@ LLBL (G3TNR_transform): PFMUL ( MM2, MM5 ) /* | x2*m10 */ ADD_L ( CONST(16), EAX ) /* next r */ - DEC_L ( EDI ) /* decrement normal counter */ + SUB_L ( CONST(1), EDI ) /* decrement normal counter */ MOVQ ( MM4, REGOFF(-16, EAX) ) /* write r0, r1 */ MOVD ( MM5, REGOFF(-8, EAX) ) /* write r2 */ - JA ( LLBL (G3TNR_transform) ) + JNZ ( LLBL (G3TNR_transform) ) FEMMS @@ -589,10 +596,11 @@ LLBL (G3TNR_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_transform_normals) +HIDDEN(_mesa_3dnow_transform_normals) GLNAME(_mesa_3dnow_transform_normals): - #undef FRAME_OFFSET - #define FRAME_OFFSET 8 +#undef FRAME_OFFSET +#define FRAME_OFFSET 8 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -600,10 +608,10 @@ GLNAME(_mesa_3dnow_transform_normals): MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) MOV_L ( ARG_MAT, ECX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EDI ) /* dest->count = in->count */ - MOV_L ( EDI, REGOFF(V3F_COUNT, EAX) ) - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ - MOV_L ( REGOFF(V3F_START, ESI), EDX ) /* in->start */ + MOV_L ( REGOFF(V4F_COUNT, ESI), EDI ) /* dest->count = in->count */ + MOV_L ( EDI, REGOFF(V4F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, ESI), EDX ) /* in->start */ MOV_L ( REGOFF(MATRIX_INV, ECX), ECX ) /* mat->inv */ CMP_L ( CONST(0), EDI ) /* count > 0 ?? */ @@ -655,9 +663,9 @@ LLBL (G3T_transform): PFADD ( MM2, MM1 ) /* *not used* | x0*m8+x1*m9+x2*m10 */ MOVD ( MM1, REGOFF(-8, EAX) ) /* write r2 */ - DEC_L ( EDI ) /* decrement normal counter */ + SUB_L ( CONST(1), EDI ) /* decrement normal counter */ - JA ( LLBL (G3T_transform) ) + JNZ ( LLBL (G3T_transform) ) FEMMS @@ -673,10 +681,11 @@ LLBL (G3T_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_normalize_normals) +HIDDEN(_mesa_3dnow_normalize_normals) GLNAME(_mesa_3dnow_normalize_normals): - #undef FRAME_OFFSET - #define FRAME_OFFSET 12 +#undef FRAME_OFFSET +#define FRAME_OFFSET 12 PUSH_L ( EDI ) PUSH_L ( ESI ) @@ -684,10 +693,10 @@ GLNAME(_mesa_3dnow_normalize_normals): MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EBP ) /* dest->count = in->count */ - MOV_L ( EBP, REGOFF(V3F_COUNT, EAX) ) - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ - MOV_L ( REGOFF(V3F_START, ESI), ECX ) /* in->start */ + MOV_L ( REGOFF(V4F_COUNT, ESI), EBP ) /* dest->count = in->count */ + MOV_L ( EBP, REGOFF(V4F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, ESI), ECX ) /* in->start */ MOV_L ( ARG_LENGTHS, EDX ) CMP_L ( CONST(0), EBP ) /* count > 0 ?? */ @@ -721,9 +730,9 @@ LLBL (G3N_norm1): /* use precalculated lengths */ ADD_L ( CONST(16), EAX ) /* next r */ ADD_L ( CONST(4), EDX ) /* next length */ - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ - JA ( LLBL (G3N_norm1) ) + JNZ ( LLBL (G3N_norm1) ) JMP ( LLBL (G3N_end1) ) @@ -732,14 +741,14 @@ LLBL (G3N_norm2): /* need to calculate lengths */ PREFETCHW ( REGIND(EAX) ) - MOVQ ( MM0, MM3 ) /* x1 | x0 */ - ADD_L ( STRIDE, ECX ) /* next normal */ - PREFETCH ( REGIND(ECX) ) MOVQ ( REGIND(ECX), MM0 ) /* x1 | x0 */ MOVD ( REGOFF(8, ECX), MM1 ) /* | x2 */ + MOVQ ( MM0, MM3 ) /* x1 | x0 */ + ADD_L ( STRIDE, ECX ) /* next normal */ + PFMUL ( MM0, MM3 ) /* x1*x1 | x0*x0 */ MOVQ ( MM1, MM4 ) /* | x2 */ @@ -756,7 +765,7 @@ LLBL (G3N_norm2): /* need to calculate lengths */ PFMUL ( MM5, MM5 ) PFRSQIT1 ( MM3, MM5 ) - DEC_L ( EBP ) /* decrement normal counter */ + SUB_L ( CONST(1), EBP ) /* decrement normal counter */ PFRCPIT2 ( MM4, MM5 ) @@ -766,7 +775,7 @@ LLBL (G3N_norm2): /* need to calculate lengths */ PFMUL ( MM5, MM1 ) /* | x2 (normalized) */ MOVD ( MM1, REGOFF(-8, EAX) ) /* write new x2 */ - JA ( LLBL (G3N_norm2) ) + JNZ ( LLBL (G3N_norm2) ) LLBL (G3N_end1): FEMMS @@ -784,19 +793,20 @@ LLBL (G3N_end): ALIGNTEXT16 GLOBL GLNAME(_mesa_3dnow_rescale_normals) +HIDDEN(_mesa_3dnow_rescale_normals) GLNAME(_mesa_3dnow_rescale_normals): - #undef FRAME_OFFSET - #define FRAME_OFFSET 8 +#undef FRAME_OFFSET +#define FRAME_OFFSET 8 PUSH_L ( EDI ) PUSH_L ( ESI ) MOV_L ( ARG_IN, ESI ) MOV_L ( ARG_DEST, EAX ) - MOV_L ( REGOFF(V3F_COUNT, ESI), EDX ) /* dest->count = in->count */ - MOV_L ( EDX, REGOFF(V3F_COUNT, EAX) ) - MOV_L ( REGOFF(V3F_START, EAX), EAX ) /* dest->start */ - MOV_L ( REGOFF(V3F_START, ESI), ECX ) /* in->start */ + MOV_L ( REGOFF(V4F_COUNT, ESI), EDX ) /* dest->count = in->count */ + MOV_L ( EDX, REGOFF(V4F_COUNT, EAX) ) + MOV_L ( REGOFF(V4F_START, EAX), EAX ) /* dest->start */ + MOV_L ( REGOFF(V4F_START, ESI), ECX ) /* in->start */ CMP_L ( CONST(0), EDX ) JE ( LLBL (G3R_end) ) @@ -825,8 +835,8 @@ LLBL (G3R_rescale): MOVQ ( MM1, REGOFF(-16, EAX) ) /* write r0, r1 */ MOVD ( MM2, REGOFF(-8, EAX) ) /* write r2 */ - DEC_L ( EDX ) /* decrement normal counter */ - JA ( LLBL (G3R_rescale) ) + SUB_L ( CONST(1), EDX ) /* decrement normal counter */ + JNZ ( LLBL (G3R_rescale) ) FEMMS @@ -834,3 +844,9 @@ LLBL (G3R_end): POP_L ( ESI ) POP_L ( EDI ) RET + +#endif + +#if defined (__ELF__) && defined (__linux__) + .section .note.GNU-stack,"",%progbits +#endif