📄 zgemv_n_sse.s
字号:
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 %xmm0, %xmm4 mulps %xmm1, %xmm5 mulps %xmm0, %xmm6 mulps %xmm1, %xmm7 shufps $0xb1, %xmm5, %xmm5 shufps $0xb1, %xmm7, %xmm7 addps %xmm5, %xmm4 addps %xmm7, %xmm6 movsd 0 * SIZE(%edi), %xmm0 movhps 0 * SIZE(%edi, %ebx), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(%edi) addl %ebx, %edi # coffset += incy unpckhpd %xmm4, %xmm4 movsd %xmm4, 0 * SIZE(%edi) addl %ebx, %edi # coffset += incy movsd 0 * SIZE(%edi), %xmm0 movhps 0 * SIZE(%edi, %ebx), %xmm0 addps %xmm0, %xmm6 movsd %xmm6, 0 * SIZE(%edi) addl %ebx, %edi # coffset += incy unpckhpd %xmm6, %xmm6 movsd %xmm6, 0 * SIZE(%edi) addl %ebx, %edi # coffset += incy decl %esi jg .L21.L50: movl M, %esi andl $3, %esi cmpl $3, %esi jne .L60 XORPS %xmm4, %xmm4 XORPS %xmm5, %xmm5 XORPS %xmm6, %xmm6 XORPS %xmm7, %xmm7 movl A, %ecx addl $6 * SIZE, A movl LDA, %ebx movl BUFFER, %edx addl $128, %edx movaps 0 * SIZE(%edx), %xmm1 movaps 16 * SIZE(%edx), %xmm3 movl %ebp, %eax # i = min_n sarl $2, %eax jle .L53 ALIGN_3.L52: movsd 0 * SIZE(%ecx), %xmm0 movhps 2 * SIZE(%ecx), %xmm0 movsd 4 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm1 mulps 4 * SIZE(%edx), %xmm0 addps %xmm1, %xmm4 movaps 0 * SIZE(%edx), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(%ecx), %xmm0 mulps %xmm2, %xmm1 mulps 4 * SIZE(%edx), %xmm2 addps %xmm1, %xmm6 movhps 2 * SIZE(%ecx), %xmm0 addps %xmm2, %xmm7 movsd 4 * SIZE(%ecx), %xmm2 addl %ebx, %ecx movaps 8 * SIZE(%edx), %xmm1 mulps %xmm0, %xmm1 mulps 12 * SIZE(%edx), %xmm0 addps %xmm1, %xmm4 movaps 8 * SIZE(%edx), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(%ecx), %xmm0 mulps %xmm2, %xmm1 mulps 12 * SIZE(%edx), %xmm2 addps %xmm1, %xmm6 movaps 32 * SIZE(%edx), %xmm1 addps %xmm2, %xmm7 movhps 2 * SIZE(%ecx), %xmm0 movsd 4 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm3 mulps 20 * SIZE(%edx), %xmm0 addps %xmm3, %xmm4 movaps 16 * SIZE(%edx), %xmm3 addps %xmm0, %xmm5 movsd 0 * SIZE(%ecx), %xmm0 mulps %xmm2, %xmm3 mulps 20 * SIZE(%edx), %xmm2 addps %xmm3, %xmm6 movhps 2 * SIZE(%ecx), %xmm0 addps %xmm2, %xmm7 movsd 4 * SIZE(%ecx), %xmm2 addl %ebx, %ecx movaps 24 * SIZE(%edx), %xmm3 mulps %xmm0, %xmm3 mulps 28 * SIZE(%edx), %xmm0 addps %xmm3, %xmm4 movaps 24 * SIZE(%edx), %xmm3 addps %xmm0, %xmm5 mulps %xmm2, %xmm3 mulps 28 * SIZE(%edx), %xmm2 addps %xmm3, %xmm6 movaps 48 * SIZE(%edx), %xmm3 addps %xmm2, %xmm7 addl $32 * SIZE, %edx decl %eax jg .L52 ALIGN_3.L53: movl %ebp, %eax # i = min_n andl $3, %eax jle .L59 ALIGN_3.L54: movsd 0 * SIZE(%ecx), %xmm0 movhps 2 * SIZE(%ecx), %xmm0 movsd 4 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm1 mulps 4 * SIZE(%edx), %xmm0 addps %xmm1, %xmm4 movaps 0 * SIZE(%edx), %xmm1 addps %xmm0, %xmm5 mulps %xmm2, %xmm1 mulps 4 * SIZE(%edx), %xmm2 addps %xmm1, %xmm6 movaps 8 * SIZE(%edx), %xmm1 addps %xmm2, %xmm7 addl $8 * SIZE, %edx decl %eax jg .L54 ALIGN_3.L59: movl BUFFER, %eax movl INCY, %ebx movaps 0 * SIZE(%eax), %xmm0 movaps 4 * SIZE(%eax), %xmm1 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 %xmm0, %xmm4 mulps %xmm1, %xmm5 mulps %xmm0, %xmm6 mulps %xmm1, %xmm7 shufps $0xb1, %xmm5, %xmm5 shufps $0xb1, %xmm7, %xmm7 addps %xmm5, %xmm4 addps %xmm7, %xmm6 movsd 0 * SIZE(%edi), %xmm0 movhps 0 * SIZE(%edi, %ebx), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(%edi) addl %ebx, %edi # coffset += incy unpckhpd %xmm4, %xmm4 movsd %xmm4, 0 * SIZE(%edi) addl %ebx, %edi # coffset += incy movsd 0 * SIZE(%edi), %xmm0 addps %xmm0, %xmm6 movsd %xmm6, 0 * SIZE(%edi) jmp .L99 ALIGN_3.L60: cmpl $2, %esi jne .L70 XORPS %xmm4, %xmm4 XORPS %xmm5, %xmm5 XORPS %xmm6, %xmm6 XORPS %xmm7, %xmm7 movl BUFFER, %edx addl $128, %edx movl A, %ecx addl $4 * SIZE, A movl LDA, %ebx movaps 0 * SIZE(%edx), %xmm1 movaps 16 * SIZE(%edx), %xmm3 movl %ebp, %eax sarl $2, %eax jle .L63 ALIGN_3.L62: movsd 0 * SIZE(%ecx), %xmm0 movhps 2 * SIZE(%ecx), %xmm0 addl %ebx, %ecx movsd 0 * SIZE(%ecx), %xmm2 movhps 2 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm1 mulps 4 * SIZE(%edx), %xmm0 addps %xmm1, %xmm4 movaps 8 * SIZE(%edx), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(%ecx), %xmm0 mulps %xmm2, %xmm1 mulps 12 * SIZE(%edx), %xmm2 addps %xmm1, %xmm6 movaps 32 * SIZE(%edx), %xmm1 addps %xmm2, %xmm7 movhps 2 * SIZE(%ecx), %xmm0 addl %ebx, %ecx movsd 0 * SIZE(%ecx), %xmm2 movhps 2 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm3 mulps 20 * SIZE(%edx), %xmm0 addps %xmm3, %xmm4 movaps 24 * SIZE(%edx), %xmm3 addps %xmm0, %xmm5 mulps %xmm2, %xmm3 mulps 28 * SIZE(%edx), %xmm2 addps %xmm3, %xmm6 movaps 48 * SIZE(%edx), %xmm3 addps %xmm2, %xmm7 addl $32 * SIZE, %edx decl %eax jg .L62 ALIGN_3.L63: movl %ebp, %eax andl $3, %eax jle .L69 ALIGN_3.L64: movsd 0 * SIZE(%ecx), %xmm0 movhps 2 * SIZE(%ecx), %xmm0 mulps %xmm0, %xmm1 addps %xmm1, %xmm4 movaps 4 * SIZE(%edx), %xmm1 mulps %xmm0, %xmm1 addps %xmm1, %xmm5 movaps 8 * SIZE(%edx), %xmm1 addl %ebx, %ecx addl $8 * SIZE, %edx decl %eax jg .L64 ALIGN_3.L69: movl BUFFER, %eax movl INCY, %ebx 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 movaps 0 * SIZE(%eax), %xmm0 movaps 4 * SIZE(%eax), %xmm1 mulps %xmm0, %xmm4 mulps %xmm1, %xmm5 shufps $0xb1, %xmm5, %xmm5 addps %xmm5, %xmm4 movsd 0 * SIZE(%edi), %xmm0 movhps 0 * SIZE(%edi, %ebx), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(%edi) unpckhpd %xmm4, %xmm4 movsd %xmm4, 0 * SIZE(%edi, %ebx) jmp .L99 ALIGN_3.L70: cmpl $1, %esi jne .L99 XORPS %xmm4, %xmm4 XORPS %xmm5, %xmm5 XORPS %xmm6, %xmm6 XORPS %xmm7, %xmm7 movl BUFFER, %edx addl $128, %edx movl A, %ecx addl $2 * SIZE, A movl LDA, %ebx movaps 0 * SIZE(%edx), %xmm1 movaps 16 * SIZE(%edx), %xmm3 movl %ebp, %eax sarl $2, %eax jle .L73 ALIGN_3.L72: movsd 0 * SIZE(%ecx), %xmm0 addl %ebx, %ecx movsd 0 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm1 mulps 4 * SIZE(%edx), %xmm0 addps %xmm1, %xmm4 movsd 8 * SIZE(%edx), %xmm1 addps %xmm0, %xmm5 movsd 0 * SIZE(%ecx), %xmm0 mulps %xmm2, %xmm1 mulps 12 * SIZE(%edx), %xmm2 addps %xmm1, %xmm6 movsd 32 * SIZE(%edx), %xmm1 addps %xmm2, %xmm7 addl %ebx, %ecx movsd 0 * SIZE(%ecx), %xmm2 addl %ebx, %ecx mulps %xmm0, %xmm3 mulps 20 * SIZE(%edx), %xmm0 addps %xmm3, %xmm4 movsd 24 * SIZE(%edx), %xmm3 addps %xmm0, %xmm5 mulps %xmm2, %xmm3 mulps 28 * SIZE(%edx), %xmm2 addps %xmm3, %xmm6 movsd 48 * SIZE(%edx), %xmm3 addps %xmm2, %xmm7 addl $32 * SIZE, %edx decl %eax jg .L72 ALIGN_3.L73: movl %ebp, %eax andl $3, %eax jle .L79 ALIGN_3.L74: movsd 0 * SIZE(%ecx), %xmm0 mulps %xmm0, %xmm1 addps %xmm1, %xmm4 movsd 4 * SIZE(%edx), %xmm1 mulps %xmm0, %xmm1 addps %xmm1, %xmm5 movsd 8 * SIZE(%edx), %xmm1 addl %ebx, %ecx addl $8 * SIZE, %edx decl %eax jg .L74 ALIGN_3.L79: addps %xmm6, %xmm4 addps %xmm7, %xmm5 movl BUFFER, %eax shufps $0xb1, %xmm5, %xmm5#if (!defined(XCONJ) && !defined(CONJ)) || (defined(XCONJ) && defined(CONJ)) subps %xmm5, %xmm4#else addps %xmm5, %xmm4#endif movaps %xmm4, %xmm5 movaps 0 * SIZE(%eax), %xmm0 movaps 4 * SIZE(%eax), %xmm1 mulps %xmm0, %xmm4 mulps %xmm1, %xmm5 shufps $0xb1, %xmm5, %xmm5 addps %xmm5, %xmm4 movsd 0 * SIZE(%edi), %xmm0 addps %xmm0, %xmm4 movsd %xmm4, 0 * SIZE(%edi) ALIGN_3.L99: movl PLDA_M, %eax addl %eax, A movl IS, %edx#ifndef PARAMTEST addl $P, %edx#else addl P, %edx#endif cmpl N, %edx jl .L10 ALIGN_3.L999: EMMS popl %ebx popl %esi popl %edi popl %ebp addl $ARGS, %esp ret EPILOGUE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -