⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3dnow_normal.s

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 S
📖 第 1 页 / 共 2 页
字号:
ALIGNTEXT16GLOBL 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    PUSH_L     ( EDI )    PUSH_L     ( ESI )    MOV_L      ( ARG_IN, ESI )    MOV_L      ( ARG_DEST, EAX )    MOV_L      ( ARG_MAT, ECX )    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 )    JE         ( LLBL (G3TR_end) )    FEMMS    MOVQ       ( REGIND(ECX), MM3 )     /* m1            | m0                 */    MOVQ       ( REGOFF(16,ECX), MM4 )  /* m5            | m4                 */    MOVD       ( ARG_SCALE, MM0 )       /* scale       */    MOVD       ( REGOFF(8,ECX), MM5 )   /*               | m2                 */    PUNPCKLDQ  ( MM0, MM0 )             /* scale         | scale              */    PUNPCKLDQ  ( REGOFF(24, ECX), MM5 )    PFMUL      ( MM0, MM3 )             /* scale*m1      | scale*m0           */    MOVQ       ( REGOFF(32, ECX), MM6 ) /* m9            | m8*/    PFMUL      ( MM0, MM4 )             /* scale*m5      | scale*m4           */    MOVD       ( REGOFF(40, ECX), MM7 ) /*               | m10                */    PFMUL      ( MM0, MM5 )             /* scale*m6      | scale*m2           */    PFMUL      ( MM0, MM6 )             /* scale*m9      | scale*m8           */    PFMUL      ( MM0, MM7 )             /*               | scale*m10          */ALIGNTEXT32LLBL (G3TR_rescale):    PREFETCHW  ( REGIND(EAX) )    MOVQ       ( REGIND(EDX), MM0 )     /* x1            | x0                 */    MOVD       ( REGOFF(8, EDX), MM2 )  /*               | x2                 */    MOVQ       ( MM0, MM1 )             /* x1            | x0                 */    PUNPCKLDQ  ( MM2, MM2 )             /* x2            | x2                 */    PFMUL      ( MM3, MM0 )             /* x1*m1         | x0*m0              */    ADD_L      ( CONST(16), EAX )       /* next r                             */    PFMUL      ( MM4, MM1 )             /* x1*m5         | x0*m4              */    PFACC      ( MM1, MM0 )             /* x0*m4+x1*m5   | x0*m0+x1*m1        */    MOVQ       ( REGIND(EDX), MM1 )     /* x1            | x0                 */    PFMUL      ( MM5, MM2 )             /* x2*m6         | x2*m2              */    PFADD      ( MM2, MM0 )             /* x0*m4...+x2*m6| x0*m0+x1*m1+x2*m2  */    MOVD       ( REGOFF(8, EDX), MM2 )  /*               | x2                 */    ADD_L      ( STRIDE, EDX )          /* next normal                    */    PREFETCH   ( REGIND(EDX) )    MOVQ       ( MM0, REGOFF(-16, EAX) ) /* write r0, r1                      */    PFMUL      ( MM6, MM1 )             /* x1*m9         | x0*m8              */    PFMUL      ( MM7, MM2 )             /*               | x2*m10             */    PFACC      ( MM1, MM1 )             /* *not used*    | x0*m8+x1*m9        */    PFADD      ( MM2, MM1 )             /* *not used*    | x0*m8+x1*m9+x2*m10 */    MOVD       ( MM1, REGOFF(-8, EAX) ) /* write r2                           */    SUB_L      ( CONST(1), EDI )        /* decrement normal counter           */    JNZ        ( LLBL (G3TR_rescale) )    FEMMSLLBL (G3TR_end):    POP_L       ( ESI )    POP_L       ( EDI )    RETALIGNTEXT16GLOBL 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    PUSH_L     ( EDI )    PUSH_L     ( ESI )    MOV_L      ( ARG_IN, ESI )    MOV_L      ( ARG_DEST, EAX )    MOV_L      ( ARG_MAT, ECX )    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 )    JE         ( LLBL (G3TNR_end) )    FEMMS    MOVD       ( REGIND(ECX), MM0 )     /*               | m0                 */    PUNPCKLDQ  ( REGOFF(20, ECX), MM0 ) /* m5            | m0                 */    MOVD       ( REGOFF(40, ECX), MM2 ) /*               | m10                */    PUNPCKLDQ  ( MM2, MM2 )             /* m10           | m10                */ALIGNTEXT32LLBL (G3TNR_transform):    PREFETCHW  ( REGIND(EAX) )    MOVQ       ( REGIND(EDX), MM4 )     /* x1            | x0                 */    MOVD       ( REGOFF(8, EDX), MM5 )  /*               | x2                 */    PFMUL      ( MM0, MM4 )             /* x1*m5         | x0*m0              */    ADD_L      ( STRIDE, EDX)           /* next normal      */    PREFETCH   ( REGIND(EDX) )    PFMUL      ( MM2, MM5 )             /*               | x2*m10             */    ADD_L      ( CONST(16), EAX )       /* next r                             */    SUB_L      ( CONST(1), EDI )        /* decrement normal counter           */    MOVQ       ( MM4, REGOFF(-16, EAX) ) /* write r0, r1                      */    MOVD       ( MM5, REGOFF(-8, EAX) ) /* write r2                           */    JNZ        ( LLBL (G3TNR_transform) )    FEMMSLLBL (G3TNR_end):    POP_L       ( ESI )    POP_L       ( EDI )    RETALIGNTEXT16GLOBL GLNAME(_mesa_3dnow_transform_normals)HIDDEN(_mesa_3dnow_transform_normals)GLNAME(_mesa_3dnow_transform_normals):#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      ( ARG_MAT, ECX )    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 ??                       */    JE         ( LLBL (G3T_end) )    FEMMS    MOVQ       ( REGIND(ECX), MM3 )     /* m1            | m0                 */    MOVQ       ( REGOFF(16, ECX), MM4 ) /* m5            | m4                 */    MOVD       ( REGOFF(8, ECX), MM5 )  /*               | m2                 */    PUNPCKLDQ  ( REGOFF(24, ECX), MM5 ) /* m6            | m2                 */    MOVQ       ( REGOFF(32, ECX), MM6 ) /* m9            | m8                 */    MOVD       ( REGOFF(40, ECX), MM7 ) /*               | m10                */ALIGNTEXT32LLBL (G3T_transform):    PREFETCHW  ( REGIND(EAX) )    MOVQ       ( REGIND(EDX), MM0 )     /* x1            | x0                 */    MOVD       ( REGOFF(8, EDX), MM2 )  /*               | x2                 */    MOVQ       ( MM0, MM1 )             /* x1            | x0                 */    PUNPCKLDQ  ( MM2, MM2 )             /* x2            | x2                 */    PFMUL      ( MM3, MM0 )             /* x1*m1         | x0*m0              */    ADD_L      ( CONST(16), EAX )       /* next r                             */    PFMUL      ( MM4, MM1 )             /* x1*m5         | x0*m4              */    PFACC      ( MM1, MM0 )             /* x0*m4+x1*m5   | x0*m0+x1*m1        */    PFMUL      ( MM5, MM2 )             /* x2*m6         | x2*m2              */    PFADD      ( MM2, MM0 )             /* x0*m4...+x2*m6| x0*m0+x1*m1+x2*m2  */    MOVQ       ( REGIND(EDX), MM1 )     /* x1            | x0                 */    MOVQ       ( MM0, REGOFF(-16, EAX) ) /* write r0, r1                      */    PFMUL      ( MM6, MM1 )             /* x1*m9         | x0*m8              */    MOVD       ( REGOFF(8, EDX), MM2 )  /*               | x2                 */    PFMUL      ( MM7, MM2 )             /*               | x2*m10             */    ADD_L      ( STRIDE, EDX )          /* next normal               */    PREFETCH   ( REGIND(EDX) )    PFACC      ( MM1, MM1 )             /* *not used*    | x0*m8+x1*m9        */    PFADD      ( MM2, MM1 )             /* *not used*    | x0*m8+x1*m9+x2*m10 */    MOVD       ( MM1, REGOFF(-8, EAX) ) /* write r2                           */    SUB_L      ( CONST(1), EDI )        /* decrement normal counter           */    JNZ        ( LLBL (G3T_transform) )    FEMMSLLBL (G3T_end):    POP_L  ( ESI )    POP_L  ( EDI )    RETALIGNTEXT16GLOBL GLNAME(_mesa_3dnow_normalize_normals)HIDDEN(_mesa_3dnow_normalize_normals)GLNAME(_mesa_3dnow_normalize_normals):#undef  FRAME_OFFSET#define FRAME_OFFSET 12    PUSH_L     ( EDI )    PUSH_L     ( ESI )    PUSH_L     ( EBP )    MOV_L      ( ARG_IN, ESI )    MOV_L      ( ARG_DEST, EAX )    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 ?? */    JE         ( LLBL (G3N_end) )    FEMMS    CMP_L      ( CONST(0), EDX )        /* lengths == 0 ?                     */    JE         ( LLBL (G3N_norm2) )     /* calculate lengths                  */ALIGNTEXT32LLBL (G3N_norm1):                       /* use precalculated lengths          */    PREFETCH   ( REGIND(EAX) )    MOVQ       ( REGIND(ECX), MM0 )     /* x1              | x0               */    MOVD       ( REGOFF(8, ECX), MM1 )  /*                 | x2               */    MOVD       ( REGIND(EDX), MM3 )     /*                 | length (x)       */    PFMUL      ( MM3, MM1 )             /*                 | x2 (normalized)  */    PUNPCKLDQ  ( MM3, MM3 )             /* length (x)      | length (x)       */    ADD_L      ( STRIDE, ECX )          /* next normal            */    PREFETCH   ( REGIND(ECX) )    PFMUL      ( MM3, MM0 )             /* x1 (normalized) | x0 (normalized)  */    MOVQ       ( MM0, REGIND(EAX) )     /* write new x0, x1                   */    MOVD       ( MM1, REGOFF(8, EAX) )  /* write new x2                       */    ADD_L      ( CONST(16), EAX )       /* next r                             */    ADD_L      ( CONST(4), EDX )        /* next length                        */    SUB_L      ( CONST(1), EBP )        /* decrement normal counter           */    JNZ        ( LLBL (G3N_norm1) )    JMP        ( LLBL (G3N_end1) )ALIGNTEXT32LLBL (G3N_norm2):                       /* need to calculate lengths          */    PREFETCHW  ( REGIND(EAX) )    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               */    ADD_L      ( CONST(16), EAX )       /* next r                             */    PFMUL      ( MM1, MM4 )             /*                 | x2*x2            */    PFADD      ( MM4, MM3 )             /*                 | x0*x0+x2*x2      */    PFACC      ( MM3, MM3 )             /* x0*x0+...+x2*x2 | x0*x0+x1*x1+x2*x2*/    PFRSQRT    ( MM3, MM5 )             /* 1/sqrt (x0*x0+x1*x1+x2*x2)         */    MOVQ       ( MM5, MM4 )    PUNPCKLDQ  ( MM3, MM3 )    PFMUL      ( MM5, MM5 )    PFRSQIT1   ( MM3, MM5 )    SUB_L      ( CONST(1), EBP )        /* decrement normal counter           */    PFRCPIT2   ( MM4, MM5 )    PFMUL      ( MM5, MM0 )             /* x1 (normalized) | x0 (normalized)  */    MOVQ       ( MM0, REGOFF(-16, EAX) ) /* write new x0, x1                  */    PFMUL      ( MM5, MM1 )             /*                 | x2 (normalized)  */    MOVD       ( MM1, REGOFF(-8, EAX) ) /* write new x2                       */    JNZ        ( LLBL (G3N_norm2) )LLBL (G3N_end1):    FEMMSLLBL (G3N_end):    POP_L      ( EBP )    POP_L      ( ESI )    POP_L      ( EDI )    RETALIGNTEXT16GLOBL GLNAME(_mesa_3dnow_rescale_normals)HIDDEN(_mesa_3dnow_rescale_normals)GLNAME(_mesa_3dnow_rescale_normals):#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(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) )    FEMMS    MOVD       ( ARG_SCALE, MM0 )       /* scale                              */    PUNPCKLDQ  ( MM0, MM0 )ALIGNTEXT32LLBL (G3R_rescale):    PREFETCHW  ( REGIND(EAX) )    MOVQ       ( REGIND(ECX), MM1 )     /* x1            | x0                 */    MOVD       ( REGOFF(8, ECX), MM2 )  /*               | x2                 */    PFMUL      ( MM0, MM1 )             /* x1*scale      | x0*scale           */    ADD_L      ( STRIDE, ECX )          /* next normal                  */    PREFETCH   ( REGIND(ECX) )    PFMUL      ( MM0, MM2 )             /*               | x2*scale           */    ADD_L      ( CONST(16), EAX )       /* next r                             */    MOVQ       ( MM1, REGOFF(-16, EAX) ) /* write r0, r1                      */    MOVD       ( MM2, REGOFF(-8, EAX) ) /* write r2                           */    SUB_L      ( CONST(1), EDX )        /* decrement normal counter           */    JNZ        ( LLBL (G3R_rescale) )    FEMMSLLBL (G3R_end):    POP_L      ( ESI )    POP_L      ( EDI )    RET#endif	#if defined (__ELF__) && defined (__linux__)	.section .note.GNU-stack,"",%progbits#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -