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

index c89b6d5..eb10dd9 100644 (file)
@@ -227,371 +227,6 @@ sha256_transform_k_over:
        ldmfd   sp!, {r4-r11, pc}
 #endif
 
-
-       .text
-       .code 32
-       .align 2
-       .globl sha256d_ms
-       .globl _sha256d_ms
-#ifdef __ELF__
-       .type sha256d_ms, %function
-#endif
-sha256d_ms:
-_sha256d_ms:
-       stmfd   sp!, {r4-r11, lr}
-       sub     sp, sp, #64*4
-       
-       cmp     r0, r0
-       
-       ldr     lr, [r1, #3*4]
-       ldr     r6, [r1, #18*4]
-       ldr     r7, [r1, #19*4]
-       
-       mov     r12, lr, ror #7
-       str     r6, [sp, #18*4]
-       eor     r12, r12, lr, ror #18
-       str     r7, [sp, #19*4]
-       eor     r12, r12, lr, lsr #3
-       ldr     r8, [r1, #20*4]
-       add     r6, r6, r12
-       ldr     r10, [r1, #22*4]
-       add     r7, r7, lr
-       str     r6, [r1, #18*4]
-       
-       mov     r12, r6, ror #17
-       str     r7, [r1, #19*4]
-       eor     r12, r12, r6, ror #19
-       str     r8, [sp, #20*4]
-       eor     r12, r12, r6, lsr #10
-       ldr     r4, [r1, #23*4]
-       add     r8, r8, r12
-       ldr     r5, [r1, #24*4]
-       
-       mov     r9, r7, ror #17
-       str     r8, [r1, #20*4]
-       eor     r9, r9, r7, ror #19
-       str     r10, [sp, #21*4]
-       eor     r9, r9, r7, lsr #10
-       str     r4, [sp, #22*4]
-       
-       mov     r12, r8, ror #17
-       str     r9, [r1, #21*4]
-       eor     r12, r12, r8, ror #19
-       str     r5, [sp, #23*4]
-       eor     r12, r12, r8, lsr #10
-       mov     lr, r9, ror #17
-       add     r10, r10, r12
-       ldr     r11, [r1, #30*4]
-       
-       eor     lr, lr, r9, ror #19
-       str     r10, [r1, #22*4]
-       eor     lr, lr, r9, lsr #10
-       str     r11, [sp, #24*4]
-       add     r4, r4, lr
-       
-       mov     r12, r10, ror #17
-       str     r4, [r1, #23*4]
-       eor     r12, r12, r10, ror #19
-       mov     lr, r4, ror #17
-       eor     r12, r12, r10, lsr #10
-       eor     lr, lr, r4, ror #19
-       add     r5, r5, r12
-       eor     lr, lr, r4, lsr #10
-       str     r5, [r1, #24*4]
-       add     r6, r6, lr
-       
-       mov     r12, r5, ror #17
-       str     r6, [r1, #25*4]
-       eor     r12, r12, r5, ror #19
-       mov     lr, r6, ror #17
-       eor     r12, r12, r5, lsr #10
-       eor     lr, lr, r6, ror #19
-       add     r7, r7, r12
-       eor     lr, lr, r6, lsr #10
-       str     r7, [r1, #26*4]
-       add     r8, r8, lr
-       
-       mov     r12, r7, ror #17
-       str     r8, [r1, #27*4]
-       eor     r12, r12, r7, ror #19
-       mov     lr, r8, ror #17
-       eor     r12, r12, r7, lsr #10
-       eor     lr, lr, r8, ror #19
-       add     r9, r9, r12
-       eor     lr, lr, r8, lsr #10
-       str     r9, [r1, #28*4]
-       add     r10, r10, lr
-       
-       ldr     lr, [r1, #31*4]
-       mov     r12, r9, ror #17
-       str     r10, [r1, #29*4]
-       eor     r12, r12, r9, ror #19
-       str     lr, [sp, #25*4]
-       eor     r12, r12, r9, lsr #10
-       add     r11, r11, r12
-       add     r5, r5, lr
-       mov     r12, r10, ror #17
-       add     r4, r4, r11
-       
-       ldr     r11, [r1, #16*4]
-       eor     r12, r12, r10, ror #19
-       str     r4, [r1, #30*4]
-       eor     r12, r12, r10, lsr #10
-       add     r5, r5, r12
-       ldr     lr, [r1, #17*4]
-       
-sha256d_ms_extend_loop2:
-       sha256_extend_doubleround_body 16, r1, r6, r7, r4, r5
-       sha256_extend_doubleround_body 18, r1, r8, r9, r6, r7
-       sha256_extend_doubleround_body 20, r1, r10, r4, r8, r9
-       sha256_extend_doubleround_body 22, r1, r5, r6, r10, r4
-       sha256_extend_doubleround_body 24, r1, r7, r8, r5, r6
-       sha256_extend_doubleround_body 26, r1, r9, r10, r7, r8
-       sha256_extend_doubleround_body 28, r1, r4, r5, r9, r10
-       sha256_extend_doubleround_body 30, r1, r6, r7, r4, r5
-       sha256_extend_doubleround_body 32, r1, r8, r9, r6, r7
-       sha256_extend_doubleround_body 34, r1, r10, r4, r8, r9
-       sha256_extend_doubleround_body 36, r1, r5, r6, r10, r4
-       sha256_extend_doubleround_body 38, r1, r7, r8, r5, r6
-       sha256_extend_doubleround_body 40, r1, r9, r10, r7, r8
-       sha256_extend_doubleround_body 42, r1, r4, r5, r9, r10
-       bne     sha256d_ms_extend_coda2
-       sha256_extend_doubleround_body 44, r1, r6, r7, r4, r5
-       sha256_extend_doubleround_foot 46, r1, r8, r9, r6, r7
-       
-       ldr     r4,  [r3, #0*4]
-       ldr     r9,  [r3, #1*4]
-       ldr     r10, [r3, #2*4]
-       ldr     r11, [r3, #3*4]
-       ldr     r8,  [r3, #4*4]
-       ldr     r5,  [r3, #5*4]
-       ldr     r6,  [r3, #6*4]
-       ldr     r7,  [r3, #7*4]
-       b       sha256d_ms_main_loop1
-       
-sha256d_ms_main_loop2:
-       sha256_main_round  0, sha256d_ms_k, r1, r4, r5, r6, r7, r8, r9, r10, r11
-       sha256_main_round  1, sha256d_ms_k, r1, r7, r4, r5, r6, r11, r8, r9, r10
-       sha256_main_round  2, sha256d_ms_k, r1, r6, r7, r4, r5, r10, r11, r8, r9
-sha256d_ms_main_loop1:
-       sha256_main_round  3, sha256d_ms_k, r1, r5, r6, r7, r4, r9, r10, r11, r8
-       sha256_main_quadround  4, sha256d_ms_k, r1
-       sha256_main_quadround  8, sha256d_ms_k, r1
-       sha256_main_quadround 12, sha256d_ms_k, r1
-       sha256_main_quadround 16, sha256d_ms_k, r1
-       sha256_main_quadround 20, sha256d_ms_k, r1
-       sha256_main_quadround 24, sha256d_ms_k, r1
-       sha256_main_quadround 28, sha256d_ms_k, r1
-       b       sha256d_ms_k_over
-sha256d_ms_k:
-       sha256_k
-sha256d_ms_k_over:
-       sha256_main_quadround 32, sha256d_ms_k, r1
-       sha256_main_quadround 36, sha256d_ms_k, r1
-       sha256_main_quadround 40, sha256d_ms_k, r1
-       sha256_main_quadround 44, sha256d_ms_k, r1
-       sha256_main_quadround 48, sha256d_ms_k, r1
-       sha256_main_quadround 52, sha256d_ms_k, r1
-       sha256_main_round 56, sha256d_ms_k, r1, r4, r5, r6, r7, r8, r9, r10, r11
-       bne     sha256d_ms_finish
-       sha256_main_round 57, sha256d_ms_k, r1, r7, r4, r5, r6, r11, r8, r9, r10
-       sha256_main_round 58, sha256d_ms_k, r1, r6, r7, r4, r5, r10, r11, r8, r9
-       sha256_main_round 59, sha256d_ms_k, r1, r5, r6, r7, r4, r9, r10, r11, r8
-       sha256_main_quadround 60, sha256d_ms_k, r1
-       
-       ldmia   r2!, {r3, r12, lr}
-       add     r4, r4, r3
-       add     r5, r5, r12
-       add     r6, r6, lr
-       stmia   sp, {r4-r6}
-       ldmia   r2, {r3, r4, r5, r6, r12}
-       add     lr, sp, #3*4
-       add     r7, r7, r3
-       add     r8, r8, r4
-       add     r9, r9, r5
-       add     r10, r10, r6
-       add     r11, r11, r12
-       add     r12, sp, #18*4
-       stmia   lr!, {r7-r11}
-       
-       ldmia   r12, {r4-r11}
-       str     r4,  [r1, #18*4]
-       str     r5,  [r1, #19*4]
-       str     r6,  [r1, #20*4]
-       str     r7,  [r1, #22*4]
-       str     r8,  [r1, #23*4]
-       str     r9,  [r1, #24*4]
-       str     r10, [r1, #30*4]
-       str     r11, [r1, #31*4]
-       
-       mov     r3,  #0x80000000
-       mov     r4,  #0
-       mov     r5,  #0
-       mov     r6,  #0
-       mov     r7,  #0
-       mov     r8,  #0
-       mov     r9,  #0
-       mov     r10, #0x00000100
-       stmia   lr, {r3-r10}
-       
-       ldr     lr, [sp, #1*4]
-       movs    r1, sp
-       ldr     r4, [sp, #0*4]
-       
-       ldr     r11, [sp, #2*4]
-       mov     r12, lr, ror #7
-       eor     r12, r12, lr, ror #18
-       add     r5, lr, #0x00a00000
-       eor     r12, r12, lr, lsr #3
-       mov     lr, r11, ror #7
-       add     r4, r4, r12
-       eor     lr, lr, r11, ror #18
-       str     r4, [sp, #16*4]
-       eor     lr, lr, r11, lsr #3
-       mov     r12, r4, ror #17
-       add     r5, r5, lr
-       ldr     lr, [sp, #3*4]
-       
-       str     r5, [sp, #17*4]
-       eor     r12, r12, r4, ror #19
-       mov     r6, lr, ror #7
-       eor     r12, r12, r4, lsr #10
-       eor     r6, r6, lr, ror #18
-       add     r11, r11, r12
-       eor     r6, r6, lr, lsr #3
-       mov     r12, r5, ror #17
-       add     r6, r6, r11
-       ldr     r11, [sp, #4*4]
-       
-       str     r6, [sp, #18*4]
-       eor     r12, r12, r5, ror #19
-       mov     r7, r11, ror #7
-       eor     r12, r12, r5, lsr #10
-       eor     r7, r7, r11, ror #18
-       add     lr, lr, r12
-       eor     r7, r7, r11, lsr #3
-       mov     r12, r6, ror #17
-       add     r7, r7, lr
-       ldr     lr, [sp, #5*4]
-       
-       str     r7, [sp, #19*4]
-       eor     r12, r12, r6, ror #19
-       mov     r8, lr, ror #7
-       eor     r12, r12, r6, lsr #10
-       eor     r8, r8, lr, ror #18
-       add     r11, r11, r12
-       eor     r8, r8, lr, lsr #3
-       mov     r12, r7, ror #17
-       add     r8, r8, r11
-       ldr     r11, [sp, #6*4]
-       
-       str     r8, [sp, #20*4]
-       eor     r12, r12, r7, ror #19
-       mov     r9, r11, ror #7
-       eor     r12, r12, r7, lsr #10
-       eor     r9, r9, r11, ror #18
-       add     lr, lr, r12
-       eor     r9, r9, r11, lsr #3
-       mov     r12, r8, ror #17
-       add     r9, r9, lr
-       ldr     lr, [sp, #7*4]
-       
-       str     r9, [sp, #21*4]
-       eor     r12, r12, r8, ror #19
-       mov     r10, lr, ror #7
-       eor     r12, r12, r8, lsr #10
-       eor     r10, r10, lr, ror #18
-       add     r11, r11, r12
-       eor     r10, r10, lr, lsr #3
-       mov     r12, r9, ror #17
-       add     r11, r11, #0x00000100
-       add     lr, lr, r4
-       add     r10, r10, r11
-       
-       eor     r12, r12, r9, ror #19
-       str     r10, [sp, #22*4]
-       add     lr, lr, #0x11000000
-       eor     r12, r12, r9, lsr #10
-       add     lr, lr, r12
-       mov     r12, r10, ror #17
-       add     r4, lr, #0x00002000
-       eor     r12, r12, r10, ror #19
-       str     r4, [sp, #23*4]
-       add     r5, r5, #0x80000000
-       eor     r12, r12, r10, lsr #10
-       add     r5, r5, r12
-
-       mov     r12, r4, ror #17
-       str     r5, [sp, #24*4]
-       eor     r12, r12, r4, ror #19
-       mov     r11, r5, ror #17
-       eor     r12, r12, r4, lsr #10
-       eor     r11, r11, r5, ror #19
-       add     r6, r6, r12
-       eor     r11, r11, r5, lsr #10
-       str     r6, [sp, #25*4]
-       add     r7, r7, r11
-       
-       mov     r12, r6, ror #17
-       str     r7, [sp, #26*4]
-       eor     r12, r12, r6, ror #19
-       mov     r11, r7, ror #17
-       eor     r12, r12, r6, lsr #10
-       eor     r11, r11, r7, ror #19
-       add     r8, r8, r12
-       eor     r11, r11, r7, lsr #10
-       str     r8, [sp, #27*4]
-       add     r9, r9, r11
-       
-       mov     lr, r8, ror #17
-       mov     r12, r9, ror #17
-       str     r9, [sp, #28*4]
-       add     r4, r4, #0x00400000
-       eor     lr, lr, r8, ror #19
-       eor     r12, r12, r9, ror #19
-       eor     lr, lr, r8, lsr #10
-       eor     r12, r12, r9, lsr #10
-       add     r4, r4, #0x00000022
-       add     r10, r10, lr
-       add     r4, r4, r12
-       ldr     r11, [sp, #16*4]
-       
-       add     r5, r5, #0x00000100
-       str     r4, [sp, #30*4]
-       mov     lr, r11, ror #7
-       str     r10, [sp, #29*4]
-       mov     r12, r10, ror #17
-       eor     lr, lr, r11, ror #18
-       eor     r12, r12, r10, ror #19
-       eor     lr, lr, r11, lsr #3
-       eor     r12, r12, r10, lsr #10
-       add     r5, r5, lr
-       ldr     lr, [r1, #17*4]
-       add     r5, r5, r12
-       
-       b       sha256d_ms_extend_loop2
-       
-sha256d_ms_extend_coda2:
-       str     r5, [r1, #(44+15)*4]
-       mov     r12, r4, ror #17
-       add     r11, r11, r6
-       mov     r6, lr, ror #7
-       eor     r12, r12, r4, ror #19
-       eor     r6, r6, lr, ror #18
-       eor     r12, r12, r4, lsr #10
-       eor     r6, r6, lr, lsr #3
-       add     r12, r12, r11
-       add     r6, r6, r12
-       str     r6, [r1, #(44+16)*4]
-       
-       adr     r2, sha256d_ms_h
-       ldmia   r2, {r4-r11}
-       b       sha256d_ms_main_loop2
-
-sha256d_ms_h:
-       .long 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a
-       .long 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
-
 .macro sha256_main_round_red i, ka, rw, rd, re, rf, rg, rh
        ldr     r12, [\rw, #(\i)*4]
        and     r3, \rf, \re
@@ -607,25 +242,6 @@ sha256d_ms_h:
        add     \rh, \rh, lr, ror #6
 .endm
        
-sha256d_ms_finish:
-       sha256_main_round_red 57, sha256d_ms_k, r1, r6, r11, r8, r9, r10
-       sha256_main_round_red 58, sha256d_ms_k, r1, r5, r10, r11, r8, r9
-       sha256_main_round_red 59, sha256d_ms_k, r1, r4, r9, r10, r11, r8
-       ldr     r5, [r2, #7*4]
-       sha256_main_round_red 60, sha256d_ms_k, r1, r7, r8, r9, r10, r11
-       
-       add     r11, r11, r5
-       str     r11, [r0, #7*4]
-       
-       add     sp, sp, #64*4
-#ifdef __thumb__
-       ldmfd   sp!, {r4-r11, lr}
-       bx      lr
-#else
-       ldmfd   sp!, {r4-r11, pc}
-#endif
-
-
        .text
        .code 32
        .align 2
@@ -957,571 +573,6 @@ sha256_transform_4way_4k_over:
        ldmfd   sp!, {r4, pc}
        
 
-       .text
-       .code 32
-       .align 2
-       .globl sha256d_ms_4way
-       .globl _sha256d_ms_4way
-#ifdef __ELF__
-       .type sha256d_ms_4way, %function
-#endif
-sha256d_ms_4way:
-_sha256d_ms_4way:
-       stmfd   sp!, {r4, lr}
-       vpush   {q4-q7}
-       mov     r12, sp
-       sub     sp, sp, #64*16
-       bic     sp, sp, #63
-       
-       add     r4, r1, #3*16
-       vld1.u32        {q6}, [r4]!
-       add     r1, r1, #18*16
-       vldmia  r1, {q11-q13}
-       cmp     r0, r0
-       
-       vshr.u32        q10, q6, #7
-       vshl.u32        q0, q6, #32-7
-       vshr.u32        q1, q6, #18
-       veor.u32        q10, q10, q0
-       vshl.u32        q0, q6, #32-18
-       veor.u32        q10, q10, q1
-       vshr.u32        q1, q6, #3
-       veor.u32        q10, q10, q0
-       vstmia  sp!, {q11-q13}
-       veor.u32        q4, q10, q1
-       vadd.u32        q12, q12, q6
-       vadd.u32        q11, q11, q4
-       
-       vshr.u32        q14, q12, #17
-       vshr.u32        q4, q11, #17
-       vshl.u32        q0, q11, #32-17
-       vst1.u32        {q11}, [r1]!
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q11, #19
-       vshl.u32        q1, q11, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q12}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q11, #10
-       vshl.u32        q0, q12, #32-17
-       veor.u32        q4, q4, q1
-       veor.u32        q14, q14, q0
-       vadd.u32        q13, q13, q4
-       vshr.u32        q0, q12, #19
-       vshl.u32        q1, q12, #32-19
-       veor.u32        q14, q14, q0
-       vst1.u32        {q13}, [r1]!
-       veor.u32        q14, q14, q1
-       vshr.u32        q1, q12, #10
-       
-       vshr.u32        q4, q13, #17
-       vshl.u32        q0, q13, #32-17
-       veor.u32        q14, q14, q1
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q13, #19
-       vshl.u32        q1, q13, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q14}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q13, #10
-       vld1.u32        {q15}, [r1]
-       veor.u32        q4, q4, q1
-       vst1.u32        {q15}, [sp]!
-       vadd.u32        q15, q15, q4
-       vshr.u32        q4, q14, #17
-       vshl.u32        q0, q14, #32-17
-       vshl.u32        q1, q14, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q14, #19
-       vst1.u32        {q15}, [r1]!
-       veor.u32        q4, q4, q0
-       vld1.u32        {q9}, [r1]
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q14, #10
-       vst1.u32        {q9}, [sp]!
-       veor.u32        q5, q4, q1
-       
-       vshr.u32        q4, q15, #17
-       vadd.u32        q9, q9, q5
-       vshl.u32        q0, q15, #32-17
-       vshl.u32        q1, q15, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q15, #19
-       vst1.u32        {q9}, [r1]!
-       veor.u32        q4, q4, q0
-       vld1.u32        {q10}, [r1]
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q15, #10
-       vst1.u32        {q10}, [sp]!
-       veor.u32        q4, q4, q1
-       vshl.u32        q0, q9, #32-17
-       vadd.u32        q10, q10, q4
-       vshr.u32        q4, q9, #17
-       vshl.u32        q1, q9, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q9, #19
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q9, #10
-       veor.u32        q4, q4, q0
-       vst1.u32        {q10}, [r1]!
-       veor.u32        q5, q4, q1
-       
-       vshr.u32        q4, q10, #17
-       vshl.u32        q0, q10, #32-17
-       vadd.u32        q11, q11, q5
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q10, #19
-       vshl.u32        q1, q10, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q11}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q10, #10
-       vshl.u32        q0, q11, #32-17
-       veor.u32        q2, q4, q1
-       vshr.u32        q4, q11, #17
-       vadd.u32        q12, q12, q2
-       vshl.u32        q1, q11, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q11, #19
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q11, #10
-       veor.u32        q4, q4, q0
-       vst1.u32        {q12}, [r1]!
-       veor.u32        q5, q4, q1
-       
-       vshr.u32        q4, q12, #17
-       vshl.u32        q0, q12, #32-17
-       vadd.u32        q13, q13, q5
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q12, #19
-       vshl.u32        q1, q12, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q13}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q12, #10
-       vshl.u32        q0, q13, #32-17
-       veor.u32        q2, q4, q1
-       vshr.u32        q4, q13, #17
-       vadd.u32        q14, q14, q2
-       vshl.u32        q1, q13, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q13, #19
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q13, #10
-       veor.u32        q4, q4, q0
-       vst1.u32        {q14}, [r1]!
-       veor.u32        q5, q4, q1
-       add     r4, r4, #12*16
-       
-       vshr.u32        q4, q14, #17
-       vshl.u32        q0, q14, #32-17
-       vadd.u32        q15, q15, q5
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q14, #19
-       vshl.u32        q1, q14, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q15}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q14, #10
-       vld1.u32        {q2}, [r1]
-       veor.u32        q4, q4, q1
-       vshl.u32        q0, q15, #32-17
-       vadd.u32        q9, q9, q4
-       vst1.u32        {q2}, [sp]!
-       vadd.u32        q9, q9, q2
-       vshr.u32        q4, q15, #17
-       vshr.u32        q2, q15, #19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q9}, [r1]!
-       vshl.u32        q1, q15, #32-19
-       veor.u32        q4, q4, q2
-       vshr.u32        q0, q15, #10
-       veor.u32        q4, q4, q1
-       vld1.u32        {q5-q6}, [r4]!
-       veor.u32        q4, q4, q0
-       vld1.u32        {q2}, [r1]
-       vadd.u32        q10, q10, q4
-       vst1.u32        {q2}, [sp]!
-       vadd.u32        q10, q10, q2
-       
-       sub     sp, sp, #8*16
-       
-sha256d_ms_4way_extend_loop2:
-       sha256_4way_extend_doubleround_body 16, r4, r1, q11, q12,  q9, q10
-       sha256_4way_extend_doubleround_body 18, r4, r1, q13, q14, q11, q12
-       sha256_4way_extend_doubleround_body 20, r4, r1, q15,  q9, q13, q14
-       sha256_4way_extend_doubleround_body 22, r4, r1, q10, q11, q15,  q9
-       sha256_4way_extend_doubleround_body 24, r4, r1, q12, q13, q10, q11
-       sha256_4way_extend_doubleround_body 26, r4, r1, q14, q15, q12, q13
-       sha256_4way_extend_doubleround_body 28, r4, r1,  q9, q10, q14, q15
-       sha256_4way_extend_doubleround_body 30, r4, r1, q11, q12,  q9, q10
-       sha256_4way_extend_doubleround_body 32, r4, r1, q13, q14, q11, q12
-       sha256_4way_extend_doubleround_body 34, r4, r1, q15,  q9, q13, q14
-       sha256_4way_extend_doubleround_body 36, r4, r1, q10, q11, q15,  q9
-       sha256_4way_extend_doubleround_body 38, r4, r1, q12, q13, q10, q11
-       sha256_4way_extend_doubleround_body 40, r4, r1, q14, q15, q12, q13
-       sha256_4way_extend_doubleround_body 42, r4, r1,  q9, q10, q14, q15
-       sha256_4way_extend_doubleround_body 44, r4, r1, q11, q12,  q9, q10
-       sha256_4way_extend_doubleround_foot 46, r4, r1, q13, q14, q11, q12
-       bne     sha256d_ms_4way_extend_coda2
-       
-       vldmia  r3!, {q4-q7}
-       vldmia  r3, {q0-q3}
-       vswp    q0, q4
-       adr     r3, sha256d_ms_4way_4k+3*16
-       sub r1, r1, #(64-3)*16
-       b       sha256d_ms_4way_main_loop1
-       
-       .align 4
-sha256d_ms_4way_4k:
-       sha256_4k
-       
-sha256d_ms_4way_main_loop2:
-       sha256_4way_main_round  0, r3, r1, q0, q1, q2, q3, q4, q5, q6, q7
-       sha256_4way_main_round  1, r3, r1, q3, q0, q1, q2, q7, q4, q5, q6
-       sha256_4way_main_round  2, r3, r1, q2, q3, q0, q1, q6, q7, q4, q5
-sha256d_ms_4way_main_loop1:
-       sha256_4way_main_round  3, r3, r1, q1, q2, q3, q0, q5, q6, q7, q4
-       sha256_4way_main_quadround  4, r3, r1
-       sha256_4way_main_quadround  8, r3, r1
-       sha256_4way_main_quadround 12, r3, r1
-       sha256_4way_main_quadround 16, r3, r1
-       sha256_4way_main_quadround 20, r3, r1
-       sha256_4way_main_quadround 24, r3, r1
-       sha256_4way_main_quadround 28, r3, r1
-       sha256_4way_main_quadround 32, r3, r1
-       sha256_4way_main_quadround 36, r3, r1
-       sha256_4way_main_quadround 40, r3, r1
-       sha256_4way_main_quadround 44, r3, r1
-       sha256_4way_main_quadround 48, r3, r1
-       sha256_4way_main_quadround 52, r3, r1
-       sha256_4way_main_round 56, r3, r1, q0, q1, q2, q3, q4, q5, q6, q7
-       bne     sha256d_ms_4way_finish
-       sha256_4way_main_round 57, r3, r1, q3, q0, q1, q2, q7, q4, q5, q6
-       sha256_4way_main_round 58, r3, r1, q2, q3, q0, q1, q6, q7, q4, q5
-       sha256_4way_main_round 59, r3, r1, q1, q2, q3, q0, q5, q6, q7, q4
-       sha256_4way_main_quadround 60, r3, r1
-       
-       vldmia  r2, {q8-q15}
-       vadd.u32        q0, q0, q8
-       vadd.u32        q1, q1, q9
-       vadd.u32        q2, q2, q10
-       vadd.u32        q3, q3, q11
-       vadd.u32        q4, q4, q12
-       vadd.u32        q5, q5, q13
-       vadd.u32        q6, q6, q14
-       vadd.u32        q7, q7, q15
-       
-       vldmia  sp, {q8-q15}
-       sub     r1, r1, #(64-18)*16
-       vstmia  r1, {q8-q10}
-       add     r1, r1, #4*16
-       vstmia  r1, {q11-q13}
-       add     r1, r1, #8*16
-       vstmia  r1, {q14-q15}
-       
-       vstmia  sp, {q0-q7}
-       vmov.u32        q8,  #0x80000000
-       vmov.u32        q9,  #0
-       vmov.u32        q10, #0
-       vmov.u32        q11, #0
-       vmov.u32        q12, #0
-       vmov.u32        q13, #0
-       vmov.u32        q14, #0
-       vmov.u32        q15, #0x00000100
-       add     r1, sp, #8*16
-       vstmia  r1!, {q8-q15}
-       adds    r4, sp, #2*16
-       
-       vshr.u32        q9, q1, #7
-       vshl.u32        q2, q1, #32-7
-       vshr.u32        q4, q1, #18
-       veor.u32        q9, q9, q2
-       vshl.u32        q3, q1, #32-18
-       veor.u32        q9, q9, q4
-       vshr.u32        q2, q1, #3
-       veor.u32        q9, q9, q3
-       vld1.u32        {q5}, [r4]!
-       veor.u32        q9, q9, q2
-       vmov.u32        q7, #0x00a00000
-       vadd.u32        q9, q9, q0
-       vshr.u32        q10, q5, #7
-       vshl.u32        q0, q5, #32-7
-       vshl.u32        q3, q5, #32-18
-       veor.u32        q10, q10, q0
-       vshr.u32        q0, q5, #18
-       veor.u32        q10, q10, q3
-       vst1.u32        {q9}, [r1]!
-       vadd.u32        q3, q1, q7
-       veor.u32        q10, q10, q0
-       vshr.u32        q0, q5, #3
-       vld1.u32        {q6}, [r4]!
-       veor.u32        q10, q10, q0
-       
-       vshr.u32        q4, q9, #17
-       vshl.u32        q0, q9, #32-17
-       vadd.u32        q10, q10, q3
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q9, #19
-       vshl.u32        q1, q9, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q11, q6, #7
-       vshl.u32        q0, q6, #32-7
-       veor.u32        q4, q4, q1
-       veor.u32        q11, q11, q0
-       vshr.u32        q1, q9, #10
-       vshr.u32        q0, q6, #18
-       veor.u32        q4, q4, q1
-       veor.u32        q11, q11, q0
-       vshl.u32        q1, q6, #32-18
-       vshr.u32        q0, q6, #3
-       veor.u32        q11, q11, q1
-       vadd.u32        q4, q4, q5
-       veor.u32        q11, q11, q0
-       vld1.u32        {q5}, [r4]!
-       vadd.u32        q11, q11, q4
-       vshr.u32        q4, q10, #17
-       vshl.u32        q0, q10, #32-17
-       vst1.u32        {q10}, [r1]!
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q10, #19
-       vshl.u32        q1, q10, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q12, q5, #7
-       veor.u32        q4, q4, q1
-       vshl.u32        q0, q5, #32-7
-       vshr.u32        q1, q10, #10
-       veor.u32        q12, q12, q0
-       vshr.u32        q0, q5, #18
-       veor.u32        q4, q4, q1
-       veor.u32        q12, q12, q0
-       vshl.u32        q1, q5, #32-18
-       vst1.u32        {q11}, [r1]!
-       veor.u32        q12, q12, q1
-       vshr.u32        q0, q5, #3
-       vadd.u32        q1, q6, q4
-       veor.u32        q12, q12, q0
-       
-       vshr.u32        q4, q11, #17
-       vshl.u32        q0, q11, #32-17
-       vadd.u32        q12, q12, q1
-       vld1.u32        {q6}, [r4]!
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q11, #19
-       vshl.u32        q1, q11, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q13, q6, #7
-       vshl.u32        q0, q6, #32-7
-       veor.u32        q4, q4, q1
-       veor.u32        q13, q13, q0
-       vshr.u32        q1, q11, #10
-       vshr.u32        q0, q6, #18
-       veor.u32        q4, q4, q1
-       veor.u32        q13, q13, q0
-       vshl.u32        q1, q6, #32-18
-       vshr.u32        q0, q6, #3
-       veor.u32        q13, q13, q1
-       vadd.u32        q4, q4, q5
-       veor.u32        q13, q13, q0
-       vld1.u32        {q5}, [r4]!
-       vadd.u32        q13, q13, q4
-       vshr.u32        q4, q12, #17
-       vshl.u32        q0, q12, #32-17
-       vst1.u32        {q12}, [r1]!
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q12, #19
-       vshl.u32        q1, q12, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q14, q5, #7
-       veor.u32        q4, q4, q1
-       vshl.u32        q0, q5, #32-7
-       vshr.u32        q1, q12, #10
-       veor.u32        q14, q14, q0
-       vshr.u32        q0, q5, #18
-       veor.u32        q4, q4, q1
-       veor.u32        q14, q14, q0
-       vshl.u32        q1, q5, #32-18
-       vst1.u32        {q13}, [r1]!
-       veor.u32        q14, q14, q1
-       vshr.u32        q0, q5, #3
-       vadd.u32        q1, q6, q4
-       veor.u32        q14, q14, q0
-       
-       vshr.u32        q4, q13, #17
-       vshl.u32        q0, q13, #32-17
-       vadd.u32        q14, q14, q1
-       vld1.u32        {q6}, [r4]!
-       vadd.u32        q5, q5, q15
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q13, #19
-       vshl.u32        q1, q13, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q15, q6, #7
-       vshl.u32        q0, q6, #32-7
-       veor.u32        q4, q4, q1
-       veor.u32        q15, q15, q0
-       vshr.u32        q1, q13, #10
-       vshr.u32        q0, q6, #18
-       veor.u32        q4, q4, q1
-       veor.u32        q15, q15, q0
-       vshl.u32        q1, q6, #32-18
-       vshr.u32        q0, q6, #3
-       veor.u32        q15, q15, q1
-       vadd.u32        q4, q4, q5
-       veor.u32        q15, q15, q0
-       vmov.u32        q5, #0x80000000
-       vadd.u32        q15, q15, q4
-       vshr.u32        q4, q14, #17
-       vshl.u32        q0, q14, #32-17
-       vadd.u32        q6, q6, q9
-       vst1.u32        {q14}, [r1]!
-       vmov.u32        q7, #0x11000000
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q14, #19
-       vshl.u32        q1, q14, #32-19
-       vadd.u32        q6, q6, q7
-       vmov.u32        q2, #0x00002000
-       veor.u32        q4, q4, q0
-       vst1.u32        {q15}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q14, #10
-       vadd.u32        q6, q6, q2
-       veor.u32        q1, q4, q1
-       add     r4, r4, #8*16
-       
-       vshr.u32        q4, q15, #17
-       vshl.u32        q0, q15, #32-17
-       vadd.u32        q9, q6, q1
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q15, #19
-       vshl.u32        q1, q15, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q9}, [r1]!
-       vadd.u32        q5, q5, q10
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q15, #10
-       vshl.u32        q0, q9, #32-17
-       veor.u32        q10, q4, q1
-       vshr.u32        q4, q9, #17
-       vadd.u32        q10, q10, q5
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q9, #19
-       vshl.u32        q1, q9, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q9, #10
-       veor.u32        q4, q4, q1
-       vst1.u32        {q10}, [r1]!
-       veor.u32        q1, q4, q0
-       
-       vshr.u32        q4, q10, #17
-       vshl.u32        q0, q10, #32-17
-       vadd.u32        q11, q11, q1
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q10, #19
-       vshl.u32        q1, q10, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q11}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q10, #10
-       vshl.u32        q0, q11, #32-17
-       veor.u32        q1, q4, q1
-       vshr.u32        q4, q11, #17
-       vadd.u32        q12, q12, q1
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q11, #19
-       vshl.u32        q1, q11, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q11, #10
-       veor.u32        q4, q4, q1
-       vst1.u32        {q12}, [r1]!
-       veor.u32        q1, q4, q0
-       
-       vshr.u32        q4, q12, #17
-       vshl.u32        q0, q12, #32-17
-       vadd.u32        q13, q13, q1
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q12, #19
-       vshl.u32        q1, q12, #32-19
-       veor.u32        q4, q4, q0
-       vst1.u32        {q13}, [r1]!
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q12, #10
-       vshl.u32        q0, q13, #32-17
-       veor.u32        q1, q4, q1
-       vshr.u32        q4, q13, #17
-       vadd.u32        q14, q14, q1
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q13, #19
-       vshl.u32        q1, q13, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q13, #10
-       veor.u32        q4, q4, q1
-       vst1.u32        {q14}, [r1]!
-       veor.u32        q4, q4, q0
-       vmov.u32        q6, #0x00000100
-       vadd.u32        q15, q15, q4
-       
-       vshr.u32        q4, q14, #17
-       vshl.u32        q0, q14, #32-17
-       vmov.u32        q7, #0x00400000
-       vst1.u32        {q15}, [r1]!
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q14, #19
-       vshl.u32        q1, q14, #32-19
-       veor.u32        q4, q4, q0
-       vadd.u32        q9, q9, q7
-       veor.u32        q4, q4, q1
-       vshr.u32        q1, q14, #10
-       vmov.u32        q2, #0x00000022
-       veor.u32        q4, q4, q1
-       vadd.u32        q9, q9, q2
-       vld1.u32        {q5}, [r4]!
-       vadd.u32        q9, q9, q4
-       vshr.u32        q4, q15, #17
-       vshl.u32        q0, q15, #32-17
-       vadd.u32        q6, q6, q10
-       vst1.u32        {q9}, [r1]!
-       veor.u32        q4, q4, q0
-       vshr.u32        q0, q15, #19
-       vshl.u32        q1, q15, #32-19
-       veor.u32        q4, q4, q0
-       vshr.u32        q10, q5, #7
-       veor.u32        q4, q4, q1
-       vshl.u32        q0, q5, #32-7
-       vshr.u32        q1, q15, #10
-       veor.u32        q10, q10, q0
-       vshr.u32        q0, q5, #18
-       veor.u32        q4, q4, q1
-       veor.u32        q10, q10, q0
-       vshl.u32        q1, q5, #32-18
-       vshr.u32        q0, q5, #3
-       veor.u32        q10, q10, q1
-       vadd.u32        q1, q6, q4
-       veor.u32        q10, q10, q0
-       vld1.u32        {q6}, [r4]!
-       vadd.u32        q10, q10, q1
-       
-       b       sha256d_ms_4way_extend_loop2
-       
-       .align 4
-sha256d_ms_4way_4h:
-       .long 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667
-       .long 0xbb67ae85, 0xbb67ae85, 0xbb67ae85, 0xbb67ae85
-       .long 0x3c6ef372, 0x3c6ef372, 0x3c6ef372, 0x3c6ef372
-       .long 0xa54ff53a, 0xa54ff53a, 0xa54ff53a, 0xa54ff53a
-       .long 0x510e527f, 0x510e527f, 0x510e527f, 0x510e527f
-       .long 0x9b05688c, 0x9b05688c, 0x9b05688c, 0x9b05688c
-       .long 0x1f83d9ab, 0x1f83d9ab, 0x1f83d9ab, 0x1f83d9ab
-       .long 0x5be0cd19, 0x5be0cd19, 0x5be0cd19, 0x5be0cd19
-       
-sha256d_ms_4way_extend_coda2:
-       adr     r4, sha256d_ms_4way_4h
-       mov     r1, sp
-       vldmia  r4, {q0-q7}
-       vmov.u32        q15, q7
-       sub     r3, r3, #64*16
-       b       sha256d_ms_4way_main_loop2
-
 .macro sha256_4way_main_round_red i, rk, rw, rd, re, rf, rg, rh
        vld1.u32        {q8}, [\rw]!
        vand.u32        q9, \rf, \re
@@ -1546,21 +597,6 @@ sha256d_ms_4way_extend_coda2:
        vadd.u32        \rh, \rh, q13
 .endm
 
-sha256d_ms_4way_finish:
-       sha256_4way_main_round_red 57, r3, r1, q2, q7, q4, q5, q6
-       sha256_4way_main_round_red 58, r3, r1, q1, q6, q7, q4, q5
-       sha256_4way_main_round_red 59, r3, r1, q0, q5, q6, q7, q4
-       sha256_4way_main_round_red 60, r3, r1, q3, q4, q5, q6, q7
-       
-       vadd.u32        q7, q7, q15
-       add     r0, r0, #7*16
-       vst1.u32        {q7}, [r0]
-       
-       mov     sp, r12
-       vpop    {q4-q7}
-       ldmfd   sp!, {r4, pc}
-
-
        .text
        .code 32
        .align 2