📄 zgemv_n_sse.s
字号:
decq I jg .L24 ALIGN_3.L29: shufps $0xb1, %xmm5, %xmm5 shufps $0xb1, %xmm7, %xmm7#if (!defined(XCONJ) && !defined(CONJ)) || (defined(XCONJ) && defined(CONJ)) subps %xmm5, %xmm4 subps %xmm7, %xmm6#else addps %xmm5, %xmm4 addps %xmm7, %xmm6#endif movaps %xmm4, %xmm5 movaps %xmm6, %xmm7 mulps %xmm14, %xmm4 mulps %xmm15, %xmm5 mulps %xmm14, %xmm6 mulps %xmm15, %xmm7 shufps $0xb1, %xmm5, %xmm5 shufps $0xb1, %xmm7, %xmm7 addps %xmm5, %xmm4 addps %xmm7, %xmm6 movsd 0 * SIZE(CO), %xmm0 movhps 0 * SIZE(CO, INCY), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(CO) addq INCY, CO # coffset += incy unpckhpd %xmm4, %xmm4 movsd %xmm4, 0 * SIZE(CO) addq INCY, CO # coffset += incy movsd 0 * SIZE(CO), %xmm0 movhps 0 * SIZE(CO, INCY), %xmm0 addps %xmm0, %xmm6 movsd %xmm6, 0 * SIZE(CO) addq INCY, CO # coffset += incy unpckhpd %xmm6, %xmm6 movsd %xmm6, 0 * SIZE(CO) addq INCY, CO # coffset += incy decq J jg .L21.L50: movq M, J andq $3, J cmpq $3, J jne .L60 xorps %xmm4, %xmm4 xorps %xmm5, %xmm5 xorps %xmm6, %xmm6 xorps %xmm7, %xmm7 movq A, AO addq $6 * SIZE, A movq BUFFER, BO movaps 0 * SIZE(BO), %xmm1 movaps 16 * SIZE(BO), %xmm3 movq MIN_N, I # i = min_n sarq $2, I jle .L53 ALIGN_3.L52: prefetcht0 PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm0 movhps 2 * SIZE(AO), %xmm0 movsd 4 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm1 mulps 4 * SIZE(BO), %xmm0 addps %xmm1, %xmm4 movaps 0 * SIZE(BO), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(AO), %xmm0 mulps %xmm2, %xmm1 mulps 4 * SIZE(BO), %xmm2 addps %xmm1, %xmm6 movhps 2 * SIZE(AO), %xmm0 addps %xmm2, %xmm7 prefetchnta PREFETCHSIZE * SIZE(AO) movsd 4 * SIZE(AO), %xmm2 addq LDA, AO movaps 8 * SIZE(BO), %xmm1 mulps %xmm0, %xmm1 mulps 12 * SIZE(BO), %xmm0 addps %xmm1, %xmm4 movaps 8 * SIZE(BO), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(AO), %xmm0 mulps %xmm2, %xmm1 mulps 12 * SIZE(BO), %xmm2 addps %xmm1, %xmm6 movaps 32 * SIZE(BO), %xmm1 addps %xmm2, %xmm7 prefetchnta PREFETCHSIZE * SIZE(AO) movhps 2 * SIZE(AO), %xmm0 movsd 4 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm3 mulps 20 * SIZE(BO), %xmm0 addps %xmm3, %xmm4 movaps 16 * SIZE(BO), %xmm3 addps %xmm0, %xmm5 movsd 0 * SIZE(AO), %xmm0 mulps %xmm2, %xmm3 mulps 20 * SIZE(BO), %xmm2 addps %xmm3, %xmm6 movhps 2 * SIZE(AO), %xmm0 addps %xmm2, %xmm7 prefetchnta PREFETCHSIZE * SIZE(AO) movsd 4 * SIZE(AO), %xmm2 addq LDA, AO movaps 24 * SIZE(BO), %xmm3 mulps %xmm0, %xmm3 mulps 28 * SIZE(BO), %xmm0 addps %xmm3, %xmm4 movaps 24 * SIZE(BO), %xmm3 addps %xmm0, %xmm5 mulps %xmm2, %xmm3 mulps 28 * SIZE(BO), %xmm2 addps %xmm3, %xmm6 movaps 48 * SIZE(BO), %xmm3 addps %xmm2, %xmm7 addq $32 * SIZE, BO decq I jg .L52 ALIGN_3.L53: movq MIN_N, I # i = min_n andq $3, I jle .L59 ALIGN_3.L54: movsd 0 * SIZE(AO), %xmm0 movhps 2 * SIZE(AO), %xmm0 movsd 4 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm1 mulps 4 * SIZE(BO), %xmm0 addps %xmm1, %xmm4 movaps 0 * SIZE(BO), %xmm1 addps %xmm0, %xmm5 mulps %xmm2, %xmm1 mulps 4 * SIZE(BO), %xmm2 addps %xmm1, %xmm6 movaps 8 * SIZE(BO), %xmm1 addps %xmm2, %xmm7 addq $8 * SIZE, BO decq I jg .L54 ALIGN_3.L59: shufps $0xb1, %xmm5, %xmm5 shufps $0xb1, %xmm7, %xmm7#if (!defined(XCONJ) && !defined(CONJ)) || (defined(XCONJ) && defined(CONJ)) subps %xmm5, %xmm4 subps %xmm7, %xmm6#else addps %xmm5, %xmm4 addps %xmm7, %xmm6#endif movaps %xmm4, %xmm5 movaps %xmm6, %xmm7 mulps %xmm14, %xmm4 mulps %xmm15, %xmm5 mulps %xmm14, %xmm6 mulps %xmm15, %xmm7 shufps $0xb1, %xmm5, %xmm5 shufps $0xb1, %xmm7, %xmm7 addps %xmm5, %xmm4 addps %xmm7, %xmm6 movsd 0 * SIZE(CO), %xmm0 movhps 0 * SIZE(CO, INCY), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(CO) addq INCY, CO # coffset += incy unpckhpd %xmm4, %xmm4 movsd %xmm4, 0 * SIZE(CO) addq INCY, CO # coffset += incy movsd 0 * SIZE(CO), %xmm0 addps %xmm0, %xmm6 movsd %xmm6, 0 * SIZE(CO) jmp .L99 ALIGN_3.L60: cmpq $2, J jne .L70 xorps %xmm4, %xmm4 xorps %xmm5, %xmm5 xorps %xmm6, %xmm6 xorps %xmm7, %xmm7 movq BUFFER, BO movq A, AO addq $4 * SIZE, A movaps 0 * SIZE(BO), %xmm1 movaps 16 * SIZE(BO), %xmm3 movq MIN_N, I sarq $2, I jle .L63 ALIGN_3.L62: prefetchnta PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm0 movhps 2 * SIZE(AO), %xmm0 addq LDA, AO prefetchnta PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm2 movhps 2 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm1 mulps 4 * SIZE(BO), %xmm0 addps %xmm1, %xmm4 movaps 8 * SIZE(BO), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(AO), %xmm0 mulps %xmm2, %xmm1 mulps 12 * SIZE(BO), %xmm2 addps %xmm1, %xmm6 movaps 32 * SIZE(BO), %xmm1 addps %xmm2, %xmm7 prefetchnta PREFETCHSIZE * SIZE(AO) movhps 2 * SIZE(AO), %xmm0 addq LDA, AO prefetchnta PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm2 movhps 2 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm3 mulps 20 * SIZE(BO), %xmm0 addps %xmm3, %xmm4 movaps 24 * SIZE(BO), %xmm3 addps %xmm0, %xmm5 mulps %xmm2, %xmm3 mulps 28 * SIZE(BO), %xmm2 addps %xmm3, %xmm6 movaps 48 * SIZE(BO), %xmm3 addps %xmm2, %xmm7 addq $32 * SIZE, BO decq I jg .L62 ALIGN_3.L63: movq MIN_N, I andq $3, I jle .L69 ALIGN_3.L64: movsd 0 * SIZE(AO), %xmm0 movhps 2 * SIZE(AO), %xmm0 mulps %xmm0, %xmm1 addps %xmm1, %xmm4 movaps 4 * SIZE(BO), %xmm1 mulps %xmm0, %xmm1 addps %xmm1, %xmm5 movaps 8 * SIZE(BO), %xmm1 addq LDA, AO addq $8 * SIZE, BO decq I jg .L64 ALIGN_3.L69: addps %xmm6, %xmm4 addps %xmm7, %xmm5 shufps $0xb1, %xmm5, %xmm5#if (!defined(XCONJ) && !defined(CONJ)) || (defined(XCONJ) && defined(CONJ)) subps %xmm5, %xmm4#else addps %xmm5, %xmm4#endif movaps %xmm4, %xmm5 mulps %xmm14, %xmm4 mulps %xmm15, %xmm5 shufps $0xb1, %xmm5, %xmm5 addps %xmm5, %xmm4 movsd 0 * SIZE(CO), %xmm0 movhps 0 * SIZE(CO, INCY), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(CO) unpckhpd %xmm4, %xmm4 movsd %xmm4, 0 * SIZE(CO, INCY) jmp .L99 ALIGN_3.L70: cmpq $1, J jne .L99 xorps %xmm4, %xmm4 xorps %xmm5, %xmm5 xorps %xmm6, %xmm6 xorps %xmm7, %xmm7 movq BUFFER, BO movq A, AO addq $2 * SIZE, A movaps 0 * SIZE(BO), %xmm1 movaps 16 * SIZE(BO), %xmm3 movq MIN_N, I sarq $2, I jle .L73 ALIGN_3.L72: prefetchnta PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm0 addq LDA, AO prefetchnta PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm1 mulps 4 * SIZE(BO), %xmm0 addps %xmm1, %xmm4 movsd 8 * SIZE(BO), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(AO), %xmm0 mulps %xmm2, %xmm1 mulps 12 * SIZE(BO), %xmm2 addps %xmm1, %xmm6 movsd 32 * SIZE(BO), %xmm1 addps %xmm2, %xmm7 prefetchnta PREFETCHSIZE * SIZE(AO) addq LDA, AO prefetchnta PREFETCHSIZE * SIZE(AO) movsd 0 * SIZE(AO), %xmm2 addq LDA, AO mulps %xmm0, %xmm3 mulps 20 * SIZE(BO), %xmm0 addps %xmm3, %xmm4 movsd 24 * SIZE(BO), %xmm3 addps %xmm0, %xmm5 mulps %xmm2, %xmm3 mulps 28 * SIZE(BO), %xmm2 addps %xmm3, %xmm6 movsd 48 * SIZE(BO), %xmm3 addps %xmm2, %xmm7 addq $32 * SIZE, BO decq I jg .L72 ALIGN_3.L73: movq MIN_N, I andq $3, I jle .L79 ALIGN_3.L74: movsd 0 * SIZE(AO), %xmm0 mulps %xmm0, %xmm1 addps %xmm1, %xmm4 movsd 4 * SIZE(BO), %xmm1 mulps %xmm0, %xmm1 addps %xmm1, %xmm5 movsd 8 * SIZE(BO), %xmm1 addq LDA, AO addq $8 * SIZE, BO decq I jg .L74 ALIGN_3.L79: addps %xmm6, %xmm4 addps %xmm7, %xmm5 shufps $0xb1, %xmm5, %xmm5#if (!defined(XCONJ) && !defined(CONJ)) || (defined(XCONJ) && defined(CONJ)) subps %xmm5, %xmm4#else addps %xmm5, %xmm4#endif movaps %xmm4, %xmm5 mulps %xmm14, %xmm4 mulps %xmm15, %xmm5 shufps $0xb1, %xmm5, %xmm5 addps %xmm5, %xmm4 movsd 0 * SIZE(CO), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(CO) ALIGN_3.L99: addq PLDA_M, A#ifndef PARAMTEST addq $P, IS # is += P#else addq P, IS # is += P#endif cmpq N, IS jl .L10 ALIGN_3.L999: EMMS 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 + -