From: CryptoManiac Date: Tue, 13 Oct 2015 19:16:51 +0000 (+0300) Subject: Remove sha256d implementation. X-Git-Tag: nvc-v0.5.5~27 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=b6a87e6d6367ad7d3cdd9aeea7a93aa0ad075582 Remove sha256d implementation. --- diff --git a/src/crypto/sha2/asm/sha2-arm.S b/src/crypto/sha2/asm/sha2-arm.S index c89b6d5..eb10dd9 100644 --- a/src/crypto/sha2/asm/sha2-arm.S +++ b/src/crypto/sha2/asm/sha2-arm.S @@ -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