\r
#define A_PR1 512\r
#define B_PR1 160\r
+#define BROADCASTKERNEL\r
\r
/*******************************************************************************************\r
* Macro definitions\r
prefetcht0 A_PR1(AO)\r
vmovups -12 * SIZE(BO), %ymm1\r
prefetcht0 B_PR1(BO)\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+# else\r
vmovups -16 * SIZE(AO), %ymm0\r
+# endif\r
prefetcht0 B_PR1+64(BO)\r
vmovups -8 * SIZE(BO), %ymm2\r
prefetcht0 B_PR1+128(BO)\r
vmulpd %ymm0 ,%ymm2 , %ymm8\r
vmulpd %ymm0 ,%ymm3 , %ymm12\r
prefetcht0 B_PR1+256(BO)\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vmulpd %ymm0 ,%ymm1 , %ymm5\r
vmulpd %ymm0 ,%ymm2 , %ymm9\r
vmulpd %ymm0 ,%ymm3 , %ymm13\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+# else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+# endif\r
vmulpd %ymm0 ,%ymm1 , %ymm6\r
vmulpd %ymm0 ,%ymm2 , %ymm10\r
\r
addq $ 12*SIZE, BO\r
vmulpd %ymm0 ,%ymm3 , %ymm14\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -13 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vmulpd %ymm0 ,%ymm1 , %ymm7\r
vmovups -12 * SIZE(BO), %ymm1\r
vmulpd %ymm0 ,%ymm2 , %ymm11\r
\r
.macro KERNEL4x12_M1\r
prefetcht0 A_PR1(AO)\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+# else\r
vmovups -16 * SIZE(AO), %ymm0\r
+# endif\r
prefetcht0 B_PR1(BO)\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
prefetcht0 B_PR1+64(BO)\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
prefetcht0 B_PR1+128(BO)\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm12\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm13\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+# else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
-\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm14\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -13 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vmovups -12 * SIZE(BO), %ymm1\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
.endm\r
\r
.macro KERNEL4x12_M2\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -12 * SIZE(AO), %ymm0\r
+# else\r
vmovups -12 * SIZE(AO), %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm12\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -11 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm13\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -10 * SIZE(AO), %ymm0\r
+# else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
\r
addq $ 8*SIZE, AO\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm14\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vmovups 0 * SIZE(BO), %ymm1\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
\r
\r
.macro KERNEL4x12_E\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -12 * SIZE(AO), %ymm0\r
+# else\r
vmovups -12 * SIZE(AO), %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm12\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -11 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm13\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -10 * SIZE(AO), %ymm0\r
+# else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
\r
addq $ 8*SIZE, AO\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm14\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm15\r
\r
.macro KERNEL4x12_SUB\r
vmovups -12 * SIZE(BO), %ymm1\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+# else\r
vmovups -16 * SIZE(AO), %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
vmovups -8 * SIZE(BO), %ymm2\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
vmovups -4 * SIZE(BO), %ymm3\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm12\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
addq $ 12*SIZE, BO\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm13\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+# else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
addq $ 4*SIZE, AO\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm14\r
+# if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+# else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+# endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
vfmadd231pd %ymm0 ,%ymm3 , %ymm15\r
#if B_PR1 > 96\r
prefetcht0 192 + BUFFER1\r
#endif\r
+\r
+#if defined BROADCASTKERNEL\r
+ vperm2f128 $ 0x20 , %ymm6, %ymm4 , %ymm0\r
+ vperm2f128 $ 0x20 , %ymm7, %ymm5 , %ymm1\r
+ vperm2f128 $ 0x31 , %ymm6, %ymm4 , %ymm2\r
+ vperm2f128 $ 0x31 , %ymm7, %ymm5 , %ymm3\r
+#else\r
vpermilpd $ 0x05 , %ymm5, %ymm5\r
vpermilpd $ 0x05 , %ymm7, %ymm7\r
+#endif\r
+\r
#if B_PR1 > 160\r
prefetcht0 256 + BUFFER1\r
#endif\r
+\r
+#if defined BROADCASTKERNEL\r
+ vunpcklpd %ymm1, %ymm0, %ymm4\r
+ vunpckhpd %ymm1, %ymm0, %ymm5\r
+ vunpcklpd %ymm3, %ymm2, %ymm6\r
+ vunpckhpd %ymm3, %ymm2, %ymm7\r
+#else\r
vblendpd $ 0x0a, %ymm5, %ymm4, %ymm0\r
vblendpd $ 0x05, %ymm5, %ymm4, %ymm1\r
vblendpd $ 0x0a, %ymm7, %ymm6, %ymm2\r
vblendpd $ 0x05, %ymm7, %ymm6, %ymm3\r
+#endif\r
+\r
#if B_PR1 > 224\r
prefetcht0 320 + BUFFER1\r
#endif\r
+\r
+#ifndef BROADCASTKERNEL\r
vperm2f128 $ 0x01 , %ymm2, %ymm2 , %ymm2\r
vperm2f128 $ 0x01 , %ymm3, %ymm3 , %ymm3\r
+#endif\r
+\r
#if B_PR1 > 288\r
prefetcht0 384 + BUFFER1\r
#endif\r
+\r
+#ifndef BROADCASTKERNEL\r
vblendpd $ 0x03, %ymm0, %ymm2 , %ymm4\r
vblendpd $ 0x03, %ymm1, %ymm3 , %ymm5\r
vblendpd $ 0x03, %ymm2, %ymm0 , %ymm6\r
vblendpd $ 0x03, %ymm3, %ymm1 , %ymm7\r
+#endif\r
+\r
#if B_PR1 > 352\r
prefetcht0 448 + BUFFER1\r
#endif\r
prefetcht1 56(%rax)\r
prefetcht1 56(%rax,LDC)\r
\r
- vpermilpd $ 0x05 , %ymm9 , %ymm9\r
+#if defined BROADCASTKERNEL\r
+ vperm2f128 $ 0x20 , %ymm10, %ymm8 , %ymm0\r
+ vperm2f128 $ 0x20 , %ymm11, %ymm9 , %ymm1\r
+ vperm2f128 $ 0x31 , %ymm10, %ymm8 , %ymm2\r
+ vperm2f128 $ 0x31 , %ymm11, %ymm9 , %ymm3\r
+ vunpcklpd %ymm1, %ymm0, %ymm4\r
+ vunpckhpd %ymm1, %ymm0, %ymm5\r
+ vunpcklpd %ymm3, %ymm2, %ymm6\r
+ vunpckhpd %ymm3, %ymm2, %ymm7\r
+#else\r
+ vpermilpd $ 0x05 , %ymm9, %ymm9\r
vpermilpd $ 0x05 , %ymm11, %ymm11\r
\r
- vblendpd $ 0x0a, %ymm9 , %ymm8 , %ymm0\r
- vblendpd $ 0x05, %ymm9 , %ymm8 , %ymm1\r
+ vblendpd $ 0x0a, %ymm9, %ymm8, %ymm0\r
+ vblendpd $ 0x05, %ymm9, %ymm8, %ymm1\r
vblendpd $ 0x0a, %ymm11, %ymm10, %ymm2\r
vblendpd $ 0x05, %ymm11, %ymm10, %ymm3\r
\r
vblendpd $ 0x03, %ymm1, %ymm3 , %ymm5\r
vblendpd $ 0x03, %ymm2, %ymm0 , %ymm6\r
vblendpd $ 0x03, %ymm3, %ymm1 , %ymm7\r
-\r
+#endif\r
\r
leaq (%rax, LDC, 2), %rax\r
leaq (%rax, LDC, 2), %rbp\r
prefetcht1 56(%rbp)\r
prefetcht1 56(%rbp,LDC)\r
\r
+#if defined BROADCASTKERNEL\r
+ vperm2f128 $ 0x20 , %ymm14, %ymm12 , %ymm0\r
+ vperm2f128 $ 0x20 , %ymm15, %ymm13 , %ymm1\r
+ vperm2f128 $ 0x31 , %ymm14, %ymm12 , %ymm2\r
+ vperm2f128 $ 0x31 , %ymm15, %ymm13 , %ymm3\r
+ vunpcklpd %ymm1, %ymm0, %ymm4\r
+ vunpckhpd %ymm1, %ymm0, %ymm5\r
+ vunpcklpd %ymm3, %ymm2, %ymm6\r
+ vunpckhpd %ymm3, %ymm2, %ymm7\r
+#else\r
vpermilpd $ 0x05 , %ymm13, %ymm13\r
vpermilpd $ 0x05 , %ymm15, %ymm15\r
\r
vblendpd $ 0x03, %ymm1, %ymm3 , %ymm5\r
vblendpd $ 0x03, %ymm2, %ymm0 , %ymm6\r
vblendpd $ 0x03, %ymm3, %ymm1 , %ymm7\r
-\r
+#endif\r
\r
leaq (%rax, LDC, 4), %rax\r
leaq (%rbp, LDC, 4), %rbp\r
\r
.macro KERNEL4x8_I\r
vmovups -12 * SIZE(BO), %ymm1\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+#else\r
vmovups -16 * SIZE(AO), %ymm0\r
+#endif\r
vmovups -8 * SIZE(BO), %ymm2\r
vmulpd %ymm0 ,%ymm1 , %ymm4\r
vmulpd %ymm0 ,%ymm2 , %ymm8\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm5\r
vmulpd %ymm0 ,%ymm2 , %ymm9\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm6\r
vmulpd %ymm0 ,%ymm2 , %ymm10\r
\r
addq $ 8*SIZE, BO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -13 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm7\r
vmovups -12 * SIZE(BO), %ymm1\r
vmulpd %ymm0 ,%ymm2 , %ymm11\r
\r
.macro KERNEL4x8_M1\r
prefetcht0 A_PR1(AO)\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+#else\r
vmovups -16 * SIZE(AO), %ymm0\r
+#endif\r
prefetcht0 B_PR1(BO)\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
prefetcht0 B_PR1+64(BO)\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
-\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -13 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vmovups -12 * SIZE(BO), %ymm1\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
.endm\r
\r
.macro KERNEL4x8_M2\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -12 * SIZE(AO), %ymm0\r
+#else\r
vmovups -12 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -11 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -10 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
\r
addq $ 8*SIZE, AO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vmovups -4 * SIZE(BO), %ymm1\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
\r
\r
.macro KERNEL4x8_E\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -12 * SIZE(AO), %ymm0\r
+#else\r
vmovups -12 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -11 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -10 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
\r
addq $ 8*SIZE, AO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
addq $ 8*SIZE, BO\r
\r
.macro KERNEL4x8_SUB\r
vmovups -12 * SIZE(BO), %ymm1\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+#else\r
vmovups -16 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
vmovups -8 * SIZE(BO), %ymm2\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm8\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm9\r
addq $ 8*SIZE, BO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm10\r
addq $ 4*SIZE, AO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vfmadd231pd %ymm0 ,%ymm2 , %ymm11\r
\r
vmulpd %ymm0 , %ymm10, %ymm10\r
vmulpd %ymm0 , %ymm11, %ymm11\r
\r
+#if defined BROADCASTKERNEL\r
+ vperm2f128 $ 0x20 , %ymm6, %ymm4 , %ymm0\r
+ vperm2f128 $ 0x20 , %ymm7, %ymm5 , %ymm1\r
+ vperm2f128 $ 0x31 , %ymm6, %ymm4 , %ymm2\r
+ vperm2f128 $ 0x31 , %ymm7, %ymm5 , %ymm3\r
+ vunpcklpd %ymm1, %ymm0, %ymm4\r
+ vunpckhpd %ymm1, %ymm0, %ymm5\r
+ vunpcklpd %ymm3, %ymm2, %ymm6\r
+ vunpckhpd %ymm3, %ymm2, %ymm7\r
+#else\r
vpermilpd $ 0x05 , %ymm5, %ymm5\r
vpermilpd $ 0x05 , %ymm7, %ymm7\r
\r
vblendpd $ 0x03, %ymm1, %ymm3 , %ymm5\r
vblendpd $ 0x03, %ymm2, %ymm0 , %ymm6\r
vblendpd $ 0x03, %ymm3, %ymm1 , %ymm7\r
+#endif\r
\r
leaq (CO1, LDC, 2), %rax \r
\r
prefetcht0 56(%rax)\r
prefetcht0 56(%rax,LDC)\r
\r
+#if defined BROADCASTKERNEL\r
+ vperm2f128 $ 0x20 , %ymm10, %ymm8 , %ymm0\r
+ vperm2f128 $ 0x20 , %ymm11, %ymm9 , %ymm1\r
+ vperm2f128 $ 0x31 , %ymm10, %ymm8 , %ymm2\r
+ vperm2f128 $ 0x31 , %ymm11, %ymm9 , %ymm3\r
+ vunpcklpd %ymm1, %ymm0, %ymm4\r
+ vunpckhpd %ymm1, %ymm0, %ymm5\r
+ vunpcklpd %ymm3, %ymm2, %ymm6\r
+ vunpckhpd %ymm3, %ymm2, %ymm7\r
+#else\r
vpermilpd $ 0x05 , %ymm9 , %ymm9\r
vpermilpd $ 0x05 , %ymm11, %ymm11\r
\r
vblendpd $ 0x03, %ymm1, %ymm3 , %ymm5\r
vblendpd $ 0x03, %ymm2, %ymm0 , %ymm6\r
vblendpd $ 0x03, %ymm3, %ymm1 , %ymm7\r
-\r
+#endif\r
\r
leaq (%rax, LDC, 2), %rax\r
leaq (%rax, LDC, 2), %rbp\r
.macro KERNEL4x4_I\r
prefetcht0 A_PR1(AO)\r
vmovups -12 * SIZE(BO), %ymm1\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+#else\r
vmovups -16 * SIZE(AO), %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm4\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm5\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm6\r
\r
addq $ 4*SIZE, BO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -13 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vmulpd %ymm0 ,%ymm1 , %ymm7\r
vmovups -12 * SIZE(BO), %ymm1\r
\r
\r
.macro KERNEL4x4_M1\r
prefetcht0 A_PR1(AO)\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+#else\r
vmovups -16 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
-\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -13 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vmovups -12 * SIZE(BO), %ymm1\r
\r
.endm\r
\r
.macro KERNEL4x4_M2\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -12 * SIZE(AO), %ymm0\r
+#else\r
vmovups -12 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -11 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -10 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
\r
addq $ 8*SIZE, AO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
vmovups -8 * SIZE(BO), %ymm1\r
addq $ 8*SIZE, BO\r
\r
\r
.macro KERNEL4x4_E\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -12 * SIZE(AO), %ymm0\r
+#else\r
vmovups -12 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -11 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -10 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
\r
addq $ 8*SIZE, AO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
addq $ 4*SIZE, BO\r
.endm\r
\r
.macro KERNEL4x4_SUB\r
vmovups -12 * SIZE(BO), %ymm1\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -16 * SIZE(AO), %ymm0\r
+#else\r
vmovups -16 * SIZE(AO), %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm4\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -15 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm5\r
addq $ 4*SIZE, BO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -14 * SIZE(AO), %ymm0\r
+#else\r
vpermpd $ 0x1b, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm6\r
addq $ 4*SIZE, AO\r
+#if defined BROADCASTKERNEL\r
+ vbroadcastsd -17 * SIZE(AO), %ymm0\r
+#else\r
vpermilpd $ 0x05, %ymm0 , %ymm0\r
+#endif\r
vfmadd231pd %ymm0 ,%ymm1 , %ymm7\r
\r
.endm\r
vmulpd %ymm0 , %ymm5 , %ymm5\r
vmulpd %ymm0 , %ymm6 , %ymm6\r
\r
+#if defined BROADCASTKERNEL\r
+ vperm2f128 $ 0x20 , %ymm6, %ymm4 , %ymm0\r
+ vperm2f128 $ 0x20 , %ymm7, %ymm5 , %ymm1\r
+ vperm2f128 $ 0x31 , %ymm6, %ymm4 , %ymm2\r
+ vperm2f128 $ 0x31 , %ymm7, %ymm5 , %ymm3\r
+ vunpcklpd %ymm1, %ymm0, %ymm4\r
+ vunpckhpd %ymm1, %ymm0, %ymm5\r
+ vunpcklpd %ymm3, %ymm2, %ymm6\r
+ vunpckhpd %ymm3, %ymm2, %ymm7\r
+#else\r
vpermilpd $ 0x05 , %ymm5, %ymm5\r
vpermilpd $ 0x05 , %ymm7, %ymm7\r
\r
vblendpd $ 0x03, %ymm1, %ymm3 , %ymm5\r
vblendpd $ 0x03, %ymm2, %ymm0 , %ymm6\r
vblendpd $ 0x03, %ymm3, %ymm1 , %ymm7\r
+#endif\r
\r
leaq (CO1, LDC, 2), %rax \r
\r