From c39f1fe72159b521d0d06358ebb6dbaf7041a3b1 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Wed, 18 Jun 2025 18:57:17 +1000 Subject: [PATCH 1/2] PPC 32 ASM: SHA-256 Pure and inline ASM for the PowerPC 32-bit. --- configure.ac | 56 + src/include.am | 25 + wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S | 1299 +++++++++++++++++ wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c | 1253 ++++++++++++++++ wolfcrypt/src/sha256.c | 31 + 5 files changed, 2664 insertions(+) create mode 100644 wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S create mode 100644 wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c diff --git a/configure.ac b/configure.ac index a6765405c..84e6bcbc6 100644 --- a/configure.ac +++ b/configure.ac @@ -1211,6 +1211,11 @@ then AC_MSG_ERROR([--enable-all-asm is incompatible with --disable-armasm]) fi + if test "$enable_ppc32_asm" = "no" + then + AC_MSG_ERROR([--enable-all-asm is incompatible with --disable-ppc32-asm]) + fi + case "$host_cpu" in *x86_64*|*amd64*) if test "$enable_intelasm" = "" @@ -1240,6 +1245,14 @@ then fi fi ;; + *powerpc64*) + ;; + *powerpc*) + if test "$enable_ppc32_asm" = "" + then + enable_ppc32_asm=yes + fi + ;; esac fi @@ -3488,6 +3501,42 @@ do done +# PPC32 Assembly +AC_ARG_ENABLE([ppc32-asm], + [AS_HELP_STRING([--enable-ppc32-asm],[Enable wolfSSL PowerPC 32-bit ASM support (default: disabled).])], + [ ENABLED_PPC32_ASM=$enableval ], + [ ENABLED_PPC32_ASM=no ] + ) + + +if test "$ENABLED_PPC32_ASM" != "no" && test "$ENABLED_ASM" = "yes" +then + ENABLED_PPC32_ASM_OPTS=$ENABLED_PPC32_ASM + for v in `echo $ENABLED_PPC32_ASM_OPTS | tr "," " "` + do + case $v in + yes) + ;; + inline) + ENABLED_PPC32_ASM_INLINE=yes + ;; + *) + AC_MSG_ERROR([Invalid RISC-V option [yes,inline]: $ENABLED_PPC32_ASM.]) + break + ;; + esac + done + + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM" + AC_MSG_NOTICE([32-bit PowerPC assembly for SHA-256]) + ENABLED_PPC32_ASM=yes +fi +if test "$ENABLED_PPC32_ASM_INLINE" = "yes"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE" +else + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM" +fi + # Xilinx hardened crypto AC_ARG_ENABLE([xilinx], [AS_HELP_STRING([--enable-xilinx],[Enable wolfSSL support for Xilinx hardened crypto(default: disabled)])], @@ -10564,6 +10613,8 @@ AM_CONDITIONAL([BUILD_ARM_NONTHUMB],[test "$ENABLED_ARM_THUMB" != "yes" || test AM_CONDITIONAL([BUILD_ARM_32],[test "$ENABLED_ARM_32" = "yes" || test "$ENABLED_USERSETTINGS" = "yes"]) AM_CONDITIONAL([BUILD_ARM_64],[test "$ENABLED_ARM_64" = "yes" || test "$ENABLED_USERSETTINGS" = "yes"]) AM_CONDITIONAL([BUILD_RISCV_ASM],[test "x$ENABLED_RISCV_ASM" = "xyes"]) +AM_CONDITIONAL([BUILD_PPC32_ASM],[test "x$ENABLED_PPC32_ASM" = "xyes"]) +AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE],[test "x$ENABLED_PPC32_ASM_INLINE" = "xyes"]) AM_CONDITIONAL([BUILD_XILINX],[test "x$ENABLED_XILINX" = "xyes"]) AM_CONDITIONAL([BUILD_AESNI],[test "x$ENABLED_AESNI" = "xyes"]) AM_CONDITIONAL([BUILD_INTELASM],[test "x$ENABLED_INTELASM" = "xyes"]) @@ -11217,6 +11268,11 @@ echo " * ARM ASM: $ENABLED_ARMASM" echo " * ARM ASM SHA512/SHA3 Crypto $ENABLED_ARMASM_SHA3" echo " * ARM ASM SM3/SM4 Crypto $ENABLED_ARMASM_CRYPTO_SM4" echo " * RISC-V ASM $ENABLED_RISCV_ASM" +if test "$ENABLED_PPC32_ASM_INLINE" = "yes" +then + ENABLED_PPC32_ASM="inline C" +fi +echo " * PPC32 ASM $ENABLED_PPC32_ASM" echo " * Write duplicate: $ENABLED_WRITEDUP" echo " * Xilinx Hardware Acc.: $ENABLED_XILINX" echo " * C89: $ENABLED_C89" diff --git a/src/include.am b/src/include.am index 876ba7c65..420d880d2 100644 --- a/src/include.am +++ b/src/include.am @@ -251,10 +251,19 @@ endif !BUILD_X86_ASM endif !BUILD_ARMASM endif !BUILD_ARMASM_NEON + if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha256.c endif BUILD_RISCV_ASM +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + if BUILD_SHA512 if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha512.c @@ -455,6 +464,14 @@ if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha256.c endif BUILD_RISCV_ASM +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + if BUILD_SHA512 if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha512.c @@ -718,6 +735,14 @@ if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha256.c endif BUILD_RISCV_ASM +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + endif !BUILD_FIPS_CURRENT if BUILD_AFALG diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S new file mode 100644 index 000000000..4143c3281 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S @@ -0,0 +1,1299 @@ +/* ppc32-sha256-asm + * + * Copyright (C) 2006-2025 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha2/sha256.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S + */ + + +#ifdef WOLFSSL_PPC32_ASM +#ifndef WOLFSSL_PPC32_ASM_INLINE + .machine ppc +#ifndef NO_SHA256 + .section ".text" + .section .rodata + .type L_SHA256_transform_len_k, @object + .size L_SHA256_transform_len_k, 256 + .align 4 +L_SHA256_transform_len_k: + .long 0x428a2f98 + .long 0x71374491 + .long 0xb5c0fbcf + .long 0xe9b5dba5 + .long 0x3956c25b + .long 0x59f111f1 + .long 0x923f82a4 + .long 0xab1c5ed5 + .long 0xd807aa98 + .long 0x12835b01 + .long 0x243185be + .long 0x550c7dc3 + .long 0x72be5d74 + .long 0x80deb1fe + .long 0x9bdc06a7 + .long 0xc19bf174 + .long 0xe49b69c1 + .long 0xefbe4786 + .long 0xfc19dc6 + .long 0x240ca1cc + .long 0x2de92c6f + .long 0x4a7484aa + .long 0x5cb0a9dc + .long 0x76f988da + .long 0x983e5152 + .long 0xa831c66d + .long 0xb00327c8 + .long 0xbf597fc7 + .long 0xc6e00bf3 + .long 0xd5a79147 + .long 0x6ca6351 + .long 0x14292967 + .long 0x27b70a85 + .long 0x2e1b2138 + .long 0x4d2c6dfc + .long 0x53380d13 + .long 0x650a7354 + .long 0x766a0abb + .long 0x81c2c92e + .long 0x92722c85 + .long 0xa2bfe8a1 + .long 0xa81a664b + .long 0xc24b8b70 + .long 0xc76c51a3 + .long 0xd192e819 + .long 0xd6990624 + .long 0xf40e3585 + .long 0x106aa070 + .long 0x19a4c116 + .long 0x1e376c08 + .long 0x2748774c + .long 0x34b0bcb5 + .long 0x391c0cb3 + .long 0x4ed8aa4a + .long 0x5b9cca4f + .long 0x682e6ff3 + .long 0x748f82ee + .long 0x78a5636f + .long 0x84c87814 + .long 0x8cc70208 + .long 0x90befffa + .long 0xa4506ceb + .long 0xbef9a3f7 + .long 0xc67178f2 + .section ".text" + .align 4 + .globl Transform_Sha256_Len + .type Transform_Sha256_Len, @function +Transform_Sha256_Len: + stwu 1, -76(1) + mflr 0 + stw 0, 72(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + stw 27, 52(1) + stw 28, 56(1) + stw 29, 60(1) + stw 30, 64(1) + stw 31, 68(1) + subi 1, 1, 32 + srwi 5, 5, 6 + lis 6, L_SHA256_transform_len_k@ha + la 6, L_SHA256_transform_len_k@l(6) + # Copy digest to add in at end + lwz 8, 0(3) + lwz 9, 4(3) + lwz 10, 8(3) + lwz 11, 12(3) + lwz 12, 16(3) + lwz 13, 20(3) + lwz 14, 24(3) + lwz 15, 28(3) + stw 8, 0(1) + stw 9, 4(1) + stw 10, 8(1) + stw 11, 12(1) + stw 12, 16(1) + stw 13, 20(1) + stw 14, 24(1) + stw 15, 28(1) + # Start of loop processing a block +L_SHA256_transform_len_begin: + # Load W - 64 bytes + lwz 16, 0(4) + lwz 17, 4(4) + lwz 18, 8(4) + lwz 19, 12(4) + lwz 20, 16(4) + lwz 21, 20(4) + lwz 22, 24(4) + lwz 23, 28(4) + lwz 24, 32(4) + lwz 25, 36(4) + lwz 26, 40(4) + lwz 27, 44(4) + lwz 28, 48(4) + lwz 29, 52(4) + lwz 30, 56(4) + lwz 31, 60(4) + li 7, 3 + mtctr 7 + # Start of 16 rounds +L_SHA256_transform_len_start: + # Round 0 + rotlwi 0, 12, 26 + rotlwi 7, 12, 21 + xor 0, 0, 7 + rotlwi 7, 12, 7 + xor 0, 0, 7 + add 15, 15, 0 + xor 0, 13, 14 + and 0, 0, 12 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 11, 11, 15 + rotlwi 0, 8, 30 + rotlwi 7, 8, 19 + xor 0, 0, 7 + rotlwi 7, 8, 10 + xor 0, 0, 7 + add 15, 15, 0 + xor 7, 8, 9 + xor 0, 9, 10 + and 0, 0, 7 + xor 0, 0, 9 + add 15, 15, 0 + # Calc new W[0] + rotlwi 0, 17, 25 + rotlwi 7, 17, 14 + xor 0, 0, 7 + srwi 7, 17, 3 + xor 0, 0, 7 + add 16, 16, 0 + rotlwi 0, 30, 15 + rotlwi 7, 30, 13 + xor 0, 0, 7 + srwi 7, 30, 10 + xor 0, 0, 7 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotlwi 0, 11, 26 + rotlwi 7, 11, 21 + xor 0, 0, 7 + rotlwi 7, 11, 7 + xor 0, 0, 7 + add 14, 14, 0 + xor 0, 12, 13 + and 0, 0, 11 + xor 0, 0, 13 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 10, 10, 14 + rotlwi 0, 15, 30 + rotlwi 7, 15, 19 + xor 0, 0, 7 + rotlwi 7, 15, 10 + xor 0, 0, 7 + add 14, 14, 0 + xor 7, 15, 8 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 8 + add 14, 14, 0 + # Calc new W[1] + rotlwi 0, 18, 25 + rotlwi 7, 18, 14 + xor 0, 0, 7 + srwi 7, 18, 3 + xor 0, 0, 7 + add 17, 17, 0 + rotlwi 0, 31, 15 + rotlwi 7, 31, 13 + xor 0, 0, 7 + srwi 7, 31, 10 + xor 0, 0, 7 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotlwi 0, 10, 26 + rotlwi 7, 10, 21 + xor 0, 0, 7 + rotlwi 7, 10, 7 + xor 0, 0, 7 + add 13, 13, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 13, 13, 0 + lwz 0, 8(6) + add 13, 13, 18 + add 13, 13, 0 + add 9, 9, 13 + rotlwi 0, 14, 30 + rotlwi 7, 14, 19 + xor 0, 0, 7 + rotlwi 7, 14, 10 + xor 0, 0, 7 + add 13, 13, 0 + xor 7, 14, 15 + xor 0, 15, 8 + and 0, 0, 7 + xor 0, 0, 15 + add 13, 13, 0 + # Calc new W[2] + rotlwi 0, 19, 25 + rotlwi 7, 19, 14 + xor 0, 0, 7 + srwi 7, 19, 3 + xor 0, 0, 7 + add 18, 18, 0 + rotlwi 0, 16, 15 + rotlwi 7, 16, 13 + xor 0, 0, 7 + srwi 7, 16, 10 + xor 0, 0, 7 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotlwi 0, 9, 26 + rotlwi 7, 9, 21 + xor 0, 0, 7 + rotlwi 7, 9, 7 + xor 0, 0, 7 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 12(6) + add 12, 12, 19 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 13, 30 + rotlwi 7, 13, 19 + xor 0, 0, 7 + rotlwi 7, 13, 10 + xor 0, 0, 7 + add 12, 12, 0 + xor 7, 13, 14 + xor 0, 14, 15 + and 0, 0, 7 + xor 0, 0, 14 + add 12, 12, 0 + # Calc new W[3] + rotlwi 0, 20, 25 + rotlwi 7, 20, 14 + xor 0, 0, 7 + srwi 7, 20, 3 + xor 0, 0, 7 + add 19, 19, 0 + rotlwi 0, 17, 15 + rotlwi 7, 17, 13 + xor 0, 0, 7 + srwi 7, 17, 10 + xor 0, 0, 7 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotlwi 0, 8, 26 + rotlwi 7, 8, 21 + xor 0, 0, 7 + rotlwi 7, 8, 7 + xor 0, 0, 7 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 16(6) + add 11, 11, 20 + add 11, 11, 0 + add 15, 15, 11 + rotlwi 0, 12, 30 + rotlwi 7, 12, 19 + xor 0, 0, 7 + rotlwi 7, 12, 10 + xor 0, 0, 7 + add 11, 11, 0 + xor 7, 12, 13 + xor 0, 13, 14 + and 0, 0, 7 + xor 0, 0, 13 + add 11, 11, 0 + # Calc new W[4] + rotlwi 0, 21, 25 + rotlwi 7, 21, 14 + xor 0, 0, 7 + srwi 7, 21, 3 + xor 0, 0, 7 + add 20, 20, 0 + rotlwi 0, 18, 15 + rotlwi 7, 18, 13 + xor 0, 0, 7 + srwi 7, 18, 10 + xor 0, 0, 7 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotlwi 0, 15, 26 + rotlwi 7, 15, 21 + xor 0, 0, 7 + rotlwi 7, 15, 7 + xor 0, 0, 7 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 15 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 20(6) + add 10, 10, 21 + add 10, 10, 0 + add 14, 14, 10 + rotlwi 0, 11, 30 + rotlwi 7, 11, 19 + xor 0, 0, 7 + rotlwi 7, 11, 10 + xor 0, 0, 7 + add 10, 10, 0 + xor 7, 11, 12 + xor 0, 12, 13 + and 0, 0, 7 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[5] + rotlwi 0, 22, 25 + rotlwi 7, 22, 14 + xor 0, 0, 7 + srwi 7, 22, 3 + xor 0, 0, 7 + add 21, 21, 0 + rotlwi 0, 19, 15 + rotlwi 7, 19, 13 + xor 0, 0, 7 + srwi 7, 19, 10 + xor 0, 0, 7 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotlwi 0, 14, 26 + rotlwi 7, 14, 21 + xor 0, 0, 7 + rotlwi 7, 14, 7 + xor 0, 0, 7 + add 9, 9, 0 + xor 0, 15, 8 + and 0, 0, 14 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 24(6) + add 9, 9, 22 + add 9, 9, 0 + add 13, 13, 9 + rotlwi 0, 10, 30 + rotlwi 7, 10, 19 + xor 0, 0, 7 + rotlwi 7, 10, 10 + xor 0, 0, 7 + add 9, 9, 0 + xor 7, 10, 11 + xor 0, 11, 12 + and 0, 0, 7 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[6] + rotlwi 0, 23, 25 + rotlwi 7, 23, 14 + xor 0, 0, 7 + srwi 7, 23, 3 + xor 0, 0, 7 + add 22, 22, 0 + rotlwi 0, 20, 15 + rotlwi 7, 20, 13 + xor 0, 0, 7 + srwi 7, 20, 10 + xor 0, 0, 7 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotlwi 0, 13, 26 + rotlwi 7, 13, 21 + xor 0, 0, 7 + rotlwi 7, 13, 7 + xor 0, 0, 7 + add 8, 8, 0 + xor 0, 14, 15 + and 0, 0, 13 + xor 0, 0, 15 + add 8, 8, 0 + lwz 0, 28(6) + add 8, 8, 23 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 7, 9, 19 + xor 0, 0, 7 + rotlwi 7, 9, 10 + xor 0, 0, 7 + add 8, 8, 0 + xor 7, 9, 10 + xor 0, 10, 11 + and 0, 0, 7 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[7] + rotlwi 0, 24, 25 + rotlwi 7, 24, 14 + xor 0, 0, 7 + srwi 7, 24, 3 + xor 0, 0, 7 + add 23, 23, 0 + rotlwi 0, 21, 15 + rotlwi 7, 21, 13 + xor 0, 0, 7 + srwi 7, 21, 10 + xor 0, 0, 7 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotlwi 0, 12, 26 + rotlwi 7, 12, 21 + xor 0, 0, 7 + rotlwi 7, 12, 7 + xor 0, 0, 7 + add 15, 15, 0 + xor 0, 13, 14 + and 0, 0, 12 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 11, 11, 15 + rotlwi 0, 8, 30 + rotlwi 7, 8, 19 + xor 0, 0, 7 + rotlwi 7, 8, 10 + xor 0, 0, 7 + add 15, 15, 0 + xor 7, 8, 9 + xor 0, 9, 10 + and 0, 0, 7 + xor 0, 0, 9 + add 15, 15, 0 + # Calc new W[8] + rotlwi 0, 25, 25 + rotlwi 7, 25, 14 + xor 0, 0, 7 + srwi 7, 25, 3 + xor 0, 0, 7 + add 24, 24, 0 + rotlwi 0, 22, 15 + rotlwi 7, 22, 13 + xor 0, 0, 7 + srwi 7, 22, 10 + xor 0, 0, 7 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotlwi 0, 11, 26 + rotlwi 7, 11, 21 + xor 0, 0, 7 + rotlwi 7, 11, 7 + xor 0, 0, 7 + add 14, 14, 0 + xor 0, 12, 13 + and 0, 0, 11 + xor 0, 0, 13 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 10, 10, 14 + rotlwi 0, 15, 30 + rotlwi 7, 15, 19 + xor 0, 0, 7 + rotlwi 7, 15, 10 + xor 0, 0, 7 + add 14, 14, 0 + xor 7, 15, 8 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 8 + add 14, 14, 0 + # Calc new W[9] + rotlwi 0, 26, 25 + rotlwi 7, 26, 14 + xor 0, 0, 7 + srwi 7, 26, 3 + xor 0, 0, 7 + add 25, 25, 0 + rotlwi 0, 23, 15 + rotlwi 7, 23, 13 + xor 0, 0, 7 + srwi 7, 23, 10 + xor 0, 0, 7 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotlwi 0, 10, 26 + rotlwi 7, 10, 21 + xor 0, 0, 7 + rotlwi 7, 10, 7 + xor 0, 0, 7 + add 13, 13, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 13, 13, 0 + lwz 0, 40(6) + add 13, 13, 26 + add 13, 13, 0 + add 9, 9, 13 + rotlwi 0, 14, 30 + rotlwi 7, 14, 19 + xor 0, 0, 7 + rotlwi 7, 14, 10 + xor 0, 0, 7 + add 13, 13, 0 + xor 7, 14, 15 + xor 0, 15, 8 + and 0, 0, 7 + xor 0, 0, 15 + add 13, 13, 0 + # Calc new W[10] + rotlwi 0, 27, 25 + rotlwi 7, 27, 14 + xor 0, 0, 7 + srwi 7, 27, 3 + xor 0, 0, 7 + add 26, 26, 0 + rotlwi 0, 24, 15 + rotlwi 7, 24, 13 + xor 0, 0, 7 + srwi 7, 24, 10 + xor 0, 0, 7 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotlwi 0, 9, 26 + rotlwi 7, 9, 21 + xor 0, 0, 7 + rotlwi 7, 9, 7 + xor 0, 0, 7 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 44(6) + add 12, 12, 27 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 13, 30 + rotlwi 7, 13, 19 + xor 0, 0, 7 + rotlwi 7, 13, 10 + xor 0, 0, 7 + add 12, 12, 0 + xor 7, 13, 14 + xor 0, 14, 15 + and 0, 0, 7 + xor 0, 0, 14 + add 12, 12, 0 + # Calc new W[11] + rotlwi 0, 28, 25 + rotlwi 7, 28, 14 + xor 0, 0, 7 + srwi 7, 28, 3 + xor 0, 0, 7 + add 27, 27, 0 + rotlwi 0, 25, 15 + rotlwi 7, 25, 13 + xor 0, 0, 7 + srwi 7, 25, 10 + xor 0, 0, 7 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotlwi 0, 8, 26 + rotlwi 7, 8, 21 + xor 0, 0, 7 + rotlwi 7, 8, 7 + xor 0, 0, 7 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 48(6) + add 11, 11, 28 + add 11, 11, 0 + add 15, 15, 11 + rotlwi 0, 12, 30 + rotlwi 7, 12, 19 + xor 0, 0, 7 + rotlwi 7, 12, 10 + xor 0, 0, 7 + add 11, 11, 0 + xor 7, 12, 13 + xor 0, 13, 14 + and 0, 0, 7 + xor 0, 0, 13 + add 11, 11, 0 + # Calc new W[12] + rotlwi 0, 29, 25 + rotlwi 7, 29, 14 + xor 0, 0, 7 + srwi 7, 29, 3 + xor 0, 0, 7 + add 28, 28, 0 + rotlwi 0, 26, 15 + rotlwi 7, 26, 13 + xor 0, 0, 7 + srwi 7, 26, 10 + xor 0, 0, 7 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotlwi 0, 15, 26 + rotlwi 7, 15, 21 + xor 0, 0, 7 + rotlwi 7, 15, 7 + xor 0, 0, 7 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 15 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 52(6) + add 10, 10, 29 + add 10, 10, 0 + add 14, 14, 10 + rotlwi 0, 11, 30 + rotlwi 7, 11, 19 + xor 0, 0, 7 + rotlwi 7, 11, 10 + xor 0, 0, 7 + add 10, 10, 0 + xor 7, 11, 12 + xor 0, 12, 13 + and 0, 0, 7 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[13] + rotlwi 0, 30, 25 + rotlwi 7, 30, 14 + xor 0, 0, 7 + srwi 7, 30, 3 + xor 0, 0, 7 + add 29, 29, 0 + rotlwi 0, 27, 15 + rotlwi 7, 27, 13 + xor 0, 0, 7 + srwi 7, 27, 10 + xor 0, 0, 7 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotlwi 0, 14, 26 + rotlwi 7, 14, 21 + xor 0, 0, 7 + rotlwi 7, 14, 7 + xor 0, 0, 7 + add 9, 9, 0 + xor 0, 15, 8 + and 0, 0, 14 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 56(6) + add 9, 9, 30 + add 9, 9, 0 + add 13, 13, 9 + rotlwi 0, 10, 30 + rotlwi 7, 10, 19 + xor 0, 0, 7 + rotlwi 7, 10, 10 + xor 0, 0, 7 + add 9, 9, 0 + xor 7, 10, 11 + xor 0, 11, 12 + and 0, 0, 7 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[14] + rotlwi 0, 31, 25 + rotlwi 7, 31, 14 + xor 0, 0, 7 + srwi 7, 31, 3 + xor 0, 0, 7 + add 30, 30, 0 + rotlwi 0, 28, 15 + rotlwi 7, 28, 13 + xor 0, 0, 7 + srwi 7, 28, 10 + xor 0, 0, 7 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotlwi 0, 13, 26 + rotlwi 7, 13, 21 + xor 0, 0, 7 + rotlwi 7, 13, 7 + xor 0, 0, 7 + add 8, 8, 0 + xor 0, 14, 15 + and 0, 0, 13 + xor 0, 0, 15 + add 8, 8, 0 + lwz 0, 60(6) + add 8, 8, 31 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 7, 9, 19 + xor 0, 0, 7 + rotlwi 7, 9, 10 + xor 0, 0, 7 + add 8, 8, 0 + xor 7, 9, 10 + xor 0, 10, 11 + and 0, 0, 7 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[15] + rotlwi 0, 16, 25 + rotlwi 7, 16, 14 + xor 0, 0, 7 + srwi 7, 16, 3 + xor 0, 0, 7 + add 31, 31, 0 + rotlwi 0, 29, 15 + rotlwi 7, 29, 13 + xor 0, 0, 7 + srwi 7, 29, 10 + xor 0, 0, 7 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x40 + bdnz L_SHA256_transform_len_start + # Round 0 + rotlwi 0, 12, 26 + rotlwi 7, 12, 21 + xor 0, 0, 7 + rotlwi 7, 12, 7 + xor 0, 0, 7 + add 15, 15, 0 + xor 0, 13, 14 + and 0, 0, 12 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 11, 11, 15 + rotlwi 0, 8, 30 + rotlwi 7, 8, 19 + xor 0, 0, 7 + rotlwi 7, 8, 10 + xor 0, 0, 7 + add 15, 15, 0 + xor 7, 8, 9 + xor 0, 9, 10 + and 0, 0, 7 + xor 0, 0, 9 + add 15, 15, 0 + # Round 1 + rotlwi 0, 11, 26 + rotlwi 7, 11, 21 + xor 0, 0, 7 + rotlwi 7, 11, 7 + xor 0, 0, 7 + add 14, 14, 0 + xor 0, 12, 13 + and 0, 0, 11 + xor 0, 0, 13 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 10, 10, 14 + rotlwi 0, 15, 30 + rotlwi 7, 15, 19 + xor 0, 0, 7 + rotlwi 7, 15, 10 + xor 0, 0, 7 + add 14, 14, 0 + xor 7, 15, 8 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 8 + add 14, 14, 0 + # Round 2 + rotlwi 0, 10, 26 + rotlwi 7, 10, 21 + xor 0, 0, 7 + rotlwi 7, 10, 7 + xor 0, 0, 7 + add 13, 13, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 13, 13, 0 + lwz 0, 8(6) + add 13, 13, 18 + add 13, 13, 0 + add 9, 9, 13 + rotlwi 0, 14, 30 + rotlwi 7, 14, 19 + xor 0, 0, 7 + rotlwi 7, 14, 10 + xor 0, 0, 7 + add 13, 13, 0 + xor 7, 14, 15 + xor 0, 15, 8 + and 0, 0, 7 + xor 0, 0, 15 + add 13, 13, 0 + # Round 3 + rotlwi 0, 9, 26 + rotlwi 7, 9, 21 + xor 0, 0, 7 + rotlwi 7, 9, 7 + xor 0, 0, 7 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 12(6) + add 12, 12, 19 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 13, 30 + rotlwi 7, 13, 19 + xor 0, 0, 7 + rotlwi 7, 13, 10 + xor 0, 0, 7 + add 12, 12, 0 + xor 7, 13, 14 + xor 0, 14, 15 + and 0, 0, 7 + xor 0, 0, 14 + add 12, 12, 0 + # Round 4 + rotlwi 0, 8, 26 + rotlwi 7, 8, 21 + xor 0, 0, 7 + rotlwi 7, 8, 7 + xor 0, 0, 7 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 16(6) + add 11, 11, 20 + add 11, 11, 0 + add 15, 15, 11 + rotlwi 0, 12, 30 + rotlwi 7, 12, 19 + xor 0, 0, 7 + rotlwi 7, 12, 10 + xor 0, 0, 7 + add 11, 11, 0 + xor 7, 12, 13 + xor 0, 13, 14 + and 0, 0, 7 + xor 0, 0, 13 + add 11, 11, 0 + # Round 5 + rotlwi 0, 15, 26 + rotlwi 7, 15, 21 + xor 0, 0, 7 + rotlwi 7, 15, 7 + xor 0, 0, 7 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 15 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 20(6) + add 10, 10, 21 + add 10, 10, 0 + add 14, 14, 10 + rotlwi 0, 11, 30 + rotlwi 7, 11, 19 + xor 0, 0, 7 + rotlwi 7, 11, 10 + xor 0, 0, 7 + add 10, 10, 0 + xor 7, 11, 12 + xor 0, 12, 13 + and 0, 0, 7 + xor 0, 0, 12 + add 10, 10, 0 + # Round 6 + rotlwi 0, 14, 26 + rotlwi 7, 14, 21 + xor 0, 0, 7 + rotlwi 7, 14, 7 + xor 0, 0, 7 + add 9, 9, 0 + xor 0, 15, 8 + and 0, 0, 14 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 24(6) + add 9, 9, 22 + add 9, 9, 0 + add 13, 13, 9 + rotlwi 0, 10, 30 + rotlwi 7, 10, 19 + xor 0, 0, 7 + rotlwi 7, 10, 10 + xor 0, 0, 7 + add 9, 9, 0 + xor 7, 10, 11 + xor 0, 11, 12 + and 0, 0, 7 + xor 0, 0, 11 + add 9, 9, 0 + # Round 7 + rotlwi 0, 13, 26 + rotlwi 7, 13, 21 + xor 0, 0, 7 + rotlwi 7, 13, 7 + xor 0, 0, 7 + add 8, 8, 0 + xor 0, 14, 15 + and 0, 0, 13 + xor 0, 0, 15 + add 8, 8, 0 + lwz 0, 28(6) + add 8, 8, 23 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 7, 9, 19 + xor 0, 0, 7 + rotlwi 7, 9, 10 + xor 0, 0, 7 + add 8, 8, 0 + xor 7, 9, 10 + xor 0, 10, 11 + and 0, 0, 7 + xor 0, 0, 10 + add 8, 8, 0 + # Round 8 + rotlwi 0, 12, 26 + rotlwi 7, 12, 21 + xor 0, 0, 7 + rotlwi 7, 12, 7 + xor 0, 0, 7 + add 15, 15, 0 + xor 0, 13, 14 + and 0, 0, 12 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 11, 11, 15 + rotlwi 0, 8, 30 + rotlwi 7, 8, 19 + xor 0, 0, 7 + rotlwi 7, 8, 10 + xor 0, 0, 7 + add 15, 15, 0 + xor 7, 8, 9 + xor 0, 9, 10 + and 0, 0, 7 + xor 0, 0, 9 + add 15, 15, 0 + # Round 9 + rotlwi 0, 11, 26 + rotlwi 7, 11, 21 + xor 0, 0, 7 + rotlwi 7, 11, 7 + xor 0, 0, 7 + add 14, 14, 0 + xor 0, 12, 13 + and 0, 0, 11 + xor 0, 0, 13 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 10, 10, 14 + rotlwi 0, 15, 30 + rotlwi 7, 15, 19 + xor 0, 0, 7 + rotlwi 7, 15, 10 + xor 0, 0, 7 + add 14, 14, 0 + xor 7, 15, 8 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 8 + add 14, 14, 0 + # Round 10 + rotlwi 0, 10, 26 + rotlwi 7, 10, 21 + xor 0, 0, 7 + rotlwi 7, 10, 7 + xor 0, 0, 7 + add 13, 13, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 13, 13, 0 + lwz 0, 40(6) + add 13, 13, 26 + add 13, 13, 0 + add 9, 9, 13 + rotlwi 0, 14, 30 + rotlwi 7, 14, 19 + xor 0, 0, 7 + rotlwi 7, 14, 10 + xor 0, 0, 7 + add 13, 13, 0 + xor 7, 14, 15 + xor 0, 15, 8 + and 0, 0, 7 + xor 0, 0, 15 + add 13, 13, 0 + # Round 11 + rotlwi 0, 9, 26 + rotlwi 7, 9, 21 + xor 0, 0, 7 + rotlwi 7, 9, 7 + xor 0, 0, 7 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 44(6) + add 12, 12, 27 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 13, 30 + rotlwi 7, 13, 19 + xor 0, 0, 7 + rotlwi 7, 13, 10 + xor 0, 0, 7 + add 12, 12, 0 + xor 7, 13, 14 + xor 0, 14, 15 + and 0, 0, 7 + xor 0, 0, 14 + add 12, 12, 0 + # Round 12 + rotlwi 0, 8, 26 + rotlwi 7, 8, 21 + xor 0, 0, 7 + rotlwi 7, 8, 7 + xor 0, 0, 7 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 48(6) + add 11, 11, 28 + add 11, 11, 0 + add 15, 15, 11 + rotlwi 0, 12, 30 + rotlwi 7, 12, 19 + xor 0, 0, 7 + rotlwi 7, 12, 10 + xor 0, 0, 7 + add 11, 11, 0 + xor 7, 12, 13 + xor 0, 13, 14 + and 0, 0, 7 + xor 0, 0, 13 + add 11, 11, 0 + # Round 13 + rotlwi 0, 15, 26 + rotlwi 7, 15, 21 + xor 0, 0, 7 + rotlwi 7, 15, 7 + xor 0, 0, 7 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 15 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 52(6) + add 10, 10, 29 + add 10, 10, 0 + add 14, 14, 10 + rotlwi 0, 11, 30 + rotlwi 7, 11, 19 + xor 0, 0, 7 + rotlwi 7, 11, 10 + xor 0, 0, 7 + add 10, 10, 0 + xor 7, 11, 12 + xor 0, 12, 13 + and 0, 0, 7 + xor 0, 0, 12 + add 10, 10, 0 + # Round 14 + rotlwi 0, 14, 26 + rotlwi 7, 14, 21 + xor 0, 0, 7 + rotlwi 7, 14, 7 + xor 0, 0, 7 + add 9, 9, 0 + xor 0, 15, 8 + and 0, 0, 14 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 56(6) + add 9, 9, 30 + add 9, 9, 0 + add 13, 13, 9 + rotlwi 0, 10, 30 + rotlwi 7, 10, 19 + xor 0, 0, 7 + rotlwi 7, 10, 10 + xor 0, 0, 7 + add 9, 9, 0 + xor 7, 10, 11 + xor 0, 11, 12 + and 0, 0, 7 + xor 0, 0, 11 + add 9, 9, 0 + # Round 15 + rotlwi 0, 13, 26 + rotlwi 7, 13, 21 + xor 0, 0, 7 + rotlwi 7, 13, 7 + xor 0, 0, 7 + add 8, 8, 0 + xor 0, 14, 15 + and 0, 0, 13 + xor 0, 0, 15 + add 8, 8, 0 + lwz 0, 60(6) + add 8, 8, 31 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 7, 9, 19 + xor 0, 0, 7 + rotlwi 7, 9, 10 + xor 0, 0, 7 + add 8, 8, 0 + xor 7, 9, 10 + xor 0, 10, 11 + and 0, 0, 7 + xor 0, 0, 10 + add 8, 8, 0 + # Add in digest from start + lwz 0, 0(1) + lwz 7, 4(1) + add 8, 8, 0 + add 9, 9, 7 + lwz 0, 8(1) + lwz 7, 12(1) + add 10, 10, 0 + add 11, 11, 7 + lwz 0, 16(1) + lwz 7, 20(1) + add 12, 12, 0 + add 13, 13, 7 + lwz 0, 24(1) + lwz 7, 28(1) + add 14, 14, 0 + add 15, 15, 7 + stw 8, 0(1) + stw 9, 4(1) + stw 10, 8(1) + stw 11, 12(1) + stw 12, 16(1) + stw 13, 20(1) + stw 14, 24(1) + stw 15, 28(1) + subi 6, 6, 0xc0 + mtctr 5 + addi 4, 4, 0x40 + subi 5, 5, 1 + bdnz L_SHA256_transform_len_begin + stw 8, 0(3) + stw 9, 4(3) + stw 10, 8(3) + stw 11, 12(3) + stw 12, 16(3) + stw 13, 20(3) + stw 14, 24(3) + stw 15, 28(3) + addi 1, 1, 32 + lwz 0, 72(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + lwz 27, 52(1) + lwz 28, 56(1) + lwz 29, 60(1) + lwz 30, 64(1) + lwz 31, 68(1) + addi 1, 1, 0x4c + blr + .size Transform_Sha256_Len,.-Transform_Sha256_Len +#endif /* !NO_SHA256 */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c new file mode 100644 index 000000000..3500a750c --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c @@ -0,0 +1,1253 @@ +/* ppc32-sha256-asm + * + * Copyright (C) 2006-2025 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha2/sha256.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#include +#include +#ifdef WOLFSSL_PPC32_ASM_INLINE + +#ifdef __IAR_SYSTEMS_ICC__ +#define __asm__ asm +#define __volatile__ volatile +#define WOLFSSL_NO_VAR_ASSIGN_REG +#endif /* __IAR_SYSTEMS_ICC__ */ +#ifdef __KEIL__ +#define __asm__ __asm +#define __volatile__ volatile +#endif /* __KEIL__ */ +#ifdef __ghs__ +#define __asm__ __asm +#define __volatile__ +#define WOLFSSL_NO_VAR_ASSIGN_REG +#endif /* __ghs__ */ +#ifndef NO_SHA256 +#include + +static const word32 L_SHA256_transform_len_k[] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, +}; + +void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, + word32 len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void Transform_Sha256_Len(wc_Sha256* sha256_p, const byte* data_p, word32 len_p) +#else +void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register wc_Sha256* sha256 asm ("3") = (wc_Sha256*)sha256_p; + register const byte* data asm ("4") = (const byte*)data_p; + register word32 len asm ("5") = (word32)len_p; + register word32* L_SHA256_transform_len_k_c asm ("6") = + (word32*)&L_SHA256_transform_len_k; +#else + register word32* L_SHA256_transform_len_k_c = + (word32*)&L_SHA256_transform_len_k; + +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "subi 1, 1, 32\n\t" + "srwi %[len], %[len], 6\n\t" + "mr 6, %[L_SHA256_transform_len_k]\n\t" + /* Copy digest to add in at end */ + "lwz 8, 0(%[sha256])\n\t" + "lwz 9, 4(%[sha256])\n\t" + "lwz 10, 8(%[sha256])\n\t" + "lwz 11, 12(%[sha256])\n\t" + "lwz 12, 16(%[sha256])\n\t" + "lwz 13, 20(%[sha256])\n\t" + "lwz 14, 24(%[sha256])\n\t" + "lwz 15, 28(%[sha256])\n\t" + "stw 8, 0(1)\n\t" + "stw 9, 4(1)\n\t" + "stw 10, 8(1)\n\t" + "stw 11, 12(1)\n\t" + "stw 12, 16(1)\n\t" + "stw 13, 20(1)\n\t" + "stw 14, 24(1)\n\t" + "stw 15, 28(1)\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_len_begin_%=: \n\t" + /* Load W - 64 bytes */ + "lwz 16, 0(%[data])\n\t" + "lwz 17, 4(%[data])\n\t" + "lwz 18, 8(%[data])\n\t" + "lwz 19, 12(%[data])\n\t" + "lwz 20, 16(%[data])\n\t" + "lwz 21, 20(%[data])\n\t" + "lwz 22, 24(%[data])\n\t" + "lwz 23, 28(%[data])\n\t" + "lwz 24, 32(%[data])\n\t" + "lwz 25, 36(%[data])\n\t" + "lwz 26, 40(%[data])\n\t" + "lwz 27, 44(%[data])\n\t" + "lwz 28, 48(%[data])\n\t" + "lwz 29, 52(%[data])\n\t" + "lwz 30, 56(%[data])\n\t" + "lwz 31, 60(%[data])\n\t" + "li 7, 3\n\t" + "mtctr 7\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_len_start_%=: \n\t" + /* Round 0 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi 7, 12, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 7\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 11, 11, 15\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi 7, 8, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 10\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 7, 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotlwi 0, 17, 25\n\t" + "rotlwi 7, 17, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 17, 3\n\t" + "xor 0, 0, 7\n\t" + "add 16, 16, 0\n\t" + "rotlwi 0, 30, 15\n\t" + "rotlwi 7, 30, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 30, 10\n\t" + "xor 0, 0, 7\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi 7, 11, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 7\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 13\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 10, 10, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi 7, 15, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 10\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 7, 15, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 8\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotlwi 0, 18, 25\n\t" + "rotlwi 7, 18, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 18, 3\n\t" + "xor 0, 0, 7\n\t" + "add 17, 17, 0\n\t" + "rotlwi 0, 31, 15\n\t" + "rotlwi 7, 31, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 31, 10\n\t" + "xor 0, 0, 7\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi 7, 10, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 7\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 13, 13, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 13, 13, 18\n\t" + "add 13, 13, 0\n\t" + "add 9, 9, 13\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi 7, 14, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 10\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 7, 14, 15\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 15\n\t" + "add 13, 13, 0\n\t" + /* Calc new W[2] */ + "rotlwi 0, 19, 25\n\t" + "rotlwi 7, 19, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 19, 3\n\t" + "xor 0, 0, 7\n\t" + "add 18, 18, 0\n\t" + "rotlwi 0, 16, 15\n\t" + "rotlwi 7, 16, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 16, 10\n\t" + "xor 0, 0, 7\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi 7, 9, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 7\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 12, 12, 19\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 13, 30\n\t" + "rotlwi 7, 13, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 10\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 7, 13, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 14\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[3] */ + "rotlwi 0, 20, 25\n\t" + "rotlwi 7, 20, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 20, 3\n\t" + "xor 0, 0, 7\n\t" + "add 19, 19, 0\n\t" + "rotlwi 0, 17, 15\n\t" + "rotlwi 7, 17, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 17, 10\n\t" + "xor 0, 0, 7\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi 7, 8, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 7\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 11, 11, 20\n\t" + "add 11, 11, 0\n\t" + "add 15, 15, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi 7, 12, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 10\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 7, 12, 13\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 13\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[4] */ + "rotlwi 0, 21, 25\n\t" + "rotlwi 7, 21, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 21, 3\n\t" + "xor 0, 0, 7\n\t" + "add 20, 20, 0\n\t" + "rotlwi 0, 18, 15\n\t" + "rotlwi 7, 18, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 18, 10\n\t" + "xor 0, 0, 7\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi 7, 15, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 7\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 10, 10, 21\n\t" + "add 10, 10, 0\n\t" + "add 14, 14, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi 7, 11, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 10\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 7, 11, 12\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[5] */ + "rotlwi 0, 22, 25\n\t" + "rotlwi 7, 22, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 22, 3\n\t" + "xor 0, 0, 7\n\t" + "add 21, 21, 0\n\t" + "rotlwi 0, 19, 15\n\t" + "rotlwi 7, 19, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 19, 10\n\t" + "xor 0, 0, 7\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi 7, 14, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 7\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 9, 9, 22\n\t" + "add 9, 9, 0\n\t" + "add 13, 13, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi 7, 10, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 10\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 7, 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[6] */ + "rotlwi 0, 23, 25\n\t" + "rotlwi 7, 23, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 23, 3\n\t" + "xor 0, 0, 7\n\t" + "add 22, 22, 0\n\t" + "rotlwi 0, 20, 15\n\t" + "rotlwi 7, 20, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 20, 10\n\t" + "xor 0, 0, 7\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotlwi 0, 13, 26\n\t" + "rotlwi 7, 13, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 7\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 13\n\t" + "xor 0, 0, 15\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 8, 8, 23\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi 7, 9, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 10\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 7, 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[7] */ + "rotlwi 0, 24, 25\n\t" + "rotlwi 7, 24, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 24, 3\n\t" + "xor 0, 0, 7\n\t" + "add 23, 23, 0\n\t" + "rotlwi 0, 21, 15\n\t" + "rotlwi 7, 21, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 21, 10\n\t" + "xor 0, 0, 7\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi 7, 12, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 7\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 11, 11, 15\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi 7, 8, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 10\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 7, 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotlwi 0, 25, 25\n\t" + "rotlwi 7, 25, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 25, 3\n\t" + "xor 0, 0, 7\n\t" + "add 24, 24, 0\n\t" + "rotlwi 0, 22, 15\n\t" + "rotlwi 7, 22, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 22, 10\n\t" + "xor 0, 0, 7\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi 7, 11, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 7\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 13\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 10, 10, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi 7, 15, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 10\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 7, 15, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 8\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotlwi 0, 26, 25\n\t" + "rotlwi 7, 26, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 26, 3\n\t" + "xor 0, 0, 7\n\t" + "add 25, 25, 0\n\t" + "rotlwi 0, 23, 15\n\t" + "rotlwi 7, 23, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 23, 10\n\t" + "xor 0, 0, 7\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi 7, 10, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 7\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 13, 13, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 13, 13, 26\n\t" + "add 13, 13, 0\n\t" + "add 9, 9, 13\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi 7, 14, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 10\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 7, 14, 15\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 15\n\t" + "add 13, 13, 0\n\t" + /* Calc new W[10] */ + "rotlwi 0, 27, 25\n\t" + "rotlwi 7, 27, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 27, 3\n\t" + "xor 0, 0, 7\n\t" + "add 26, 26, 0\n\t" + "rotlwi 0, 24, 15\n\t" + "rotlwi 7, 24, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 24, 10\n\t" + "xor 0, 0, 7\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi 7, 9, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 7\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 12, 12, 27\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 13, 30\n\t" + "rotlwi 7, 13, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 10\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 7, 13, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 14\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[11] */ + "rotlwi 0, 28, 25\n\t" + "rotlwi 7, 28, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 28, 3\n\t" + "xor 0, 0, 7\n\t" + "add 27, 27, 0\n\t" + "rotlwi 0, 25, 15\n\t" + "rotlwi 7, 25, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 25, 10\n\t" + "xor 0, 0, 7\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi 7, 8, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 7\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 11, 11, 28\n\t" + "add 11, 11, 0\n\t" + "add 15, 15, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi 7, 12, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 10\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 7, 12, 13\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 13\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[12] */ + "rotlwi 0, 29, 25\n\t" + "rotlwi 7, 29, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 29, 3\n\t" + "xor 0, 0, 7\n\t" + "add 28, 28, 0\n\t" + "rotlwi 0, 26, 15\n\t" + "rotlwi 7, 26, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 26, 10\n\t" + "xor 0, 0, 7\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi 7, 15, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 7\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 10, 10, 29\n\t" + "add 10, 10, 0\n\t" + "add 14, 14, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi 7, 11, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 10\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 7, 11, 12\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[13] */ + "rotlwi 0, 30, 25\n\t" + "rotlwi 7, 30, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 30, 3\n\t" + "xor 0, 0, 7\n\t" + "add 29, 29, 0\n\t" + "rotlwi 0, 27, 15\n\t" + "rotlwi 7, 27, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 27, 10\n\t" + "xor 0, 0, 7\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi 7, 14, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 7\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 9, 9, 30\n\t" + "add 9, 9, 0\n\t" + "add 13, 13, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi 7, 10, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 10\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 7, 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[14] */ + "rotlwi 0, 31, 25\n\t" + "rotlwi 7, 31, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 31, 3\n\t" + "xor 0, 0, 7\n\t" + "add 30, 30, 0\n\t" + "rotlwi 0, 28, 15\n\t" + "rotlwi 7, 28, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 28, 10\n\t" + "xor 0, 0, 7\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotlwi 0, 13, 26\n\t" + "rotlwi 7, 13, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 7\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 13\n\t" + "xor 0, 0, 15\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 8, 8, 31\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi 7, 9, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 10\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 7, 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[15] */ + "rotlwi 0, 16, 25\n\t" + "rotlwi 7, 16, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 16, 3\n\t" + "xor 0, 0, 7\n\t" + "add 31, 31, 0\n\t" + "rotlwi 0, 29, 15\n\t" + "rotlwi 7, 29, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 29, 10\n\t" + "xor 0, 0, 7\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x40\n\t" + "bdnz L_SHA256_transform_len_start_%=\n\t" + /* Round 0 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi 7, 12, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 7\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 11, 11, 15\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi 7, 8, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 10\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 7, 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 15, 15, 0\n\t" + /* Round 1 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi 7, 11, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 7\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 13\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 10, 10, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi 7, 15, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 10\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 7, 15, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 8\n\t" + "add 14, 14, 0\n\t" + /* Round 2 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi 7, 10, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 7\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 13, 13, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 13, 13, 18\n\t" + "add 13, 13, 0\n\t" + "add 9, 9, 13\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi 7, 14, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 10\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 7, 14, 15\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 15\n\t" + "add 13, 13, 0\n\t" + /* Round 3 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi 7, 9, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 7\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 12, 12, 19\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 13, 30\n\t" + "rotlwi 7, 13, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 10\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 7, 13, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 14\n\t" + "add 12, 12, 0\n\t" + /* Round 4 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi 7, 8, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 7\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 11, 11, 20\n\t" + "add 11, 11, 0\n\t" + "add 15, 15, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi 7, 12, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 10\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 7, 12, 13\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 13\n\t" + "add 11, 11, 0\n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi 7, 15, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 7\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 10, 10, 21\n\t" + "add 10, 10, 0\n\t" + "add 14, 14, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi 7, 11, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 10\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 7, 11, 12\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi 7, 14, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 7\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 9, 9, 22\n\t" + "add 9, 9, 0\n\t" + "add 13, 13, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi 7, 10, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 10\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 7, 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Round 7 */ + "rotlwi 0, 13, 26\n\t" + "rotlwi 7, 13, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 7\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 13\n\t" + "xor 0, 0, 15\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 8, 8, 23\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi 7, 9, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 10\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 7, 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Round 8 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi 7, 12, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 7\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 11, 11, 15\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi 7, 8, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 10\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 7, 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 15, 15, 0\n\t" + /* Round 9 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi 7, 11, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 7\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 13\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 10, 10, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi 7, 15, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 10\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 7, 15, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 8\n\t" + "add 14, 14, 0\n\t" + /* Round 10 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi 7, 10, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 7\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 13, 13, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 13, 13, 26\n\t" + "add 13, 13, 0\n\t" + "add 9, 9, 13\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi 7, 14, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 10\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 7, 14, 15\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 15\n\t" + "add 13, 13, 0\n\t" + /* Round 11 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi 7, 9, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 7\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 12, 12, 27\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 13, 30\n\t" + "rotlwi 7, 13, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 10\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 7, 13, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 14\n\t" + "add 12, 12, 0\n\t" + /* Round 12 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi 7, 8, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 7\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 11, 11, 28\n\t" + "add 11, 11, 0\n\t" + "add 15, 15, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi 7, 12, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 10\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 7, 12, 13\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 13\n\t" + "add 11, 11, 0\n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi 7, 15, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 7\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 10, 10, 29\n\t" + "add 10, 10, 0\n\t" + "add 14, 14, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi 7, 11, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 10\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 7, 11, 12\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi 7, 14, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 7\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 9, 9, 30\n\t" + "add 9, 9, 0\n\t" + "add 13, 13, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi 7, 10, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 10\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 7, 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Round 15 */ + "rotlwi 0, 13, 26\n\t" + "rotlwi 7, 13, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 7\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 13\n\t" + "xor 0, 0, 15\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 8, 8, 31\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi 7, 9, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 10\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 7, 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Add in digest from start */ + "lwz 0, 0(1)\n\t" + "lwz 7, 4(1)\n\t" + "add 8, 8, 0\n\t" + "add 9, 9, 7\n\t" + "lwz 0, 8(1)\n\t" + "lwz 7, 12(1)\n\t" + "add 10, 10, 0\n\t" + "add 11, 11, 7\n\t" + "lwz 0, 16(1)\n\t" + "lwz 7, 20(1)\n\t" + "add 12, 12, 0\n\t" + "add 13, 13, 7\n\t" + "lwz 0, 24(1)\n\t" + "lwz 7, 28(1)\n\t" + "add 14, 14, 0\n\t" + "add 15, 15, 7\n\t" + "stw 8, 0(1)\n\t" + "stw 9, 4(1)\n\t" + "stw 10, 8(1)\n\t" + "stw 11, 12(1)\n\t" + "stw 12, 16(1)\n\t" + "stw 13, 20(1)\n\t" + "stw 14, 24(1)\n\t" + "stw 15, 28(1)\n\t" + "subi 6, 6, 0xc0\n\t" + "mtctr %[len]\n\t" + "addi %[data], %[data], 0x40\n\t" + "subi %[len], %[len], 1\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" + "stw 8, 0(%[sha256])\n\t" + "stw 9, 4(%[sha256])\n\t" + "stw 10, 8(%[sha256])\n\t" + "stw 11, 12(%[sha256])\n\t" + "stw 12, 16(%[sha256])\n\t" + "stw 13, 20(%[sha256])\n\t" + "stw 14, 24(%[sha256])\n\t" + "stw 15, 28(%[sha256])\n\t" + "addi 1, 1, 32\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len), + [L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c) + : +#else + : + : [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len), + [L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "7", "8", "9", "10", "11", "12", "13", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30", "31" + ); +} + +#endif /* !NO_SHA256 */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c index 6c5820498..01a4e04e7 100644 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -206,6 +206,8 @@ on the specific device platform. #endif #elif defined(FREESCALE_MMCAU_SHA) #define SHA256_UPDATE_REV_BYTES(ctx) 0 /* reverse not needed on update */ +#elif defined(WOLFSSL_PPC32_ASM) + #define SHA256_UPDATE_REV_BYTES(ctx) 0 #else #define SHA256_UPDATE_REV_BYTES(ctx) SHA256_REV_BYTES(ctx) #endif @@ -1067,6 +1069,35 @@ static int InitSha256(wc_Sha256* sha256) #elif defined(WOLFSSL_RENESAS_RX64_HASH) /* implemented in wolfcrypt/src/port/Renesas/renesas_rx64_hw_sha.c */ +#elif defined(WOLFSSL_PPC32_ASM) + +extern void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, + word32 len); + +int wc_InitSha256_ex(wc_Sha256* sha256, void* heap, int devId) +{ + int ret = 0; + + if (sha256 == NULL) + return BAD_FUNC_ARG; + ret = InitSha256(sha256); + if (ret != 0) + return ret; + + sha256->heap = heap; + (void)devId; + + return ret; +} + +static int Transform_Sha256(wc_Sha256* sha256, const byte* data) +{ + Transform_Sha256_Len(sha256, data, WC_SHA256_BLOCK_SIZE); + return 0; +} + +#define XTRANSFORM Transform_Sha256 +#define XTRANSFORM_LEN Transform_Sha256_Len #else #define NEED_SOFT_SHA256 From 62721f4d5112733ff11d70fe4825fd2ee82b2dbf Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Thu, 19 Jun 2025 10:51:12 +1000 Subject: [PATCH 2/2] PPC32 SHA-256 ASM: small code implementation Slower but smaller SHA-256 assembly code implementation enabled with: WOLFSSL_PPC32_ASM_SMALL. (--enable-ppc32=small or --enable-ppc32=inline,small) --- configure.ac | 9 +- wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S | 716 ++++++++++++++++- wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c | 733 +++++++++++++++++- 3 files changed, 1455 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 84e6bcbc6..259619912 100644 --- a/configure.ac +++ b/configure.ac @@ -3520,8 +3520,11 @@ then inline) ENABLED_PPC32_ASM_INLINE=yes ;; + small) + ENABLED_PPC32_ASM_SMALL=yes + ;; *) - AC_MSG_ERROR([Invalid RISC-V option [yes,inline]: $ENABLED_PPC32_ASM.]) + AC_MSG_ERROR([Invalid RISC-V option [yes,inline,small]: $ENABLED_PPC32_ASM.]) break ;; esac @@ -3536,6 +3539,10 @@ if test "$ENABLED_PPC32_ASM_INLINE" = "yes"; then else AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM" fi +if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL" + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL" +fi # Xilinx hardened crypto AC_ARG_ENABLE([xilinx], diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S index 4143c3281..bb20d8a84 100644 --- a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +++ b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S @@ -166,6 +166,7 @@ L_SHA256_transform_len_begin: lwz 29, 52(4) lwz 30, 56(4) lwz 31, 60(4) +#ifndef WOLFSSL_PPC32_ASM_SMALL li 7, 3 mtctr 7 # Start of 16 rounds @@ -1228,6 +1229,720 @@ L_SHA256_transform_len_start: and 0, 0, 7 xor 0, 0, 10 add 8, 8, 0 + subi 6, 6, 0xc0 +#else + li 7, 4 + mtctr 7 + # Start of 16 rounds +L_SHA256_transform_len_start: + # Round 0 + rotlwi 0, 12, 26 + rotlwi 7, 12, 21 + xor 0, 0, 7 + rotlwi 7, 12, 7 + xor 0, 0, 7 + add 15, 15, 0 + xor 0, 13, 14 + and 0, 0, 12 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 11, 11, 15 + rotlwi 0, 8, 30 + rotlwi 7, 8, 19 + xor 0, 0, 7 + rotlwi 7, 8, 10 + xor 0, 0, 7 + add 15, 15, 0 + xor 7, 8, 9 + xor 0, 9, 10 + and 0, 0, 7 + xor 0, 0, 9 + add 15, 15, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_0 + # Calc new W[0] + rotlwi 0, 17, 25 + rotlwi 7, 17, 14 + xor 0, 0, 7 + srwi 7, 17, 3 + xor 0, 0, 7 + add 16, 16, 0 + rotlwi 0, 30, 15 + rotlwi 7, 30, 13 + xor 0, 0, 7 + srwi 7, 30, 10 + xor 0, 0, 7 + add 16, 16, 0 + add 16, 16, 25 +L_SHA256_transform_len_after_blk_0: + # Round 1 + rotlwi 0, 11, 26 + rotlwi 7, 11, 21 + xor 0, 0, 7 + rotlwi 7, 11, 7 + xor 0, 0, 7 + add 14, 14, 0 + xor 0, 12, 13 + and 0, 0, 11 + xor 0, 0, 13 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 10, 10, 14 + rotlwi 0, 15, 30 + rotlwi 7, 15, 19 + xor 0, 0, 7 + rotlwi 7, 15, 10 + xor 0, 0, 7 + add 14, 14, 0 + xor 7, 15, 8 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 8 + add 14, 14, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_1 + # Calc new W[1] + rotlwi 0, 18, 25 + rotlwi 7, 18, 14 + xor 0, 0, 7 + srwi 7, 18, 3 + xor 0, 0, 7 + add 17, 17, 0 + rotlwi 0, 31, 15 + rotlwi 7, 31, 13 + xor 0, 0, 7 + srwi 7, 31, 10 + xor 0, 0, 7 + add 17, 17, 0 + add 17, 17, 26 +L_SHA256_transform_len_after_blk_1: + # Round 2 + rotlwi 0, 10, 26 + rotlwi 7, 10, 21 + xor 0, 0, 7 + rotlwi 7, 10, 7 + xor 0, 0, 7 + add 13, 13, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 13, 13, 0 + lwz 0, 8(6) + add 13, 13, 18 + add 13, 13, 0 + add 9, 9, 13 + rotlwi 0, 14, 30 + rotlwi 7, 14, 19 + xor 0, 0, 7 + rotlwi 7, 14, 10 + xor 0, 0, 7 + add 13, 13, 0 + xor 7, 14, 15 + xor 0, 15, 8 + and 0, 0, 7 + xor 0, 0, 15 + add 13, 13, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_2 + # Calc new W[2] + rotlwi 0, 19, 25 + rotlwi 7, 19, 14 + xor 0, 0, 7 + srwi 7, 19, 3 + xor 0, 0, 7 + add 18, 18, 0 + rotlwi 0, 16, 15 + rotlwi 7, 16, 13 + xor 0, 0, 7 + srwi 7, 16, 10 + xor 0, 0, 7 + add 18, 18, 0 + add 18, 18, 27 +L_SHA256_transform_len_after_blk_2: + # Round 3 + rotlwi 0, 9, 26 + rotlwi 7, 9, 21 + xor 0, 0, 7 + rotlwi 7, 9, 7 + xor 0, 0, 7 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 12(6) + add 12, 12, 19 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 13, 30 + rotlwi 7, 13, 19 + xor 0, 0, 7 + rotlwi 7, 13, 10 + xor 0, 0, 7 + add 12, 12, 0 + xor 7, 13, 14 + xor 0, 14, 15 + and 0, 0, 7 + xor 0, 0, 14 + add 12, 12, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_3 + # Calc new W[3] + rotlwi 0, 20, 25 + rotlwi 7, 20, 14 + xor 0, 0, 7 + srwi 7, 20, 3 + xor 0, 0, 7 + add 19, 19, 0 + rotlwi 0, 17, 15 + rotlwi 7, 17, 13 + xor 0, 0, 7 + srwi 7, 17, 10 + xor 0, 0, 7 + add 19, 19, 0 + add 19, 19, 28 +L_SHA256_transform_len_after_blk_3: + # Round 4 + rotlwi 0, 8, 26 + rotlwi 7, 8, 21 + xor 0, 0, 7 + rotlwi 7, 8, 7 + xor 0, 0, 7 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 16(6) + add 11, 11, 20 + add 11, 11, 0 + add 15, 15, 11 + rotlwi 0, 12, 30 + rotlwi 7, 12, 19 + xor 0, 0, 7 + rotlwi 7, 12, 10 + xor 0, 0, 7 + add 11, 11, 0 + xor 7, 12, 13 + xor 0, 13, 14 + and 0, 0, 7 + xor 0, 0, 13 + add 11, 11, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_4 + # Calc new W[4] + rotlwi 0, 21, 25 + rotlwi 7, 21, 14 + xor 0, 0, 7 + srwi 7, 21, 3 + xor 0, 0, 7 + add 20, 20, 0 + rotlwi 0, 18, 15 + rotlwi 7, 18, 13 + xor 0, 0, 7 + srwi 7, 18, 10 + xor 0, 0, 7 + add 20, 20, 0 + add 20, 20, 29 +L_SHA256_transform_len_after_blk_4: + # Round 5 + rotlwi 0, 15, 26 + rotlwi 7, 15, 21 + xor 0, 0, 7 + rotlwi 7, 15, 7 + xor 0, 0, 7 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 15 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 20(6) + add 10, 10, 21 + add 10, 10, 0 + add 14, 14, 10 + rotlwi 0, 11, 30 + rotlwi 7, 11, 19 + xor 0, 0, 7 + rotlwi 7, 11, 10 + xor 0, 0, 7 + add 10, 10, 0 + xor 7, 11, 12 + xor 0, 12, 13 + and 0, 0, 7 + xor 0, 0, 12 + add 10, 10, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_5 + # Calc new W[5] + rotlwi 0, 22, 25 + rotlwi 7, 22, 14 + xor 0, 0, 7 + srwi 7, 22, 3 + xor 0, 0, 7 + add 21, 21, 0 + rotlwi 0, 19, 15 + rotlwi 7, 19, 13 + xor 0, 0, 7 + srwi 7, 19, 10 + xor 0, 0, 7 + add 21, 21, 0 + add 21, 21, 30 +L_SHA256_transform_len_after_blk_5: + # Round 6 + rotlwi 0, 14, 26 + rotlwi 7, 14, 21 + xor 0, 0, 7 + rotlwi 7, 14, 7 + xor 0, 0, 7 + add 9, 9, 0 + xor 0, 15, 8 + and 0, 0, 14 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 24(6) + add 9, 9, 22 + add 9, 9, 0 + add 13, 13, 9 + rotlwi 0, 10, 30 + rotlwi 7, 10, 19 + xor 0, 0, 7 + rotlwi 7, 10, 10 + xor 0, 0, 7 + add 9, 9, 0 + xor 7, 10, 11 + xor 0, 11, 12 + and 0, 0, 7 + xor 0, 0, 11 + add 9, 9, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_6 + # Calc new W[6] + rotlwi 0, 23, 25 + rotlwi 7, 23, 14 + xor 0, 0, 7 + srwi 7, 23, 3 + xor 0, 0, 7 + add 22, 22, 0 + rotlwi 0, 20, 15 + rotlwi 7, 20, 13 + xor 0, 0, 7 + srwi 7, 20, 10 + xor 0, 0, 7 + add 22, 22, 0 + add 22, 22, 31 +L_SHA256_transform_len_after_blk_6: + # Round 7 + rotlwi 0, 13, 26 + rotlwi 7, 13, 21 + xor 0, 0, 7 + rotlwi 7, 13, 7 + xor 0, 0, 7 + add 8, 8, 0 + xor 0, 14, 15 + and 0, 0, 13 + xor 0, 0, 15 + add 8, 8, 0 + lwz 0, 28(6) + add 8, 8, 23 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 7, 9, 19 + xor 0, 0, 7 + rotlwi 7, 9, 10 + xor 0, 0, 7 + add 8, 8, 0 + xor 7, 9, 10 + xor 0, 10, 11 + and 0, 0, 7 + xor 0, 0, 10 + add 8, 8, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_7 + # Calc new W[7] + rotlwi 0, 24, 25 + rotlwi 7, 24, 14 + xor 0, 0, 7 + srwi 7, 24, 3 + xor 0, 0, 7 + add 23, 23, 0 + rotlwi 0, 21, 15 + rotlwi 7, 21, 13 + xor 0, 0, 7 + srwi 7, 21, 10 + xor 0, 0, 7 + add 23, 23, 0 + add 23, 23, 16 +L_SHA256_transform_len_after_blk_7: + # Round 8 + rotlwi 0, 12, 26 + rotlwi 7, 12, 21 + xor 0, 0, 7 + rotlwi 7, 12, 7 + xor 0, 0, 7 + add 15, 15, 0 + xor 0, 13, 14 + and 0, 0, 12 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 11, 11, 15 + rotlwi 0, 8, 30 + rotlwi 7, 8, 19 + xor 0, 0, 7 + rotlwi 7, 8, 10 + xor 0, 0, 7 + add 15, 15, 0 + xor 7, 8, 9 + xor 0, 9, 10 + and 0, 0, 7 + xor 0, 0, 9 + add 15, 15, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_8 + # Calc new W[8] + rotlwi 0, 25, 25 + rotlwi 7, 25, 14 + xor 0, 0, 7 + srwi 7, 25, 3 + xor 0, 0, 7 + add 24, 24, 0 + rotlwi 0, 22, 15 + rotlwi 7, 22, 13 + xor 0, 0, 7 + srwi 7, 22, 10 + xor 0, 0, 7 + add 24, 24, 0 + add 24, 24, 17 +L_SHA256_transform_len_after_blk_8: + # Round 9 + rotlwi 0, 11, 26 + rotlwi 7, 11, 21 + xor 0, 0, 7 + rotlwi 7, 11, 7 + xor 0, 0, 7 + add 14, 14, 0 + xor 0, 12, 13 + and 0, 0, 11 + xor 0, 0, 13 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 10, 10, 14 + rotlwi 0, 15, 30 + rotlwi 7, 15, 19 + xor 0, 0, 7 + rotlwi 7, 15, 10 + xor 0, 0, 7 + add 14, 14, 0 + xor 7, 15, 8 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 8 + add 14, 14, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_9 + # Calc new W[9] + rotlwi 0, 26, 25 + rotlwi 7, 26, 14 + xor 0, 0, 7 + srwi 7, 26, 3 + xor 0, 0, 7 + add 25, 25, 0 + rotlwi 0, 23, 15 + rotlwi 7, 23, 13 + xor 0, 0, 7 + srwi 7, 23, 10 + xor 0, 0, 7 + add 25, 25, 0 + add 25, 25, 18 +L_SHA256_transform_len_after_blk_9: + # Round 10 + rotlwi 0, 10, 26 + rotlwi 7, 10, 21 + xor 0, 0, 7 + rotlwi 7, 10, 7 + xor 0, 0, 7 + add 13, 13, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 13, 13, 0 + lwz 0, 40(6) + add 13, 13, 26 + add 13, 13, 0 + add 9, 9, 13 + rotlwi 0, 14, 30 + rotlwi 7, 14, 19 + xor 0, 0, 7 + rotlwi 7, 14, 10 + xor 0, 0, 7 + add 13, 13, 0 + xor 7, 14, 15 + xor 0, 15, 8 + and 0, 0, 7 + xor 0, 0, 15 + add 13, 13, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_10 + # Calc new W[10] + rotlwi 0, 27, 25 + rotlwi 7, 27, 14 + xor 0, 0, 7 + srwi 7, 27, 3 + xor 0, 0, 7 + add 26, 26, 0 + rotlwi 0, 24, 15 + rotlwi 7, 24, 13 + xor 0, 0, 7 + srwi 7, 24, 10 + xor 0, 0, 7 + add 26, 26, 0 + add 26, 26, 19 +L_SHA256_transform_len_after_blk_10: + # Round 11 + rotlwi 0, 9, 26 + rotlwi 7, 9, 21 + xor 0, 0, 7 + rotlwi 7, 9, 7 + xor 0, 0, 7 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 44(6) + add 12, 12, 27 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 13, 30 + rotlwi 7, 13, 19 + xor 0, 0, 7 + rotlwi 7, 13, 10 + xor 0, 0, 7 + add 12, 12, 0 + xor 7, 13, 14 + xor 0, 14, 15 + and 0, 0, 7 + xor 0, 0, 14 + add 12, 12, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_11 + # Calc new W[11] + rotlwi 0, 28, 25 + rotlwi 7, 28, 14 + xor 0, 0, 7 + srwi 7, 28, 3 + xor 0, 0, 7 + add 27, 27, 0 + rotlwi 0, 25, 15 + rotlwi 7, 25, 13 + xor 0, 0, 7 + srwi 7, 25, 10 + xor 0, 0, 7 + add 27, 27, 0 + add 27, 27, 20 +L_SHA256_transform_len_after_blk_11: + # Round 12 + rotlwi 0, 8, 26 + rotlwi 7, 8, 21 + xor 0, 0, 7 + rotlwi 7, 8, 7 + xor 0, 0, 7 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 48(6) + add 11, 11, 28 + add 11, 11, 0 + add 15, 15, 11 + rotlwi 0, 12, 30 + rotlwi 7, 12, 19 + xor 0, 0, 7 + rotlwi 7, 12, 10 + xor 0, 0, 7 + add 11, 11, 0 + xor 7, 12, 13 + xor 0, 13, 14 + and 0, 0, 7 + xor 0, 0, 13 + add 11, 11, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_12 + # Calc new W[12] + rotlwi 0, 29, 25 + rotlwi 7, 29, 14 + xor 0, 0, 7 + srwi 7, 29, 3 + xor 0, 0, 7 + add 28, 28, 0 + rotlwi 0, 26, 15 + rotlwi 7, 26, 13 + xor 0, 0, 7 + srwi 7, 26, 10 + xor 0, 0, 7 + add 28, 28, 0 + add 28, 28, 21 +L_SHA256_transform_len_after_blk_12: + # Round 13 + rotlwi 0, 15, 26 + rotlwi 7, 15, 21 + xor 0, 0, 7 + rotlwi 7, 15, 7 + xor 0, 0, 7 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 15 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 52(6) + add 10, 10, 29 + add 10, 10, 0 + add 14, 14, 10 + rotlwi 0, 11, 30 + rotlwi 7, 11, 19 + xor 0, 0, 7 + rotlwi 7, 11, 10 + xor 0, 0, 7 + add 10, 10, 0 + xor 7, 11, 12 + xor 0, 12, 13 + and 0, 0, 7 + xor 0, 0, 12 + add 10, 10, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_13 + # Calc new W[13] + rotlwi 0, 30, 25 + rotlwi 7, 30, 14 + xor 0, 0, 7 + srwi 7, 30, 3 + xor 0, 0, 7 + add 29, 29, 0 + rotlwi 0, 27, 15 + rotlwi 7, 27, 13 + xor 0, 0, 7 + srwi 7, 27, 10 + xor 0, 0, 7 + add 29, 29, 0 + add 29, 29, 22 +L_SHA256_transform_len_after_blk_13: + # Round 14 + rotlwi 0, 14, 26 + rotlwi 7, 14, 21 + xor 0, 0, 7 + rotlwi 7, 14, 7 + xor 0, 0, 7 + add 9, 9, 0 + xor 0, 15, 8 + and 0, 0, 14 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 56(6) + add 9, 9, 30 + add 9, 9, 0 + add 13, 13, 9 + rotlwi 0, 10, 30 + rotlwi 7, 10, 19 + xor 0, 0, 7 + rotlwi 7, 10, 10 + xor 0, 0, 7 + add 9, 9, 0 + xor 7, 10, 11 + xor 0, 11, 12 + and 0, 0, 7 + xor 0, 0, 11 + add 9, 9, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_14 + # Calc new W[14] + rotlwi 0, 31, 25 + rotlwi 7, 31, 14 + xor 0, 0, 7 + srwi 7, 31, 3 + xor 0, 0, 7 + add 30, 30, 0 + rotlwi 0, 28, 15 + rotlwi 7, 28, 13 + xor 0, 0, 7 + srwi 7, 28, 10 + xor 0, 0, 7 + add 30, 30, 0 + add 30, 30, 23 +L_SHA256_transform_len_after_blk_14: + # Round 15 + rotlwi 0, 13, 26 + rotlwi 7, 13, 21 + xor 0, 0, 7 + rotlwi 7, 13, 7 + xor 0, 0, 7 + add 8, 8, 0 + xor 0, 14, 15 + and 0, 0, 13 + xor 0, 0, 15 + add 8, 8, 0 + lwz 0, 60(6) + add 8, 8, 31 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 7, 9, 19 + xor 0, 0, 7 + rotlwi 7, 9, 10 + xor 0, 0, 7 + add 8, 8, 0 + xor 7, 9, 10 + xor 0, 10, 11 + and 0, 0, 7 + xor 0, 0, 10 + add 8, 8, 0 + mfctr 7 + cmpwi 0, 7, 1 + beq 0, L_SHA256_transform_len_after_blk_15 + # Calc new W[15] + rotlwi 0, 16, 25 + rotlwi 7, 16, 14 + xor 0, 0, 7 + srwi 7, 16, 3 + xor 0, 0, 7 + add 31, 31, 0 + rotlwi 0, 29, 15 + rotlwi 7, 29, 13 + xor 0, 0, 7 + srwi 7, 29, 10 + xor 0, 0, 7 + add 31, 31, 0 + add 31, 31, 24 +L_SHA256_transform_len_after_blk_15: + addi 6, 6, 0x40 + bdnz L_SHA256_transform_len_start + subi 6, 6, 0x100 +#endif /* WOLFSSL_PPC32_ASM_SMALL */ # Add in digest from start lwz 0, 0(1) lwz 7, 4(1) @@ -1253,7 +1968,6 @@ L_SHA256_transform_len_start: stw 13, 20(1) stw 14, 24(1) stw 15, 28(1) - subi 6, 6, 0xc0 mtctr 5 addi 4, 4, 0x40 subi 5, 5, 1 diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c index 3500a750c..23a7858a4 100644 --- a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c +++ b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c @@ -130,6 +130,7 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len) "lwz 29, 52(%[data])\n\t" "lwz 30, 56(%[data])\n\t" "lwz 31, 60(%[data])\n\t" +#ifndef WOLFSSL_PPC32_ASM_SMALL "li 7, 3\n\t" "mtctr 7\n\t" /* Start of 16 rounds */ @@ -1193,6 +1194,737 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len) "and 0, 0, 7\n\t" "xor 0, 0, 10\n\t" "add 8, 8, 0\n\t" + "subi 6, 6, 0xc0\n\t" +#else + "li 7, 4\n\t" + "mtctr 7\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_len_start_%=: \n\t" + /* Round 0 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi 7, 12, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 7\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 11, 11, 15\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi 7, 8, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 10\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 7, 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 15, 15, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_0_%=\n\t" + /* Calc new W[0] */ + "rotlwi 0, 17, 25\n\t" + "rotlwi 7, 17, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 17, 3\n\t" + "xor 0, 0, 7\n\t" + "add 16, 16, 0\n\t" + "rotlwi 0, 30, 15\n\t" + "rotlwi 7, 30, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 30, 10\n\t" + "xor 0, 0, 7\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + "\n" + "L_SHA256_transform_len_after_blk_0_%=: \n\t" + /* Round 1 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi 7, 11, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 7\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 13\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 10, 10, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi 7, 15, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 10\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 7, 15, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 8\n\t" + "add 14, 14, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_1_%=\n\t" + /* Calc new W[1] */ + "rotlwi 0, 18, 25\n\t" + "rotlwi 7, 18, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 18, 3\n\t" + "xor 0, 0, 7\n\t" + "add 17, 17, 0\n\t" + "rotlwi 0, 31, 15\n\t" + "rotlwi 7, 31, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 31, 10\n\t" + "xor 0, 0, 7\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + "\n" + "L_SHA256_transform_len_after_blk_1_%=: \n\t" + /* Round 2 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi 7, 10, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 7\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 13, 13, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 13, 13, 18\n\t" + "add 13, 13, 0\n\t" + "add 9, 9, 13\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi 7, 14, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 10\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 7, 14, 15\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 15\n\t" + "add 13, 13, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_2_%=\n\t" + /* Calc new W[2] */ + "rotlwi 0, 19, 25\n\t" + "rotlwi 7, 19, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 19, 3\n\t" + "xor 0, 0, 7\n\t" + "add 18, 18, 0\n\t" + "rotlwi 0, 16, 15\n\t" + "rotlwi 7, 16, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 16, 10\n\t" + "xor 0, 0, 7\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + "\n" + "L_SHA256_transform_len_after_blk_2_%=: \n\t" + /* Round 3 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi 7, 9, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 7\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 12, 12, 19\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 13, 30\n\t" + "rotlwi 7, 13, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 10\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 7, 13, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 14\n\t" + "add 12, 12, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_3_%=\n\t" + /* Calc new W[3] */ + "rotlwi 0, 20, 25\n\t" + "rotlwi 7, 20, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 20, 3\n\t" + "xor 0, 0, 7\n\t" + "add 19, 19, 0\n\t" + "rotlwi 0, 17, 15\n\t" + "rotlwi 7, 17, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 17, 10\n\t" + "xor 0, 0, 7\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + "\n" + "L_SHA256_transform_len_after_blk_3_%=: \n\t" + /* Round 4 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi 7, 8, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 7\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 11, 11, 20\n\t" + "add 11, 11, 0\n\t" + "add 15, 15, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi 7, 12, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 10\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 7, 12, 13\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 13\n\t" + "add 11, 11, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_4_%=\n\t" + /* Calc new W[4] */ + "rotlwi 0, 21, 25\n\t" + "rotlwi 7, 21, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 21, 3\n\t" + "xor 0, 0, 7\n\t" + "add 20, 20, 0\n\t" + "rotlwi 0, 18, 15\n\t" + "rotlwi 7, 18, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 18, 10\n\t" + "xor 0, 0, 7\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + "\n" + "L_SHA256_transform_len_after_blk_4_%=: \n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi 7, 15, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 7\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 10, 10, 21\n\t" + "add 10, 10, 0\n\t" + "add 14, 14, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi 7, 11, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 10\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 7, 11, 12\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_5_%=\n\t" + /* Calc new W[5] */ + "rotlwi 0, 22, 25\n\t" + "rotlwi 7, 22, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 22, 3\n\t" + "xor 0, 0, 7\n\t" + "add 21, 21, 0\n\t" + "rotlwi 0, 19, 15\n\t" + "rotlwi 7, 19, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 19, 10\n\t" + "xor 0, 0, 7\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + "\n" + "L_SHA256_transform_len_after_blk_5_%=: \n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi 7, 14, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 7\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 9, 9, 22\n\t" + "add 9, 9, 0\n\t" + "add 13, 13, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi 7, 10, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 10\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 7, 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_6_%=\n\t" + /* Calc new W[6] */ + "rotlwi 0, 23, 25\n\t" + "rotlwi 7, 23, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 23, 3\n\t" + "xor 0, 0, 7\n\t" + "add 22, 22, 0\n\t" + "rotlwi 0, 20, 15\n\t" + "rotlwi 7, 20, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 20, 10\n\t" + "xor 0, 0, 7\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + "\n" + "L_SHA256_transform_len_after_blk_6_%=: \n\t" + /* Round 7 */ + "rotlwi 0, 13, 26\n\t" + "rotlwi 7, 13, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 7\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 13\n\t" + "xor 0, 0, 15\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 8, 8, 23\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi 7, 9, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 10\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 7, 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_7_%=\n\t" + /* Calc new W[7] */ + "rotlwi 0, 24, 25\n\t" + "rotlwi 7, 24, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 24, 3\n\t" + "xor 0, 0, 7\n\t" + "add 23, 23, 0\n\t" + "rotlwi 0, 21, 15\n\t" + "rotlwi 7, 21, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 21, 10\n\t" + "xor 0, 0, 7\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + "\n" + "L_SHA256_transform_len_after_blk_7_%=: \n\t" + /* Round 8 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi 7, 12, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 7\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 11, 11, 15\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi 7, 8, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 10\n\t" + "xor 0, 0, 7\n\t" + "add 15, 15, 0\n\t" + "xor 7, 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 15, 15, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_8_%=\n\t" + /* Calc new W[8] */ + "rotlwi 0, 25, 25\n\t" + "rotlwi 7, 25, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 25, 3\n\t" + "xor 0, 0, 7\n\t" + "add 24, 24, 0\n\t" + "rotlwi 0, 22, 15\n\t" + "rotlwi 7, 22, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 22, 10\n\t" + "xor 0, 0, 7\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + "\n" + "L_SHA256_transform_len_after_blk_8_%=: \n\t" + /* Round 9 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi 7, 11, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 7\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 13\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 10, 10, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi 7, 15, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 10\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "xor 7, 15, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 8\n\t" + "add 14, 14, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_9_%=\n\t" + /* Calc new W[9] */ + "rotlwi 0, 26, 25\n\t" + "rotlwi 7, 26, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 26, 3\n\t" + "xor 0, 0, 7\n\t" + "add 25, 25, 0\n\t" + "rotlwi 0, 23, 15\n\t" + "rotlwi 7, 23, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 23, 10\n\t" + "xor 0, 0, 7\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + "\n" + "L_SHA256_transform_len_after_blk_9_%=: \n\t" + /* Round 10 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi 7, 10, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 7\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 13, 13, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 13, 13, 26\n\t" + "add 13, 13, 0\n\t" + "add 9, 9, 13\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi 7, 14, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 10\n\t" + "xor 0, 0, 7\n\t" + "add 13, 13, 0\n\t" + "xor 7, 14, 15\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 15\n\t" + "add 13, 13, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_10_%=\n\t" + /* Calc new W[10] */ + "rotlwi 0, 27, 25\n\t" + "rotlwi 7, 27, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 27, 3\n\t" + "xor 0, 0, 7\n\t" + "add 26, 26, 0\n\t" + "rotlwi 0, 24, 15\n\t" + "rotlwi 7, 24, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 24, 10\n\t" + "xor 0, 0, 7\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + "\n" + "L_SHA256_transform_len_after_blk_10_%=: \n\t" + /* Round 11 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi 7, 9, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 7\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 12, 12, 27\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 13, 30\n\t" + "rotlwi 7, 13, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 10\n\t" + "xor 0, 0, 7\n\t" + "add 12, 12, 0\n\t" + "xor 7, 13, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 14\n\t" + "add 12, 12, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_11_%=\n\t" + /* Calc new W[11] */ + "rotlwi 0, 28, 25\n\t" + "rotlwi 7, 28, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 28, 3\n\t" + "xor 0, 0, 7\n\t" + "add 27, 27, 0\n\t" + "rotlwi 0, 25, 15\n\t" + "rotlwi 7, 25, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 25, 10\n\t" + "xor 0, 0, 7\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + "\n" + "L_SHA256_transform_len_after_blk_11_%=: \n\t" + /* Round 12 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi 7, 8, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 8, 7\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 11, 11, 28\n\t" + "add 11, 11, 0\n\t" + "add 15, 15, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi 7, 12, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 12, 10\n\t" + "xor 0, 0, 7\n\t" + "add 11, 11, 0\n\t" + "xor 7, 12, 13\n\t" + "xor 0, 13, 14\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 13\n\t" + "add 11, 11, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_12_%=\n\t" + /* Calc new W[12] */ + "rotlwi 0, 29, 25\n\t" + "rotlwi 7, 29, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 29, 3\n\t" + "xor 0, 0, 7\n\t" + "add 28, 28, 0\n\t" + "rotlwi 0, 26, 15\n\t" + "rotlwi 7, 26, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 26, 10\n\t" + "xor 0, 0, 7\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + "\n" + "L_SHA256_transform_len_after_blk_12_%=: \n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi 7, 15, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 15, 7\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 10, 10, 29\n\t" + "add 10, 10, 0\n\t" + "add 14, 14, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi 7, 11, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 11, 10\n\t" + "xor 0, 0, 7\n\t" + "add 10, 10, 0\n\t" + "xor 7, 11, 12\n\t" + "xor 0, 12, 13\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_13_%=\n\t" + /* Calc new W[13] */ + "rotlwi 0, 30, 25\n\t" + "rotlwi 7, 30, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 30, 3\n\t" + "xor 0, 0, 7\n\t" + "add 29, 29, 0\n\t" + "rotlwi 0, 27, 15\n\t" + "rotlwi 7, 27, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 27, 10\n\t" + "xor 0, 0, 7\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + "\n" + "L_SHA256_transform_len_after_blk_13_%=: \n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi 7, 14, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 14, 7\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 0, 15, 8\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 9, 9, 30\n\t" + "add 9, 9, 0\n\t" + "add 13, 13, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi 7, 10, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 10, 10\n\t" + "xor 0, 0, 7\n\t" + "add 9, 9, 0\n\t" + "xor 7, 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_14_%=\n\t" + /* Calc new W[14] */ + "rotlwi 0, 31, 25\n\t" + "rotlwi 7, 31, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 31, 3\n\t" + "xor 0, 0, 7\n\t" + "add 30, 30, 0\n\t" + "rotlwi 0, 28, 15\n\t" + "rotlwi 7, 28, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 28, 10\n\t" + "xor 0, 0, 7\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + "\n" + "L_SHA256_transform_len_after_blk_14_%=: \n\t" + /* Round 15 */ + "rotlwi 0, 13, 26\n\t" + "rotlwi 7, 13, 21\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 13, 7\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 13\n\t" + "xor 0, 0, 15\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 8, 8, 31\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi 7, 9, 19\n\t" + "xor 0, 0, 7\n\t" + "rotlwi 7, 9, 10\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "xor 7, 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + "mfctr 7\n\t" + "cmpwi 0, 7, 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_15_%=\n\t" + /* Calc new W[15] */ + "rotlwi 0, 16, 25\n\t" + "rotlwi 7, 16, 14\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 16, 3\n\t" + "xor 0, 0, 7\n\t" + "add 31, 31, 0\n\t" + "rotlwi 0, 29, 15\n\t" + "rotlwi 7, 29, 13\n\t" + "xor 0, 0, 7\n\t" + "srwi 7, 29, 10\n\t" + "xor 0, 0, 7\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "\n" + "L_SHA256_transform_len_after_blk_15_%=: \n\t" + "addi 6, 6, 0x40\n\t" + "bdnz L_SHA256_transform_len_start_%=\n\t" + "subi 6, 6, 0x100\n\t" +#endif /* WOLFSSL_PPC32_ASM_SMALL */ /* Add in digest from start */ "lwz 0, 0(1)\n\t" "lwz 7, 4(1)\n\t" @@ -1218,7 +1950,6 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len) "stw 13, 20(1)\n\t" "stw 14, 24(1)\n\t" "stw 15, 28(1)\n\t" - "subi 6, 6, 0xc0\n\t" "mtctr %[len]\n\t" "addi %[data], %[data], 0x40\n\t" "subi %[len], %[len], 1\n\t"