diff --git a/configure.ac b/configure.ac index a2e98dd352e..e80c19d9069 100644 --- a/configure.ac +++ b/configure.ac @@ -3721,6 +3721,9 @@ then inline) ENABLED_PPC32_ASM_INLINE=yes ;; + inline-reg) + ENABLED_PPC32_ASM_INLINE_REG=yes + ;; small) ENABLED_PPC32_ASM_SMALL=yes ;; @@ -3738,7 +3741,7 @@ then AC_MSG_NOTICE([32-bit PowerPC assembly for SHA-256]) ENABLED_PPC32_ASM=yes fi -if test "$ENABLED_PPC32_ASM_INLINE" = "yes"; then +if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE" else AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM" @@ -11006,6 +11009,7 @@ AM_CONDITIONAL([BUILD_ARM_64],[test "$ENABLED_ARM_64" = "yes" || test "$ENABLED 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_PPC32_ASM_INLINE_REG],[test "x$ENABLED_PPC32_ASM_INLINE_REG" = "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"]) @@ -11677,6 +11681,10 @@ if test "$ENABLED_PPC32_ASM_INLINE" = "yes" then ENABLED_PPC32_ASM="inline C" fi +if test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes" +then + ENABLED_PPC32_ASM="inline C Reg" +fi echo " * PPC32 ASM $ENABLED_PPC32_ASM" echo " * Write duplicate: $ENABLED_WRITEDUP" echo " * Xilinx Hardware Acc.: $ENABLED_XILINX" diff --git a/src/include.am b/src/include.am index 96736c2b952..2b4c5faf667 100644 --- a/src/include.am +++ b/src/include.am @@ -304,7 +304,11 @@ if BUILD_PPC32_ASM if BUILD_PPC32_ASM_INLINE src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_cr.c +else src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM @@ -539,7 +543,11 @@ if BUILD_PPC32_ASM if BUILD_PPC32_ASM_INLINE src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_cr.c +else src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM @@ -830,7 +838,11 @@ if BUILD_PPC32_ASM if BUILD_PPC32_ASM_INLINE src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_c.c else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm_cr.c +else src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_cr.c b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_cr.c new file mode 100644 index 00000000000..b411265766e --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm_cr.c @@ -0,0 +1,7673 @@ +/* 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 3 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 + +#ifdef WOLFSSL_PPC32_ASM_SPE +static const word32 L_SHA256_transform_spe_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_spe_len_k_c asm ("6") = + (word32*)&L_SHA256_transform_spe_len_k; +#else + register word32* L_SHA256_transform_spe_len_k_c = + (word32*)&L_SHA256_transform_spe_len_k; + +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "srwi %[len], %[len], 6\n\t" + "mr r30, %[L_SHA256_transform_spe_len_k]\n\t" + /* Load digest into registers */ + "lwz r14, 0(%[sha256])\n\t" + "lwz r15, 4(%[sha256])\n\t" + "lwz r16, 8(%[sha256])\n\t" + "lwz r17, 12(%[sha256])\n\t" + "lwz r18, 16(%[sha256])\n\t" + "lwz r19, 20(%[sha256])\n\t" + "lwz r20, 24(%[sha256])\n\t" + "lwz r21, 28(%[sha256])\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_spe_len_begin_%=: \n\t" + /* Load W */ + "lwz r22, 0(%[data])\n\t" + "lwz r0, 4(%[data])\n\t" + "evmergelo r22, r0, r22\n\t" + "lwz r23, 8(%[data])\n\t" + "lwz r0, 12(%[data])\n\t" + "evmergelo r23, r0, r23\n\t" + "lwz r24, 16(%[data])\n\t" + "lwz r0, 20(%[data])\n\t" + "evmergelo r24, r0, r24\n\t" + "lwz r25, 24(%[data])\n\t" + "lwz r0, 28(%[data])\n\t" + "evmergelo r25, r0, r25\n\t" + "lwz r26, 32(%[data])\n\t" + "lwz r0, 36(%[data])\n\t" + "evmergelo r26, r0, r26\n\t" + "lwz r27, 40(%[data])\n\t" + "lwz r0, 44(%[data])\n\t" + "evmergelo r27, r0, r27\n\t" + "lwz r28, 48(%[data])\n\t" + "lwz r0, 52(%[data])\n\t" + "evmergelo r28, r0, r28\n\t" + "lwz r29, 56(%[data])\n\t" + "lwz r0, 60(%[data])\n\t" + "evmergelo r29, r0, r29\n\t" + "li r0, 3\n\t" + "mtctr r0\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_spe_len_start_%=: \n\t" + /* Round 0 */ + "mr r9, r22\n\t" + "rotlwi r6, r18, 26\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r18, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r18\n\t" + "rotlwi r8, r18, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + "lwz r6, 0(r30)\n\t" + "add r21, r21, r9\n\t" + "add r21, r21, r6\n\t" + "add r17, r17, r21\n\t" + "rotlwi r6, r14, 30\n\t" + "xor r7, r14, r15\n\t" + "rotlwi r8, r14, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r15, r16\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r14, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r15\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + /* Round 1 */ + "evmergehi r9, r22, r22\n\t" + /* Calc new W[0]-W[1] */ + "evmergelohi r12, r23, r22\n\t" + "rotlwi r6, r17, 26\n\t" + "evrlwi r10, r29, 15\n\t" + "xor r7, r18, r19\n\t" + "evrlwi r11, r29, 13\n\t" + "rotlwi r8, r17, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r29, 10\n\t" + "and r7, r7, r17\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r17, 7\n\t" + "evaddw r22, r22, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r27, r26\n\t" + "xor r7, r7, r19\n\t" + "evaddw r22, r22, r10\n\t" + "add r20, r20, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r20, r20, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 4(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r20, r20, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r20, r20, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r16, r16, r20\n\t" + "evaddw r22, r22, r11\n\t" + "rotlwi r6, r21, 30\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r21, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r14, r15\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r21, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r20, r20, r6\n\t" + "add r20, r20, r7\n\t" + /* Round 2 */ + "mr r9, r23\n\t" + "rotlwi r6, r16, 26\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r16, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r16\n\t" + "rotlwi r8, r16, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + "lwz r6, 8(r30)\n\t" + "add r19, r19, r9\n\t" + "add r19, r19, r6\n\t" + "add r15, r15, r19\n\t" + "rotlwi r6, r20, 30\n\t" + "xor r7, r20, r21\n\t" + "rotlwi r8, r20, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r21, r14\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r20, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r21\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + /* Round 3 */ + "evmergehi r9, r23, r23\n\t" + /* Calc new W[2]-W[3] */ + "evmergelohi r12, r24, r23\n\t" + "rotlwi r6, r15, 26\n\t" + "evrlwi r10, r22, 15\n\t" + "xor r7, r16, r17\n\t" + "evrlwi r11, r22, 13\n\t" + "rotlwi r8, r15, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r22, 10\n\t" + "and r7, r7, r15\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r15, 7\n\t" + "evaddw r23, r23, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r28, r27\n\t" + "xor r7, r7, r17\n\t" + "evaddw r23, r23, r10\n\t" + "add r18, r18, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r18, r18, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 12(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r18, r18, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r18, r18, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r14, r14, r18\n\t" + "evaddw r23, r23, r11\n\t" + "rotlwi r6, r19, 30\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r19, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r20, r21\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r19, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r18, r18, r6\n\t" + "add r18, r18, r7\n\t" + /* Round 4 */ + "mr r9, r24\n\t" + "rotlwi r6, r14, 26\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r14, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r14\n\t" + "rotlwi r8, r14, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + "lwz r6, 16(r30)\n\t" + "add r17, r17, r9\n\t" + "add r17, r17, r6\n\t" + "add r21, r21, r17\n\t" + "rotlwi r6, r18, 30\n\t" + "xor r7, r18, r19\n\t" + "rotlwi r8, r18, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r19, r20\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r18, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r19\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + /* Round 5 */ + "evmergehi r9, r24, r24\n\t" + /* Calc new W[4]-W[5] */ + "evmergelohi r12, r25, r24\n\t" + "rotlwi r6, r21, 26\n\t" + "evrlwi r10, r23, 15\n\t" + "xor r7, r14, r15\n\t" + "evrlwi r11, r23, 13\n\t" + "rotlwi r8, r21, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r23, 10\n\t" + "and r7, r7, r21\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r21, 7\n\t" + "evaddw r24, r24, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r29, r28\n\t" + "xor r7, r7, r15\n\t" + "evaddw r24, r24, r10\n\t" + "add r16, r16, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r16, r16, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 20(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r16, r16, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r16, r16, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r20, r20, r16\n\t" + "evaddw r24, r24, r11\n\t" + "rotlwi r6, r17, 30\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r17, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r18, r19\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r17, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r16, r16, r6\n\t" + "add r16, r16, r7\n\t" + /* Round 6 */ + "mr r9, r25\n\t" + "rotlwi r6, r20, 26\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r20, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r20\n\t" + "rotlwi r8, r20, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + "lwz r6, 24(r30)\n\t" + "add r15, r15, r9\n\t" + "add r15, r15, r6\n\t" + "add r19, r19, r15\n\t" + "rotlwi r6, r16, 30\n\t" + "xor r7, r16, r17\n\t" + "rotlwi r8, r16, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r17, r18\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r16, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r17\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + /* Round 7 */ + "evmergehi r9, r25, r25\n\t" + /* Calc new W[6]-W[7] */ + "evmergelohi r12, r26, r25\n\t" + "rotlwi r6, r19, 26\n\t" + "evrlwi r10, r24, 15\n\t" + "xor r7, r20, r21\n\t" + "evrlwi r11, r24, 13\n\t" + "rotlwi r8, r19, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r24, 10\n\t" + "and r7, r7, r19\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r19, 7\n\t" + "evaddw r25, r25, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r22, r29\n\t" + "xor r7, r7, r21\n\t" + "evaddw r25, r25, r10\n\t" + "add r14, r14, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r14, r14, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 28(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r14, r14, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r14, r14, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r18, r18, r14\n\t" + "evaddw r25, r25, r11\n\t" + "rotlwi r6, r15, 30\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r15, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r16, r17\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r15, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r14, r14, r6\n\t" + "add r14, r14, r7\n\t" + /* Round 8 */ + "mr r9, r26\n\t" + "rotlwi r6, r18, 26\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r18, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r18\n\t" + "rotlwi r8, r18, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + "lwz r6, 32(r30)\n\t" + "add r21, r21, r9\n\t" + "add r21, r21, r6\n\t" + "add r17, r17, r21\n\t" + "rotlwi r6, r14, 30\n\t" + "xor r7, r14, r15\n\t" + "rotlwi r8, r14, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r15, r16\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r14, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r15\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + /* Round 9 */ + "evmergehi r9, r26, r26\n\t" + /* Calc new W[8]-W[9] */ + "evmergelohi r12, r27, r26\n\t" + "rotlwi r6, r17, 26\n\t" + "evrlwi r10, r25, 15\n\t" + "xor r7, r18, r19\n\t" + "evrlwi r11, r25, 13\n\t" + "rotlwi r8, r17, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r25, 10\n\t" + "and r7, r7, r17\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r17, 7\n\t" + "evaddw r26, r26, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r23, r22\n\t" + "xor r7, r7, r19\n\t" + "evaddw r26, r26, r10\n\t" + "add r20, r20, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r20, r20, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 36(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r20, r20, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r20, r20, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r16, r16, r20\n\t" + "evaddw r26, r26, r11\n\t" + "rotlwi r6, r21, 30\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r21, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r14, r15\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r21, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r20, r20, r6\n\t" + "add r20, r20, r7\n\t" + /* Round 10 */ + "mr r9, r27\n\t" + "rotlwi r6, r16, 26\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r16, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r16\n\t" + "rotlwi r8, r16, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + "lwz r6, 40(r30)\n\t" + "add r19, r19, r9\n\t" + "add r19, r19, r6\n\t" + "add r15, r15, r19\n\t" + "rotlwi r6, r20, 30\n\t" + "xor r7, r20, r21\n\t" + "rotlwi r8, r20, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r21, r14\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r20, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r21\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + /* Round 11 */ + "evmergehi r9, r27, r27\n\t" + /* Calc new W[10]-W[11] */ + "evmergelohi r12, r28, r27\n\t" + "rotlwi r6, r15, 26\n\t" + "evrlwi r10, r26, 15\n\t" + "xor r7, r16, r17\n\t" + "evrlwi r11, r26, 13\n\t" + "rotlwi r8, r15, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r26, 10\n\t" + "and r7, r7, r15\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r15, 7\n\t" + "evaddw r27, r27, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r24, r23\n\t" + "xor r7, r7, r17\n\t" + "evaddw r27, r27, r10\n\t" + "add r18, r18, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r18, r18, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 44(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r18, r18, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r18, r18, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r14, r14, r18\n\t" + "evaddw r27, r27, r11\n\t" + "rotlwi r6, r19, 30\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r19, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r20, r21\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r19, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r18, r18, r6\n\t" + "add r18, r18, r7\n\t" + /* Round 12 */ + "mr r9, r28\n\t" + "rotlwi r6, r14, 26\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r14, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r14\n\t" + "rotlwi r8, r14, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + "lwz r6, 48(r30)\n\t" + "add r17, r17, r9\n\t" + "add r17, r17, r6\n\t" + "add r21, r21, r17\n\t" + "rotlwi r6, r18, 30\n\t" + "xor r7, r18, r19\n\t" + "rotlwi r8, r18, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r19, r20\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r18, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r19\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + /* Round 13 */ + "evmergehi r9, r28, r28\n\t" + /* Calc new W[12]-W[13] */ + "evmergelohi r12, r29, r28\n\t" + "rotlwi r6, r21, 26\n\t" + "evrlwi r10, r27, 15\n\t" + "xor r7, r14, r15\n\t" + "evrlwi r11, r27, 13\n\t" + "rotlwi r8, r21, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r27, 10\n\t" + "and r7, r7, r21\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r21, 7\n\t" + "evaddw r28, r28, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r25, r24\n\t" + "xor r7, r7, r15\n\t" + "evaddw r28, r28, r10\n\t" + "add r16, r16, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r16, r16, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 52(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r16, r16, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r16, r16, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r20, r20, r16\n\t" + "evaddw r28, r28, r11\n\t" + "rotlwi r6, r17, 30\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r17, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r18, r19\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r17, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r16, r16, r6\n\t" + "add r16, r16, r7\n\t" + /* Round 14 */ + "mr r9, r29\n\t" + "rotlwi r6, r20, 26\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r20, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r20\n\t" + "rotlwi r8, r20, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + "lwz r6, 56(r30)\n\t" + "add r15, r15, r9\n\t" + "add r15, r15, r6\n\t" + "add r19, r19, r15\n\t" + "rotlwi r6, r16, 30\n\t" + "xor r7, r16, r17\n\t" + "rotlwi r8, r16, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r17, r18\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r16, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r17\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + /* Round 15 */ + "evmergehi r9, r29, r29\n\t" + /* Calc new W[14]-W[15] */ + "evmergelohi r12, r22, r29\n\t" + "rotlwi r6, r19, 26\n\t" + "evrlwi r10, r28, 15\n\t" + "xor r7, r20, r21\n\t" + "evrlwi r11, r28, 13\n\t" + "rotlwi r8, r19, 21\n\t" + "evxor r11, r11, r10\n\t" + "xor r6, r6, r8\n\t" + "evsrwiu r10, r28, 10\n\t" + "and r7, r7, r19\n\t" + "evxor r11, r11, r10\n\t" + "rotlwi r8, r19, 7\n\t" + "evaddw r29, r29, r11\n\t" + "xor r6, r6, r8\n\t" + "evmergelohi r10, r26, r25\n\t" + "xor r7, r7, r21\n\t" + "evaddw r29, r29, r10\n\t" + "add r14, r14, r6\n\t" + "evrlwi r10, r12, 25\n\t" + "add r14, r14, r7\n\t" + "evrlwi r11, r12, 14\n\t" + "lwz r6, 60(r30)\n\t" + "evxor r11, r11, r10\n\t" + "add r14, r14, r9\n\t" + "evsrwiu r12, r12, 3\n\t" + "add r14, r14, r6\n\t" + "evxor r11, r11, r12\n\t" + "add r18, r18, r14\n\t" + "evaddw r29, r29, r11\n\t" + "rotlwi r6, r15, 30\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r15, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r16, r17\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r15, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r14, r14, r6\n\t" + "add r14, r14, r7\n\t" + "addi r30, r30, 0x40\n\t" + "bdnz L_SHA256_transform_spe_len_start_%=\n\t" + /* Round 0 */ + "mr r9, r22\n\t" + "rotlwi r6, r18, 26\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r18, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r18\n\t" + "rotlwi r8, r18, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + "lwz r6, 0(r30)\n\t" + "add r21, r21, r9\n\t" + "add r21, r21, r6\n\t" + "add r17, r17, r21\n\t" + "rotlwi r6, r14, 30\n\t" + "xor r7, r14, r15\n\t" + "rotlwi r8, r14, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r15, r16\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r14, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r15\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + /* Round 1 */ + "evmergehi r9, r22, r22\n\t" + "rotlwi r6, r17, 26\n\t" + "xor r7, r18, r19\n\t" + "rotlwi r8, r17, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r17\n\t" + "rotlwi r8, r17, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r19\n\t" + "add r20, r20, r6\n\t" + "add r20, r20, r7\n\t" + "lwz r6, 4(r30)\n\t" + "add r20, r20, r9\n\t" + "add r20, r20, r6\n\t" + "add r16, r16, r20\n\t" + "rotlwi r6, r21, 30\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r21, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r14, r15\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r21, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r20, r20, r6\n\t" + "add r20, r20, r7\n\t" + /* Round 2 */ + "mr r9, r23\n\t" + "rotlwi r6, r16, 26\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r16, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r16\n\t" + "rotlwi r8, r16, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + "lwz r6, 8(r30)\n\t" + "add r19, r19, r9\n\t" + "add r19, r19, r6\n\t" + "add r15, r15, r19\n\t" + "rotlwi r6, r20, 30\n\t" + "xor r7, r20, r21\n\t" + "rotlwi r8, r20, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r21, r14\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r20, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r21\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + /* Round 3 */ + "evmergehi r9, r23, r23\n\t" + "rotlwi r6, r15, 26\n\t" + "xor r7, r16, r17\n\t" + "rotlwi r8, r15, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r15\n\t" + "rotlwi r8, r15, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r17\n\t" + "add r18, r18, r6\n\t" + "add r18, r18, r7\n\t" + "lwz r6, 12(r30)\n\t" + "add r18, r18, r9\n\t" + "add r18, r18, r6\n\t" + "add r14, r14, r18\n\t" + "rotlwi r6, r19, 30\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r19, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r20, r21\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r19, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r18, r18, r6\n\t" + "add r18, r18, r7\n\t" + /* Round 4 */ + "mr r9, r24\n\t" + "rotlwi r6, r14, 26\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r14, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r14\n\t" + "rotlwi r8, r14, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + "lwz r6, 16(r30)\n\t" + "add r17, r17, r9\n\t" + "add r17, r17, r6\n\t" + "add r21, r21, r17\n\t" + "rotlwi r6, r18, 30\n\t" + "xor r7, r18, r19\n\t" + "rotlwi r8, r18, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r19, r20\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r18, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r19\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + /* Round 5 */ + "evmergehi r9, r24, r24\n\t" + "rotlwi r6, r21, 26\n\t" + "xor r7, r14, r15\n\t" + "rotlwi r8, r21, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r21\n\t" + "rotlwi r8, r21, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r15\n\t" + "add r16, r16, r6\n\t" + "add r16, r16, r7\n\t" + "lwz r6, 20(r30)\n\t" + "add r16, r16, r9\n\t" + "add r16, r16, r6\n\t" + "add r20, r20, r16\n\t" + "rotlwi r6, r17, 30\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r17, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r18, r19\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r17, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r16, r16, r6\n\t" + "add r16, r16, r7\n\t" + /* Round 6 */ + "mr r9, r25\n\t" + "rotlwi r6, r20, 26\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r20, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r20\n\t" + "rotlwi r8, r20, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + "lwz r6, 24(r30)\n\t" + "add r15, r15, r9\n\t" + "add r15, r15, r6\n\t" + "add r19, r19, r15\n\t" + "rotlwi r6, r16, 30\n\t" + "xor r7, r16, r17\n\t" + "rotlwi r8, r16, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r17, r18\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r16, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r17\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + /* Round 7 */ + "evmergehi r9, r25, r25\n\t" + "rotlwi r6, r19, 26\n\t" + "xor r7, r20, r21\n\t" + "rotlwi r8, r19, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r19\n\t" + "rotlwi r8, r19, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r21\n\t" + "add r14, r14, r6\n\t" + "add r14, r14, r7\n\t" + "lwz r6, 28(r30)\n\t" + "add r14, r14, r9\n\t" + "add r14, r14, r6\n\t" + "add r18, r18, r14\n\t" + "rotlwi r6, r15, 30\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r15, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r16, r17\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r15, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r14, r14, r6\n\t" + "add r14, r14, r7\n\t" + /* Round 8 */ + "mr r9, r26\n\t" + "rotlwi r6, r18, 26\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r18, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r18\n\t" + "rotlwi r8, r18, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + "lwz r6, 32(r30)\n\t" + "add r21, r21, r9\n\t" + "add r21, r21, r6\n\t" + "add r17, r17, r21\n\t" + "rotlwi r6, r14, 30\n\t" + "xor r7, r14, r15\n\t" + "rotlwi r8, r14, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r15, r16\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r14, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r15\n\t" + "add r21, r21, r6\n\t" + "add r21, r21, r7\n\t" + /* Round 9 */ + "evmergehi r9, r26, r26\n\t" + "rotlwi r6, r17, 26\n\t" + "xor r7, r18, r19\n\t" + "rotlwi r8, r17, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r17\n\t" + "rotlwi r8, r17, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r19\n\t" + "add r20, r20, r6\n\t" + "add r20, r20, r7\n\t" + "lwz r6, 36(r30)\n\t" + "add r20, r20, r9\n\t" + "add r20, r20, r6\n\t" + "add r16, r16, r20\n\t" + "rotlwi r6, r21, 30\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r21, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r14, r15\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r21, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r20, r20, r6\n\t" + "add r20, r20, r7\n\t" + /* Round 10 */ + "mr r9, r27\n\t" + "rotlwi r6, r16, 26\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r16, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r16\n\t" + "rotlwi r8, r16, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + "lwz r6, 40(r30)\n\t" + "add r19, r19, r9\n\t" + "add r19, r19, r6\n\t" + "add r15, r15, r19\n\t" + "rotlwi r6, r20, 30\n\t" + "xor r7, r20, r21\n\t" + "rotlwi r8, r20, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r21, r14\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r20, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r21\n\t" + "add r19, r19, r6\n\t" + "add r19, r19, r7\n\t" + /* Round 11 */ + "evmergehi r9, r27, r27\n\t" + "rotlwi r6, r15, 26\n\t" + "xor r7, r16, r17\n\t" + "rotlwi r8, r15, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r15\n\t" + "rotlwi r8, r15, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r17\n\t" + "add r18, r18, r6\n\t" + "add r18, r18, r7\n\t" + "lwz r6, 44(r30)\n\t" + "add r18, r18, r9\n\t" + "add r18, r18, r6\n\t" + "add r14, r14, r18\n\t" + "rotlwi r6, r19, 30\n\t" + "xor r7, r19, r20\n\t" + "rotlwi r8, r19, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r20, r21\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r19, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r20\n\t" + "add r18, r18, r6\n\t" + "add r18, r18, r7\n\t" + /* Round 12 */ + "mr r9, r28\n\t" + "rotlwi r6, r14, 26\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r14, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r14\n\t" + "rotlwi r8, r14, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + "lwz r6, 48(r30)\n\t" + "add r17, r17, r9\n\t" + "add r17, r17, r6\n\t" + "add r21, r21, r17\n\t" + "rotlwi r6, r18, 30\n\t" + "xor r7, r18, r19\n\t" + "rotlwi r8, r18, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r19, r20\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r18, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r19\n\t" + "add r17, r17, r6\n\t" + "add r17, r17, r7\n\t" + /* Round 13 */ + "evmergehi r9, r28, r28\n\t" + "rotlwi r6, r21, 26\n\t" + "xor r7, r14, r15\n\t" + "rotlwi r8, r21, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r21\n\t" + "rotlwi r8, r21, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r15\n\t" + "add r16, r16, r6\n\t" + "add r16, r16, r7\n\t" + "lwz r6, 52(r30)\n\t" + "add r16, r16, r9\n\t" + "add r16, r16, r6\n\t" + "add r20, r20, r16\n\t" + "rotlwi r6, r17, 30\n\t" + "xor r7, r17, r18\n\t" + "rotlwi r8, r17, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r18, r19\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r17, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r18\n\t" + "add r16, r16, r6\n\t" + "add r16, r16, r7\n\t" + /* Round 14 */ + "mr r9, r29\n\t" + "rotlwi r6, r20, 26\n\t" + "xor r7, r21, r14\n\t" + "rotlwi r8, r20, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r20\n\t" + "rotlwi r8, r20, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r14\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + "lwz r6, 56(r30)\n\t" + "add r15, r15, r9\n\t" + "add r15, r15, r6\n\t" + "add r19, r19, r15\n\t" + "rotlwi r6, r16, 30\n\t" + "xor r7, r16, r17\n\t" + "rotlwi r8, r16, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r17, r18\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r16, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r17\n\t" + "add r15, r15, r6\n\t" + "add r15, r15, r7\n\t" + /* Round 15 */ + "evmergehi r9, r29, r29\n\t" + "rotlwi r6, r19, 26\n\t" + "xor r7, r20, r21\n\t" + "rotlwi r8, r19, 21\n\t" + "xor r6, r6, r8\n\t" + "and r7, r7, r19\n\t" + "rotlwi r8, r19, 7\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r21\n\t" + "add r14, r14, r6\n\t" + "add r14, r14, r7\n\t" + "lwz r6, 60(r30)\n\t" + "add r14, r14, r9\n\t" + "add r14, r14, r6\n\t" + "add r18, r18, r14\n\t" + "rotlwi r6, r15, 30\n\t" + "xor r7, r15, r16\n\t" + "rotlwi r8, r15, 19\n\t" + "xor r6, r6, r8\n\t" + "xor r8, r16, r17\n\t" + "and r7, r7, r8\n\t" + "rotlwi r8, r15, 10\n\t" + "xor r6, r6, r8\n\t" + "xor r7, r7, r16\n\t" + "add r14, r14, r6\n\t" + "add r14, r14, r7\n\t" + /* Add in digest from start */ + "lwz r6, 0(%[sha256])\n\t" + "lwz r7, 4(%[sha256])\n\t" + "add r14, r14, r6\n\t" + "add r15, r15, r7\n\t" + "lwz r6, 8(%[sha256])\n\t" + "lwz r7, 12(%[sha256])\n\t" + "add r16, r16, r6\n\t" + "add r17, r17, r7\n\t" + "lwz r6, 16(%[sha256])\n\t" + "lwz r7, 20(%[sha256])\n\t" + "add r18, r18, r6\n\t" + "add r19, r19, r7\n\t" + "lwz r6, 24(%[sha256])\n\t" + "lwz r7, 28(%[sha256])\n\t" + "add r20, r20, r6\n\t" + "add r21, r21, r7\n\t" + "stw r14, 0(%[sha256])\n\t" + "stw r15, 4(%[sha256])\n\t" + "stw r16, 8(%[sha256])\n\t" + "stw r17, 12(%[sha256])\n\t" + "stw r18, 16(%[sha256])\n\t" + "stw r19, 20(%[sha256])\n\t" + "stw r20, 24(%[sha256])\n\t" + "stw r21, 28(%[sha256])\n\t" + "subi r30, r30, 0xc0\n\t" + "mtctr %[len]\n\t" + "addi %[data], %[data], 0x40\n\t" + "subi %[len], %[len], 1\n\t" + "bdnz L_SHA256_transform_spe_len_begin_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len), + [L_SHA256_transform_spe_len_k] "+r" (L_SHA256_transform_spe_len_k_c) + : +#else + : + : [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len), + [L_SHA256_transform_spe_len_k] "r" (L_SHA256_transform_spe_len_k_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r7", "r8", "r9", "r10", "r11", "r12", "r14", + "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30" + ); +} + +#endif /* WOLFSSL_PPC32_ASM_SPE */ +#ifndef WOLFSSL_PPC32_ASM_SPE +#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, +}; + +#ifndef __PIC__ +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__ ( + "srwi %[len], %[len], 6\n\t" + "mr r6, %[L_SHA256_transform_len_k]\n\t" + /* Copy digest to add in at end */ + "lwz r7, 0(%[sha256])\n\t" + "lwz r8, 4(%[sha256])\n\t" + "lwz r9, 8(%[sha256])\n\t" + "lwz r10, 12(%[sha256])\n\t" + "lwz r11, 16(%[sha256])\n\t" + "lwz r12, 20(%[sha256])\n\t" + "lwz r14, 24(%[sha256])\n\t" + "lwz r15, 28(%[sha256])\n\t" +#ifndef WOLFSSL_PPC32_ASM_SMALL + "mtctr %[len]\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_len_begin_%=: \n\t" + /* Load W - 64 bytes */ + "lwz r16, 0(%[data])\n\t" + "lwz r17, 4(%[data])\n\t" + "lwz r18, 8(%[data])\n\t" + "lwz r19, 12(%[data])\n\t" + "lwz r20, 16(%[data])\n\t" + "lwz r21, 20(%[data])\n\t" + "lwz r22, 24(%[data])\n\t" + "lwz r23, 28(%[data])\n\t" + "lwz r24, 32(%[data])\n\t" + "lwz r25, 36(%[data])\n\t" + "lwz r26, 40(%[data])\n\t" + "lwz r27, 44(%[data])\n\t" + "lwz r28, 48(%[data])\n\t" + "lwz r29, 52(%[data])\n\t" + "lwz r30, 56(%[data])\n\t" + "lwz r31, 60(%[data])\n\t" + /* Start of 16 rounds */ + /* Round 0 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 0(r6)\n\t" + "add r15, r15, r16\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Calc new W[0] */ + "rotlwi r0, r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "rotlwi r0, r30, 15\n\t" + "rotlwi %[len], r30, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "add r16, r16, r25\n\t" + /* Round 1 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 4(r6)\n\t" + "add r14, r14, r17\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Calc new W[1] */ + "rotlwi r0, r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "rotlwi r0, r31, 15\n\t" + "rotlwi %[len], r31, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "add r17, r17, r26\n\t" + /* Round 2 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 8(r6)\n\t" + "add r12, r12, r18\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Calc new W[2] */ + "rotlwi r0, r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "rotlwi r0, r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "add r18, r18, r27\n\t" + /* Round 3 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 12(r6)\n\t" + "add r11, r11, r19\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Calc new W[3] */ + "rotlwi r0, r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "rotlwi r0, r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "add r19, r19, r28\n\t" + /* Round 4 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 16(r6)\n\t" + "add r10, r10, r20\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Calc new W[4] */ + "rotlwi r0, r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "rotlwi r0, r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "add r20, r20, r29\n\t" + /* Round 5 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 20(r6)\n\t" + "add r9, r9, r21\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Calc new W[5] */ + "rotlwi r0, r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "rotlwi r0, r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "add r21, r21, r30\n\t" + /* Round 6 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 24(r6)\n\t" + "add r8, r8, r22\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Calc new W[6] */ + "rotlwi r0, r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "rotlwi r0, r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "add r22, r22, r31\n\t" + /* Round 7 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 28(r6)\n\t" + "add r7, r7, r23\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Calc new W[7] */ + "rotlwi r0, r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "rotlwi r0, r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "add r23, r23, r16\n\t" + /* Round 8 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 32(r6)\n\t" + "add r15, r15, r24\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Calc new W[8] */ + "rotlwi r0, r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "rotlwi r0, r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "add r24, r24, r17\n\t" + /* Round 9 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 36(r6)\n\t" + "add r14, r14, r25\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Calc new W[9] */ + "rotlwi r0, r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "rotlwi r0, r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "add r25, r25, r18\n\t" + /* Round 10 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 40(r6)\n\t" + "add r12, r12, r26\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Calc new W[10] */ + "rotlwi r0, r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "rotlwi r0, r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "add r26, r26, r19\n\t" + /* Round 11 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 44(r6)\n\t" + "add r11, r11, r27\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Calc new W[11] */ + "rotlwi r0, r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "rotlwi r0, r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "add r27, r27, r20\n\t" + /* Round 12 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 48(r6)\n\t" + "add r10, r10, r28\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Calc new W[12] */ + "rotlwi r0, r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "rotlwi r0, r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "add r28, r28, r21\n\t" + /* Round 13 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 52(r6)\n\t" + "add r9, r9, r29\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Calc new W[13] */ + "rotlwi r0, r30, 25\n\t" + "rotlwi %[len], r30, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "rotlwi r0, r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "add r29, r29, r22\n\t" + /* Round 14 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 56(r6)\n\t" + "add r8, r8, r30\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Calc new W[14] */ + "rotlwi r0, r31, 25\n\t" + "rotlwi %[len], r31, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "rotlwi r0, r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "add r30, r30, r23\n\t" + /* Round 15 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 60(r6)\n\t" + "add r7, r7, r31\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Calc new W[15] */ + "rotlwi r0, r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "rotlwi r0, r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "add r31, r31, r24\n\t" + "addi r6, r6, 0x40\n\t" + /* Round 0 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 0(r6)\n\t" + "add r15, r15, r16\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Calc new W[0] */ + "rotlwi r0, r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "rotlwi r0, r30, 15\n\t" + "rotlwi %[len], r30, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "add r16, r16, r25\n\t" + /* Round 1 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 4(r6)\n\t" + "add r14, r14, r17\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Calc new W[1] */ + "rotlwi r0, r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "rotlwi r0, r31, 15\n\t" + "rotlwi %[len], r31, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "add r17, r17, r26\n\t" + /* Round 2 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 8(r6)\n\t" + "add r12, r12, r18\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Calc new W[2] */ + "rotlwi r0, r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "rotlwi r0, r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "add r18, r18, r27\n\t" + /* Round 3 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 12(r6)\n\t" + "add r11, r11, r19\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Calc new W[3] */ + "rotlwi r0, r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "rotlwi r0, r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "add r19, r19, r28\n\t" + /* Round 4 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 16(r6)\n\t" + "add r10, r10, r20\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Calc new W[4] */ + "rotlwi r0, r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "rotlwi r0, r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "add r20, r20, r29\n\t" + /* Round 5 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 20(r6)\n\t" + "add r9, r9, r21\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Calc new W[5] */ + "rotlwi r0, r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "rotlwi r0, r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "add r21, r21, r30\n\t" + /* Round 6 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 24(r6)\n\t" + "add r8, r8, r22\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Calc new W[6] */ + "rotlwi r0, r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "rotlwi r0, r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "add r22, r22, r31\n\t" + /* Round 7 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 28(r6)\n\t" + "add r7, r7, r23\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Calc new W[7] */ + "rotlwi r0, r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "rotlwi r0, r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "add r23, r23, r16\n\t" + /* Round 8 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 32(r6)\n\t" + "add r15, r15, r24\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Calc new W[8] */ + "rotlwi r0, r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "rotlwi r0, r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "add r24, r24, r17\n\t" + /* Round 9 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 36(r6)\n\t" + "add r14, r14, r25\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Calc new W[9] */ + "rotlwi r0, r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "rotlwi r0, r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "add r25, r25, r18\n\t" + /* Round 10 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 40(r6)\n\t" + "add r12, r12, r26\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Calc new W[10] */ + "rotlwi r0, r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "rotlwi r0, r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "add r26, r26, r19\n\t" + /* Round 11 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 44(r6)\n\t" + "add r11, r11, r27\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Calc new W[11] */ + "rotlwi r0, r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "rotlwi r0, r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "add r27, r27, r20\n\t" + /* Round 12 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 48(r6)\n\t" + "add r10, r10, r28\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Calc new W[12] */ + "rotlwi r0, r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "rotlwi r0, r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "add r28, r28, r21\n\t" + /* Round 13 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 52(r6)\n\t" + "add r9, r9, r29\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Calc new W[13] */ + "rotlwi r0, r30, 25\n\t" + "rotlwi %[len], r30, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "rotlwi r0, r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "add r29, r29, r22\n\t" + /* Round 14 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 56(r6)\n\t" + "add r8, r8, r30\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Calc new W[14] */ + "rotlwi r0, r31, 25\n\t" + "rotlwi %[len], r31, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "rotlwi r0, r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "add r30, r30, r23\n\t" + /* Round 15 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 60(r6)\n\t" + "add r7, r7, r31\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Calc new W[15] */ + "rotlwi r0, r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "rotlwi r0, r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "add r31, r31, r24\n\t" + "addi r6, r6, 0x40\n\t" + /* Round 0 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 0(r6)\n\t" + "add r15, r15, r16\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Calc new W[0] */ + "rotlwi r0, r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "rotlwi r0, r30, 15\n\t" + "rotlwi %[len], r30, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "add r16, r16, r25\n\t" + /* Round 1 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 4(r6)\n\t" + "add r14, r14, r17\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Calc new W[1] */ + "rotlwi r0, r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "rotlwi r0, r31, 15\n\t" + "rotlwi %[len], r31, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "add r17, r17, r26\n\t" + /* Round 2 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 8(r6)\n\t" + "add r12, r12, r18\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Calc new W[2] */ + "rotlwi r0, r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "rotlwi r0, r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "add r18, r18, r27\n\t" + /* Round 3 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 12(r6)\n\t" + "add r11, r11, r19\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Calc new W[3] */ + "rotlwi r0, r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "rotlwi r0, r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "add r19, r19, r28\n\t" + /* Round 4 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 16(r6)\n\t" + "add r10, r10, r20\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Calc new W[4] */ + "rotlwi r0, r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "rotlwi r0, r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "add r20, r20, r29\n\t" + /* Round 5 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 20(r6)\n\t" + "add r9, r9, r21\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Calc new W[5] */ + "rotlwi r0, r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "rotlwi r0, r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "add r21, r21, r30\n\t" + /* Round 6 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 24(r6)\n\t" + "add r8, r8, r22\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Calc new W[6] */ + "rotlwi r0, r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "rotlwi r0, r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "add r22, r22, r31\n\t" + /* Round 7 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 28(r6)\n\t" + "add r7, r7, r23\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Calc new W[7] */ + "rotlwi r0, r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "rotlwi r0, r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "add r23, r23, r16\n\t" + /* Round 8 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 32(r6)\n\t" + "add r15, r15, r24\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Calc new W[8] */ + "rotlwi r0, r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "rotlwi r0, r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "add r24, r24, r17\n\t" + /* Round 9 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 36(r6)\n\t" + "add r14, r14, r25\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Calc new W[9] */ + "rotlwi r0, r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "rotlwi r0, r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "add r25, r25, r18\n\t" + /* Round 10 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 40(r6)\n\t" + "add r12, r12, r26\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Calc new W[10] */ + "rotlwi r0, r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "rotlwi r0, r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "add r26, r26, r19\n\t" + /* Round 11 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 44(r6)\n\t" + "add r11, r11, r27\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Calc new W[11] */ + "rotlwi r0, r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "rotlwi r0, r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "add r27, r27, r20\n\t" + /* Round 12 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 48(r6)\n\t" + "add r10, r10, r28\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Calc new W[12] */ + "rotlwi r0, r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "rotlwi r0, r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "add r28, r28, r21\n\t" + /* Round 13 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 52(r6)\n\t" + "add r9, r9, r29\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Calc new W[13] */ + "rotlwi r0, r30, 25\n\t" + "rotlwi %[len], r30, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "rotlwi r0, r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "add r29, r29, r22\n\t" + /* Round 14 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 56(r6)\n\t" + "add r8, r8, r30\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Calc new W[14] */ + "rotlwi r0, r31, 25\n\t" + "rotlwi %[len], r31, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "rotlwi r0, r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "add r30, r30, r23\n\t" + /* Round 15 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 60(r6)\n\t" + "add r7, r7, r31\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Calc new W[15] */ + "rotlwi r0, r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "rotlwi r0, r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "add r31, r31, r24\n\t" + "addi r6, r6, 0x40\n\t" + /* Round 0 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 0(r6)\n\t" + "add r15, r15, r16\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Round 1 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 4(r6)\n\t" + "add r14, r14, r17\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Round 2 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 8(r6)\n\t" + "add r12, r12, r18\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Round 3 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 12(r6)\n\t" + "add r11, r11, r19\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Round 4 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 16(r6)\n\t" + "add r10, r10, r20\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Round 5 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 20(r6)\n\t" + "add r9, r9, r21\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Round 6 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 24(r6)\n\t" + "add r8, r8, r22\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Round 7 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 28(r6)\n\t" + "add r7, r7, r23\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + /* Round 8 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 32(r6)\n\t" + "add r15, r15, r24\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + /* Round 9 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 36(r6)\n\t" + "add r14, r14, r25\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + /* Round 10 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 40(r6)\n\t" + "add r12, r12, r26\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + /* Round 11 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 44(r6)\n\t" + "add r11, r11, r27\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + /* Round 12 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 48(r6)\n\t" + "add r10, r10, r28\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + /* Round 13 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 52(r6)\n\t" + "add r9, r9, r29\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + /* Round 14 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 56(r6)\n\t" + "add r8, r8, r30\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + /* Round 15 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 60(r6)\n\t" + "add r7, r7, r31\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + "subi r6, r6, 0xc0\n\t" + /* Add in digest from start */ + "lwz r0, 0(%[sha256])\n\t" + "lwz %[len], 4(%[sha256])\n\t" + "add r7, r7, r0\n\t" + "add r8, r8, %[len]\n\t" + "lwz r0, 8(%[sha256])\n\t" + "lwz %[len], 12(%[sha256])\n\t" + "add r9, r9, r0\n\t" + "add r10, r10, %[len]\n\t" + "lwz r0, 16(%[sha256])\n\t" + "lwz %[len], 20(%[sha256])\n\t" + "add r11, r11, r0\n\t" + "add r12, r12, %[len]\n\t" + "lwz r0, 24(%[sha256])\n\t" + "lwz %[len], 28(%[sha256])\n\t" + "add r14, r14, r0\n\t" + "add r15, r15, %[len]\n\t" + "stw r7, 0(%[sha256])\n\t" + "stw r8, 4(%[sha256])\n\t" + "stw r9, 8(%[sha256])\n\t" + "stw r10, 12(%[sha256])\n\t" + "stw r11, 16(%[sha256])\n\t" + "stw r12, 20(%[sha256])\n\t" + "stw r14, 24(%[sha256])\n\t" + "stw r15, 28(%[sha256])\n\t" + "addi %[data], %[data], 0x40\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" +#else + "subi r1, r1, 4\n\t" + "stw %[len], 0(r1)\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_len_begin_%=: \n\t" + /* Load W - 64 bytes */ + "lwz r16, 0(%[data])\n\t" + "lwz r17, 4(%[data])\n\t" + "lwz r18, 8(%[data])\n\t" + "lwz r19, 12(%[data])\n\t" + "lwz r20, 16(%[data])\n\t" + "lwz r21, 20(%[data])\n\t" + "lwz r22, 24(%[data])\n\t" + "lwz r23, 28(%[data])\n\t" + "lwz r24, 32(%[data])\n\t" + "lwz r25, 36(%[data])\n\t" + "lwz r26, 40(%[data])\n\t" + "lwz r27, 44(%[data])\n\t" + "lwz r28, 48(%[data])\n\t" + "lwz r29, 52(%[data])\n\t" + "lwz r30, 56(%[data])\n\t" + "lwz r31, 60(%[data])\n\t" + "li r0, 4\n\t" + "mtctr r0\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_len_start_%=: \n\t" + /* Round 0 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 0(r6)\n\t" + "add r15, r15, r16\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_0_%=\n\t" + /* Calc new W[0] */ + "rotlwi r0, r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "rotlwi r0, r30, 15\n\t" + "rotlwi %[len], r30, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r16, r16, r0\n\t" + "add r16, r16, r25\n\t" + "\n" + "L_SHA256_transform_len_after_blk_0_%=: \n\t" + /* Round 1 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 4(r6)\n\t" + "add r14, r14, r17\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_1_%=\n\t" + /* Calc new W[1] */ + "rotlwi r0, r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "rotlwi r0, r31, 15\n\t" + "rotlwi %[len], r31, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r17, r17, r0\n\t" + "add r17, r17, r26\n\t" + "\n" + "L_SHA256_transform_len_after_blk_1_%=: \n\t" + /* Round 2 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 8(r6)\n\t" + "add r12, r12, r18\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_2_%=\n\t" + /* Calc new W[2] */ + "rotlwi r0, r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "rotlwi r0, r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r18, r18, r0\n\t" + "add r18, r18, r27\n\t" + "\n" + "L_SHA256_transform_len_after_blk_2_%=: \n\t" + /* Round 3 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 12(r6)\n\t" + "add r11, r11, r19\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_3_%=\n\t" + /* Calc new W[3] */ + "rotlwi r0, r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "rotlwi r0, r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r19, r19, r0\n\t" + "add r19, r19, r28\n\t" + "\n" + "L_SHA256_transform_len_after_blk_3_%=: \n\t" + /* Round 4 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 16(r6)\n\t" + "add r10, r10, r20\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_4_%=\n\t" + /* Calc new W[4] */ + "rotlwi r0, r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "rotlwi r0, r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r20, r20, r0\n\t" + "add r20, r20, r29\n\t" + "\n" + "L_SHA256_transform_len_after_blk_4_%=: \n\t" + /* Round 5 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 20(r6)\n\t" + "add r9, r9, r21\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_5_%=\n\t" + /* Calc new W[5] */ + "rotlwi r0, r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "rotlwi r0, r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r21, r21, r0\n\t" + "add r21, r21, r30\n\t" + "\n" + "L_SHA256_transform_len_after_blk_5_%=: \n\t" + /* Round 6 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 24(r6)\n\t" + "add r8, r8, r22\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_6_%=\n\t" + /* Calc new W[6] */ + "rotlwi r0, r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "rotlwi r0, r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r22, r22, r0\n\t" + "add r22, r22, r31\n\t" + "\n" + "L_SHA256_transform_len_after_blk_6_%=: \n\t" + /* Round 7 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 28(r6)\n\t" + "add r7, r7, r23\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_7_%=\n\t" + /* Calc new W[7] */ + "rotlwi r0, r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "rotlwi r0, r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r23, r23, r0\n\t" + "add r23, r23, r16\n\t" + "\n" + "L_SHA256_transform_len_after_blk_7_%=: \n\t" + /* Round 8 */ + "rotlwi r0, r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, r11\n\t" + "xor r0, r0, r14\n\t" + "add r15, r15, r0\n\t" + "lwz r0, 32(r6)\n\t" + "add r15, r15, r24\n\t" + "add r15, r15, r0\n\t" + "add r10, r10, r15\n\t" + "rotlwi r0, r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r15, r15, r0\n\t" + "xor %[len], r7, r8\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r8\n\t" + "add r15, r15, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_8_%=\n\t" + /* Calc new W[8] */ + "rotlwi r0, r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "rotlwi r0, r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r24, r24, r0\n\t" + "add r24, r24, r17\n\t" + "\n" + "L_SHA256_transform_len_after_blk_8_%=: \n\t" + /* Round 9 */ + "rotlwi r0, r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, r10\n\t" + "xor r0, r0, r12\n\t" + "add r14, r14, r0\n\t" + "lwz r0, 36(r6)\n\t" + "add r14, r14, r25\n\t" + "add r14, r14, r0\n\t" + "add r9, r9, r14\n\t" + "rotlwi r0, r15, 30\n\t" + "rotlwi %[len], r15, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r14, r14, r0\n\t" + "xor %[len], r15, r7\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r7\n\t" + "add r14, r14, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_9_%=\n\t" + /* Calc new W[9] */ + "rotlwi r0, r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "rotlwi r0, r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r25, r25, r0\n\t" + "add r25, r25, r18\n\t" + "\n" + "L_SHA256_transform_len_after_blk_9_%=: \n\t" + /* Round 10 */ + "rotlwi r0, r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, r9\n\t" + "xor r0, r0, r11\n\t" + "add r12, r12, r0\n\t" + "lwz r0, 40(r6)\n\t" + "add r12, r12, r26\n\t" + "add r12, r12, r0\n\t" + "add r8, r8, r12\n\t" + "rotlwi r0, r14, 30\n\t" + "rotlwi %[len], r14, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r12, r12, r0\n\t" + "xor %[len], r14, r15\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r15\n\t" + "add r12, r12, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_10_%=\n\t" + /* Calc new W[10] */ + "rotlwi r0, r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "rotlwi r0, r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r26, r26, r0\n\t" + "add r26, r26, r19\n\t" + "\n" + "L_SHA256_transform_len_after_blk_10_%=: \n\t" + /* Round 11 */ + "rotlwi r0, r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, r8\n\t" + "xor r0, r0, r10\n\t" + "add r11, r11, r0\n\t" + "lwz r0, 44(r6)\n\t" + "add r11, r11, r27\n\t" + "add r11, r11, r0\n\t" + "add r7, r7, r11\n\t" + "rotlwi r0, r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r11, r11, r0\n\t" + "xor %[len], r12, r14\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r14\n\t" + "add r11, r11, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_11_%=\n\t" + /* Calc new W[11] */ + "rotlwi r0, r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "rotlwi r0, r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r27, r27, r0\n\t" + "add r27, r27, r20\n\t" + "\n" + "L_SHA256_transform_len_after_blk_11_%=: \n\t" + /* Round 12 */ + "rotlwi r0, r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor r0, r8, r9\n\t" + "and r0, r0, r7\n\t" + "xor r0, r0, r9\n\t" + "add r10, r10, r0\n\t" + "lwz r0, 48(r6)\n\t" + "add r10, r10, r28\n\t" + "add r10, r10, r0\n\t" + "add r15, r15, r10\n\t" + "rotlwi r0, r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r10, r10, r0\n\t" + "xor %[len], r11, r12\n\t" + "xor r0, r12, r14\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r12\n\t" + "add r10, r10, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_12_%=\n\t" + /* Calc new W[12] */ + "rotlwi r0, r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "rotlwi r0, r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r28, r28, r0\n\t" + "add r28, r28, r21\n\t" + "\n" + "L_SHA256_transform_len_after_blk_12_%=: \n\t" + /* Round 13 */ + "rotlwi r0, r15, 26\n\t" + "rotlwi %[len], r15, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r15, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor r0, r7, r8\n\t" + "and r0, r0, r15\n\t" + "xor r0, r0, r8\n\t" + "add r9, r9, r0\n\t" + "lwz r0, 52(r6)\n\t" + "add r9, r9, r29\n\t" + "add r9, r9, r0\n\t" + "add r14, r14, r9\n\t" + "rotlwi r0, r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r9, r9, r0\n\t" + "xor %[len], r10, r11\n\t" + "xor r0, r11, r12\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r11\n\t" + "add r9, r9, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_13_%=\n\t" + /* Calc new W[13] */ + "rotlwi r0, r30, 25\n\t" + "rotlwi %[len], r30, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r30, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "rotlwi r0, r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r29, r29, r0\n\t" + "add r29, r29, r22\n\t" + "\n" + "L_SHA256_transform_len_after_blk_13_%=: \n\t" + /* Round 14 */ + "rotlwi r0, r14, 26\n\t" + "rotlwi %[len], r14, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r14, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor r0, r15, r7\n\t" + "and r0, r0, r14\n\t" + "xor r0, r0, r7\n\t" + "add r8, r8, r0\n\t" + "lwz r0, 56(r6)\n\t" + "add r8, r8, r30\n\t" + "add r8, r8, r0\n\t" + "add r12, r12, r8\n\t" + "rotlwi r0, r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r8, r8, r0\n\t" + "xor %[len], r9, r10\n\t" + "xor r0, r10, r11\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r10\n\t" + "add r8, r8, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_14_%=\n\t" + /* Calc new W[14] */ + "rotlwi r0, r31, 25\n\t" + "rotlwi %[len], r31, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r31, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "rotlwi r0, r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r30, r30, r0\n\t" + "add r30, r30, r23\n\t" + "\n" + "L_SHA256_transform_len_after_blk_14_%=: \n\t" + /* Round 15 */ + "rotlwi r0, r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor r0, r14, r15\n\t" + "and r0, r0, r12\n\t" + "xor r0, r0, r15\n\t" + "add r7, r7, r0\n\t" + "lwz r0, 60(r6)\n\t" + "add r7, r7, r31\n\t" + "add r7, r7, r0\n\t" + "add r11, r11, r7\n\t" + "rotlwi r0, r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor r0, r0, %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r7, r7, r0\n\t" + "xor %[len], r8, r9\n\t" + "xor r0, r9, r10\n\t" + "and r0, r0, %[len]\n\t" + "xor r0, r0, r9\n\t" + "add r7, r7, r0\n\t" + "mfctr %[len]\n\t" + "cmpwi r0, %[len], 1\n\t" + "beq r0, L_SHA256_transform_len_after_blk_15_%=\n\t" + /* Calc new W[15] */ + "rotlwi r0, r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "rotlwi r0, r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor r0, r0, %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor r0, r0, %[len]\n\t" + "add r31, r31, r0\n\t" + "add r31, r31, r24\n\t" + "\n" + "L_SHA256_transform_len_after_blk_15_%=: \n\t" + "addi r6, r6, 0x40\n\t" + "bdnz L_SHA256_transform_len_start_%=\n\t" + "subi r6, r6, 0x100\n\t" + /* Add in digest from start */ + "lwz r0, 0(%[sha256])\n\t" + "lwz %[len], 4(%[sha256])\n\t" + "add r7, r7, r0\n\t" + "add r8, r8, %[len]\n\t" + "lwz r0, 8(%[sha256])\n\t" + "lwz %[len], 12(%[sha256])\n\t" + "add r9, r9, r0\n\t" + "add r10, r10, %[len]\n\t" + "lwz r0, 16(%[sha256])\n\t" + "lwz %[len], 20(%[sha256])\n\t" + "add r11, r11, r0\n\t" + "add r12, r12, %[len]\n\t" + "lwz r0, 24(%[sha256])\n\t" + "lwz %[len], 28(%[sha256])\n\t" + "add r14, r14, r0\n\t" + "add r15, r15, %[len]\n\t" + "stw r7, 0(%[sha256])\n\t" + "stw r8, 4(%[sha256])\n\t" + "stw r9, 8(%[sha256])\n\t" + "stw r10, 12(%[sha256])\n\t" + "stw r11, 16(%[sha256])\n\t" + "stw r12, 20(%[sha256])\n\t" + "stw r14, 24(%[sha256])\n\t" + "stw r15, 28(%[sha256])\n\t" + "lwz %[len], 0(r1)\n\t" + "mtctr %[len]\n\t" + "subi %[len], %[len], 1\n\t" + "addi %[data], %[data], 0x40\n\t" + "stw %[len], 0(r1)\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" + "addi r1, r1, 4\n\t" +#endif /* WOLFSSL_PPC32_ASM_SMALL */ +#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", "r0", "r7", "r8", "r9", "r10", "r11", "r12", "r14", + "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31" + ); +} + +#else +/* PIC version not using register 30 or 31 */ +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__ ( + "srwi %[len], %[len], 6\n\t" + "mr r6, %[L_SHA256_transform_len_k]\n\t" +#ifndef WOLFSSL_PPC32_ASM_SMALL + "subi r1, r1, 8\n\t" + "stw %[sha256], 0(r1)\n\t" + "stw %[data], 4(r1)\n\t" + "mtctr %[len]\n\t" + /* Copy digest to add in at end */ + "lwz r0, 0(%[sha256])\n\t" + "lwz %[data], 4(%[sha256])\n\t" + "lwz r7, 8(%[sha256])\n\t" + "lwz r8, 12(%[sha256])\n\t" + "lwz r9, 16(%[sha256])\n\t" + "lwz r10, 20(%[sha256])\n\t" + "lwz r11, 24(%[sha256])\n\t" + "lwz r12, 28(%[sha256])\n\t" + "lwz %[sha256], 4(r1)\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_len_begin_%=: \n\t" + /* Load W - 64 bytes */ + "lwz r14, 0(%[sha256])\n\t" + "lwz r15, 4(%[sha256])\n\t" + "lwz r16, 8(%[sha256])\n\t" + "lwz r17, 12(%[sha256])\n\t" + "lwz r18, 16(%[sha256])\n\t" + "lwz r19, 20(%[sha256])\n\t" + "lwz r20, 24(%[sha256])\n\t" + "lwz r21, 28(%[sha256])\n\t" + "lwz r22, 32(%[sha256])\n\t" + "lwz r23, 36(%[sha256])\n\t" + "lwz r24, 40(%[sha256])\n\t" + "lwz r25, 44(%[sha256])\n\t" + "lwz r26, 48(%[sha256])\n\t" + "lwz r27, 52(%[sha256])\n\t" + "lwz r28, 56(%[sha256])\n\t" + "lwz r29, 60(%[sha256])\n\t" + /* Start of 16 rounds */ + /* Round 0 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 0(r6)\n\t" + "add r12, r12, r14\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Calc new W[0] */ + "rotlwi %[sha256], r15, 25\n\t" + "rotlwi %[len], r15, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "rotlwi %[sha256], r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "add r14, r14, r23\n\t" + /* Round 1 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 4(r6)\n\t" + "add r11, r11, r15\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Calc new W[1] */ + "rotlwi %[sha256], r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "rotlwi %[sha256], r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "add r15, r15, r24\n\t" + /* Round 2 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 8(r6)\n\t" + "add r10, r10, r16\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Calc new W[2] */ + "rotlwi %[sha256], r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "rotlwi %[sha256], r14, 15\n\t" + "rotlwi %[len], r14, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "add r16, r16, r25\n\t" + /* Round 3 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 12(r6)\n\t" + "add r9, r9, r17\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Calc new W[3] */ + "rotlwi %[sha256], r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "rotlwi %[sha256], r15, 15\n\t" + "rotlwi %[len], r15, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "add r17, r17, r26\n\t" + /* Round 4 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 16(r6)\n\t" + "add r8, r8, r18\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Calc new W[4] */ + "rotlwi %[sha256], r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "rotlwi %[sha256], r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "add r18, r18, r27\n\t" + /* Round 5 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 20(r6)\n\t" + "add r7, r7, r19\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Calc new W[5] */ + "rotlwi %[sha256], r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "rotlwi %[sha256], r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "add r19, r19, r28\n\t" + /* Round 6 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 24(r6)\n\t" + "add %[data], %[data], r20\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Calc new W[6] */ + "rotlwi %[sha256], r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "rotlwi %[sha256], r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "add r20, r20, r29\n\t" + /* Round 7 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 28(r6)\n\t" + "add r0, r0, r21\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Calc new W[7] */ + "rotlwi %[sha256], r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "rotlwi %[sha256], r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "add r21, r21, r14\n\t" + /* Round 8 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 32(r6)\n\t" + "add r12, r12, r22\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Calc new W[8] */ + "rotlwi %[sha256], r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "rotlwi %[sha256], r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "add r22, r22, r15\n\t" + /* Round 9 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 36(r6)\n\t" + "add r11, r11, r23\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Calc new W[9] */ + "rotlwi %[sha256], r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "rotlwi %[sha256], r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "add r23, r23, r16\n\t" + /* Round 10 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 40(r6)\n\t" + "add r10, r10, r24\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Calc new W[10] */ + "rotlwi %[sha256], r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "rotlwi %[sha256], r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "add r24, r24, r17\n\t" + /* Round 11 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 44(r6)\n\t" + "add r9, r9, r25\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Calc new W[11] */ + "rotlwi %[sha256], r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "rotlwi %[sha256], r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "add r25, r25, r18\n\t" + /* Round 12 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 48(r6)\n\t" + "add r8, r8, r26\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Calc new W[12] */ + "rotlwi %[sha256], r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "rotlwi %[sha256], r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "add r26, r26, r19\n\t" + /* Round 13 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 52(r6)\n\t" + "add r7, r7, r27\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Calc new W[13] */ + "rotlwi %[sha256], r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "rotlwi %[sha256], r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "add r27, r27, r20\n\t" + /* Round 14 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 56(r6)\n\t" + "add %[data], %[data], r28\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Calc new W[14] */ + "rotlwi %[sha256], r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "rotlwi %[sha256], r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "add r28, r28, r21\n\t" + /* Round 15 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 60(r6)\n\t" + "add r0, r0, r29\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Calc new W[15] */ + "rotlwi %[sha256], r14, 25\n\t" + "rotlwi %[len], r14, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "rotlwi %[sha256], r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "add r29, r29, r22\n\t" + "addi r6, r6, 0x40\n\t" + /* Round 0 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 0(r6)\n\t" + "add r12, r12, r14\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Calc new W[0] */ + "rotlwi %[sha256], r15, 25\n\t" + "rotlwi %[len], r15, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "rotlwi %[sha256], r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "add r14, r14, r23\n\t" + /* Round 1 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 4(r6)\n\t" + "add r11, r11, r15\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Calc new W[1] */ + "rotlwi %[sha256], r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "rotlwi %[sha256], r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "add r15, r15, r24\n\t" + /* Round 2 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 8(r6)\n\t" + "add r10, r10, r16\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Calc new W[2] */ + "rotlwi %[sha256], r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "rotlwi %[sha256], r14, 15\n\t" + "rotlwi %[len], r14, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "add r16, r16, r25\n\t" + /* Round 3 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 12(r6)\n\t" + "add r9, r9, r17\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Calc new W[3] */ + "rotlwi %[sha256], r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "rotlwi %[sha256], r15, 15\n\t" + "rotlwi %[len], r15, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "add r17, r17, r26\n\t" + /* Round 4 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 16(r6)\n\t" + "add r8, r8, r18\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Calc new W[4] */ + "rotlwi %[sha256], r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "rotlwi %[sha256], r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "add r18, r18, r27\n\t" + /* Round 5 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 20(r6)\n\t" + "add r7, r7, r19\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Calc new W[5] */ + "rotlwi %[sha256], r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "rotlwi %[sha256], r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "add r19, r19, r28\n\t" + /* Round 6 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 24(r6)\n\t" + "add %[data], %[data], r20\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Calc new W[6] */ + "rotlwi %[sha256], r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "rotlwi %[sha256], r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "add r20, r20, r29\n\t" + /* Round 7 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 28(r6)\n\t" + "add r0, r0, r21\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Calc new W[7] */ + "rotlwi %[sha256], r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "rotlwi %[sha256], r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "add r21, r21, r14\n\t" + /* Round 8 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 32(r6)\n\t" + "add r12, r12, r22\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Calc new W[8] */ + "rotlwi %[sha256], r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "rotlwi %[sha256], r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "add r22, r22, r15\n\t" + /* Round 9 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 36(r6)\n\t" + "add r11, r11, r23\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Calc new W[9] */ + "rotlwi %[sha256], r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "rotlwi %[sha256], r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "add r23, r23, r16\n\t" + /* Round 10 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 40(r6)\n\t" + "add r10, r10, r24\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Calc new W[10] */ + "rotlwi %[sha256], r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "rotlwi %[sha256], r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "add r24, r24, r17\n\t" + /* Round 11 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 44(r6)\n\t" + "add r9, r9, r25\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Calc new W[11] */ + "rotlwi %[sha256], r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "rotlwi %[sha256], r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "add r25, r25, r18\n\t" + /* Round 12 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 48(r6)\n\t" + "add r8, r8, r26\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Calc new W[12] */ + "rotlwi %[sha256], r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "rotlwi %[sha256], r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "add r26, r26, r19\n\t" + /* Round 13 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 52(r6)\n\t" + "add r7, r7, r27\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Calc new W[13] */ + "rotlwi %[sha256], r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "rotlwi %[sha256], r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "add r27, r27, r20\n\t" + /* Round 14 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 56(r6)\n\t" + "add %[data], %[data], r28\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Calc new W[14] */ + "rotlwi %[sha256], r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "rotlwi %[sha256], r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "add r28, r28, r21\n\t" + /* Round 15 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 60(r6)\n\t" + "add r0, r0, r29\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Calc new W[15] */ + "rotlwi %[sha256], r14, 25\n\t" + "rotlwi %[len], r14, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "rotlwi %[sha256], r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "add r29, r29, r22\n\t" + "addi r6, r6, 0x40\n\t" + /* Round 0 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 0(r6)\n\t" + "add r12, r12, r14\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Calc new W[0] */ + "rotlwi %[sha256], r15, 25\n\t" + "rotlwi %[len], r15, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "rotlwi %[sha256], r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "add r14, r14, r23\n\t" + /* Round 1 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 4(r6)\n\t" + "add r11, r11, r15\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Calc new W[1] */ + "rotlwi %[sha256], r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "rotlwi %[sha256], r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "add r15, r15, r24\n\t" + /* Round 2 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 8(r6)\n\t" + "add r10, r10, r16\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Calc new W[2] */ + "rotlwi %[sha256], r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "rotlwi %[sha256], r14, 15\n\t" + "rotlwi %[len], r14, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "add r16, r16, r25\n\t" + /* Round 3 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 12(r6)\n\t" + "add r9, r9, r17\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Calc new W[3] */ + "rotlwi %[sha256], r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "rotlwi %[sha256], r15, 15\n\t" + "rotlwi %[len], r15, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "add r17, r17, r26\n\t" + /* Round 4 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 16(r6)\n\t" + "add r8, r8, r18\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Calc new W[4] */ + "rotlwi %[sha256], r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "rotlwi %[sha256], r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "add r18, r18, r27\n\t" + /* Round 5 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 20(r6)\n\t" + "add r7, r7, r19\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Calc new W[5] */ + "rotlwi %[sha256], r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "rotlwi %[sha256], r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "add r19, r19, r28\n\t" + /* Round 6 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 24(r6)\n\t" + "add %[data], %[data], r20\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Calc new W[6] */ + "rotlwi %[sha256], r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "rotlwi %[sha256], r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "add r20, r20, r29\n\t" + /* Round 7 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 28(r6)\n\t" + "add r0, r0, r21\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Calc new W[7] */ + "rotlwi %[sha256], r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "rotlwi %[sha256], r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "add r21, r21, r14\n\t" + /* Round 8 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 32(r6)\n\t" + "add r12, r12, r22\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Calc new W[8] */ + "rotlwi %[sha256], r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "rotlwi %[sha256], r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "add r22, r22, r15\n\t" + /* Round 9 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 36(r6)\n\t" + "add r11, r11, r23\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Calc new W[9] */ + "rotlwi %[sha256], r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "rotlwi %[sha256], r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "add r23, r23, r16\n\t" + /* Round 10 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 40(r6)\n\t" + "add r10, r10, r24\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Calc new W[10] */ + "rotlwi %[sha256], r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "rotlwi %[sha256], r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "add r24, r24, r17\n\t" + /* Round 11 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 44(r6)\n\t" + "add r9, r9, r25\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Calc new W[11] */ + "rotlwi %[sha256], r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "rotlwi %[sha256], r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "add r25, r25, r18\n\t" + /* Round 12 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 48(r6)\n\t" + "add r8, r8, r26\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Calc new W[12] */ + "rotlwi %[sha256], r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "rotlwi %[sha256], r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "add r26, r26, r19\n\t" + /* Round 13 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 52(r6)\n\t" + "add r7, r7, r27\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Calc new W[13] */ + "rotlwi %[sha256], r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "rotlwi %[sha256], r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "add r27, r27, r20\n\t" + /* Round 14 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 56(r6)\n\t" + "add %[data], %[data], r28\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Calc new W[14] */ + "rotlwi %[sha256], r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "rotlwi %[sha256], r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "add r28, r28, r21\n\t" + /* Round 15 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 60(r6)\n\t" + "add r0, r0, r29\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Calc new W[15] */ + "rotlwi %[sha256], r14, 25\n\t" + "rotlwi %[len], r14, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "rotlwi %[sha256], r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "add r29, r29, r22\n\t" + "addi r6, r6, 0x40\n\t" + /* Round 0 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 0(r6)\n\t" + "add r12, r12, r14\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Round 1 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 4(r6)\n\t" + "add r11, r11, r15\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Round 2 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 8(r6)\n\t" + "add r10, r10, r16\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Round 3 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 12(r6)\n\t" + "add r9, r9, r17\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Round 4 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 16(r6)\n\t" + "add r8, r8, r18\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Round 5 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 20(r6)\n\t" + "add r7, r7, r19\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Round 6 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 24(r6)\n\t" + "add %[data], %[data], r20\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Round 7 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 28(r6)\n\t" + "add r0, r0, r21\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + /* Round 8 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 32(r6)\n\t" + "add r12, r12, r22\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + /* Round 9 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 36(r6)\n\t" + "add r11, r11, r23\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + /* Round 10 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 40(r6)\n\t" + "add r10, r10, r24\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + /* Round 11 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 44(r6)\n\t" + "add r9, r9, r25\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + /* Round 12 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 48(r6)\n\t" + "add r8, r8, r26\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + /* Round 13 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 52(r6)\n\t" + "add r7, r7, r27\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + /* Round 14 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 56(r6)\n\t" + "add %[data], %[data], r28\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + /* Round 15 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 60(r6)\n\t" + "add r0, r0, r29\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + "subi r6, r6, 0xc0\n\t" + "lwz %[sha256], 0(r1)\n\t" + /* Add in digest from start */ + "lwz %[len], 0(%[sha256])\n\t" + "add r0, r0, %[len]\n\t" + "lwz %[len], 4(%[sha256])\n\t" + "add %[data], %[data], %[len]\n\t" + "lwz %[len], 8(%[sha256])\n\t" + "add r7, r7, %[len]\n\t" + "lwz %[len], 12(%[sha256])\n\t" + "add r8, r8, %[len]\n\t" + "lwz %[len], 16(%[sha256])\n\t" + "add r9, r9, %[len]\n\t" + "lwz %[len], 20(%[sha256])\n\t" + "add r10, r10, %[len]\n\t" + "lwz %[len], 24(%[sha256])\n\t" + "add r11, r11, %[len]\n\t" + "lwz %[len], 28(%[sha256])\n\t" + "add r12, r12, %[len]\n\t" + "stw r0, 0(%[sha256])\n\t" + "stw %[data], 4(%[sha256])\n\t" + "stw r7, 8(%[sha256])\n\t" + "stw r8, 12(%[sha256])\n\t" + "stw r9, 16(%[sha256])\n\t" + "stw r10, 20(%[sha256])\n\t" + "stw r11, 24(%[sha256])\n\t" + "stw r12, 28(%[sha256])\n\t" + "lwz %[sha256], 4(r1)\n\t" + "addi %[sha256], %[sha256], 0x40\n\t" + "stw %[sha256], 4(r1)\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" + "addi r1, r1, 8\n\t" +#else + "subi r1, r1, 12\n\t" + "stw %[sha256], 0(r1)\n\t" + "stw %[data], 4(r1)\n\t" + "stw %[len], 8(r1)\n\t" + /* Copy digest to add in at end */ + "lwz r0, 0(%[sha256])\n\t" + "lwz %[data], 4(%[sha256])\n\t" + "lwz r7, 8(%[sha256])\n\t" + "lwz r8, 12(%[sha256])\n\t" + "lwz r9, 16(%[sha256])\n\t" + "lwz r10, 20(%[sha256])\n\t" + "lwz r11, 24(%[sha256])\n\t" + "lwz r12, 28(%[sha256])\n\t" + "lwz %[sha256], 4(r1)\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_len_begin_%=: \n\t" + /* Load W - 64 bytes */ + "lwz r14, 0(%[sha256])\n\t" + "lwz r15, 4(%[sha256])\n\t" + "lwz r16, 8(%[sha256])\n\t" + "lwz r17, 12(%[sha256])\n\t" + "lwz r18, 16(%[sha256])\n\t" + "lwz r19, 20(%[sha256])\n\t" + "lwz r20, 24(%[sha256])\n\t" + "lwz r21, 28(%[sha256])\n\t" + "lwz r22, 32(%[sha256])\n\t" + "lwz r23, 36(%[sha256])\n\t" + "lwz r24, 40(%[sha256])\n\t" + "lwz r25, 44(%[sha256])\n\t" + "lwz r26, 48(%[sha256])\n\t" + "lwz r27, 52(%[sha256])\n\t" + "lwz r28, 56(%[sha256])\n\t" + "lwz r29, 60(%[sha256])\n\t" + "li %[sha256], 4\n\t" + "mtctr %[sha256]\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_len_start_%=: \n\t" + /* Round 0 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 0(r6)\n\t" + "add r12, r12, r14\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_0_%=\n\t" + /* Calc new W[0] */ + "rotlwi %[sha256], r15, 25\n\t" + "rotlwi %[len], r15, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "rotlwi %[sha256], r28, 15\n\t" + "rotlwi %[len], r28, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r14, r14, %[sha256]\n\t" + "add r14, r14, r23\n\t" + "\n" + "L_SHA256_transform_len_after_blk_0_%=: \n\t" + /* Round 1 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 4(r6)\n\t" + "add r11, r11, r15\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_1_%=\n\t" + /* Calc new W[1] */ + "rotlwi %[sha256], r16, 25\n\t" + "rotlwi %[len], r16, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "rotlwi %[sha256], r29, 15\n\t" + "rotlwi %[len], r29, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r15, r15, %[sha256]\n\t" + "add r15, r15, r24\n\t" + "\n" + "L_SHA256_transform_len_after_blk_1_%=: \n\t" + /* Round 2 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 8(r6)\n\t" + "add r10, r10, r16\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_2_%=\n\t" + /* Calc new W[2] */ + "rotlwi %[sha256], r17, 25\n\t" + "rotlwi %[len], r17, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "rotlwi %[sha256], r14, 15\n\t" + "rotlwi %[len], r14, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r16, r16, %[sha256]\n\t" + "add r16, r16, r25\n\t" + "\n" + "L_SHA256_transform_len_after_blk_2_%=: \n\t" + /* Round 3 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 12(r6)\n\t" + "add r9, r9, r17\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_3_%=\n\t" + /* Calc new W[3] */ + "rotlwi %[sha256], r18, 25\n\t" + "rotlwi %[len], r18, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "rotlwi %[sha256], r15, 15\n\t" + "rotlwi %[len], r15, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r15, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r17, r17, %[sha256]\n\t" + "add r17, r17, r26\n\t" + "\n" + "L_SHA256_transform_len_after_blk_3_%=: \n\t" + /* Round 4 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 16(r6)\n\t" + "add r8, r8, r18\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_4_%=\n\t" + /* Calc new W[4] */ + "rotlwi %[sha256], r19, 25\n\t" + "rotlwi %[len], r19, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "rotlwi %[sha256], r16, 15\n\t" + "rotlwi %[len], r16, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r16, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r18, r18, %[sha256]\n\t" + "add r18, r18, r27\n\t" + "\n" + "L_SHA256_transform_len_after_blk_4_%=: \n\t" + /* Round 5 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 20(r6)\n\t" + "add r7, r7, r19\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_5_%=\n\t" + /* Calc new W[5] */ + "rotlwi %[sha256], r20, 25\n\t" + "rotlwi %[len], r20, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "rotlwi %[sha256], r17, 15\n\t" + "rotlwi %[len], r17, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r17, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r19, r19, %[sha256]\n\t" + "add r19, r19, r28\n\t" + "\n" + "L_SHA256_transform_len_after_blk_5_%=: \n\t" + /* Round 6 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 24(r6)\n\t" + "add %[data], %[data], r20\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_6_%=\n\t" + /* Calc new W[6] */ + "rotlwi %[sha256], r21, 25\n\t" + "rotlwi %[len], r21, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "rotlwi %[sha256], r18, 15\n\t" + "rotlwi %[len], r18, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r18, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r20, r20, %[sha256]\n\t" + "add r20, r20, r29\n\t" + "\n" + "L_SHA256_transform_len_after_blk_6_%=: \n\t" + /* Round 7 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 28(r6)\n\t" + "add r0, r0, r21\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_7_%=\n\t" + /* Calc new W[7] */ + "rotlwi %[sha256], r22, 25\n\t" + "rotlwi %[len], r22, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "rotlwi %[sha256], r19, 15\n\t" + "rotlwi %[len], r19, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r19, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r21, r21, %[sha256]\n\t" + "add r21, r21, r14\n\t" + "\n" + "L_SHA256_transform_len_after_blk_7_%=: \n\t" + /* Round 8 */ + "rotlwi %[sha256], r9, 26\n\t" + "rotlwi %[len], r9, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], r9\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r12, r12, %[sha256]\n\t" + "lwz %[sha256], 32(r6)\n\t" + "add r12, r12, r22\n\t" + "add r12, r12, %[sha256]\n\t" + "add r8, r8, r12\n\t" + "rotlwi %[sha256], r0, 30\n\t" + "rotlwi %[len], r0, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r12, r12, %[sha256]\n\t" + "xor %[len], r0, %[data]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r12, r12, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_8_%=\n\t" + /* Calc new W[8] */ + "rotlwi %[sha256], r23, 25\n\t" + "rotlwi %[len], r23, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "rotlwi %[sha256], r20, 15\n\t" + "rotlwi %[len], r20, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r20, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r22, r22, %[sha256]\n\t" + "add r22, r22, r15\n\t" + "\n" + "L_SHA256_transform_len_after_blk_8_%=: \n\t" + /* Round 9 */ + "rotlwi %[sha256], r8, 26\n\t" + "rotlwi %[len], r8, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], r8\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r11, r11, %[sha256]\n\t" + "lwz %[sha256], 36(r6)\n\t" + "add r11, r11, r23\n\t" + "add r11, r11, %[sha256]\n\t" + "add r7, r7, r11\n\t" + "rotlwi %[sha256], r12, 30\n\t" + "rotlwi %[len], r12, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r11, r11, %[sha256]\n\t" + "xor %[len], r12, r0\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add r11, r11, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_9_%=\n\t" + /* Calc new W[9] */ + "rotlwi %[sha256], r24, 25\n\t" + "rotlwi %[len], r24, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "rotlwi %[sha256], r21, 15\n\t" + "rotlwi %[len], r21, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r21, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r23, r23, %[sha256]\n\t" + "add r23, r23, r16\n\t" + "\n" + "L_SHA256_transform_len_after_blk_9_%=: \n\t" + /* Round 10 */ + "rotlwi %[sha256], r7, 26\n\t" + "rotlwi %[len], r7, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], r7\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r10, r10, %[sha256]\n\t" + "lwz %[sha256], 40(r6)\n\t" + "add r10, r10, r24\n\t" + "add r10, r10, %[sha256]\n\t" + "add %[data], %[data], r10\n\t" + "rotlwi %[sha256], r11, 30\n\t" + "rotlwi %[len], r11, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r10, r10, %[sha256]\n\t" + "xor %[len], r11, r12\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r10, r10, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_10_%=\n\t" + /* Calc new W[10] */ + "rotlwi %[sha256], r25, 25\n\t" + "rotlwi %[len], r25, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "rotlwi %[sha256], r22, 15\n\t" + "rotlwi %[len], r22, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r22, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r24, r24, %[sha256]\n\t" + "add r24, r24, r17\n\t" + "\n" + "L_SHA256_transform_len_after_blk_10_%=: \n\t" + /* Round 11 */ + "rotlwi %[sha256], %[data], 26\n\t" + "rotlwi %[len], %[data], 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[data]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add r9, r9, %[sha256]\n\t" + "lwz %[sha256], 44(r6)\n\t" + "add r9, r9, r25\n\t" + "add r9, r9, %[sha256]\n\t" + "add r0, r0, r9\n\t" + "rotlwi %[sha256], r10, 30\n\t" + "rotlwi %[len], r10, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r9, r9, %[sha256]\n\t" + "xor %[len], r10, r11\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r11\n\t" + "add r9, r9, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_11_%=\n\t" + /* Calc new W[11] */ + "rotlwi %[sha256], r26, 25\n\t" + "rotlwi %[len], r26, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "rotlwi %[sha256], r23, 15\n\t" + "rotlwi %[len], r23, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r23, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r25, r25, %[sha256]\n\t" + "add r25, r25, r18\n\t" + "\n" + "L_SHA256_transform_len_after_blk_11_%=: \n\t" + /* Round 12 */ + "rotlwi %[sha256], r0, 26\n\t" + "rotlwi %[len], r0, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r0, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[sha256], %[data], r7\n\t" + "and %[sha256], %[sha256], r0\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r8, r8, %[sha256]\n\t" + "lwz %[sha256], 48(r6)\n\t" + "add r8, r8, r26\n\t" + "add r8, r8, %[sha256]\n\t" + "add r12, r12, r8\n\t" + "rotlwi %[sha256], r9, 30\n\t" + "rotlwi %[len], r9, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r9, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r8, r8, %[sha256]\n\t" + "xor %[len], r9, r10\n\t" + "xor %[sha256], r10, r11\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r10\n\t" + "add r8, r8, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_12_%=\n\t" + /* Calc new W[12] */ + "rotlwi %[sha256], r27, 25\n\t" + "rotlwi %[len], r27, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "rotlwi %[sha256], r24, 15\n\t" + "rotlwi %[len], r24, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r24, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r26, r26, %[sha256]\n\t" + "add r26, r26, r19\n\t" + "\n" + "L_SHA256_transform_len_after_blk_12_%=: \n\t" + /* Round 13 */ + "rotlwi %[sha256], r12, 26\n\t" + "rotlwi %[len], r12, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r12, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[sha256], r0, %[data]\n\t" + "and %[sha256], %[sha256], r12\n\t" + "xor %[sha256], %[sha256], %[data]\n\t" + "add r7, r7, %[sha256]\n\t" + "lwz %[sha256], 52(r6)\n\t" + "add r7, r7, r27\n\t" + "add r7, r7, %[sha256]\n\t" + "add r11, r11, r7\n\t" + "rotlwi %[sha256], r8, 30\n\t" + "rotlwi %[len], r8, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r8, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r7, r7, %[sha256]\n\t" + "xor %[len], r8, r9\n\t" + "xor %[sha256], r9, r10\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r9\n\t" + "add r7, r7, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_13_%=\n\t" + /* Calc new W[13] */ + "rotlwi %[sha256], r28, 25\n\t" + "rotlwi %[len], r28, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r28, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "rotlwi %[sha256], r25, 15\n\t" + "rotlwi %[len], r25, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r25, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r27, r27, %[sha256]\n\t" + "add r27, r27, r20\n\t" + "\n" + "L_SHA256_transform_len_after_blk_13_%=: \n\t" + /* Round 14 */ + "rotlwi %[sha256], r11, 26\n\t" + "rotlwi %[len], r11, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r11, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[sha256], r12, r0\n\t" + "and %[sha256], %[sha256], r11\n\t" + "xor %[sha256], %[sha256], r0\n\t" + "add %[data], %[data], %[sha256]\n\t" + "lwz %[sha256], 56(r6)\n\t" + "add %[data], %[data], r28\n\t" + "add %[data], %[data], %[sha256]\n\t" + "add r10, r10, %[data]\n\t" + "rotlwi %[sha256], r7, 30\n\t" + "rotlwi %[len], r7, 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r7, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add %[data], %[data], %[sha256]\n\t" + "xor %[len], r7, r8\n\t" + "xor %[sha256], r8, r9\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r8\n\t" + "add %[data], %[data], %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_14_%=\n\t" + /* Calc new W[14] */ + "rotlwi %[sha256], r29, 25\n\t" + "rotlwi %[len], r29, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r29, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "rotlwi %[sha256], r26, 15\n\t" + "rotlwi %[len], r26, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r26, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r28, r28, %[sha256]\n\t" + "add r28, r28, r21\n\t" + "\n" + "L_SHA256_transform_len_after_blk_14_%=: \n\t" + /* Round 15 */ + "rotlwi %[sha256], r10, 26\n\t" + "rotlwi %[len], r10, 21\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], r10, 7\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[sha256], r11, r12\n\t" + "and %[sha256], %[sha256], r10\n\t" + "xor %[sha256], %[sha256], r12\n\t" + "add r0, r0, %[sha256]\n\t" + "lwz %[sha256], 60(r6)\n\t" + "add r0, r0, r29\n\t" + "add r0, r0, %[sha256]\n\t" + "add r9, r9, r0\n\t" + "rotlwi %[sha256], %[data], 30\n\t" + "rotlwi %[len], %[data], 19\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "rotlwi %[len], %[data], 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r0, r0, %[sha256]\n\t" + "xor %[len], %[data], r7\n\t" + "xor %[sha256], r7, r8\n\t" + "and %[sha256], %[sha256], %[len]\n\t" + "xor %[sha256], %[sha256], r7\n\t" + "add r0, r0, %[sha256]\n\t" + "mfctr %[len]\n\t" + "cmpwi %[sha256], %[len], 1\n\t" + "beq %[sha256], L_SHA256_transform_len_after_blk_15_%=\n\t" + /* Calc new W[15] */ + "rotlwi %[sha256], r14, 25\n\t" + "rotlwi %[len], r14, 14\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r14, 3\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "rotlwi %[sha256], r27, 15\n\t" + "rotlwi %[len], r27, 13\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "srwi %[len], r27, 10\n\t" + "xor %[sha256], %[sha256], %[len]\n\t" + "add r29, r29, %[sha256]\n\t" + "add r29, r29, r22\n\t" + "\n" + "L_SHA256_transform_len_after_blk_15_%=: \n\t" + "addi r6, r6, 0x40\n\t" + "bdnz L_SHA256_transform_len_start_%=\n\t" + "subi r6, r6, 0x100\n\t" + "lwz %[sha256], 0(r1)\n\t" + /* Add in digest from start */ + "lwz %[len], 0(%[sha256])\n\t" + "add r0, r0, %[len]\n\t" + "lwz %[len], 4(%[sha256])\n\t" + "add %[data], %[data], %[len]\n\t" + "lwz %[len], 8(%[sha256])\n\t" + "add r7, r7, %[len]\n\t" + "lwz %[len], 12(%[sha256])\n\t" + "add r8, r8, %[len]\n\t" + "lwz %[len], 16(%[sha256])\n\t" + "add r9, r9, %[len]\n\t" + "lwz %[len], 20(%[sha256])\n\t" + "add r10, r10, %[len]\n\t" + "lwz %[len], 24(%[sha256])\n\t" + "add r11, r11, %[len]\n\t" + "lwz %[len], 28(%[sha256])\n\t" + "add r12, r12, %[len]\n\t" + "stw r0, 0(%[sha256])\n\t" + "stw %[data], 4(%[sha256])\n\t" + "stw r7, 8(%[sha256])\n\t" + "stw r8, 12(%[sha256])\n\t" + "stw r9, 16(%[sha256])\n\t" + "stw r10, 20(%[sha256])\n\t" + "stw r11, 24(%[sha256])\n\t" + "stw r12, 28(%[sha256])\n\t" + "lwz %[sha256], 4(r1)\n\t" + "lwz %[len], 8(r1)\n\t" + "mtctr %[len]\n\t" + "subi %[len], %[len], 1\n\t" + "addi %[sha256], %[sha256], 0x40\n\t" + "stw %[sha256], 4(r1)\n\t" + "stw %[len], 8(r1)\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" + "addi r1, r1, 12\n\t" +#endif /* WOLFSSL_PPC32_ASM_SMALL */ +#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", "r0", "r7", "r8", "r9", "r10", "r11", "r12", "r14", + "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29" + ); +} + +#endif /* __PIC__ */ +#endif /* !WOLFSSL_PPC32_ASM_SPE */ +#endif /* !NO_SHA256 */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */