📄 zgemv_t_sse2_barcelona.s
字号:
ALIGN_3.L33: mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(2 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 4 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(3 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(4 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(5 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(4 * SIZE, AO2, %xmm10) mulpd %xmm13, %xmm11 movapd 6 * SIZE(BO), %xmm13 ADD %xmm11, %xmm3 MOVDDUP(5 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(6 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(7 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(6 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 8 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(7 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(8 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(9 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(8 * SIZE, AO2, %xmm10) mulpd %xmm13, %xmm11 movapd 10 * SIZE(BO), %xmm13 ADD %xmm11, %xmm3 MOVDDUP(9 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(10 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(11 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(10 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 12 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(11 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(12 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(13 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(12 * SIZE, AO2, %xmm10) mulpd %xmm13, %xmm11 movapd 14 * SIZE(BO), %xmm13 ADD %xmm11, %xmm3 MOVDDUP(13 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(14 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(15 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(14 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 16 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(15 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 mulpd %xmm13, %xmm11 movapd 18 * SIZE(BO), %xmm13 ADD %xmm11, %xmm3 addq $16 * SIZE, AO1 addq $16 * SIZE, AO2 addq $16 * SIZE, BO ALIGN_3.L34: movq MIN_N, I andq $4, I jle .L35 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) MOVDDUP(0 * SIZE, AO2, %xmm10) MOVDDUP(1 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(2 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 4 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(3 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(4 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(5 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(4 * SIZE, AO2, %xmm10) mulpd %xmm13, %xmm11 movapd 6 * SIZE(BO), %xmm13 ADD %xmm11, %xmm3 MOVDDUP(5 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(6 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(7 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(6 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 8 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(7 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 mulpd %xmm13, %xmm11 movapd 10 * SIZE(BO), %xmm13 ADD %xmm11, %xmm3 addq $8 * SIZE, AO1 addq $8 * SIZE, AO2 addq $8 * SIZE, BO ALIGN_3.L35: movq MIN_N, I andq $2, I jle .L36 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) MOVDDUP(0 * SIZE, AO2, %xmm10) MOVDDUP(1 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 MOVDDUP(2 * SIZE, AO2, %xmm10) mulpd %xmm12, %xmm11 movapd 4 * SIZE(BO), %xmm12 ADD %xmm11, %xmm3 MOVDDUP(3 * SIZE, AO2, %xmm11) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 mulpd %xmm13, %xmm9 ADD %xmm9, %xmm1 mulpd %xmm13, %xmm10 addpd %xmm10, %xmm2 mulpd %xmm13, %xmm11 ADD %xmm11, %xmm3 addq $4 * SIZE, AO1 addq $4 * SIZE, AO2 addq $4 * SIZE, BO ALIGN_2.L36: movq MIN_N, I andq $1, I jle .L37 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) MOVDDUP(0 * SIZE, AO2, %xmm10) MOVDDUP(1 * SIZE, AO2, %xmm11) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 mulpd %xmm12, %xmm10 addpd %xmm10, %xmm2 mulpd %xmm12, %xmm11 ADD %xmm11, %xmm3 ALIGN_3.L37: SHUFPD_1 %xmm1, %xmm1 SHUFPD_1 %xmm3, %xmm3 addsubpd %xmm1, %xmm0 addsubpd %xmm3, %xmm2 movapd %xmm0, %xmm1 movapd %xmm2, %xmm3 unpcklpd %xmm0, %xmm0 unpckhpd %xmm1, %xmm1 unpcklpd %xmm2, %xmm2 unpckhpd %xmm3, %xmm3 mulpd ALPHA, %xmm0 mulpd ALPHA, %xmm1 mulpd ALPHA, %xmm2 mulpd ALPHA, %xmm3 SHUFPD_1 %xmm1, %xmm1 SHUFPD_1 %xmm3, %xmm3 addsubpd %xmm1, %xmm0 addsubpd %xmm3, %xmm2 movq CO, TEMP movupd 0 * SIZE(TEMP), %xmm8 addpd %xmm8, %xmm0 addq INCY, TEMP movupd 0 * SIZE(TEMP), %xmm8 addpd %xmm8, %xmm2 movlpd %xmm0, 0 * SIZE(CO) movhpd %xmm0, 1 * SIZE(CO) addq INCY, CO movlpd %xmm2, 0 * SIZE(CO) movhpd %xmm2, 1 * SIZE(CO) addq INCY, CO ALIGN_3.L40: movq N, I andq $1, I jle .L99 ALIGN_3 .L41: movq A, AO1 addq LDA, A movq BUFFER, BO movapd 0 * SIZE(BO), %xmm12 movapd 2 * SIZE(BO), %xmm13 pxor %xmm0, %xmm0 pxor %xmm1, %xmm1 pxor %xmm2, %xmm2 pxor %xmm3, %xmm3 movq MIN_N, I sarq $3, I jle .L44 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) decq I jle .L43 ALIGN_3.L42: PREFETCH PREFETCHSIZE * SIZE(AO1) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 4 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(4 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 6 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(5 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(6 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 8 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(7 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(8 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 10 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(9 * SIZE, AO1, %xmm9) PREFETCH (PREFETCHSIZE + 8) * SIZE(AO1) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(10 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 12 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(11 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(12 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 14 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(13 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(14 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 16 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(15 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(16 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 18 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(17 * SIZE, AO1, %xmm9) addq $16 * SIZE, AO1 addq $16 * SIZE, BO decq I jg .L42 ALIGN_3.L43: mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 4 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(4 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 6 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(5 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(6 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 8 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(7 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(8 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 10 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(9 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(10 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 12 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(11 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(12 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 14 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 MOVDDUP(13 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(14 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 16 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(15 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm0 mulpd %xmm13, %xmm9 movapd 18 * SIZE(BO), %xmm13 ADD %xmm9, %xmm1 addq $16 * SIZE, AO1 addq $16 * SIZE, BO ALIGN_3.L44: movq MIN_N, I andq $4, I jle .L45 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 4 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm2 MOVDDUP(4 * SIZE, AO1, %xmm8) mulpd %xmm13, %xmm9 movapd 6 * SIZE(BO), %xmm13 ADD %xmm9, %xmm3 MOVDDUP(5 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(6 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 8 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(7 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm2 mulpd %xmm13, %xmm9 movapd 10 * SIZE(BO), %xmm13 ADD %xmm9, %xmm3 addq $8 * SIZE, AO1 addq $8 * SIZE, BO ALIGN_3.L45: movq MIN_N, I andq $2, I jle .L46 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 MOVDDUP(2 * SIZE, AO1, %xmm8) mulpd %xmm12, %xmm9 movapd 4 * SIZE(BO), %xmm12 ADD %xmm9, %xmm1 MOVDDUP(3 * SIZE, AO1, %xmm9) mulpd %xmm13, %xmm8 addpd %xmm8, %xmm2 mulpd %xmm13, %xmm9 ADD %xmm9, %xmm3 addq $4 * SIZE, AO1 addq $4 * SIZE, BO ALIGN_2.L46: movq MIN_N, I andq $1, I jle .L47 MOVDDUP(0 * SIZE, AO1, %xmm8) MOVDDUP(1 * SIZE, AO1, %xmm9) mulpd %xmm12, %xmm8 addpd %xmm8, %xmm0 mulpd %xmm12, %xmm9 ADD %xmm9, %xmm1 ALIGN_3.L47: addpd %xmm2, %xmm0 addpd %xmm3, %xmm1 SHUFPD_1 %xmm1, %xmm1 addsubpd %xmm1, %xmm0 movapd %xmm0, %xmm1 unpcklpd %xmm0, %xmm0 unpckhpd %xmm1, %xmm1 mulpd ALPHA, %xmm0 mulpd ALPHA, %xmm1 SHUFPD_1 %xmm1, %xmm1 addsubpd %xmm1, %xmm0 movupd 0 * SIZE(CO), %xmm8 addpd %xmm8, %xmm0 movlpd %xmm0, 0 * SIZE(CO) movhpd %xmm0, 1 * SIZE(CO) ALIGN_3.L99: addq NLDA, A addq $P, IS cmpq M, IS jl .L10 ALIGN_3.L999: movq 0(%rsp), %rbx movq 8(%rsp), %rbp movq 16(%rsp), %r12 movq 24(%rsp), %r13 movq 32(%rsp), %r14 movq 40(%rsp), %r15#ifdef WINDOWS_ABI movq 48(%rsp), %rdi movq 56(%rsp), %rsi movups 64(%rsp), %xmm6 movups 80(%rsp), %xmm7 movups 96(%rsp), %xmm8 movups 112(%rsp), %xmm9 movups 128(%rsp), %xmm10 movups 144(%rsp), %xmm11 movups 160(%rsp), %xmm12 movups 176(%rsp), %xmm13 movups 192(%rsp), %xmm14 movups 208(%rsp), %xmm15#endif addq $STACKSIZE, %rsp ret EPILOGUE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -