jmp *sha256_transform_addr(%rip)
- .text
- .p2align 6
- .globl sha256d_ms
- .globl _sha256d_ms
-sha256d_ms:
-_sha256d_ms:
-#if defined(_WIN64) || defined(__CYGWIN__)
- pushq %rdi
- pushq %rsi
- movq %rcx, %rdi
- movq %rdx, %rsi
- movq %r8, %rdx
-#endif
- movq %rsp, %r8
- subq $32, %rsp
- andq $-32, %rsp
-
- movdqa 0*16(%rdx), %xmm0
- movdqa 1*16(%rdx), %xmm1
- movdqa %xmm0, 0*16(%rdi)
- movdqa %xmm1, 1*16(%rdi)
-
- movl 0*4(%rsi), %eax
- movl 1*4(%rsi), %ecx
- movl 2*4(%rsi), %edx
- movl 3*4(%rsi), %r9d
- bswapl %eax
- bswapl %ecx
- bswapl %edx
- bswapl %r9d
- movl %eax, 0*4(%rsp)
- movl %ecx, 1*4(%rsp)
- movl %edx, 2*4(%rsp)
- movl %r9d, 3*4(%rsp)
-
- movq %rsp, %rsi
- movl $64, %eax
- movl $80, %ecx
- /* rep xsha256 */
- .byte 0xf3, 0x0f, 0xa6, 0xd0
-
- movdqa bswap_xmm_mask(%rip), %xmm1
- movdqa 0*16(%rdi), %xmm0
- movdqa 1*16(%rdi), %xmm2
- pshufb %xmm1, %xmm0
- pshufb %xmm1, %xmm2
- movdqa %xmm0, 0*16(%rsp)
- movdqa %xmm2, 1*16(%rsp)
-
- movdqa sha256_h+0*16(%rip), %xmm0
- movdqa sha256_h+1*16(%rip), %xmm1
- movdqa %xmm0, 0*16(%rdi)
- movdqa %xmm1, 1*16(%rdi)
-
- movq %rsp, %rsi
- xorq %rax, %rax
- movl $32, %ecx
- /* rep xsha256 */
- .byte 0xf3, 0x0f, 0xa6, 0xd0
-
- movq %r8, %rsp
-#if defined(_WIN64) || defined(__CYGWIN__)
- popq %rsi
- popq %rdi
-#endif
- ret
-
-
.data
.p2align 7
sha256_4h:
.long 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2
.data
- .p2align 6
-sha256d_4preext2_17:
- .long 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000
-sha256d_4preext2_23:
- .long 0x11002000, 0x11002000, 0x11002000, 0x11002000
-sha256d_4preext2_24:
- .long 0x80000000, 0x80000000, 0x80000000, 0x80000000
-sha256d_4preext2_30:
- .long 0x00400022, 0x00400022, 0x00400022, 0x00400022
-
- .data
.p2align 7
sha256_8h:
.long 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667
.long 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7
.long 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2
- .data
- .p2align 6
-sha256d_8preext2_17:
- .long 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000
-sha256d_8preext2_23:
- .long 0x11002000, 0x11002000, 0x11002000, 0x11002000, 0x11002000, 0x11002000, 0x11002000, 0x11002000
-sha256d_8preext2_24:
- .long 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000
-sha256d_8preext2_30:
- .long 0x00400022, 0x00400022, 0x00400022, 0x00400022, 0x00400022, 0x00400022, 0x00400022, 0x00400022
-
.text
.p2align 6
.globl sha256_init_4way
ret
- .data
- .p2align 3
-sha256d_ms_4way_addr:
- .quad 0x0
-
- .text
- .p2align 6
- .globl sha256d_ms_4way
- .globl _sha256d_ms_4way
-sha256d_ms_4way:
-_sha256d_ms_4way:
- jmp *sha256d_ms_4way_addr(%rip)
-
-
- .p2align 6
-sha256d_ms_4way_sse2:
-#if defined(_WIN64) || defined(__CYGWIN__)
- pushq %rdi
- subq $32, %rsp
- movdqa %xmm6, 0(%rsp)
- movdqa %xmm7, 16(%rsp)
- pushq %rsi
- movq %rcx, %rdi
- movq %rdx, %rsi
- movq %r8, %rdx
- movq %r9, %rcx
-#endif
- subq $8+67*16, %rsp
-
- leaq 256(%rsi), %rax
-
-sha256d_ms_4way_sse2_extend_loop1:
- movdqa 3*16(%rsi), %xmm0
- movdqa 2*16(%rax), %xmm3
- movdqa 3*16(%rax), %xmm7
- movdqa %xmm3, 5*16(%rsp)
- movdqa %xmm7, 6*16(%rsp)
- movdqa %xmm0, %xmm2
- paddd %xmm0, %xmm7
- psrld $3, %xmm0
- movdqa %xmm0, %xmm1
- pslld $14, %xmm2
- psrld $4, %xmm1
- pxor %xmm1, %xmm0
- pxor %xmm2, %xmm0
- psrld $11, %xmm1
- pslld $11, %xmm2
- pxor %xmm1, %xmm0
- pxor %xmm2, %xmm0
- paddd %xmm0, %xmm3
- movdqa %xmm3, 2*16(%rax)
- movdqa %xmm7, 3*16(%rax)
-
- movdqa 4*16(%rax), %xmm0
- movdqa %xmm0, 7*16(%rsp)
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- movdqa %xmm3, 4*16(%rax)
- movdqa %xmm7, 5*16(%rax)
-
- movdqa 6*16(%rax), %xmm0
- movdqa 7*16(%rax), %xmm4
- movdqa %xmm0, 9*16(%rsp)
- movdqa %xmm4, 10*16(%rsp)
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- paddd %xmm4, %xmm7
- movdqa %xmm3, 6*16(%rax)
- movdqa %xmm7, 7*16(%rax)
-
- movdqa 8*16(%rax), %xmm0
- movdqa 2*16(%rax), %xmm4
- movdqa %xmm0, 11*16(%rsp)
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- paddd %xmm4, %xmm7
- movdqa %xmm3, 8*16(%rax)
- movdqa %xmm7, 9*16(%rax)
-
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd 3*16(%rax), %xmm3
- paddd 4*16(%rax), %xmm7
- movdqa %xmm3, 10*16(%rax)
- movdqa %xmm7, 11*16(%rax)
-
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd 5*16(%rax), %xmm3
- paddd 6*16(%rax), %xmm7
- movdqa %xmm3, 12*16(%rax)
- movdqa %xmm7, 13*16(%rax)
-
- movdqa 14*16(%rax), %xmm0
- movdqa 15*16(%rax), %xmm4
- movdqa %xmm0, 17*16(%rsp)
- movdqa %xmm4, 18*16(%rsp)
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- paddd 7*16(%rax), %xmm0
- paddd 8*16(%rax), %xmm4
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- paddd %xmm4, %xmm7
- movdqa %xmm3, 14*16(%rax)
- movdqa %xmm7, 15*16(%rax)
-
-sha256d_ms_4way_sse2_extend_loop2:
- sha256_sse2_extend_doubleround 16
- sha256_sse2_extend_doubleround 18
- sha256_sse2_extend_doubleround 20
- sha256_sse2_extend_doubleround 22
- sha256_sse2_extend_doubleround 24
- sha256_sse2_extend_doubleround 26
- sha256_sse2_extend_doubleround 28
- sha256_sse2_extend_doubleround 30
- sha256_sse2_extend_doubleround 32
- sha256_sse2_extend_doubleround 34
- sha256_sse2_extend_doubleround 36
- sha256_sse2_extend_doubleround 38
- sha256_sse2_extend_doubleround 40
- sha256_sse2_extend_doubleround 42
- jz sha256d_ms_4way_sse2_extend_coda2
- sha256_sse2_extend_doubleround 44
- sha256_sse2_extend_doubleround 46
-
- movdqa 0(%rcx), %xmm3
- movdqa 16(%rcx), %xmm0
- movdqa 32(%rcx), %xmm1
- movdqa 48(%rcx), %xmm2
- movdqa 64(%rcx), %xmm6
- movdqa 80(%rcx), %xmm7
- movdqa 96(%rcx), %xmm5
- movdqa 112(%rcx), %xmm4
- movdqa %xmm1, 0(%rsp)
- movdqa %xmm2, 16(%rsp)
- movdqa %xmm6, 32(%rsp)
-
- movq %rsi, %rax
- leaq sha256_4k(%rip), %rcx
- jmp sha256d_ms_4way_sse2_main_loop1
-
-sha256d_ms_4way_sse2_main_loop2:
- sha256_sse2_main_round 0
- sha256_sse2_main_round 1
- sha256_sse2_main_round 2
-sha256d_ms_4way_sse2_main_loop1:
- sha256_sse2_main_round 3
- sha256_sse2_main_quadround 4
- sha256_sse2_main_quadround 8
- sha256_sse2_main_quadround 12
- sha256_sse2_main_quadround 16
- sha256_sse2_main_quadround 20
- sha256_sse2_main_quadround 24
- sha256_sse2_main_quadround 28
- sha256_sse2_main_quadround 32
- sha256_sse2_main_quadround 36
- sha256_sse2_main_quadround 40
- sha256_sse2_main_quadround 44
- sha256_sse2_main_quadround 48
- sha256_sse2_main_quadround 52
- sha256_sse2_main_round 56
- jz sha256d_ms_4way_sse2_finish
- sha256_sse2_main_round 57
- sha256_sse2_main_round 58
- sha256_sse2_main_round 59
- sha256_sse2_main_quadround 60
-
- movdqa 5*16(%rsp), %xmm1
- movdqa 6*16(%rsp), %xmm2
- movdqa 7*16(%rsp), %xmm6
- movdqa %xmm1, 18*16(%rsi)
- movdqa %xmm2, 19*16(%rsi)
- movdqa %xmm6, 20*16(%rsi)
- movdqa 9*16(%rsp), %xmm1
- movdqa 10*16(%rsp), %xmm2
- movdqa 11*16(%rsp), %xmm6
- movdqa %xmm1, 22*16(%rsi)
- movdqa %xmm2, 23*16(%rsi)
- movdqa %xmm6, 24*16(%rsi)
- movdqa 17*16(%rsp), %xmm1
- movdqa 18*16(%rsp), %xmm2
- movdqa %xmm1, 30*16(%rsi)
- movdqa %xmm2, 31*16(%rsi)
-
- movdqa 0(%rsp), %xmm1
- movdqa 16(%rsp), %xmm2
- movdqa 32(%rsp), %xmm6
- paddd 0(%rdx), %xmm7
- paddd 16(%rdx), %xmm5
- paddd 32(%rdx), %xmm4
- paddd 48(%rdx), %xmm3
- paddd 64(%rdx), %xmm0
- paddd 80(%rdx), %xmm1
- paddd 96(%rdx), %xmm2
- paddd 112(%rdx), %xmm6
-
- movdqa %xmm7, 48+0(%rsp)
- movdqa %xmm5, 48+16(%rsp)
- movdqa %xmm4, 48+32(%rsp)
- movdqa %xmm3, 48+48(%rsp)
- movdqa %xmm0, 48+64(%rsp)
- movdqa %xmm1, 48+80(%rsp)
- movdqa %xmm2, 48+96(%rsp)
- movdqa %xmm6, 48+112(%rsp)
-
- pxor %xmm0, %xmm0
- movq $0x8000000000000100, %rax
- movd %rax, %xmm1
- pshufd $0x55, %xmm1, %xmm2
- pshufd $0x00, %xmm1, %xmm1
- movdqa %xmm2, 48+128(%rsp)
- movdqa %xmm0, 48+144(%rsp)
- movdqa %xmm0, 48+160(%rsp)
- movdqa %xmm0, 48+176(%rsp)
- movdqa %xmm0, 48+192(%rsp)
- movdqa %xmm0, 48+208(%rsp)
- movdqa %xmm0, 48+224(%rsp)
- movdqa %xmm1, 48+240(%rsp)
-
- leaq 19*16(%rsp), %rax
- cmpq %rax, %rax
-
- movdqa -15*16(%rax), %xmm0
- movdqa -14*16(%rax), %xmm4
- movdqa %xmm0, %xmm2
- movdqa %xmm4, %xmm6
- psrld $3, %xmm0
- psrld $3, %xmm4
- movdqa %xmm0, %xmm1
- movdqa %xmm4, %xmm5
- pslld $14, %xmm2
- pslld $14, %xmm6
- psrld $4, %xmm1
- psrld $4, %xmm5
- pxor %xmm1, %xmm0
- pxor %xmm5, %xmm4
- psrld $11, %xmm1
- psrld $11, %xmm5
- pxor %xmm2, %xmm0
- pxor %xmm6, %xmm4
- pslld $11, %xmm2
- pslld $11, %xmm6
- pxor %xmm1, %xmm0
- pxor %xmm5, %xmm4
- pxor %xmm2, %xmm0
- pxor %xmm6, %xmm4
- paddd -16*16(%rax), %xmm0
- paddd -15*16(%rax), %xmm4
- paddd sha256d_4preext2_17(%rip), %xmm4
- movdqa %xmm0, %xmm3
- movdqa %xmm4, %xmm7
- movdqa %xmm3, 0*16(%rax)
- movdqa %xmm7, 1*16(%rax)
-
- sha256_sse2_extend_doubleround 2
- sha256_sse2_extend_doubleround 4
-
- movdqa -9*16(%rax), %xmm0
- movdqa sha256d_4preext2_23(%rip), %xmm4
- movdqa %xmm0, %xmm2
- psrld $3, %xmm0
- movdqa %xmm0, %xmm1
- pslld $14, %xmm2
- psrld $4, %xmm1
- pxor %xmm1, %xmm0
- pxor %xmm2, %xmm0
- psrld $11, %xmm1
- pslld $11, %xmm2
- pxor %xmm1, %xmm0
- pxor %xmm2, %xmm0
- paddd -10*16(%rax), %xmm0
- paddd -9*16(%rax), %xmm4
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- paddd -1*16(%rax), %xmm0
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- paddd 0*16(%rax), %xmm4
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- paddd %xmm4, %xmm7
- movdqa %xmm3, 6*16(%rax)
- movdqa %xmm7, 7*16(%rax)
-
- movdqa sha256d_4preext2_24(%rip), %xmm0
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- paddd 1*16(%rax), %xmm0
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- paddd 2*16(%rax), %xmm7
- movdqa %xmm3, 8*16(%rax)
- movdqa %xmm7, 9*16(%rax)
-
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd 3*16(%rax), %xmm3
- paddd 4*16(%rax), %xmm7
- movdqa %xmm3, 10*16(%rax)
- movdqa %xmm7, 11*16(%rax)
-
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd 5*16(%rax), %xmm3
- paddd 6*16(%rax), %xmm7
- movdqa %xmm3, 12*16(%rax)
- movdqa %xmm7, 13*16(%rax)
-
- movdqa sha256d_4preext2_30(%rip), %xmm0
- movdqa 0*16(%rax), %xmm4
- movdqa %xmm4, %xmm6
- psrld $3, %xmm4
- movdqa %xmm4, %xmm5
- pslld $14, %xmm6
- psrld $4, %xmm5
- pxor %xmm5, %xmm4
- pxor %xmm6, %xmm4
- psrld $11, %xmm5
- pslld $11, %xmm6
- pxor %xmm5, %xmm4
- pxor %xmm6, %xmm4
- paddd -1*16(%rax), %xmm4
- movdqa %xmm3, %xmm2
- movdqa %xmm7, %xmm6
- psrld $10, %xmm3
- psrld $10, %xmm7
- movdqa %xmm3, %xmm1
- movdqa %xmm7, %xmm5
- paddd 7*16(%rax), %xmm0
- pslld $13, %xmm2
- pslld $13, %xmm6
- psrld $7, %xmm1
- psrld $7, %xmm5
- paddd 8*16(%rax), %xmm4
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- psrld $2, %xmm1
- psrld $2, %xmm5
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- pslld $2, %xmm2
- pslld $2, %xmm6
- pxor %xmm1, %xmm3
- pxor %xmm5, %xmm7
- pxor %xmm2, %xmm3
- pxor %xmm6, %xmm7
- paddd %xmm0, %xmm3
- paddd %xmm4, %xmm7
- movdqa %xmm3, 14*16(%rax)
- movdqa %xmm7, 15*16(%rax)
-
- jmp sha256d_ms_4way_sse2_extend_loop2
-
-sha256d_ms_4way_sse2_extend_coda2:
- sha256_sse2_extend_round 44
-
- movdqa sha256_4h+0(%rip), %xmm7
- movdqa sha256_4h+16(%rip), %xmm5
- movdqa sha256_4h+32(%rip), %xmm4
- movdqa sha256_4h+48(%rip), %xmm3
- movdqa sha256_4h+64(%rip), %xmm0
- movdqa sha256_4h+80(%rip), %xmm1
- movdqa sha256_4h+96(%rip), %xmm2
- movdqa sha256_4h+112(%rip), %xmm6
- movdqa %xmm1, 0(%rsp)
- movdqa %xmm2, 16(%rsp)
- movdqa %xmm6, 32(%rsp)
-
- leaq 48(%rsp), %rax
- leaq sha256_4k(%rip), %rcx
- jmp sha256d_ms_4way_sse2_main_loop2
-
.macro sha256_sse2_main_round_red i, r7
movdqa 16*\i(%rax), %xmm6
paddd 16*\i(%rcx), %xmm6
paddd %xmm6, %xmm0
.endm
-sha256d_ms_4way_sse2_finish:
- sha256_sse2_main_round_red 57, %xmm3
- sha256_sse2_main_round_red 58, %xmm4
- sha256_sse2_main_round_red 59, %xmm5
- sha256_sse2_main_round_red 60, %xmm7
-
- paddd sha256_4h+112(%rip), %xmm0
- movdqa %xmm0, 112(%rdi)
-
- addq $8+67*16, %rsp
-#if defined(_WIN64) || defined(__CYGWIN__)
- popq %rsi
- movdqa 0(%rsp), %xmm6
- movdqa 16(%rsp), %xmm7
- addq $32, %rsp
- popq %rdi
-#endif
- ret
-
-
- .p2align 6
-sha256d_ms_4way_avx:
-#if defined(_WIN64) || defined(__CYGWIN__)
- pushq %rdi
- subq $80, %rsp
- movdqa %xmm6, 0(%rsp)
- movdqa %xmm7, 16(%rsp)
- movdqa %xmm8, 32(%rsp)
- movdqa %xmm9, 48(%rsp)
- movdqa %xmm10, 64(%rsp)
- pushq %rsi
- movq %rcx, %rdi
- movq %rdx, %rsi
- movq %r8, %rdx
- movq %r9, %rcx
-#endif
- subq $1032, %rsp
-
- leaq 256(%rsi), %rax
-
-sha256d_ms_4way_avx_extend_loop1:
- vmovdqa 3*16(%rsi), %xmm0
- vmovdqa 2*16(%rax), %xmm3
- vmovdqa 3*16(%rax), %xmm7
- vmovdqa %xmm3, 2*16(%rsp)
- vmovdqa %xmm7, 3*16(%rsp)
- vpaddd %xmm0, %xmm7, %xmm7
- vpslld $14, %xmm0, %xmm2
- vpsrld $3, %xmm0, %xmm0
- vpsrld $4, %xmm0, %xmm1
- vpxor %xmm1, %xmm0, %xmm0
- vpxor %xmm2, %xmm0, %xmm0
- vpsrld $11, %xmm1, %xmm1
- vpslld $11, %xmm2, %xmm2
- vpxor %xmm1, %xmm0, %xmm0
- vpxor %xmm2, %xmm0, %xmm0
- vpaddd %xmm0, %xmm3, %xmm3
- vmovdqa %xmm3, 2*16(%rax)
- vmovdqa %xmm7, 3*16(%rax)
-
- vmovdqa 4*16(%rax), %xmm0
- vmovdqa %xmm0, 4*16(%rsp)
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vmovdqa %xmm3, 4*16(%rax)
- vmovdqa %xmm7, 5*16(%rax)
-
- vmovdqa 6*16(%rax), %xmm0
- vmovdqa 7*16(%rax), %xmm4
- vmovdqa %xmm0, 6*16(%rsp)
- vmovdqa %xmm4, 7*16(%rsp)
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 6*16(%rax)
- vmovdqa %xmm7, 7*16(%rax)
-
- vmovdqa 8*16(%rax), %xmm0
- vmovdqa 2*16(%rax), %xmm4
- vmovdqa %xmm0, 8*16(%rsp)
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 8*16(%rax)
- vmovdqa %xmm7, 9*16(%rax)
-
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 3*16(%rax), %xmm3, %xmm3
- vpaddd 4*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 10*16(%rax)
- vmovdqa %xmm7, 11*16(%rax)
-
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 5*16(%rax), %xmm3, %xmm3
- vpaddd 6*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 12*16(%rax)
- vmovdqa %xmm7, 13*16(%rax)
-
- vmovdqa 14*16(%rax), %xmm0
- vmovdqa 15*16(%rax), %xmm4
- vmovdqa %xmm0, 14*16(%rsp)
- vmovdqa %xmm4, 15*16(%rsp)
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpaddd 7*16(%rax), %xmm0, %xmm0
- vpaddd 8*16(%rax), %xmm4, %xmm4
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 14*16(%rax)
- vmovdqa %xmm7, 15*16(%rax)
-
-sha256d_ms_4way_avx_extend_loop2:
- sha256_avx_extend_doubleround 16
- sha256_avx_extend_doubleround 18
- sha256_avx_extend_doubleround 20
- sha256_avx_extend_doubleround 22
- sha256_avx_extend_doubleround 24
- sha256_avx_extend_doubleround 26
- sha256_avx_extend_doubleround 28
- sha256_avx_extend_doubleround 30
- sha256_avx_extend_doubleround 32
- sha256_avx_extend_doubleround 34
- sha256_avx_extend_doubleround 36
- sha256_avx_extend_doubleround 38
- sha256_avx_extend_doubleround 40
- sha256_avx_extend_doubleround 42
- jz sha256d_ms_4way_avx_extend_coda2
- sha256_avx_extend_doubleround 44
- sha256_avx_extend_doubleround 46
-
- movdqa 0(%rcx), %xmm7
- movdqa 16(%rcx), %xmm8
- movdqa 32(%rcx), %xmm9
- movdqa 48(%rcx), %xmm10
- movdqa 64(%rcx), %xmm0
- movdqa 80(%rcx), %xmm5
- movdqa 96(%rcx), %xmm4
- movdqa 112(%rcx), %xmm3
-
- movq %rsi, %rax
- leaq sha256_4k(%rip), %rcx
- jmp sha256d_ms_4way_avx_main_loop1
-
-sha256d_ms_4way_avx_main_loop2:
- sha256_avx_main_round 0, %xmm10, %xmm9, %xmm8, %xmm0, %xmm3, %xmm4, %xmm5, %xmm7
- sha256_avx_main_round 1, %xmm9, %xmm8, %xmm0, %xmm10, %xmm4, %xmm5, %xmm7, %xmm3
- sha256_avx_main_round 2, %xmm8, %xmm0, %xmm10, %xmm9, %xmm5, %xmm7, %xmm3, %xmm4
-sha256d_ms_4way_avx_main_loop1:
- sha256_avx_main_round 3, %xmm0, %xmm10, %xmm9, %xmm8, %xmm7, %xmm3, %xmm4, %xmm5
- sha256_avx_main_quadround 4
- sha256_avx_main_quadround 8
- sha256_avx_main_quadround 12
- sha256_avx_main_quadround 16
- sha256_avx_main_quadround 20
- sha256_avx_main_quadround 24
- sha256_avx_main_quadround 28
- sha256_avx_main_quadround 32
- sha256_avx_main_quadround 36
- sha256_avx_main_quadround 40
- sha256_avx_main_quadround 44
- sha256_avx_main_quadround 48
- sha256_avx_main_quadround 52
- sha256_avx_main_round 56, %xmm10, %xmm9, %xmm8, %xmm0, %xmm3, %xmm4, %xmm5, %xmm7
- jz sha256d_ms_4way_avx_finish
- sha256_avx_main_round 57, %xmm9, %xmm8, %xmm0, %xmm10, %xmm4, %xmm5, %xmm7, %xmm3
- sha256_avx_main_round 58, %xmm8, %xmm0, %xmm10, %xmm9, %xmm5, %xmm7, %xmm3, %xmm4
- sha256_avx_main_round 59, %xmm0, %xmm10, %xmm9, %xmm8, %xmm7, %xmm3, %xmm4, %xmm5
- sha256_avx_main_quadround 60
-
- movdqa 2*16(%rsp), %xmm1
- movdqa 3*16(%rsp), %xmm2
- movdqa 4*16(%rsp), %xmm6
- movdqa %xmm1, 18*16(%rsi)
- movdqa %xmm2, 19*16(%rsi)
- movdqa %xmm6, 20*16(%rsi)
- movdqa 6*16(%rsp), %xmm1
- movdqa 7*16(%rsp), %xmm2
- movdqa 8*16(%rsp), %xmm6
- movdqa %xmm1, 22*16(%rsi)
- movdqa %xmm2, 23*16(%rsi)
- movdqa %xmm6, 24*16(%rsi)
- movdqa 14*16(%rsp), %xmm1
- movdqa 15*16(%rsp), %xmm2
- movdqa %xmm1, 30*16(%rsi)
- movdqa %xmm2, 31*16(%rsi)
-
- paddd 0(%rdx), %xmm7
- paddd 16(%rdx), %xmm5
- paddd 32(%rdx), %xmm4
- paddd 48(%rdx), %xmm3
- paddd 64(%rdx), %xmm0
- paddd 80(%rdx), %xmm8
- paddd 96(%rdx), %xmm9
- paddd 112(%rdx), %xmm10
-
- movdqa %xmm7, 0(%rsp)
- movdqa %xmm5, 16(%rsp)
- movdqa %xmm4, 32(%rsp)
- movdqa %xmm3, 48(%rsp)
- movdqa %xmm0, 64(%rsp)
- movdqa %xmm8, 80(%rsp)
- movdqa %xmm9, 96(%rsp)
- movdqa %xmm10, 112(%rsp)
-
- pxor %xmm0, %xmm0
- movq $0x8000000000000100, %rax
- movd %rax, %xmm1
- pshufd $0x55, %xmm1, %xmm2
- pshufd $0x00, %xmm1, %xmm1
- movdqa %xmm2, 128(%rsp)
- movdqa %xmm0, 144(%rsp)
- movdqa %xmm0, 160(%rsp)
- movdqa %xmm0, 176(%rsp)
- movdqa %xmm0, 192(%rsp)
- movdqa %xmm0, 208(%rsp)
- movdqa %xmm0, 224(%rsp)
- movdqa %xmm1, 240(%rsp)
-
- leaq 256(%rsp), %rax
- cmpq %rax, %rax
-
- vmovdqa -15*16(%rax), %xmm0
- vmovdqa -14*16(%rax), %xmm4
- vpslld $14, %xmm0, %xmm2
- vpslld $14, %xmm4, %xmm6
- vpsrld $3, %xmm0, %xmm8
- vpsrld $3, %xmm4, %xmm4
- vpsrld $7, %xmm0, %xmm1
- vpsrld $4, %xmm4, %xmm5
- vpxor %xmm1, %xmm8, %xmm8
- vpxor %xmm5, %xmm4, %xmm4
- vpsrld $11, %xmm1, %xmm1
- vpsrld $11, %xmm5, %xmm5
- vpxor %xmm2, %xmm8, %xmm8
- vpxor %xmm6, %xmm4, %xmm4
- vpslld $11, %xmm2, %xmm2
- vpslld $11, %xmm6, %xmm6
- vpxor %xmm1, %xmm8, %xmm8
- vpxor %xmm5, %xmm4, %xmm4
- vpxor %xmm2, %xmm8, %xmm8
- vpxor %xmm6, %xmm4, %xmm4
- vpaddd %xmm0, %xmm4, %xmm4
- vpaddd -16*16(%rax), %xmm8, %xmm3
- vpaddd sha256d_4preext2_17(%rip), %xmm4, %xmm7
- vmovdqa %xmm3, 0*16(%rax)
- vmovdqa %xmm7, 1*16(%rax)
-
- sha256_avx_extend_doubleround 2
- sha256_avx_extend_doubleround 4
-
- vmovdqa -9*16(%rax), %xmm0
- vpslld $14, %xmm0, %xmm2
- vpsrld $3, %xmm0, %xmm8
- vpsrld $7, %xmm0, %xmm1
- vpxor %xmm1, %xmm8, %xmm8
- vpxor %xmm2, %xmm8, %xmm8
- vpsrld $11, %xmm1, %xmm1
- vpslld $11, %xmm2, %xmm2
- vpxor %xmm1, %xmm8, %xmm8
- vpxor %xmm2, %xmm8, %xmm8
- vpaddd sha256d_4preext2_23(%rip), %xmm0, %xmm4
- vpaddd -10*16(%rax), %xmm8, %xmm0
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpaddd -1*16(%rax), %xmm0, %xmm0
- vpaddd 0*16(%rax), %xmm4, %xmm4
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 6*16(%rax)
- vmovdqa %xmm7, 7*16(%rax)
-
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd sha256d_4preext2_24(%rip), %xmm3, %xmm3
- vpaddd 1*16(%rax), %xmm3, %xmm3
- vpaddd 2*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 8*16(%rax)
- vmovdqa %xmm7, 9*16(%rax)
-
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 3*16(%rax), %xmm3, %xmm3
- vpaddd 4*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 10*16(%rax)
- vmovdqa %xmm7, 11*16(%rax)
-
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 5*16(%rax), %xmm3, %xmm3
- vpaddd 6*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 12*16(%rax)
- vmovdqa %xmm7, 13*16(%rax)
-
- vmovdqa sha256d_4preext2_30(%rip), %xmm0
- vmovdqa 0*16(%rax), %xmm4
- vpslld $14, %xmm4, %xmm6
- vpsrld $3, %xmm4, %xmm4
- vpsrld $4, %xmm4, %xmm5
- vpxor %xmm5, %xmm4, %xmm4
- vpxor %xmm6, %xmm4, %xmm4
- vpsrld $11, %xmm5, %xmm5
- vpslld $11, %xmm6, %xmm6
- vpxor %xmm5, %xmm4, %xmm4
- vpxor %xmm6, %xmm4, %xmm4
- vpaddd -1*16(%rax), %xmm4, %xmm4
- vpslld $13, %xmm3, %xmm2
- vpslld $13, %xmm7, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpaddd 7*16(%rax), %xmm0, %xmm0
- vpaddd 8*16(%rax), %xmm4, %xmm4
- vpsrld $7, %xmm3, %xmm1
- vpsrld $7, %xmm7, %xmm5
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpsrld $2, %xmm1, %xmm1
- vpsrld $2, %xmm5, %xmm5
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpslld $2, %xmm2, %xmm2
- vpslld $2, %xmm6, %xmm6
- vpxor %xmm1, %xmm3, %xmm3
- vpxor %xmm5, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 14*16(%rax)
- vmovdqa %xmm7, 15*16(%rax)
-
- jmp sha256d_ms_4way_avx_extend_loop2
-
-sha256d_ms_4way_avx_extend_coda2:
- sha256_avx_extend_round 44
-
- movdqa sha256_4h+0(%rip), %xmm7
- movdqa sha256_4h+16(%rip), %xmm5
- movdqa sha256_4h+32(%rip), %xmm4
- movdqa sha256_4h+48(%rip), %xmm3
- movdqa sha256_4h+64(%rip), %xmm0
- movdqa sha256_4h+80(%rip), %xmm8
- movdqa sha256_4h+96(%rip), %xmm9
- movdqa sha256_4h+112(%rip), %xmm10
-
- movq %rsp, %rax
- leaq sha256_4k(%rip), %rcx
- jmp sha256d_ms_4way_avx_main_loop2
-
.macro sha256_avx_main_round_red i, r0, r1, r2, r3, r4
vpaddd 16*\i(%rax), \r0, %xmm6
vpaddd 16*\i(%rcx), %xmm6, %xmm6
vpaddd %xmm6, \r4, \r0
.endm
-sha256d_ms_4way_avx_finish:
- sha256_avx_main_round_red 57, %xmm9, %xmm8, %xmm0, %xmm10, %xmm4
- sha256_avx_main_round_red 58, %xmm8, %xmm0, %xmm10, %xmm9, %xmm5
- sha256_avx_main_round_red 59, %xmm0, %xmm10, %xmm9, %xmm8, %xmm7
- sha256_avx_main_round_red 60, %xmm10, %xmm9, %xmm8, %xmm0, %xmm3
-
- paddd sha256_4h+112(%rip), %xmm10
- movdqa %xmm10, 112(%rdi)
-
- addq $1032, %rsp
-#if defined(_WIN64) || defined(__CYGWIN__)
- popq %rsi
- movdqa 0(%rsp), %xmm6
- movdqa 16(%rsp), %xmm7
- movdqa 32(%rsp), %xmm8
- movdqa 48(%rsp), %xmm9
- movdqa 64(%rsp), %xmm10
- addq $80, %rsp
- popq %rdi
-#endif
- ret
-
- .p2align 6
-sha256d_ms_4way_xop:
-#if defined(_WIN64) || defined(__CYGWIN__)
- pushq %rdi
- subq $80, %rsp
- movdqa %xmm6, 0(%rsp)
- movdqa %xmm7, 16(%rsp)
- movdqa %xmm8, 32(%rsp)
- movdqa %xmm9, 48(%rsp)
- movdqa %xmm10, 64(%rsp)
- pushq %rsi
- movq %rcx, %rdi
- movq %rdx, %rsi
- movq %r8, %rdx
- movq %r9, %rcx
-#endif
- subq $1032, %rsp
-
- leaq 256(%rsi), %rax
-
-sha256d_ms_4way_xop_extend_loop1:
- vmovdqa 3*16(%rsi), %xmm0
- vmovdqa 2*16(%rax), %xmm3
- vmovdqa 3*16(%rax), %xmm7
- vmovdqa %xmm3, 2*16(%rsp)
- vmovdqa %xmm7, 3*16(%rsp)
- vpaddd %xmm0, %xmm7, %xmm7
- vprotd $25, %xmm0, %xmm1
- vprotd $14, %xmm0, %xmm2
- vpsrld $3, %xmm0, %xmm0
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm2, %xmm0, %xmm0
- vpaddd %xmm0, %xmm3, %xmm3
- vmovdqa %xmm3, 2*16(%rax)
- vmovdqa %xmm7, 3*16(%rax)
-
- vmovdqa 4*16(%rax), %xmm0
- vmovdqa %xmm0, 4*16(%rsp)
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vmovdqa %xmm3, 4*16(%rax)
- vmovdqa %xmm7, 5*16(%rax)
-
- vmovdqa 6*16(%rax), %xmm0
- vmovdqa 7*16(%rax), %xmm4
- vmovdqa %xmm0, 6*16(%rsp)
- vmovdqa %xmm4, 7*16(%rsp)
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 6*16(%rax)
- vmovdqa %xmm7, 7*16(%rax)
-
- vmovdqa 8*16(%rax), %xmm0
- vmovdqa 2*16(%rax), %xmm4
- vmovdqa %xmm0, 8*16(%rsp)
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 8*16(%rax)
- vmovdqa %xmm7, 9*16(%rax)
-
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 3*16(%rax), %xmm3, %xmm3
- vpaddd 4*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 10*16(%rax)
- vmovdqa %xmm7, 11*16(%rax)
-
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 5*16(%rax), %xmm3, %xmm3
- vpaddd 6*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 12*16(%rax)
- vmovdqa %xmm7, 13*16(%rax)
-
- vmovdqa 14*16(%rax), %xmm0
- vmovdqa 15*16(%rax), %xmm4
- vmovdqa %xmm0, 14*16(%rsp)
- vmovdqa %xmm4, 15*16(%rsp)
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpaddd 7*16(%rax), %xmm0, %xmm0
- vpaddd 8*16(%rax), %xmm4, %xmm4
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 14*16(%rax)
- vmovdqa %xmm7, 15*16(%rax)
-
-sha256d_ms_4way_xop_extend_loop2:
- sha256_xop_extend_doubleround 16
- sha256_xop_extend_doubleround 18
- sha256_xop_extend_doubleround 20
- sha256_xop_extend_doubleround 22
- sha256_xop_extend_doubleround 24
- sha256_xop_extend_doubleround 26
- sha256_xop_extend_doubleround 28
- sha256_xop_extend_doubleround 30
- sha256_xop_extend_doubleround 32
- sha256_xop_extend_doubleround 34
- sha256_xop_extend_doubleround 36
- sha256_xop_extend_doubleround 38
- sha256_xop_extend_doubleround 40
- sha256_xop_extend_doubleround 42
- jz sha256d_ms_4way_xop_extend_coda2
- sha256_xop_extend_doubleround 44
- sha256_xop_extend_doubleround 46
-
- movdqa 0(%rcx), %xmm7
- movdqa 16(%rcx), %xmm8
- movdqa 32(%rcx), %xmm9
- movdqa 48(%rcx), %xmm10
- movdqa 64(%rcx), %xmm0
- movdqa 80(%rcx), %xmm5
- movdqa 96(%rcx), %xmm4
- movdqa 112(%rcx), %xmm3
-
- movq %rsi, %rax
- leaq sha256_4k(%rip), %rcx
- jmp sha256d_ms_4way_xop_main_loop1
-
-sha256d_ms_4way_xop_main_loop2:
- sha256_xop_main_round 0, %xmm10, %xmm9, %xmm8, %xmm0, %xmm3, %xmm4, %xmm5, %xmm7
- sha256_xop_main_round 1, %xmm9, %xmm8, %xmm0, %xmm10, %xmm4, %xmm5, %xmm7, %xmm3
- sha256_xop_main_round 2, %xmm8, %xmm0, %xmm10, %xmm9, %xmm5, %xmm7, %xmm3, %xmm4
-sha256d_ms_4way_xop_main_loop1:
- sha256_xop_main_round 3, %xmm0, %xmm10, %xmm9, %xmm8, %xmm7, %xmm3, %xmm4, %xmm5
- sha256_xop_main_quadround 4
- sha256_xop_main_quadround 8
- sha256_xop_main_quadround 12
- sha256_xop_main_quadround 16
- sha256_xop_main_quadround 20
- sha256_xop_main_quadround 24
- sha256_xop_main_quadround 28
- sha256_xop_main_quadround 32
- sha256_xop_main_quadround 36
- sha256_xop_main_quadround 40
- sha256_xop_main_quadround 44
- sha256_xop_main_quadround 48
- sha256_xop_main_quadround 52
- sha256_xop_main_round 56, %xmm10, %xmm9, %xmm8, %xmm0, %xmm3, %xmm4, %xmm5, %xmm7
- jz sha256d_ms_4way_xop_finish
- sha256_xop_main_round 57, %xmm9, %xmm8, %xmm0, %xmm10, %xmm4, %xmm5, %xmm7, %xmm3
- sha256_xop_main_round 58, %xmm8, %xmm0, %xmm10, %xmm9, %xmm5, %xmm7, %xmm3, %xmm4
- sha256_xop_main_round 59, %xmm0, %xmm10, %xmm9, %xmm8, %xmm7, %xmm3, %xmm4, %xmm5
- sha256_xop_main_quadround 60
-
- movdqa 2*16(%rsp), %xmm1
- movdqa 3*16(%rsp), %xmm2
- movdqa 4*16(%rsp), %xmm6
- movdqa %xmm1, 18*16(%rsi)
- movdqa %xmm2, 19*16(%rsi)
- movdqa %xmm6, 20*16(%rsi)
- movdqa 6*16(%rsp), %xmm1
- movdqa 7*16(%rsp), %xmm2
- movdqa 8*16(%rsp), %xmm6
- movdqa %xmm1, 22*16(%rsi)
- movdqa %xmm2, 23*16(%rsi)
- movdqa %xmm6, 24*16(%rsi)
- movdqa 14*16(%rsp), %xmm1
- movdqa 15*16(%rsp), %xmm2
- movdqa %xmm1, 30*16(%rsi)
- movdqa %xmm2, 31*16(%rsi)
-
- paddd 0(%rdx), %xmm7
- paddd 16(%rdx), %xmm5
- paddd 32(%rdx), %xmm4
- paddd 48(%rdx), %xmm3
- paddd 64(%rdx), %xmm0
- paddd 80(%rdx), %xmm8
- paddd 96(%rdx), %xmm9
- paddd 112(%rdx), %xmm10
-
- movdqa %xmm7, 0(%rsp)
- movdqa %xmm5, 16(%rsp)
- movdqa %xmm4, 32(%rsp)
- movdqa %xmm3, 48(%rsp)
- movdqa %xmm0, 64(%rsp)
- movdqa %xmm8, 80(%rsp)
- movdqa %xmm9, 96(%rsp)
- movdqa %xmm10, 112(%rsp)
-
- pxor %xmm0, %xmm0
- movq $0x8000000000000100, %rax
- movd %rax, %xmm1
- pshufd $0x55, %xmm1, %xmm2
- pshufd $0x00, %xmm1, %xmm1
- movdqa %xmm2, 128(%rsp)
- movdqa %xmm0, 144(%rsp)
- movdqa %xmm0, 160(%rsp)
- movdqa %xmm0, 176(%rsp)
- movdqa %xmm0, 192(%rsp)
- movdqa %xmm0, 208(%rsp)
- movdqa %xmm0, 224(%rsp)
- movdqa %xmm1, 240(%rsp)
-
- leaq 256(%rsp), %rax
- cmpq %rax, %rax
-
- vmovdqa -15*16(%rax), %xmm0
- vmovdqa -14*16(%rax), %xmm4
- vprotd $25, %xmm0, %xmm1
- vprotd $25, %xmm4, %xmm5
- vprotd $14, %xmm0, %xmm2
- vprotd $14, %xmm4, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $3, %xmm0, %xmm8
- vpsrld $3, %xmm4, %xmm4
- vpxor %xmm2, %xmm8, %xmm8
- vpxor %xmm6, %xmm4, %xmm4
- vpaddd %xmm0, %xmm4, %xmm4
- vpaddd -16*16(%rax), %xmm8, %xmm3
- vpaddd sha256d_4preext2_17(%rip), %xmm4, %xmm7
- vmovdqa %xmm3, 0*16(%rax)
- vmovdqa %xmm7, 1*16(%rax)
-
- sha256_xop_extend_doubleround 2
- sha256_xop_extend_doubleround 4
-
- vmovdqa -9*16(%rax), %xmm0
- vprotd $25, %xmm0, %xmm1
- vprotd $14, %xmm0, %xmm2
- vpsrld $3, %xmm0, %xmm8
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm2, %xmm8, %xmm8
- vpaddd sha256d_4preext2_23(%rip), %xmm0, %xmm4
- vpaddd -10*16(%rax), %xmm8, %xmm0
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpaddd -1*16(%rax), %xmm0, %xmm0
- vpaddd 0*16(%rax), %xmm4, %xmm4
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 6*16(%rax)
- vmovdqa %xmm7, 7*16(%rax)
-
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd sha256d_4preext2_24(%rip), %xmm3, %xmm3
- vpaddd 1*16(%rax), %xmm3, %xmm3
- vpaddd 2*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 8*16(%rax)
- vmovdqa %xmm7, 9*16(%rax)
-
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 3*16(%rax), %xmm3, %xmm3
- vpaddd 4*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 10*16(%rax)
- vmovdqa %xmm7, 11*16(%rax)
-
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd 5*16(%rax), %xmm3, %xmm3
- vpaddd 6*16(%rax), %xmm7, %xmm7
- vmovdqa %xmm3, 12*16(%rax)
- vmovdqa %xmm7, 13*16(%rax)
-
- vmovdqa sha256d_4preext2_30(%rip), %xmm0
- vmovdqa 0*16(%rax), %xmm4
- vprotd $25, %xmm4, %xmm5
- vprotd $14, %xmm4, %xmm6
- vpxor %xmm5, %xmm6, %xmm6
- vpsrld $3, %xmm4, %xmm4
- vpxor %xmm6, %xmm4, %xmm4
- vpaddd -1*16(%rax), %xmm4, %xmm4
- vprotd $15, %xmm3, %xmm1
- vprotd $15, %xmm7, %xmm5
- vprotd $13, %xmm3, %xmm2
- vprotd $13, %xmm7, %xmm6
- vpxor %xmm1, %xmm2, %xmm2
- vpxor %xmm5, %xmm6, %xmm6
- vpaddd 7*16(%rax), %xmm0, %xmm0
- vpaddd 8*16(%rax), %xmm4, %xmm4
- vpsrld $10, %xmm3, %xmm3
- vpsrld $10, %xmm7, %xmm7
- vpxor %xmm2, %xmm3, %xmm3
- vpxor %xmm6, %xmm7, %xmm7
- vpaddd %xmm0, %xmm3, %xmm3
- vpaddd %xmm4, %xmm7, %xmm7
- vmovdqa %xmm3, 14*16(%rax)
- vmovdqa %xmm7, 15*16(%rax)
-
- jmp sha256d_ms_4way_xop_extend_loop2
-
-sha256d_ms_4way_xop_extend_coda2:
- sha256_xop_extend_round 44
-
- movdqa sha256_4h+0(%rip), %xmm7
- movdqa sha256_4h+16(%rip), %xmm5
- movdqa sha256_4h+32(%rip), %xmm4
- movdqa sha256_4h+48(%rip), %xmm3
- movdqa sha256_4h+64(%rip), %xmm0
- movdqa sha256_4h+80(%rip), %xmm8
- movdqa sha256_4h+96(%rip), %xmm9
- movdqa sha256_4h+112(%rip), %xmm10
-
- movq %rsp, %rax
- leaq sha256_4k(%rip), %rcx
- jmp sha256d_ms_4way_xop_main_loop2
-
.macro sha256_xop_main_round_red i, r0, r1, r2, r3, r4
vpaddd 16*\i(%rax), \r0, %xmm6
vpaddd 16*\i(%rcx), %xmm6, %xmm6
vpaddd \r0, %xmm6, %xmm6
vpaddd %xmm6, \r4, \r0
.endm
-
-sha256d_ms_4way_xop_finish:
- sha256_xop_main_round_red 57, %xmm9, %xmm8, %xmm0, %xmm10, %xmm4
- sha256_xop_main_round_red 58, %xmm8, %xmm0, %xmm10, %xmm9, %xmm5
- sha256_xop_main_round_red 59, %xmm0, %xmm10, %xmm9, %xmm8, %xmm7
- sha256_xop_main_round_red 60, %xmm10, %xmm9, %xmm8, %xmm0, %xmm3
-
- paddd sha256_4h+112(%rip), %xmm10
- movdqa %xmm10, 112(%rdi)
-
- addq $1032, %rsp
-#if defined(_WIN64) || defined(__CYGWIN__)
- popq %rsi
- movdqa 0(%rsp), %xmm6
- movdqa 16(%rsp), %xmm7
- movdqa 32(%rsp), %xmm8
- movdqa 48(%rsp), %xmm9
- movdqa 64(%rsp), %xmm10
- addq $80, %rsp
- popq %rdi
-#endif
- ret
.text
.p2align 6
jz sha256_use_4way_avx
sha256_use_4way_xop:
- leaq sha256d_ms_4way_xop(%rip), %rcx
leaq sha256_transform_4way_core_xop(%rip), %rdx
jmp sha256_use_4way_done
sha256_use_4way_avx:
- leaq sha256d_ms_4way_avx(%rip), %rcx
leaq sha256_transform_4way_core_avx(%rip), %rdx
jmp sha256_use_4way_done
sha256_use_4way_base:
- leaq sha256d_ms_4way_sse2(%rip), %rcx
leaq sha256_transform_4way_core_sse2(%rip), %rdx
sha256_use_4way_done:
- movq %rcx, sha256d_ms_4way_addr(%rip)
movq %rdx, sha256_transform_4way_core_addr(%rip)
movl $1, %eax
sha256_use_4way_exit:
ret
#endif
- .text
- .p2align 6
- .globl sha256d_ms_8way
- .globl _sha256d_ms_8way
-sha256d_ms_8way:
-_sha256d_ms_8way:
-sha256d_ms_8way_avx2:
-#if defined(_WIN64) || defined(__CYGWIN__)
- pushq %rdi
- subq $80, %rsp
- vmovdqa %xmm6, 0(%rsp)
- vmovdqa %xmm7, 16(%rsp)
- vmovdqa %xmm8, 32(%rsp)
- vmovdqa %xmm9, 48(%rsp)
- vmovdqa %xmm10, 64(%rsp)
- pushq %rsi
- movq %rcx, %rdi
- movq %rdx, %rsi
- movq %r8, %rdx
- movq %r9, %rcx
-#endif
- pushq %rbp
- movq %rsp, %rbp
- subq $64*32, %rsp
- andq $-128, %rsp
-
- leaq 16*32(%rsi), %rax
-
-sha256d_ms_8way_avx2_extend_loop1:
- vmovdqa 3*32(%rsi), %ymm0
- vmovdqa 2*32(%rax), %ymm3
- vmovdqa 3*32(%rax), %ymm7
- vmovdqa %ymm3, 2*32(%rsp)
- vmovdqa %ymm7, 3*32(%rsp)
- vpaddd %ymm0, %ymm7, %ymm7
- vpslld $14, %ymm0, %ymm2
- vpsrld $3, %ymm0, %ymm0
- vpsrld $4, %ymm0, %ymm1
- vpxor %ymm1, %ymm0, %ymm0
- vpxor %ymm2, %ymm0, %ymm0
- vpsrld $11, %ymm1, %ymm1
- vpslld $11, %ymm2, %ymm2
- vpxor %ymm1, %ymm0, %ymm0
- vpxor %ymm2, %ymm0, %ymm0
- vpaddd %ymm0, %ymm3, %ymm3
- vmovdqa %ymm3, 2*32(%rax)
- vmovdqa %ymm7, 3*32(%rax)
-
- vmovdqa 4*32(%rax), %ymm0
- vmovdqa %ymm0, 4*32(%rsp)
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd %ymm0, %ymm3, %ymm3
- vmovdqa %ymm3, 4*32(%rax)
- vmovdqa %ymm7, 5*32(%rax)
-
- vmovdqa 6*32(%rax), %ymm0
- vmovdqa 7*32(%rax), %ymm4
- vmovdqa %ymm0, 6*32(%rsp)
- vmovdqa %ymm4, 7*32(%rsp)
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd %ymm0, %ymm3, %ymm3
- vpaddd %ymm4, %ymm7, %ymm7
- vmovdqa %ymm3, 6*32(%rax)
- vmovdqa %ymm7, 7*32(%rax)
-
- vmovdqa 8*32(%rax), %ymm0
- vmovdqa 2*32(%rax), %ymm4
- vmovdqa %ymm0, 8*32(%rsp)
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd %ymm0, %ymm3, %ymm3
- vpaddd %ymm4, %ymm7, %ymm7
- vmovdqa %ymm3, 8*32(%rax)
- vmovdqa %ymm7, 9*32(%rax)
-
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd 3*32(%rax), %ymm3, %ymm3
- vpaddd 4*32(%rax), %ymm7, %ymm7
- vmovdqa %ymm3, 10*32(%rax)
- vmovdqa %ymm7, 11*32(%rax)
-
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd 5*32(%rax), %ymm3, %ymm3
- vpaddd 6*32(%rax), %ymm7, %ymm7
- vmovdqa %ymm3, 12*32(%rax)
- vmovdqa %ymm7, 13*32(%rax)
-
- vmovdqa 14*32(%rax), %ymm0
- vmovdqa 15*32(%rax), %ymm4
- vmovdqa %ymm0, 14*32(%rsp)
- vmovdqa %ymm4, 15*32(%rsp)
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpaddd 7*32(%rax), %ymm0, %ymm0
- vpaddd 8*32(%rax), %ymm4, %ymm4
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd %ymm0, %ymm3, %ymm3
- vpaddd %ymm4, %ymm7, %ymm7
- vmovdqa %ymm3, 14*32(%rax)
- vmovdqa %ymm7, 15*32(%rax)
-
-sha256d_ms_8way_avx2_extend_loop2:
- sha256_avx2_extend_doubleround 16
- sha256_avx2_extend_doubleround 18
- sha256_avx2_extend_doubleround 20
- sha256_avx2_extend_doubleround 22
- sha256_avx2_extend_doubleround 24
- sha256_avx2_extend_doubleround 26
- sha256_avx2_extend_doubleround 28
- sha256_avx2_extend_doubleround 30
- sha256_avx2_extend_doubleround 32
- sha256_avx2_extend_doubleround 34
- sha256_avx2_extend_doubleround 36
- sha256_avx2_extend_doubleround 38
- sha256_avx2_extend_doubleround 40
- sha256_avx2_extend_doubleround 42
- jz sha256d_ms_8way_avx2_extend_coda2
- sha256_avx2_extend_doubleround 44
- sha256_avx2_extend_doubleround 46
-
- vmovdqa 0(%rcx), %ymm7
- vmovdqa 32(%rcx), %ymm8
- vmovdqa 64(%rcx), %ymm9
- vmovdqa 96(%rcx), %ymm10
- vmovdqa 128(%rcx), %ymm0
- vmovdqa 160(%rcx), %ymm5
- vmovdqa 192(%rcx), %ymm4
- vmovdqa 224(%rcx), %ymm3
-
- movq %rsi, %rax
- leaq sha256_8k(%rip), %rcx
- jmp sha256d_ms_8way_avx2_main_loop1
-
-sha256d_ms_8way_avx2_main_loop2:
- sha256_avx2_main_round 0, %ymm10, %ymm9, %ymm8, %ymm0, %ymm3, %ymm4, %ymm5, %ymm7
- sha256_avx2_main_round 1, %ymm9, %ymm8, %ymm0, %ymm10, %ymm4, %ymm5, %ymm7, %ymm3
- sha256_avx2_main_round 2, %ymm8, %ymm0, %ymm10, %ymm9, %ymm5, %ymm7, %ymm3, %ymm4
-sha256d_ms_8way_avx2_main_loop1:
- sha256_avx2_main_round 3, %ymm0, %ymm10, %ymm9, %ymm8, %ymm7, %ymm3, %ymm4, %ymm5
- sha256_avx2_main_quadround 4
- sha256_avx2_main_quadround 8
- sha256_avx2_main_quadround 12
- sha256_avx2_main_quadround 16
- sha256_avx2_main_quadround 20
- sha256_avx2_main_quadround 24
- sha256_avx2_main_quadround 28
- sha256_avx2_main_quadround 32
- sha256_avx2_main_quadround 36
- sha256_avx2_main_quadround 40
- sha256_avx2_main_quadround 44
- sha256_avx2_main_quadround 48
- sha256_avx2_main_quadround 52
- sha256_avx2_main_round 56, %ymm10, %ymm9, %ymm8, %ymm0, %ymm3, %ymm4, %ymm5, %ymm7
- jz sha256d_ms_8way_avx2_finish
- sha256_avx2_main_round 57, %ymm9, %ymm8, %ymm0, %ymm10, %ymm4, %ymm5, %ymm7, %ymm3
- sha256_avx2_main_round 58, %ymm8, %ymm0, %ymm10, %ymm9, %ymm5, %ymm7, %ymm3, %ymm4
- sha256_avx2_main_round 59, %ymm0, %ymm10, %ymm9, %ymm8, %ymm7, %ymm3, %ymm4, %ymm5
- sha256_avx2_main_quadround 60
-
- vmovdqa 2*32(%rsp), %ymm1
- vmovdqa 3*32(%rsp), %ymm2
- vmovdqa 4*32(%rsp), %ymm6
- vmovdqa %ymm1, 18*32(%rsi)
- vmovdqa %ymm2, 19*32(%rsi)
- vmovdqa %ymm6, 20*32(%rsi)
- vmovdqa 6*32(%rsp), %ymm1
- vmovdqa 7*32(%rsp), %ymm2
- vmovdqa 8*32(%rsp), %ymm6
- vmovdqa %ymm1, 22*32(%rsi)
- vmovdqa %ymm2, 23*32(%rsi)
- vmovdqa %ymm6, 24*32(%rsi)
- vmovdqa 14*32(%rsp), %ymm1
- vmovdqa 15*32(%rsp), %ymm2
- vmovdqa %ymm1, 30*32(%rsi)
- vmovdqa %ymm2, 31*32(%rsi)
-
- vpaddd 0(%rdx), %ymm7, %ymm7
- vpaddd 32(%rdx), %ymm5, %ymm5
- vpaddd 64(%rdx), %ymm4, %ymm4
- vpaddd 96(%rdx), %ymm3, %ymm3
- vpaddd 128(%rdx), %ymm0, %ymm0
- vpaddd 160(%rdx), %ymm8, %ymm8
- vpaddd 192(%rdx), %ymm9, %ymm9
- vpaddd 224(%rdx), %ymm10, %ymm10
-
- vmovdqa %ymm7, 0(%rsp)
- vmovdqa %ymm5, 32(%rsp)
- vmovdqa %ymm4, 64(%rsp)
- vmovdqa %ymm3, 96(%rsp)
- vmovdqa %ymm0, 128(%rsp)
- vmovdqa %ymm8, 160(%rsp)
- vmovdqa %ymm9, 192(%rsp)
- vmovdqa %ymm10, 224(%rsp)
-
- vpxor %ymm0, %ymm0, %ymm0
- movq $0x8000000000000100, %rax
- vmovd %rax, %xmm1
- vinserti128 $1, %xmm1, %ymm1, %ymm1
- vpshufd $0x55, %ymm1, %ymm2
- vpshufd $0x00, %ymm1, %ymm1
- vmovdqa %ymm2, 8*32(%rsp)
- vmovdqa %ymm0, 9*32(%rsp)
- vmovdqa %ymm0, 10*32(%rsp)
- vmovdqa %ymm0, 11*32(%rsp)
- vmovdqa %ymm0, 12*32(%rsp)
- vmovdqa %ymm0, 13*32(%rsp)
- vmovdqa %ymm0, 14*32(%rsp)
- vmovdqa %ymm1, 15*32(%rsp)
-
- leaq 16*32(%rsp), %rax
- cmpq %rax, %rax
-
- vmovdqa -15*32(%rax), %ymm0
- vmovdqa -14*32(%rax), %ymm4
- vpslld $14, %ymm0, %ymm2
- vpslld $14, %ymm4, %ymm6
- vpsrld $3, %ymm0, %ymm8
- vpsrld $3, %ymm4, %ymm4
- vpsrld $7, %ymm0, %ymm1
- vpsrld $4, %ymm4, %ymm5
- vpxor %ymm1, %ymm8, %ymm8
- vpxor %ymm5, %ymm4, %ymm4
- vpsrld $11, %ymm1, %ymm1
- vpsrld $11, %ymm5, %ymm5
- vpxor %ymm2, %ymm8, %ymm8
- vpxor %ymm6, %ymm4, %ymm4
- vpslld $11, %ymm2, %ymm2
- vpslld $11, %ymm6, %ymm6
- vpxor %ymm1, %ymm8, %ymm8
- vpxor %ymm5, %ymm4, %ymm4
- vpxor %ymm2, %ymm8, %ymm8
- vpxor %ymm6, %ymm4, %ymm4
- vpaddd %ymm0, %ymm4, %ymm4
- vpaddd -16*32(%rax), %ymm8, %ymm3
- vpaddd sha256d_8preext2_17(%rip), %ymm4, %ymm7
- vmovdqa %ymm3, 0*32(%rax)
- vmovdqa %ymm7, 1*32(%rax)
-
- sha256_avx2_extend_doubleround 2
- sha256_avx2_extend_doubleround 4
-
- vmovdqa -9*32(%rax), %ymm0
- vpslld $14, %ymm0, %ymm2
- vpsrld $3, %ymm0, %ymm8
- vpsrld $7, %ymm0, %ymm1
- vpxor %ymm1, %ymm8, %ymm8
- vpxor %ymm2, %ymm8, %ymm8
- vpsrld $11, %ymm1, %ymm1
- vpslld $11, %ymm2, %ymm2
- vpxor %ymm1, %ymm8, %ymm8
- vpxor %ymm2, %ymm8, %ymm8
- vpaddd sha256d_8preext2_23(%rip), %ymm0, %ymm4
- vpaddd -10*32(%rax), %ymm8, %ymm0
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpaddd -1*32(%rax), %ymm0, %ymm0
- vpaddd 0*32(%rax), %ymm4, %ymm4
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd %ymm0, %ymm3, %ymm3
- vpaddd %ymm4, %ymm7, %ymm7
- vmovdqa %ymm3, 6*32(%rax)
- vmovdqa %ymm7, 7*32(%rax)
-
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd sha256d_8preext2_24(%rip), %ymm3, %ymm3
- vpaddd 1*32(%rax), %ymm3, %ymm3
- vpaddd 2*32(%rax), %ymm7, %ymm7
- vmovdqa %ymm3, 8*32(%rax)
- vmovdqa %ymm7, 9*32(%rax)
-
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd 3*32(%rax), %ymm3, %ymm3
- vpaddd 4*32(%rax), %ymm7, %ymm7
- vmovdqa %ymm3, 10*32(%rax)
- vmovdqa %ymm7, 11*32(%rax)
-
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd 5*32(%rax), %ymm3, %ymm3
- vpaddd 6*32(%rax), %ymm7, %ymm7
- vmovdqa %ymm3, 12*32(%rax)
- vmovdqa %ymm7, 13*32(%rax)
-
- vmovdqa sha256d_8preext2_30(%rip), %ymm0
- vmovdqa 0*32(%rax), %ymm4
- vpslld $14, %ymm4, %ymm6
- vpsrld $3, %ymm4, %ymm4
- vpsrld $4, %ymm4, %ymm5
- vpxor %ymm5, %ymm4, %ymm4
- vpxor %ymm6, %ymm4, %ymm4
- vpsrld $11, %ymm5, %ymm5
- vpslld $11, %ymm6, %ymm6
- vpxor %ymm5, %ymm4, %ymm4
- vpxor %ymm6, %ymm4, %ymm4
- vpaddd -1*32(%rax), %ymm4, %ymm4
- vpslld $13, %ymm3, %ymm2
- vpslld $13, %ymm7, %ymm6
- vpsrld $10, %ymm3, %ymm3
- vpsrld $10, %ymm7, %ymm7
- vpaddd 7*32(%rax), %ymm0, %ymm0
- vpaddd 8*32(%rax), %ymm4, %ymm4
- vpsrld $7, %ymm3, %ymm1
- vpsrld $7, %ymm7, %ymm5
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpsrld $2, %ymm1, %ymm1
- vpsrld $2, %ymm5, %ymm5
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpslld $2, %ymm2, %ymm2
- vpslld $2, %ymm6, %ymm6
- vpxor %ymm1, %ymm3, %ymm3
- vpxor %ymm5, %ymm7, %ymm7
- vpxor %ymm2, %ymm3, %ymm3
- vpxor %ymm6, %ymm7, %ymm7
- vpaddd %ymm0, %ymm3, %ymm3
- vpaddd %ymm4, %ymm7, %ymm7
- vmovdqa %ymm3, 14*32(%rax)
- vmovdqa %ymm7, 15*32(%rax)
-
- jmp sha256d_ms_8way_avx2_extend_loop2
-
-sha256d_ms_8way_avx2_extend_coda2:
- sha256_avx2_extend_round 44
-
- vmovdqa sha256_8h+0(%rip), %ymm7
- vmovdqa sha256_8h+32(%rip), %ymm5
- vmovdqa sha256_8h+64(%rip), %ymm4
- vmovdqa sha256_8h+96(%rip), %ymm3
- vmovdqa sha256_8h+128(%rip), %ymm0
- vmovdqa sha256_8h+160(%rip), %ymm8
- vmovdqa sha256_8h+192(%rip), %ymm9
- vmovdqa sha256_8h+224(%rip), %ymm10
-
- movq %rsp, %rax
- leaq sha256_8k(%rip), %rcx
- jmp sha256d_ms_8way_avx2_main_loop2
-
.macro sha256_avx2_main_round_red i, r0, r1, r2, r3, r4
vpaddd 32*\i(%rax), \r0, %ymm6
vpaddd 32*\i(%rcx), %ymm6, %ymm6
vpaddd %ymm6, \r4, \r0
.endm
-sha256d_ms_8way_avx2_finish:
- sha256_avx2_main_round_red 57, %ymm9, %ymm8, %ymm0, %ymm10, %ymm4
- sha256_avx2_main_round_red 58, %ymm8, %ymm0, %ymm10, %ymm9, %ymm5
- sha256_avx2_main_round_red 59, %ymm0, %ymm10, %ymm9, %ymm8, %ymm7
- sha256_avx2_main_round_red 60, %ymm10, %ymm9, %ymm8, %ymm0, %ymm3
-
- vpaddd sha256_8h+224(%rip), %ymm10, %ymm10
- vmovdqa %ymm10, 224(%rdi)
-
- movq %rbp, %rsp
- popq %rbp
-#if defined(_WIN64) || defined(__CYGWIN__)
- popq %rsi
- vmovdqa 0(%rsp), %xmm6
- vmovdqa 16(%rsp), %xmm7
- vmovdqa 32(%rsp), %xmm8
- vmovdqa 48(%rsp), %xmm9
- vmovdqa 64(%rsp), %xmm10
- addq $80, %rsp
- popq %rdi
-#endif
- ret
-
-
.text
.p2align 6
.globl sha256_use_8way