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 + -
显示快捷键?