From bff29a8535ef715a7f2796f4f4126f5872f0504e Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Thu, 4 Dec 2025 16:29:00 +1000 Subject: [PATCH] ARM32/Thumb2 ASM SHA-256: provide small code size option WOLFSSL_ARMASM_SHA256_SMALL for Thumb2 and ARM32 using base instructions compiles implementations that are smaller but slower. --- configure.ac | 8 + wolfcrypt/src/port/arm/armv8-32-sha256-asm.S | 892 +++++++++++++- .../src/port/arm/armv8-32-sha256-asm_c.c | 915 +++++++++++++- wolfcrypt/src/port/arm/thumb2-sha256-asm.S | 964 ++++++++++++++- wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c | 1085 ++++++++++++++++- 5 files changed, 3700 insertions(+), 164 deletions(-) diff --git a/configure.ac b/configure.ac index 0175e0b1ac..75367b40b9 100644 --- a/configure.ac +++ b/configure.ac @@ -3364,6 +3364,7 @@ fi ENABLED_ARMASM_CRYPTO="unknown" ENABLED_ARMASM_INLINE="no" +ENABLED_ARMASM_SHA256_SMALL="no" ENABLED_ARMASM_SHA3="unknown" ENABLED_ARMASM_CRYPTO_SM4="no" # ARM Assembly @@ -3387,6 +3388,9 @@ then no-crypto) ENABLED_ARMASM_CRYPTO=no ;; + sha256-small) + ENABLED_ARMASM_SHA256_SMALL=yes + ;; sha512-crypto | sha3-crypto) case $host_cpu in *aarch64*) @@ -3583,6 +3587,10 @@ then esac fi +if test "$ENABLED_ARMASM_SHA256_SMALL" = "yes"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_SHA256_SMALL" + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_ARMASM_SHA256_SMALL" +fi if test "$ENABLED_ARMASM_SHA3" = "yes"; then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_CRYPTO_SHA512 -DWOLFSSL_ARMASM_CRYPTO_SHA3" AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_ARMASM_CRYPTO_SHA512 -DWOLFSSL_ARMASM_CRYPTO_SHA3" diff --git a/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S b/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S index a81f6ba516..790620c7fa 100644 --- a/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S +++ b/wolfcrypt/src/port/arm/armv8-32-sha256-asm.S @@ -108,7 +108,7 @@ L_SHA256_transform_len_k: Transform_Sha256_Len_base: push {r4, r5, r6, r7, r8, r9, r10, r11, lr} sub sp, sp, #0xc0 - adr r3, L_SHA256_transform_len_k + adr r12, L_SHA256_transform_len_k # Copy digest to add in at end #if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7) ldm r0, {r4, r5} @@ -372,9 +372,10 @@ L_SHA256_transform_len_begin: ldr r11, [r0, #4] ldr r4, [r0, #8] eor r11, r11, r4 - mov r12, #3 +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + mov r3, #3 # Start of 16 rounds -L_SHA256_transform_len_start: +L_SHA256_transform_len_start_fast: # Round 0 ldr r5, [r0, #16] ldr r6, [r0, #20] @@ -389,7 +390,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp] - ldr r6, [r3] + ldr r6, [r12] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0] @@ -436,7 +437,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #4] - ldr r6, [r3, #4] + ldr r6, [r12, #4] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #28] @@ -483,7 +484,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #8] - ldr r6, [r3, #8] + ldr r6, [r12, #8] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #24] @@ -530,7 +531,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #12] - ldr r6, [r3, #12] + ldr r6, [r12, #12] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #20] @@ -577,7 +578,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #16] - ldr r6, [r3, #16] + ldr r6, [r12, #16] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #16] @@ -624,7 +625,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #20] - ldr r6, [r3, #20] + ldr r6, [r12, #20] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #12] @@ -671,7 +672,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #24] - ldr r6, [r3, #24] + ldr r6, [r12, #24] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #8] @@ -718,7 +719,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #28] - ldr r6, [r3, #28] + ldr r6, [r12, #28] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #4] @@ -765,7 +766,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #32] - ldr r6, [r3, #32] + ldr r6, [r12, #32] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0] @@ -812,7 +813,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #36] - ldr r6, [r3, #36] + ldr r6, [r12, #36] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #28] @@ -859,7 +860,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #40] - ldr r6, [r3, #40] + ldr r6, [r12, #40] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #24] @@ -906,7 +907,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #44] - ldr r6, [r3, #44] + ldr r6, [r12, #44] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #20] @@ -953,7 +954,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #48] - ldr r6, [r3, #48] + ldr r6, [r12, #48] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #16] @@ -1000,7 +1001,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #52] - ldr r6, [r3, #52] + ldr r6, [r12, #52] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #12] @@ -1047,7 +1048,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #56] - ldr r6, [r3, #56] + ldr r6, [r12, #56] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #8] @@ -1094,7 +1095,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #60] - ldr r6, [r3, #60] + ldr r6, [r12, #60] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #4] @@ -1127,9 +1128,526 @@ L_SHA256_transform_len_start: add r4, r4, r5 add r9, r9, r4 str r9, [sp, #60] - add r3, r3, #0x40 - subs r12, r12, #1 - bne L_SHA256_transform_len_start + add r12, r12, #0x40 + subs r3, r3, #1 + bne L_SHA256_transform_len_start_fast + # Round 0 + ldr r5, [r0, #16] + ldr r6, [r0, #20] + ldr r7, [r0, #24] + ldr r9, [r0, #28] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp] + ldr r6, [r12] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0] + ldr r6, [r0, #4] + ldr r7, [r0, #8] + ldr r8, [r0, #12] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #12] + str r9, [r0, #28] + # Round 1 + ldr r5, [r0, #12] + ldr r6, [r0, #16] + ldr r7, [r0, #20] + ldr r9, [r0, #24] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #4] + ldr r6, [r12, #4] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #28] + ldr r6, [r0] + ldr r7, [r0, #4] + ldr r8, [r0, #8] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0, #8] + str r9, [r0, #24] + # Round 2 + ldr r5, [r0, #8] + ldr r6, [r0, #12] + ldr r7, [r0, #16] + ldr r9, [r0, #20] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #8] + ldr r6, [r12, #8] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #24] + ldr r6, [r0, #28] + ldr r7, [r0] + ldr r8, [r0, #4] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #4] + str r9, [r0, #20] + # Round 3 + ldr r5, [r0, #4] + ldr r6, [r0, #8] + ldr r7, [r0, #12] + ldr r9, [r0, #16] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #12] + ldr r6, [r12, #12] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #20] + ldr r6, [r0, #24] + ldr r7, [r0, #28] + ldr r8, [r0] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0] + str r9, [r0, #16] + # Round 4 + ldr r5, [r0] + ldr r6, [r0, #4] + ldr r7, [r0, #8] + ldr r9, [r0, #12] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #16] + ldr r6, [r12, #16] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #16] + ldr r6, [r0, #20] + ldr r7, [r0, #24] + ldr r8, [r0, #28] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #28] + str r9, [r0, #12] + # Round 5 + ldr r5, [r0, #28] + ldr r6, [r0] + ldr r7, [r0, #4] + ldr r9, [r0, #8] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #20] + ldr r6, [r12, #20] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #12] + ldr r6, [r0, #16] + ldr r7, [r0, #20] + ldr r8, [r0, #24] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0, #24] + str r9, [r0, #8] + # Round 6 + ldr r5, [r0, #24] + ldr r6, [r0, #28] + ldr r7, [r0] + ldr r9, [r0, #4] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #24] + ldr r6, [r12, #24] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #8] + ldr r6, [r0, #12] + ldr r7, [r0, #16] + ldr r8, [r0, #20] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #20] + str r9, [r0, #4] + # Round 7 + ldr r5, [r0, #20] + ldr r6, [r0, #24] + ldr r7, [r0, #28] + ldr r9, [r0] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #28] + ldr r6, [r12, #28] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #4] + ldr r6, [r0, #8] + ldr r7, [r0, #12] + ldr r8, [r0, #16] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0, #16] + str r9, [r0] + # Round 8 + ldr r5, [r0, #16] + ldr r6, [r0, #20] + ldr r7, [r0, #24] + ldr r9, [r0, #28] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #32] + ldr r6, [r12, #32] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0] + ldr r6, [r0, #4] + ldr r7, [r0, #8] + ldr r8, [r0, #12] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #12] + str r9, [r0, #28] + # Round 9 + ldr r5, [r0, #12] + ldr r6, [r0, #16] + ldr r7, [r0, #20] + ldr r9, [r0, #24] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #36] + ldr r6, [r12, #36] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #28] + ldr r6, [r0] + ldr r7, [r0, #4] + ldr r8, [r0, #8] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0, #8] + str r9, [r0, #24] + # Round 10 + ldr r5, [r0, #8] + ldr r6, [r0, #12] + ldr r7, [r0, #16] + ldr r9, [r0, #20] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #40] + ldr r6, [r12, #40] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #24] + ldr r6, [r0, #28] + ldr r7, [r0] + ldr r8, [r0, #4] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #4] + str r9, [r0, #20] + # Round 11 + ldr r5, [r0, #4] + ldr r6, [r0, #8] + ldr r7, [r0, #12] + ldr r9, [r0, #16] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #44] + ldr r6, [r12, #44] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #20] + ldr r6, [r0, #24] + ldr r7, [r0, #28] + ldr r8, [r0] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0] + str r9, [r0, #16] + # Round 12 + ldr r5, [r0] + ldr r6, [r0, #4] + ldr r7, [r0, #8] + ldr r9, [r0, #12] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #48] + ldr r6, [r12, #48] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #16] + ldr r6, [r0, #20] + ldr r7, [r0, #24] + ldr r8, [r0, #28] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #28] + str r9, [r0, #12] + # Round 13 + ldr r5, [r0, #28] + ldr r6, [r0] + ldr r7, [r0, #4] + ldr r9, [r0, #8] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #52] + ldr r6, [r12, #52] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #12] + ldr r6, [r0, #16] + ldr r7, [r0, #20] + ldr r8, [r0, #24] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0, #24] + str r9, [r0, #8] + # Round 14 + ldr r5, [r0, #24] + ldr r6, [r0, #28] + ldr r7, [r0] + ldr r9, [r0, #4] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #56] + ldr r6, [r12, #56] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #8] + ldr r6, [r0, #12] + ldr r7, [r0, #16] + ldr r8, [r0, #20] + ror r4, r5, #2 + eor r10, r5, r6 + eor r4, r4, r5, ror #13 + and r11, r11, r10 + eor r4, r4, r5, ror #22 + eor r11, r11, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r11 + str r8, [r0, #20] + str r9, [r0, #4] + # Round 15 + ldr r5, [r0, #20] + ldr r6, [r0, #24] + ldr r7, [r0, #28] + ldr r9, [r0] + ror r4, r5, #6 + eor r6, r6, r7 + eor r4, r4, r5, ror #11 + and r6, r6, r5 + eor r4, r4, r5, ror #25 + eor r6, r6, r7 + add r9, r9, r4 + add r9, r9, r6 + ldr r5, [sp, #60] + ldr r6, [r12, #60] + add r9, r9, r5 + add r9, r9, r6 + ldr r5, [r0, #4] + ldr r6, [r0, #8] + ldr r7, [r0, #12] + ldr r8, [r0, #16] + ror r4, r5, #2 + eor r11, r5, r6 + eor r4, r4, r5, ror #13 + and r10, r10, r11 + eor r4, r4, r5, ror #22 + eor r10, r10, r6 + add r8, r8, r9 + add r9, r9, r4 + add r9, r9, r10 + str r8, [r0, #16] + str r9, [r0] +#else + mov r3, #4 + # Start of 16 rounds +L_SHA256_transform_len_start_small: + sub r3, r3, #1 # Round 0 ldr r5, [r0, #16] ldr r6, [r0, #20] @@ -1144,7 +1662,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp] - ldr r6, [r3] + ldr r6, [r12] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0] @@ -1162,6 +1680,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #12] str r9, [r0, #28] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_0 + # Calc new W[0] + ldr r6, [sp, #56] + ldr r7, [sp, #36] + ldr r8, [sp, #4] + ldr r9, [sp] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp] +L_SHA256_transform_len_blk_end_0: # Round 1 ldr r5, [r0, #12] ldr r6, [r0, #16] @@ -1176,7 +1712,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #4] - ldr r6, [r3, #4] + ldr r6, [r12, #4] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #28] @@ -1194,6 +1730,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0, #8] str r9, [r0, #24] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_1 + # Calc new W[1] + ldr r6, [sp, #60] + ldr r7, [sp, #40] + ldr r8, [sp, #8] + ldr r9, [sp, #4] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #4] +L_SHA256_transform_len_blk_end_1: # Round 2 ldr r5, [r0, #8] ldr r6, [r0, #12] @@ -1208,7 +1762,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #8] - ldr r6, [r3, #8] + ldr r6, [r12, #8] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #24] @@ -1226,6 +1780,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #4] str r9, [r0, #20] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_2 + # Calc new W[2] + ldr r6, [sp] + ldr r7, [sp, #44] + ldr r8, [sp, #12] + ldr r9, [sp, #8] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #8] +L_SHA256_transform_len_blk_end_2: # Round 3 ldr r5, [r0, #4] ldr r6, [r0, #8] @@ -1240,7 +1812,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #12] - ldr r6, [r3, #12] + ldr r6, [r12, #12] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #20] @@ -1258,6 +1830,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0] str r9, [r0, #16] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_3 + # Calc new W[3] + ldr r6, [sp, #4] + ldr r7, [sp, #48] + ldr r8, [sp, #16] + ldr r9, [sp, #12] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #12] +L_SHA256_transform_len_blk_end_3: # Round 4 ldr r5, [r0] ldr r6, [r0, #4] @@ -1272,7 +1862,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #16] - ldr r6, [r3, #16] + ldr r6, [r12, #16] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #16] @@ -1290,6 +1880,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #28] str r9, [r0, #12] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_4 + # Calc new W[4] + ldr r6, [sp, #8] + ldr r7, [sp, #52] + ldr r8, [sp, #20] + ldr r9, [sp, #16] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #16] +L_SHA256_transform_len_blk_end_4: # Round 5 ldr r5, [r0, #28] ldr r6, [r0] @@ -1304,7 +1912,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #20] - ldr r6, [r3, #20] + ldr r6, [r12, #20] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #12] @@ -1322,6 +1930,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0, #24] str r9, [r0, #8] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_5 + # Calc new W[5] + ldr r6, [sp, #12] + ldr r7, [sp, #56] + ldr r8, [sp, #24] + ldr r9, [sp, #20] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #20] +L_SHA256_transform_len_blk_end_5: # Round 6 ldr r5, [r0, #24] ldr r6, [r0, #28] @@ -1336,7 +1962,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #24] - ldr r6, [r3, #24] + ldr r6, [r12, #24] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #8] @@ -1354,6 +1980,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #20] str r9, [r0, #4] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_6 + # Calc new W[6] + ldr r6, [sp, #16] + ldr r7, [sp, #60] + ldr r8, [sp, #28] + ldr r9, [sp, #24] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #24] +L_SHA256_transform_len_blk_end_6: # Round 7 ldr r5, [r0, #20] ldr r6, [r0, #24] @@ -1368,7 +2012,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #28] - ldr r6, [r3, #28] + ldr r6, [r12, #28] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #4] @@ -1386,6 +2030,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0, #16] str r9, [r0] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_7 + # Calc new W[7] + ldr r6, [sp, #20] + ldr r7, [sp] + ldr r8, [sp, #32] + ldr r9, [sp, #28] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #28] +L_SHA256_transform_len_blk_end_7: # Round 8 ldr r5, [r0, #16] ldr r6, [r0, #20] @@ -1400,7 +2062,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #32] - ldr r6, [r3, #32] + ldr r6, [r12, #32] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0] @@ -1418,6 +2080,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #12] str r9, [r0, #28] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_8 + # Calc new W[8] + ldr r6, [sp, #24] + ldr r7, [sp, #4] + ldr r8, [sp, #36] + ldr r9, [sp, #32] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #32] +L_SHA256_transform_len_blk_end_8: # Round 9 ldr r5, [r0, #12] ldr r6, [r0, #16] @@ -1432,7 +2112,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #36] - ldr r6, [r3, #36] + ldr r6, [r12, #36] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #28] @@ -1450,6 +2130,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0, #8] str r9, [r0, #24] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_9 + # Calc new W[9] + ldr r6, [sp, #28] + ldr r7, [sp, #8] + ldr r8, [sp, #40] + ldr r9, [sp, #36] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #36] +L_SHA256_transform_len_blk_end_9: # Round 10 ldr r5, [r0, #8] ldr r6, [r0, #12] @@ -1464,7 +2162,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #40] - ldr r6, [r3, #40] + ldr r6, [r12, #40] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #24] @@ -1482,6 +2180,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #4] str r9, [r0, #20] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_10 + # Calc new W[10] + ldr r6, [sp, #32] + ldr r7, [sp, #12] + ldr r8, [sp, #44] + ldr r9, [sp, #40] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #40] +L_SHA256_transform_len_blk_end_10: # Round 11 ldr r5, [r0, #4] ldr r6, [r0, #8] @@ -1496,7 +2212,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #44] - ldr r6, [r3, #44] + ldr r6, [r12, #44] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #20] @@ -1514,6 +2230,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0] str r9, [r0, #16] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_11 + # Calc new W[11] + ldr r6, [sp, #36] + ldr r7, [sp, #16] + ldr r8, [sp, #48] + ldr r9, [sp, #44] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #44] +L_SHA256_transform_len_blk_end_11: # Round 12 ldr r5, [r0] ldr r6, [r0, #4] @@ -1528,7 +2262,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #48] - ldr r6, [r3, #48] + ldr r6, [r12, #48] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #16] @@ -1546,6 +2280,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #28] str r9, [r0, #12] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_12 + # Calc new W[12] + ldr r6, [sp, #40] + ldr r7, [sp, #20] + ldr r8, [sp, #52] + ldr r9, [sp, #48] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #48] +L_SHA256_transform_len_blk_end_12: # Round 13 ldr r5, [r0, #28] ldr r6, [r0] @@ -1560,7 +2312,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #52] - ldr r6, [r3, #52] + ldr r6, [r12, #52] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #12] @@ -1578,6 +2330,24 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0, #24] str r9, [r0, #8] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_13 + # Calc new W[13] + ldr r6, [sp, #44] + ldr r7, [sp, #24] + ldr r8, [sp, #56] + ldr r9, [sp, #52] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #52] +L_SHA256_transform_len_blk_end_13: # Round 14 ldr r5, [r0, #24] ldr r6, [r0, #28] @@ -1592,7 +2362,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #56] - ldr r6, [r3, #56] + ldr r6, [r12, #56] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #8] @@ -1610,6 +2380,24 @@ L_SHA256_transform_len_start: add r9, r9, r11 str r8, [r0, #20] str r9, [r0, #4] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_14 + # Calc new W[14] + ldr r6, [sp, #48] + ldr r7, [sp, #28] + ldr r8, [sp, #60] + ldr r9, [sp, #56] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #56] +L_SHA256_transform_len_blk_end_14: # Round 15 ldr r5, [r0, #20] ldr r6, [r0, #24] @@ -1624,7 +2412,7 @@ L_SHA256_transform_len_start: add r9, r9, r4 add r9, r9, r6 ldr r5, [sp, #60] - ldr r6, [r3, #60] + ldr r6, [r12, #60] add r9, r9, r5 add r9, r9, r6 ldr r5, [r0, #4] @@ -1642,6 +2430,28 @@ L_SHA256_transform_len_start: add r9, r9, r10 str r8, [r0, #16] str r9, [r0] + cmp r3, #0 + beq L_SHA256_transform_len_blk_end_15 + # Calc new W[15] + ldr r6, [sp, #52] + ldr r7, [sp, #32] + ldr r8, [sp] + ldr r9, [sp, #60] + ror r4, r6, #17 + ror r5, r8, #7 + eor r4, r4, r6, ror #19 + eor r5, r5, r8, ror #18 + eor r4, r4, r6, lsr #10 + eor r5, r5, r8, lsr #3 + add r9, r9, r7 + add r4, r4, r5 + add r9, r9, r4 + str r9, [sp, #60] +L_SHA256_transform_len_blk_end_15: + cmp r3, #0 + add r12, r12, #0x40 + bne L_SHA256_transform_len_start_small +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ # Add in digest from start #if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7) ldm r0, {r4, r5} @@ -1746,7 +2556,11 @@ L_SHA256_transform_len_start: strd r6, r7, [sp, #88] #endif subs r2, r2, #0x40 - sub r3, r3, #0xc0 +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + sub r12, r12, #0xc0 +#else + sub r12, r12, #0x100 +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ add r1, r1, #0x40 bne L_SHA256_transform_len_begin add sp, sp, #0xc0 diff --git a/wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.c b/wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.c index 27c4296072..bb767693dd 100644 --- a/wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.c +++ b/wolfcrypt/src/port/arm/armv8-32-sha256-asm_c.c @@ -95,7 +95,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, __asm__ __volatile__ ( "sub sp, sp, #0xc0\n\t" - "mov r3, %[L_SHA256_transform_len_k]\n\t" + "mov r12, %[L_SHA256_transform_len_k]\n\t" /* Copy digest to add in at end */ #if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7) "ldm r0, {r4, r5}\n\t" @@ -360,10 +360,11 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ldr r11, [%[sha256], #4]\n\t" "ldr r4, [%[sha256], #8]\n\t" "eor r11, r11, r4\n\t" - "mov r12, #3\n\t" +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + "mov r3, #3\n\t" /* Start of 16 rounds */ "\n" - "L_SHA256_transform_len_start_%=: \n\t" + "L_SHA256_transform_len_start_fast_%=: \n\t" /* Round 0 */ "ldr r5, [%[sha256], #16]\n\t" "ldr r6, [%[sha256], #20]\n\t" @@ -378,7 +379,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp]\n\t" - "ldr r6, [r3]\n\t" + "ldr r6, [r12]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256]]\n\t" @@ -425,7 +426,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #4]\n\t" - "ldr r6, [r3, #4]\n\t" + "ldr r6, [r12, #4]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #28]\n\t" @@ -472,7 +473,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #8]\n\t" - "ldr r6, [r3, #8]\n\t" + "ldr r6, [r12, #8]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #24]\n\t" @@ -519,7 +520,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #12]\n\t" - "ldr r6, [r3, #12]\n\t" + "ldr r6, [r12, #12]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #20]\n\t" @@ -566,7 +567,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #16]\n\t" - "ldr r6, [r3, #16]\n\t" + "ldr r6, [r12, #16]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #16]\n\t" @@ -613,7 +614,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #20]\n\t" - "ldr r6, [r3, #20]\n\t" + "ldr r6, [r12, #20]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #12]\n\t" @@ -660,7 +661,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #24]\n\t" - "ldr r6, [r3, #24]\n\t" + "ldr r6, [r12, #24]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #8]\n\t" @@ -707,7 +708,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #28]\n\t" - "ldr r6, [r3, #28]\n\t" + "ldr r6, [r12, #28]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #4]\n\t" @@ -754,7 +755,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #32]\n\t" - "ldr r6, [r3, #32]\n\t" + "ldr r6, [r12, #32]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256]]\n\t" @@ -801,7 +802,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #36]\n\t" - "ldr r6, [r3, #36]\n\t" + "ldr r6, [r12, #36]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #28]\n\t" @@ -848,7 +849,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #40]\n\t" - "ldr r6, [r3, #40]\n\t" + "ldr r6, [r12, #40]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #24]\n\t" @@ -895,7 +896,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #44]\n\t" - "ldr r6, [r3, #44]\n\t" + "ldr r6, [r12, #44]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #20]\n\t" @@ -942,7 +943,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #48]\n\t" - "ldr r6, [r3, #48]\n\t" + "ldr r6, [r12, #48]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #16]\n\t" @@ -989,7 +990,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #52]\n\t" - "ldr r6, [r3, #52]\n\t" + "ldr r6, [r12, #52]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #12]\n\t" @@ -1036,7 +1037,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #56]\n\t" - "ldr r6, [r3, #56]\n\t" + "ldr r6, [r12, #56]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #8]\n\t" @@ -1083,7 +1084,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #60]\n\t" - "ldr r6, [r3, #60]\n\t" + "ldr r6, [r12, #60]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #4]\n\t" @@ -1116,9 +1117,9 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r4, r4, r5\n\t" "add r9, r9, r4\n\t" "str r9, [sp, #60]\n\t" - "add r3, r3, #0x40\n\t" - "subs r12, r12, #1\n\t" - "bne L_SHA256_transform_len_start_%=\n\t" + "add r12, r12, #0x40\n\t" + "subs r3, r3, #1\n\t" + "bne L_SHA256_transform_len_start_fast_%=\n\t" /* Round 0 */ "ldr r5, [%[sha256], #16]\n\t" "ldr r6, [%[sha256], #20]\n\t" @@ -1133,7 +1134,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp]\n\t" - "ldr r6, [r3]\n\t" + "ldr r6, [r12]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256]]\n\t" @@ -1148,9 +1149,546 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "eor r11, r11, r6\n\t" "add r8, r8, r9\n\t" "add r9, r9, r4\n\t" - "add r9, r9, r11\n\t" - "str r8, [%[sha256], #12]\n\t" - "str r9, [%[sha256], #28]\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #12]\n\t" + "str r9, [%[sha256], #28]\n\t" + /* Round 1 */ + "ldr r5, [%[sha256], #12]\n\t" + "ldr r6, [%[sha256], #16]\n\t" + "ldr r7, [%[sha256], #20]\n\t" + "ldr r9, [%[sha256], #24]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #4]\n\t" + "ldr r6, [r12, #4]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #28]\n\t" + "ldr r6, [%[sha256]]\n\t" + "ldr r7, [%[sha256], #4]\n\t" + "ldr r8, [%[sha256], #8]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256], #8]\n\t" + "str r9, [%[sha256], #24]\n\t" + /* Round 2 */ + "ldr r5, [%[sha256], #8]\n\t" + "ldr r6, [%[sha256], #12]\n\t" + "ldr r7, [%[sha256], #16]\n\t" + "ldr r9, [%[sha256], #20]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #8]\n\t" + "ldr r6, [r12, #8]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #24]\n\t" + "ldr r6, [%[sha256], #28]\n\t" + "ldr r7, [%[sha256]]\n\t" + "ldr r8, [%[sha256], #4]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #4]\n\t" + "str r9, [%[sha256], #20]\n\t" + /* Round 3 */ + "ldr r5, [%[sha256], #4]\n\t" + "ldr r6, [%[sha256], #8]\n\t" + "ldr r7, [%[sha256], #12]\n\t" + "ldr r9, [%[sha256], #16]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #12]\n\t" + "ldr r6, [r12, #12]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #20]\n\t" + "ldr r6, [%[sha256], #24]\n\t" + "ldr r7, [%[sha256], #28]\n\t" + "ldr r8, [%[sha256]]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256]]\n\t" + "str r9, [%[sha256], #16]\n\t" + /* Round 4 */ + "ldr r5, [%[sha256]]\n\t" + "ldr r6, [%[sha256], #4]\n\t" + "ldr r7, [%[sha256], #8]\n\t" + "ldr r9, [%[sha256], #12]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #16]\n\t" + "ldr r6, [r12, #16]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #16]\n\t" + "ldr r6, [%[sha256], #20]\n\t" + "ldr r7, [%[sha256], #24]\n\t" + "ldr r8, [%[sha256], #28]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #28]\n\t" + "str r9, [%[sha256], #12]\n\t" + /* Round 5 */ + "ldr r5, [%[sha256], #28]\n\t" + "ldr r6, [%[sha256]]\n\t" + "ldr r7, [%[sha256], #4]\n\t" + "ldr r9, [%[sha256], #8]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #20]\n\t" + "ldr r6, [r12, #20]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #12]\n\t" + "ldr r6, [%[sha256], #16]\n\t" + "ldr r7, [%[sha256], #20]\n\t" + "ldr r8, [%[sha256], #24]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256], #24]\n\t" + "str r9, [%[sha256], #8]\n\t" + /* Round 6 */ + "ldr r5, [%[sha256], #24]\n\t" + "ldr r6, [%[sha256], #28]\n\t" + "ldr r7, [%[sha256]]\n\t" + "ldr r9, [%[sha256], #4]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #24]\n\t" + "ldr r6, [r12, #24]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #8]\n\t" + "ldr r6, [%[sha256], #12]\n\t" + "ldr r7, [%[sha256], #16]\n\t" + "ldr r8, [%[sha256], #20]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #20]\n\t" + "str r9, [%[sha256], #4]\n\t" + /* Round 7 */ + "ldr r5, [%[sha256], #20]\n\t" + "ldr r6, [%[sha256], #24]\n\t" + "ldr r7, [%[sha256], #28]\n\t" + "ldr r9, [%[sha256]]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #28]\n\t" + "ldr r6, [r12, #28]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #4]\n\t" + "ldr r6, [%[sha256], #8]\n\t" + "ldr r7, [%[sha256], #12]\n\t" + "ldr r8, [%[sha256], #16]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256], #16]\n\t" + "str r9, [%[sha256]]\n\t" + /* Round 8 */ + "ldr r5, [%[sha256], #16]\n\t" + "ldr r6, [%[sha256], #20]\n\t" + "ldr r7, [%[sha256], #24]\n\t" + "ldr r9, [%[sha256], #28]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #32]\n\t" + "ldr r6, [r12, #32]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256]]\n\t" + "ldr r6, [%[sha256], #4]\n\t" + "ldr r7, [%[sha256], #8]\n\t" + "ldr r8, [%[sha256], #12]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #12]\n\t" + "str r9, [%[sha256], #28]\n\t" + /* Round 9 */ + "ldr r5, [%[sha256], #12]\n\t" + "ldr r6, [%[sha256], #16]\n\t" + "ldr r7, [%[sha256], #20]\n\t" + "ldr r9, [%[sha256], #24]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #36]\n\t" + "ldr r6, [r12, #36]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #28]\n\t" + "ldr r6, [%[sha256]]\n\t" + "ldr r7, [%[sha256], #4]\n\t" + "ldr r8, [%[sha256], #8]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256], #8]\n\t" + "str r9, [%[sha256], #24]\n\t" + /* Round 10 */ + "ldr r5, [%[sha256], #8]\n\t" + "ldr r6, [%[sha256], #12]\n\t" + "ldr r7, [%[sha256], #16]\n\t" + "ldr r9, [%[sha256], #20]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #40]\n\t" + "ldr r6, [r12, #40]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #24]\n\t" + "ldr r6, [%[sha256], #28]\n\t" + "ldr r7, [%[sha256]]\n\t" + "ldr r8, [%[sha256], #4]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #4]\n\t" + "str r9, [%[sha256], #20]\n\t" + /* Round 11 */ + "ldr r5, [%[sha256], #4]\n\t" + "ldr r6, [%[sha256], #8]\n\t" + "ldr r7, [%[sha256], #12]\n\t" + "ldr r9, [%[sha256], #16]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #44]\n\t" + "ldr r6, [r12, #44]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #20]\n\t" + "ldr r6, [%[sha256], #24]\n\t" + "ldr r7, [%[sha256], #28]\n\t" + "ldr r8, [%[sha256]]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256]]\n\t" + "str r9, [%[sha256], #16]\n\t" + /* Round 12 */ + "ldr r5, [%[sha256]]\n\t" + "ldr r6, [%[sha256], #4]\n\t" + "ldr r7, [%[sha256], #8]\n\t" + "ldr r9, [%[sha256], #12]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #48]\n\t" + "ldr r6, [r12, #48]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #16]\n\t" + "ldr r6, [%[sha256], #20]\n\t" + "ldr r7, [%[sha256], #24]\n\t" + "ldr r8, [%[sha256], #28]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #28]\n\t" + "str r9, [%[sha256], #12]\n\t" + /* Round 13 */ + "ldr r5, [%[sha256], #28]\n\t" + "ldr r6, [%[sha256]]\n\t" + "ldr r7, [%[sha256], #4]\n\t" + "ldr r9, [%[sha256], #8]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #52]\n\t" + "ldr r6, [r12, #52]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #12]\n\t" + "ldr r6, [%[sha256], #16]\n\t" + "ldr r7, [%[sha256], #20]\n\t" + "ldr r8, [%[sha256], #24]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256], #24]\n\t" + "str r9, [%[sha256], #8]\n\t" + /* Round 14 */ + "ldr r5, [%[sha256], #24]\n\t" + "ldr r6, [%[sha256], #28]\n\t" + "ldr r7, [%[sha256]]\n\t" + "ldr r9, [%[sha256], #4]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #56]\n\t" + "ldr r6, [r12, #56]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #8]\n\t" + "ldr r6, [%[sha256], #12]\n\t" + "ldr r7, [%[sha256], #16]\n\t" + "ldr r8, [%[sha256], #20]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #20]\n\t" + "str r9, [%[sha256], #4]\n\t" + /* Round 15 */ + "ldr r5, [%[sha256], #20]\n\t" + "ldr r6, [%[sha256], #24]\n\t" + "ldr r7, [%[sha256], #28]\n\t" + "ldr r9, [%[sha256]]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp, #60]\n\t" + "ldr r6, [r12, #60]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256], #4]\n\t" + "ldr r6, [%[sha256], #8]\n\t" + "ldr r7, [%[sha256], #12]\n\t" + "ldr r8, [%[sha256], #16]\n\t" + "ror r4, r5, #2\n\t" + "eor r11, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r10, r10, r11\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r10, r10, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r10\n\t" + "str r8, [%[sha256], #16]\n\t" + "str r9, [%[sha256]]\n\t" +#else + "mov r3, #4\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_len_start_small_%=: \n\t" + "sub r3, r3, #1\n\t" + /* Round 0 */ + "ldr r5, [%[sha256], #16]\n\t" + "ldr r6, [%[sha256], #20]\n\t" + "ldr r7, [%[sha256], #24]\n\t" + "ldr r9, [%[sha256], #28]\n\t" + "ror r4, r5, #6\n\t" + "eor r6, r6, r7\n\t" + "eor r4, r4, r5, ror #11\n\t" + "and r6, r6, r5\n\t" + "eor r4, r4, r5, ror #25\n\t" + "eor r6, r6, r7\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [sp]\n\t" + "ldr r6, [r12]\n\t" + "add r9, r9, r5\n\t" + "add r9, r9, r6\n\t" + "ldr r5, [%[sha256]]\n\t" + "ldr r6, [%[sha256], #4]\n\t" + "ldr r7, [%[sha256], #8]\n\t" + "ldr r8, [%[sha256], #12]\n\t" + "ror r4, r5, #2\n\t" + "eor r10, r5, r6\n\t" + "eor r4, r4, r5, ror #13\n\t" + "and r11, r11, r10\n\t" + "eor r4, r4, r5, ror #22\n\t" + "eor r11, r11, r6\n\t" + "add r8, r8, r9\n\t" + "add r9, r9, r4\n\t" + "add r9, r9, r11\n\t" + "str r8, [%[sha256], #12]\n\t" + "str r9, [%[sha256], #28]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_0_%=\n\t" + /* Calc new W[0] */ + "ldr r6, [sp, #56]\n\t" + "ldr r7, [sp, #36]\n\t" + "ldr r8, [sp, #4]\n\t" + "ldr r9, [sp]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_0_%=: \n\t" /* Round 1 */ "ldr r5, [%[sha256], #12]\n\t" "ldr r6, [%[sha256], #16]\n\t" @@ -1165,7 +1703,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #4]\n\t" - "ldr r6, [r3, #4]\n\t" + "ldr r6, [r12, #4]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #28]\n\t" @@ -1183,6 +1721,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256], #8]\n\t" "str r9, [%[sha256], #24]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_1_%=\n\t" + /* Calc new W[1] */ + "ldr r6, [sp, #60]\n\t" + "ldr r7, [sp, #40]\n\t" + "ldr r8, [sp, #8]\n\t" + "ldr r9, [sp, #4]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #4]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_1_%=: \n\t" /* Round 2 */ "ldr r5, [%[sha256], #8]\n\t" "ldr r6, [%[sha256], #12]\n\t" @@ -1197,7 +1754,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #8]\n\t" - "ldr r6, [r3, #8]\n\t" + "ldr r6, [r12, #8]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #24]\n\t" @@ -1215,6 +1772,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #4]\n\t" "str r9, [%[sha256], #20]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_2_%=\n\t" + /* Calc new W[2] */ + "ldr r6, [sp]\n\t" + "ldr r7, [sp, #44]\n\t" + "ldr r8, [sp, #12]\n\t" + "ldr r9, [sp, #8]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #8]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_2_%=: \n\t" /* Round 3 */ "ldr r5, [%[sha256], #4]\n\t" "ldr r6, [%[sha256], #8]\n\t" @@ -1229,7 +1805,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #12]\n\t" - "ldr r6, [r3, #12]\n\t" + "ldr r6, [r12, #12]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #20]\n\t" @@ -1247,6 +1823,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256]]\n\t" "str r9, [%[sha256], #16]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_3_%=\n\t" + /* Calc new W[3] */ + "ldr r6, [sp, #4]\n\t" + "ldr r7, [sp, #48]\n\t" + "ldr r8, [sp, #16]\n\t" + "ldr r9, [sp, #12]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #12]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_3_%=: \n\t" /* Round 4 */ "ldr r5, [%[sha256]]\n\t" "ldr r6, [%[sha256], #4]\n\t" @@ -1261,7 +1856,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #16]\n\t" - "ldr r6, [r3, #16]\n\t" + "ldr r6, [r12, #16]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #16]\n\t" @@ -1279,6 +1874,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #28]\n\t" "str r9, [%[sha256], #12]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_4_%=\n\t" + /* Calc new W[4] */ + "ldr r6, [sp, #8]\n\t" + "ldr r7, [sp, #52]\n\t" + "ldr r8, [sp, #20]\n\t" + "ldr r9, [sp, #16]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #16]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_4_%=: \n\t" /* Round 5 */ "ldr r5, [%[sha256], #28]\n\t" "ldr r6, [%[sha256]]\n\t" @@ -1293,7 +1907,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #20]\n\t" - "ldr r6, [r3, #20]\n\t" + "ldr r6, [r12, #20]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #12]\n\t" @@ -1311,6 +1925,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256], #24]\n\t" "str r9, [%[sha256], #8]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_5_%=\n\t" + /* Calc new W[5] */ + "ldr r6, [sp, #12]\n\t" + "ldr r7, [sp, #56]\n\t" + "ldr r8, [sp, #24]\n\t" + "ldr r9, [sp, #20]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #20]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_5_%=: \n\t" /* Round 6 */ "ldr r5, [%[sha256], #24]\n\t" "ldr r6, [%[sha256], #28]\n\t" @@ -1325,7 +1958,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #24]\n\t" - "ldr r6, [r3, #24]\n\t" + "ldr r6, [r12, #24]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #8]\n\t" @@ -1343,6 +1976,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #20]\n\t" "str r9, [%[sha256], #4]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_6_%=\n\t" + /* Calc new W[6] */ + "ldr r6, [sp, #16]\n\t" + "ldr r7, [sp, #60]\n\t" + "ldr r8, [sp, #28]\n\t" + "ldr r9, [sp, #24]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #24]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_6_%=: \n\t" /* Round 7 */ "ldr r5, [%[sha256], #20]\n\t" "ldr r6, [%[sha256], #24]\n\t" @@ -1357,7 +2009,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #28]\n\t" - "ldr r6, [r3, #28]\n\t" + "ldr r6, [r12, #28]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #4]\n\t" @@ -1375,6 +2027,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256], #16]\n\t" "str r9, [%[sha256]]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_7_%=\n\t" + /* Calc new W[7] */ + "ldr r6, [sp, #20]\n\t" + "ldr r7, [sp]\n\t" + "ldr r8, [sp, #32]\n\t" + "ldr r9, [sp, #28]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #28]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_7_%=: \n\t" /* Round 8 */ "ldr r5, [%[sha256], #16]\n\t" "ldr r6, [%[sha256], #20]\n\t" @@ -1389,7 +2060,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #32]\n\t" - "ldr r6, [r3, #32]\n\t" + "ldr r6, [r12, #32]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256]]\n\t" @@ -1407,6 +2078,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #12]\n\t" "str r9, [%[sha256], #28]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_8_%=\n\t" + /* Calc new W[8] */ + "ldr r6, [sp, #24]\n\t" + "ldr r7, [sp, #4]\n\t" + "ldr r8, [sp, #36]\n\t" + "ldr r9, [sp, #32]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #32]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_8_%=: \n\t" /* Round 9 */ "ldr r5, [%[sha256], #12]\n\t" "ldr r6, [%[sha256], #16]\n\t" @@ -1421,7 +2111,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #36]\n\t" - "ldr r6, [r3, #36]\n\t" + "ldr r6, [r12, #36]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #28]\n\t" @@ -1439,6 +2129,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256], #8]\n\t" "str r9, [%[sha256], #24]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_9_%=\n\t" + /* Calc new W[9] */ + "ldr r6, [sp, #28]\n\t" + "ldr r7, [sp, #8]\n\t" + "ldr r8, [sp, #40]\n\t" + "ldr r9, [sp, #36]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #36]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_9_%=: \n\t" /* Round 10 */ "ldr r5, [%[sha256], #8]\n\t" "ldr r6, [%[sha256], #12]\n\t" @@ -1453,7 +2162,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #40]\n\t" - "ldr r6, [r3, #40]\n\t" + "ldr r6, [r12, #40]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #24]\n\t" @@ -1471,6 +2180,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #4]\n\t" "str r9, [%[sha256], #20]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_10_%=\n\t" + /* Calc new W[10] */ + "ldr r6, [sp, #32]\n\t" + "ldr r7, [sp, #12]\n\t" + "ldr r8, [sp, #44]\n\t" + "ldr r9, [sp, #40]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #40]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_10_%=: \n\t" /* Round 11 */ "ldr r5, [%[sha256], #4]\n\t" "ldr r6, [%[sha256], #8]\n\t" @@ -1485,7 +2213,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #44]\n\t" - "ldr r6, [r3, #44]\n\t" + "ldr r6, [r12, #44]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #20]\n\t" @@ -1503,6 +2231,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256]]\n\t" "str r9, [%[sha256], #16]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_11_%=\n\t" + /* Calc new W[11] */ + "ldr r6, [sp, #36]\n\t" + "ldr r7, [sp, #16]\n\t" + "ldr r8, [sp, #48]\n\t" + "ldr r9, [sp, #44]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #44]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_11_%=: \n\t" /* Round 12 */ "ldr r5, [%[sha256]]\n\t" "ldr r6, [%[sha256], #4]\n\t" @@ -1517,7 +2264,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #48]\n\t" - "ldr r6, [r3, #48]\n\t" + "ldr r6, [r12, #48]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #16]\n\t" @@ -1535,6 +2282,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #28]\n\t" "str r9, [%[sha256], #12]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_12_%=\n\t" + /* Calc new W[12] */ + "ldr r6, [sp, #40]\n\t" + "ldr r7, [sp, #20]\n\t" + "ldr r8, [sp, #52]\n\t" + "ldr r9, [sp, #48]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #48]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_12_%=: \n\t" /* Round 13 */ "ldr r5, [%[sha256], #28]\n\t" "ldr r6, [%[sha256]]\n\t" @@ -1549,7 +2315,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #52]\n\t" - "ldr r6, [r3, #52]\n\t" + "ldr r6, [r12, #52]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #12]\n\t" @@ -1567,6 +2333,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256], #24]\n\t" "str r9, [%[sha256], #8]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_13_%=\n\t" + /* Calc new W[13] */ + "ldr r6, [sp, #44]\n\t" + "ldr r7, [sp, #24]\n\t" + "ldr r8, [sp, #56]\n\t" + "ldr r9, [sp, #52]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #52]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_13_%=: \n\t" /* Round 14 */ "ldr r5, [%[sha256], #24]\n\t" "ldr r6, [%[sha256], #28]\n\t" @@ -1581,7 +2366,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #56]\n\t" - "ldr r6, [r3, #56]\n\t" + "ldr r6, [r12, #56]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #8]\n\t" @@ -1599,6 +2384,25 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r11\n\t" "str r8, [%[sha256], #20]\n\t" "str r9, [%[sha256], #4]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_14_%=\n\t" + /* Calc new W[14] */ + "ldr r6, [sp, #48]\n\t" + "ldr r7, [sp, #28]\n\t" + "ldr r8, [sp, #60]\n\t" + "ldr r9, [sp, #56]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #56]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_14_%=: \n\t" /* Round 15 */ "ldr r5, [%[sha256], #20]\n\t" "ldr r6, [%[sha256], #24]\n\t" @@ -1613,7 +2417,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r4\n\t" "add r9, r9, r6\n\t" "ldr r5, [sp, #60]\n\t" - "ldr r6, [r3, #60]\n\t" + "ldr r6, [r12, #60]\n\t" "add r9, r9, r5\n\t" "add r9, r9, r6\n\t" "ldr r5, [%[sha256], #4]\n\t" @@ -1631,6 +2435,29 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "add r9, r9, r10\n\t" "str r8, [%[sha256], #16]\n\t" "str r9, [%[sha256]]\n\t" + "cmp r3, #0\n\t" + "beq L_SHA256_transform_len_blk_end_15_%=\n\t" + /* Calc new W[15] */ + "ldr r6, [sp, #52]\n\t" + "ldr r7, [sp, #32]\n\t" + "ldr r8, [sp]\n\t" + "ldr r9, [sp, #60]\n\t" + "ror r4, r6, #17\n\t" + "ror r5, r8, #7\n\t" + "eor r4, r4, r6, ror #19\n\t" + "eor r5, r5, r8, ror #18\n\t" + "eor r4, r4, r6, lsr #10\n\t" + "eor r5, r5, r8, lsr #3\n\t" + "add r9, r9, r7\n\t" + "add r4, r4, r5\n\t" + "add r9, r9, r4\n\t" + "str r9, [sp, #60]\n\t" + "\n" + "L_SHA256_transform_len_blk_end_15_%=: \n\t" + "cmp r3, #0\n\t" + "add r12, r12, #0x40\n\t" + "bne L_SHA256_transform_len_start_small_%=\n\t" +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ /* Add in digest from start */ #if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7) "ldm r0, {r4, r5}\n\t" @@ -1735,7 +2562,11 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "strd r6, r7, [sp, #88]\n\t" #endif "subs %[len], %[len], #0x40\n\t" - "sub r3, r3, #0xc0\n\t" +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + "sub r12, r12, #0xc0\n\t" +#else + "sub r12, r12, #0x100\n\t" +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ "add %[data], %[data], #0x40\n\t" "bne L_SHA256_transform_len_begin_%=\n\t" "add sp, sp, #0xc0\n\t" diff --git a/wolfcrypt/src/port/arm/thumb2-sha256-asm.S b/wolfcrypt/src/port/arm/thumb2-sha256-asm.S index f1bbc6b007..c0abb8b8b0 100644 --- a/wolfcrypt/src/port/arm/thumb2-sha256-asm.S +++ b/wolfcrypt/src/port/arm/thumb2-sha256-asm.S @@ -110,7 +110,7 @@ L_SHA256_transform_len_k: Transform_Sha256_Len_base: PUSH {r4, r5, r6, r7, r8, r9, r10, r11, lr} SUB sp, sp, #0xc0 - ADR r3, L_SHA256_transform_len_k + ADR r12, L_SHA256_transform_len_k /* Copy digest to add in at end */ LDRD r4, r5, [r0] LDRD r6, r7, [r0, #8] @@ -166,9 +166,10 @@ L_SHA256_transform_len_begin: LDR r11, [r0, #4] LDR r4, [r0, #8] EOR r11, r11, r4 - MOV r12, #0x3 +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + MOV r3, #0x3 /* Start of 16 rounds */ -L_SHA256_transform_len_start: +L_SHA256_transform_len_start_fast: /* Round 0 */ LDR r5, [r0, #16] LDR r6, [r0, #20] @@ -183,7 +184,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp] - LDR r6, [r3] + LDR r6, [r12] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0] @@ -230,7 +231,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #4] - LDR r6, [r3, #4] + LDR r6, [r12, #4] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #28] @@ -277,7 +278,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #8] - LDR r6, [r3, #8] + LDR r6, [r12, #8] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #24] @@ -324,7 +325,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #12] - LDR r6, [r3, #12] + LDR r6, [r12, #12] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #20] @@ -371,7 +372,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #16] - LDR r6, [r3, #16] + LDR r6, [r12, #16] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #16] @@ -418,7 +419,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #20] - LDR r6, [r3, #20] + LDR r6, [r12, #20] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #12] @@ -465,7 +466,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #24] - LDR r6, [r3, #24] + LDR r6, [r12, #24] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #8] @@ -512,7 +513,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #28] - LDR r6, [r3, #28] + LDR r6, [r12, #28] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #4] @@ -559,7 +560,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #32] - LDR r6, [r3, #32] + LDR r6, [r12, #32] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0] @@ -606,7 +607,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #36] - LDR r6, [r3, #36] + LDR r6, [r12, #36] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #28] @@ -653,7 +654,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #40] - LDR r6, [r3, #40] + LDR r6, [r12, #40] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #24] @@ -700,7 +701,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #44] - LDR r6, [r3, #44] + LDR r6, [r12, #44] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #20] @@ -747,7 +748,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #48] - LDR r6, [r3, #48] + LDR r6, [r12, #48] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #16] @@ -794,7 +795,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #52] - LDR r6, [r3, #52] + LDR r6, [r12, #52] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #12] @@ -841,7 +842,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #56] - LDR r6, [r3, #56] + LDR r6, [r12, #56] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #8] @@ -888,7 +889,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #60] - LDR r6, [r3, #60] + LDR r6, [r12, #60] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #4] @@ -921,12 +922,12 @@ L_SHA256_transform_len_start: ADD r4, r4, r5 ADD r9, r9, r4 STR r9, [sp, #60] - ADD r3, r3, #0x40 - SUBS r12, r12, #0x1 + ADD r12, r12, #0x40 + SUBS r3, r3, #0x1 #if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) - BNE L_SHA256_transform_len_start + BNE L_SHA256_transform_len_start_fast #else - BNE.W L_SHA256_transform_len_start + BNE.W L_SHA256_transform_len_start_fast #endif /* Round 0 */ LDR r5, [r0, #16] @@ -942,7 +943,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp] - LDR r6, [r3] + LDR r6, [r12] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0] @@ -974,7 +975,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #4] - LDR r6, [r3, #4] + LDR r6, [r12, #4] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #28] @@ -1006,7 +1007,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #8] - LDR r6, [r3, #8] + LDR r6, [r12, #8] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #24] @@ -1038,7 +1039,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #12] - LDR r6, [r3, #12] + LDR r6, [r12, #12] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #20] @@ -1070,7 +1071,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #16] - LDR r6, [r3, #16] + LDR r6, [r12, #16] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #16] @@ -1102,7 +1103,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #20] - LDR r6, [r3, #20] + LDR r6, [r12, #20] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #12] @@ -1134,7 +1135,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #24] - LDR r6, [r3, #24] + LDR r6, [r12, #24] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #8] @@ -1166,7 +1167,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #28] - LDR r6, [r3, #28] + LDR r6, [r12, #28] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #4] @@ -1198,7 +1199,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #32] - LDR r6, [r3, #32] + LDR r6, [r12, #32] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0] @@ -1230,7 +1231,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #36] - LDR r6, [r3, #36] + LDR r6, [r12, #36] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #28] @@ -1262,7 +1263,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #40] - LDR r6, [r3, #40] + LDR r6, [r12, #40] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #24] @@ -1294,7 +1295,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #44] - LDR r6, [r3, #44] + LDR r6, [r12, #44] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #20] @@ -1326,7 +1327,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #48] - LDR r6, [r3, #48] + LDR r6, [r12, #48] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #16] @@ -1358,7 +1359,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #52] - LDR r6, [r3, #52] + LDR r6, [r12, #52] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #12] @@ -1390,7 +1391,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #56] - LDR r6, [r3, #56] + LDR r6, [r12, #56] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #8] @@ -1422,7 +1423,7 @@ L_SHA256_transform_len_start: ADD r9, r9, r4 ADD r9, r9, r6 LDR r5, [sp, #60] - LDR r6, [r3, #60] + LDR r6, [r12, #60] ADD r9, r9, r5 ADD r9, r9, r6 LDR r5, [r0, #4] @@ -1440,6 +1441,883 @@ L_SHA256_transform_len_start: ADD r9, r9, r10 STR r8, [r0, #16] STR r9, [r0] +#else + MOV r3, #0x4 + /* Start of 16 rounds */ +L_SHA256_transform_len_start_small: + SUB r3, r3, #0x1 + /* Round 0 */ + LDR r5, [r0, #16] + LDR r6, [r0, #20] + LDR r7, [r0, #24] + LDR r9, [r0, #28] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp] + LDR r6, [r12] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0] + LDR r6, [r0, #4] + LDR r7, [r0, #8] + LDR r8, [r0, #12] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #12] + STR r9, [r0, #28] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_0 +#else + BEQ.N L_SHA256_transform_len_blk_end_0 +#endif + /* Calc new W[0] */ + LDR r6, [sp, #56] + LDR r7, [sp, #36] + LDR r8, [sp, #4] + LDR r9, [sp] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp] +L_SHA256_transform_len_blk_end_0: + /* Round 1 */ + LDR r5, [r0, #12] + LDR r6, [r0, #16] + LDR r7, [r0, #20] + LDR r9, [r0, #24] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #4] + LDR r6, [r12, #4] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #28] + LDR r6, [r0] + LDR r7, [r0, #4] + LDR r8, [r0, #8] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0, #8] + STR r9, [r0, #24] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_1 +#else + BEQ.N L_SHA256_transform_len_blk_end_1 +#endif + /* Calc new W[1] */ + LDR r6, [sp, #60] + LDR r7, [sp, #40] + LDR r8, [sp, #8] + LDR r9, [sp, #4] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #4] +L_SHA256_transform_len_blk_end_1: + /* Round 2 */ + LDR r5, [r0, #8] + LDR r6, [r0, #12] + LDR r7, [r0, #16] + LDR r9, [r0, #20] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #8] + LDR r6, [r12, #8] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #24] + LDR r6, [r0, #28] + LDR r7, [r0] + LDR r8, [r0, #4] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #4] + STR r9, [r0, #20] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_2 +#else + BEQ.N L_SHA256_transform_len_blk_end_2 +#endif + /* Calc new W[2] */ + LDR r6, [sp] + LDR r7, [sp, #44] + LDR r8, [sp, #12] + LDR r9, [sp, #8] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #8] +L_SHA256_transform_len_blk_end_2: + /* Round 3 */ + LDR r5, [r0, #4] + LDR r6, [r0, #8] + LDR r7, [r0, #12] + LDR r9, [r0, #16] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #12] + LDR r6, [r12, #12] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #20] + LDR r6, [r0, #24] + LDR r7, [r0, #28] + LDR r8, [r0] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0] + STR r9, [r0, #16] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_3 +#else + BEQ.N L_SHA256_transform_len_blk_end_3 +#endif + /* Calc new W[3] */ + LDR r6, [sp, #4] + LDR r7, [sp, #48] + LDR r8, [sp, #16] + LDR r9, [sp, #12] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #12] +L_SHA256_transform_len_blk_end_3: + /* Round 4 */ + LDR r5, [r0] + LDR r6, [r0, #4] + LDR r7, [r0, #8] + LDR r9, [r0, #12] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #16] + LDR r6, [r12, #16] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #16] + LDR r6, [r0, #20] + LDR r7, [r0, #24] + LDR r8, [r0, #28] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #28] + STR r9, [r0, #12] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_4 +#else + BEQ.N L_SHA256_transform_len_blk_end_4 +#endif + /* Calc new W[4] */ + LDR r6, [sp, #8] + LDR r7, [sp, #52] + LDR r8, [sp, #20] + LDR r9, [sp, #16] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #16] +L_SHA256_transform_len_blk_end_4: + /* Round 5 */ + LDR r5, [r0, #28] + LDR r6, [r0] + LDR r7, [r0, #4] + LDR r9, [r0, #8] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #20] + LDR r6, [r12, #20] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #12] + LDR r6, [r0, #16] + LDR r7, [r0, #20] + LDR r8, [r0, #24] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0, #24] + STR r9, [r0, #8] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_5 +#else + BEQ.N L_SHA256_transform_len_blk_end_5 +#endif + /* Calc new W[5] */ + LDR r6, [sp, #12] + LDR r7, [sp, #56] + LDR r8, [sp, #24] + LDR r9, [sp, #20] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #20] +L_SHA256_transform_len_blk_end_5: + /* Round 6 */ + LDR r5, [r0, #24] + LDR r6, [r0, #28] + LDR r7, [r0] + LDR r9, [r0, #4] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #24] + LDR r6, [r12, #24] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #8] + LDR r6, [r0, #12] + LDR r7, [r0, #16] + LDR r8, [r0, #20] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #20] + STR r9, [r0, #4] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_6 +#else + BEQ.N L_SHA256_transform_len_blk_end_6 +#endif + /* Calc new W[6] */ + LDR r6, [sp, #16] + LDR r7, [sp, #60] + LDR r8, [sp, #28] + LDR r9, [sp, #24] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #24] +L_SHA256_transform_len_blk_end_6: + /* Round 7 */ + LDR r5, [r0, #20] + LDR r6, [r0, #24] + LDR r7, [r0, #28] + LDR r9, [r0] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #28] + LDR r6, [r12, #28] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #4] + LDR r6, [r0, #8] + LDR r7, [r0, #12] + LDR r8, [r0, #16] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0, #16] + STR r9, [r0] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_7 +#else + BEQ.N L_SHA256_transform_len_blk_end_7 +#endif + /* Calc new W[7] */ + LDR r6, [sp, #20] + LDR r7, [sp] + LDR r8, [sp, #32] + LDR r9, [sp, #28] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #28] +L_SHA256_transform_len_blk_end_7: + /* Round 8 */ + LDR r5, [r0, #16] + LDR r6, [r0, #20] + LDR r7, [r0, #24] + LDR r9, [r0, #28] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #32] + LDR r6, [r12, #32] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0] + LDR r6, [r0, #4] + LDR r7, [r0, #8] + LDR r8, [r0, #12] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #12] + STR r9, [r0, #28] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_8 +#else + BEQ.N L_SHA256_transform_len_blk_end_8 +#endif + /* Calc new W[8] */ + LDR r6, [sp, #24] + LDR r7, [sp, #4] + LDR r8, [sp, #36] + LDR r9, [sp, #32] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #32] +L_SHA256_transform_len_blk_end_8: + /* Round 9 */ + LDR r5, [r0, #12] + LDR r6, [r0, #16] + LDR r7, [r0, #20] + LDR r9, [r0, #24] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #36] + LDR r6, [r12, #36] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #28] + LDR r6, [r0] + LDR r7, [r0, #4] + LDR r8, [r0, #8] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0, #8] + STR r9, [r0, #24] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_9 +#else + BEQ.N L_SHA256_transform_len_blk_end_9 +#endif + /* Calc new W[9] */ + LDR r6, [sp, #28] + LDR r7, [sp, #8] + LDR r8, [sp, #40] + LDR r9, [sp, #36] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #36] +L_SHA256_transform_len_blk_end_9: + /* Round 10 */ + LDR r5, [r0, #8] + LDR r6, [r0, #12] + LDR r7, [r0, #16] + LDR r9, [r0, #20] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #40] + LDR r6, [r12, #40] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #24] + LDR r6, [r0, #28] + LDR r7, [r0] + LDR r8, [r0, #4] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #4] + STR r9, [r0, #20] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_10 +#else + BEQ.N L_SHA256_transform_len_blk_end_10 +#endif + /* Calc new W[10] */ + LDR r6, [sp, #32] + LDR r7, [sp, #12] + LDR r8, [sp, #44] + LDR r9, [sp, #40] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #40] +L_SHA256_transform_len_blk_end_10: + /* Round 11 */ + LDR r5, [r0, #4] + LDR r6, [r0, #8] + LDR r7, [r0, #12] + LDR r9, [r0, #16] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #44] + LDR r6, [r12, #44] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #20] + LDR r6, [r0, #24] + LDR r7, [r0, #28] + LDR r8, [r0] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0] + STR r9, [r0, #16] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_11 +#else + BEQ.N L_SHA256_transform_len_blk_end_11 +#endif + /* Calc new W[11] */ + LDR r6, [sp, #36] + LDR r7, [sp, #16] + LDR r8, [sp, #48] + LDR r9, [sp, #44] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #44] +L_SHA256_transform_len_blk_end_11: + /* Round 12 */ + LDR r5, [r0] + LDR r6, [r0, #4] + LDR r7, [r0, #8] + LDR r9, [r0, #12] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #48] + LDR r6, [r12, #48] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #16] + LDR r6, [r0, #20] + LDR r7, [r0, #24] + LDR r8, [r0, #28] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #28] + STR r9, [r0, #12] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_12 +#else + BEQ.N L_SHA256_transform_len_blk_end_12 +#endif + /* Calc new W[12] */ + LDR r6, [sp, #40] + LDR r7, [sp, #20] + LDR r8, [sp, #52] + LDR r9, [sp, #48] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #48] +L_SHA256_transform_len_blk_end_12: + /* Round 13 */ + LDR r5, [r0, #28] + LDR r6, [r0] + LDR r7, [r0, #4] + LDR r9, [r0, #8] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #52] + LDR r6, [r12, #52] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #12] + LDR r6, [r0, #16] + LDR r7, [r0, #20] + LDR r8, [r0, #24] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0, #24] + STR r9, [r0, #8] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_13 +#else + BEQ.N L_SHA256_transform_len_blk_end_13 +#endif + /* Calc new W[13] */ + LDR r6, [sp, #44] + LDR r7, [sp, #24] + LDR r8, [sp, #56] + LDR r9, [sp, #52] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #52] +L_SHA256_transform_len_blk_end_13: + /* Round 14 */ + LDR r5, [r0, #24] + LDR r6, [r0, #28] + LDR r7, [r0] + LDR r9, [r0, #4] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #56] + LDR r6, [r12, #56] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #8] + LDR r6, [r0, #12] + LDR r7, [r0, #16] + LDR r8, [r0, #20] + ROR r4, r5, #2 + EOR r10, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r11, r11, r10 + EOR r4, r4, r5, ROR #22 + EOR r11, r11, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r11 + STR r8, [r0, #20] + STR r9, [r0, #4] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_14 +#else + BEQ.N L_SHA256_transform_len_blk_end_14 +#endif + /* Calc new W[14] */ + LDR r6, [sp, #48] + LDR r7, [sp, #28] + LDR r8, [sp, #60] + LDR r9, [sp, #56] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #56] +L_SHA256_transform_len_blk_end_14: + /* Round 15 */ + LDR r5, [r0, #20] + LDR r6, [r0, #24] + LDR r7, [r0, #28] + LDR r9, [r0] + ROR r4, r5, #6 + EOR r6, r6, r7 + EOR r4, r4, r5, ROR #11 + AND r6, r6, r5 + EOR r4, r4, r5, ROR #25 + EOR r6, r6, r7 + ADD r9, r9, r4 + ADD r9, r9, r6 + LDR r5, [sp, #60] + LDR r6, [r12, #60] + ADD r9, r9, r5 + ADD r9, r9, r6 + LDR r5, [r0, #4] + LDR r6, [r0, #8] + LDR r7, [r0, #12] + LDR r8, [r0, #16] + ROR r4, r5, #2 + EOR r11, r5, r6 + EOR r4, r4, r5, ROR #13 + AND r10, r10, r11 + EOR r4, r4, r5, ROR #22 + EOR r10, r10, r6 + ADD r8, r8, r9 + ADD r9, r9, r4 + ADD r9, r9, r10 + STR r8, [r0, #16] + STR r9, [r0] + CMP r3, #0x0 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BEQ L_SHA256_transform_len_blk_end_15 +#else + BEQ.N L_SHA256_transform_len_blk_end_15 +#endif + /* Calc new W[15] */ + LDR r6, [sp, #52] + LDR r7, [sp, #32] + LDR r8, [sp] + LDR r9, [sp, #60] + ROR r4, r6, #17 + ROR r5, r8, #7 + EOR r4, r4, r6, ROR #19 + EOR r5, r5, r8, ROR #18 + EOR r4, r4, r6, LSR #10 + EOR r5, r5, r8, LSR #3 + ADD r9, r9, r7 + ADD r4, r4, r5 + ADD r9, r9, r4 + STR r9, [sp, #60] +L_SHA256_transform_len_blk_end_15: + CMP r3, #0x0 + ADD r12, r12, #0x40 +#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) + BNE L_SHA256_transform_len_start_small +#else + BNE.W L_SHA256_transform_len_start_small +#endif +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ /* Add in digest from start */ LDRD r4, r5, [r0] LDRD r6, r7, [r0, #8] @@ -1466,7 +2344,11 @@ L_SHA256_transform_len_start: STRD r4, r5, [sp, #80] STRD r6, r7, [sp, #88] SUBS r2, r2, #0x40 - SUB r3, r3, #0xc0 +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + SUB r12, r12, #0xc0 +#else + SUB r12, r12, #0x100 +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ ADD r1, r1, #0x40 #if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__) BNE L_SHA256_transform_len_begin @@ -1475,7 +2357,7 @@ L_SHA256_transform_len_start: #endif ADD sp, sp, #0xc0 POP {r4, r5, r6, r7, r8, r9, r10, r11, pc} - /* Cycle Count = 1874 */ + /* Cycle Count = 2954 */ .size Transform_Sha256_Len_base,.-Transform_Sha256_Len_base #endif /* WOLFSSL_ARMASM_NO_NEON */ #endif /* !NO_SHA256 */ diff --git a/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c b/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c index 846f9fbc03..211210227b 100644 --- a/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c +++ b/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c @@ -89,7 +89,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, __asm__ __volatile__ ( "SUB sp, sp, #0xc0\n\t" - "MOV r3, %[L_SHA256_transform_len_k]\n\t" + "MOV r12, %[L_SHA256_transform_len_k]\n\t" /* Copy digest to add in at end */ "LDRD r4, r5, [%[sha256]]\n\t" "LDRD r6, r7, [%[sha256], #8]\n\t" @@ -150,13 +150,14 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "LDR r11, [%[sha256], #4]\n\t" "LDR r4, [%[sha256], #8]\n\t" "EOR r11, r11, r4\n\t" - "MOV r12, #0x3\n\t" +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + "MOV r3, #0x3\n\t" /* Start of 16 rounds */ "\n" #if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) - "L_SHA256_transform_len_start:\n\t" + "L_SHA256_transform_len_start_fast:\n\t" #else - "L_SHA256_transform_len_start_%=:\n\t" + "L_SHA256_transform_len_start_fast_%=:\n\t" #endif /* Round 0 */ "LDR r5, [%[sha256], #16]\n\t" @@ -172,7 +173,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp]\n\t" - "LDR r6, [r3]\n\t" + "LDR r6, [r12]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256]]\n\t" @@ -219,7 +220,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #4]\n\t" - "LDR r6, [r3, #4]\n\t" + "LDR r6, [r12, #4]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #28]\n\t" @@ -266,7 +267,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #8]\n\t" - "LDR r6, [r3, #8]\n\t" + "LDR r6, [r12, #8]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #24]\n\t" @@ -313,7 +314,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #12]\n\t" - "LDR r6, [r3, #12]\n\t" + "LDR r6, [r12, #12]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #20]\n\t" @@ -360,7 +361,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #16]\n\t" - "LDR r6, [r3, #16]\n\t" + "LDR r6, [r12, #16]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #16]\n\t" @@ -407,7 +408,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #20]\n\t" - "LDR r6, [r3, #20]\n\t" + "LDR r6, [r12, #20]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #12]\n\t" @@ -454,7 +455,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #24]\n\t" - "LDR r6, [r3, #24]\n\t" + "LDR r6, [r12, #24]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #8]\n\t" @@ -501,7 +502,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #28]\n\t" - "LDR r6, [r3, #28]\n\t" + "LDR r6, [r12, #28]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #4]\n\t" @@ -548,7 +549,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #32]\n\t" - "LDR r6, [r3, #32]\n\t" + "LDR r6, [r12, #32]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256]]\n\t" @@ -595,7 +596,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #36]\n\t" - "LDR r6, [r3, #36]\n\t" + "LDR r6, [r12, #36]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #28]\n\t" @@ -642,7 +643,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #40]\n\t" - "LDR r6, [r3, #40]\n\t" + "LDR r6, [r12, #40]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #24]\n\t" @@ -689,7 +690,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #44]\n\t" - "LDR r6, [r3, #44]\n\t" + "LDR r6, [r12, #44]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #20]\n\t" @@ -736,7 +737,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #48]\n\t" - "LDR r6, [r3, #48]\n\t" + "LDR r6, [r12, #48]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #16]\n\t" @@ -783,7 +784,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #52]\n\t" - "LDR r6, [r3, #52]\n\t" + "LDR r6, [r12, #52]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #12]\n\t" @@ -830,7 +831,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #56]\n\t" - "LDR r6, [r3, #56]\n\t" + "LDR r6, [r12, #56]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #8]\n\t" @@ -877,7 +878,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #60]\n\t" - "LDR r6, [r3, #60]\n\t" + "LDR r6, [r12, #60]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #4]\n\t" @@ -910,14 +911,14 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r4, r4, r5\n\t" "ADD r9, r9, r4\n\t" "STR r9, [sp, #60]\n\t" - "ADD r3, r3, #0x40\n\t" - "SUBS r12, r12, #0x1\n\t" + "ADD r12, r12, #0x40\n\t" + "SUBS r3, r3, #0x1\n\t" #if defined(__GNUC__) - "BNE L_SHA256_transform_len_start_%=\n\t" + "BNE L_SHA256_transform_len_start_fast_%=\n\t" #elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) - "BNE.W L_SHA256_transform_len_start\n\t" + "BNE.W L_SHA256_transform_len_start_fast\n\t" #else - "BNE.W L_SHA256_transform_len_start_%=\n\t" + "BNE.W L_SHA256_transform_len_start_fast_%=\n\t" #endif /* Round 0 */ "LDR r5, [%[sha256], #16]\n\t" @@ -933,7 +934,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp]\n\t" - "LDR r6, [r3]\n\t" + "LDR r6, [r12]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256]]\n\t" @@ -965,7 +966,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #4]\n\t" - "LDR r6, [r3, #4]\n\t" + "LDR r6, [r12, #4]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #28]\n\t" @@ -997,7 +998,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #8]\n\t" - "LDR r6, [r3, #8]\n\t" + "LDR r6, [r12, #8]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #24]\n\t" @@ -1029,7 +1030,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #12]\n\t" - "LDR r6, [r3, #12]\n\t" + "LDR r6, [r12, #12]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #20]\n\t" @@ -1061,7 +1062,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #16]\n\t" - "LDR r6, [r3, #16]\n\t" + "LDR r6, [r12, #16]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #16]\n\t" @@ -1093,7 +1094,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #20]\n\t" - "LDR r6, [r3, #20]\n\t" + "LDR r6, [r12, #20]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #12]\n\t" @@ -1125,7 +1126,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #24]\n\t" - "LDR r6, [r3, #24]\n\t" + "LDR r6, [r12, #24]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #8]\n\t" @@ -1157,7 +1158,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #28]\n\t" - "LDR r6, [r3, #28]\n\t" + "LDR r6, [r12, #28]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #4]\n\t" @@ -1189,7 +1190,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #32]\n\t" - "LDR r6, [r3, #32]\n\t" + "LDR r6, [r12, #32]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256]]\n\t" @@ -1221,7 +1222,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #36]\n\t" - "LDR r6, [r3, #36]\n\t" + "LDR r6, [r12, #36]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #28]\n\t" @@ -1253,7 +1254,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #40]\n\t" - "LDR r6, [r3, #40]\n\t" + "LDR r6, [r12, #40]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #24]\n\t" @@ -1285,7 +1286,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #44]\n\t" - "LDR r6, [r3, #44]\n\t" + "LDR r6, [r12, #44]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #20]\n\t" @@ -1317,7 +1318,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #48]\n\t" - "LDR r6, [r3, #48]\n\t" + "LDR r6, [r12, #48]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #16]\n\t" @@ -1349,7 +1350,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #52]\n\t" - "LDR r6, [r3, #52]\n\t" + "LDR r6, [r12, #52]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #12]\n\t" @@ -1381,7 +1382,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #56]\n\t" - "LDR r6, [r3, #56]\n\t" + "LDR r6, [r12, #56]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #8]\n\t" @@ -1413,7 +1414,7 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r4\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [sp, #60]\n\t" - "LDR r6, [r3, #60]\n\t" + "LDR r6, [r12, #60]\n\t" "ADD r9, r9, r5\n\t" "ADD r9, r9, r6\n\t" "LDR r5, [%[sha256], #4]\n\t" @@ -1431,6 +1432,1002 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "ADD r9, r9, r10\n\t" "STR r8, [%[sha256], #16]\n\t" "STR r9, [%[sha256]]\n\t" +#else + "MOV r3, #0x4\n\t" + /* Start of 16 rounds */ + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_start_small:\n\t" +#else + "L_SHA256_transform_len_start_small_%=:\n\t" +#endif + "SUB r3, r3, #0x1\n\t" + /* Round 0 */ + "LDR r5, [%[sha256], #16]\n\t" + "LDR r6, [%[sha256], #20]\n\t" + "LDR r7, [%[sha256], #24]\n\t" + "LDR r9, [%[sha256], #28]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp]\n\t" + "LDR r6, [r12]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256]]\n\t" + "LDR r6, [%[sha256], #4]\n\t" + "LDR r7, [%[sha256], #8]\n\t" + "LDR r8, [%[sha256], #12]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #12]\n\t" + "STR r9, [%[sha256], #28]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_0_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_0\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_0_%=\n\t" +#endif + /* Calc new W[0] */ + "LDR r6, [sp, #56]\n\t" + "LDR r7, [sp, #36]\n\t" + "LDR r8, [sp, #4]\n\t" + "LDR r9, [sp]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_0:\n\t" +#else + "L_SHA256_transform_len_blk_end_0_%=:\n\t" +#endif + /* Round 1 */ + "LDR r5, [%[sha256], #12]\n\t" + "LDR r6, [%[sha256], #16]\n\t" + "LDR r7, [%[sha256], #20]\n\t" + "LDR r9, [%[sha256], #24]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #4]\n\t" + "LDR r6, [r12, #4]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #28]\n\t" + "LDR r6, [%[sha256]]\n\t" + "LDR r7, [%[sha256], #4]\n\t" + "LDR r8, [%[sha256], #8]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256], #8]\n\t" + "STR r9, [%[sha256], #24]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_1_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_1\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_1_%=\n\t" +#endif + /* Calc new W[1] */ + "LDR r6, [sp, #60]\n\t" + "LDR r7, [sp, #40]\n\t" + "LDR r8, [sp, #8]\n\t" + "LDR r9, [sp, #4]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #4]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_1:\n\t" +#else + "L_SHA256_transform_len_blk_end_1_%=:\n\t" +#endif + /* Round 2 */ + "LDR r5, [%[sha256], #8]\n\t" + "LDR r6, [%[sha256], #12]\n\t" + "LDR r7, [%[sha256], #16]\n\t" + "LDR r9, [%[sha256], #20]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #8]\n\t" + "LDR r6, [r12, #8]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #24]\n\t" + "LDR r6, [%[sha256], #28]\n\t" + "LDR r7, [%[sha256]]\n\t" + "LDR r8, [%[sha256], #4]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #4]\n\t" + "STR r9, [%[sha256], #20]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_2_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_2\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_2_%=\n\t" +#endif + /* Calc new W[2] */ + "LDR r6, [sp]\n\t" + "LDR r7, [sp, #44]\n\t" + "LDR r8, [sp, #12]\n\t" + "LDR r9, [sp, #8]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #8]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_2:\n\t" +#else + "L_SHA256_transform_len_blk_end_2_%=:\n\t" +#endif + /* Round 3 */ + "LDR r5, [%[sha256], #4]\n\t" + "LDR r6, [%[sha256], #8]\n\t" + "LDR r7, [%[sha256], #12]\n\t" + "LDR r9, [%[sha256], #16]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #12]\n\t" + "LDR r6, [r12, #12]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #20]\n\t" + "LDR r6, [%[sha256], #24]\n\t" + "LDR r7, [%[sha256], #28]\n\t" + "LDR r8, [%[sha256]]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256]]\n\t" + "STR r9, [%[sha256], #16]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_3_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_3\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_3_%=\n\t" +#endif + /* Calc new W[3] */ + "LDR r6, [sp, #4]\n\t" + "LDR r7, [sp, #48]\n\t" + "LDR r8, [sp, #16]\n\t" + "LDR r9, [sp, #12]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #12]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_3:\n\t" +#else + "L_SHA256_transform_len_blk_end_3_%=:\n\t" +#endif + /* Round 4 */ + "LDR r5, [%[sha256]]\n\t" + "LDR r6, [%[sha256], #4]\n\t" + "LDR r7, [%[sha256], #8]\n\t" + "LDR r9, [%[sha256], #12]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #16]\n\t" + "LDR r6, [r12, #16]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #16]\n\t" + "LDR r6, [%[sha256], #20]\n\t" + "LDR r7, [%[sha256], #24]\n\t" + "LDR r8, [%[sha256], #28]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #28]\n\t" + "STR r9, [%[sha256], #12]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_4_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_4\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_4_%=\n\t" +#endif + /* Calc new W[4] */ + "LDR r6, [sp, #8]\n\t" + "LDR r7, [sp, #52]\n\t" + "LDR r8, [sp, #20]\n\t" + "LDR r9, [sp, #16]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #16]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_4:\n\t" +#else + "L_SHA256_transform_len_blk_end_4_%=:\n\t" +#endif + /* Round 5 */ + "LDR r5, [%[sha256], #28]\n\t" + "LDR r6, [%[sha256]]\n\t" + "LDR r7, [%[sha256], #4]\n\t" + "LDR r9, [%[sha256], #8]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #20]\n\t" + "LDR r6, [r12, #20]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #12]\n\t" + "LDR r6, [%[sha256], #16]\n\t" + "LDR r7, [%[sha256], #20]\n\t" + "LDR r8, [%[sha256], #24]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256], #24]\n\t" + "STR r9, [%[sha256], #8]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_5_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_5\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_5_%=\n\t" +#endif + /* Calc new W[5] */ + "LDR r6, [sp, #12]\n\t" + "LDR r7, [sp, #56]\n\t" + "LDR r8, [sp, #24]\n\t" + "LDR r9, [sp, #20]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #20]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_5:\n\t" +#else + "L_SHA256_transform_len_blk_end_5_%=:\n\t" +#endif + /* Round 6 */ + "LDR r5, [%[sha256], #24]\n\t" + "LDR r6, [%[sha256], #28]\n\t" + "LDR r7, [%[sha256]]\n\t" + "LDR r9, [%[sha256], #4]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #24]\n\t" + "LDR r6, [r12, #24]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #8]\n\t" + "LDR r6, [%[sha256], #12]\n\t" + "LDR r7, [%[sha256], #16]\n\t" + "LDR r8, [%[sha256], #20]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #20]\n\t" + "STR r9, [%[sha256], #4]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_6_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_6\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_6_%=\n\t" +#endif + /* Calc new W[6] */ + "LDR r6, [sp, #16]\n\t" + "LDR r7, [sp, #60]\n\t" + "LDR r8, [sp, #28]\n\t" + "LDR r9, [sp, #24]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #24]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_6:\n\t" +#else + "L_SHA256_transform_len_blk_end_6_%=:\n\t" +#endif + /* Round 7 */ + "LDR r5, [%[sha256], #20]\n\t" + "LDR r6, [%[sha256], #24]\n\t" + "LDR r7, [%[sha256], #28]\n\t" + "LDR r9, [%[sha256]]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #28]\n\t" + "LDR r6, [r12, #28]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #4]\n\t" + "LDR r6, [%[sha256], #8]\n\t" + "LDR r7, [%[sha256], #12]\n\t" + "LDR r8, [%[sha256], #16]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256], #16]\n\t" + "STR r9, [%[sha256]]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_7_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_7\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_7_%=\n\t" +#endif + /* Calc new W[7] */ + "LDR r6, [sp, #20]\n\t" + "LDR r7, [sp]\n\t" + "LDR r8, [sp, #32]\n\t" + "LDR r9, [sp, #28]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #28]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_7:\n\t" +#else + "L_SHA256_transform_len_blk_end_7_%=:\n\t" +#endif + /* Round 8 */ + "LDR r5, [%[sha256], #16]\n\t" + "LDR r6, [%[sha256], #20]\n\t" + "LDR r7, [%[sha256], #24]\n\t" + "LDR r9, [%[sha256], #28]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #32]\n\t" + "LDR r6, [r12, #32]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256]]\n\t" + "LDR r6, [%[sha256], #4]\n\t" + "LDR r7, [%[sha256], #8]\n\t" + "LDR r8, [%[sha256], #12]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #12]\n\t" + "STR r9, [%[sha256], #28]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_8_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_8\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_8_%=\n\t" +#endif + /* Calc new W[8] */ + "LDR r6, [sp, #24]\n\t" + "LDR r7, [sp, #4]\n\t" + "LDR r8, [sp, #36]\n\t" + "LDR r9, [sp, #32]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #32]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_8:\n\t" +#else + "L_SHA256_transform_len_blk_end_8_%=:\n\t" +#endif + /* Round 9 */ + "LDR r5, [%[sha256], #12]\n\t" + "LDR r6, [%[sha256], #16]\n\t" + "LDR r7, [%[sha256], #20]\n\t" + "LDR r9, [%[sha256], #24]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #36]\n\t" + "LDR r6, [r12, #36]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #28]\n\t" + "LDR r6, [%[sha256]]\n\t" + "LDR r7, [%[sha256], #4]\n\t" + "LDR r8, [%[sha256], #8]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256], #8]\n\t" + "STR r9, [%[sha256], #24]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_9_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_9\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_9_%=\n\t" +#endif + /* Calc new W[9] */ + "LDR r6, [sp, #28]\n\t" + "LDR r7, [sp, #8]\n\t" + "LDR r8, [sp, #40]\n\t" + "LDR r9, [sp, #36]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #36]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_9:\n\t" +#else + "L_SHA256_transform_len_blk_end_9_%=:\n\t" +#endif + /* Round 10 */ + "LDR r5, [%[sha256], #8]\n\t" + "LDR r6, [%[sha256], #12]\n\t" + "LDR r7, [%[sha256], #16]\n\t" + "LDR r9, [%[sha256], #20]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #40]\n\t" + "LDR r6, [r12, #40]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #24]\n\t" + "LDR r6, [%[sha256], #28]\n\t" + "LDR r7, [%[sha256]]\n\t" + "LDR r8, [%[sha256], #4]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #4]\n\t" + "STR r9, [%[sha256], #20]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_10_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_10\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_10_%=\n\t" +#endif + /* Calc new W[10] */ + "LDR r6, [sp, #32]\n\t" + "LDR r7, [sp, #12]\n\t" + "LDR r8, [sp, #44]\n\t" + "LDR r9, [sp, #40]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #40]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_10:\n\t" +#else + "L_SHA256_transform_len_blk_end_10_%=:\n\t" +#endif + /* Round 11 */ + "LDR r5, [%[sha256], #4]\n\t" + "LDR r6, [%[sha256], #8]\n\t" + "LDR r7, [%[sha256], #12]\n\t" + "LDR r9, [%[sha256], #16]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #44]\n\t" + "LDR r6, [r12, #44]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #20]\n\t" + "LDR r6, [%[sha256], #24]\n\t" + "LDR r7, [%[sha256], #28]\n\t" + "LDR r8, [%[sha256]]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256]]\n\t" + "STR r9, [%[sha256], #16]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_11_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_11\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_11_%=\n\t" +#endif + /* Calc new W[11] */ + "LDR r6, [sp, #36]\n\t" + "LDR r7, [sp, #16]\n\t" + "LDR r8, [sp, #48]\n\t" + "LDR r9, [sp, #44]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #44]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_11:\n\t" +#else + "L_SHA256_transform_len_blk_end_11_%=:\n\t" +#endif + /* Round 12 */ + "LDR r5, [%[sha256]]\n\t" + "LDR r6, [%[sha256], #4]\n\t" + "LDR r7, [%[sha256], #8]\n\t" + "LDR r9, [%[sha256], #12]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #48]\n\t" + "LDR r6, [r12, #48]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #16]\n\t" + "LDR r6, [%[sha256], #20]\n\t" + "LDR r7, [%[sha256], #24]\n\t" + "LDR r8, [%[sha256], #28]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #28]\n\t" + "STR r9, [%[sha256], #12]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_12_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_12\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_12_%=\n\t" +#endif + /* Calc new W[12] */ + "LDR r6, [sp, #40]\n\t" + "LDR r7, [sp, #20]\n\t" + "LDR r8, [sp, #52]\n\t" + "LDR r9, [sp, #48]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #48]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_12:\n\t" +#else + "L_SHA256_transform_len_blk_end_12_%=:\n\t" +#endif + /* Round 13 */ + "LDR r5, [%[sha256], #28]\n\t" + "LDR r6, [%[sha256]]\n\t" + "LDR r7, [%[sha256], #4]\n\t" + "LDR r9, [%[sha256], #8]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #52]\n\t" + "LDR r6, [r12, #52]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #12]\n\t" + "LDR r6, [%[sha256], #16]\n\t" + "LDR r7, [%[sha256], #20]\n\t" + "LDR r8, [%[sha256], #24]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256], #24]\n\t" + "STR r9, [%[sha256], #8]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_13_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_13\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_13_%=\n\t" +#endif + /* Calc new W[13] */ + "LDR r6, [sp, #44]\n\t" + "LDR r7, [sp, #24]\n\t" + "LDR r8, [sp, #56]\n\t" + "LDR r9, [sp, #52]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #52]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_13:\n\t" +#else + "L_SHA256_transform_len_blk_end_13_%=:\n\t" +#endif + /* Round 14 */ + "LDR r5, [%[sha256], #24]\n\t" + "LDR r6, [%[sha256], #28]\n\t" + "LDR r7, [%[sha256]]\n\t" + "LDR r9, [%[sha256], #4]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #56]\n\t" + "LDR r6, [r12, #56]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #8]\n\t" + "LDR r6, [%[sha256], #12]\n\t" + "LDR r7, [%[sha256], #16]\n\t" + "LDR r8, [%[sha256], #20]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r10, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r11, r11, r10\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r11, r11, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r11\n\t" + "STR r8, [%[sha256], #20]\n\t" + "STR r9, [%[sha256], #4]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_14_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_14\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_14_%=\n\t" +#endif + /* Calc new W[14] */ + "LDR r6, [sp, #48]\n\t" + "LDR r7, [sp, #28]\n\t" + "LDR r8, [sp, #60]\n\t" + "LDR r9, [sp, #56]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #56]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_14:\n\t" +#else + "L_SHA256_transform_len_blk_end_14_%=:\n\t" +#endif + /* Round 15 */ + "LDR r5, [%[sha256], #20]\n\t" + "LDR r6, [%[sha256], #24]\n\t" + "LDR r7, [%[sha256], #28]\n\t" + "LDR r9, [%[sha256]]\n\t" + "ROR r4, r5, #6\n\t" + "EOR r6, r6, r7\n\t" + "EOR r4, r4, r5, ROR #11\n\t" + "AND r6, r6, r5\n\t" + "EOR r4, r4, r5, ROR #25\n\t" + "EOR r6, r6, r7\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [sp, #60]\n\t" + "LDR r6, [r12, #60]\n\t" + "ADD r9, r9, r5\n\t" + "ADD r9, r9, r6\n\t" + "LDR r5, [%[sha256], #4]\n\t" + "LDR r6, [%[sha256], #8]\n\t" + "LDR r7, [%[sha256], #12]\n\t" + "LDR r8, [%[sha256], #16]\n\t" + "ROR r4, r5, #2\n\t" + "EOR r11, r5, r6\n\t" + "EOR r4, r4, r5, ROR #13\n\t" + "AND r10, r10, r11\n\t" + "EOR r4, r4, r5, ROR #22\n\t" + "EOR r10, r10, r6\n\t" + "ADD r8, r8, r9\n\t" + "ADD r9, r9, r4\n\t" + "ADD r9, r9, r10\n\t" + "STR r8, [%[sha256], #16]\n\t" + "STR r9, [%[sha256]]\n\t" + "CMP r3, #0x0\n\t" +#if defined(__GNUC__) + "BEQ L_SHA256_transform_len_blk_end_15_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BEQ.N L_SHA256_transform_len_blk_end_15\n\t" +#else + "BEQ.N L_SHA256_transform_len_blk_end_15_%=\n\t" +#endif + /* Calc new W[15] */ + "LDR r6, [sp, #52]\n\t" + "LDR r7, [sp, #32]\n\t" + "LDR r8, [sp]\n\t" + "LDR r9, [sp, #60]\n\t" + "ROR r4, r6, #17\n\t" + "ROR r5, r8, #7\n\t" + "EOR r4, r4, r6, ROR #19\n\t" + "EOR r5, r5, r8, ROR #18\n\t" + "EOR r4, r4, r6, LSR #10\n\t" + "EOR r5, r5, r8, LSR #3\n\t" + "ADD r9, r9, r7\n\t" + "ADD r4, r4, r5\n\t" + "ADD r9, r9, r4\n\t" + "STR r9, [sp, #60]\n\t" + "\n" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "L_SHA256_transform_len_blk_end_15:\n\t" +#else + "L_SHA256_transform_len_blk_end_15_%=:\n\t" +#endif + "CMP r3, #0x0\n\t" + "ADD r12, r12, #0x40\n\t" +#if defined(__GNUC__) + "BNE L_SHA256_transform_len_start_small_%=\n\t" +#elif defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) + "BNE.W L_SHA256_transform_len_start_small\n\t" +#else + "BNE.W L_SHA256_transform_len_start_small_%=\n\t" +#endif +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ /* Add in digest from start */ "LDRD r4, r5, [%[sha256]]\n\t" "LDRD r6, r7, [%[sha256], #8]\n\t" @@ -1457,7 +2454,11 @@ WC_OMIT_FRAME_POINTER void Transform_Sha256_Len_base(wc_Sha256* sha256, "STRD r4, r5, [sp, #80]\n\t" "STRD r6, r7, [sp, #88]\n\t" "SUBS %[len], %[len], #0x40\n\t" - "SUB r3, r3, #0xc0\n\t" +#ifndef WOLFSSL_ARMASM_SHA256_SMALL + "SUB r12, r12, #0xc0\n\t" +#else + "SUB r12, r12, #0x100\n\t" +#endif /* !WOLFSSL_ARMASM_SHA256_SMALL */ "ADD %[data], %[data], #0x40\n\t" #if defined(__GNUC__) "BNE L_SHA256_transform_len_begin_%=\n\t"