atl_smm6x1x80_sse.c
来自「基于Blas CLapck的.用过的人知道是干啥的」· C语言 代码 · 共 1,344 行 · 第 1/2 页
C
1,344 行
#endif#if KB > 72 movaps 288-120(pB0), rB0 movaps 288-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 288-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 288-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 288-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 288-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 288-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 76 movaps 304-120(pB0), rB0 movaps 304-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 304-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 304-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 304-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 304-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 304-120(pA3,ldab,2), rB0 addps rB0, rC5#endif/* * Get these bastard things summed up correctly * Note this initial quad summation is Camm's, as his sequence was faster * than the piece of crap I came up with */ /* rC0 = c0a c0b */ /* rC1 = c1a c1b */ /* rC2 = c2a c2b */ /* rC3 = c3a c3b *//* */ /* rC4 = c4a c4b */ /* rC5 = c5a c5b */ movaps rC0, rA0 /* rA0 = c0d c0c c0b c0a */ unpcklps rC1, rC0 /* rC0 = c1b c0b c1a c0d */ movaps rC2, rB0 /* rB0 = c2d c2c c2b c2a */ unpckhps rC1, rA0 /* rA0 = c1d c0d c1c c0c */ unpcklps rC3, rC2 /* rC2 = c3b c2b c3a c2a */ addps rA0, rC0 /* rC0 = c1bd c0bd c1ac c0ac */ unpckhps rC3, rB0 /* rB0 = c3d c2d c3c c2c */ movaps rC0, rA0 /* rA0 = c1bd c0bd c1ac c0ac */ addps rB0, rC2 /* rC2 = c3bd c2bd c3ac c2ac */ shufps $0x44,rC2,rC0 /* rC0 = c3ac c2ac c1ac c0ac */ shufps $0xEE,rC2,rA0 /* rA0 = c3bd c2bd c1bd c0bd */ addps rA0, rC0 /* rC0 = c3abcd c2abcd c1abcd c0abcd */ /* rC4 = c4d c4c c4b c4a */ /* rC5 = c5d c5c c5b c5a */ movaps rC4, rB0 /* rB0 = c4d c4c c4b c4a */ unpcklps rC5, rC4 /* rC4 = c5b c4b c5a c4a */ unpckhps rC5, rB0 /* rB0 = c5d c4d c5c c4c */ addps rB0, rC4 /* rC4 = c5bd c4bd c5ac c4ac */ movhlps rC4, rA0 /* rA0 = X X c5bd c4bd */ addps rA0, rC4 /* rC4 = X X c5abcd c4abcd */ #ifdef SCPLX /* rC0 = c3 c2 c1 c0 */ /* rC4 = X X c5 c4 */ pshufd $0xB1, rC0, rC1 /* rC1 = c2 c3 c0 c1 */ movhlps rC0, rC2 /* rC2 = X X c3 c2 */ movhlps rC1, rC3 /* rC3 = X X c2 c3 */ pshufd $0xC1, rC4, rC5 /* rC5 = X X c4 c5 */ movss rC0, (pC) movss rC1, 8(pC) movss rC2, 16(pC) movss rC3, 24(pC) movss rC4, 32(pC) movss rC5, 40(pC) #else movups rC0, (pC) movlps rC4, 16(pC) #endif addl $NB6so, pA0 addl $NB6so, pA3/* * Write results back to C *//* * pC += 6; pA += 6*NB */ addl $CMUL(24), pC/* * while (pA != stM); */ subb $6, stM jnz UMLOOP#endif/* * Last iteration of MLOOP unrolled to prefetch C & B */#if MB == 0ULMLOOP:#endif#ifdef BETA0 xorps rC0, rC0 xorps rC1, rC1 xorps rC2, rC2 xorps rC3, rC3 xorps rC4, rC4 xorps rC5, rC5#else movss (pC), rC0 movss CMUL(4)(pC), rC1 movss CMUL(8)(pC), rC2 movss CMUL(12)(pC), rC3 movss CMUL(16)(pC), rC4 movss CMUL(20)(pC), rC5 #ifdef BETAX #ifndef ATL_GAS_x8664 movss (%esp), rbeta #endif mulss rbeta, rC0 mulss rbeta, rC1 mulss rbeta, rC2 mulss rbeta, rC3 mulss rbeta, rC4 mulss rbeta, rC5 #endif#endif/* * Completely unrolled K-loop */ movaps 0-120(pB0), rB0 movaps 0-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 0-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 0-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 0-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 0-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 0-120(pA3,ldab,2), rB0 addps rB0, rC5#if KB > 4 movaps 16-120(pB0), rB0 movaps 16-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 16-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 16-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 16-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 16-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 16-120(pA3,ldab,2), rB0 addps rB0, rC5#endif prefB((pB0,ldab)) prefB(128(pB0,ldab)) #if KB > 64 prefB(256(pB0,ldab)) #endif#if KB > 8 movaps 32-120(pB0), rB0 movaps 32-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 32-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 32-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 32-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 32-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 32-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 12 movaps 48-120(pB0), rB0 movaps 48-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 48-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 48-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 48-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 48-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 48-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 16 movaps 64-120(pB0), rB0 movaps 64-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 64-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 64-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 64-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 64-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 64-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 20 movaps 80-120(pB0), rB0 movaps 80-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 80-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 80-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 80-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 80-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 80-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 24 movaps 96-120(pB0), rB0 movaps 96-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 96-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 96-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 96-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 96-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 96-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 28 movaps 112-120(pB0), rB0 movaps 112-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 112-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 112-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 112-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 112-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 112-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 32 movaps 128-120(pB0), rB0 movaps 128-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 128-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 128-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 128-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 128-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 128-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 36 movaps 144-120(pB0), rB0 movaps 144-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 144-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 144-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 144-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 144-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 144-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 40 movaps 160-120(pB0), rB0 movaps 160-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 160-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 160-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 160-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 160-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 160-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 44 movaps 176-120(pB0), rB0 movaps 176-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 176-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 176-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 176-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 176-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 176-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 48 movaps 192-120(pB0), rB0 movaps 192-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 192-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 192-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 192-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 192-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 192-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 52 movaps 208-120(pB0), rB0 movaps 208-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 208-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 208-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 208-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 208-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 208-120(pA3,ldab,2), rB0 addps rB0, rC5#endif/* pref2((pfA)) *//* addl $PFAINC, pfA */#if KB > 56 movaps 224-120(pB0), rB0 movaps 224-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 224-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 224-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 224-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 224-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 224-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 60 movaps 240-120(pB0), rB0 movaps 240-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 240-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 240-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 240-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 240-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 240-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 64 movaps 256-120(pB0), rB0 movaps 256-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 256-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 256-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 256-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 256-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 256-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 68 movaps 272-120(pB0), rB0 movaps 272-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 272-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 272-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 272-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 272-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 272-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 72 movaps 288-120(pB0), rB0 movaps 288-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 288-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 288-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 288-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 288-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 288-120(pA3,ldab,2), rB0 addps rB0, rC5#endif#if KB > 76 movaps 304-120(pB0), rB0 movaps 304-120(pA0), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 304-120(pA0,ldab), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 304-120(pA0,ldab,2), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 304-120(pA3), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 304-120(pA3,ldab), rA0 mulps rB0, rA0 addps rA0, rC4 mulps 304-120(pA3,ldab,2), rB0 addps rB0, rC5#endif/* * Get these bastard things summed up correctly * Note this initial quad summation is Camm's, as his sequence was faster * than the piece of crap I came up with */ /* rC0 = c0a c0b */ /* rC1 = c1a c1b */ /* rC2 = c2a c2b */ /* rC3 = c3a c3b *//* */ /* rC4 = c4a c4b */ /* rC5 = c5a c5b */ movaps rC0, rA0 /* rA0 = c0d c0c c0b c0a */ unpcklps rC1, rC0 /* rC0 = c1b c0b c1a c0a */ movaps rC2, rB0 /* rB0 = c2d c2c c2b c2a */ unpckhps rC1, rA0 /* rA0 = c1d c0d c1c c0c */ unpcklps rC3, rC2 /* rC2 = c3b c2b c3a c2a */ addps rA0, rC0 /* rC0 = c1bd c0bd c1ac c0ac */ unpckhps rC3, rB0 /* rB0 = c3d c2d c3c c2c */ movaps rC0, rA0 /* rA0 = c1bd c0bd c1ac c0ac */ addps rB0, rC2 /* rC2 = c3bd c2bd c3ac c2ac */ shufps $0x44,rC2,rC0 /* rC0 = c3ac c2ac c1ac c0ac */ shufps $0xEE,rC2,rA0 /* rA0 = c3bd c2bd c1bd c0bd */ addps rA0, rC0 /* rC0 = c3abcd c2abcd c1abcd c0abcd */ /* rC4 = c4d c4c c4b c4a */ /* rC5 = c5d c5c c5b c5a */ movaps rC4, rB0 /* rB0 = c4d c4c c4b c4a */ unpcklps rC5, rC4 /* rC4 = c5b c4b c5a c4a */ unpckhps rC5, rB0 /* rB0 = c5d c4d c5c c4c */ addps rB0, rC4 /* rC4 = c5bd c4bd c5ac c4ac */ movhlps rC4, rA0 /* rA0 = X X c5bd c4bd */ addps rA0, rC4 /* rC4 = X X c5abcd c4abcd */ #ifdef SCPLX /* rC0 = c3 c2 c1 c0 */ /* rC4 = X X c5 c4 */ pshufd $0xB1, rC0, rC1 /* rC1 = c2 c3 c0 c1 */ movhlps rC0, rC2 /* rC2 = X X c3 c2 */ movhlps rC1, rC3 /* rC3 = X X c2 c3 */ pshufd $0xC1, rC4, rC5 /* rC5 = X X c4 c5 */ movss rC0, (pC) movss rC1, 8(pC) movss rC2, 16(pC) movss rC3, 24(pC) movss rC4, 32(pC) movss rC5, 40(pC) #else movups rC0, (pC) movlps rC4, 16(pC) #endif addl $NBso, pB0 #if MB == 0 subl incAn_m, pA0 #else subl $MBKBso-NB6so, pA0 #endif #if MB == 0 movl pA0, pA3 addl $NB3so, pA3 #else subl $MBKBso-NB6so, pA3 #endif/* * Write results back to C *//* * while (pA != stM); *//* subb $6, stM *//* jnz UMLOOP *//* * pC += incCn; pA += -MBKB; pB0 += NB */ addl incCn_m, pC/* * while (pB != stN); */ sub $1, stN jnz UNLOOP/* * Restore callee-saved iregs */ #ifdef ATL_GAS_x8664 movq -8(%rsp), %rbx movq -16(%rsp), %rbp #elif defined(BETAX) movl 32(%esp), %ebp movl 28(%esp), %ebx movl 24(%esp), %esi movl 20(%esp), %edi movl 16(%esp), %esp #else movl 12(%esp), %ebp movl 8(%esp), %ebx movl 4(%esp), %esi movl (%esp), %edi addl $28, %esp #endif ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?