Remove sha256d implementation.
authorCryptoManiac <balthazar@yandex.ru>
Tue, 13 Oct 2015 19:06:33 +0000 (22:06 +0300)
committerCryptoManiac <balthazar@yandex.ru>
Tue, 13 Oct 2015 19:06:33 +0000 (22:06 +0300)
src/crypto/sha2/asm/sha2-x86_64.S

index 6554ef0..f9cd45f 100644 (file)
@@ -489,74 +489,6 @@ _sha256_transform:
     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:
@@ -638,17 +570,6 @@ sha256_4k:
     .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
@@ -728,17 +649,6 @@ sha256_8k:
     .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
@@ -1925,577 +1835,6 @@ sha256_transform_8way_finish:
     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
@@ -2527,519 +1866,6 @@ sha256d_ms_4way_sse2_extend_coda2:
     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
@@ -3062,413 +1888,6 @@ sha256d_ms_4way_avx_extend_coda2:
     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
@@ -3484,28 +1903,6 @@ sha256d_ms_4way_xop_extend_coda2:
     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
@@ -3551,21 +1948,17 @@ sha256_use_4way_no_phe:
     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:
@@ -3601,508 +1994,6 @@ sha256_use_ssse3_done:
     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
@@ -4125,30 +2016,6 @@ sha256d_ms_8way_avx2_extend_coda2:
     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