13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Mesa 3-D graphics library 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Version: 3.5 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the "Software"), 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * to deal in the Software without restriction, including without limitation 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Software is furnished to do so, subject to the following conditions: 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice shall be included 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * in all copies or substantial portions of the Software. 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef USE_SSE_ASM 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "assyntax.h" 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "matypes.h" 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "xform_args.h" 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SEG_TEXT 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define FRAME_OFFSET 8 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SRC(i) REGOFF(i * 4, ESI) 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define DST(i) REGOFF(i * 4, EDI) 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MAT(i) REGOFF(i * 4, EDX) 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SELECT(r0, r1, r2, r3) CONST( r0 * 64 + r1 * 16 + r2 * 4 + r3 ) 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgALIGNTEXT16 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLOBL GLNAME( _mesa_sse_transform_points4_general ) 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgHIDDEN(_mesa_sse_transform_points4_general) 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLNAME( _mesa_sse_transform_points4_general ): 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PUSH_L( ESI ) 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PUSH_L( EDI ) 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_SOURCE, ESI ) 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_DEST, EDI ) 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_MATRIX, EDX ) 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TEST_L( ECX, ECX ) /* verify non-zero count */ 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org JE( LLBL( sse_general_done ) ) 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) /* stride */ 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) ) /* set dest flags */ 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) /* set dest count */ 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) )/* set dest size */ 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_START, ESI), ESI ) /* ptr to first source vertex */ 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_START, EDI), EDI ) /* ptr to first dest vertex */ 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PREFETCHT0( REGIND(ESI) ) 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(0), XMM4 ) /* m3 | m2 | m1 | m0 */ 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(4), XMM5 ) /* m7 | m6 | m5 | m4 */ 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(8), XMM6 ) /* m11 | m10 | m9 | m8 */ 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(12), XMM7 ) /* m15 | m14 | m13 | m12 */ 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgALIGNTEXT16 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( sse_general_loop ): 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(0), XMM0 ) /* ox */ 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM0, XMM0 ) /* ox | ox | ox | ox */ 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM4, XMM0 ) /* ox*m3 | ox*m2 | ox*m1 | ox*m0 */ 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(1), XMM1 ) /* oy */ 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM1, XMM1 ) /* oy | oy | oy | oy */ 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM5, XMM1 ) /* oy*m7 | oy*m6 | oy*m5 | oy*m4 */ 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(2), XMM2 ) /* oz */ 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM2, XMM2 ) /* oz | oz | oz | oz */ 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM6, XMM2 ) /* oz*m11 | oz*m10 | oz*m9 | oz*m8 */ 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(3), XMM3 ) /* ow */ 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM3, XMM3 ) /* ow | ow | ow | ow */ 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM7, XMM3 ) /* ow*m15 | ow*m14 | ow*m13 | ow*m12 */ 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADDPS( XMM1, XMM0 ) /* ox*m3+oy*m7 | ... */ 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADDPS( XMM2, XMM0 ) /* ox*m3+oy*m7+oz*m11 | ... */ 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADDPS( XMM3, XMM0 ) /* ox*m3+oy*m7+oz*m11+ow*m15 | ... */ 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( XMM0, DST(0) ) /* ->D(3) | ->D(2) | ->D(1) | ->D(0) */ 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( CONST(16), EDI ) 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( EAX, ESI ) 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org DEC_L( ECX ) 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org JNZ( LLBL( sse_general_loop ) ) 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( sse_general_done ): 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org POP_L( EDI ) 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org POP_L( ESI ) 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org RET 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgALIGNTEXT4 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLOBL GLNAME( _mesa_sse_transform_points4_3d ) 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgHIDDEN(_mesa_sse_transform_points4_3d) 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLNAME( _mesa_sse_transform_points4_3d ): 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PUSH_L( ESI ) 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PUSH_L( EDI ) 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_SOURCE, ESI ) /* ptr to source GLvector4f */ 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_DEST, EDI ) /* ptr to dest GLvector4f */ 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_MATRIX, EDX ) /* ptr to matrix */ 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) /* source count */ 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TEST_L( ECX, ECX) 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org JZ( LLBL(K_GTP43P3DR_finish) ) /* count was zero; go to finish */ 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) /* stride */ 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) ) /* set dest flags */ 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) /* set dest count */ 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) )/* set dest size */ 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHL_L( CONST(4), ECX ) /* count *= 16 */ 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_START, ESI), ESI ) /* ptr to first source vertex */ 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_START, EDI), EDI ) /* ptr to first dest vertex */ 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( EDI, ECX ) /* count += dest ptr */ 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(0), XMM0 ) /* m3 | m2 | m1 | m0 */ 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(4), XMM1 ) /* m7 | m6 | m5 | m4 */ 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(8), XMM2 ) /* m11 | m10 | m9 | m8 */ 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( MAT(12), XMM3 ) /* m15 | m14 | m13 | m12 */ 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgALIGNTEXT32 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( K_GTP43P3DR_top ): 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(0), XMM4 ) /* ox */ 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM4, XMM4 ) /* ox | ox | ox | ox */ 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM0, XMM4 ) /* ox*m3 | ox*m2 | ox*m1 | ox*m0 */ 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(1), XMM5 ) /* oy */ 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM5, XMM5 ) /* oy | oy | oy | oy */ 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM1, XMM5 ) /* oy*m7 | oy*m6 | oy*m5 | oy*m4 */ 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(2), XMM6 ) /* oz */ 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM6, XMM6 ) /* oz | oz | oz | oz */ 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM2, XMM6 ) /* oz*m11 | oz*m10 | oz*m9 | oz*m8 */ 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(3), XMM7 ) /* ow */ 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org SHUFPS( CONST(0x0), XMM7, XMM7 ) /* ow | ow | ow | ow */ 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MULPS( XMM3, XMM7 ) /* ow*m15 | ow*m14 | ow*m13 | ow*m12 */ 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADDPS( XMM5, XMM4 ) /* ox*m3+oy*m7 | ... */ 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADDPS( XMM6, XMM4 ) /* ox*m3+oy*m7+oz*m11 | ... */ 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADDPS( XMM7, XMM4 ) /* ox*m3+oy*m7+oz*m11+ow*m15 | ... */ 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( XMM4, DST(0) ) /* ->D(3) | ->D(2) | ->D(1) | ->D(0) */ 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( SRC(3), XMM4 ) /* ow */ 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVSS( XMM4, DST(3) ) /* ->D(3) */ 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( K_GTP43P3DR_skip ): 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( CONST(16), EDI ) 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( EAX, ESI ) 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org CMP_L( ECX, EDI ) 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org JNE( LLBL(K_GTP43P3DR_top) ) 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( K_GTP43P3DR_finish ): 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org POP_L( EDI ) 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org POP_L( ESI ) 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org RET 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgALIGNTEXT16 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLOBL GLNAME( _mesa_sse_transform_points4_identity ) 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgHIDDEN(_mesa_sse_transform_points4_identity) 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLNAME( _mesa_sse_transform_points4_identity ): 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PUSH_L( ESI ) 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PUSH_L( EDI ) 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_SOURCE, ESI ) 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_DEST, EDI ) 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ARG_MATRIX, EDX ) 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org TEST_L( ECX, ECX ) /* verify non-zero count */ 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org JE( LLBL( sse_identity_done ) ) 2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) /* stride */ 2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) ) /* set dest flags */ 2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) /* set dest count */ 2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) )/* set dest size */ 2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_START, ESI), ESI ) /* ptr to first source vertex */ 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOV_L( REGOFF(V4F_START, EDI), EDI ) /* ptr to first dest vertex */ 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgALIGNTEXT16 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( sse_identity_loop ): 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org PREFETCHNTA( REGOFF(32, ESI) ) 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( REGIND(ESI), XMM0 ) 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( EAX, ESI ) 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MOVAPS( XMM0, REGIND(EDI) ) 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ADD_L( CONST(16), EDI ) 2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org DEC_L( ECX ) 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org JNZ( LLBL( sse_identity_loop ) ) 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgLLBL( sse_identity_done ): 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org POP_L( EDI ) 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org POP_L( ESI ) 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org RET 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#if defined (__ELF__) && defined (__linux__) 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org .section .note.GNU-stack,"",%progbits 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 236