atl_smm6x1x60_sse.c
来自「基于Blas CLapck的.用过的人知道是干啥的」· C语言 代码 · 共 1,022 行 · 第 1/2 页
C
1,022 行
#endif#else movaps rC2, rB0 movaps rC0, rA0 unpckhps rC3, rB0 unpckhps rC1, rA0 unpcklps rC3, rC2 movlhps rB0, rC3 unpcklps rC1, rC0 movhlps rA0, rC3 movlhps rC2, rA0 movhlps rC0, rB0 addps rA0, rC3 movlhps rC0, rC1 movhlps rC1, rC2 movaps rC4, rA0 /* xmm6 = c4a c4b c4c c4d */ addps rB0, rC2 unpcklps rC5, rA0 /* xmm6 = c4a c5a c4b c5b */ unpckhps rC5, rC4 /* xmm4 = c4c c5c c4d c5d */ pref2(NB6so(stM,pfA)) addps rA0, rC4 /* xmm4 = c4ac c5ac c4bd c5bd */ addps rC2, rC3 movhlps rC4, rC5 /* xmm5 = c4bd c5bd X X */ addl $27, pfA addps rC5, rC4 /* xmm4 = c4abcd c5abcd X X *//* * Write results back to C */ #ifdef SREAL movups rC3, (pC) movlps rC4, 16(pC) #else movss rC3, (pC) movhlps rC3, rC0 movss rC0, 16(pC) shufps $0x55, rC3, rC3 movss rC3, 8(pC) shufps $0x55, rC0, rC0 movss rC0, 24(pC) movss rC4, 32(pC) shufps $0x55, rC4, rC4 movss rC4, 40(pC) #endif#endif/* * pC += 6; pA += 6*NB */ #ifdef SCPLX addl $48, pC #else addl $24, pC #endif addl $NB6so, pA/* * while (pA != stM); */ cmp pA, stM jne MLOOP/* * Unroll last iteration of MLOOP in order to prefetch next col of B */ prefB(NBso(pB)) prefB(32+NBso(pB)) prefB(64+NBso(pB)) prefB(96+NBso(pB))#ifdef BETA0 xorps rC0, rC0 xorps rC1, rC1 xorps rC2, rC2 xorps rC3, rC3 xorps rC4, rC4 xorps rC5, rC5#else #ifdef SCPLX movss (pC), rC0 movss 8(pC), rC1 movss 16(pC), rC2 movss 24(pC), rC3 movss 32(pC), rC4 movss 40(pC), rC5 #else movss (pC), rC0 movss 4(pC), rC1 movss 8(pC), rC2 movss 12(pC), rC3 movss 16(pC), rC4 movss 20(pC), rC5 #endif #ifdef BETAX movss (%esp), rA0 mulss rA0, rC0 mulss rA0, rC1 mulss rA0, rC2 mulss rA0, rC3 mulss rA0, rC4 mulss rA0, rC5 #endif#endif ALIGN16 movaps 0(pB), rB0 movaps 0(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 0+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 0+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 0+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 0+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 0+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 16(pB), rB0 movaps 16(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 16+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 16+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 16+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 16+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 16+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 32(pB), rB0 movaps 32(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 32+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 32+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 32+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 32+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 32+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 48(pB), rB0 movaps 48(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 48+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 48+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 48+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 48+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 48+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 64(pB), rB0 movaps 64(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 64+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 64+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 64+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 64+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 64+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 80(pB), rB0 movaps 80(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 80+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 80+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 80+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 80+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 80+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 96(pB), rB0 movaps 96(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 96+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 96+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 96+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 96+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 96+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 112(pB), rB0 movaps 112(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 112+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 112+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 112+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 112+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 112+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 128(pB), rB0 movaps 128(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 128+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 128+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 128+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 128+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 128+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 144(pB), rB0 movaps 144(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 144+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 144+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 144+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 144+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 144+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 160(pB), rB0 movaps 160(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 160+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 160+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 160+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 160+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 160+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 176(pB), rB0 movaps 176(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 176+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 176+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 176+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 176+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 176+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 192(pB), rB0 movaps 192(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 192+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 192+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 192+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 192+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 192+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 208(pB), rB0 movaps 208(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 208+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 208+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 208+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 208+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 208+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5 movaps 224(pB), rB0 movaps 224(pA), rA0 mulps rB0, rA0 addps rA0, rC0 movaps 224+NBso(pA), rA0 mulps rB0, rA0 addps rA0, rC1 movaps 224+NB2so(pA), rA0 mulps rB0, rA0 addps rA0, rC2 movaps 224+NB3so(pA), rA0 mulps rB0, rA0 addps rA0, rC3 movaps 224+NB4so(pA), rA0 mulps rB0, rA0 addps rA0, rC4 movaps 224+NB5so(pA), rA0 mulps rB0, rA0 addps rA0, rC5/* * Get these bastard things summed up correctly */#ifdef ATL_SSE3 haddps rC1, rC0 /* rC0 = c0ab c0cd c1ab c1cd */ haddps rC3, rC2 /* rC2 = c2ab c2cd c3ab c3cd */ haddps rC5, rC4 /* rC4 = c4ab c4cd c5ab c5cd */ haddps rC2, rC0 /* rC0 = c0abcd c1abcd c2abcd c3abcd */ haddps rC4, rC4 /* rC4 = c4abcd c5abcd c4abcd c5abcd */ prefB(128+NBso(pB)) prefB(160+NBso(pB)) prefB(196+NBso(pB)) prefB(224+NBso(pB)) #ifdef SREAL movups rC0, (pC) movlps rC4, 16(pC) #else /* rC4 = c5 c4 c5 c4 */ /* rC0 = c3 c2 c1 c0 */ movshdup rC0, rC1 /* rC1 = c3 c3 c1 c1 */ movss rC0, (pC) movhlps rC0, rC2 movss rC1, 8(pC) movhlps rC1, rC3 movss rC2, 16(pC) movshdup rC4, rC5 /* rc5 = c5 c5 c5 c5 */ movss rC3, 24(pC) movss rC4, 32(pC) movss rC5, 40(pC) #endif#else movaps rC2, rB0 movaps rC2, rB0 movaps rC0, rA0 unpckhps rC3, rB0 unpckhps rC1, rA0 unpcklps rC3, rC2 movlhps rB0, rC3 unpcklps rC1, rC0 movhlps rA0, rC3 movlhps rC2, rA0 movhlps rC0, rB0 addps rA0, rC3 movlhps rC0, rC1 movhlps rC1, rC2 movaps rC4, rA0 /* xmm6 = c4a c4b c4c c4d */ addps rB0, rC2 unpcklps rC5, rA0 /* xmm6 = c4a c5a c4b c5b */ unpckhps rC5, rC4 /* xmm4 = c4c c5c c4d c5d */ addps rA0, rC4 /* xmm4 = c4ac c5ac c4bd c5bd */ prefB(128+NBso(pB)) prefB(160+NBso(pB)) prefB(196+NBso(pB)) prefB(224+NBso(pB)) addps rC2, rC3 movhlps rC4, rC5 /* xmm5 = c4bd c5bd X X */ addps rC5, rC4 /* xmm4 = c4abcd c5abcd X X *//* * Write results back to C */ #ifdef SREAL movups rC3, (pC) movlps rC4, 16(pC) #else movss rC3, (pC) movhlps rC3, rC0 movss rC0, 16(pC) shufps $0x55, rC3, rC3 movss rC3, 8(pC) shufps $0x55, rC0, rC0 movss rC0, 24(pC) movss rC4, 32(pC) shufps $0x55, rC4, rC4 movss rC4, 40(pC) #endif#endif/* * End of unrolled final iteration of MLOOP *//* * pC += incCn; pA -= NBNB; pB += NB; */ addl incCn, pC subl $NBNBso-NB6so, pA addl $NBso, pB/* * while (pB != stN); */ cmp pB, stN jne NLOOP/* * Restore callee-saved iregs */ #ifdef 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 $16, %esp #endif ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?