diff --git a/kernel/x86_64/dgemv_t_bulldozer.S b/kernel/x86_64/dgemv_t_bulldozer.S index 487ff77ad..36ae2b9df 100644 --- a/kernel/x86_64/dgemv_t_bulldozer.S +++ b/kernel/x86_64/dgemv_t_bulldozer.S @@ -40,7 +40,6 @@ #include "common.h" #include "l2param.h" -// #undef ALIGNED_ACCESS #define A_PRE 256 @@ -111,11 +110,7 @@ #define Y1 %rbp #define X1 %r15 -#ifdef ALIGNED_ACCESS -#define MM INCX -#else #define MM M -#endif #define ALPHA %xmm15 @@ -216,23 +211,6 @@ movq BUFFER, X1 -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L01 - - vmovsd (X), %xmm0 - addq INCX, X - - vmovsd %xmm0, 1 * SIZE(BUFFER) - addq $1 * SIZE, BUFFER - addq $2 * SIZE, X1 - decq M - jle .L10 - ALIGN_4 - -.L01: -#endif - movq M, I sarq $3, I jle .L05 @@ -287,10 +265,6 @@ .L10: movq Y, Y1 -#ifdef ALIGNED_ACCESS - testq $SIZE, LDA - jne .L50 -#endif #if GEMV_UNROLL >= 8 cmpq $8, N @@ -316,41 +290,6 @@ vxorps %xmm7 , %xmm7, %xmm7 -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L1X - - vmovsd -16 * SIZE(X1), %xmm12 - - vmovsd -16 * SIZE(A1), %xmm8 - vmovsd -16 * SIZE(A1, LDA), %xmm9 - vmovsd -16 * SIZE(A1, LDA, 2), %xmm10 - vmovsd -16 * SIZE(A1, LDA3), %xmm11 - - vfmaddpd %xmm0, %xmm8 , %xmm12, %xmm0 - vfmaddpd %xmm1, %xmm9 , %xmm12, %xmm1 - vfmaddpd %xmm2, %xmm10, %xmm12, %xmm2 - vfmaddpd %xmm3, %xmm11, %xmm12, %xmm3 - - vmovsd -16 * SIZE(A2), %xmm8 - vmovsd -16 * SIZE(A2, LDA), %xmm9 - vmovsd -16 * SIZE(A2, LDA, 2), %xmm10 - vmovsd -16 * SIZE(A2, LDA3), %xmm11 - - vfmaddpd %xmm4, %xmm8 , %xmm12, %xmm4 - vfmaddpd %xmm5, %xmm9 , %xmm12, %xmm5 - vfmaddpd %xmm6, %xmm10, %xmm12, %xmm6 - vfmaddpd %xmm7, %xmm11, %xmm12, %xmm7 - - - addq $SIZE, A1 - addq $SIZE, A2 - addq $SIZE, X1 - ALIGN_3 - -.L1X: -#endif - movq M, I sarq $3, I jle .L15 @@ -671,31 +610,6 @@ vxorps %xmm3 , %xmm3, %xmm3 -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L2X - - vmovsd -16 * SIZE(X1), %xmm12 - - vmovsd -16 * SIZE(A1), %xmm8 - vmovsd -16 * SIZE(A1, LDA), %xmm9 - vmovsd -16 * SIZE(A2), %xmm10 - vmovsd -16 * SIZE(A2, LDA), %xmm11 - - - vfmaddpd %xmm0, %xmm8 , %xmm12, %xmm0 - vfmaddpd %xmm1, %xmm9 , %xmm12, %xmm1 - vfmaddpd %xmm2, %xmm10, %xmm12, %xmm2 - vfmaddpd %xmm3, %xmm11, %xmm12, %xmm3 - - addq $SIZE, A1 - addq $SIZE, A2 - addq $SIZE, X1 - ALIGN_3 - -.L2X: -#endif - movq M, I sarq $3, I jle .L25 @@ -924,26 +838,6 @@ vxorps %xmm3 , %xmm3, %xmm3 -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L3X - - vmovsd -16 * SIZE(X1), %xmm12 - - vmovsd -16 * SIZE(A1), %xmm8 - vmovsd -16 * SIZE(A2), %xmm9 - - vfmaddpd %xmm0, %xmm8 , %xmm12, %xmm0 - vfmaddpd %xmm1, %xmm9 , %xmm12, %xmm1 - - addq $SIZE, A1 - addq $SIZE, A2 - addq $SIZE, X1 - ALIGN_3 - -.L3X: -#endif - movq M, I sarq $3, I jle .L35 @@ -1100,21 +994,6 @@ vxorps %xmm3 , %xmm3, %xmm3 -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L4X - - movsd -16 * SIZE(X1), %xmm12 - movsd -16 * SIZE(A1), %xmm8 - - vfmaddpd %xmm0, %xmm8 , %xmm12, %xmm0 - - addq $SIZE, A1 - addq $SIZE, X1 - ALIGN_3 - -.L4X: -#endif movq M, I sarq $3, I @@ -1223,683 +1102,6 @@ vmovlpd %xmm0, (Y1) addq INCY, Y1 -#ifdef ALIGNED_ACCESS - jmp .L999 - ALIGN_4 - -.L50: -#if GEMV_UNROLL >= 4 - - cmpq $4, N - jl .L60 - ALIGN_3 - -.L51: - subq $4, N - - leaq 16 * SIZE(BUFFER), X1 - - movq A, A1 - leaq (A1, LDA, 2), A2 - leaq (A1, LDA, 4), A - - vxorps %xmm0 , %xmm0, %xmm0 - vxorps %xmm1 , %xmm1, %xmm1 - vxorps %xmm2 , %xmm2, %xmm2 - vxorps %xmm3 , %xmm3, %xmm3 - - - -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L5X - - vmovsd -16 * SIZE(X1), %xmm12 - - vmovsd -16 * SIZE(A1), %xmm4 - vmovsd -16 * SIZE(A1, LDA), %xmm5 - vmovsd -16 * SIZE(A2), %xmm6 - vmovsd -16 * SIZE(A2, LDA), %xmm7 - - vfmaddpd %xmm0, %xmm4 , %xmm12, %xmm0 - vfmaddpd %xmm1, %xmm5 , %xmm12, %xmm1 - vfmaddpd %xmm2, %xmm6 , %xmm12, %xmm2 - vfmaddpd %xmm3, %xmm7 , %xmm12, %xmm3 - - - addq $SIZE, A1 - addq $SIZE, A2 - addq $SIZE, X1 - ALIGN_3 - -.L5X: -#endif - - vxorps %xmm8 , %xmm8, %xmm8 - vxorps %xmm9 , %xmm9, %xmm9 - vmovhpd -16 * SIZE(A1, LDA), %xmm8 , %xmm8 - vmovhpd -16 * SIZE(A2, LDA), %xmm9 , %xmm9 - - movq M, I - sarq $3, I - jle .L55 - - VMOVUPS_A2(-15 * SIZE, A1, LDA, 1, %xmm5) - VMOVUPS_A2(-15 * SIZE, A2, LDA, 1, %xmm7) - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-14 * SIZE, X1, %xmm13) - - decq I - jle .L53 - ALIGN_4 - -.L52: - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_A2(-13 * SIZE, A1, LDA, 1, %xmm8) - - vfmaddpd %xmm2 , -16 * SIZE(A2) , %xmm12 , %xmm2 - - vshufpd $1, %xmm7, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - VMOVUPS_XL1(-12 * SIZE, X1, %xmm12) - VMOVUPS_A2(-13 * SIZE, A2, LDA, 1, %xmm9) - - vfmaddpd %xmm0 , -14 * SIZE(A1) , %xmm13 , %xmm0 - - VMOVUPS_A1(-12 * SIZE, A1, %xmm4) - vshufpd $1, %xmm8, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - VMOVUPS_A2(-11 * SIZE, A1, LDA, 1, %xmm5) - - vfmaddpd %xmm2 , -14 * SIZE(A2) , %xmm13 , %xmm2 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm3 , %xmm7 , %xmm13 , %xmm3 - VMOVUPS_XL1(-10 * SIZE, X1, %xmm13) - VMOVUPS_A2(-11 * SIZE, A2, LDA, 1, %xmm7) - - vfmaddpd %xmm0 , -12 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_A2( -9 * SIZE, A1, LDA, 1, %xmm8) - - vfmaddpd %xmm2 , -12 * SIZE(A2) , %xmm12 , %xmm2 - - vshufpd $1, %xmm7, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - VMOVUPS_XL1(-8 * SIZE, X1, %xmm12) - VMOVUPS_A2( -9 * SIZE, A2, LDA, 1, %xmm9) - - vfmaddpd %xmm0 , -10 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm8, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - VMOVUPS_A2(-7 * SIZE, A1, LDA, 1, %xmm5) - - vfmaddpd %xmm2 , -10 * SIZE(A2) , %xmm13 , %xmm2 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm3 , %xmm7 , %xmm13 , %xmm3 - VMOVUPS_XL1(-6 * SIZE, X1, %xmm13) - VMOVUPS_A2(-7 * SIZE, A2, LDA, 1, %xmm7) - - addq $8 * SIZE, A1 - addq $8 * SIZE, A2 - addq $8 * SIZE, X1 - - decq I - jg .L52 - ALIGN_4 - -.L53: - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_A2(-13 * SIZE, A1, LDA, 1, %xmm8) - - vfmaddpd %xmm2 , -16 * SIZE(A2) , %xmm12 , %xmm2 - - vshufpd $1, %xmm7, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - VMOVUPS_XL1(-12 * SIZE, X1, %xmm12) - VMOVUPS_A2(-13 * SIZE, A2, LDA, 1, %xmm9) - - vfmaddpd %xmm0 , -14 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm8, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - VMOVUPS_A2(-11 * SIZE, A1, LDA, 1, %xmm5) - - vfmaddpd %xmm2 , -14 * SIZE(A2) , %xmm13 , %xmm2 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm3 , %xmm7 , %xmm13 , %xmm3 - VMOVUPS_XL1(-10 * SIZE, X1, %xmm13) - VMOVUPS_A2(-11 * SIZE, A2, LDA, 1, %xmm7) - - vfmaddpd %xmm0 , -12 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_A2( -9 * SIZE, A1, LDA, 1, %xmm8) - - vfmaddpd %xmm2 , -12 * SIZE(A2) , %xmm12 , %xmm2 - - vshufpd $1, %xmm7, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - VMOVUPS_XL1(-8 * SIZE, X1, %xmm12) - VMOVUPS_A2( -9 * SIZE, A2, LDA, 1, %xmm9) - - vfmaddpd %xmm0 , -10 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm8, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - VMOVUPS_A2(-7 * SIZE, A1, LDA, 1, %xmm5) - - vfmaddpd %xmm2 , -10 * SIZE(A2) , %xmm13 , %xmm2 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm3 , %xmm7 , %xmm13 , %xmm3 - VMOVUPS_XL1(-6 * SIZE, X1, %xmm13) - VMOVUPS_A2(-7 * SIZE, A2, LDA, 1, %xmm7) - - addq $8 * SIZE, A1 - addq $8 * SIZE, A2 - addq $8 * SIZE, X1 - ALIGN_4 - -.L55: - testq $4, M - jle .L56 - - VMOVUPS_A2(-15 * SIZE, A1, LDA, 1, %xmm5) - VMOVUPS_A2(-15 * SIZE, A2, LDA, 1, %xmm7) - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-14 * SIZE, X1, %xmm13) - - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_A2(-13 * SIZE, A1, LDA, 1, %xmm8) - - vfmaddpd %xmm2 , -16 * SIZE(A2) , %xmm12 , %xmm2 - - vshufpd $1, %xmm7, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - VMOVUPS_A2(-13 * SIZE, A2, LDA, 1, %xmm9) - - vfmaddpd %xmm0 , -14 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm8, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - - vfmaddpd %xmm2 , -14 * SIZE(A2) , %xmm13 , %xmm2 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm3 , %xmm7 , %xmm13 , %xmm3 - - - addq $4 * SIZE, A1 - addq $4 * SIZE, A2 - addq $4 * SIZE, X1 - ALIGN_4 - -.L56: - testq $2, M - jle .L57 - - VMOVUPS_A2(-15 * SIZE, A1, LDA, 1, %xmm5) - VMOVUPS_A2(-15 * SIZE, A2, LDA, 1, %xmm7) - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - - vfmaddpd %xmm2 , -16 * SIZE(A2) , %xmm12 , %xmm2 - - vshufpd $1, %xmm7, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - - addq $2 * SIZE, A1 - addq $2 * SIZE, A2 - addq $2 * SIZE, X1 - ALIGN_4 - -.L57: - testq $1, M - je .L58 - - vmovsd -16 * SIZE(X1), %xmm12 - - vmovsd -16 * SIZE(A1), %xmm4 - vmovsd -16 * SIZE(A2), %xmm6 - - vfmaddpd %xmm0 , %xmm4 , %xmm12 , %xmm0 - - vshufpd $1, %xmm8, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - - vfmaddpd %xmm2 , %xmm6 , %xmm12 , %xmm2 - - vshufpd $1, %xmm9, %xmm9 , %xmm9 - vfmaddpd %xmm3 , %xmm9 , %xmm12 , %xmm3 - - ALIGN_4 - -.L58: - vhaddpd %xmm1, %xmm0 , %xmm0 - vhaddpd %xmm3, %xmm2 , %xmm2 - - vmulpd ALPHA, %xmm0 , %xmm0 - vmulpd ALPHA, %xmm2 , %xmm2 - - cmpq $SIZE, INCY - jne .L59 - - vmovups 0 * SIZE(Y), %xmm4 - vmovups 2 * SIZE(Y), %xmm5 - addq $4 * SIZE, Y - - vaddpd %xmm4, %xmm0 , %xmm0 - vaddpd %xmm5, %xmm2 , %xmm2 - - vmovups %xmm0, 0 * SIZE(Y1) - vmovups %xmm2, 2 * SIZE(Y1) - addq $4 * SIZE, Y1 - - cmpq $4, N - jge .L51 - jmp .L60 - ALIGN_4 - -.L59: - vmovsd (Y), %xmm4 - addq INCY, Y - vmovhpd (Y), %xmm4 , %xmm4 - addq INCY, Y - vmovsd (Y), %xmm5 - addq INCY, Y - vmovhpd (Y), %xmm5 , %xmm5 - addq INCY, Y - - vaddpd %xmm4, %xmm0 , %xmm0 - vaddpd %xmm5, %xmm2 , %xmm2 - - vmovlpd %xmm0, (Y1) - addq INCY, Y1 - vmovhpd %xmm0, (Y1) - addq INCY, Y1 - vmovlpd %xmm2, (Y1) - addq INCY, Y1 - vmovhpd %xmm2, (Y1) - addq INCY, Y1 - cmpq $4, N - jge .L51 - ALIGN_4 - -.L60: -#endif - -#if GEMV_UNROLL >= 2 - - cmpq $2, N - jl .L70 - -#if GEMV_UNROLL == 2 - ALIGN_3 - -.L61: -#endif - - subq $2, N - - leaq 16 * SIZE(BUFFER), X1 - - movq A, A1 - leaq (A1, LDA), A2 - leaq (A1, LDA, 2), A - - vxorps %xmm0 , %xmm0, %xmm0 - vxorps %xmm1 , %xmm1, %xmm1 - vxorps %xmm2 , %xmm2, %xmm2 - vxorps %xmm3 , %xmm3, %xmm3 - -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L6X - - vmovsd -16 * SIZE(X1), %xmm12 - - vmovsd -16 * SIZE(A1), %xmm4 - vmovsd -16 * SIZE(A2), %xmm5 - - vfmaddpd %xmm0 , %xmm4 , %xmm12 , %xmm0 - vfmaddpd %xmm1 , %xmm5 , %xmm12 , %xmm1 - - addq $SIZE, A1 - addq $SIZE, A2 - addq $SIZE, X1 - ALIGN_3 - -.L6X: -#endif - - vxorps %xmm8 , %xmm8, %xmm8 - vmovhpd -16 * SIZE(A2), %xmm8 , %xmm8 - - movq M, I - sarq $3, I - jle .L65 - - VMOVUPS_A1(-15 * SIZE, A2, %xmm5) - VMOVUPS_A1(-13 * SIZE, A2, %xmm7) - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-14 * SIZE, X1, %xmm13) - - decq I - jle .L63 - ALIGN_4 - -.L62: - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_XL1(-12 * SIZE, X1, %xmm12) - VMOVUPS_A1(-11 * SIZE, A2, %xmm9) - - vfmaddpd %xmm0 , -14 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm7, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - VMOVUPS_XL1(-10 * SIZE, X1, %xmm13) - VMOVUPS_A1( -9 * SIZE, A2, %xmm8) - - vfmaddpd %xmm0 , -12 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm1 , %xmm7 , %xmm12 , %xmm1 - VMOVUPS_XL1(-8 * SIZE, X1, %xmm12) - VMOVUPS_A1(-7 * SIZE, A2, %xmm5) - - vfmaddpd %xmm0 , -10 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm8, %xmm9 , %xmm9 - vfmaddpd %xmm1 , %xmm9 , %xmm13 , %xmm1 - VMOVUPS_XL1(-6 * SIZE, X1, %xmm13) - VMOVUPS_A1(-5 * SIZE, A2, %xmm7) - - addq $8 * SIZE, A1 - addq $8 * SIZE, A2 - addq $8 * SIZE, X1 - - decq I - jg .L62 - ALIGN_4 - -.L63: - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - VMOVUPS_XL1(-12 * SIZE, X1, %xmm12) - VMOVUPS_A1(-11 * SIZE, A2, %xmm9) - - vfmaddpd %xmm0 , -14 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm7, %xmm5 , %xmm5 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - VMOVUPS_XL1(-10 * SIZE, X1, %xmm13) - VMOVUPS_A1( -9 * SIZE, A2, %xmm8) - - vfmaddpd %xmm0 , -12 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm9, %xmm7 , %xmm7 - vfmaddpd %xmm1 , %xmm7 , %xmm12 , %xmm1 - - vfmaddpd %xmm0 , -10 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm8, %xmm9 , %xmm9 - vfmaddpd %xmm1 , %xmm9 , %xmm13 , %xmm1 - - - addq $8 * SIZE, A1 - addq $8 * SIZE, A2 - addq $8 * SIZE, X1 - ALIGN_4 - -.L65: - testq $4, M - jle .L66 - - VMOVUPS_A1(-15 * SIZE, A2, %xmm5) - VMOVUPS_A1(-13 * SIZE, A2, %xmm7) - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-14 * SIZE, X1, %xmm13) - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - - vfmaddpd %xmm0 , -14 * SIZE(A1) , %xmm13 , %xmm0 - - vshufpd $1, %xmm7, %xmm5 , %xmm5 - vmovups %xmm7, %xmm8 - vfmaddpd %xmm1 , %xmm5 , %xmm13 , %xmm1 - - addq $4 * SIZE, A1 - addq $4 * SIZE, A2 - addq $4 * SIZE, X1 - ALIGN_4 - -.L66: - testq $2, M - jle .L67 - - VMOVUPS_A1(-15 * SIZE, A2, %xmm5) - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - vshufpd $1, %xmm5, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - movaps %xmm5, %xmm8 - - addq $2 * SIZE, A1 - addq $2 * SIZE, A2 - addq $2 * SIZE, X1 - ALIGN_4 - -.L67: - testq $1, M - je .L68 - - vmovsd -16 * SIZE(X1), %xmm12 - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - vshufpd $1, %xmm8, %xmm8 , %xmm8 - vfmaddpd %xmm1 , %xmm8 , %xmm12 , %xmm1 - ALIGN_4 - -.L68: - vaddpd %xmm2, %xmm0 , %xmm0 - vaddpd %xmm3, %xmm1 , %xmm1 - - vhaddpd %xmm1, %xmm0 , %xmm0 - - vmulpd ALPHA, %xmm0 , %xmm0 - - vmovsd (Y), %xmm4 - addq INCY, Y - vmovhpd (Y), %xmm4 , %xmm4 - addq INCY, Y - - vaddpd %xmm4, %xmm0 , %xmm0 - - vmovlpd %xmm0, (Y1) - addq INCY, Y1 - vmovhpd %xmm0, (Y1) - addq INCY, Y1 - -#if GEMV_UNROLL == 2 - cmpq $2, N - jge .L61 -#endif - ALIGN_4 - -.L70: - cmpq $1, N - jl .L999 - -#endif - - leaq 16 * SIZE(BUFFER), X1 - - movq A, A1 - - vxorps %xmm0 , %xmm0, %xmm0 - vxorps %xmm1 , %xmm1, %xmm1 - vxorps %xmm2 , %xmm2, %xmm2 - vxorps %xmm3 , %xmm3, %xmm3 - -#ifdef ALIGNED_ACCESS - testq $SIZE, A - je .L7X - - vmovsd -16 * SIZE(X1), %xmm12 - vmovsd -16 * SIZE(A1), %xmm4 - - vfmaddpd %xmm0 , %xmm4 , %xmm12 , %xmm0 - - addq $SIZE, A1 - addq $SIZE, X1 - ALIGN_3 - -.L7X: -#endif - movq M, I - sarq $3, I - jle .L75 - - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-14 * SIZE, X1, %xmm13) - - decq I - jle .L73 - ALIGN_4 - -.L72: - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - vfmaddpd %xmm2 , -14 * SIZE(A1) , %xmm13 , %xmm2 - - VMOVUPS_XL1(-12 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-10 * SIZE, X1, %xmm13) - - vfmaddpd %xmm0 , -12 * SIZE(A1) , %xmm12 , %xmm0 - vfmaddpd %xmm2 , -10 * SIZE(A1) , %xmm13 , %xmm2 - - VMOVUPS_XL1( -8 * SIZE, X1, %xmm12) - VMOVUPS_XL1( -6 * SIZE, X1, %xmm13) - - addq $8 * SIZE, A1 - addq $8 * SIZE, X1 - - decq I - jg .L72 - ALIGN_4 - -.L73: - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - vfmaddpd %xmm2 , -14 * SIZE(A1) , %xmm13 , %xmm2 - - VMOVUPS_XL1(-12 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-10 * SIZE, X1, %xmm13) - - vfmaddpd %xmm0 , -12 * SIZE(A1) , %xmm12 , %xmm0 - vfmaddpd %xmm2 , -10 * SIZE(A1) , %xmm13 , %xmm2 - - addq $8 * SIZE, A1 - addq $8 * SIZE, X1 - ALIGN_4 - -.L75: - testq $4, M - jle .L76 - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - VMOVUPS_XL1(-14 * SIZE, X1, %xmm13) - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - vfmaddpd %xmm2 , -14 * SIZE(A1) , %xmm13 , %xmm2 - - addq $4 * SIZE, A1 - addq $4 * SIZE, X1 - ALIGN_4 - -.L76: - testq $2, M - jle .L77 - - VMOVUPS_XL1(-16 * SIZE, X1, %xmm12) - - vfmaddpd %xmm0 , -16 * SIZE(A1) , %xmm12 , %xmm0 - - addq $2 * SIZE, A1 - addq $2 * SIZE, X1 - ALIGN_4 - -.L77: - testq $1, M - je .L78 - - vmovsd -16 * SIZE(X1), %xmm12 - vmovsd -16 * SIZE(A1), %xmm4 - - vfmaddpd %xmm0 , %xmm4 , %xmm12 , %xmm0 - ALIGN_4 - -.L78: - vaddpd %xmm2, %xmm0 , %xmm0 - vaddpd %xmm3, %xmm1 , %xmm1 - - vaddpd %xmm1, %xmm0 , %xmm0 - - vhaddpd %xmm1, %xmm0 , %xmm0 - - vmulsd ALPHA, %xmm0 , %xmm0 - - vmovsd (Y), %xmm4 - addq INCY, Y - - vaddsd %xmm4, %xmm0 , %xmm0 - - vmovlpd %xmm0, (Y1) - addq INCY, Y1 -#endif ALIGN_4 .L999: