diff --git a/.wolfssl_known_macro_extras b/.wolfssl_known_macro_extras index 101ebf2fa88..e694eb5cfcd 100644 --- a/.wolfssl_known_macro_extras +++ b/.wolfssl_known_macro_extras @@ -922,6 +922,7 @@ WOLFSSL_SECURE_RENEGOTIATION_ON_BY_DEFAULT WOLFSSL_SERVER_EXAMPLE WOLFSSL_SETTINGS_FILE WOLFSSL_SHA256_ALT_CH_MAJ +WOLFSSL_SHA3_PPC64_BLOCKS_N WOLFSSL_SHA512_HASHTYPE WOLFSSL_SHUTDOWNONCE WOLFSSL_SILABS_TRNG diff --git a/configure.ac b/configure.ac index c1d2dd089ef..fd5623093f6 100644 --- a/configure.ac +++ b/configure.ac @@ -3943,6 +3943,7 @@ then done AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM" + AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN" AC_MSG_NOTICE([32-bit PowerPC assembly for SHA-256]) ENABLED_PPC32_ASM=yes @@ -3951,6 +3952,11 @@ then else AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM" fi + if test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then + # The inline-register variant names GPRs (r0..r31) in inline assembly, + # which the PowerPC assembler only accepts with -mregnames. + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE_REG -Wa,-mregnames" + fi if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL" AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL" @@ -3986,8 +3992,14 @@ then small) ENABLED_PPC64_ASM_SMALL=yes ;; + crypto) + ENABLED_PPC64_ASM_CRYPTO=yes + ;; + power8) + ENABLED_PPC64_ASM_POWER8=yes + ;; *) - AC_MSG_ERROR([Invalid RISC-V option [yes,inline,small]: $ENABLED_PPC64_ASM.]) + AC_MSG_ERROR([Invalid PPC64 option [yes,inline,small,crypto,power8]: $ENABLED_PPC64_ASM.]) break ;; esac @@ -4007,6 +4019,20 @@ if test "$ENABLED_PPC64_ASM_SMALL" = "yes"; then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_SMALL" AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM_SMALL" fi +# POWER8 vector-crypto (vshasigmaw) SHA-256, selected at run time. The +# generated code marks the relevant function/section as POWER8 itself, so no +# global -mcpu=power8 is needed and the rest of the library stays portable. +if test "$ENABLED_PPC64_ASM_CRYPTO" = "yes"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_CRYPTO" + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM_CRYPTO" +fi +# POWER8 VSX (vrld) SHA-3, selected at run time. Like the crypto variant the +# generated code marks its own function/section as POWER8, so no global +# -mcpu=power8 is needed and the rest of the library stays portable. +if test "$ENABLED_PPC64_ASM_POWER8" = "yes"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_POWER8" + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM_POWER8" +fi # Xilinx hardened crypto @@ -4691,6 +4717,9 @@ fi if test "$ENABLED_SHA512" = "yes" then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA512" + # The SHA-512 transform is asm on some targets (PPC); the .S is guarded by + # WOLFSSL_SHA512/WOLFSSL_SHA384 so the assembler needs the macro too. + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SHA512" fi # SHA-256 Hash DRBG (SP 800-90A) -- sub-option of hashdrbg @@ -4734,6 +4763,7 @@ fi if test "$ENABLED_SHA384" = "yes" then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA384" + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SHA384" fi @@ -7431,6 +7461,9 @@ fi if test "$ENABLED_SHA3" != "no" then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA3" + # The SHA-3 block transform is asm on some targets (PPC); the .S is guarded + # by WOLFSSL_SHA3 so the assembler needs the macro too. + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SHA3" fi # Set SHAKE128 flags @@ -11843,28 +11876,54 @@ then if test "$ENABLED_AESGCM" = "word32" then AM_CFLAGS="$AM_CFLAGS -DGCM_WORD32" + AM_CCASFLAGS="$AM_CCASFLAGS -DGCM_WORD32" ENABLED_AESGCM=yes fi if test "$ENABLED_AESGCM" = "small" || test "$ENABLED_LOWRESOURCE" = "yes" then AM_CFLAGS="$AM_CFLAGS -DGCM_SMALL" + AM_CCASFLAGS="$AM_CCASFLAGS -DGCM_SMALL" ENABLED_AESGCM=yes fi if test "$ENABLED_AESGCM" = "table" then AM_CFLAGS="$AM_CFLAGS -DGCM_TABLE" + AM_CCASFLAGS="$AM_CCASFLAGS -DGCM_TABLE" ENABLED_AESGCM=yes fi if test "$ENABLED_AESGCM" = "4bit" then AM_CFLAGS="$AM_CFLAGS -DGCM_TABLE_4BIT" + AM_CCASFLAGS="$AM_CCASFLAGS -DGCM_TABLE_4BIT" ENABLED_AESGCM=yes fi + # The GCM table layout macro must reach assembled (.S) sources too: the + # PPC asm GCM_gmult_len is a single file with both layouts guarded by + # GCM_TABLE / GCM_TABLE_4BIT. Default (no explicit table choice) is 4bit. + case " $AM_CCASFLAGS " in + *" -DGCM_TABLE "*|*" -DGCM_TABLE_4BIT "*|*" -DGCM_SMALL "*|*" -DGCM_WORD32 "*) ;; + *) AM_CCASFLAGS="$AM_CCASFLAGS -DGCM_TABLE_4BIT" ;; + esac + AM_CFLAGS="$AM_CFLAGS -DHAVE_AESGCM" + AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_AESGCM" +fi +# AES-CTR may be turned on by many presets above; mirror the feature macro to +# the assembler flags so the AES_CTR_encrypt in the PPC asm is emitted. +if test "$ENABLED_AESCTR" = "yes" +then + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_AES_COUNTER" +fi +# Asm sources include settings.h, which enforces that AES-XTS streaming +# requires AES-XTS. Mirror the base WOLFSSL_AES_XTS macro to the assembler +# flags so that check is satisfied (it is otherwise only set for C sources). +if test "$ENABLED_AESXTS" = "yes" +then + AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_AES_XTS" fi if test "$ENABLED_AESGCM_STREAM" != "no" then @@ -12993,6 +13052,10 @@ if test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes" then ENABLED_PPC64_ASM="inline C Reg" fi +if test "$ENABLED_PPC64_ASM_CRYPTO" = "yes" +then + ENABLED_PPC64_ASM="$ENABLED_PPC64_ASM + crypto" +fi echo " * PPC64 ASM $ENABLED_PPC64_ASM" echo " * Write duplicate: $ENABLED_WRITEDUP" echo " * Xilinx Hardware Acc.: $ENABLED_XILINX" diff --git a/src/include.am b/src/include.am index 4b80e149bac..2cd15dd4fd6 100644 --- a/src/include.am +++ b/src/include.am @@ -257,6 +257,18 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S endif !BUILD_PPC64_ASM_INLINE endif BUILD_PPC64_ASM +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + if BUILD_AESNI src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes_asm.S if BUILD_X86_ASM @@ -336,6 +348,14 @@ endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + if BUILD_SHA512 if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha512.c @@ -392,6 +412,46 @@ endif !BUILD_X86_ASM endif !BUILD_ARMASM endif !BUILD_ARMASM_NEON endif !BUILD_RISCV_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM endif BUILD_SHA512 if BUILD_SHA3 @@ -530,6 +590,18 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S endif !BUILD_PPC64_ASM_INLINE endif BUILD_PPC64_ASM +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + if BUILD_AESNI src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes_asm.S if BUILD_X86_ASM @@ -605,6 +677,14 @@ endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + if BUILD_SHA512 if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha512.c @@ -659,6 +739,46 @@ endif BUILD_INTELASM endif !BUILD_ARMASM endif !BUILD_ARMASM_NEON endif !BUILD_RISCV_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM endif BUILD_SHA512 if BUILD_SHA3 @@ -936,6 +1056,14 @@ endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + if BUILD_SHA512 if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha512.c @@ -990,6 +1118,46 @@ endif BUILD_INTELASM endif !BUILD_ARMASM endif !BUILD_ARMASM_NEON endif !BUILD_RISCV_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM endif BUILD_SHA512 if BUILD_SHA3 @@ -1290,6 +1458,14 @@ endif !BUILD_PPC32_ASM_INLINE_REG endif !BUILD_PPC32_ASM_INLINE endif BUILD_PPC32_ASM +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + endif !BUILD_FIPS_V2_PLUS if BUILD_AFALG @@ -1416,6 +1592,18 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S endif !BUILD_PPC64_ASM_INLINE endif BUILD_PPC64_ASM +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-aes-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + if BUILD_AFALG src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/af_alg/afalg_aes.c endif BUILD_AFALG @@ -1505,6 +1693,46 @@ endif !BUILD_X86_ASM endif !BUILD_ARMASM endif !BUILD_ARMASM_NEON endif !BUILD_RISCV_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC64_ASM +if BUILD_PPC64_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S +endif !BUILD_PPC64_ASM_INLINE +endif BUILD_PPC64_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM + +if BUILD_PPC32_ASM +if BUILD_PPC32_ASM_INLINE +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c +else +if BUILD_PPC32_ASM_INLINE_REG +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c +else +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S +endif !BUILD_PPC32_ASM_INLINE_REG +endif !BUILD_PPC32_ASM_INLINE +endif BUILD_PPC32_ASM endif BUILD_SHA512 endif !BUILD_FIPS_V2_PLUS diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 214d873bc2f..374e7279136 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -4805,6 +4805,13 @@ static void print_cpu_features(void) if (IS_AARCH64_SHA3(cpuid_flags)) printf(" sha3"); if (IS_AARCH64_SM3(cpuid_flags)) printf(" sm3"); if (IS_AARCH64_SM4(cpuid_flags)) printf(" sm4"); +#endif +#ifdef HAVE_CPUID_PPC64 + printf("PPC64 -"); + if (IS_PPC64_ALTIVEC(cpuid_flags)) printf(" altivec"); + if (IS_PPC64_VSX(cpuid_flags)) printf(" vsx"); + if (IS_PPC64_ARCH_2_07(cpuid_flags)) printf(" arch_2_07"); + if (IS_PPC64_VEC_CRYPTO(cpuid_flags)) printf(" vcrypto"); #endif printf("\n"); } diff --git a/wolfcrypt/src/aes.c b/wolfcrypt/src/aes.c index 6806acbc965..7a3ac553d5b 100644 --- a/wolfcrypt/src/aes.c +++ b/wolfcrypt/src/aes.c @@ -977,7 +977,7 @@ static WARN_UNUSED_RESULT int wc_AesDecrypt(Aes* aes, const byte* inBlock, } #endif /* HAVE_AES_DECRYPT && WOLFSSL_AES_DIRECT */ -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) #if defined(WOLFSSL_AES_DIRECT) || defined(HAVE_AESCCM) || \ defined(WOLFSSL_AESGCM_STREAM) || defined(HAVE_AESGCM) @@ -4679,7 +4679,7 @@ static WARN_UNUSED_RESULT int wc_AesDecrypt(Aes* aes, const byte* inBlock, return AesSetKey(aes, userKey, keylen, iv, dir); } #endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */ -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) static int AesSetKey(Aes* aes, const byte* userKey, word32 keylen, const byte* iv, int dir) { @@ -6720,7 +6720,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv) int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) { -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) +#if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) word32 blocks; int ret; #endif @@ -6733,7 +6733,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) return 0; } -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) +#if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) blocks = sz / WC_AES_BLOCK_SIZE; #endif #ifdef WOLFSSL_AES_CBC_LENGTH_CHECKS @@ -6809,7 +6809,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) } #endif return 0; -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) AES_CBC_encrypt(in, out, sz, (const unsigned char*)aes->key, aes->rounds, (unsigned char*)aes->reg); return 0; @@ -6914,7 +6914,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) /* Software AES - CBC Decrypt */ int wc_AesCbcDecrypt(Aes* aes, byte* out, const byte* in, word32 sz) { -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) +#if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) word32 blocks; int ret; #endif @@ -6942,7 +6942,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) } #endif -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) +#if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) blocks = sz / WC_AES_BLOCK_SIZE; #endif if (sz % WC_AES_BLOCK_SIZE) { @@ -7035,7 +7035,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) #endif #endif /* __aarch64__ || WOLFSSL_ARMASM_NO_HW_CRYPTO */ return 0; -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) AES_CBC_decrypt(in, out, sz, (const unsigned char*)aes->key, aes->rounds, (unsigned char*)aes->reg); return 0; @@ -7396,7 +7396,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) !defined(WOLFSSL_ARMASM_NO_HW_CRYPTO)) byte scratch[WC_AES_BLOCK_SIZE]; #endif - #if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) + #if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) int ret = 0; #endif word32 processed; @@ -7519,7 +7519,7 @@ int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) } #endif /* __aarch64__ || WOLFSSL_ARMASM_NO_HW_CRYPTO */ return 0; - #elif defined(WOLFSSL_PPC64_ASM) + #elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) { word32 numBlocks; byte* tmp = (byte*)aes->tmp + WC_AES_BLOCK_SIZE - aes->left; @@ -8302,7 +8302,7 @@ static void GCM_gmult_len_armasm_C( #elif defined(WOLFSSL_ARMASM) #define GCM_GMULT_LEN(gcm, x, a, len) \ GCM_gmult_len_NEON(x, (const byte*)((gcm)->H), a, len) -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) static void GCM_gmult_len_armasm_C( byte* x, const byte* h, const unsigned char* a, unsigned long len) { @@ -8346,7 +8346,7 @@ static void GCM_gmult_len_armasm_C( #define GCM_GMULT_LEN(gcm, x, a, len) \ GCM_gmult_len(x, (const byte**)((gcm)->M0), a, len) #endif -#elif defined(WOLFSSL_PPC64_ASM) +#elif defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) #define GCM_GMULT_LEN(gcm, x, a, len) \ GCM_gmult_len(x, (const byte**)((gcm)->M0), a, len) #else @@ -8627,7 +8627,7 @@ void GHASH(Gcm* gcm, const byte* a, word32 aSz, const byte* c, #endif /* PPC64 assembly */ -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) #define GCM_GMULT_LEN(gcm, x, a, len) \ GCM_gmult_len(x, (const byte**)((gcm)->M0), a, len) #define GMULT(x, m) \ @@ -10147,7 +10147,7 @@ static WARN_UNUSED_RESULT int wc_AesGcmEncrypt_STM32( #endif /* STM32_CRYPTO_AES_GCM */ -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) +#if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) #ifdef WOLFSSL_AESNI /* For performance reasons, this code needs to be not inlined. */ WARN_UNUSED_RESULT int AES_GCM_encrypt_C( @@ -10268,7 +10268,7 @@ WARN_UNUSED_RESULT int AES_GCM_encrypt_C( return ret; } #elif (defined(__aarch64__) || defined(WOLFSSL_ARMASM_NO_HW_CRYPTO)) || \ - defined(WOLFSSL_PPC64_ASM) + (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) static int AES_GCM_encrypt_ASM(Aes* aes, byte* out, const byte* in, word32 sz, const byte* iv, word32 ivSz, byte* authTag, word32 authTagSz, const byte* authIn, word32 authInSz) @@ -10529,7 +10529,7 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz, authTagSz, authIn, authInSz); } #endif /* __aarch64__ || WOLFSSL_ARMASM_NO_HW_CRYPTO */ -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) ret = AES_GCM_encrypt_ASM(aes, out, in, sz, iv, ivSz, authTag, authTagSz, authIn, authInSz); #else @@ -10876,7 +10876,7 @@ static WARN_UNUSED_RESULT int wc_AesGcmDecrypt_STM32( #endif /* STM32_CRYPTO_AES_GCM */ -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) +#if !defined(WOLFSSL_ARMASM) && !(defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) #ifdef WOLFSSL_AESNI /* For performance reasons, this code needs to be not inlined. */ int WARN_UNUSED_RESULT AES_GCM_decrypt_C( @@ -11026,7 +11026,7 @@ int WARN_UNUSED_RESULT AES_GCM_decrypt_C( return ret; } #elif (defined(__aarch64__) || defined(WOLFSSL_ARMASM_NO_HW_CRYPTO)) || \ - defined(WOLFSSL_PPC64_ASM) + (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) static int AES_GCM_decrypt_ASM(Aes* aes, byte* out, const byte* in, word32 sz, const byte* iv, word32 ivSz, const byte* authTag, word32 authTagSz, const byte* authIn, word32 authInSz) @@ -11285,7 +11285,7 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz, authTagSz, authIn, authInSz); } #endif /* __aarch64__ || WOLFSSL_ARMASM_NO_HW_CRYPTO */ -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) { ret = AES_GCM_decrypt_ASM(aes, out, in, sz, iv, ivSz, authTag, authTagSz, authIn, authInSz); @@ -14531,7 +14531,7 @@ static WARN_UNUSED_RESULT int _AesEcbEncrypt( aes->rounds); } #endif -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) AES_ECB_encrypt(in, out, sz, (const unsigned char*)aes->key, aes->rounds); ret = 0; #else @@ -14626,7 +14626,7 @@ static WARN_UNUSED_RESULT int _AesEcbDecrypt( aes->rounds); } #endif -#elif defined(WOLFSSL_PPC64_ASM) +#elif (defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM)) AES_ECB_decrypt(in, out, sz, (const unsigned char*)aes->key, aes->rounds); ret = 0; #else diff --git a/wolfcrypt/src/cpuid.c b/wolfcrypt/src/cpuid.c index 2c3670234a6..ba536a5b0e7 100644 --- a/wolfcrypt/src/cpuid.c +++ b/wolfcrypt/src/cpuid.c @@ -24,7 +24,7 @@ #include #if defined(HAVE_CPUID) || defined(HAVE_CPUID_INTEL) || \ - defined(HAVE_CPUID_AARCH64) + defined(HAVE_CPUID_AARCH64) || defined(HAVE_CPUID_PPC64) static cpuid_flags_atomic_t cpuid_flags = WC_CPUID_ATOMIC_INITIALIZER; #endif @@ -371,6 +371,108 @@ } } #endif +#elif defined(HAVE_CPUID_PPC64) + +/* PowerPC feature bits as reported through the ELF auxiliary vector + * (see ). Defined here so a kernel header is not required. */ +#ifndef AT_HWCAP2 + #define AT_HWCAP2 26 +#endif +#ifndef PPC_FEATURE_HAS_ALTIVEC + #define PPC_FEATURE_HAS_ALTIVEC 0x10000000 /* AT_HWCAP */ +#endif +#ifndef PPC_FEATURE_HAS_VSX + #define PPC_FEATURE_HAS_VSX 0x00000080 /* AT_HWCAP */ +#endif +#ifndef PPC_FEATURE2_ARCH_2_07 + #define PPC_FEATURE2_ARCH_2_07 0x80000000 /* AT_HWCAP2 */ +#endif +#ifndef PPC_FEATURE2_VEC_CRYPTO + #define PPC_FEATURE2_VEC_CRYPTO 0x02000000 /* AT_HWCAP2 */ +#endif +#ifndef PPC_FEATURE2_ARCH_3_00 + #define PPC_FEATURE2_ARCH_3_00 0x00800000 /* AT_HWCAP2 */ +#endif +#ifndef PPC_FEATURE2_ARCH_3_1 + #define PPC_FEATURE2_ARCH_3_1 0x00040000 /* AT_HWCAP2 */ +#endif + +#if defined(__linux__) && defined(__GLIBC__) + #include + + static WC_INLINE void cpuid_set_flags(void) + { + if (WOLFSSL_ATOMIC_LOAD(cpuid_flags) == WC_CPUID_INITIALIZER) { + cpuid_flags_t new_cpuid_flags = 0, + old_cpuid_flags = WC_CPUID_INITIALIZER; + unsigned long hwcap = getauxval(AT_HWCAP); + unsigned long hwcap2 = getauxval(AT_HWCAP2); + + if (hwcap & PPC_FEATURE_HAS_ALTIVEC) + new_cpuid_flags |= CPUID_ALTIVEC; + if (hwcap & PPC_FEATURE_HAS_VSX) + new_cpuid_flags |= CPUID_VSX; + if (hwcap2 & PPC_FEATURE2_ARCH_2_07) + new_cpuid_flags |= CPUID_ARCH_2_07; + if (hwcap2 & PPC_FEATURE2_VEC_CRYPTO) + new_cpuid_flags |= CPUID_VEC_CRYPTO; + if (hwcap2 & PPC_FEATURE2_ARCH_3_00) + new_cpuid_flags |= CPUID_ARCH_3_00; + if (hwcap2 & PPC_FEATURE2_ARCH_3_1) + new_cpuid_flags |= CPUID_ARCH_3_1; + + (void)wolfSSL_Atomic_Uint_CompareExchange + (&cpuid_flags, &old_cpuid_flags, new_cpuid_flags); + } + } +#elif defined(__FreeBSD__) + #include + + static WC_INLINE void cpuid_set_flags(void) + { + if (WOLFSSL_ATOMIC_LOAD(cpuid_flags) == WC_CPUID_INITIALIZER) { + cpuid_flags_t new_cpuid_flags = 0, + old_cpuid_flags = WC_CPUID_INITIALIZER; + unsigned long hwcap = 0, hwcap2 = 0; + + elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap)); + elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2)); + + if (hwcap & PPC_FEATURE_HAS_ALTIVEC) + new_cpuid_flags |= CPUID_ALTIVEC; + if (hwcap & PPC_FEATURE_HAS_VSX) + new_cpuid_flags |= CPUID_VSX; + if (hwcap2 & PPC_FEATURE2_ARCH_2_07) + new_cpuid_flags |= CPUID_ARCH_2_07; + if (hwcap2 & PPC_FEATURE2_VEC_CRYPTO) + new_cpuid_flags |= CPUID_VEC_CRYPTO; + if (hwcap2 & PPC_FEATURE2_ARCH_3_00) + new_cpuid_flags |= CPUID_ARCH_3_00; + if (hwcap2 & PPC_FEATURE2_ARCH_3_1) + new_cpuid_flags |= CPUID_ARCH_3_1; + + (void)wolfSSL_Atomic_Uint_CompareExchange + (&cpuid_flags, &old_cpuid_flags, new_cpuid_flags); + } + } +#else + /* No run-time detection available - report no acceleration. */ + static WC_INLINE void cpuid_set_flags(void) + { + if (WOLFSSL_ATOMIC_LOAD(cpuid_flags) == WC_CPUID_INITIALIZER) { + cpuid_flags_t new_cpuid_flags = 0, + old_cpuid_flags = WC_CPUID_INITIALIZER; + #ifdef WOLFSSL_PPC64_ASM_POWER8 + new_cpuid_flags |= CPUID_ARCH_2_07; + #endif + #ifdef WOLFSSL_PPC64_ASM_CRYPTO + new_cpuid_flags |= CPUID_VEC_CRYPTO; + #endif + (void)wolfSSL_Atomic_Uint_CompareExchange + (&cpuid_flags, &old_cpuid_flags, new_cpuid_flags); + } + } +#endif #elif defined(HAVE_CPUID) static WC_INLINE void cpuid_set_flags(void) { diff --git a/wolfcrypt/src/port/ppc32/ppc32-aes-asm.S b/wolfcrypt/src/port/ppc32/ppc32-aes-asm.S new file mode 100644 index 00000000000..9b1d0e7b25a --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-aes-asm.S @@ -0,0 +1,4118 @@ +/* ppc32-aes-asm + * + * Copyright (C) 2006-2026 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 ./aes/aes.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-aes-asm.S + */ + +#include + +#ifdef WOLFSSL_PPC32_ASM +#ifndef WOLFSSL_PPC32_ASM_INLINE + .machine ppc +#if !defined(NO_AES) && defined(WOLFSSL_PPC32_ASM) +#ifndef __APPLE__ + .text + .type L_AES_PPC32_te, %object + .size L_AES_PPC32_te, 4096 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_AES_PPC32_te: + .long 0xc66363a5,0xf87c7c84,0xee777799,0xf67b7b8d + .long 0xfff2f20d,0xd66b6bbd,0xde6f6fb1,0x91c5c554 + .long 0x60303050,0x02010103,0xce6767a9,0x562b2b7d + .long 0xe7fefe19,0xb5d7d762,0x4dababe6,0xec76769a + .long 0x8fcaca45,0x1f82829d,0x89c9c940,0xfa7d7d87 + .long 0xeffafa15,0xb25959eb,0x8e4747c9,0xfbf0f00b + .long 0x41adadec,0xb3d4d467,0x5fa2a2fd,0x45afafea + .long 0x239c9cbf,0x53a4a4f7,0xe4727296,0x9bc0c05b + .long 0x75b7b7c2,0xe1fdfd1c,0x3d9393ae,0x4c26266a + .long 0x6c36365a,0x7e3f3f41,0xf5f7f702,0x83cccc4f + .long 0x6834345c,0x51a5a5f4,0xd1e5e534,0xf9f1f108 + .long 0xe2717193,0xabd8d873,0x62313153,0x2a15153f + .long 0x0804040c,0x95c7c752,0x46232365,0x9dc3c35e + .long 0x30181828,0x379696a1,0x0a05050f,0x2f9a9ab5 + .long 0x0e070709,0x24121236,0x1b80809b,0xdfe2e23d + .long 0xcdebeb26,0x4e272769,0x7fb2b2cd,0xea75759f + .long 0x1209091b,0x1d83839e,0x582c2c74,0x341a1a2e + .long 0x361b1b2d,0xdc6e6eb2,0xb45a5aee,0x5ba0a0fb + .long 0xa45252f6,0x763b3b4d,0xb7d6d661,0x7db3b3ce + .long 0x5229297b,0xdde3e33e,0x5e2f2f71,0x13848497 + .long 0xa65353f5,0xb9d1d168,0x00000000,0xc1eded2c + .long 0x40202060,0xe3fcfc1f,0x79b1b1c8,0xb65b5bed + .long 0xd46a6abe,0x8dcbcb46,0x67bebed9,0x7239394b + .long 0x944a4ade,0x984c4cd4,0xb05858e8,0x85cfcf4a + .long 0xbbd0d06b,0xc5efef2a,0x4faaaae5,0xedfbfb16 + .long 0x864343c5,0x9a4d4dd7,0x66333355,0x11858594 + .long 0x8a4545cf,0xe9f9f910,0x04020206,0xfe7f7f81 + .long 0xa05050f0,0x783c3c44,0x259f9fba,0x4ba8a8e3 + .long 0xa25151f3,0x5da3a3fe,0x804040c0,0x058f8f8a + .long 0x3f9292ad,0x219d9dbc,0x70383848,0xf1f5f504 + .long 0x63bcbcdf,0x77b6b6c1,0xafdada75,0x42212163 + .long 0x20101030,0xe5ffff1a,0xfdf3f30e,0xbfd2d26d + .long 0x81cdcd4c,0x180c0c14,0x26131335,0xc3ecec2f + .long 0xbe5f5fe1,0x359797a2,0x884444cc,0x2e171739 + .long 0x93c4c457,0x55a7a7f2,0xfc7e7e82,0x7a3d3d47 + .long 0xc86464ac,0xba5d5de7,0x3219192b,0xe6737395 + .long 0xc06060a0,0x19818198,0x9e4f4fd1,0xa3dcdc7f + .long 0x44222266,0x542a2a7e,0x3b9090ab,0x0b888883 + .long 0x8c4646ca,0xc7eeee29,0x6bb8b8d3,0x2814143c + .long 0xa7dede79,0xbc5e5ee2,0x160b0b1d,0xaddbdb76 + .long 0xdbe0e03b,0x64323256,0x743a3a4e,0x140a0a1e + .long 0x924949db,0x0c06060a,0x4824246c,0xb85c5ce4 + .long 0x9fc2c25d,0xbdd3d36e,0x43acacef,0xc46262a6 + .long 0x399191a8,0x319595a4,0xd3e4e437,0xf279798b + .long 0xd5e7e732,0x8bc8c843,0x6e373759,0xda6d6db7 + .long 0x018d8d8c,0xb1d5d564,0x9c4e4ed2,0x49a9a9e0 + .long 0xd86c6cb4,0xac5656fa,0xf3f4f407,0xcfeaea25 + .long 0xca6565af,0xf47a7a8e,0x47aeaee9,0x10080818 + .long 0x6fbabad5,0xf0787888,0x4a25256f,0x5c2e2e72 + .long 0x381c1c24,0x57a6a6f1,0x73b4b4c7,0x97c6c651 + .long 0xcbe8e823,0xa1dddd7c,0xe874749c,0x3e1f1f21 + .long 0x964b4bdd,0x61bdbddc,0x0d8b8b86,0x0f8a8a85 + .long 0xe0707090,0x7c3e3e42,0x71b5b5c4,0xcc6666aa + .long 0x904848d8,0x06030305,0xf7f6f601,0x1c0e0e12 + .long 0xc26161a3,0x6a35355f,0xae5757f9,0x69b9b9d0 + .long 0x17868691,0x99c1c158,0x3a1d1d27,0x279e9eb9 + .long 0xd9e1e138,0xebf8f813,0x2b9898b3,0x22111133 + .long 0xd26969bb,0xa9d9d970,0x078e8e89,0x339494a7 + .long 0x2d9b9bb6,0x3c1e1e22,0x15878792,0xc9e9e920 + .long 0x87cece49,0xaa5555ff,0x50282878,0xa5dfdf7a + .long 0x038c8c8f,0x59a1a1f8,0x09898980,0x1a0d0d17 + .long 0x65bfbfda,0xd7e6e631,0x844242c6,0xd06868b8 + .long 0x824141c3,0x299999b0,0x5a2d2d77,0x1e0f0f11 + .long 0x7bb0b0cb,0xa85454fc,0x6dbbbbd6,0x2c16163a + .long 0xa5c66363,0x84f87c7c,0x99ee7777,0x8df67b7b + .long 0x0dfff2f2,0xbdd66b6b,0xb1de6f6f,0x5491c5c5 + .long 0x50603030,0x03020101,0xa9ce6767,0x7d562b2b + .long 0x19e7fefe,0x62b5d7d7,0xe64dabab,0x9aec7676 + .long 0x458fcaca,0x9d1f8282,0x4089c9c9,0x87fa7d7d + .long 0x15effafa,0xebb25959,0xc98e4747,0x0bfbf0f0 + .long 0xec41adad,0x67b3d4d4,0xfd5fa2a2,0xea45afaf + .long 0xbf239c9c,0xf753a4a4,0x96e47272,0x5b9bc0c0 + .long 0xc275b7b7,0x1ce1fdfd,0xae3d9393,0x6a4c2626 + .long 0x5a6c3636,0x417e3f3f,0x02f5f7f7,0x4f83cccc + .long 0x5c683434,0xf451a5a5,0x34d1e5e5,0x08f9f1f1 + .long 0x93e27171,0x73abd8d8,0x53623131,0x3f2a1515 + .long 0x0c080404,0x5295c7c7,0x65462323,0x5e9dc3c3 + .long 0x28301818,0xa1379696,0x0f0a0505,0xb52f9a9a + .long 0x090e0707,0x36241212,0x9b1b8080,0x3ddfe2e2 + .long 0x26cdebeb,0x694e2727,0xcd7fb2b2,0x9fea7575 + .long 0x1b120909,0x9e1d8383,0x74582c2c,0x2e341a1a + .long 0x2d361b1b,0xb2dc6e6e,0xeeb45a5a,0xfb5ba0a0 + .long 0xf6a45252,0x4d763b3b,0x61b7d6d6,0xce7db3b3 + .long 0x7b522929,0x3edde3e3,0x715e2f2f,0x97138484 + .long 0xf5a65353,0x68b9d1d1,0x00000000,0x2cc1eded + .long 0x60402020,0x1fe3fcfc,0xc879b1b1,0xedb65b5b + .long 0xbed46a6a,0x468dcbcb,0xd967bebe,0x4b723939 + .long 0xde944a4a,0xd4984c4c,0xe8b05858,0x4a85cfcf + .long 0x6bbbd0d0,0x2ac5efef,0xe54faaaa,0x16edfbfb + .long 0xc5864343,0xd79a4d4d,0x55663333,0x94118585 + .long 0xcf8a4545,0x10e9f9f9,0x06040202,0x81fe7f7f + .long 0xf0a05050,0x44783c3c,0xba259f9f,0xe34ba8a8 + .long 0xf3a25151,0xfe5da3a3,0xc0804040,0x8a058f8f + .long 0xad3f9292,0xbc219d9d,0x48703838,0x04f1f5f5 + .long 0xdf63bcbc,0xc177b6b6,0x75afdada,0x63422121 + .long 0x30201010,0x1ae5ffff,0x0efdf3f3,0x6dbfd2d2 + .long 0x4c81cdcd,0x14180c0c,0x35261313,0x2fc3ecec + .long 0xe1be5f5f,0xa2359797,0xcc884444,0x392e1717 + .long 0x5793c4c4,0xf255a7a7,0x82fc7e7e,0x477a3d3d + .long 0xacc86464,0xe7ba5d5d,0x2b321919,0x95e67373 + .long 0xa0c06060,0x98198181,0xd19e4f4f,0x7fa3dcdc + .long 0x66442222,0x7e542a2a,0xab3b9090,0x830b8888 + .long 0xca8c4646,0x29c7eeee,0xd36bb8b8,0x3c281414 + .long 0x79a7dede,0xe2bc5e5e,0x1d160b0b,0x76addbdb + .long 0x3bdbe0e0,0x56643232,0x4e743a3a,0x1e140a0a + .long 0xdb924949,0x0a0c0606,0x6c482424,0xe4b85c5c + .long 0x5d9fc2c2,0x6ebdd3d3,0xef43acac,0xa6c46262 + .long 0xa8399191,0xa4319595,0x37d3e4e4,0x8bf27979 + .long 0x32d5e7e7,0x438bc8c8,0x596e3737,0xb7da6d6d + .long 0x8c018d8d,0x64b1d5d5,0xd29c4e4e,0xe049a9a9 + .long 0xb4d86c6c,0xfaac5656,0x07f3f4f4,0x25cfeaea + .long 0xafca6565,0x8ef47a7a,0xe947aeae,0x18100808 + .long 0xd56fbaba,0x88f07878,0x6f4a2525,0x725c2e2e + .long 0x24381c1c,0xf157a6a6,0xc773b4b4,0x5197c6c6 + .long 0x23cbe8e8,0x7ca1dddd,0x9ce87474,0x213e1f1f + .long 0xdd964b4b,0xdc61bdbd,0x860d8b8b,0x850f8a8a + .long 0x90e07070,0x427c3e3e,0xc471b5b5,0xaacc6666 + .long 0xd8904848,0x05060303,0x01f7f6f6,0x121c0e0e + .long 0xa3c26161,0x5f6a3535,0xf9ae5757,0xd069b9b9 + .long 0x91178686,0x5899c1c1,0x273a1d1d,0xb9279e9e + .long 0x38d9e1e1,0x13ebf8f8,0xb32b9898,0x33221111 + .long 0xbbd26969,0x70a9d9d9,0x89078e8e,0xa7339494 + .long 0xb62d9b9b,0x223c1e1e,0x92158787,0x20c9e9e9 + .long 0x4987cece,0xffaa5555,0x78502828,0x7aa5dfdf + .long 0x8f038c8c,0xf859a1a1,0x80098989,0x171a0d0d + .long 0xda65bfbf,0x31d7e6e6,0xc6844242,0xb8d06868 + .long 0xc3824141,0xb0299999,0x775a2d2d,0x111e0f0f + .long 0xcb7bb0b0,0xfca85454,0xd66dbbbb,0x3a2c1616 + .long 0x63a5c663,0x7c84f87c,0x7799ee77,0x7b8df67b + .long 0xf20dfff2,0x6bbdd66b,0x6fb1de6f,0xc55491c5 + .long 0x30506030,0x01030201,0x67a9ce67,0x2b7d562b + .long 0xfe19e7fe,0xd762b5d7,0xabe64dab,0x769aec76 + .long 0xca458fca,0x829d1f82,0xc94089c9,0x7d87fa7d + .long 0xfa15effa,0x59ebb259,0x47c98e47,0xf00bfbf0 + .long 0xadec41ad,0xd467b3d4,0xa2fd5fa2,0xafea45af + .long 0x9cbf239c,0xa4f753a4,0x7296e472,0xc05b9bc0 + .long 0xb7c275b7,0xfd1ce1fd,0x93ae3d93,0x266a4c26 + .long 0x365a6c36,0x3f417e3f,0xf702f5f7,0xcc4f83cc + .long 0x345c6834,0xa5f451a5,0xe534d1e5,0xf108f9f1 + .long 0x7193e271,0xd873abd8,0x31536231,0x153f2a15 + .long 0x040c0804,0xc75295c7,0x23654623,0xc35e9dc3 + .long 0x18283018,0x96a13796,0x050f0a05,0x9ab52f9a + .long 0x07090e07,0x12362412,0x809b1b80,0xe23ddfe2 + .long 0xeb26cdeb,0x27694e27,0xb2cd7fb2,0x759fea75 + .long 0x091b1209,0x839e1d83,0x2c74582c,0x1a2e341a + .long 0x1b2d361b,0x6eb2dc6e,0x5aeeb45a,0xa0fb5ba0 + .long 0x52f6a452,0x3b4d763b,0xd661b7d6,0xb3ce7db3 + .long 0x297b5229,0xe33edde3,0x2f715e2f,0x84971384 + .long 0x53f5a653,0xd168b9d1,0x00000000,0xed2cc1ed + .long 0x20604020,0xfc1fe3fc,0xb1c879b1,0x5bedb65b + .long 0x6abed46a,0xcb468dcb,0xbed967be,0x394b7239 + .long 0x4ade944a,0x4cd4984c,0x58e8b058,0xcf4a85cf + .long 0xd06bbbd0,0xef2ac5ef,0xaae54faa,0xfb16edfb + .long 0x43c58643,0x4dd79a4d,0x33556633,0x85941185 + .long 0x45cf8a45,0xf910e9f9,0x02060402,0x7f81fe7f + .long 0x50f0a050,0x3c44783c,0x9fba259f,0xa8e34ba8 + .long 0x51f3a251,0xa3fe5da3,0x40c08040,0x8f8a058f + .long 0x92ad3f92,0x9dbc219d,0x38487038,0xf504f1f5 + .long 0xbcdf63bc,0xb6c177b6,0xda75afda,0x21634221 + .long 0x10302010,0xff1ae5ff,0xf30efdf3,0xd26dbfd2 + .long 0xcd4c81cd,0x0c14180c,0x13352613,0xec2fc3ec + .long 0x5fe1be5f,0x97a23597,0x44cc8844,0x17392e17 + .long 0xc45793c4,0xa7f255a7,0x7e82fc7e,0x3d477a3d + .long 0x64acc864,0x5de7ba5d,0x192b3219,0x7395e673 + .long 0x60a0c060,0x81981981,0x4fd19e4f,0xdc7fa3dc + .long 0x22664422,0x2a7e542a,0x90ab3b90,0x88830b88 + .long 0x46ca8c46,0xee29c7ee,0xb8d36bb8,0x143c2814 + .long 0xde79a7de,0x5ee2bc5e,0x0b1d160b,0xdb76addb + .long 0xe03bdbe0,0x32566432,0x3a4e743a,0x0a1e140a + .long 0x49db9249,0x060a0c06,0x246c4824,0x5ce4b85c + .long 0xc25d9fc2,0xd36ebdd3,0xacef43ac,0x62a6c462 + .long 0x91a83991,0x95a43195,0xe437d3e4,0x798bf279 + .long 0xe732d5e7,0xc8438bc8,0x37596e37,0x6db7da6d + .long 0x8d8c018d,0xd564b1d5,0x4ed29c4e,0xa9e049a9 + .long 0x6cb4d86c,0x56faac56,0xf407f3f4,0xea25cfea + .long 0x65afca65,0x7a8ef47a,0xaee947ae,0x08181008 + .long 0xbad56fba,0x7888f078,0x256f4a25,0x2e725c2e + .long 0x1c24381c,0xa6f157a6,0xb4c773b4,0xc65197c6 + .long 0xe823cbe8,0xdd7ca1dd,0x749ce874,0x1f213e1f + .long 0x4bdd964b,0xbddc61bd,0x8b860d8b,0x8a850f8a + .long 0x7090e070,0x3e427c3e,0xb5c471b5,0x66aacc66 + .long 0x48d89048,0x03050603,0xf601f7f6,0x0e121c0e + .long 0x61a3c261,0x355f6a35,0x57f9ae57,0xb9d069b9 + .long 0x86911786,0xc15899c1,0x1d273a1d,0x9eb9279e + .long 0xe138d9e1,0xf813ebf8,0x98b32b98,0x11332211 + .long 0x69bbd269,0xd970a9d9,0x8e89078e,0x94a73394 + .long 0x9bb62d9b,0x1e223c1e,0x87921587,0xe920c9e9 + .long 0xce4987ce,0x55ffaa55,0x28785028,0xdf7aa5df + .long 0x8c8f038c,0xa1f859a1,0x89800989,0x0d171a0d + .long 0xbfda65bf,0xe631d7e6,0x42c68442,0x68b8d068 + .long 0x41c38241,0x99b02999,0x2d775a2d,0x0f111e0f + .long 0xb0cb7bb0,0x54fca854,0xbbd66dbb,0x163a2c16 + .long 0x6363a5c6,0x7c7c84f8,0x777799ee,0x7b7b8df6 + .long 0xf2f20dff,0x6b6bbdd6,0x6f6fb1de,0xc5c55491 + .long 0x30305060,0x01010302,0x6767a9ce,0x2b2b7d56 + .long 0xfefe19e7,0xd7d762b5,0xababe64d,0x76769aec + .long 0xcaca458f,0x82829d1f,0xc9c94089,0x7d7d87fa + .long 0xfafa15ef,0x5959ebb2,0x4747c98e,0xf0f00bfb + .long 0xadadec41,0xd4d467b3,0xa2a2fd5f,0xafafea45 + .long 0x9c9cbf23,0xa4a4f753,0x727296e4,0xc0c05b9b + .long 0xb7b7c275,0xfdfd1ce1,0x9393ae3d,0x26266a4c + .long 0x36365a6c,0x3f3f417e,0xf7f702f5,0xcccc4f83 + .long 0x34345c68,0xa5a5f451,0xe5e534d1,0xf1f108f9 + .long 0x717193e2,0xd8d873ab,0x31315362,0x15153f2a + .long 0x04040c08,0xc7c75295,0x23236546,0xc3c35e9d + .long 0x18182830,0x9696a137,0x05050f0a,0x9a9ab52f + .long 0x0707090e,0x12123624,0x80809b1b,0xe2e23ddf + .long 0xebeb26cd,0x2727694e,0xb2b2cd7f,0x75759fea + .long 0x09091b12,0x83839e1d,0x2c2c7458,0x1a1a2e34 + .long 0x1b1b2d36,0x6e6eb2dc,0x5a5aeeb4,0xa0a0fb5b + .long 0x5252f6a4,0x3b3b4d76,0xd6d661b7,0xb3b3ce7d + .long 0x29297b52,0xe3e33edd,0x2f2f715e,0x84849713 + .long 0x5353f5a6,0xd1d168b9,0x00000000,0xeded2cc1 + .long 0x20206040,0xfcfc1fe3,0xb1b1c879,0x5b5bedb6 + .long 0x6a6abed4,0xcbcb468d,0xbebed967,0x39394b72 + .long 0x4a4ade94,0x4c4cd498,0x5858e8b0,0xcfcf4a85 + .long 0xd0d06bbb,0xefef2ac5,0xaaaae54f,0xfbfb16ed + .long 0x4343c586,0x4d4dd79a,0x33335566,0x85859411 + .long 0x4545cf8a,0xf9f910e9,0x02020604,0x7f7f81fe + .long 0x5050f0a0,0x3c3c4478,0x9f9fba25,0xa8a8e34b + .long 0x5151f3a2,0xa3a3fe5d,0x4040c080,0x8f8f8a05 + .long 0x9292ad3f,0x9d9dbc21,0x38384870,0xf5f504f1 + .long 0xbcbcdf63,0xb6b6c177,0xdada75af,0x21216342 + .long 0x10103020,0xffff1ae5,0xf3f30efd,0xd2d26dbf + .long 0xcdcd4c81,0x0c0c1418,0x13133526,0xecec2fc3 + .long 0x5f5fe1be,0x9797a235,0x4444cc88,0x1717392e + .long 0xc4c45793,0xa7a7f255,0x7e7e82fc,0x3d3d477a + .long 0x6464acc8,0x5d5de7ba,0x19192b32,0x737395e6 + .long 0x6060a0c0,0x81819819,0x4f4fd19e,0xdcdc7fa3 + .long 0x22226644,0x2a2a7e54,0x9090ab3b,0x8888830b + .long 0x4646ca8c,0xeeee29c7,0xb8b8d36b,0x14143c28 + .long 0xdede79a7,0x5e5ee2bc,0x0b0b1d16,0xdbdb76ad + .long 0xe0e03bdb,0x32325664,0x3a3a4e74,0x0a0a1e14 + .long 0x4949db92,0x06060a0c,0x24246c48,0x5c5ce4b8 + .long 0xc2c25d9f,0xd3d36ebd,0xacacef43,0x6262a6c4 + .long 0x9191a839,0x9595a431,0xe4e437d3,0x79798bf2 + .long 0xe7e732d5,0xc8c8438b,0x3737596e,0x6d6db7da + .long 0x8d8d8c01,0xd5d564b1,0x4e4ed29c,0xa9a9e049 + .long 0x6c6cb4d8,0x5656faac,0xf4f407f3,0xeaea25cf + .long 0x6565afca,0x7a7a8ef4,0xaeaee947,0x08081810 + .long 0xbabad56f,0x787888f0,0x25256f4a,0x2e2e725c + .long 0x1c1c2438,0xa6a6f157,0xb4b4c773,0xc6c65197 + .long 0xe8e823cb,0xdddd7ca1,0x74749ce8,0x1f1f213e + .long 0x4b4bdd96,0xbdbddc61,0x8b8b860d,0x8a8a850f + .long 0x707090e0,0x3e3e427c,0xb5b5c471,0x6666aacc + .long 0x4848d890,0x03030506,0xf6f601f7,0x0e0e121c + .long 0x6161a3c2,0x35355f6a,0x5757f9ae,0xb9b9d069 + .long 0x86869117,0xc1c15899,0x1d1d273a,0x9e9eb927 + .long 0xe1e138d9,0xf8f813eb,0x9898b32b,0x11113322 + .long 0x6969bbd2,0xd9d970a9,0x8e8e8907,0x9494a733 + .long 0x9b9bb62d,0x1e1e223c,0x87879215,0xe9e920c9 + .long 0xcece4987,0x5555ffaa,0x28287850,0xdfdf7aa5 + .long 0x8c8c8f03,0xa1a1f859,0x89898009,0x0d0d171a + .long 0xbfbfda65,0xe6e631d7,0x4242c684,0x6868b8d0 + .long 0x4141c382,0x9999b029,0x2d2d775a,0x0f0f111e + .long 0xb0b0cb7b,0x5454fca8,0xbbbbd66d,0x16163a2c +#ifndef __APPLE__ + .text + .type L_AES_PPC32_td, %object + .size L_AES_PPC32_td, 4096 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_AES_PPC32_td: + .long 0x51f4a750,0x7e416553,0x1a17a4c3,0x3a275e96 + .long 0x3bab6bcb,0x1f9d45f1,0xacfa58ab,0x4be30393 + .long 0x2030fa55,0xad766df6,0x88cc7691,0xf5024c25 + .long 0x4fe5d7fc,0xc52acbd7,0x26354480,0xb562a38f + .long 0xdeb15a49,0x25ba1b67,0x45ea0e98,0x5dfec0e1 + .long 0xc32f7502,0x814cf012,0x8d4697a3,0x6bd3f9c6 + .long 0x038f5fe7,0x15929c95,0xbf6d7aeb,0x955259da + .long 0xd4be832d,0x587421d3,0x49e06929,0x8ec9c844 + .long 0x75c2896a,0xf48e7978,0x99583e6b,0x27b971dd + .long 0xbee14fb6,0xf088ad17,0xc920ac66,0x7dce3ab4 + .long 0x63df4a18,0xe51a3182,0x97513360,0x62537f45 + .long 0xb16477e0,0xbb6bae84,0xfe81a01c,0xf9082b94 + .long 0x70486858,0x8f45fd19,0x94de6c87,0x527bf8b7 + .long 0xab73d323,0x724b02e2,0xe31f8f57,0x6655ab2a + .long 0xb2eb2807,0x2fb5c203,0x86c57b9a,0xd33708a5 + .long 0x302887f2,0x23bfa5b2,0x02036aba,0xed16825c + .long 0x8acf1c2b,0xa779b492,0xf307f2f0,0x4e69e2a1 + .long 0x65daf4cd,0x0605bed5,0xd134621f,0xc4a6fe8a + .long 0x342e539d,0xa2f355a0,0x058ae132,0xa4f6eb75 + .long 0x0b83ec39,0x4060efaa,0x5e719f06,0xbd6e1051 + .long 0x3e218af9,0x96dd063d,0xdd3e05ae,0x4de6bd46 + .long 0x91548db5,0x71c45d05,0x0406d46f,0x605015ff + .long 0x1998fb24,0xd6bde997,0x894043cc,0x67d99e77 + .long 0xb0e842bd,0x07898b88,0xe7195b38,0x79c8eedb + .long 0xa17c0a47,0x7c420fe9,0xf8841ec9,0x00000000 + .long 0x09808683,0x322bed48,0x1e1170ac,0x6c5a724e + .long 0xfd0efffb,0x0f853856,0x3daed51e,0x362d3927 + .long 0x0a0fd964,0x685ca621,0x9b5b54d1,0x24362e3a + .long 0x0c0a67b1,0x9357e70f,0xb4ee96d2,0x1b9b919e + .long 0x80c0c54f,0x61dc20a2,0x5a774b69,0x1c121a16 + .long 0xe293ba0a,0xc0a02ae5,0x3c22e043,0x121b171d + .long 0x0e090d0b,0xf28bc7ad,0x2db6a8b9,0x141ea9c8 + .long 0x57f11985,0xaf75074c,0xee99ddbb,0xa37f60fd + .long 0xf701269f,0x5c72f5bc,0x44663bc5,0x5bfb7e34 + .long 0x8b432976,0xcb23c6dc,0xb6edfc68,0xb8e4f163 + .long 0xd731dcca,0x42638510,0x13972240,0x84c61120 + .long 0x854a247d,0xd2bb3df8,0xaef93211,0xc729a16d + .long 0x1d9e2f4b,0xdcb230f3,0x0d8652ec,0x77c1e3d0 + .long 0x2bb3166c,0xa970b999,0x119448fa,0x47e96422 + .long 0xa8fc8cc4,0xa0f03f1a,0x567d2cd8,0x223390ef + .long 0x87494ec7,0xd938d1c1,0x8ccaa2fe,0x98d40b36 + .long 0xa6f581cf,0xa57ade28,0xdab78e26,0x3fadbfa4 + .long 0x2c3a9de4,0x5078920d,0x6a5fcc9b,0x547e4662 + .long 0xf68d13c2,0x90d8b8e8,0x2e39f75e,0x82c3aff5 + .long 0x9f5d80be,0x69d0937c,0x6fd52da9,0xcf2512b3 + .long 0xc8ac993b,0x10187da7,0xe89c636e,0xdb3bbb7b + .long 0xcd267809,0x6e5918f4,0xec9ab701,0x834f9aa8 + .long 0xe6956e65,0xaaffe67e,0x21bccf08,0xef15e8e6 + .long 0xbae79bd9,0x4a6f36ce,0xea9f09d4,0x29b07cd6 + .long 0x31a4b2af,0x2a3f2331,0xc6a59430,0x35a266c0 + .long 0x744ebc37,0xfc82caa6,0xe090d0b0,0x33a7d815 + .long 0xf104984a,0x41ecdaf7,0x7fcd500e,0x1791f62f + .long 0x764dd68d,0x43efb04d,0xccaa4d54,0xe49604df + .long 0x9ed1b5e3,0x4c6a881b,0xc12c1fb8,0x4665517f + .long 0x9d5eea04,0x018c355d,0xfa877473,0xfb0b412e + .long 0xb3671d5a,0x92dbd252,0xe9105633,0x6dd64713 + .long 0x9ad7618c,0x37a10c7a,0x59f8148e,0xeb133c89 + .long 0xcea927ee,0xb761c935,0xe11ce5ed,0x7a47b13c + .long 0x9cd2df59,0x55f2733f,0x1814ce79,0x73c737bf + .long 0x53f7cdea,0x5ffdaa5b,0xdf3d6f14,0x7844db86 + .long 0xcaaff381,0xb968c43e,0x3824342c,0xc2a3405f + .long 0x161dc372,0xbce2250c,0x283c498b,0xff0d9541 + .long 0x39a80171,0x080cb3de,0xd8b4e49c,0x6456c190 + .long 0x7bcb8461,0xd532b670,0x486c5c74,0xd0b85742 + .long 0x5051f4a7,0x537e4165,0xc31a17a4,0x963a275e + .long 0xcb3bab6b,0xf11f9d45,0xabacfa58,0x934be303 + .long 0x552030fa,0xf6ad766d,0x9188cc76,0x25f5024c + .long 0xfc4fe5d7,0xd7c52acb,0x80263544,0x8fb562a3 + .long 0x49deb15a,0x6725ba1b,0x9845ea0e,0xe15dfec0 + .long 0x02c32f75,0x12814cf0,0xa38d4697,0xc66bd3f9 + .long 0xe7038f5f,0x9515929c,0xebbf6d7a,0xda955259 + .long 0x2dd4be83,0xd3587421,0x2949e069,0x448ec9c8 + .long 0x6a75c289,0x78f48e79,0x6b99583e,0xdd27b971 + .long 0xb6bee14f,0x17f088ad,0x66c920ac,0xb47dce3a + .long 0x1863df4a,0x82e51a31,0x60975133,0x4562537f + .long 0xe0b16477,0x84bb6bae,0x1cfe81a0,0x94f9082b + .long 0x58704868,0x198f45fd,0x8794de6c,0xb7527bf8 + .long 0x23ab73d3,0xe2724b02,0x57e31f8f,0x2a6655ab + .long 0x07b2eb28,0x032fb5c2,0x9a86c57b,0xa5d33708 + .long 0xf2302887,0xb223bfa5,0xba02036a,0x5ced1682 + .long 0x2b8acf1c,0x92a779b4,0xf0f307f2,0xa14e69e2 + .long 0xcd65daf4,0xd50605be,0x1fd13462,0x8ac4a6fe + .long 0x9d342e53,0xa0a2f355,0x32058ae1,0x75a4f6eb + .long 0x390b83ec,0xaa4060ef,0x065e719f,0x51bd6e10 + .long 0xf93e218a,0x3d96dd06,0xaedd3e05,0x464de6bd + .long 0xb591548d,0x0571c45d,0x6f0406d4,0xff605015 + .long 0x241998fb,0x97d6bde9,0xcc894043,0x7767d99e + .long 0xbdb0e842,0x8807898b,0x38e7195b,0xdb79c8ee + .long 0x47a17c0a,0xe97c420f,0xc9f8841e,0x00000000 + .long 0x83098086,0x48322bed,0xac1e1170,0x4e6c5a72 + .long 0xfbfd0eff,0x560f8538,0x1e3daed5,0x27362d39 + .long 0x640a0fd9,0x21685ca6,0xd19b5b54,0x3a24362e + .long 0xb10c0a67,0x0f9357e7,0xd2b4ee96,0x9e1b9b91 + .long 0x4f80c0c5,0xa261dc20,0x695a774b,0x161c121a + .long 0x0ae293ba,0xe5c0a02a,0x433c22e0,0x1d121b17 + .long 0x0b0e090d,0xadf28bc7,0xb92db6a8,0xc8141ea9 + .long 0x8557f119,0x4caf7507,0xbbee99dd,0xfda37f60 + .long 0x9ff70126,0xbc5c72f5,0xc544663b,0x345bfb7e + .long 0x768b4329,0xdccb23c6,0x68b6edfc,0x63b8e4f1 + .long 0xcad731dc,0x10426385,0x40139722,0x2084c611 + .long 0x7d854a24,0xf8d2bb3d,0x11aef932,0x6dc729a1 + .long 0x4b1d9e2f,0xf3dcb230,0xec0d8652,0xd077c1e3 + .long 0x6c2bb316,0x99a970b9,0xfa119448,0x2247e964 + .long 0xc4a8fc8c,0x1aa0f03f,0xd8567d2c,0xef223390 + .long 0xc787494e,0xc1d938d1,0xfe8ccaa2,0x3698d40b + .long 0xcfa6f581,0x28a57ade,0x26dab78e,0xa43fadbf + .long 0xe42c3a9d,0x0d507892,0x9b6a5fcc,0x62547e46 + .long 0xc2f68d13,0xe890d8b8,0x5e2e39f7,0xf582c3af + .long 0xbe9f5d80,0x7c69d093,0xa96fd52d,0xb3cf2512 + .long 0x3bc8ac99,0xa710187d,0x6ee89c63,0x7bdb3bbb + .long 0x09cd2678,0xf46e5918,0x01ec9ab7,0xa8834f9a + .long 0x65e6956e,0x7eaaffe6,0x0821bccf,0xe6ef15e8 + .long 0xd9bae79b,0xce4a6f36,0xd4ea9f09,0xd629b07c + .long 0xaf31a4b2,0x312a3f23,0x30c6a594,0xc035a266 + .long 0x37744ebc,0xa6fc82ca,0xb0e090d0,0x1533a7d8 + .long 0x4af10498,0xf741ecda,0x0e7fcd50,0x2f1791f6 + .long 0x8d764dd6,0x4d43efb0,0x54ccaa4d,0xdfe49604 + .long 0xe39ed1b5,0x1b4c6a88,0xb8c12c1f,0x7f466551 + .long 0x049d5eea,0x5d018c35,0x73fa8774,0x2efb0b41 + .long 0x5ab3671d,0x5292dbd2,0x33e91056,0x136dd647 + .long 0x8c9ad761,0x7a37a10c,0x8e59f814,0x89eb133c + .long 0xeecea927,0x35b761c9,0xede11ce5,0x3c7a47b1 + .long 0x599cd2df,0x3f55f273,0x791814ce,0xbf73c737 + .long 0xea53f7cd,0x5b5ffdaa,0x14df3d6f,0x867844db + .long 0x81caaff3,0x3eb968c4,0x2c382434,0x5fc2a340 + .long 0x72161dc3,0x0cbce225,0x8b283c49,0x41ff0d95 + .long 0x7139a801,0xde080cb3,0x9cd8b4e4,0x906456c1 + .long 0x617bcb84,0x70d532b6,0x74486c5c,0x42d0b857 + .long 0xa75051f4,0x65537e41,0xa4c31a17,0x5e963a27 + .long 0x6bcb3bab,0x45f11f9d,0x58abacfa,0x03934be3 + .long 0xfa552030,0x6df6ad76,0x769188cc,0x4c25f502 + .long 0xd7fc4fe5,0xcbd7c52a,0x44802635,0xa38fb562 + .long 0x5a49deb1,0x1b6725ba,0x0e9845ea,0xc0e15dfe + .long 0x7502c32f,0xf012814c,0x97a38d46,0xf9c66bd3 + .long 0x5fe7038f,0x9c951592,0x7aebbf6d,0x59da9552 + .long 0x832dd4be,0x21d35874,0x692949e0,0xc8448ec9 + .long 0x896a75c2,0x7978f48e,0x3e6b9958,0x71dd27b9 + .long 0x4fb6bee1,0xad17f088,0xac66c920,0x3ab47dce + .long 0x4a1863df,0x3182e51a,0x33609751,0x7f456253 + .long 0x77e0b164,0xae84bb6b,0xa01cfe81,0x2b94f908 + .long 0x68587048,0xfd198f45,0x6c8794de,0xf8b7527b + .long 0xd323ab73,0x02e2724b,0x8f57e31f,0xab2a6655 + .long 0x2807b2eb,0xc2032fb5,0x7b9a86c5,0x08a5d337 + .long 0x87f23028,0xa5b223bf,0x6aba0203,0x825ced16 + .long 0x1c2b8acf,0xb492a779,0xf2f0f307,0xe2a14e69 + .long 0xf4cd65da,0xbed50605,0x621fd134,0xfe8ac4a6 + .long 0x539d342e,0x55a0a2f3,0xe132058a,0xeb75a4f6 + .long 0xec390b83,0xefaa4060,0x9f065e71,0x1051bd6e + .long 0x8af93e21,0x063d96dd,0x05aedd3e,0xbd464de6 + .long 0x8db59154,0x5d0571c4,0xd46f0406,0x15ff6050 + .long 0xfb241998,0xe997d6bd,0x43cc8940,0x9e7767d9 + .long 0x42bdb0e8,0x8b880789,0x5b38e719,0xeedb79c8 + .long 0x0a47a17c,0x0fe97c42,0x1ec9f884,0x00000000 + .long 0x86830980,0xed48322b,0x70ac1e11,0x724e6c5a + .long 0xfffbfd0e,0x38560f85,0xd51e3dae,0x3927362d + .long 0xd9640a0f,0xa621685c,0x54d19b5b,0x2e3a2436 + .long 0x67b10c0a,0xe70f9357,0x96d2b4ee,0x919e1b9b + .long 0xc54f80c0,0x20a261dc,0x4b695a77,0x1a161c12 + .long 0xba0ae293,0x2ae5c0a0,0xe0433c22,0x171d121b + .long 0x0d0b0e09,0xc7adf28b,0xa8b92db6,0xa9c8141e + .long 0x198557f1,0x074caf75,0xddbbee99,0x60fda37f + .long 0x269ff701,0xf5bc5c72,0x3bc54466,0x7e345bfb + .long 0x29768b43,0xc6dccb23,0xfc68b6ed,0xf163b8e4 + .long 0xdccad731,0x85104263,0x22401397,0x112084c6 + .long 0x247d854a,0x3df8d2bb,0x3211aef9,0xa16dc729 + .long 0x2f4b1d9e,0x30f3dcb2,0x52ec0d86,0xe3d077c1 + .long 0x166c2bb3,0xb999a970,0x48fa1194,0x642247e9 + .long 0x8cc4a8fc,0x3f1aa0f0,0x2cd8567d,0x90ef2233 + .long 0x4ec78749,0xd1c1d938,0xa2fe8cca,0x0b3698d4 + .long 0x81cfa6f5,0xde28a57a,0x8e26dab7,0xbfa43fad + .long 0x9de42c3a,0x920d5078,0xcc9b6a5f,0x4662547e + .long 0x13c2f68d,0xb8e890d8,0xf75e2e39,0xaff582c3 + .long 0x80be9f5d,0x937c69d0,0x2da96fd5,0x12b3cf25 + .long 0x993bc8ac,0x7da71018,0x636ee89c,0xbb7bdb3b + .long 0x7809cd26,0x18f46e59,0xb701ec9a,0x9aa8834f + .long 0x6e65e695,0xe67eaaff,0xcf0821bc,0xe8e6ef15 + .long 0x9bd9bae7,0x36ce4a6f,0x09d4ea9f,0x7cd629b0 + .long 0xb2af31a4,0x23312a3f,0x9430c6a5,0x66c035a2 + .long 0xbc37744e,0xcaa6fc82,0xd0b0e090,0xd81533a7 + .long 0x984af104,0xdaf741ec,0x500e7fcd,0xf62f1791 + .long 0xd68d764d,0xb04d43ef,0x4d54ccaa,0x04dfe496 + .long 0xb5e39ed1,0x881b4c6a,0x1fb8c12c,0x517f4665 + .long 0xea049d5e,0x355d018c,0x7473fa87,0x412efb0b + .long 0x1d5ab367,0xd25292db,0x5633e910,0x47136dd6 + .long 0x618c9ad7,0x0c7a37a1,0x148e59f8,0x3c89eb13 + .long 0x27eecea9,0xc935b761,0xe5ede11c,0xb13c7a47 + .long 0xdf599cd2,0x733f55f2,0xce791814,0x37bf73c7 + .long 0xcdea53f7,0xaa5b5ffd,0x6f14df3d,0xdb867844 + .long 0xf381caaf,0xc43eb968,0x342c3824,0x405fc2a3 + .long 0xc372161d,0x250cbce2,0x498b283c,0x9541ff0d + .long 0x017139a8,0xb3de080c,0xe49cd8b4,0xc1906456 + .long 0x84617bcb,0xb670d532,0x5c74486c,0x5742d0b8 + .long 0xf4a75051,0x4165537e,0x17a4c31a,0x275e963a + .long 0xab6bcb3b,0x9d45f11f,0xfa58abac,0xe303934b + .long 0x30fa5520,0x766df6ad,0xcc769188,0x024c25f5 + .long 0xe5d7fc4f,0x2acbd7c5,0x35448026,0x62a38fb5 + .long 0xb15a49de,0xba1b6725,0xea0e9845,0xfec0e15d + .long 0x2f7502c3,0x4cf01281,0x4697a38d,0xd3f9c66b + .long 0x8f5fe703,0x929c9515,0x6d7aebbf,0x5259da95 + .long 0xbe832dd4,0x7421d358,0xe0692949,0xc9c8448e + .long 0xc2896a75,0x8e7978f4,0x583e6b99,0xb971dd27 + .long 0xe14fb6be,0x88ad17f0,0x20ac66c9,0xce3ab47d + .long 0xdf4a1863,0x1a3182e5,0x51336097,0x537f4562 + .long 0x6477e0b1,0x6bae84bb,0x81a01cfe,0x082b94f9 + .long 0x48685870,0x45fd198f,0xde6c8794,0x7bf8b752 + .long 0x73d323ab,0x4b02e272,0x1f8f57e3,0x55ab2a66 + .long 0xeb2807b2,0xb5c2032f,0xc57b9a86,0x3708a5d3 + .long 0x2887f230,0xbfa5b223,0x036aba02,0x16825ced + .long 0xcf1c2b8a,0x79b492a7,0x07f2f0f3,0x69e2a14e + .long 0xdaf4cd65,0x05bed506,0x34621fd1,0xa6fe8ac4 + .long 0x2e539d34,0xf355a0a2,0x8ae13205,0xf6eb75a4 + .long 0x83ec390b,0x60efaa40,0x719f065e,0x6e1051bd + .long 0x218af93e,0xdd063d96,0x3e05aedd,0xe6bd464d + .long 0x548db591,0xc45d0571,0x06d46f04,0x5015ff60 + .long 0x98fb2419,0xbde997d6,0x4043cc89,0xd99e7767 + .long 0xe842bdb0,0x898b8807,0x195b38e7,0xc8eedb79 + .long 0x7c0a47a1,0x420fe97c,0x841ec9f8,0x00000000 + .long 0x80868309,0x2bed4832,0x1170ac1e,0x5a724e6c + .long 0x0efffbfd,0x8538560f,0xaed51e3d,0x2d392736 + .long 0x0fd9640a,0x5ca62168,0x5b54d19b,0x362e3a24 + .long 0x0a67b10c,0x57e70f93,0xee96d2b4,0x9b919e1b + .long 0xc0c54f80,0xdc20a261,0x774b695a,0x121a161c + .long 0x93ba0ae2,0xa02ae5c0,0x22e0433c,0x1b171d12 + .long 0x090d0b0e,0x8bc7adf2,0xb6a8b92d,0x1ea9c814 + .long 0xf1198557,0x75074caf,0x99ddbbee,0x7f60fda3 + .long 0x01269ff7,0x72f5bc5c,0x663bc544,0xfb7e345b + .long 0x4329768b,0x23c6dccb,0xedfc68b6,0xe4f163b8 + .long 0x31dccad7,0x63851042,0x97224013,0xc6112084 + .long 0x4a247d85,0xbb3df8d2,0xf93211ae,0x29a16dc7 + .long 0x9e2f4b1d,0xb230f3dc,0x8652ec0d,0xc1e3d077 + .long 0xb3166c2b,0x70b999a9,0x9448fa11,0xe9642247 + .long 0xfc8cc4a8,0xf03f1aa0,0x7d2cd856,0x3390ef22 + .long 0x494ec787,0x38d1c1d9,0xcaa2fe8c,0xd40b3698 + .long 0xf581cfa6,0x7ade28a5,0xb78e26da,0xadbfa43f + .long 0x3a9de42c,0x78920d50,0x5fcc9b6a,0x7e466254 + .long 0x8d13c2f6,0xd8b8e890,0x39f75e2e,0xc3aff582 + .long 0x5d80be9f,0xd0937c69,0xd52da96f,0x2512b3cf + .long 0xac993bc8,0x187da710,0x9c636ee8,0x3bbb7bdb + .long 0x267809cd,0x5918f46e,0x9ab701ec,0x4f9aa883 + .long 0x956e65e6,0xffe67eaa,0xbccf0821,0x15e8e6ef + .long 0xe79bd9ba,0x6f36ce4a,0x9f09d4ea,0xb07cd629 + .long 0xa4b2af31,0x3f23312a,0xa59430c6,0xa266c035 + .long 0x4ebc3774,0x82caa6fc,0x90d0b0e0,0xa7d81533 + .long 0x04984af1,0xecdaf741,0xcd500e7f,0x91f62f17 + .long 0x4dd68d76,0xefb04d43,0xaa4d54cc,0x9604dfe4 + .long 0xd1b5e39e,0x6a881b4c,0x2c1fb8c1,0x65517f46 + .long 0x5eea049d,0x8c355d01,0x877473fa,0x0b412efb + .long 0x671d5ab3,0xdbd25292,0x105633e9,0xd647136d + .long 0xd7618c9a,0xa10c7a37,0xf8148e59,0x133c89eb + .long 0xa927eece,0x61c935b7,0x1ce5ede1,0x47b13c7a + .long 0xd2df599c,0xf2733f55,0x14ce7918,0xc737bf73 + .long 0xf7cdea53,0xfdaa5b5f,0x3d6f14df,0x44db8678 + .long 0xaff381ca,0x68c43eb9,0x24342c38,0xa3405fc2 + .long 0x1dc37216,0xe2250cbc,0x3c498b28,0x0d9541ff + .long 0xa8017139,0x0cb3de08,0xb4e49cd8,0x56c19064 + .long 0xcb84617b,0x32b670d5,0x6c5c7448,0xb85742d0 +#ifndef __APPLE__ + .text + .type L_AES_PPC32_sbox, %object + .size L_AES_PPC32_sbox, 256 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 4-byte aligned, 32-bit aligned +#ifndef __APPLE__ + .align 2 +#else + .p2align 2 +#endif /* __APPLE__ */ +L_AES_PPC32_sbox: + .byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5 + .byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76 + .byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0 + .byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0 + .byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc + .byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15 + .byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a + .byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75 + .byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0 + .byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84 + .byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b + .byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf + .byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85 + .byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8 + .byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5 + .byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2 + .byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17 + .byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73 + .byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88 + .byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb + .byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c + .byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79 + .byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9 + .byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08 + .byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6 + .byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a + .byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e + .byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e + .byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94 + .byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf + .byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68 + .byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16 +#ifndef __APPLE__ + .text + .type L_AES_PPC32_inv_sbox, %object + .size L_AES_PPC32_inv_sbox, 256 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 4-byte aligned, 32-bit aligned +#ifndef __APPLE__ + .align 2 +#else + .p2align 2 +#endif /* __APPLE__ */ +L_AES_PPC32_inv_sbox: + .byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38 + .byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb + .byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87 + .byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb + .byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d + .byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e + .byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2 + .byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25 + .byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16 + .byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92 + .byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda + .byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84 + .byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a + .byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06 + .byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02 + .byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b + .byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea + .byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73 + .byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85 + .byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e + .byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89 + .byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b + .byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20 + .byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4 + .byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31 + .byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f + .byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d + .byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef + .byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0 + .byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61 + .byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26 + .byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d +#ifndef __APPLE__ + .text + .type L_AES_PPC32_rcon, %object + .size L_AES_PPC32_rcon, 40 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_AES_PPC32_rcon: + .long 0x01000000,0x02000000,0x04000000,0x08000000 + .long 0x10000000,0x20000000,0x40000000,0x80000000 + .long 0x1b000000,0x36000000 + .section ".text" + .align 4 + .globl AES_set_encrypt_key + .type AES_set_encrypt_key, @function +AES_set_encrypt_key: + stwu 1, -20(1) + mflr 0 + stw 0, 16(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + lis 14, L_AES_PPC32_sbox@ha + la 14, L_AES_PPC32_sbox@l(14) + lis 15, L_AES_PPC32_rcon@ha + la 15, L_AES_PPC32_rcon@l(15) + cmplwi 4, 0x80 + beq L_AES_set_encrypt_key_128 + cmplwi 4, 0xc0 + beq L_AES_set_encrypt_key_192 + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + lwz 9, 16(3) + lwz 10, 20(3) + lwz 11, 24(3) + lwz 12, 28(3) + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + stw 9, 16(5) + stw 10, 20(5) + stw 11, 24(5) + stw 12, 28(5) + addi 5, 5, 32 + li 17, 6 + mtctr 17 +L_AES_set_encrypt_key_loop_256: + rlwinm 17, 12, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 12, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 12, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 12, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + rlwinm 17, 8, 8, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 8, 16, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 8, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 8, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + xor 9, 9, 16 + xor 10, 10, 9 + xor 11, 11, 10 + xor 12, 12, 11 + stw 9, 16(5) + stw 10, 20(5) + stw 11, 24(5) + stw 12, 28(5) + addi 5, 5, 32 + bdnz L_AES_set_encrypt_key_loop_256 + rlwinm 17, 12, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 12, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 12, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 12, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + b L_AES_set_encrypt_key_end +L_AES_set_encrypt_key_192: + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + lwz 9, 16(3) + lwz 10, 20(3) + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + stw 9, 16(5) + stw 10, 20(5) + addi 5, 5, 24 + li 17, 7 + mtctr 17 +L_AES_set_encrypt_key_loop_192: + rlwinm 17, 10, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 10, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 10, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 10, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + xor 9, 9, 8 + xor 10, 10, 9 + stw 9, 16(5) + stw 10, 20(5) + addi 5, 5, 24 + bdnz L_AES_set_encrypt_key_loop_192 + rlwinm 17, 10, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 10, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 10, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 10, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + b L_AES_set_encrypt_key_end +L_AES_set_encrypt_key_128: + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + addi 5, 5, 16 + li 17, 10 + mtctr 17 +L_AES_set_encrypt_key_loop_128: + rlwinm 17, 8, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 8, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 8, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 8, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + addi 5, 5, 16 + bdnz L_AES_set_encrypt_key_loop_128 +L_AES_set_encrypt_key_end: + lwz 0, 16(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + addi 1, 1, 20 + blr + .size AES_set_encrypt_key,.-AES_set_encrypt_key + .section ".text" + .align 4 + .globl AES_ECB_encrypt + .type AES_ECB_encrypt, @function +AES_ECB_encrypt: + stwu 1, -56(1) + mflr 0 + stw 0, 52(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + lis 16, L_AES_PPC32_te@ha + la 16, L_AES_PPC32_te@l(16) + addi 17, 16, 0x400 + addi 18, 16, 0x800 + addi 19, 16, 0xc00 + add 26, 3, 5 +L_AES_ECB_encrypt_block: + lwz 0, 0(3) + lwz 8, 4(3) + lwz 9, 8(3) + lwz 10, 12(3) + mr 20, 6 + addi 21, 7, -2 + lwz 22, 0(20) + lwz 23, 4(20) + lwz 24, 8(20) + lwz 25, 12(20) + xor 0, 0, 22 + xor 8, 8, 23 + xor 9, 9, 24 + xor 10, 10, 25 + addi 20, 20, 16 + srwi 21, 21, 1 + mtctr 21 +L_AES_ECB_encrypt_round: + rlwinm 22, 0, 10, 22, 29 + rlwinm 23, 8, 18, 22, 29 + rlwinm 24, 9, 26, 22, 29 + rlwinm 25, 10, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 11, 22, 24 + rlwinm 22, 8, 10, 22, 29 + rlwinm 23, 9, 18, 22, 29 + rlwinm 24, 10, 26, 22, 29 + rlwinm 25, 0, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 12, 22, 24 + rlwinm 22, 9, 10, 22, 29 + rlwinm 23, 10, 18, 22, 29 + rlwinm 24, 0, 26, 22, 29 + rlwinm 25, 8, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 14, 22, 24 + rlwinm 22, 10, 10, 22, 29 + rlwinm 23, 0, 18, 22, 29 + rlwinm 24, 8, 26, 22, 29 + rlwinm 25, 9, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 15, 22, 24 + lwz 22, 0(20) + lwz 23, 4(20) + lwz 24, 8(20) + lwz 25, 12(20) + xor 11, 11, 22 + xor 12, 12, 23 + xor 14, 14, 24 + xor 15, 15, 25 + addi 20, 20, 16 + rlwinm 22, 11, 10, 22, 29 + rlwinm 23, 12, 18, 22, 29 + rlwinm 24, 14, 26, 22, 29 + rlwinm 25, 15, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 0, 22, 24 + rlwinm 22, 12, 10, 22, 29 + rlwinm 23, 14, 18, 22, 29 + rlwinm 24, 15, 26, 22, 29 + rlwinm 25, 11, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 8, 22, 24 + rlwinm 22, 14, 10, 22, 29 + rlwinm 23, 15, 18, 22, 29 + rlwinm 24, 11, 26, 22, 29 + rlwinm 25, 12, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 9, 22, 24 + rlwinm 22, 15, 10, 22, 29 + rlwinm 23, 11, 18, 22, 29 + rlwinm 24, 12, 26, 22, 29 + rlwinm 25, 14, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 10, 22, 24 + lwz 22, 0(20) + lwz 23, 4(20) + lwz 24, 8(20) + lwz 25, 12(20) + xor 0, 0, 22 + xor 8, 8, 23 + xor 9, 9, 24 + xor 10, 10, 25 + addi 20, 20, 16 + bdnz L_AES_ECB_encrypt_round + rlwinm 22, 0, 10, 22, 29 + rlwinm 23, 8, 18, 22, 29 + rlwinm 24, 9, 26, 22, 29 + rlwinm 25, 10, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 11, 22, 24 + rlwinm 22, 8, 10, 22, 29 + rlwinm 23, 9, 18, 22, 29 + rlwinm 24, 10, 26, 22, 29 + rlwinm 25, 0, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 12, 22, 24 + rlwinm 22, 9, 10, 22, 29 + rlwinm 23, 10, 18, 22, 29 + rlwinm 24, 0, 26, 22, 29 + rlwinm 25, 8, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 14, 22, 24 + rlwinm 22, 10, 10, 22, 29 + rlwinm 23, 0, 18, 22, 29 + rlwinm 24, 8, 26, 22, 29 + rlwinm 25, 9, 2, 22, 29 + lwzx 22, 16, 22 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + xor 22, 22, 23 + xor 24, 24, 25 + xor 15, 22, 24 + lwz 22, 0(20) + lwz 23, 4(20) + lwz 24, 8(20) + lwz 25, 12(20) + xor 11, 11, 22 + xor 12, 12, 23 + xor 14, 14, 24 + xor 15, 15, 25 + addi 20, 20, 16 + rlwinm 22, 11, 10, 22, 29 + rlwinm 23, 12, 18, 22, 29 + rlwinm 24, 14, 26, 22, 29 + rlwinm 25, 15, 2, 22, 29 + lwzx 22, 18, 22 + lwzx 23, 19, 23 + lwzx 24, 16, 24 + lwzx 25, 17, 25 + rlwinm 0, 22, 0, 0, 7 + rlwimi 0, 23, 0, 8, 15 + rlwimi 0, 24, 0, 16, 23 + rlwimi 0, 25, 0, 24, 31 + rlwinm 22, 12, 10, 22, 29 + rlwinm 23, 14, 18, 22, 29 + rlwinm 24, 15, 26, 22, 29 + rlwinm 25, 11, 2, 22, 29 + lwzx 22, 18, 22 + lwzx 23, 19, 23 + lwzx 24, 16, 24 + lwzx 25, 17, 25 + rlwinm 8, 22, 0, 0, 7 + rlwimi 8, 23, 0, 8, 15 + rlwimi 8, 24, 0, 16, 23 + rlwimi 8, 25, 0, 24, 31 + rlwinm 22, 14, 10, 22, 29 + rlwinm 23, 15, 18, 22, 29 + rlwinm 24, 11, 26, 22, 29 + rlwinm 25, 12, 2, 22, 29 + lwzx 22, 18, 22 + lwzx 23, 19, 23 + lwzx 24, 16, 24 + lwzx 25, 17, 25 + rlwinm 9, 22, 0, 0, 7 + rlwimi 9, 23, 0, 8, 15 + rlwimi 9, 24, 0, 16, 23 + rlwimi 9, 25, 0, 24, 31 + rlwinm 22, 15, 10, 22, 29 + rlwinm 23, 11, 18, 22, 29 + rlwinm 24, 12, 26, 22, 29 + rlwinm 25, 14, 2, 22, 29 + lwzx 22, 18, 22 + lwzx 23, 19, 23 + lwzx 24, 16, 24 + lwzx 25, 17, 25 + rlwinm 10, 22, 0, 0, 7 + rlwimi 10, 23, 0, 8, 15 + rlwimi 10, 24, 0, 16, 23 + rlwimi 10, 25, 0, 24, 31 + lwz 22, 0(20) + lwz 23, 4(20) + lwz 24, 8(20) + lwz 25, 12(20) + xor 0, 0, 22 + xor 8, 8, 23 + xor 9, 9, 24 + xor 10, 10, 25 + stw 0, 0(4) + stw 8, 4(4) + stw 9, 8(4) + stw 10, 12(4) + addi 3, 3, 16 + addi 4, 4, 16 + cmplw 3, 26 + blt L_AES_ECB_encrypt_block + lwz 0, 52(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + addi 1, 1, 56 + blr + .size AES_ECB_encrypt,.-AES_ECB_encrypt +#ifdef HAVE_AES_DECRYPT + .section ".text" + .align 4 + .globl AES_invert_key + .type AES_invert_key, @function +AES_invert_key: + stwu 1, -40(1) + mflr 0 + stw 0, 36(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + lis 12, L_AES_PPC32_sbox@ha + la 12, L_AES_PPC32_sbox@l(12) + lis 19, L_AES_PPC32_td@ha + la 19, L_AES_PPC32_td@l(19) + addi 20, 19, 0x400 + addi 21, 19, 0x800 + addi 22, 19, 0xc00 + mr 14, 3 + slwi 16, 4, 4 + add 15, 3, 16 + addi 16, 4, 1 + srwi 16, 16, 1 + mtctr 16 +L_AES_invert_key_swap: + lwz 0, 0(14) + lwz 5, 4(14) + lwz 6, 8(14) + lwz 7, 12(14) + lwz 8, 0(15) + lwz 9, 4(15) + lwz 10, 8(15) + lwz 11, 12(15) + stw 8, 0(14) + stw 9, 4(14) + stw 10, 8(14) + stw 11, 12(14) + stw 0, 0(15) + stw 5, 4(15) + stw 6, 8(15) + stw 7, 12(15) + addi 14, 14, 16 + addi 15, 15, -16 + bdnz L_AES_invert_key_swap + addi 14, 3, 16 + addi 16, 4, -1 + mtctr 16 +L_AES_invert_key_mix: + lwz 0, 0(14) + rlwinm 17, 0, 8, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 5, 19, 17 + rlwinm 18, 0, 16, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 20, 18 + xor 5, 5, 18 + rlwinm 17, 0, 24, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 17, 21, 17 + xor 5, 5, 17 + rlwinm 18, 0, 0, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 22, 18 + xor 5, 5, 18 + stw 5, 0(14) + lwz 0, 4(14) + rlwinm 17, 0, 8, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 5, 19, 17 + rlwinm 18, 0, 16, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 20, 18 + xor 5, 5, 18 + rlwinm 17, 0, 24, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 17, 21, 17 + xor 5, 5, 17 + rlwinm 18, 0, 0, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 22, 18 + xor 5, 5, 18 + stw 5, 4(14) + lwz 0, 8(14) + rlwinm 17, 0, 8, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 5, 19, 17 + rlwinm 18, 0, 16, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 20, 18 + xor 5, 5, 18 + rlwinm 17, 0, 24, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 17, 21, 17 + xor 5, 5, 17 + rlwinm 18, 0, 0, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 22, 18 + xor 5, 5, 18 + stw 5, 8(14) + lwz 0, 12(14) + rlwinm 17, 0, 8, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 5, 19, 17 + rlwinm 18, 0, 16, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 20, 18 + xor 5, 5, 18 + rlwinm 17, 0, 24, 24, 31 + lbzx 17, 12, 17 + slwi 17, 17, 2 + lwzx 17, 21, 17 + xor 5, 5, 17 + rlwinm 18, 0, 0, 24, 31 + lbzx 18, 12, 18 + slwi 18, 18, 2 + lwzx 18, 22, 18 + xor 5, 5, 18 + stw 5, 12(14) + addi 14, 14, 16 + bdnz L_AES_invert_key_mix + lwz 0, 36(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + addi 1, 1, 40 + blr + .size AES_invert_key,.-AES_invert_key + .section ".text" + .align 4 + .globl AES_ECB_decrypt + .type AES_ECB_decrypt, @function +AES_ECB_decrypt: + stwu 1, -60(1) + mflr 0 + stw 0, 56(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + stw 27, 52(1) + lis 16, L_AES_PPC32_td@ha + la 16, L_AES_PPC32_td@l(16) + addi 17, 16, 0x400 + addi 18, 16, 0x800 + addi 19, 16, 0xc00 + lis 20, L_AES_PPC32_inv_sbox@ha + la 20, L_AES_PPC32_inv_sbox@l(20) + add 27, 3, 5 +L_AES_ECB_decrypt_block: + lwz 0, 0(3) + lwz 8, 4(3) + lwz 9, 8(3) + lwz 10, 12(3) + mr 21, 6 + addi 22, 7, -2 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 0, 0, 23 + xor 8, 8, 24 + xor 9, 9, 25 + xor 10, 10, 26 + addi 21, 21, 16 + srwi 22, 22, 1 + mtctr 22 +L_AES_ECB_decrypt_round: + rlwinm 23, 0, 10, 22, 29 + rlwinm 24, 10, 18, 22, 29 + rlwinm 25, 9, 26, 22, 29 + rlwinm 26, 8, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 11, 23, 25 + rlwinm 23, 8, 10, 22, 29 + rlwinm 24, 0, 18, 22, 29 + rlwinm 25, 10, 26, 22, 29 + rlwinm 26, 9, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 12, 23, 25 + rlwinm 23, 9, 10, 22, 29 + rlwinm 24, 8, 18, 22, 29 + rlwinm 25, 0, 26, 22, 29 + rlwinm 26, 10, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 14, 23, 25 + rlwinm 23, 10, 10, 22, 29 + rlwinm 24, 9, 18, 22, 29 + rlwinm 25, 8, 26, 22, 29 + rlwinm 26, 0, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 15, 23, 25 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 11, 11, 23 + xor 12, 12, 24 + xor 14, 14, 25 + xor 15, 15, 26 + addi 21, 21, 16 + rlwinm 23, 11, 10, 22, 29 + rlwinm 24, 15, 18, 22, 29 + rlwinm 25, 14, 26, 22, 29 + rlwinm 26, 12, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 0, 23, 25 + rlwinm 23, 12, 10, 22, 29 + rlwinm 24, 11, 18, 22, 29 + rlwinm 25, 15, 26, 22, 29 + rlwinm 26, 14, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 8, 23, 25 + rlwinm 23, 14, 10, 22, 29 + rlwinm 24, 12, 18, 22, 29 + rlwinm 25, 11, 26, 22, 29 + rlwinm 26, 15, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 9, 23, 25 + rlwinm 23, 15, 10, 22, 29 + rlwinm 24, 14, 18, 22, 29 + rlwinm 25, 12, 26, 22, 29 + rlwinm 26, 11, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 10, 23, 25 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 0, 0, 23 + xor 8, 8, 24 + xor 9, 9, 25 + xor 10, 10, 26 + addi 21, 21, 16 + bdnz L_AES_ECB_decrypt_round + rlwinm 23, 0, 10, 22, 29 + rlwinm 24, 10, 18, 22, 29 + rlwinm 25, 9, 26, 22, 29 + rlwinm 26, 8, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 11, 23, 25 + rlwinm 23, 8, 10, 22, 29 + rlwinm 24, 0, 18, 22, 29 + rlwinm 25, 10, 26, 22, 29 + rlwinm 26, 9, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 12, 23, 25 + rlwinm 23, 9, 10, 22, 29 + rlwinm 24, 8, 18, 22, 29 + rlwinm 25, 0, 26, 22, 29 + rlwinm 26, 10, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 14, 23, 25 + rlwinm 23, 10, 10, 22, 29 + rlwinm 24, 9, 18, 22, 29 + rlwinm 25, 8, 26, 22, 29 + rlwinm 26, 0, 2, 22, 29 + lwzx 23, 16, 23 + lwzx 24, 17, 24 + lwzx 25, 18, 25 + lwzx 26, 19, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 15, 23, 25 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 11, 11, 23 + xor 12, 12, 24 + xor 14, 14, 25 + xor 15, 15, 26 + addi 21, 21, 16 + rlwinm 23, 11, 8, 24, 31 + rlwinm 24, 15, 16, 24, 31 + rlwinm 25, 14, 24, 24, 31 + rlwinm 26, 12, 0, 24, 31 + lbzx 23, 20, 23 + lbzx 24, 20, 24 + lbzx 25, 20, 25 + lbzx 26, 20, 26 + slwi 0, 23, 24 + rlwimi 0, 24, 16, 8, 15 + rlwimi 0, 25, 8, 16, 23 + rlwimi 0, 26, 0, 24, 31 + rlwinm 23, 12, 8, 24, 31 + rlwinm 24, 11, 16, 24, 31 + rlwinm 25, 15, 24, 24, 31 + rlwinm 26, 14, 0, 24, 31 + lbzx 23, 20, 23 + lbzx 24, 20, 24 + lbzx 25, 20, 25 + lbzx 26, 20, 26 + slwi 8, 23, 24 + rlwimi 8, 24, 16, 8, 15 + rlwimi 8, 25, 8, 16, 23 + rlwimi 8, 26, 0, 24, 31 + rlwinm 23, 14, 8, 24, 31 + rlwinm 24, 12, 16, 24, 31 + rlwinm 25, 11, 24, 24, 31 + rlwinm 26, 15, 0, 24, 31 + lbzx 23, 20, 23 + lbzx 24, 20, 24 + lbzx 25, 20, 25 + lbzx 26, 20, 26 + slwi 9, 23, 24 + rlwimi 9, 24, 16, 8, 15 + rlwimi 9, 25, 8, 16, 23 + rlwimi 9, 26, 0, 24, 31 + rlwinm 23, 15, 8, 24, 31 + rlwinm 24, 14, 16, 24, 31 + rlwinm 25, 12, 24, 24, 31 + rlwinm 26, 11, 0, 24, 31 + lbzx 23, 20, 23 + lbzx 24, 20, 24 + lbzx 25, 20, 25 + lbzx 26, 20, 26 + slwi 10, 23, 24 + rlwimi 10, 24, 16, 8, 15 + rlwimi 10, 25, 8, 16, 23 + rlwimi 10, 26, 0, 24, 31 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 0, 0, 23 + xor 8, 8, 24 + xor 9, 9, 25 + xor 10, 10, 26 + stw 0, 0(4) + stw 8, 4(4) + stw 9, 8(4) + stw 10, 12(4) + addi 3, 3, 16 + addi 4, 4, 16 + cmplw 3, 27 + blt L_AES_ECB_decrypt_block + lwz 0, 56(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + lwz 27, 52(1) + addi 1, 1, 60 + blr + .size AES_ECB_decrypt,.-AES_ECB_decrypt +#endif /* HAVE_AES_DECRYPT */ +#ifdef HAVE_AES_CBC + .section ".text" + .align 4 + .globl AES_CBC_encrypt + .type AES_CBC_encrypt, @function +AES_CBC_encrypt: + stwu 1, -56(1) + mflr 0 + stw 0, 52(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + lis 17, L_AES_PPC32_te@ha + la 17, L_AES_PPC32_te@l(17) + addi 18, 17, 0x400 + addi 19, 17, 0x800 + addi 20, 17, 0xc00 + lwz 0, 0(8) + lwz 9, 4(8) + lwz 10, 8(8) + lwz 11, 12(8) +L_AES_CBC_encrypt_block: + lwz 12, 0(3) + lwz 14, 4(3) + lwz 15, 8(3) + lwz 16, 12(3) + xor 0, 0, 12 + xor 9, 9, 14 + xor 10, 10, 15 + xor 11, 11, 16 + mr 21, 6 + addi 22, 7, -2 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 0, 0, 23 + xor 9, 9, 24 + xor 10, 10, 25 + xor 11, 11, 26 + addi 21, 21, 16 + srwi 22, 22, 1 + mtctr 22 +L_AES_CBC_encrypt_round: + rlwinm 23, 0, 10, 22, 29 + rlwinm 24, 9, 18, 22, 29 + rlwinm 25, 10, 26, 22, 29 + rlwinm 26, 11, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 12, 23, 25 + rlwinm 23, 9, 10, 22, 29 + rlwinm 24, 10, 18, 22, 29 + rlwinm 25, 11, 26, 22, 29 + rlwinm 26, 0, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 14, 23, 25 + rlwinm 23, 10, 10, 22, 29 + rlwinm 24, 11, 18, 22, 29 + rlwinm 25, 0, 26, 22, 29 + rlwinm 26, 9, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 15, 23, 25 + rlwinm 23, 11, 10, 22, 29 + rlwinm 24, 0, 18, 22, 29 + rlwinm 25, 9, 26, 22, 29 + rlwinm 26, 10, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 16, 23, 25 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 12, 12, 23 + xor 14, 14, 24 + xor 15, 15, 25 + xor 16, 16, 26 + addi 21, 21, 16 + rlwinm 23, 12, 10, 22, 29 + rlwinm 24, 14, 18, 22, 29 + rlwinm 25, 15, 26, 22, 29 + rlwinm 26, 16, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 0, 23, 25 + rlwinm 23, 14, 10, 22, 29 + rlwinm 24, 15, 18, 22, 29 + rlwinm 25, 16, 26, 22, 29 + rlwinm 26, 12, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 9, 23, 25 + rlwinm 23, 15, 10, 22, 29 + rlwinm 24, 16, 18, 22, 29 + rlwinm 25, 12, 26, 22, 29 + rlwinm 26, 14, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 10, 23, 25 + rlwinm 23, 16, 10, 22, 29 + rlwinm 24, 12, 18, 22, 29 + rlwinm 25, 14, 26, 22, 29 + rlwinm 26, 15, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 11, 23, 25 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 0, 0, 23 + xor 9, 9, 24 + xor 10, 10, 25 + xor 11, 11, 26 + addi 21, 21, 16 + bdnz L_AES_CBC_encrypt_round + rlwinm 23, 0, 10, 22, 29 + rlwinm 24, 9, 18, 22, 29 + rlwinm 25, 10, 26, 22, 29 + rlwinm 26, 11, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 12, 23, 25 + rlwinm 23, 9, 10, 22, 29 + rlwinm 24, 10, 18, 22, 29 + rlwinm 25, 11, 26, 22, 29 + rlwinm 26, 0, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 14, 23, 25 + rlwinm 23, 10, 10, 22, 29 + rlwinm 24, 11, 18, 22, 29 + rlwinm 25, 0, 26, 22, 29 + rlwinm 26, 9, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 15, 23, 25 + rlwinm 23, 11, 10, 22, 29 + rlwinm 24, 0, 18, 22, 29 + rlwinm 25, 9, 26, 22, 29 + rlwinm 26, 10, 2, 22, 29 + lwzx 23, 17, 23 + lwzx 24, 18, 24 + lwzx 25, 19, 25 + lwzx 26, 20, 26 + xor 23, 23, 24 + xor 25, 25, 26 + xor 16, 23, 25 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 12, 12, 23 + xor 14, 14, 24 + xor 15, 15, 25 + xor 16, 16, 26 + addi 21, 21, 16 + rlwinm 23, 12, 10, 22, 29 + rlwinm 24, 14, 18, 22, 29 + rlwinm 25, 15, 26, 22, 29 + rlwinm 26, 16, 2, 22, 29 + lwzx 23, 19, 23 + lwzx 24, 20, 24 + lwzx 25, 17, 25 + lwzx 26, 18, 26 + rlwinm 0, 23, 0, 0, 7 + rlwimi 0, 24, 0, 8, 15 + rlwimi 0, 25, 0, 16, 23 + rlwimi 0, 26, 0, 24, 31 + rlwinm 23, 14, 10, 22, 29 + rlwinm 24, 15, 18, 22, 29 + rlwinm 25, 16, 26, 22, 29 + rlwinm 26, 12, 2, 22, 29 + lwzx 23, 19, 23 + lwzx 24, 20, 24 + lwzx 25, 17, 25 + lwzx 26, 18, 26 + rlwinm 9, 23, 0, 0, 7 + rlwimi 9, 24, 0, 8, 15 + rlwimi 9, 25, 0, 16, 23 + rlwimi 9, 26, 0, 24, 31 + rlwinm 23, 15, 10, 22, 29 + rlwinm 24, 16, 18, 22, 29 + rlwinm 25, 12, 26, 22, 29 + rlwinm 26, 14, 2, 22, 29 + lwzx 23, 19, 23 + lwzx 24, 20, 24 + lwzx 25, 17, 25 + lwzx 26, 18, 26 + rlwinm 10, 23, 0, 0, 7 + rlwimi 10, 24, 0, 8, 15 + rlwimi 10, 25, 0, 16, 23 + rlwimi 10, 26, 0, 24, 31 + rlwinm 23, 16, 10, 22, 29 + rlwinm 24, 12, 18, 22, 29 + rlwinm 25, 14, 26, 22, 29 + rlwinm 26, 15, 2, 22, 29 + lwzx 23, 19, 23 + lwzx 24, 20, 24 + lwzx 25, 17, 25 + lwzx 26, 18, 26 + rlwinm 11, 23, 0, 0, 7 + rlwimi 11, 24, 0, 8, 15 + rlwimi 11, 25, 0, 16, 23 + rlwimi 11, 26, 0, 24, 31 + lwz 23, 0(21) + lwz 24, 4(21) + lwz 25, 8(21) + lwz 26, 12(21) + xor 0, 0, 23 + xor 9, 9, 24 + xor 10, 10, 25 + xor 11, 11, 26 + stw 0, 0(4) + stw 9, 4(4) + stw 10, 8(4) + stw 11, 12(4) + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_CBC_encrypt_block + stw 0, 0(8) + stw 9, 4(8) + stw 10, 8(8) + stw 11, 12(8) + lwz 0, 52(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + addi 1, 1, 56 + blr + .size AES_CBC_encrypt,.-AES_CBC_encrypt +#ifdef HAVE_AES_DECRYPT + .section ".text" + .align 4 + .globl AES_CBC_decrypt + .type AES_CBC_decrypt, @function +AES_CBC_decrypt: + stwu 1, -76(1) + mflr 0 + stw 0, 72(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + stw 27, 52(1) + stw 28, 56(1) + stw 29, 60(1) + stw 30, 64(1) + stw 31, 68(1) + lis 21, L_AES_PPC32_td@ha + la 21, L_AES_PPC32_td@l(21) + addi 22, 21, 0x400 + addi 23, 21, 0x800 + addi 24, 21, 0xc00 + lis 25, L_AES_PPC32_inv_sbox@ha + la 25, L_AES_PPC32_inv_sbox@l(25) + lwz 17, 0(8) + lwz 18, 4(8) + lwz 19, 8(8) + lwz 20, 12(8) +L_AES_CBC_decrypt_block: + lwz 0, 0(3) + lwz 9, 4(3) + lwz 10, 8(3) + lwz 11, 12(3) + mr 26, 6 + addi 27, 7, -2 + lwz 28, 0(26) + lwz 29, 4(26) + lwz 30, 8(26) + lwz 31, 12(26) + xor 0, 0, 28 + xor 9, 9, 29 + xor 10, 10, 30 + xor 11, 11, 31 + addi 26, 26, 16 + srwi 27, 27, 1 + mtctr 27 +L_AES_CBC_decrypt_round: + rlwinm 28, 0, 10, 22, 29 + rlwinm 29, 11, 18, 22, 29 + rlwinm 30, 10, 26, 22, 29 + rlwinm 31, 9, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 12, 28, 30 + rlwinm 28, 9, 10, 22, 29 + rlwinm 29, 0, 18, 22, 29 + rlwinm 30, 11, 26, 22, 29 + rlwinm 31, 10, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 14, 28, 30 + rlwinm 28, 10, 10, 22, 29 + rlwinm 29, 9, 18, 22, 29 + rlwinm 30, 0, 26, 22, 29 + rlwinm 31, 11, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 15, 28, 30 + rlwinm 28, 11, 10, 22, 29 + rlwinm 29, 10, 18, 22, 29 + rlwinm 30, 9, 26, 22, 29 + rlwinm 31, 0, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 16, 28, 30 + lwz 28, 0(26) + lwz 29, 4(26) + lwz 30, 8(26) + lwz 31, 12(26) + xor 12, 12, 28 + xor 14, 14, 29 + xor 15, 15, 30 + xor 16, 16, 31 + addi 26, 26, 16 + rlwinm 28, 12, 10, 22, 29 + rlwinm 29, 16, 18, 22, 29 + rlwinm 30, 15, 26, 22, 29 + rlwinm 31, 14, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 0, 28, 30 + rlwinm 28, 14, 10, 22, 29 + rlwinm 29, 12, 18, 22, 29 + rlwinm 30, 16, 26, 22, 29 + rlwinm 31, 15, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 9, 28, 30 + rlwinm 28, 15, 10, 22, 29 + rlwinm 29, 14, 18, 22, 29 + rlwinm 30, 12, 26, 22, 29 + rlwinm 31, 16, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 10, 28, 30 + rlwinm 28, 16, 10, 22, 29 + rlwinm 29, 15, 18, 22, 29 + rlwinm 30, 14, 26, 22, 29 + rlwinm 31, 12, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 11, 28, 30 + lwz 28, 0(26) + lwz 29, 4(26) + lwz 30, 8(26) + lwz 31, 12(26) + xor 0, 0, 28 + xor 9, 9, 29 + xor 10, 10, 30 + xor 11, 11, 31 + addi 26, 26, 16 + bdnz L_AES_CBC_decrypt_round + rlwinm 28, 0, 10, 22, 29 + rlwinm 29, 11, 18, 22, 29 + rlwinm 30, 10, 26, 22, 29 + rlwinm 31, 9, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 12, 28, 30 + rlwinm 28, 9, 10, 22, 29 + rlwinm 29, 0, 18, 22, 29 + rlwinm 30, 11, 26, 22, 29 + rlwinm 31, 10, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 14, 28, 30 + rlwinm 28, 10, 10, 22, 29 + rlwinm 29, 9, 18, 22, 29 + rlwinm 30, 0, 26, 22, 29 + rlwinm 31, 11, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 15, 28, 30 + rlwinm 28, 11, 10, 22, 29 + rlwinm 29, 10, 18, 22, 29 + rlwinm 30, 9, 26, 22, 29 + rlwinm 31, 0, 2, 22, 29 + lwzx 28, 21, 28 + lwzx 29, 22, 29 + lwzx 30, 23, 30 + lwzx 31, 24, 31 + xor 28, 28, 29 + xor 30, 30, 31 + xor 16, 28, 30 + lwz 28, 0(26) + lwz 29, 4(26) + lwz 30, 8(26) + lwz 31, 12(26) + xor 12, 12, 28 + xor 14, 14, 29 + xor 15, 15, 30 + xor 16, 16, 31 + addi 26, 26, 16 + rlwinm 28, 12, 8, 24, 31 + rlwinm 29, 16, 16, 24, 31 + rlwinm 30, 15, 24, 24, 31 + rlwinm 31, 14, 0, 24, 31 + lbzx 28, 25, 28 + lbzx 29, 25, 29 + lbzx 30, 25, 30 + lbzx 31, 25, 31 + slwi 0, 28, 24 + rlwimi 0, 29, 16, 8, 15 + rlwimi 0, 30, 8, 16, 23 + rlwimi 0, 31, 0, 24, 31 + rlwinm 28, 14, 8, 24, 31 + rlwinm 29, 12, 16, 24, 31 + rlwinm 30, 16, 24, 24, 31 + rlwinm 31, 15, 0, 24, 31 + lbzx 28, 25, 28 + lbzx 29, 25, 29 + lbzx 30, 25, 30 + lbzx 31, 25, 31 + slwi 9, 28, 24 + rlwimi 9, 29, 16, 8, 15 + rlwimi 9, 30, 8, 16, 23 + rlwimi 9, 31, 0, 24, 31 + rlwinm 28, 15, 8, 24, 31 + rlwinm 29, 14, 16, 24, 31 + rlwinm 30, 12, 24, 24, 31 + rlwinm 31, 16, 0, 24, 31 + lbzx 28, 25, 28 + lbzx 29, 25, 29 + lbzx 30, 25, 30 + lbzx 31, 25, 31 + slwi 10, 28, 24 + rlwimi 10, 29, 16, 8, 15 + rlwimi 10, 30, 8, 16, 23 + rlwimi 10, 31, 0, 24, 31 + rlwinm 28, 16, 8, 24, 31 + rlwinm 29, 15, 16, 24, 31 + rlwinm 30, 14, 24, 24, 31 + rlwinm 31, 12, 0, 24, 31 + lbzx 28, 25, 28 + lbzx 29, 25, 29 + lbzx 30, 25, 30 + lbzx 31, 25, 31 + slwi 11, 28, 24 + rlwimi 11, 29, 16, 8, 15 + rlwimi 11, 30, 8, 16, 23 + rlwimi 11, 31, 0, 24, 31 + lwz 28, 0(26) + lwz 29, 4(26) + lwz 30, 8(26) + lwz 31, 12(26) + xor 0, 0, 28 + xor 9, 9, 29 + xor 10, 10, 30 + xor 11, 11, 31 + xor 0, 0, 17 + xor 9, 9, 18 + xor 10, 10, 19 + xor 11, 11, 20 + lwz 17, 0(3) + lwz 18, 4(3) + lwz 19, 8(3) + lwz 20, 12(3) + stw 0, 0(4) + stw 9, 4(4) + stw 10, 8(4) + stw 11, 12(4) + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_CBC_decrypt_block + stw 17, 0(8) + stw 18, 4(8) + stw 19, 8(8) + stw 20, 12(8) + lwz 0, 72(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + lwz 27, 52(1) + lwz 28, 56(1) + lwz 29, 60(1) + lwz 30, 64(1) + lwz 31, 68(1) + addi 1, 1, 0x4c + blr + .size AES_CBC_decrypt,.-AES_CBC_decrypt +#endif /* HAVE_AES_DECRYPT */ +#endif /* HAVE_AES_CBC */ +#ifdef WOLFSSL_AES_COUNTER + .section ".text" + .align 4 + .globl AES_CTR_encrypt + .type AES_CTR_encrypt, @function +AES_CTR_encrypt: + stwu 1, -72(1) + mflr 0 + stw 0, 68(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + stw 27, 52(1) + stw 28, 56(1) + stw 29, 60(1) + stw 30, 64(1) + lis 21, L_AES_PPC32_te@ha + la 21, L_AES_PPC32_te@l(21) + addi 22, 21, 0x400 + addi 23, 21, 0x800 + addi 24, 21, 0xc00 + lwz 17, 0(8) + lwz 18, 4(8) + lwz 19, 8(8) + lwz 20, 12(8) +L_AES_CTR_encrypt_block: + mr 0, 17 + mr 9, 18 + mr 10, 19 + mr 11, 20 + mr 25, 6 + addi 26, 7, -2 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 0, 0, 27 + xor 9, 9, 28 + xor 10, 10, 29 + xor 11, 11, 30 + addi 25, 25, 16 + srwi 26, 26, 1 + mtctr 26 +L_AES_CTR_encrypt_round: + rlwinm 27, 0, 10, 22, 29 + rlwinm 28, 9, 18, 22, 29 + rlwinm 29, 10, 26, 22, 29 + rlwinm 30, 11, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 12, 27, 29 + rlwinm 27, 9, 10, 22, 29 + rlwinm 28, 10, 18, 22, 29 + rlwinm 29, 11, 26, 22, 29 + rlwinm 30, 0, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 14, 27, 29 + rlwinm 27, 10, 10, 22, 29 + rlwinm 28, 11, 18, 22, 29 + rlwinm 29, 0, 26, 22, 29 + rlwinm 30, 9, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 15, 27, 29 + rlwinm 27, 11, 10, 22, 29 + rlwinm 28, 0, 18, 22, 29 + rlwinm 29, 9, 26, 22, 29 + rlwinm 30, 10, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 16, 27, 29 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 12, 12, 27 + xor 14, 14, 28 + xor 15, 15, 29 + xor 16, 16, 30 + addi 25, 25, 16 + rlwinm 27, 12, 10, 22, 29 + rlwinm 28, 14, 18, 22, 29 + rlwinm 29, 15, 26, 22, 29 + rlwinm 30, 16, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 0, 27, 29 + rlwinm 27, 14, 10, 22, 29 + rlwinm 28, 15, 18, 22, 29 + rlwinm 29, 16, 26, 22, 29 + rlwinm 30, 12, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 9, 27, 29 + rlwinm 27, 15, 10, 22, 29 + rlwinm 28, 16, 18, 22, 29 + rlwinm 29, 12, 26, 22, 29 + rlwinm 30, 14, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 10, 27, 29 + rlwinm 27, 16, 10, 22, 29 + rlwinm 28, 12, 18, 22, 29 + rlwinm 29, 14, 26, 22, 29 + rlwinm 30, 15, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 11, 27, 29 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 0, 0, 27 + xor 9, 9, 28 + xor 10, 10, 29 + xor 11, 11, 30 + addi 25, 25, 16 + bdnz L_AES_CTR_encrypt_round + rlwinm 27, 0, 10, 22, 29 + rlwinm 28, 9, 18, 22, 29 + rlwinm 29, 10, 26, 22, 29 + rlwinm 30, 11, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 12, 27, 29 + rlwinm 27, 9, 10, 22, 29 + rlwinm 28, 10, 18, 22, 29 + rlwinm 29, 11, 26, 22, 29 + rlwinm 30, 0, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 14, 27, 29 + rlwinm 27, 10, 10, 22, 29 + rlwinm 28, 11, 18, 22, 29 + rlwinm 29, 0, 26, 22, 29 + rlwinm 30, 9, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 15, 27, 29 + rlwinm 27, 11, 10, 22, 29 + rlwinm 28, 0, 18, 22, 29 + rlwinm 29, 9, 26, 22, 29 + rlwinm 30, 10, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 16, 27, 29 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 12, 12, 27 + xor 14, 14, 28 + xor 15, 15, 29 + xor 16, 16, 30 + addi 25, 25, 16 + rlwinm 27, 12, 10, 22, 29 + rlwinm 28, 14, 18, 22, 29 + rlwinm 29, 15, 26, 22, 29 + rlwinm 30, 16, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 0, 27, 0, 0, 7 + rlwimi 0, 28, 0, 8, 15 + rlwimi 0, 29, 0, 16, 23 + rlwimi 0, 30, 0, 24, 31 + rlwinm 27, 14, 10, 22, 29 + rlwinm 28, 15, 18, 22, 29 + rlwinm 29, 16, 26, 22, 29 + rlwinm 30, 12, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 9, 27, 0, 0, 7 + rlwimi 9, 28, 0, 8, 15 + rlwimi 9, 29, 0, 16, 23 + rlwimi 9, 30, 0, 24, 31 + rlwinm 27, 15, 10, 22, 29 + rlwinm 28, 16, 18, 22, 29 + rlwinm 29, 12, 26, 22, 29 + rlwinm 30, 14, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 10, 27, 0, 0, 7 + rlwimi 10, 28, 0, 8, 15 + rlwimi 10, 29, 0, 16, 23 + rlwimi 10, 30, 0, 24, 31 + rlwinm 27, 16, 10, 22, 29 + rlwinm 28, 12, 18, 22, 29 + rlwinm 29, 14, 26, 22, 29 + rlwinm 30, 15, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 11, 27, 0, 0, 7 + rlwimi 11, 28, 0, 8, 15 + rlwimi 11, 29, 0, 16, 23 + rlwimi 11, 30, 0, 24, 31 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 0, 0, 27 + xor 9, 9, 28 + xor 10, 10, 29 + xor 11, 11, 30 + lwz 12, 0(3) + lwz 14, 4(3) + lwz 15, 8(3) + lwz 16, 12(3) + xor 0, 0, 12 + xor 9, 9, 14 + xor 10, 10, 15 + xor 11, 11, 16 + stw 0, 0(4) + stw 9, 4(4) + stw 10, 8(4) + stw 11, 12(4) + addic 20, 20, 1 + addze 19, 19 + addze 18, 18 + addze 17, 17 + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_CTR_encrypt_block + stw 17, 0(8) + stw 18, 4(8) + stw 19, 8(8) + stw 20, 12(8) + lwz 0, 68(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + lwz 27, 52(1) + lwz 28, 56(1) + lwz 29, 60(1) + lwz 30, 64(1) + addi 1, 1, 0x48 + blr + .size AES_CTR_encrypt,.-AES_CTR_encrypt +#endif /* WOLFSSL_AES_COUNTER */ +#ifdef HAVE_AESGCM + .section ".text" + .align 4 + .globl AES_GCM_encrypt + .type AES_GCM_encrypt, @function +AES_GCM_encrypt: + stwu 1, -72(1) + mflr 0 + stw 0, 68(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + stw 27, 52(1) + stw 28, 56(1) + stw 29, 60(1) + stw 30, 64(1) + lis 21, L_AES_PPC32_te@ha + la 21, L_AES_PPC32_te@l(21) + addi 22, 21, 0x400 + addi 23, 21, 0x800 + addi 24, 21, 0xc00 + lwz 17, 0(8) + lwz 18, 4(8) + lwz 19, 8(8) + lwz 20, 12(8) +L_AES_GCM_encrypt_block: + addi 20, 20, 1 + mr 0, 17 + mr 9, 18 + mr 10, 19 + mr 11, 20 + mr 25, 6 + addi 26, 7, -2 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 0, 0, 27 + xor 9, 9, 28 + xor 10, 10, 29 + xor 11, 11, 30 + addi 25, 25, 16 + srwi 26, 26, 1 + mtctr 26 +L_AES_GCM_encrypt_round: + rlwinm 27, 0, 10, 22, 29 + rlwinm 28, 9, 18, 22, 29 + rlwinm 29, 10, 26, 22, 29 + rlwinm 30, 11, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 12, 27, 29 + rlwinm 27, 9, 10, 22, 29 + rlwinm 28, 10, 18, 22, 29 + rlwinm 29, 11, 26, 22, 29 + rlwinm 30, 0, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 14, 27, 29 + rlwinm 27, 10, 10, 22, 29 + rlwinm 28, 11, 18, 22, 29 + rlwinm 29, 0, 26, 22, 29 + rlwinm 30, 9, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 15, 27, 29 + rlwinm 27, 11, 10, 22, 29 + rlwinm 28, 0, 18, 22, 29 + rlwinm 29, 9, 26, 22, 29 + rlwinm 30, 10, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 16, 27, 29 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 12, 12, 27 + xor 14, 14, 28 + xor 15, 15, 29 + xor 16, 16, 30 + addi 25, 25, 16 + rlwinm 27, 12, 10, 22, 29 + rlwinm 28, 14, 18, 22, 29 + rlwinm 29, 15, 26, 22, 29 + rlwinm 30, 16, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 0, 27, 29 + rlwinm 27, 14, 10, 22, 29 + rlwinm 28, 15, 18, 22, 29 + rlwinm 29, 16, 26, 22, 29 + rlwinm 30, 12, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 9, 27, 29 + rlwinm 27, 15, 10, 22, 29 + rlwinm 28, 16, 18, 22, 29 + rlwinm 29, 12, 26, 22, 29 + rlwinm 30, 14, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 10, 27, 29 + rlwinm 27, 16, 10, 22, 29 + rlwinm 28, 12, 18, 22, 29 + rlwinm 29, 14, 26, 22, 29 + rlwinm 30, 15, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 11, 27, 29 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 0, 0, 27 + xor 9, 9, 28 + xor 10, 10, 29 + xor 11, 11, 30 + addi 25, 25, 16 + bdnz L_AES_GCM_encrypt_round + rlwinm 27, 0, 10, 22, 29 + rlwinm 28, 9, 18, 22, 29 + rlwinm 29, 10, 26, 22, 29 + rlwinm 30, 11, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 12, 27, 29 + rlwinm 27, 9, 10, 22, 29 + rlwinm 28, 10, 18, 22, 29 + rlwinm 29, 11, 26, 22, 29 + rlwinm 30, 0, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 14, 27, 29 + rlwinm 27, 10, 10, 22, 29 + rlwinm 28, 11, 18, 22, 29 + rlwinm 29, 0, 26, 22, 29 + rlwinm 30, 9, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 15, 27, 29 + rlwinm 27, 11, 10, 22, 29 + rlwinm 28, 0, 18, 22, 29 + rlwinm 29, 9, 26, 22, 29 + rlwinm 30, 10, 2, 22, 29 + lwzx 27, 21, 27 + lwzx 28, 22, 28 + lwzx 29, 23, 29 + lwzx 30, 24, 30 + xor 27, 27, 28 + xor 29, 29, 30 + xor 16, 27, 29 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 12, 12, 27 + xor 14, 14, 28 + xor 15, 15, 29 + xor 16, 16, 30 + addi 25, 25, 16 + rlwinm 27, 12, 10, 22, 29 + rlwinm 28, 14, 18, 22, 29 + rlwinm 29, 15, 26, 22, 29 + rlwinm 30, 16, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 0, 27, 0, 0, 7 + rlwimi 0, 28, 0, 8, 15 + rlwimi 0, 29, 0, 16, 23 + rlwimi 0, 30, 0, 24, 31 + rlwinm 27, 14, 10, 22, 29 + rlwinm 28, 15, 18, 22, 29 + rlwinm 29, 16, 26, 22, 29 + rlwinm 30, 12, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 9, 27, 0, 0, 7 + rlwimi 9, 28, 0, 8, 15 + rlwimi 9, 29, 0, 16, 23 + rlwimi 9, 30, 0, 24, 31 + rlwinm 27, 15, 10, 22, 29 + rlwinm 28, 16, 18, 22, 29 + rlwinm 29, 12, 26, 22, 29 + rlwinm 30, 14, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 10, 27, 0, 0, 7 + rlwimi 10, 28, 0, 8, 15 + rlwimi 10, 29, 0, 16, 23 + rlwimi 10, 30, 0, 24, 31 + rlwinm 27, 16, 10, 22, 29 + rlwinm 28, 12, 18, 22, 29 + rlwinm 29, 14, 26, 22, 29 + rlwinm 30, 15, 2, 22, 29 + lwzx 27, 23, 27 + lwzx 28, 24, 28 + lwzx 29, 21, 29 + lwzx 30, 22, 30 + rlwinm 11, 27, 0, 0, 7 + rlwimi 11, 28, 0, 8, 15 + rlwimi 11, 29, 0, 16, 23 + rlwimi 11, 30, 0, 24, 31 + lwz 27, 0(25) + lwz 28, 4(25) + lwz 29, 8(25) + lwz 30, 12(25) + xor 0, 0, 27 + xor 9, 9, 28 + xor 10, 10, 29 + xor 11, 11, 30 + lwz 12, 0(3) + lwz 14, 4(3) + lwz 15, 8(3) + lwz 16, 12(3) + xor 0, 0, 12 + xor 9, 9, 14 + xor 10, 10, 15 + xor 11, 11, 16 + stw 0, 0(4) + stw 9, 4(4) + stw 10, 8(4) + stw 11, 12(4) + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_GCM_encrypt_block + stw 17, 0(8) + stw 18, 4(8) + stw 19, 8(8) + stw 20, 12(8) + lwz 0, 68(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + lwz 27, 52(1) + lwz 28, 56(1) + lwz 29, 60(1) + lwz 30, 64(1) + addi 1, 1, 0x48 + blr + .size AES_GCM_encrypt,.-AES_GCM_encrypt +#endif /* HAVE_AESGCM */ +#ifdef GCM_TABLE_4BIT +#ifndef __APPLE__ + .text + .type L_GCM_gmult_len_r, %object + .size L_GCM_gmult_len_r, 128 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_GCM_gmult_len_r: + .long 0x00000000,0x1c200000,0x38400000,0x24600000 + .long 0x70800000,0x6ca00000,0x48c00000,0x54e00000 + .long 0xe1000000,0xfd200000,0xd9400000,0xc5600000 + .long 0x91800000,0x8da00000,0xa9c00000,0xb5e00000 + .long 0x00000000,0x01c20000,0x03840000,0x02460000 + .long 0x07080000,0x06ca0000,0x048c0000,0x054e0000 + .long 0x0e100000,0x0fd20000,0x0d940000,0x0c560000 + .long 0x09180000,0x08da0000,0x0a9c0000,0x0b5e0000 + .section ".text" + .align 4 + .globl GCM_gmult_len + .type GCM_gmult_len, @function +GCM_gmult_len: + stwu 1, -52(1) + mflr 0 + stw 0, 48(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + lis 10, L_GCM_gmult_len_r@ha + la 10, L_GCM_gmult_len_r@l(10) + addi 11, 10, 0x40 + srwi 6, 6, 4 + mtctr 6 + # Process a 16-byte block +L_GCM_gmult_len_block: + lwz 0, 0(3) + lwz 7, 4(3) + lwz 8, 8(3) + lwz 9, 12(3) + lwz 18, 0(5) + lwz 19, 4(5) + lwz 20, 8(5) + lwz 21, 12(5) + xor 0, 0, 18 + xor 7, 7, 19 + xor 8, 8, 20 + xor 9, 9, 21 + # Byte 15 + rlwinm 25, 9, 0, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 14, 0(12) + lwz 15, 4(12) + lwz 16, 8(12) + lwz 17, 12(12) + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 14 + rlwinm 25, 9, 24, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 13 + rlwinm 25, 9, 16, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 12 + rlwinm 25, 9, 8, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 11 + rlwinm 25, 8, 0, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 10 + rlwinm 25, 8, 24, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 9 + rlwinm 25, 8, 16, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 8 + rlwinm 25, 8, 8, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 7 + rlwinm 25, 7, 0, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 6 + rlwinm 25, 7, 24, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 5 + rlwinm 25, 7, 16, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 4 + rlwinm 25, 7, 8, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 3 + rlwinm 25, 0, 0, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 2 + rlwinm 25, 0, 24, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 1 + rlwinm 25, 0, 16, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 24, 31 + srwi 17, 17, 8 + rlwimi 17, 16, 24, 0, 7 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 11, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 21, 12(12) + rlwinm 24, 21, 20, 28, 31 + xor 22, 22, 24 + rlwinm 24, 21, 4, 24, 27 + xor 22, 22, 24 + rlwinm 23, 22, 30, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + addi 12, 12, 0x100 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + # Byte 0 + rlwinm 25, 0, 8, 24, 31 + rlwinm 23, 25, 4, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + rlwinm 22, 17, 0, 28, 31 + srwi 17, 17, 4 + rlwimi 17, 16, 28, 0, 3 + srwi 16, 16, 4 + rlwimi 16, 15, 28, 0, 3 + srwi 15, 15, 4 + rlwimi 15, 14, 28, 0, 3 + srwi 14, 14, 4 + rlwinm 23, 22, 2, 26, 29 + lwzx 24, 10, 23 + xor 14, 14, 24 + rlwinm 23, 25, 0, 24, 27 + add 12, 4, 23 + lwz 18, 0(12) + lwz 19, 4(12) + lwz 20, 8(12) + lwz 21, 12(12) + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + xor 17, 17, 21 + stw 14, 0(3) + stw 15, 4(3) + stw 16, 8(3) + stw 17, 12(3) + addi 5, 5, 16 + bdnz L_GCM_gmult_len_block + lwz 0, 48(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + addi 1, 1, 52 + blr + .size GCM_gmult_len,.-GCM_gmult_len +#endif /* GCM_TABLE_4BIT */ +#ifdef GCM_TABLE +#ifndef __APPLE__ + .text + .type L_GCM_gmult_len_r, %object + .size L_GCM_gmult_len_r, 512 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 4-byte aligned, 32-bit aligned +#ifndef __APPLE__ + .align 2 +#else + .p2align 2 +#endif /* __APPLE__ */ +L_GCM_gmult_len_r: + .byte 0x00,0x00,0x01,0xc2,0x03,0x84,0x02,0x46 + .byte 0x07,0x08,0x06,0xca,0x04,0x8c,0x05,0x4e + .byte 0x0e,0x10,0x0f,0xd2,0x0d,0x94,0x0c,0x56 + .byte 0x09,0x18,0x08,0xda,0x0a,0x9c,0x0b,0x5e + .byte 0x1c,0x20,0x1d,0xe2,0x1f,0xa4,0x1e,0x66 + .byte 0x1b,0x28,0x1a,0xea,0x18,0xac,0x19,0x6e + .byte 0x12,0x30,0x13,0xf2,0x11,0xb4,0x10,0x76 + .byte 0x15,0x38,0x14,0xfa,0x16,0xbc,0x17,0x7e + .byte 0x38,0x40,0x39,0x82,0x3b,0xc4,0x3a,0x06 + .byte 0x3f,0x48,0x3e,0x8a,0x3c,0xcc,0x3d,0x0e + .byte 0x36,0x50,0x37,0x92,0x35,0xd4,0x34,0x16 + .byte 0x31,0x58,0x30,0x9a,0x32,0xdc,0x33,0x1e + .byte 0x24,0x60,0x25,0xa2,0x27,0xe4,0x26,0x26 + .byte 0x23,0x68,0x22,0xaa,0x20,0xec,0x21,0x2e + .byte 0x2a,0x70,0x2b,0xb2,0x29,0xf4,0x28,0x36 + .byte 0x2d,0x78,0x2c,0xba,0x2e,0xfc,0x2f,0x3e + .byte 0x70,0x80,0x71,0x42,0x73,0x04,0x72,0xc6 + .byte 0x77,0x88,0x76,0x4a,0x74,0x0c,0x75,0xce + .byte 0x7e,0x90,0x7f,0x52,0x7d,0x14,0x7c,0xd6 + .byte 0x79,0x98,0x78,0x5a,0x7a,0x1c,0x7b,0xde + .byte 0x6c,0xa0,0x6d,0x62,0x6f,0x24,0x6e,0xe6 + .byte 0x6b,0xa8,0x6a,0x6a,0x68,0x2c,0x69,0xee + .byte 0x62,0xb0,0x63,0x72,0x61,0x34,0x60,0xf6 + .byte 0x65,0xb8,0x64,0x7a,0x66,0x3c,0x67,0xfe + .byte 0x48,0xc0,0x49,0x02,0x4b,0x44,0x4a,0x86 + .byte 0x4f,0xc8,0x4e,0x0a,0x4c,0x4c,0x4d,0x8e + .byte 0x46,0xd0,0x47,0x12,0x45,0x54,0x44,0x96 + .byte 0x41,0xd8,0x40,0x1a,0x42,0x5c,0x43,0x9e + .byte 0x54,0xe0,0x55,0x22,0x57,0x64,0x56,0xa6 + .byte 0x53,0xe8,0x52,0x2a,0x50,0x6c,0x51,0xae + .byte 0x5a,0xf0,0x5b,0x32,0x59,0x74,0x58,0xb6 + .byte 0x5d,0xf8,0x5c,0x3a,0x5e,0x7c,0x5f,0xbe + .byte 0xe1,0x00,0xe0,0xc2,0xe2,0x84,0xe3,0x46 + .byte 0xe6,0x08,0xe7,0xca,0xe5,0x8c,0xe4,0x4e + .byte 0xef,0x10,0xee,0xd2,0xec,0x94,0xed,0x56 + .byte 0xe8,0x18,0xe9,0xda,0xeb,0x9c,0xea,0x5e + .byte 0xfd,0x20,0xfc,0xe2,0xfe,0xa4,0xff,0x66 + .byte 0xfa,0x28,0xfb,0xea,0xf9,0xac,0xf8,0x6e + .byte 0xf3,0x30,0xf2,0xf2,0xf0,0xb4,0xf1,0x76 + .byte 0xf4,0x38,0xf5,0xfa,0xf7,0xbc,0xf6,0x7e + .byte 0xd9,0x40,0xd8,0x82,0xda,0xc4,0xdb,0x06 + .byte 0xde,0x48,0xdf,0x8a,0xdd,0xcc,0xdc,0x0e + .byte 0xd7,0x50,0xd6,0x92,0xd4,0xd4,0xd5,0x16 + .byte 0xd0,0x58,0xd1,0x9a,0xd3,0xdc,0xd2,0x1e + .byte 0xc5,0x60,0xc4,0xa2,0xc6,0xe4,0xc7,0x26 + .byte 0xc2,0x68,0xc3,0xaa,0xc1,0xec,0xc0,0x2e + .byte 0xcb,0x70,0xca,0xb2,0xc8,0xf4,0xc9,0x36 + .byte 0xcc,0x78,0xcd,0xba,0xcf,0xfc,0xce,0x3e + .byte 0x91,0x80,0x90,0x42,0x92,0x04,0x93,0xc6 + .byte 0x96,0x88,0x97,0x4a,0x95,0x0c,0x94,0xce + .byte 0x9f,0x90,0x9e,0x52,0x9c,0x14,0x9d,0xd6 + .byte 0x98,0x98,0x99,0x5a,0x9b,0x1c,0x9a,0xde + .byte 0x8d,0xa0,0x8c,0x62,0x8e,0x24,0x8f,0xe6 + .byte 0x8a,0xa8,0x8b,0x6a,0x89,0x2c,0x88,0xee + .byte 0x83,0xb0,0x82,0x72,0x80,0x34,0x81,0xf6 + .byte 0x84,0xb8,0x85,0x7a,0x87,0x3c,0x86,0xfe + .byte 0xa9,0xc0,0xa8,0x02,0xaa,0x44,0xab,0x86 + .byte 0xae,0xc8,0xaf,0x0a,0xad,0x4c,0xac,0x8e + .byte 0xa7,0xd0,0xa6,0x12,0xa4,0x54,0xa5,0x96 + .byte 0xa0,0xd8,0xa1,0x1a,0xa3,0x5c,0xa2,0x9e + .byte 0xb5,0xe0,0xb4,0x22,0xb6,0x64,0xb7,0xa6 + .byte 0xb2,0xe8,0xb3,0x2a,0xb1,0x6c,0xb0,0xae + .byte 0xbb,0xf0,0xba,0x32,0xb8,0x74,0xb9,0xb6 + .byte 0xbc,0xf8,0xbd,0x3a,0xbf,0x7c,0xbe,0xbe + .section ".text" + .align 4 + .globl GCM_gmult_len + .type GCM_gmult_len, @function +GCM_gmult_len: + stwu 1, -40(1) + mflr 0 + stw 0, 36(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + lis 10, L_GCM_gmult_len_r@ha + la 10, L_GCM_gmult_len_r@l(10) + srwi 6, 6, 4 + mtctr 6 + # Process a 16-byte block +L_GCM_gmult_len_block: + lwz 0, 0(3) + lwz 7, 4(3) + lwz 8, 8(3) + lwz 9, 12(3) + lwz 17, 0(5) + lwz 18, 4(5) + lwz 19, 8(5) + lwz 20, 12(5) + xor 0, 0, 17 + xor 7, 7, 18 + xor 8, 8, 19 + xor 9, 9, 20 + # Byte 15 + rlwinm 21, 9, 4, 20, 27 + add 11, 4, 21 + lwz 12, 0(11) + lwz 14, 4(11) + lwz 15, 8(11) + lwz 16, 12(11) + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 14 + rlwinm 21, 9, 28, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 13 + rlwinm 21, 9, 20, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 12 + rlwinm 21, 9, 12, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 11 + rlwinm 21, 8, 4, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 10 + rlwinm 21, 8, 28, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 9 + rlwinm 21, 8, 20, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 8 + rlwinm 21, 8, 12, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 7 + rlwinm 21, 7, 4, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 6 + rlwinm 21, 7, 28, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 5 + rlwinm 21, 7, 20, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 4 + rlwinm 21, 7, 12, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 3 + rlwinm 21, 0, 4, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 2 + rlwinm 21, 0, 28, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 1 + rlwinm 21, 0, 20, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + rlwinm 21, 16, 1, 23, 30 + srwi 16, 16, 8 + rlwimi 16, 15, 24, 0, 7 + srwi 15, 15, 8 + rlwimi 15, 14, 24, 0, 7 + srwi 14, 14, 8 + rlwimi 14, 12, 24, 0, 7 + srwi 12, 12, 8 + lhzx 22, 21, 10 + slwi 22, 22, 16 + xor 12, 12, 22 + # Byte 0 + rlwinm 21, 0, 12, 20, 27 + add 11, 4, 21 + lwz 17, 0(11) + lwz 18, 4(11) + lwz 19, 8(11) + lwz 20, 12(11) + xor 12, 12, 17 + xor 14, 14, 18 + xor 15, 15, 19 + xor 16, 16, 20 + stw 12, 0(3) + stw 14, 4(3) + stw 15, 8(3) + stw 16, 12(3) + addi 5, 5, 16 + bdnz L_GCM_gmult_len_block + lwz 0, 36(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + addi 1, 1, 40 + blr + .size GCM_gmult_len,.-GCM_gmult_len +#endif /* GCM_TABLE */ +#endif /* !defined(NO_AES) && defined(WOLFSSL_PPC32_ASM) */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-aes-asm_c.c b/wolfcrypt/src/port/ppc32/ppc32-aes-asm_c.c new file mode 100644 index 00000000000..5916c1143e7 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-aes-asm_c.c @@ -0,0 +1,4099 @@ +/* ppc32-aes-asm + * + * Copyright (C) 2006-2026 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 ./aes/aes.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-aes-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#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__ */ + +#include + +#if !defined(NO_AES) && defined(WOLFSSL_PPC32_ASM) +XALIGNED(8) static const word32 L_AES_PPC32_te[] = { + 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, + 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, + 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, + 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, + 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, + 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, + 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, + 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, + 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, + 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, + 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, + 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, + 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, + 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, + 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, + 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, + 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, + 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, + 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, + 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, + 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, + 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, + 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, + 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, + 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, + 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, + 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, + 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, + 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, + 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, + 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, + 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, + 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, + 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, + 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, + 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, + 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, + 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, + 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, + 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, + 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, + 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, + 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, + 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, + 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, + 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, + 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, + 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, + 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, + 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, + 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, + 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, + 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, + 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, + 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, + 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, + 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, + 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, + 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, + 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, + 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, + 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, + 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, + 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a, + 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, + 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, + 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, + 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, + 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, + 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, + 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, + 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, + 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, + 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, + 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, + 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, + 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, + 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, + 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, + 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, + 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, + 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, + 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, + 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, + 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, + 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, + 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, + 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, + 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, + 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, + 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, + 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, + 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, + 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, + 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, + 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, + 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, + 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, + 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, + 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, + 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, + 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, + 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, + 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, + 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, + 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, + 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, + 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, + 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, + 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, + 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, + 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, + 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, + 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, + 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, + 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, + 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, + 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, + 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, + 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, + 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, + 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, + 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, + 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, + 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, + 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, + 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, + 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616, + 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, + 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, + 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, + 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, + 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, + 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, + 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, + 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, + 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, + 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, + 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, + 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, + 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, + 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, + 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, + 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, + 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, + 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, + 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, + 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, + 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, + 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, + 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, + 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, + 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, + 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, + 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, + 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, + 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, + 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, + 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, + 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, + 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, + 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, + 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, + 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, + 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, + 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, + 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, + 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, + 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, + 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, + 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, + 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, + 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, + 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, + 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, + 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, + 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, + 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, + 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, + 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, + 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, + 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, + 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, + 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, + 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, + 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, + 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, + 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, + 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, + 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, + 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, + 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16, + 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, + 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, + 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, + 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, + 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, + 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, + 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, + 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, + 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, + 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, + 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, + 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, + 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, + 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, + 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, + 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, + 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, + 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, + 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, + 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, + 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, + 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, + 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, + 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, + 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, + 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, + 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, + 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, + 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, + 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, + 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, + 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, + 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, + 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, + 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, + 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, + 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, + 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, + 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, + 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, + 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, + 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, + 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, + 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, + 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, + 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, + 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, + 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, + 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, + 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, + 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, + 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, + 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, + 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, + 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, + 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, + 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, + 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, + 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, + 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, + 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, + 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, + 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, + 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c, +}; + +XALIGNED(8) static const word32 L_AES_PPC32_td[] = { + 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, + 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, + 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, + 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, + 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, + 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, + 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, + 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, + 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, + 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, + 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, + 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, + 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, + 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, + 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, + 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, + 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, + 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, + 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, + 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, + 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, + 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, + 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, + 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, + 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, + 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, + 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, + 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, + 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, + 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, + 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, + 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, + 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, + 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, + 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, + 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, + 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, + 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, + 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, + 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, + 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, + 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, + 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, + 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, + 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, + 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, + 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, + 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, + 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, + 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, + 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, + 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, + 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, + 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, + 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, + 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, + 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, + 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, + 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, + 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, + 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, + 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, + 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, + 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742, + 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, + 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, + 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, + 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, + 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, + 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, + 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, + 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, + 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, + 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, + 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, + 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, + 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, + 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, + 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, + 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, + 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, + 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, + 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, + 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, + 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, + 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, + 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, + 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, + 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, + 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, + 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, + 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, + 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, + 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, + 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, + 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, + 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, + 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, + 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, + 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, + 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, + 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, + 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, + 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, + 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, + 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, + 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, + 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, + 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, + 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, + 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, + 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, + 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, + 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, + 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, + 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, + 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, + 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, + 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, + 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, + 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, + 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, + 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, + 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, + 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, + 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, + 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, + 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857, + 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, + 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, + 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, + 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, + 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, + 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, + 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, + 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, + 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, + 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, + 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, + 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, + 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, + 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, + 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, + 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, + 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, + 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, + 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, + 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, + 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, + 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, + 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, + 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, + 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, + 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, + 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, + 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, + 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, + 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, + 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, + 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, + 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, + 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, + 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, + 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, + 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, + 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, + 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, + 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, + 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, + 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, + 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, + 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, + 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, + 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, + 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, + 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, + 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, + 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, + 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, + 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, + 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, + 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, + 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, + 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, + 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, + 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, + 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, + 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, + 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, + 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, + 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, + 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8, + 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, + 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, + 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, + 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, + 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, + 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, + 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, + 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, + 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, + 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, + 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, + 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, + 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, + 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, + 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, + 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, + 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, + 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, + 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, + 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, + 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, + 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, + 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, + 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, + 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, + 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, + 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, + 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, + 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, + 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, + 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, + 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, + 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, + 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, + 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, + 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, + 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, + 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, + 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, + 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, + 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, + 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, + 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, + 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, + 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, + 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, + 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, + 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, + 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, + 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, + 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, + 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, + 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, + 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, + 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, + 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, + 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, + 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, + 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, + 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, + 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, + 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, + 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, + 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0, +}; + +XALIGNED(4) static const word8 L_AES_PPC32_sbox[] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, +}; + +XALIGNED(4) static const word8 L_AES_PPC32_inv_sbox[] = { + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, + 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, + 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, + 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, + 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, + 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, + 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, + 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, + 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, + 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, + 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, + 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, +}; + +XALIGNED(8) static const word32 L_AES_PPC32_rcon[] = { + 0x01000000, 0x02000000, 0x04000000, 0x08000000, + 0x10000000, 0x20000000, 0x40000000, 0x80000000, + 0x1b000000, 0x36000000 +}; + +void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p, + unsigned char* ks_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key_p, + word32 len_p, unsigned char* ks_p) +#else +WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key, + word32 len, unsigned char* ks) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* key __asm__ ("3") = + (const unsigned char*)key_p; + register word32 len __asm__ ("4") = (word32)len_p; + register unsigned char* ks __asm__ ("5") = (unsigned char*)ks_p; + register word8* L_AES_PPC32_sbox_c __asm__ ("6") = + (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_rcon_c __asm__ ("7") = + (word32*)&L_AES_PPC32_rcon; +#else + register word8* L_AES_PPC32_sbox_c = (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_rcon_c = (word32*)&L_AES_PPC32_rcon; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 14, %[L_AES_PPC32_sbox]\n\t" + "mr 15, %[L_AES_PPC32_rcon]\n\t" + "cmplwi %[len], 0x80\n\t" + "beq L_AES_set_encrypt_key_128_%=\n\t" + "cmplwi %[len], 0xc0\n\t" + "beq L_AES_set_encrypt_key_192_%=\n\t" + "lwz 0, 0(%[key])\n\t" + "lwz 6, 4(%[key])\n\t" + "lwz 7, 8(%[key])\n\t" + "lwz 8, 12(%[key])\n\t" + "lwz 9, 16(%[key])\n\t" + "lwz 10, 20(%[key])\n\t" + "lwz 11, 24(%[key])\n\t" + "lwz 12, 28(%[key])\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "stw 11, 24(%[ks])\n\t" + "stw 12, 28(%[ks])\n\t" + "addi %[ks], %[ks], 32\n\t" + "li 17, 6\n\t" + "mtctr 17\n\t" + "\n" + "L_AES_set_encrypt_key_loop_256_%=:\n\t" + "rlwinm 17, 12, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 12, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 12, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 12, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "rlwinm 17, 8, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 8, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 8, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 8, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "xor 9, 9, 16\n\t" + "xor 10, 10, 9\n\t" + "xor 11, 11, 10\n\t" + "xor 12, 12, 11\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "stw 11, 24(%[ks])\n\t" + "stw 12, 28(%[ks])\n\t" + "addi %[ks], %[ks], 32\n\t" + "bdnz L_AES_set_encrypt_key_loop_256_%=\n\t" + "rlwinm 17, 12, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 12, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 12, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 12, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "b L_AES_set_encrypt_key_end_%=\n\t" + "\n" + "L_AES_set_encrypt_key_192_%=:\n\t" + "lwz 0, 0(%[key])\n\t" + "lwz 6, 4(%[key])\n\t" + "lwz 7, 8(%[key])\n\t" + "lwz 8, 12(%[key])\n\t" + "lwz 9, 16(%[key])\n\t" + "lwz 10, 20(%[key])\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "addi %[ks], %[ks], 24\n\t" + "li 17, 7\n\t" + "mtctr 17\n\t" + "\n" + "L_AES_set_encrypt_key_loop_192_%=:\n\t" + "rlwinm 17, 10, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 10, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 10, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 10, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "xor 9, 9, 8\n\t" + "xor 10, 10, 9\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "addi %[ks], %[ks], 24\n\t" + "bdnz L_AES_set_encrypt_key_loop_192_%=\n\t" + "rlwinm 17, 10, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 10, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 10, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 10, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "b L_AES_set_encrypt_key_end_%=\n\t" + "\n" + "L_AES_set_encrypt_key_128_%=:\n\t" + "lwz 0, 0(%[key])\n\t" + "lwz 6, 4(%[key])\n\t" + "lwz 7, 8(%[key])\n\t" + "lwz 8, 12(%[key])\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "li 17, 10\n\t" + "mtctr 17\n\t" + "\n" + "L_AES_set_encrypt_key_loop_128_%=:\n\t" + "rlwinm 17, 8, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 8, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 8, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 8, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "bdnz L_AES_set_encrypt_key_loop_128_%=\n\t" + "\n" + "L_AES_set_encrypt_key_end_%=:\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks), + [L_AES_PPC32_sbox] "+r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_rcon] "+r" (L_AES_PPC32_rcon_c) + : +#else + : + : [key] "r" (key), [len] "r" (len), [ks] "r" (ks), + [L_AES_PPC32_sbox] "r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_rcon] "r" (L_AES_PPC32_rcon_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "8", "9", "10", "11", "12", "14", "15", "16", + "17" + ); +} + +void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p) +#else +WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("7") = (int)nr_p; + register word32* L_AES_PPC32_te_c __asm__ ("8") = (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 16, %[L_AES_PPC32_te]\n\t" + "addi 17, 16, 0x400\n\t" + "addi 18, 16, 0x800\n\t" + "addi 19, 16, 0xc00\n\t" + "add 26, %[in], %[len]\n\t" + "\n" + "L_AES_ECB_encrypt_block_%=:\n\t" + "lwz 0, 0(%[in])\n\t" + "lwz 8, 4(%[in])\n\t" + "lwz 9, 8(%[in])\n\t" + "lwz 10, 12(%[in])\n\t" + "mr 20, %[ks]\n\t" + "addi 21, %[nr], -2\n\t" + "lwz 22, 0(20)\n\t" + "lwz 23, 4(20)\n\t" + "lwz 24, 8(20)\n\t" + "lwz 25, 12(20)\n\t" + "xor 0, 0, 22\n\t" + "xor 8, 8, 23\n\t" + "xor 9, 9, 24\n\t" + "xor 10, 10, 25\n\t" + "addi 20, 20, 16\n\t" + "srwi 21, 21, 1\n\t" + "mtctr 21\n\t" + "\n" + "L_AES_ECB_encrypt_round_%=:\n\t" + "rlwinm 22, 0, 10, 22, 29\n\t" + "rlwinm 23, 8, 18, 22, 29\n\t" + "rlwinm 24, 9, 26, 22, 29\n\t" + "rlwinm 25, 10, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 11, 22, 24\n\t" + "rlwinm 22, 8, 10, 22, 29\n\t" + "rlwinm 23, 9, 18, 22, 29\n\t" + "rlwinm 24, 10, 26, 22, 29\n\t" + "rlwinm 25, 0, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 12, 22, 24\n\t" + "rlwinm 22, 9, 10, 22, 29\n\t" + "rlwinm 23, 10, 18, 22, 29\n\t" + "rlwinm 24, 0, 26, 22, 29\n\t" + "rlwinm 25, 8, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 14, 22, 24\n\t" + "rlwinm 22, 10, 10, 22, 29\n\t" + "rlwinm 23, 0, 18, 22, 29\n\t" + "rlwinm 24, 8, 26, 22, 29\n\t" + "rlwinm 25, 9, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 15, 22, 24\n\t" + "lwz 22, 0(20)\n\t" + "lwz 23, 4(20)\n\t" + "lwz 24, 8(20)\n\t" + "lwz 25, 12(20)\n\t" + "xor 11, 11, 22\n\t" + "xor 12, 12, 23\n\t" + "xor 14, 14, 24\n\t" + "xor 15, 15, 25\n\t" + "addi 20, 20, 16\n\t" + "rlwinm 22, 11, 10, 22, 29\n\t" + "rlwinm 23, 12, 18, 22, 29\n\t" + "rlwinm 24, 14, 26, 22, 29\n\t" + "rlwinm 25, 15, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 0, 22, 24\n\t" + "rlwinm 22, 12, 10, 22, 29\n\t" + "rlwinm 23, 14, 18, 22, 29\n\t" + "rlwinm 24, 15, 26, 22, 29\n\t" + "rlwinm 25, 11, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 8, 22, 24\n\t" + "rlwinm 22, 14, 10, 22, 29\n\t" + "rlwinm 23, 15, 18, 22, 29\n\t" + "rlwinm 24, 11, 26, 22, 29\n\t" + "rlwinm 25, 12, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 9, 22, 24\n\t" + "rlwinm 22, 15, 10, 22, 29\n\t" + "rlwinm 23, 11, 18, 22, 29\n\t" + "rlwinm 24, 12, 26, 22, 29\n\t" + "rlwinm 25, 14, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 10, 22, 24\n\t" + "lwz 22, 0(20)\n\t" + "lwz 23, 4(20)\n\t" + "lwz 24, 8(20)\n\t" + "lwz 25, 12(20)\n\t" + "xor 0, 0, 22\n\t" + "xor 8, 8, 23\n\t" + "xor 9, 9, 24\n\t" + "xor 10, 10, 25\n\t" + "addi 20, 20, 16\n\t" + "bdnz L_AES_ECB_encrypt_round_%=\n\t" + "rlwinm 22, 0, 10, 22, 29\n\t" + "rlwinm 23, 8, 18, 22, 29\n\t" + "rlwinm 24, 9, 26, 22, 29\n\t" + "rlwinm 25, 10, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 11, 22, 24\n\t" + "rlwinm 22, 8, 10, 22, 29\n\t" + "rlwinm 23, 9, 18, 22, 29\n\t" + "rlwinm 24, 10, 26, 22, 29\n\t" + "rlwinm 25, 0, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 12, 22, 24\n\t" + "rlwinm 22, 9, 10, 22, 29\n\t" + "rlwinm 23, 10, 18, 22, 29\n\t" + "rlwinm 24, 0, 26, 22, 29\n\t" + "rlwinm 25, 8, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 14, 22, 24\n\t" + "rlwinm 22, 10, 10, 22, 29\n\t" + "rlwinm 23, 0, 18, 22, 29\n\t" + "rlwinm 24, 8, 26, 22, 29\n\t" + "rlwinm 25, 9, 2, 22, 29\n\t" + "lwzx 22, 16, 22\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "xor 22, 22, 23\n\t" + "xor 24, 24, 25\n\t" + "xor 15, 22, 24\n\t" + "lwz 22, 0(20)\n\t" + "lwz 23, 4(20)\n\t" + "lwz 24, 8(20)\n\t" + "lwz 25, 12(20)\n\t" + "xor 11, 11, 22\n\t" + "xor 12, 12, 23\n\t" + "xor 14, 14, 24\n\t" + "xor 15, 15, 25\n\t" + "addi 20, 20, 16\n\t" + "rlwinm 22, 11, 10, 22, 29\n\t" + "rlwinm 23, 12, 18, 22, 29\n\t" + "rlwinm 24, 14, 26, 22, 29\n\t" + "rlwinm 25, 15, 2, 22, 29\n\t" + "lwzx 22, 18, 22\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 16, 24\n\t" + "lwzx 25, 17, 25\n\t" + "rlwinm 0, 22, 0, 0, 7\n\t" + "rlwimi 0, 23, 0, 8, 15\n\t" + "rlwimi 0, 24, 0, 16, 23\n\t" + "rlwimi 0, 25, 0, 24, 31\n\t" + "rlwinm 22, 12, 10, 22, 29\n\t" + "rlwinm 23, 14, 18, 22, 29\n\t" + "rlwinm 24, 15, 26, 22, 29\n\t" + "rlwinm 25, 11, 2, 22, 29\n\t" + "lwzx 22, 18, 22\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 16, 24\n\t" + "lwzx 25, 17, 25\n\t" + "rlwinm 8, 22, 0, 0, 7\n\t" + "rlwimi 8, 23, 0, 8, 15\n\t" + "rlwimi 8, 24, 0, 16, 23\n\t" + "rlwimi 8, 25, 0, 24, 31\n\t" + "rlwinm 22, 14, 10, 22, 29\n\t" + "rlwinm 23, 15, 18, 22, 29\n\t" + "rlwinm 24, 11, 26, 22, 29\n\t" + "rlwinm 25, 12, 2, 22, 29\n\t" + "lwzx 22, 18, 22\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 16, 24\n\t" + "lwzx 25, 17, 25\n\t" + "rlwinm 9, 22, 0, 0, 7\n\t" + "rlwimi 9, 23, 0, 8, 15\n\t" + "rlwimi 9, 24, 0, 16, 23\n\t" + "rlwimi 9, 25, 0, 24, 31\n\t" + "rlwinm 22, 15, 10, 22, 29\n\t" + "rlwinm 23, 11, 18, 22, 29\n\t" + "rlwinm 24, 12, 26, 22, 29\n\t" + "rlwinm 25, 14, 2, 22, 29\n\t" + "lwzx 22, 18, 22\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 16, 24\n\t" + "lwzx 25, 17, 25\n\t" + "rlwinm 10, 22, 0, 0, 7\n\t" + "rlwimi 10, 23, 0, 8, 15\n\t" + "rlwimi 10, 24, 0, 16, 23\n\t" + "rlwimi 10, 25, 0, 24, 31\n\t" + "lwz 22, 0(20)\n\t" + "lwz 23, 4(20)\n\t" + "lwz 24, 8(20)\n\t" + "lwz 25, 12(20)\n\t" + "xor 0, 0, 22\n\t" + "xor 8, 8, 23\n\t" + "xor 9, 9, 24\n\t" + "xor 10, 10, 25\n\t" + "stw 0, 0(%[out])\n\t" + "stw 8, 4(%[out])\n\t" + "stw 9, 8(%[out])\n\t" + "stw 10, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "cmplw %[in], 26\n\t" + "blt L_AES_ECB_encrypt_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "9", "10", "11", "12", "14", "15", "16", "17", + "18", "19", "20", "21", "22", "23", "24", "25", "26" + ); +} + +#ifdef HAVE_AES_DECRYPT +void AES_invert_key(unsigned char* ks_p, word32 rounds_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks_p, word32 rounds_p) +#else +WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* ks __asm__ ("3") = (unsigned char*)ks_p; + register word32 rounds __asm__ ("4") = (word32)rounds_p; + register word8* L_AES_PPC32_sbox_c __asm__ ("5") = + (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_td_c __asm__ ("6") = (word32*)&L_AES_PPC32_td; +#else + register word8* L_AES_PPC32_sbox_c = (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_td_c = (word32*)&L_AES_PPC32_td; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 12, %[L_AES_PPC32_sbox]\n\t" + "mr 19, %[L_AES_PPC32_td]\n\t" + "addi 20, 19, 0x400\n\t" + "addi 21, 19, 0x800\n\t" + "addi 22, 19, 0xc00\n\t" + "mr 14, %[ks]\n\t" + "slwi 16, %[rounds], 4\n\t" + "add 15, %[ks], 16\n\t" + "addi 16, %[rounds], 1\n\t" + "srwi 16, 16, 1\n\t" + "mtctr 16\n\t" + "\n" + "L_AES_invert_key_swap_%=:\n\t" + "lwz 0, 0(14)\n\t" + "lwz 5, 4(14)\n\t" + "lwz 6, 8(14)\n\t" + "lwz 7, 12(14)\n\t" + "lwz 8, 0(15)\n\t" + "lwz 9, 4(15)\n\t" + "lwz 10, 8(15)\n\t" + "lwz 11, 12(15)\n\t" + "stw 8, 0(14)\n\t" + "stw 9, 4(14)\n\t" + "stw 10, 8(14)\n\t" + "stw 11, 12(14)\n\t" + "stw 0, 0(15)\n\t" + "stw 5, 4(15)\n\t" + "stw 6, 8(15)\n\t" + "stw 7, 12(15)\n\t" + "addi 14, 14, 16\n\t" + "addi 15, 15, -16\n\t" + "bdnz L_AES_invert_key_swap_%=\n\t" + "addi 14, %[ks], 16\n\t" + "addi 16, %[rounds], -1\n\t" + "mtctr 16\n\t" + "\n" + "L_AES_invert_key_mix_%=:\n\t" + "lwz 0, 0(14)\n\t" + "rlwinm 17, 0, 8, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 5, 19, 17\n\t" + "rlwinm 18, 0, 16, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 20, 18\n\t" + "xor 5, 5, 18\n\t" + "rlwinm 17, 0, 24, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 17, 21, 17\n\t" + "xor 5, 5, 17\n\t" + "rlwinm 18, 0, 0, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 22, 18\n\t" + "xor 5, 5, 18\n\t" + "stw 5, 0(14)\n\t" + "lwz 0, 4(14)\n\t" + "rlwinm 17, 0, 8, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 5, 19, 17\n\t" + "rlwinm 18, 0, 16, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 20, 18\n\t" + "xor 5, 5, 18\n\t" + "rlwinm 17, 0, 24, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 17, 21, 17\n\t" + "xor 5, 5, 17\n\t" + "rlwinm 18, 0, 0, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 22, 18\n\t" + "xor 5, 5, 18\n\t" + "stw 5, 4(14)\n\t" + "lwz 0, 8(14)\n\t" + "rlwinm 17, 0, 8, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 5, 19, 17\n\t" + "rlwinm 18, 0, 16, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 20, 18\n\t" + "xor 5, 5, 18\n\t" + "rlwinm 17, 0, 24, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 17, 21, 17\n\t" + "xor 5, 5, 17\n\t" + "rlwinm 18, 0, 0, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 22, 18\n\t" + "xor 5, 5, 18\n\t" + "stw 5, 8(14)\n\t" + "lwz 0, 12(14)\n\t" + "rlwinm 17, 0, 8, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 5, 19, 17\n\t" + "rlwinm 18, 0, 16, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 20, 18\n\t" + "xor 5, 5, 18\n\t" + "rlwinm 17, 0, 24, 24, 31\n\t" + "lbzx 17, 12, 17\n\t" + "slwi 17, 17, 2\n\t" + "lwzx 17, 21, 17\n\t" + "xor 5, 5, 17\n\t" + "rlwinm 18, 0, 0, 24, 31\n\t" + "lbzx 18, 12, 18\n\t" + "slwi 18, 18, 2\n\t" + "lwzx 18, 22, 18\n\t" + "xor 5, 5, 18\n\t" + "stw 5, 12(14)\n\t" + "addi 14, 14, 16\n\t" + "bdnz L_AES_invert_key_mix_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [ks] "+r" (ks), [rounds] "+r" (rounds), + [L_AES_PPC32_sbox] "+r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_td] "+r" (L_AES_PPC32_td_c) + : +#else + : + : [ks] "r" (ks), [rounds] "r" (rounds), + [L_AES_PPC32_sbox] "r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_td] "r" (L_AES_PPC32_td_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22" + ); +} + +void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p) +#else +WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("7") = (int)nr_p; + register word32* L_AES_PPC32_td_c __asm__ ("8") = (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c __asm__ ("9") = + (word8*)&L_AES_PPC32_inv_sbox; +#else + register word32* L_AES_PPC32_td_c = (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c = (word8*)&L_AES_PPC32_inv_sbox; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 16, %[L_AES_PPC32_td]\n\t" + "addi 17, 16, 0x400\n\t" + "addi 18, 16, 0x800\n\t" + "addi 19, 16, 0xc00\n\t" + "mr 20, %[L_AES_PPC32_inv_sbox]\n\t" + "add 27, %[in], %[len]\n\t" + "\n" + "L_AES_ECB_decrypt_block_%=:\n\t" + "lwz 0, 0(%[in])\n\t" + "lwz 8, 4(%[in])\n\t" + "lwz 9, 8(%[in])\n\t" + "lwz 10, 12(%[in])\n\t" + "mr 21, %[ks]\n\t" + "addi 22, %[nr], -2\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 0, 0, 23\n\t" + "xor 8, 8, 24\n\t" + "xor 9, 9, 25\n\t" + "xor 10, 10, 26\n\t" + "addi 21, 21, 16\n\t" + "srwi 22, 22, 1\n\t" + "mtctr 22\n\t" + "\n" + "L_AES_ECB_decrypt_round_%=:\n\t" + "rlwinm 23, 0, 10, 22, 29\n\t" + "rlwinm 24, 10, 18, 22, 29\n\t" + "rlwinm 25, 9, 26, 22, 29\n\t" + "rlwinm 26, 8, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 11, 23, 25\n\t" + "rlwinm 23, 8, 10, 22, 29\n\t" + "rlwinm 24, 0, 18, 22, 29\n\t" + "rlwinm 25, 10, 26, 22, 29\n\t" + "rlwinm 26, 9, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 12, 23, 25\n\t" + "rlwinm 23, 9, 10, 22, 29\n\t" + "rlwinm 24, 8, 18, 22, 29\n\t" + "rlwinm 25, 0, 26, 22, 29\n\t" + "rlwinm 26, 10, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 14, 23, 25\n\t" + "rlwinm 23, 10, 10, 22, 29\n\t" + "rlwinm 24, 9, 18, 22, 29\n\t" + "rlwinm 25, 8, 26, 22, 29\n\t" + "rlwinm 26, 0, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 15, 23, 25\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 11, 11, 23\n\t" + "xor 12, 12, 24\n\t" + "xor 14, 14, 25\n\t" + "xor 15, 15, 26\n\t" + "addi 21, 21, 16\n\t" + "rlwinm 23, 11, 10, 22, 29\n\t" + "rlwinm 24, 15, 18, 22, 29\n\t" + "rlwinm 25, 14, 26, 22, 29\n\t" + "rlwinm 26, 12, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 0, 23, 25\n\t" + "rlwinm 23, 12, 10, 22, 29\n\t" + "rlwinm 24, 11, 18, 22, 29\n\t" + "rlwinm 25, 15, 26, 22, 29\n\t" + "rlwinm 26, 14, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 8, 23, 25\n\t" + "rlwinm 23, 14, 10, 22, 29\n\t" + "rlwinm 24, 12, 18, 22, 29\n\t" + "rlwinm 25, 11, 26, 22, 29\n\t" + "rlwinm 26, 15, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 9, 23, 25\n\t" + "rlwinm 23, 15, 10, 22, 29\n\t" + "rlwinm 24, 14, 18, 22, 29\n\t" + "rlwinm 25, 12, 26, 22, 29\n\t" + "rlwinm 26, 11, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 10, 23, 25\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 0, 0, 23\n\t" + "xor 8, 8, 24\n\t" + "xor 9, 9, 25\n\t" + "xor 10, 10, 26\n\t" + "addi 21, 21, 16\n\t" + "bdnz L_AES_ECB_decrypt_round_%=\n\t" + "rlwinm 23, 0, 10, 22, 29\n\t" + "rlwinm 24, 10, 18, 22, 29\n\t" + "rlwinm 25, 9, 26, 22, 29\n\t" + "rlwinm 26, 8, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 11, 23, 25\n\t" + "rlwinm 23, 8, 10, 22, 29\n\t" + "rlwinm 24, 0, 18, 22, 29\n\t" + "rlwinm 25, 10, 26, 22, 29\n\t" + "rlwinm 26, 9, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 12, 23, 25\n\t" + "rlwinm 23, 9, 10, 22, 29\n\t" + "rlwinm 24, 8, 18, 22, 29\n\t" + "rlwinm 25, 0, 26, 22, 29\n\t" + "rlwinm 26, 10, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 14, 23, 25\n\t" + "rlwinm 23, 10, 10, 22, 29\n\t" + "rlwinm 24, 9, 18, 22, 29\n\t" + "rlwinm 25, 8, 26, 22, 29\n\t" + "rlwinm 26, 0, 2, 22, 29\n\t" + "lwzx 23, 16, 23\n\t" + "lwzx 24, 17, 24\n\t" + "lwzx 25, 18, 25\n\t" + "lwzx 26, 19, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 15, 23, 25\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 11, 11, 23\n\t" + "xor 12, 12, 24\n\t" + "xor 14, 14, 25\n\t" + "xor 15, 15, 26\n\t" + "addi 21, 21, 16\n\t" + "rlwinm 23, 11, 8, 24, 31\n\t" + "rlwinm 24, 15, 16, 24, 31\n\t" + "rlwinm 25, 14, 24, 24, 31\n\t" + "rlwinm 26, 12, 0, 24, 31\n\t" + "lbzx 23, 20, 23\n\t" + "lbzx 24, 20, 24\n\t" + "lbzx 25, 20, 25\n\t" + "lbzx 26, 20, 26\n\t" + "slwi 0, 23, 24\n\t" + "rlwimi 0, 24, 16, 8, 15\n\t" + "rlwimi 0, 25, 8, 16, 23\n\t" + "rlwimi 0, 26, 0, 24, 31\n\t" + "rlwinm 23, 12, 8, 24, 31\n\t" + "rlwinm 24, 11, 16, 24, 31\n\t" + "rlwinm 25, 15, 24, 24, 31\n\t" + "rlwinm 26, 14, 0, 24, 31\n\t" + "lbzx 23, 20, 23\n\t" + "lbzx 24, 20, 24\n\t" + "lbzx 25, 20, 25\n\t" + "lbzx 26, 20, 26\n\t" + "slwi 8, 23, 24\n\t" + "rlwimi 8, 24, 16, 8, 15\n\t" + "rlwimi 8, 25, 8, 16, 23\n\t" + "rlwimi 8, 26, 0, 24, 31\n\t" + "rlwinm 23, 14, 8, 24, 31\n\t" + "rlwinm 24, 12, 16, 24, 31\n\t" + "rlwinm 25, 11, 24, 24, 31\n\t" + "rlwinm 26, 15, 0, 24, 31\n\t" + "lbzx 23, 20, 23\n\t" + "lbzx 24, 20, 24\n\t" + "lbzx 25, 20, 25\n\t" + "lbzx 26, 20, 26\n\t" + "slwi 9, 23, 24\n\t" + "rlwimi 9, 24, 16, 8, 15\n\t" + "rlwimi 9, 25, 8, 16, 23\n\t" + "rlwimi 9, 26, 0, 24, 31\n\t" + "rlwinm 23, 15, 8, 24, 31\n\t" + "rlwinm 24, 14, 16, 24, 31\n\t" + "rlwinm 25, 12, 24, 24, 31\n\t" + "rlwinm 26, 11, 0, 24, 31\n\t" + "lbzx 23, 20, 23\n\t" + "lbzx 24, 20, 24\n\t" + "lbzx 25, 20, 25\n\t" + "lbzx 26, 20, 26\n\t" + "slwi 10, 23, 24\n\t" + "rlwimi 10, 24, 16, 8, 15\n\t" + "rlwimi 10, 25, 8, 16, 23\n\t" + "rlwimi 10, 26, 0, 24, 31\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 0, 0, 23\n\t" + "xor 8, 8, 24\n\t" + "xor 9, 9, 25\n\t" + "xor 10, 10, 26\n\t" + "stw 0, 0(%[out])\n\t" + "stw 8, 4(%[out])\n\t" + "stw 9, 8(%[out])\n\t" + "stw 10, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "cmplw %[in], 27\n\t" + "blt L_AES_ECB_decrypt_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [L_AES_PPC32_td] "+r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "+r" (L_AES_PPC32_inv_sbox_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [L_AES_PPC32_td] "r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "r" (L_AES_PPC32_inv_sbox_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "10", "11", "12", "14", "15", "16", "17", "18", + "19", "20", "21", "22", "23", "24", "25", "26", "27" + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#ifdef HAVE_AES_CBC +void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* iv_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* iv_p) +#else +WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* iv) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("7") = (int)nr_p; + register unsigned char* iv __asm__ ("8") = (unsigned char*)iv_p; + register word32* L_AES_PPC32_te_c __asm__ ("9") = (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 17, %[L_AES_PPC32_te]\n\t" + "addi 18, 17, 0x400\n\t" + "addi 19, 17, 0x800\n\t" + "addi 20, 17, 0xc00\n\t" + "lwz 0, 0(%[iv])\n\t" + "lwz 9, 4(%[iv])\n\t" + "lwz 10, 8(%[iv])\n\t" + "lwz 11, 12(%[iv])\n\t" + "\n" + "L_AES_CBC_encrypt_block_%=:\n\t" + "lwz 12, 0(%[in])\n\t" + "lwz 14, 4(%[in])\n\t" + "lwz 15, 8(%[in])\n\t" + "lwz 16, 12(%[in])\n\t" + "xor 0, 0, 12\n\t" + "xor 9, 9, 14\n\t" + "xor 10, 10, 15\n\t" + "xor 11, 11, 16\n\t" + "mr 21, %[ks]\n\t" + "addi 22, %[nr], -2\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 0, 0, 23\n\t" + "xor 9, 9, 24\n\t" + "xor 10, 10, 25\n\t" + "xor 11, 11, 26\n\t" + "addi 21, 21, 16\n\t" + "srwi 22, 22, 1\n\t" + "mtctr 22\n\t" + "\n" + "L_AES_CBC_encrypt_round_%=:\n\t" + "rlwinm 23, 0, 10, 22, 29\n\t" + "rlwinm 24, 9, 18, 22, 29\n\t" + "rlwinm 25, 10, 26, 22, 29\n\t" + "rlwinm 26, 11, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 12, 23, 25\n\t" + "rlwinm 23, 9, 10, 22, 29\n\t" + "rlwinm 24, 10, 18, 22, 29\n\t" + "rlwinm 25, 11, 26, 22, 29\n\t" + "rlwinm 26, 0, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 14, 23, 25\n\t" + "rlwinm 23, 10, 10, 22, 29\n\t" + "rlwinm 24, 11, 18, 22, 29\n\t" + "rlwinm 25, 0, 26, 22, 29\n\t" + "rlwinm 26, 9, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 15, 23, 25\n\t" + "rlwinm 23, 11, 10, 22, 29\n\t" + "rlwinm 24, 0, 18, 22, 29\n\t" + "rlwinm 25, 9, 26, 22, 29\n\t" + "rlwinm 26, 10, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 16, 23, 25\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 12, 12, 23\n\t" + "xor 14, 14, 24\n\t" + "xor 15, 15, 25\n\t" + "xor 16, 16, 26\n\t" + "addi 21, 21, 16\n\t" + "rlwinm 23, 12, 10, 22, 29\n\t" + "rlwinm 24, 14, 18, 22, 29\n\t" + "rlwinm 25, 15, 26, 22, 29\n\t" + "rlwinm 26, 16, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 0, 23, 25\n\t" + "rlwinm 23, 14, 10, 22, 29\n\t" + "rlwinm 24, 15, 18, 22, 29\n\t" + "rlwinm 25, 16, 26, 22, 29\n\t" + "rlwinm 26, 12, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 9, 23, 25\n\t" + "rlwinm 23, 15, 10, 22, 29\n\t" + "rlwinm 24, 16, 18, 22, 29\n\t" + "rlwinm 25, 12, 26, 22, 29\n\t" + "rlwinm 26, 14, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 10, 23, 25\n\t" + "rlwinm 23, 16, 10, 22, 29\n\t" + "rlwinm 24, 12, 18, 22, 29\n\t" + "rlwinm 25, 14, 26, 22, 29\n\t" + "rlwinm 26, 15, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 11, 23, 25\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 0, 0, 23\n\t" + "xor 9, 9, 24\n\t" + "xor 10, 10, 25\n\t" + "xor 11, 11, 26\n\t" + "addi 21, 21, 16\n\t" + "bdnz L_AES_CBC_encrypt_round_%=\n\t" + "rlwinm 23, 0, 10, 22, 29\n\t" + "rlwinm 24, 9, 18, 22, 29\n\t" + "rlwinm 25, 10, 26, 22, 29\n\t" + "rlwinm 26, 11, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 12, 23, 25\n\t" + "rlwinm 23, 9, 10, 22, 29\n\t" + "rlwinm 24, 10, 18, 22, 29\n\t" + "rlwinm 25, 11, 26, 22, 29\n\t" + "rlwinm 26, 0, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 14, 23, 25\n\t" + "rlwinm 23, 10, 10, 22, 29\n\t" + "rlwinm 24, 11, 18, 22, 29\n\t" + "rlwinm 25, 0, 26, 22, 29\n\t" + "rlwinm 26, 9, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 15, 23, 25\n\t" + "rlwinm 23, 11, 10, 22, 29\n\t" + "rlwinm 24, 0, 18, 22, 29\n\t" + "rlwinm 25, 9, 26, 22, 29\n\t" + "rlwinm 26, 10, 2, 22, 29\n\t" + "lwzx 23, 17, 23\n\t" + "lwzx 24, 18, 24\n\t" + "lwzx 25, 19, 25\n\t" + "lwzx 26, 20, 26\n\t" + "xor 23, 23, 24\n\t" + "xor 25, 25, 26\n\t" + "xor 16, 23, 25\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 12, 12, 23\n\t" + "xor 14, 14, 24\n\t" + "xor 15, 15, 25\n\t" + "xor 16, 16, 26\n\t" + "addi 21, 21, 16\n\t" + "rlwinm 23, 12, 10, 22, 29\n\t" + "rlwinm 24, 14, 18, 22, 29\n\t" + "rlwinm 25, 15, 26, 22, 29\n\t" + "rlwinm 26, 16, 2, 22, 29\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 20, 24\n\t" + "lwzx 25, 17, 25\n\t" + "lwzx 26, 18, 26\n\t" + "rlwinm 0, 23, 0, 0, 7\n\t" + "rlwimi 0, 24, 0, 8, 15\n\t" + "rlwimi 0, 25, 0, 16, 23\n\t" + "rlwimi 0, 26, 0, 24, 31\n\t" + "rlwinm 23, 14, 10, 22, 29\n\t" + "rlwinm 24, 15, 18, 22, 29\n\t" + "rlwinm 25, 16, 26, 22, 29\n\t" + "rlwinm 26, 12, 2, 22, 29\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 20, 24\n\t" + "lwzx 25, 17, 25\n\t" + "lwzx 26, 18, 26\n\t" + "rlwinm 9, 23, 0, 0, 7\n\t" + "rlwimi 9, 24, 0, 8, 15\n\t" + "rlwimi 9, 25, 0, 16, 23\n\t" + "rlwimi 9, 26, 0, 24, 31\n\t" + "rlwinm 23, 15, 10, 22, 29\n\t" + "rlwinm 24, 16, 18, 22, 29\n\t" + "rlwinm 25, 12, 26, 22, 29\n\t" + "rlwinm 26, 14, 2, 22, 29\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 20, 24\n\t" + "lwzx 25, 17, 25\n\t" + "lwzx 26, 18, 26\n\t" + "rlwinm 10, 23, 0, 0, 7\n\t" + "rlwimi 10, 24, 0, 8, 15\n\t" + "rlwimi 10, 25, 0, 16, 23\n\t" + "rlwimi 10, 26, 0, 24, 31\n\t" + "rlwinm 23, 16, 10, 22, 29\n\t" + "rlwinm 24, 12, 18, 22, 29\n\t" + "rlwinm 25, 14, 26, 22, 29\n\t" + "rlwinm 26, 15, 2, 22, 29\n\t" + "lwzx 23, 19, 23\n\t" + "lwzx 24, 20, 24\n\t" + "lwzx 25, 17, 25\n\t" + "lwzx 26, 18, 26\n\t" + "rlwinm 11, 23, 0, 0, 7\n\t" + "rlwimi 11, 24, 0, 8, 15\n\t" + "rlwimi 11, 25, 0, 16, 23\n\t" + "rlwimi 11, 26, 0, 24, 31\n\t" + "lwz 23, 0(21)\n\t" + "lwz 24, 4(21)\n\t" + "lwz 25, 8(21)\n\t" + "lwz 26, 12(21)\n\t" + "xor 0, 0, 23\n\t" + "xor 9, 9, 24\n\t" + "xor 10, 10, 25\n\t" + "xor 11, 11, 26\n\t" + "stw 0, 0(%[out])\n\t" + "stw 9, 4(%[out])\n\t" + "stw 10, 8(%[out])\n\t" + "stw 11, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_encrypt_block_%=\n\t" + "stw 0, 0(%[iv])\n\t" + "stw 9, 4(%[iv])\n\t" + "stw 10, 8(%[iv])\n\t" + "stw 11, 12(%[iv])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [iv] "+r" (iv), + [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [iv] "r" (iv), [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "10", "11", "12", "14", "15", "16", "17", "18", + "19", "20", "21", "22", "23", "24", "25", "26" + ); +} + +#ifdef HAVE_AES_DECRYPT +void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* iv_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* iv_p) +#else +WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* iv) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("7") = (int)nr_p; + register unsigned char* iv __asm__ ("8") = (unsigned char*)iv_p; + register word32* L_AES_PPC32_td_c __asm__ ("9") = (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c __asm__ ("10") = + (word8*)&L_AES_PPC32_inv_sbox; +#else + register word32* L_AES_PPC32_td_c = (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c = (word8*)&L_AES_PPC32_inv_sbox; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 21, %[L_AES_PPC32_td]\n\t" + "addi 22, 21, 0x400\n\t" + "addi 23, 21, 0x800\n\t" + "addi 24, 21, 0xc00\n\t" + "mr 25, %[L_AES_PPC32_inv_sbox]\n\t" + "lwz 17, 0(%[iv])\n\t" + "lwz 18, 4(%[iv])\n\t" + "lwz 19, 8(%[iv])\n\t" + "lwz 20, 12(%[iv])\n\t" + "\n" + "L_AES_CBC_decrypt_block_%=:\n\t" + "lwz 0, 0(%[in])\n\t" + "lwz 9, 4(%[in])\n\t" + "lwz 10, 8(%[in])\n\t" + "lwz 11, 12(%[in])\n\t" + "mr 26, %[ks]\n\t" + "addi 27, %[nr], -2\n\t" + "lwz 28, 0(26)\n\t" + "lwz 29, 4(26)\n\t" + "lwz 30, 8(26)\n\t" + "lwz 31, 12(26)\n\t" + "xor 0, 0, 28\n\t" + "xor 9, 9, 29\n\t" + "xor 10, 10, 30\n\t" + "xor 11, 11, 31\n\t" + "addi 26, 26, 16\n\t" + "srwi 27, 27, 1\n\t" + "mtctr 27\n\t" + "\n" + "L_AES_CBC_decrypt_round_%=:\n\t" + "rlwinm 28, 0, 10, 22, 29\n\t" + "rlwinm 29, 11, 18, 22, 29\n\t" + "rlwinm 30, 10, 26, 22, 29\n\t" + "rlwinm 31, 9, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 12, 28, 30\n\t" + "rlwinm 28, 9, 10, 22, 29\n\t" + "rlwinm 29, 0, 18, 22, 29\n\t" + "rlwinm 30, 11, 26, 22, 29\n\t" + "rlwinm 31, 10, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 14, 28, 30\n\t" + "rlwinm 28, 10, 10, 22, 29\n\t" + "rlwinm 29, 9, 18, 22, 29\n\t" + "rlwinm 30, 0, 26, 22, 29\n\t" + "rlwinm 31, 11, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 15, 28, 30\n\t" + "rlwinm 28, 11, 10, 22, 29\n\t" + "rlwinm 29, 10, 18, 22, 29\n\t" + "rlwinm 30, 9, 26, 22, 29\n\t" + "rlwinm 31, 0, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 16, 28, 30\n\t" + "lwz 28, 0(26)\n\t" + "lwz 29, 4(26)\n\t" + "lwz 30, 8(26)\n\t" + "lwz 31, 12(26)\n\t" + "xor 12, 12, 28\n\t" + "xor 14, 14, 29\n\t" + "xor 15, 15, 30\n\t" + "xor 16, 16, 31\n\t" + "addi 26, 26, 16\n\t" + "rlwinm 28, 12, 10, 22, 29\n\t" + "rlwinm 29, 16, 18, 22, 29\n\t" + "rlwinm 30, 15, 26, 22, 29\n\t" + "rlwinm 31, 14, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 0, 28, 30\n\t" + "rlwinm 28, 14, 10, 22, 29\n\t" + "rlwinm 29, 12, 18, 22, 29\n\t" + "rlwinm 30, 16, 26, 22, 29\n\t" + "rlwinm 31, 15, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 9, 28, 30\n\t" + "rlwinm 28, 15, 10, 22, 29\n\t" + "rlwinm 29, 14, 18, 22, 29\n\t" + "rlwinm 30, 12, 26, 22, 29\n\t" + "rlwinm 31, 16, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 10, 28, 30\n\t" + "rlwinm 28, 16, 10, 22, 29\n\t" + "rlwinm 29, 15, 18, 22, 29\n\t" + "rlwinm 30, 14, 26, 22, 29\n\t" + "rlwinm 31, 12, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 11, 28, 30\n\t" + "lwz 28, 0(26)\n\t" + "lwz 29, 4(26)\n\t" + "lwz 30, 8(26)\n\t" + "lwz 31, 12(26)\n\t" + "xor 0, 0, 28\n\t" + "xor 9, 9, 29\n\t" + "xor 10, 10, 30\n\t" + "xor 11, 11, 31\n\t" + "addi 26, 26, 16\n\t" + "bdnz L_AES_CBC_decrypt_round_%=\n\t" + "rlwinm 28, 0, 10, 22, 29\n\t" + "rlwinm 29, 11, 18, 22, 29\n\t" + "rlwinm 30, 10, 26, 22, 29\n\t" + "rlwinm 31, 9, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 12, 28, 30\n\t" + "rlwinm 28, 9, 10, 22, 29\n\t" + "rlwinm 29, 0, 18, 22, 29\n\t" + "rlwinm 30, 11, 26, 22, 29\n\t" + "rlwinm 31, 10, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 14, 28, 30\n\t" + "rlwinm 28, 10, 10, 22, 29\n\t" + "rlwinm 29, 9, 18, 22, 29\n\t" + "rlwinm 30, 0, 26, 22, 29\n\t" + "rlwinm 31, 11, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 15, 28, 30\n\t" + "rlwinm 28, 11, 10, 22, 29\n\t" + "rlwinm 29, 10, 18, 22, 29\n\t" + "rlwinm 30, 9, 26, 22, 29\n\t" + "rlwinm 31, 0, 2, 22, 29\n\t" + "lwzx 28, 21, 28\n\t" + "lwzx 29, 22, 29\n\t" + "lwzx 30, 23, 30\n\t" + "lwzx 31, 24, 31\n\t" + "xor 28, 28, 29\n\t" + "xor 30, 30, 31\n\t" + "xor 16, 28, 30\n\t" + "lwz 28, 0(26)\n\t" + "lwz 29, 4(26)\n\t" + "lwz 30, 8(26)\n\t" + "lwz 31, 12(26)\n\t" + "xor 12, 12, 28\n\t" + "xor 14, 14, 29\n\t" + "xor 15, 15, 30\n\t" + "xor 16, 16, 31\n\t" + "addi 26, 26, 16\n\t" + "rlwinm 28, 12, 8, 24, 31\n\t" + "rlwinm 29, 16, 16, 24, 31\n\t" + "rlwinm 30, 15, 24, 24, 31\n\t" + "rlwinm 31, 14, 0, 24, 31\n\t" + "lbzx 28, 25, 28\n\t" + "lbzx 29, 25, 29\n\t" + "lbzx 30, 25, 30\n\t" + "lbzx 31, 25, 31\n\t" + "slwi 0, 28, 24\n\t" + "rlwimi 0, 29, 16, 8, 15\n\t" + "rlwimi 0, 30, 8, 16, 23\n\t" + "rlwimi 0, 31, 0, 24, 31\n\t" + "rlwinm 28, 14, 8, 24, 31\n\t" + "rlwinm 29, 12, 16, 24, 31\n\t" + "rlwinm 30, 16, 24, 24, 31\n\t" + "rlwinm 31, 15, 0, 24, 31\n\t" + "lbzx 28, 25, 28\n\t" + "lbzx 29, 25, 29\n\t" + "lbzx 30, 25, 30\n\t" + "lbzx 31, 25, 31\n\t" + "slwi 9, 28, 24\n\t" + "rlwimi 9, 29, 16, 8, 15\n\t" + "rlwimi 9, 30, 8, 16, 23\n\t" + "rlwimi 9, 31, 0, 24, 31\n\t" + "rlwinm 28, 15, 8, 24, 31\n\t" + "rlwinm 29, 14, 16, 24, 31\n\t" + "rlwinm 30, 12, 24, 24, 31\n\t" + "rlwinm 31, 16, 0, 24, 31\n\t" + "lbzx 28, 25, 28\n\t" + "lbzx 29, 25, 29\n\t" + "lbzx 30, 25, 30\n\t" + "lbzx 31, 25, 31\n\t" + "slwi 10, 28, 24\n\t" + "rlwimi 10, 29, 16, 8, 15\n\t" + "rlwimi 10, 30, 8, 16, 23\n\t" + "rlwimi 10, 31, 0, 24, 31\n\t" + "rlwinm 28, 16, 8, 24, 31\n\t" + "rlwinm 29, 15, 16, 24, 31\n\t" + "rlwinm 30, 14, 24, 24, 31\n\t" + "rlwinm 31, 12, 0, 24, 31\n\t" + "lbzx 28, 25, 28\n\t" + "lbzx 29, 25, 29\n\t" + "lbzx 30, 25, 30\n\t" + "lbzx 31, 25, 31\n\t" + "slwi 11, 28, 24\n\t" + "rlwimi 11, 29, 16, 8, 15\n\t" + "rlwimi 11, 30, 8, 16, 23\n\t" + "rlwimi 11, 31, 0, 24, 31\n\t" + "lwz 28, 0(26)\n\t" + "lwz 29, 4(26)\n\t" + "lwz 30, 8(26)\n\t" + "lwz 31, 12(26)\n\t" + "xor 0, 0, 28\n\t" + "xor 9, 9, 29\n\t" + "xor 10, 10, 30\n\t" + "xor 11, 11, 31\n\t" + "xor 0, 0, 17\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "xor 11, 11, 20\n\t" + "lwz 17, 0(%[in])\n\t" + "lwz 18, 4(%[in])\n\t" + "lwz 19, 8(%[in])\n\t" + "lwz 20, 12(%[in])\n\t" + "stw 0, 0(%[out])\n\t" + "stw 9, 4(%[out])\n\t" + "stw 10, 8(%[out])\n\t" + "stw 11, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_decrypt_block_%=\n\t" + "stw 17, 0(%[iv])\n\t" + "stw 18, 4(%[iv])\n\t" + "stw 19, 8(%[iv])\n\t" + "stw 20, 12(%[iv])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [iv] "+r" (iv), + [L_AES_PPC32_td] "+r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "+r" (L_AES_PPC32_inv_sbox_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [iv] "r" (iv), [L_AES_PPC32_td] "r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "r" (L_AES_PPC32_inv_sbox_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "11", "12", "14", "15", "16", "17", "18", "19", + "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", + "31" + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#endif /* HAVE_AES_CBC */ +#ifdef WOLFSSL_AES_COUNTER +void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* ctr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* ctr_p) +#else +WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* ctr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("7") = (int)nr_p; + register unsigned char* ctr __asm__ ("8") = (unsigned char*)ctr_p; + register word32* L_AES_PPC32_te_c __asm__ ("9") = (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 21, %[L_AES_PPC32_te]\n\t" + "addi 22, 21, 0x400\n\t" + "addi 23, 21, 0x800\n\t" + "addi 24, 21, 0xc00\n\t" + "lwz 17, 0(%[ctr])\n\t" + "lwz 18, 4(%[ctr])\n\t" + "lwz 19, 8(%[ctr])\n\t" + "lwz 20, 12(%[ctr])\n\t" + "\n" + "L_AES_CTR_encrypt_block_%=:\n\t" + "mr 0, 17\n\t" + "mr 9, 18\n\t" + "mr 10, 19\n\t" + "mr 11, 20\n\t" + "mr 25, %[ks]\n\t" + "addi 26, %[nr], -2\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 0, 0, 27\n\t" + "xor 9, 9, 28\n\t" + "xor 10, 10, 29\n\t" + "xor 11, 11, 30\n\t" + "addi 25, 25, 16\n\t" + "srwi 26, 26, 1\n\t" + "mtctr 26\n\t" + "\n" + "L_AES_CTR_encrypt_round_%=:\n\t" + "rlwinm 27, 0, 10, 22, 29\n\t" + "rlwinm 28, 9, 18, 22, 29\n\t" + "rlwinm 29, 10, 26, 22, 29\n\t" + "rlwinm 30, 11, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 12, 27, 29\n\t" + "rlwinm 27, 9, 10, 22, 29\n\t" + "rlwinm 28, 10, 18, 22, 29\n\t" + "rlwinm 29, 11, 26, 22, 29\n\t" + "rlwinm 30, 0, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 14, 27, 29\n\t" + "rlwinm 27, 10, 10, 22, 29\n\t" + "rlwinm 28, 11, 18, 22, 29\n\t" + "rlwinm 29, 0, 26, 22, 29\n\t" + "rlwinm 30, 9, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 15, 27, 29\n\t" + "rlwinm 27, 11, 10, 22, 29\n\t" + "rlwinm 28, 0, 18, 22, 29\n\t" + "rlwinm 29, 9, 26, 22, 29\n\t" + "rlwinm 30, 10, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 16, 27, 29\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 12, 12, 27\n\t" + "xor 14, 14, 28\n\t" + "xor 15, 15, 29\n\t" + "xor 16, 16, 30\n\t" + "addi 25, 25, 16\n\t" + "rlwinm 27, 12, 10, 22, 29\n\t" + "rlwinm 28, 14, 18, 22, 29\n\t" + "rlwinm 29, 15, 26, 22, 29\n\t" + "rlwinm 30, 16, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 0, 27, 29\n\t" + "rlwinm 27, 14, 10, 22, 29\n\t" + "rlwinm 28, 15, 18, 22, 29\n\t" + "rlwinm 29, 16, 26, 22, 29\n\t" + "rlwinm 30, 12, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 9, 27, 29\n\t" + "rlwinm 27, 15, 10, 22, 29\n\t" + "rlwinm 28, 16, 18, 22, 29\n\t" + "rlwinm 29, 12, 26, 22, 29\n\t" + "rlwinm 30, 14, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 10, 27, 29\n\t" + "rlwinm 27, 16, 10, 22, 29\n\t" + "rlwinm 28, 12, 18, 22, 29\n\t" + "rlwinm 29, 14, 26, 22, 29\n\t" + "rlwinm 30, 15, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 11, 27, 29\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 0, 0, 27\n\t" + "xor 9, 9, 28\n\t" + "xor 10, 10, 29\n\t" + "xor 11, 11, 30\n\t" + "addi 25, 25, 16\n\t" + "bdnz L_AES_CTR_encrypt_round_%=\n\t" + "rlwinm 27, 0, 10, 22, 29\n\t" + "rlwinm 28, 9, 18, 22, 29\n\t" + "rlwinm 29, 10, 26, 22, 29\n\t" + "rlwinm 30, 11, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 12, 27, 29\n\t" + "rlwinm 27, 9, 10, 22, 29\n\t" + "rlwinm 28, 10, 18, 22, 29\n\t" + "rlwinm 29, 11, 26, 22, 29\n\t" + "rlwinm 30, 0, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 14, 27, 29\n\t" + "rlwinm 27, 10, 10, 22, 29\n\t" + "rlwinm 28, 11, 18, 22, 29\n\t" + "rlwinm 29, 0, 26, 22, 29\n\t" + "rlwinm 30, 9, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 15, 27, 29\n\t" + "rlwinm 27, 11, 10, 22, 29\n\t" + "rlwinm 28, 0, 18, 22, 29\n\t" + "rlwinm 29, 9, 26, 22, 29\n\t" + "rlwinm 30, 10, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 16, 27, 29\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 12, 12, 27\n\t" + "xor 14, 14, 28\n\t" + "xor 15, 15, 29\n\t" + "xor 16, 16, 30\n\t" + "addi 25, 25, 16\n\t" + "rlwinm 27, 12, 10, 22, 29\n\t" + "rlwinm 28, 14, 18, 22, 29\n\t" + "rlwinm 29, 15, 26, 22, 29\n\t" + "rlwinm 30, 16, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 0, 27, 0, 0, 7\n\t" + "rlwimi 0, 28, 0, 8, 15\n\t" + "rlwimi 0, 29, 0, 16, 23\n\t" + "rlwimi 0, 30, 0, 24, 31\n\t" + "rlwinm 27, 14, 10, 22, 29\n\t" + "rlwinm 28, 15, 18, 22, 29\n\t" + "rlwinm 29, 16, 26, 22, 29\n\t" + "rlwinm 30, 12, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 9, 27, 0, 0, 7\n\t" + "rlwimi 9, 28, 0, 8, 15\n\t" + "rlwimi 9, 29, 0, 16, 23\n\t" + "rlwimi 9, 30, 0, 24, 31\n\t" + "rlwinm 27, 15, 10, 22, 29\n\t" + "rlwinm 28, 16, 18, 22, 29\n\t" + "rlwinm 29, 12, 26, 22, 29\n\t" + "rlwinm 30, 14, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 10, 27, 0, 0, 7\n\t" + "rlwimi 10, 28, 0, 8, 15\n\t" + "rlwimi 10, 29, 0, 16, 23\n\t" + "rlwimi 10, 30, 0, 24, 31\n\t" + "rlwinm 27, 16, 10, 22, 29\n\t" + "rlwinm 28, 12, 18, 22, 29\n\t" + "rlwinm 29, 14, 26, 22, 29\n\t" + "rlwinm 30, 15, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 11, 27, 0, 0, 7\n\t" + "rlwimi 11, 28, 0, 8, 15\n\t" + "rlwimi 11, 29, 0, 16, 23\n\t" + "rlwimi 11, 30, 0, 24, 31\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 0, 0, 27\n\t" + "xor 9, 9, 28\n\t" + "xor 10, 10, 29\n\t" + "xor 11, 11, 30\n\t" + "lwz 12, 0(%[in])\n\t" + "lwz 14, 4(%[in])\n\t" + "lwz 15, 8(%[in])\n\t" + "lwz 16, 12(%[in])\n\t" + "xor 0, 0, 12\n\t" + "xor 9, 9, 14\n\t" + "xor 10, 10, 15\n\t" + "xor 11, 11, 16\n\t" + "stw 0, 0(%[out])\n\t" + "stw 9, 4(%[out])\n\t" + "stw 10, 8(%[out])\n\t" + "stw 11, 12(%[out])\n\t" + "addic 20, 20, 1\n\t" + "addze 19, 19\n\t" + "addze 18, 18\n\t" + "addze 17, 17\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CTR_encrypt_block_%=\n\t" + "stw 17, 0(%[ctr])\n\t" + "stw 18, 4(%[ctr])\n\t" + "stw 19, 8(%[ctr])\n\t" + "stw 20, 12(%[ctr])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [ctr] "+r" (ctr), + [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [ctr] "r" (ctr), + [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "10", "11", "12", "14", "15", "16", "17", "18", + "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", + "30" + ); +} + +#endif /* WOLFSSL_AES_COUNTER */ +#ifdef HAVE_AESGCM +void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* ctr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* ctr_p) +#else +WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* ctr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("7") = (int)nr_p; + register unsigned char* ctr __asm__ ("8") = (unsigned char*)ctr_p; + register word32* L_AES_PPC32_te_c __asm__ ("9") = (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 21, %[L_AES_PPC32_te]\n\t" + "addi 22, 21, 0x400\n\t" + "addi 23, 21, 0x800\n\t" + "addi 24, 21, 0xc00\n\t" + "lwz 17, 0(%[ctr])\n\t" + "lwz 18, 4(%[ctr])\n\t" + "lwz 19, 8(%[ctr])\n\t" + "lwz 20, 12(%[ctr])\n\t" + "\n" + "L_AES_GCM_encrypt_block_%=:\n\t" + "addi 20, 20, 1\n\t" + "mr 0, 17\n\t" + "mr 9, 18\n\t" + "mr 10, 19\n\t" + "mr 11, 20\n\t" + "mr 25, %[ks]\n\t" + "addi 26, %[nr], -2\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 0, 0, 27\n\t" + "xor 9, 9, 28\n\t" + "xor 10, 10, 29\n\t" + "xor 11, 11, 30\n\t" + "addi 25, 25, 16\n\t" + "srwi 26, 26, 1\n\t" + "mtctr 26\n\t" + "\n" + "L_AES_GCM_encrypt_round_%=:\n\t" + "rlwinm 27, 0, 10, 22, 29\n\t" + "rlwinm 28, 9, 18, 22, 29\n\t" + "rlwinm 29, 10, 26, 22, 29\n\t" + "rlwinm 30, 11, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 12, 27, 29\n\t" + "rlwinm 27, 9, 10, 22, 29\n\t" + "rlwinm 28, 10, 18, 22, 29\n\t" + "rlwinm 29, 11, 26, 22, 29\n\t" + "rlwinm 30, 0, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 14, 27, 29\n\t" + "rlwinm 27, 10, 10, 22, 29\n\t" + "rlwinm 28, 11, 18, 22, 29\n\t" + "rlwinm 29, 0, 26, 22, 29\n\t" + "rlwinm 30, 9, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 15, 27, 29\n\t" + "rlwinm 27, 11, 10, 22, 29\n\t" + "rlwinm 28, 0, 18, 22, 29\n\t" + "rlwinm 29, 9, 26, 22, 29\n\t" + "rlwinm 30, 10, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 16, 27, 29\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 12, 12, 27\n\t" + "xor 14, 14, 28\n\t" + "xor 15, 15, 29\n\t" + "xor 16, 16, 30\n\t" + "addi 25, 25, 16\n\t" + "rlwinm 27, 12, 10, 22, 29\n\t" + "rlwinm 28, 14, 18, 22, 29\n\t" + "rlwinm 29, 15, 26, 22, 29\n\t" + "rlwinm 30, 16, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 0, 27, 29\n\t" + "rlwinm 27, 14, 10, 22, 29\n\t" + "rlwinm 28, 15, 18, 22, 29\n\t" + "rlwinm 29, 16, 26, 22, 29\n\t" + "rlwinm 30, 12, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 9, 27, 29\n\t" + "rlwinm 27, 15, 10, 22, 29\n\t" + "rlwinm 28, 16, 18, 22, 29\n\t" + "rlwinm 29, 12, 26, 22, 29\n\t" + "rlwinm 30, 14, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 10, 27, 29\n\t" + "rlwinm 27, 16, 10, 22, 29\n\t" + "rlwinm 28, 12, 18, 22, 29\n\t" + "rlwinm 29, 14, 26, 22, 29\n\t" + "rlwinm 30, 15, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 11, 27, 29\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 0, 0, 27\n\t" + "xor 9, 9, 28\n\t" + "xor 10, 10, 29\n\t" + "xor 11, 11, 30\n\t" + "addi 25, 25, 16\n\t" + "bdnz L_AES_GCM_encrypt_round_%=\n\t" + "rlwinm 27, 0, 10, 22, 29\n\t" + "rlwinm 28, 9, 18, 22, 29\n\t" + "rlwinm 29, 10, 26, 22, 29\n\t" + "rlwinm 30, 11, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 12, 27, 29\n\t" + "rlwinm 27, 9, 10, 22, 29\n\t" + "rlwinm 28, 10, 18, 22, 29\n\t" + "rlwinm 29, 11, 26, 22, 29\n\t" + "rlwinm 30, 0, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 14, 27, 29\n\t" + "rlwinm 27, 10, 10, 22, 29\n\t" + "rlwinm 28, 11, 18, 22, 29\n\t" + "rlwinm 29, 0, 26, 22, 29\n\t" + "rlwinm 30, 9, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 15, 27, 29\n\t" + "rlwinm 27, 11, 10, 22, 29\n\t" + "rlwinm 28, 0, 18, 22, 29\n\t" + "rlwinm 29, 9, 26, 22, 29\n\t" + "rlwinm 30, 10, 2, 22, 29\n\t" + "lwzx 27, 21, 27\n\t" + "lwzx 28, 22, 28\n\t" + "lwzx 29, 23, 29\n\t" + "lwzx 30, 24, 30\n\t" + "xor 27, 27, 28\n\t" + "xor 29, 29, 30\n\t" + "xor 16, 27, 29\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 12, 12, 27\n\t" + "xor 14, 14, 28\n\t" + "xor 15, 15, 29\n\t" + "xor 16, 16, 30\n\t" + "addi 25, 25, 16\n\t" + "rlwinm 27, 12, 10, 22, 29\n\t" + "rlwinm 28, 14, 18, 22, 29\n\t" + "rlwinm 29, 15, 26, 22, 29\n\t" + "rlwinm 30, 16, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 0, 27, 0, 0, 7\n\t" + "rlwimi 0, 28, 0, 8, 15\n\t" + "rlwimi 0, 29, 0, 16, 23\n\t" + "rlwimi 0, 30, 0, 24, 31\n\t" + "rlwinm 27, 14, 10, 22, 29\n\t" + "rlwinm 28, 15, 18, 22, 29\n\t" + "rlwinm 29, 16, 26, 22, 29\n\t" + "rlwinm 30, 12, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 9, 27, 0, 0, 7\n\t" + "rlwimi 9, 28, 0, 8, 15\n\t" + "rlwimi 9, 29, 0, 16, 23\n\t" + "rlwimi 9, 30, 0, 24, 31\n\t" + "rlwinm 27, 15, 10, 22, 29\n\t" + "rlwinm 28, 16, 18, 22, 29\n\t" + "rlwinm 29, 12, 26, 22, 29\n\t" + "rlwinm 30, 14, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 10, 27, 0, 0, 7\n\t" + "rlwimi 10, 28, 0, 8, 15\n\t" + "rlwimi 10, 29, 0, 16, 23\n\t" + "rlwimi 10, 30, 0, 24, 31\n\t" + "rlwinm 27, 16, 10, 22, 29\n\t" + "rlwinm 28, 12, 18, 22, 29\n\t" + "rlwinm 29, 14, 26, 22, 29\n\t" + "rlwinm 30, 15, 2, 22, 29\n\t" + "lwzx 27, 23, 27\n\t" + "lwzx 28, 24, 28\n\t" + "lwzx 29, 21, 29\n\t" + "lwzx 30, 22, 30\n\t" + "rlwinm 11, 27, 0, 0, 7\n\t" + "rlwimi 11, 28, 0, 8, 15\n\t" + "rlwimi 11, 29, 0, 16, 23\n\t" + "rlwimi 11, 30, 0, 24, 31\n\t" + "lwz 27, 0(25)\n\t" + "lwz 28, 4(25)\n\t" + "lwz 29, 8(25)\n\t" + "lwz 30, 12(25)\n\t" + "xor 0, 0, 27\n\t" + "xor 9, 9, 28\n\t" + "xor 10, 10, 29\n\t" + "xor 11, 11, 30\n\t" + "lwz 12, 0(%[in])\n\t" + "lwz 14, 4(%[in])\n\t" + "lwz 15, 8(%[in])\n\t" + "lwz 16, 12(%[in])\n\t" + "xor 0, 0, 12\n\t" + "xor 9, 9, 14\n\t" + "xor 10, 10, 15\n\t" + "xor 11, 11, 16\n\t" + "stw 0, 0(%[out])\n\t" + "stw 9, 4(%[out])\n\t" + "stw 10, 8(%[out])\n\t" + "stw 11, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_GCM_encrypt_block_%=\n\t" + "stw 17, 0(%[ctr])\n\t" + "stw 18, 4(%[ctr])\n\t" + "stw 19, 8(%[ctr])\n\t" + "stw 20, 12(%[ctr])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [ctr] "+r" (ctr), + [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [ctr] "r" (ctr), + [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "10", "11", "12", "14", "15", "16", "17", "18", + "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", + "30" + ); +} + +#endif /* HAVE_AESGCM */ +#ifdef GCM_TABLE_4BIT +XALIGNED(8) static const word32 L_GCM_gmult_len_r[] = { + 0x00000000, 0x1c200000, 0x38400000, 0x24600000, + 0x70800000, 0x6ca00000, 0x48c00000, 0x54e00000, + 0xe1000000, 0xfd200000, 0xd9400000, 0xc5600000, + 0x91800000, 0x8da00000, 0xa9c00000, 0xb5e00000, + 0x00000000, 0x01c20000, 0x03840000, 0x02460000, + 0x07080000, 0x06ca0000, 0x048c0000, 0x054e0000, + 0x0e100000, 0x0fd20000, 0x0d940000, 0x0c560000, + 0x09180000, 0x08da0000, 0x0a9c0000, 0x0b5e0000, +}; + +void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p, + const unsigned char* data_p, unsigned long len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p, + const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p) +#else +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x, + const unsigned char** m, const unsigned char* data, unsigned long len) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* x __asm__ ("3") = (unsigned char*)x_p; + register const unsigned char** m __asm__ ("4") = + (const unsigned char**)m_p; + register const unsigned char* data __asm__ ("5") = + (const unsigned char*)data_p; + register unsigned long len __asm__ ("6") = (unsigned long)len_p; + register word32* L_GCM_gmult_len_r_c __asm__ ("7") = + (word32*)&L_GCM_gmult_len_r; +#else + register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 10, %[L_GCM_gmult_len_r]\n\t" + "addi 11, 10, 0x40\n\t" + "srwi %[len], %[len], 4\n\t" + "mtctr %[len]\n\t" + /* Process a 16-byte block */ + "\n" + "L_GCM_gmult_len_block_%=:\n\t" + "lwz 0, 0(%[x])\n\t" + "lwz 7, 4(%[x])\n\t" + "lwz 8, 8(%[x])\n\t" + "lwz 9, 12(%[x])\n\t" + "lwz 18, 0(%[data])\n\t" + "lwz 19, 4(%[data])\n\t" + "lwz 20, 8(%[data])\n\t" + "lwz 21, 12(%[data])\n\t" + "xor 0, 0, 18\n\t" + "xor 7, 7, 19\n\t" + "xor 8, 8, 20\n\t" + "xor 9, 9, 21\n\t" + /* Byte 15 */ + "rlwinm 25, 9, 0, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 14, 0(12)\n\t" + "lwz 15, 4(12)\n\t" + "lwz 16, 8(12)\n\t" + "lwz 17, 12(12)\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 14 */ + "rlwinm 25, 9, 24, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 13 */ + "rlwinm 25, 9, 16, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 12 */ + "rlwinm 25, 9, 8, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 11 */ + "rlwinm 25, 8, 0, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 10 */ + "rlwinm 25, 8, 24, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 9 */ + "rlwinm 25, 8, 16, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 8 */ + "rlwinm 25, 8, 8, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 7 */ + "rlwinm 25, 7, 0, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 6 */ + "rlwinm 25, 7, 24, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 5 */ + "rlwinm 25, 7, 16, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 4 */ + "rlwinm 25, 7, 8, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 3 */ + "rlwinm 25, 0, 0, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 2 */ + "rlwinm 25, 0, 24, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 1 */ + "rlwinm 25, 0, 16, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 24, 31\n\t" + "srwi 17, 17, 8\n\t" + "rlwimi 17, 16, 24, 0, 7\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 11, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 21, 12(12)\n\t" + "rlwinm 24, 21, 20, 28, 31\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 24, 21, 4, 24, 27\n\t" + "xor 22, 22, 24\n\t" + "rlwinm 23, 22, 30, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "addi 12, 12, 0x100\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + /* Byte 0 */ + "rlwinm 25, 0, 8, 24, 31\n\t" + "rlwinm 23, 25, 4, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "rlwinm 22, 17, 0, 28, 31\n\t" + "srwi 17, 17, 4\n\t" + "rlwimi 17, 16, 28, 0, 3\n\t" + "srwi 16, 16, 4\n\t" + "rlwimi 16, 15, 28, 0, 3\n\t" + "srwi 15, 15, 4\n\t" + "rlwimi 15, 14, 28, 0, 3\n\t" + "srwi 14, 14, 4\n\t" + "rlwinm 23, 22, 2, 26, 29\n\t" + "lwzx 24, 10, 23\n\t" + "xor 14, 14, 24\n\t" + "rlwinm 23, 25, 0, 24, 27\n\t" + "add 12, %[m], 23\n\t" + "lwz 18, 0(12)\n\t" + "lwz 19, 4(12)\n\t" + "lwz 20, 8(12)\n\t" + "lwz 21, 12(12)\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "xor 17, 17, 21\n\t" + "stw 14, 0(%[x])\n\t" + "stw 15, 4(%[x])\n\t" + "stw 16, 8(%[x])\n\t" + "stw 17, 12(%[x])\n\t" + "addi %[data], %[data], 16\n\t" + "bdnz L_GCM_gmult_len_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len), + [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c) + : +#else + : + : [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len), + [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "8", "9", "10", "11", "12", "14", "15", "16", + "17", "18", "19", "20", "21", "22", "23", "24", "25" + ); +} + +#endif /* GCM_TABLE_4BIT */ +#ifdef GCM_TABLE +XALIGNED(4) static const word8 L_GCM_gmult_len_r[] = { + 0x00, 0x00, 0x01, 0xc2, 0x03, 0x84, 0x02, 0x46, + 0x07, 0x08, 0x06, 0xca, 0x04, 0x8c, 0x05, 0x4e, + 0x0e, 0x10, 0x0f, 0xd2, 0x0d, 0x94, 0x0c, 0x56, + 0x09, 0x18, 0x08, 0xda, 0x0a, 0x9c, 0x0b, 0x5e, + 0x1c, 0x20, 0x1d, 0xe2, 0x1f, 0xa4, 0x1e, 0x66, + 0x1b, 0x28, 0x1a, 0xea, 0x18, 0xac, 0x19, 0x6e, + 0x12, 0x30, 0x13, 0xf2, 0x11, 0xb4, 0x10, 0x76, + 0x15, 0x38, 0x14, 0xfa, 0x16, 0xbc, 0x17, 0x7e, + 0x38, 0x40, 0x39, 0x82, 0x3b, 0xc4, 0x3a, 0x06, + 0x3f, 0x48, 0x3e, 0x8a, 0x3c, 0xcc, 0x3d, 0x0e, + 0x36, 0x50, 0x37, 0x92, 0x35, 0xd4, 0x34, 0x16, + 0x31, 0x58, 0x30, 0x9a, 0x32, 0xdc, 0x33, 0x1e, + 0x24, 0x60, 0x25, 0xa2, 0x27, 0xe4, 0x26, 0x26, + 0x23, 0x68, 0x22, 0xaa, 0x20, 0xec, 0x21, 0x2e, + 0x2a, 0x70, 0x2b, 0xb2, 0x29, 0xf4, 0x28, 0x36, + 0x2d, 0x78, 0x2c, 0xba, 0x2e, 0xfc, 0x2f, 0x3e, + 0x70, 0x80, 0x71, 0x42, 0x73, 0x04, 0x72, 0xc6, + 0x77, 0x88, 0x76, 0x4a, 0x74, 0x0c, 0x75, 0xce, + 0x7e, 0x90, 0x7f, 0x52, 0x7d, 0x14, 0x7c, 0xd6, + 0x79, 0x98, 0x78, 0x5a, 0x7a, 0x1c, 0x7b, 0xde, + 0x6c, 0xa0, 0x6d, 0x62, 0x6f, 0x24, 0x6e, 0xe6, + 0x6b, 0xa8, 0x6a, 0x6a, 0x68, 0x2c, 0x69, 0xee, + 0x62, 0xb0, 0x63, 0x72, 0x61, 0x34, 0x60, 0xf6, + 0x65, 0xb8, 0x64, 0x7a, 0x66, 0x3c, 0x67, 0xfe, + 0x48, 0xc0, 0x49, 0x02, 0x4b, 0x44, 0x4a, 0x86, + 0x4f, 0xc8, 0x4e, 0x0a, 0x4c, 0x4c, 0x4d, 0x8e, + 0x46, 0xd0, 0x47, 0x12, 0x45, 0x54, 0x44, 0x96, + 0x41, 0xd8, 0x40, 0x1a, 0x42, 0x5c, 0x43, 0x9e, + 0x54, 0xe0, 0x55, 0x22, 0x57, 0x64, 0x56, 0xa6, + 0x53, 0xe8, 0x52, 0x2a, 0x50, 0x6c, 0x51, 0xae, + 0x5a, 0xf0, 0x5b, 0x32, 0x59, 0x74, 0x58, 0xb6, + 0x5d, 0xf8, 0x5c, 0x3a, 0x5e, 0x7c, 0x5f, 0xbe, + 0xe1, 0x00, 0xe0, 0xc2, 0xe2, 0x84, 0xe3, 0x46, + 0xe6, 0x08, 0xe7, 0xca, 0xe5, 0x8c, 0xe4, 0x4e, + 0xef, 0x10, 0xee, 0xd2, 0xec, 0x94, 0xed, 0x56, + 0xe8, 0x18, 0xe9, 0xda, 0xeb, 0x9c, 0xea, 0x5e, + 0xfd, 0x20, 0xfc, 0xe2, 0xfe, 0xa4, 0xff, 0x66, + 0xfa, 0x28, 0xfb, 0xea, 0xf9, 0xac, 0xf8, 0x6e, + 0xf3, 0x30, 0xf2, 0xf2, 0xf0, 0xb4, 0xf1, 0x76, + 0xf4, 0x38, 0xf5, 0xfa, 0xf7, 0xbc, 0xf6, 0x7e, + 0xd9, 0x40, 0xd8, 0x82, 0xda, 0xc4, 0xdb, 0x06, + 0xde, 0x48, 0xdf, 0x8a, 0xdd, 0xcc, 0xdc, 0x0e, + 0xd7, 0x50, 0xd6, 0x92, 0xd4, 0xd4, 0xd5, 0x16, + 0xd0, 0x58, 0xd1, 0x9a, 0xd3, 0xdc, 0xd2, 0x1e, + 0xc5, 0x60, 0xc4, 0xa2, 0xc6, 0xe4, 0xc7, 0x26, + 0xc2, 0x68, 0xc3, 0xaa, 0xc1, 0xec, 0xc0, 0x2e, + 0xcb, 0x70, 0xca, 0xb2, 0xc8, 0xf4, 0xc9, 0x36, + 0xcc, 0x78, 0xcd, 0xba, 0xcf, 0xfc, 0xce, 0x3e, + 0x91, 0x80, 0x90, 0x42, 0x92, 0x04, 0x93, 0xc6, + 0x96, 0x88, 0x97, 0x4a, 0x95, 0x0c, 0x94, 0xce, + 0x9f, 0x90, 0x9e, 0x52, 0x9c, 0x14, 0x9d, 0xd6, + 0x98, 0x98, 0x99, 0x5a, 0x9b, 0x1c, 0x9a, 0xde, + 0x8d, 0xa0, 0x8c, 0x62, 0x8e, 0x24, 0x8f, 0xe6, + 0x8a, 0xa8, 0x8b, 0x6a, 0x89, 0x2c, 0x88, 0xee, + 0x83, 0xb0, 0x82, 0x72, 0x80, 0x34, 0x81, 0xf6, + 0x84, 0xb8, 0x85, 0x7a, 0x87, 0x3c, 0x86, 0xfe, + 0xa9, 0xc0, 0xa8, 0x02, 0xaa, 0x44, 0xab, 0x86, + 0xae, 0xc8, 0xaf, 0x0a, 0xad, 0x4c, 0xac, 0x8e, + 0xa7, 0xd0, 0xa6, 0x12, 0xa4, 0x54, 0xa5, 0x96, + 0xa0, 0xd8, 0xa1, 0x1a, 0xa3, 0x5c, 0xa2, 0x9e, + 0xb5, 0xe0, 0xb4, 0x22, 0xb6, 0x64, 0xb7, 0xa6, + 0xb2, 0xe8, 0xb3, 0x2a, 0xb1, 0x6c, 0xb0, 0xae, + 0xbb, 0xf0, 0xba, 0x32, 0xb8, 0x74, 0xb9, 0xb6, + 0xbc, 0xf8, 0xbd, 0x3a, 0xbf, 0x7c, 0xbe, 0xbe, +}; + +void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p, + const unsigned char* data_p, unsigned long len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p, + const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p) +#else +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x, + const unsigned char** m, const unsigned char* data, unsigned long len) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* x __asm__ ("3") = (unsigned char*)x_p; + register const unsigned char** m __asm__ ("4") = + (const unsigned char**)m_p; + register const unsigned char* data __asm__ ("5") = + (const unsigned char*)data_p; + register unsigned long len __asm__ ("6") = (unsigned long)len_p; + register word8* L_GCM_gmult_len_r_c __asm__ ("7") = + (word8*)&L_GCM_gmult_len_r; +#else + register word8* L_GCM_gmult_len_r_c = (word8*)&L_GCM_gmult_len_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 10, %[L_GCM_gmult_len_r]\n\t" + "srwi %[len], %[len], 4\n\t" + "mtctr %[len]\n\t" + /* Process a 16-byte block */ + "\n" + "L_GCM_gmult_len_block_%=:\n\t" + "lwz 0, 0(%[x])\n\t" + "lwz 7, 4(%[x])\n\t" + "lwz 8, 8(%[x])\n\t" + "lwz 9, 12(%[x])\n\t" + "lwz 17, 0(%[data])\n\t" + "lwz 18, 4(%[data])\n\t" + "lwz 19, 8(%[data])\n\t" + "lwz 20, 12(%[data])\n\t" + "xor 0, 0, 17\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "xor 9, 9, 20\n\t" + /* Byte 15 */ + "rlwinm 21, 9, 4, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 12, 0(11)\n\t" + "lwz 14, 4(11)\n\t" + "lwz 15, 8(11)\n\t" + "lwz 16, 12(11)\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 14 */ + "rlwinm 21, 9, 28, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 13 */ + "rlwinm 21, 9, 20, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 12 */ + "rlwinm 21, 9, 12, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 11 */ + "rlwinm 21, 8, 4, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 10 */ + "rlwinm 21, 8, 28, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 9 */ + "rlwinm 21, 8, 20, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 8 */ + "rlwinm 21, 8, 12, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 7 */ + "rlwinm 21, 7, 4, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 6 */ + "rlwinm 21, 7, 28, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 5 */ + "rlwinm 21, 7, 20, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 4 */ + "rlwinm 21, 7, 12, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 3 */ + "rlwinm 21, 0, 4, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 2 */ + "rlwinm 21, 0, 28, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 1 */ + "rlwinm 21, 0, 20, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "rlwinm 21, 16, 1, 23, 30\n\t" + "srwi 16, 16, 8\n\t" + "rlwimi 16, 15, 24, 0, 7\n\t" + "srwi 15, 15, 8\n\t" + "rlwimi 15, 14, 24, 0, 7\n\t" + "srwi 14, 14, 8\n\t" + "rlwimi 14, 12, 24, 0, 7\n\t" + "srwi 12, 12, 8\n\t" + "lhzx 22, 21, 10\n\t" + "slwi 22, 22, 16\n\t" + "xor 12, 12, 22\n\t" + /* Byte 0 */ + "rlwinm 21, 0, 12, 20, 27\n\t" + "add 11, %[m], 21\n\t" + "lwz 17, 0(11)\n\t" + "lwz 18, 4(11)\n\t" + "lwz 19, 8(11)\n\t" + "lwz 20, 12(11)\n\t" + "xor 12, 12, 17\n\t" + "xor 14, 14, 18\n\t" + "xor 15, 15, 19\n\t" + "xor 16, 16, 20\n\t" + "stw 12, 0(%[x])\n\t" + "stw 14, 4(%[x])\n\t" + "stw 15, 8(%[x])\n\t" + "stw 16, 12(%[x])\n\t" + "addi %[data], %[data], 16\n\t" + "bdnz L_GCM_gmult_len_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len), + [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c) + : +#else + : + : [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len), + [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "8", "9", "10", "11", "12", "14", "15", "16", + "17", "18", "19", "20", "21", "22" + ); +} + +#endif /* GCM_TABLE */ +#endif /* !defined(NO_AES) && defined(WOLFSSL_PPC32_ASM) */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-aes-asm_cr.c b/wolfcrypt/src/port/ppc32/ppc32-aes-asm_cr.c new file mode 100644 index 00000000000..9fe1c3bcfe3 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-aes-asm_cr.c @@ -0,0 +1,4109 @@ +/* ppc32-aes-asm + * + * Copyright (C) 2006-2026 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 ./aes/aes.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-aes-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#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__ */ + +#include + +#if !defined(NO_AES) && defined(WOLFSSL_PPC32_ASM) +XALIGNED(8) static const word32 L_AES_PPC32_te[] = { + 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, + 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, + 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, + 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, + 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, + 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, + 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, + 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, + 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, + 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, + 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, + 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, + 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, + 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, + 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, + 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, + 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, + 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, + 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, + 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, + 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, + 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, + 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, + 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, + 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, + 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, + 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, + 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, + 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, + 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, + 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, + 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, + 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, + 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, + 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, + 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, + 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, + 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, + 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, + 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, + 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, + 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, + 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, + 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, + 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, + 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, + 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, + 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, + 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, + 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, + 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, + 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, + 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, + 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, + 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, + 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, + 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, + 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, + 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, + 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, + 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, + 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, + 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, + 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a, + 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, + 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, + 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, + 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, + 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, + 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, + 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, + 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, + 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, + 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, + 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, + 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, + 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, + 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, + 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, + 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, + 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, + 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, + 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, + 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, + 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, + 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, + 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, + 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, + 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, + 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, + 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, + 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, + 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, + 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, + 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, + 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, + 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, + 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, + 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, + 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, + 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, + 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, + 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, + 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, + 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, + 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, + 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, + 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, + 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, + 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, + 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, + 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, + 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, + 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, + 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, + 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, + 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, + 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, + 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, + 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, + 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, + 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, + 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, + 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, + 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, + 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, + 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, + 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616, + 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, + 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, + 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, + 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, + 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, + 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, + 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, + 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, + 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, + 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, + 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, + 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, + 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, + 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, + 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, + 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, + 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, + 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, + 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, + 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, + 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, + 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, + 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, + 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, + 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, + 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, + 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, + 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, + 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, + 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, + 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, + 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, + 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, + 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, + 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, + 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, + 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, + 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, + 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, + 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, + 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, + 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, + 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, + 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, + 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, + 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, + 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, + 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, + 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, + 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, + 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, + 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, + 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, + 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, + 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, + 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, + 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, + 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, + 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, + 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, + 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, + 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, + 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, + 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16, + 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, + 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, + 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, + 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, + 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, + 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, + 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, + 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, + 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, + 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, + 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, + 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, + 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, + 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, + 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, + 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, + 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, + 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, + 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, + 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, + 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, + 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, + 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, + 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, + 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, + 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, + 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, + 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, + 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, + 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, + 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, + 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, + 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, + 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, + 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, + 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, + 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, + 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, + 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, + 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, + 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, + 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, + 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, + 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, + 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, + 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, + 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, + 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, + 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, + 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, + 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, + 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, + 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, + 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, + 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, + 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, + 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, + 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, + 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, + 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, + 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, + 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, + 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, + 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c, +}; + +XALIGNED(8) static const word32 L_AES_PPC32_td[] = { + 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, + 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, + 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, + 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, + 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, + 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, + 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, + 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, + 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, + 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, + 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, + 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, + 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, + 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, + 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, + 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, + 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, + 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, + 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, + 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, + 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, + 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, + 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, + 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, + 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, + 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, + 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, + 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, + 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, + 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, + 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, + 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, + 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, + 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, + 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, + 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, + 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, + 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, + 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, + 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, + 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, + 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, + 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, + 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, + 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, + 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, + 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, + 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, + 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, + 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, + 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, + 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, + 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, + 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, + 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, + 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, + 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, + 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, + 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, + 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, + 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, + 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, + 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, + 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742, + 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, + 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, + 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, + 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, + 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, + 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, + 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, + 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, + 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, + 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, + 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, + 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, + 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, + 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, + 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, + 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, + 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, + 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, + 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, + 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, + 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, + 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, + 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, + 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, + 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, + 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, + 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, + 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, + 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, + 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, + 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, + 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, + 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, + 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, + 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, + 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, + 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, + 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, + 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, + 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, + 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, + 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, + 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, + 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, + 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, + 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, + 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, + 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, + 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, + 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, + 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, + 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, + 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, + 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, + 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, + 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, + 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, + 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, + 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, + 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, + 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, + 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, + 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, + 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857, + 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, + 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, + 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, + 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, + 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, + 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, + 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, + 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, + 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, + 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, + 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, + 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, + 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, + 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, + 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, + 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, + 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, + 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, + 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, + 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, + 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, + 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, + 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, + 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, + 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, + 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, + 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, + 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, + 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, + 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, + 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, + 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, + 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, + 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, + 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, + 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, + 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, + 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, + 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, + 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, + 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, + 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, + 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, + 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, + 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, + 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, + 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, + 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, + 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, + 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, + 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, + 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, + 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, + 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, + 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, + 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, + 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, + 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, + 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, + 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, + 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, + 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, + 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, + 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8, + 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, + 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, + 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, + 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, + 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, + 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, + 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, + 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, + 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, + 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, + 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, + 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, + 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, + 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, + 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, + 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, + 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, + 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, + 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, + 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, + 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, + 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, + 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, + 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, + 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, + 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, + 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, + 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, + 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, + 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, + 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, + 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, + 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, + 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, + 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, + 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, + 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, + 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, + 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, + 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, + 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, + 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, + 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, + 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, + 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, + 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, + 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, + 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, + 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, + 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, + 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, + 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, + 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, + 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, + 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, + 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, + 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, + 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, + 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, + 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, + 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, + 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, + 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, + 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0, +}; + +XALIGNED(4) static const word8 L_AES_PPC32_sbox[] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, +}; + +XALIGNED(4) static const word8 L_AES_PPC32_inv_sbox[] = { + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, + 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, + 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, + 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, + 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, + 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, + 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, + 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, + 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, + 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, + 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, + 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, +}; + +XALIGNED(8) static const word32 L_AES_PPC32_rcon[] = { + 0x01000000, 0x02000000, 0x04000000, 0x08000000, + 0x10000000, 0x20000000, 0x40000000, 0x80000000, + 0x1b000000, 0x36000000 +}; + +void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p, + unsigned char* ks_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key_p, + word32 len_p, unsigned char* ks_p) +#else +WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key, + word32 len, unsigned char* ks) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* key __asm__ ("r3") = + (const unsigned char*)key_p; + register word32 len __asm__ ("r4") = (word32)len_p; + register unsigned char* ks __asm__ ("r5") = (unsigned char*)ks_p; + register word8* L_AES_PPC32_sbox_c __asm__ ("r6") = + (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_rcon_c __asm__ ("r7") = + (word32*)&L_AES_PPC32_rcon; +#else + register word8* L_AES_PPC32_sbox_c = (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_rcon_c = (word32*)&L_AES_PPC32_rcon; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r14, %[L_AES_PPC32_sbox]\n\t" + "mr r15, %[L_AES_PPC32_rcon]\n\t" + "cmplwi %[len], 0x80\n\t" + "beq L_AES_set_encrypt_key_128_%=\n\t" + "cmplwi %[len], 0xc0\n\t" + "beq L_AES_set_encrypt_key_192_%=\n\t" + "lwz r0, 0(%[key])\n\t" + "lwz r6, 4(%[key])\n\t" + "lwz r7, 8(%[key])\n\t" + "lwz r8, 12(%[key])\n\t" + "lwz r9, 16(%[key])\n\t" + "lwz r10, 20(%[key])\n\t" + "lwz r11, 24(%[key])\n\t" + "lwz r12, 28(%[key])\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "stw r9, 16(%[ks])\n\t" + "stw r10, 20(%[ks])\n\t" + "stw r11, 24(%[ks])\n\t" + "stw r12, 28(%[ks])\n\t" + "addi %[ks], %[ks], 32\n\t" + "li r17, 6\n\t" + "mtctr r17\n\t" + "\n" + "L_AES_set_encrypt_key_loop_256_%=:\n\t" + "rlwinm r17, r12, 16, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "slwi r16, r17, 24\n\t" + "rlwinm r17, r12, 24, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 16, 8, 15\n\t" + "rlwinm r17, r12, 0, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 8, 16, 23\n\t" + "rlwinm r17, r12, 8, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 0, 24, 31\n\t" + "lwz r17, 0(r15)\n\t" + "addi r15, r15, 4\n\t" + "xor r0, r0, r16\n\t" + "xor r0, r0, r17\n\t" + "xor r6, r6, r0\n\t" + "xor r7, r7, r6\n\t" + "xor r8, r8, r7\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "rlwinm r17, r8, 8, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "slwi r16, r17, 24\n\t" + "rlwinm r17, r8, 16, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 16, 8, 15\n\t" + "rlwinm r17, r8, 24, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 8, 16, 23\n\t" + "rlwinm r17, r8, 0, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 0, 24, 31\n\t" + "xor r9, r9, r16\n\t" + "xor r10, r10, r9\n\t" + "xor r11, r11, r10\n\t" + "xor r12, r12, r11\n\t" + "stw r9, 16(%[ks])\n\t" + "stw r10, 20(%[ks])\n\t" + "stw r11, 24(%[ks])\n\t" + "stw r12, 28(%[ks])\n\t" + "addi %[ks], %[ks], 32\n\t" + "bdnz L_AES_set_encrypt_key_loop_256_%=\n\t" + "rlwinm r17, r12, 16, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "slwi r16, r17, 24\n\t" + "rlwinm r17, r12, 24, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 16, 8, 15\n\t" + "rlwinm r17, r12, 0, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 8, 16, 23\n\t" + "rlwinm r17, r12, 8, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 0, 24, 31\n\t" + "lwz r17, 0(r15)\n\t" + "addi r15, r15, 4\n\t" + "xor r0, r0, r16\n\t" + "xor r0, r0, r17\n\t" + "xor r6, r6, r0\n\t" + "xor r7, r7, r6\n\t" + "xor r8, r8, r7\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "b L_AES_set_encrypt_key_end_%=\n\t" + "\n" + "L_AES_set_encrypt_key_192_%=:\n\t" + "lwz r0, 0(%[key])\n\t" + "lwz r6, 4(%[key])\n\t" + "lwz r7, 8(%[key])\n\t" + "lwz r8, 12(%[key])\n\t" + "lwz r9, 16(%[key])\n\t" + "lwz r10, 20(%[key])\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "stw r9, 16(%[ks])\n\t" + "stw r10, 20(%[ks])\n\t" + "addi %[ks], %[ks], 24\n\t" + "li r17, 7\n\t" + "mtctr r17\n\t" + "\n" + "L_AES_set_encrypt_key_loop_192_%=:\n\t" + "rlwinm r17, r10, 16, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "slwi r16, r17, 24\n\t" + "rlwinm r17, r10, 24, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 16, 8, 15\n\t" + "rlwinm r17, r10, 0, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 8, 16, 23\n\t" + "rlwinm r17, r10, 8, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 0, 24, 31\n\t" + "lwz r17, 0(r15)\n\t" + "addi r15, r15, 4\n\t" + "xor r0, r0, r16\n\t" + "xor r0, r0, r17\n\t" + "xor r6, r6, r0\n\t" + "xor r7, r7, r6\n\t" + "xor r8, r8, r7\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "xor r9, r9, r8\n\t" + "xor r10, r10, r9\n\t" + "stw r9, 16(%[ks])\n\t" + "stw r10, 20(%[ks])\n\t" + "addi %[ks], %[ks], 24\n\t" + "bdnz L_AES_set_encrypt_key_loop_192_%=\n\t" + "rlwinm r17, r10, 16, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "slwi r16, r17, 24\n\t" + "rlwinm r17, r10, 24, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 16, 8, 15\n\t" + "rlwinm r17, r10, 0, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 8, 16, 23\n\t" + "rlwinm r17, r10, 8, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 0, 24, 31\n\t" + "lwz r17, 0(r15)\n\t" + "addi r15, r15, 4\n\t" + "xor r0, r0, r16\n\t" + "xor r0, r0, r17\n\t" + "xor r6, r6, r0\n\t" + "xor r7, r7, r6\n\t" + "xor r8, r8, r7\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "b L_AES_set_encrypt_key_end_%=\n\t" + "\n" + "L_AES_set_encrypt_key_128_%=:\n\t" + "lwz r0, 0(%[key])\n\t" + "lwz r6, 4(%[key])\n\t" + "lwz r7, 8(%[key])\n\t" + "lwz r8, 12(%[key])\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "li r17, 10\n\t" + "mtctr r17\n\t" + "\n" + "L_AES_set_encrypt_key_loop_128_%=:\n\t" + "rlwinm r17, r8, 16, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "slwi r16, r17, 24\n\t" + "rlwinm r17, r8, 24, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 16, 8, 15\n\t" + "rlwinm r17, r8, 0, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 8, 16, 23\n\t" + "rlwinm r17, r8, 8, 24, 31\n\t" + "lbzx r17, r14, r17\n\t" + "rlwimi r16, r17, 0, 24, 31\n\t" + "lwz r17, 0(r15)\n\t" + "addi r15, r15, 4\n\t" + "xor r0, r0, r16\n\t" + "xor r0, r0, r17\n\t" + "xor r6, r6, r0\n\t" + "xor r7, r7, r6\n\t" + "xor r8, r8, r7\n\t" + "stw r0, 0(%[ks])\n\t" + "stw r6, 4(%[ks])\n\t" + "stw r7, 8(%[ks])\n\t" + "stw r8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "bdnz L_AES_set_encrypt_key_loop_128_%=\n\t" + "\n" + "L_AES_set_encrypt_key_end_%=:\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks), + [L_AES_PPC32_sbox] "+r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_rcon] "+r" (L_AES_PPC32_rcon_c) + : +#else + : + : [key] "r" (key), [len] "r" (len), [ks] "r" (ks), + [L_AES_PPC32_sbox] "r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_rcon] "r" (L_AES_PPC32_rcon_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r8", "r9", "r10", "r11", "r12", "r14", "r15", + "r16", "r17" + ); +} + +void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p) +#else +WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("r3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("r4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("r5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("r6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("r7") = (int)nr_p; + register word32* L_AES_PPC32_te_c __asm__ ("r8") = + (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r16, %[L_AES_PPC32_te]\n\t" + "addi r17, r16, 0x400\n\t" + "addi r18, r16, 0x800\n\t" + "addi r19, r16, 0xc00\n\t" + "add r26, %[in], %[len]\n\t" + "\n" + "L_AES_ECB_encrypt_block_%=:\n\t" + "lwz r0, 0(%[in])\n\t" + "lwz r8, 4(%[in])\n\t" + "lwz r9, 8(%[in])\n\t" + "lwz r10, 12(%[in])\n\t" + "mr r20, %[ks]\n\t" + "addi r21, %[nr], -2\n\t" + "lwz r22, 0(r20)\n\t" + "lwz r23, 4(r20)\n\t" + "lwz r24, 8(r20)\n\t" + "lwz r25, 12(r20)\n\t" + "xor r0, r0, r22\n\t" + "xor r8, r8, r23\n\t" + "xor r9, r9, r24\n\t" + "xor r10, r10, r25\n\t" + "addi r20, r20, 16\n\t" + "srwi r21, r21, 1\n\t" + "mtctr r21\n\t" + "\n" + "L_AES_ECB_encrypt_round_%=:\n\t" + "rlwinm r22, r0, 10, 22, 29\n\t" + "rlwinm r23, r8, 18, 22, 29\n\t" + "rlwinm r24, r9, 26, 22, 29\n\t" + "rlwinm r25, r10, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r11, r22, r24\n\t" + "rlwinm r22, r8, 10, 22, 29\n\t" + "rlwinm r23, r9, 18, 22, 29\n\t" + "rlwinm r24, r10, 26, 22, 29\n\t" + "rlwinm r25, r0, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r12, r22, r24\n\t" + "rlwinm r22, r9, 10, 22, 29\n\t" + "rlwinm r23, r10, 18, 22, 29\n\t" + "rlwinm r24, r0, 26, 22, 29\n\t" + "rlwinm r25, r8, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r14, r22, r24\n\t" + "rlwinm r22, r10, 10, 22, 29\n\t" + "rlwinm r23, r0, 18, 22, 29\n\t" + "rlwinm r24, r8, 26, 22, 29\n\t" + "rlwinm r25, r9, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r15, r22, r24\n\t" + "lwz r22, 0(r20)\n\t" + "lwz r23, 4(r20)\n\t" + "lwz r24, 8(r20)\n\t" + "lwz r25, 12(r20)\n\t" + "xor r11, r11, r22\n\t" + "xor r12, r12, r23\n\t" + "xor r14, r14, r24\n\t" + "xor r15, r15, r25\n\t" + "addi r20, r20, 16\n\t" + "rlwinm r22, r11, 10, 22, 29\n\t" + "rlwinm r23, r12, 18, 22, 29\n\t" + "rlwinm r24, r14, 26, 22, 29\n\t" + "rlwinm r25, r15, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r0, r22, r24\n\t" + "rlwinm r22, r12, 10, 22, 29\n\t" + "rlwinm r23, r14, 18, 22, 29\n\t" + "rlwinm r24, r15, 26, 22, 29\n\t" + "rlwinm r25, r11, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r8, r22, r24\n\t" + "rlwinm r22, r14, 10, 22, 29\n\t" + "rlwinm r23, r15, 18, 22, 29\n\t" + "rlwinm r24, r11, 26, 22, 29\n\t" + "rlwinm r25, r12, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r9, r22, r24\n\t" + "rlwinm r22, r15, 10, 22, 29\n\t" + "rlwinm r23, r11, 18, 22, 29\n\t" + "rlwinm r24, r12, 26, 22, 29\n\t" + "rlwinm r25, r14, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r10, r22, r24\n\t" + "lwz r22, 0(r20)\n\t" + "lwz r23, 4(r20)\n\t" + "lwz r24, 8(r20)\n\t" + "lwz r25, 12(r20)\n\t" + "xor r0, r0, r22\n\t" + "xor r8, r8, r23\n\t" + "xor r9, r9, r24\n\t" + "xor r10, r10, r25\n\t" + "addi r20, r20, 16\n\t" + "bdnz L_AES_ECB_encrypt_round_%=\n\t" + "rlwinm r22, r0, 10, 22, 29\n\t" + "rlwinm r23, r8, 18, 22, 29\n\t" + "rlwinm r24, r9, 26, 22, 29\n\t" + "rlwinm r25, r10, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r11, r22, r24\n\t" + "rlwinm r22, r8, 10, 22, 29\n\t" + "rlwinm r23, r9, 18, 22, 29\n\t" + "rlwinm r24, r10, 26, 22, 29\n\t" + "rlwinm r25, r0, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r12, r22, r24\n\t" + "rlwinm r22, r9, 10, 22, 29\n\t" + "rlwinm r23, r10, 18, 22, 29\n\t" + "rlwinm r24, r0, 26, 22, 29\n\t" + "rlwinm r25, r8, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r14, r22, r24\n\t" + "rlwinm r22, r10, 10, 22, 29\n\t" + "rlwinm r23, r0, 18, 22, 29\n\t" + "rlwinm r24, r8, 26, 22, 29\n\t" + "rlwinm r25, r9, 2, 22, 29\n\t" + "lwzx r22, r16, r22\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "xor r22, r22, r23\n\t" + "xor r24, r24, r25\n\t" + "xor r15, r22, r24\n\t" + "lwz r22, 0(r20)\n\t" + "lwz r23, 4(r20)\n\t" + "lwz r24, 8(r20)\n\t" + "lwz r25, 12(r20)\n\t" + "xor r11, r11, r22\n\t" + "xor r12, r12, r23\n\t" + "xor r14, r14, r24\n\t" + "xor r15, r15, r25\n\t" + "addi r20, r20, 16\n\t" + "rlwinm r22, r11, 10, 22, 29\n\t" + "rlwinm r23, r12, 18, 22, 29\n\t" + "rlwinm r24, r14, 26, 22, 29\n\t" + "rlwinm r25, r15, 2, 22, 29\n\t" + "lwzx r22, r18, r22\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r16, r24\n\t" + "lwzx r25, r17, r25\n\t" + "rlwinm r0, r22, 0, 0, 7\n\t" + "rlwimi r0, r23, 0, 8, 15\n\t" + "rlwimi r0, r24, 0, 16, 23\n\t" + "rlwimi r0, r25, 0, 24, 31\n\t" + "rlwinm r22, r12, 10, 22, 29\n\t" + "rlwinm r23, r14, 18, 22, 29\n\t" + "rlwinm r24, r15, 26, 22, 29\n\t" + "rlwinm r25, r11, 2, 22, 29\n\t" + "lwzx r22, r18, r22\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r16, r24\n\t" + "lwzx r25, r17, r25\n\t" + "rlwinm r8, r22, 0, 0, 7\n\t" + "rlwimi r8, r23, 0, 8, 15\n\t" + "rlwimi r8, r24, 0, 16, 23\n\t" + "rlwimi r8, r25, 0, 24, 31\n\t" + "rlwinm r22, r14, 10, 22, 29\n\t" + "rlwinm r23, r15, 18, 22, 29\n\t" + "rlwinm r24, r11, 26, 22, 29\n\t" + "rlwinm r25, r12, 2, 22, 29\n\t" + "lwzx r22, r18, r22\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r16, r24\n\t" + "lwzx r25, r17, r25\n\t" + "rlwinm r9, r22, 0, 0, 7\n\t" + "rlwimi r9, r23, 0, 8, 15\n\t" + "rlwimi r9, r24, 0, 16, 23\n\t" + "rlwimi r9, r25, 0, 24, 31\n\t" + "rlwinm r22, r15, 10, 22, 29\n\t" + "rlwinm r23, r11, 18, 22, 29\n\t" + "rlwinm r24, r12, 26, 22, 29\n\t" + "rlwinm r25, r14, 2, 22, 29\n\t" + "lwzx r22, r18, r22\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r16, r24\n\t" + "lwzx r25, r17, r25\n\t" + "rlwinm r10, r22, 0, 0, 7\n\t" + "rlwimi r10, r23, 0, 8, 15\n\t" + "rlwimi r10, r24, 0, 16, 23\n\t" + "rlwimi r10, r25, 0, 24, 31\n\t" + "lwz r22, 0(r20)\n\t" + "lwz r23, 4(r20)\n\t" + "lwz r24, 8(r20)\n\t" + "lwz r25, 12(r20)\n\t" + "xor r0, r0, r22\n\t" + "xor r8, r8, r23\n\t" + "xor r9, r9, r24\n\t" + "xor r10, r10, r25\n\t" + "stw r0, 0(%[out])\n\t" + "stw r8, 4(%[out])\n\t" + "stw r9, 8(%[out])\n\t" + "stw r10, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "cmplw %[in], r26\n\t" + "blt L_AES_ECB_encrypt_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r9", "r10", "r11", "r12", "r14", "r15", "r16", + "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", + "r26" + ); +} + +#ifdef HAVE_AES_DECRYPT +void AES_invert_key(unsigned char* ks_p, word32 rounds_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks_p, word32 rounds_p) +#else +WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* ks __asm__ ("r3") = (unsigned char*)ks_p; + register word32 rounds __asm__ ("r4") = (word32)rounds_p; + register word8* L_AES_PPC32_sbox_c __asm__ ("r5") = + (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_td_c __asm__ ("r6") = + (word32*)&L_AES_PPC32_td; +#else + register word8* L_AES_PPC32_sbox_c = (word8*)&L_AES_PPC32_sbox; + register word32* L_AES_PPC32_td_c = (word32*)&L_AES_PPC32_td; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r12, %[L_AES_PPC32_sbox]\n\t" + "mr r19, %[L_AES_PPC32_td]\n\t" + "addi r20, r19, 0x400\n\t" + "addi r21, r19, 0x800\n\t" + "addi r22, r19, 0xc00\n\t" + "mr r14, %[ks]\n\t" + "slwi r16, %[rounds], 4\n\t" + "add r15, %[ks], r16\n\t" + "addi r16, %[rounds], 1\n\t" + "srwi r16, r16, 1\n\t" + "mtctr r16\n\t" + "\n" + "L_AES_invert_key_swap_%=:\n\t" + "lwz r0, 0(r14)\n\t" + "lwz r5, 4(r14)\n\t" + "lwz r6, 8(r14)\n\t" + "lwz r7, 12(r14)\n\t" + "lwz r8, 0(r15)\n\t" + "lwz r9, 4(r15)\n\t" + "lwz r10, 8(r15)\n\t" + "lwz r11, 12(r15)\n\t" + "stw r8, 0(r14)\n\t" + "stw r9, 4(r14)\n\t" + "stw r10, 8(r14)\n\t" + "stw r11, 12(r14)\n\t" + "stw r0, 0(r15)\n\t" + "stw r5, 4(r15)\n\t" + "stw r6, 8(r15)\n\t" + "stw r7, 12(r15)\n\t" + "addi r14, r14, 16\n\t" + "addi r15, r15, -16\n\t" + "bdnz L_AES_invert_key_swap_%=\n\t" + "addi r14, %[ks], 16\n\t" + "addi r16, %[rounds], -1\n\t" + "mtctr r16\n\t" + "\n" + "L_AES_invert_key_mix_%=:\n\t" + "lwz r0, 0(r14)\n\t" + "rlwinm r17, r0, 8, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r5, r19, r17\n\t" + "rlwinm r18, r0, 16, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r20, r18\n\t" + "xor r5, r5, r18\n\t" + "rlwinm r17, r0, 24, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r17, r21, r17\n\t" + "xor r5, r5, r17\n\t" + "rlwinm r18, r0, 0, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r22, r18\n\t" + "xor r5, r5, r18\n\t" + "stw r5, 0(r14)\n\t" + "lwz r0, 4(r14)\n\t" + "rlwinm r17, r0, 8, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r5, r19, r17\n\t" + "rlwinm r18, r0, 16, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r20, r18\n\t" + "xor r5, r5, r18\n\t" + "rlwinm r17, r0, 24, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r17, r21, r17\n\t" + "xor r5, r5, r17\n\t" + "rlwinm r18, r0, 0, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r22, r18\n\t" + "xor r5, r5, r18\n\t" + "stw r5, 4(r14)\n\t" + "lwz r0, 8(r14)\n\t" + "rlwinm r17, r0, 8, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r5, r19, r17\n\t" + "rlwinm r18, r0, 16, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r20, r18\n\t" + "xor r5, r5, r18\n\t" + "rlwinm r17, r0, 24, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r17, r21, r17\n\t" + "xor r5, r5, r17\n\t" + "rlwinm r18, r0, 0, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r22, r18\n\t" + "xor r5, r5, r18\n\t" + "stw r5, 8(r14)\n\t" + "lwz r0, 12(r14)\n\t" + "rlwinm r17, r0, 8, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r5, r19, r17\n\t" + "rlwinm r18, r0, 16, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r20, r18\n\t" + "xor r5, r5, r18\n\t" + "rlwinm r17, r0, 24, 24, 31\n\t" + "lbzx r17, r12, r17\n\t" + "slwi r17, r17, 2\n\t" + "lwzx r17, r21, r17\n\t" + "xor r5, r5, r17\n\t" + "rlwinm r18, r0, 0, 24, 31\n\t" + "lbzx r18, r12, r18\n\t" + "slwi r18, r18, 2\n\t" + "lwzx r18, r22, r18\n\t" + "xor r5, r5, r18\n\t" + "stw r5, 12(r14)\n\t" + "addi r14, r14, 16\n\t" + "bdnz L_AES_invert_key_mix_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [ks] "+r" (ks), [rounds] "+r" (rounds), + [L_AES_PPC32_sbox] "+r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_td] "+r" (L_AES_PPC32_td_c) + : +#else + : + : [ks] "r" (ks), [rounds] "r" (rounds), + [L_AES_PPC32_sbox] "r" (L_AES_PPC32_sbox_c), + [L_AES_PPC32_td] "r" (L_AES_PPC32_td_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" + ); +} + +void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p) +#else +WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("r3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("r4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("r5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("r6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("r7") = (int)nr_p; + register word32* L_AES_PPC32_td_c __asm__ ("r8") = + (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c __asm__ ("r9") = + (word8*)&L_AES_PPC32_inv_sbox; +#else + register word32* L_AES_PPC32_td_c = (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c = (word8*)&L_AES_PPC32_inv_sbox; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r16, %[L_AES_PPC32_td]\n\t" + "addi r17, r16, 0x400\n\t" + "addi r18, r16, 0x800\n\t" + "addi r19, r16, 0xc00\n\t" + "mr r20, %[L_AES_PPC32_inv_sbox]\n\t" + "add r27, %[in], %[len]\n\t" + "\n" + "L_AES_ECB_decrypt_block_%=:\n\t" + "lwz r0, 0(%[in])\n\t" + "lwz r8, 4(%[in])\n\t" + "lwz r9, 8(%[in])\n\t" + "lwz r10, 12(%[in])\n\t" + "mr r21, %[ks]\n\t" + "addi r22, %[nr], -2\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r0, r0, r23\n\t" + "xor r8, r8, r24\n\t" + "xor r9, r9, r25\n\t" + "xor r10, r10, r26\n\t" + "addi r21, r21, 16\n\t" + "srwi r22, r22, 1\n\t" + "mtctr r22\n\t" + "\n" + "L_AES_ECB_decrypt_round_%=:\n\t" + "rlwinm r23, r0, 10, 22, 29\n\t" + "rlwinm r24, r10, 18, 22, 29\n\t" + "rlwinm r25, r9, 26, 22, 29\n\t" + "rlwinm r26, r8, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r11, r23, r25\n\t" + "rlwinm r23, r8, 10, 22, 29\n\t" + "rlwinm r24, r0, 18, 22, 29\n\t" + "rlwinm r25, r10, 26, 22, 29\n\t" + "rlwinm r26, r9, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r12, r23, r25\n\t" + "rlwinm r23, r9, 10, 22, 29\n\t" + "rlwinm r24, r8, 18, 22, 29\n\t" + "rlwinm r25, r0, 26, 22, 29\n\t" + "rlwinm r26, r10, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r14, r23, r25\n\t" + "rlwinm r23, r10, 10, 22, 29\n\t" + "rlwinm r24, r9, 18, 22, 29\n\t" + "rlwinm r25, r8, 26, 22, 29\n\t" + "rlwinm r26, r0, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r15, r23, r25\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r11, r11, r23\n\t" + "xor r12, r12, r24\n\t" + "xor r14, r14, r25\n\t" + "xor r15, r15, r26\n\t" + "addi r21, r21, 16\n\t" + "rlwinm r23, r11, 10, 22, 29\n\t" + "rlwinm r24, r15, 18, 22, 29\n\t" + "rlwinm r25, r14, 26, 22, 29\n\t" + "rlwinm r26, r12, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r0, r23, r25\n\t" + "rlwinm r23, r12, 10, 22, 29\n\t" + "rlwinm r24, r11, 18, 22, 29\n\t" + "rlwinm r25, r15, 26, 22, 29\n\t" + "rlwinm r26, r14, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r8, r23, r25\n\t" + "rlwinm r23, r14, 10, 22, 29\n\t" + "rlwinm r24, r12, 18, 22, 29\n\t" + "rlwinm r25, r11, 26, 22, 29\n\t" + "rlwinm r26, r15, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r9, r23, r25\n\t" + "rlwinm r23, r15, 10, 22, 29\n\t" + "rlwinm r24, r14, 18, 22, 29\n\t" + "rlwinm r25, r12, 26, 22, 29\n\t" + "rlwinm r26, r11, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r10, r23, r25\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r0, r0, r23\n\t" + "xor r8, r8, r24\n\t" + "xor r9, r9, r25\n\t" + "xor r10, r10, r26\n\t" + "addi r21, r21, 16\n\t" + "bdnz L_AES_ECB_decrypt_round_%=\n\t" + "rlwinm r23, r0, 10, 22, 29\n\t" + "rlwinm r24, r10, 18, 22, 29\n\t" + "rlwinm r25, r9, 26, 22, 29\n\t" + "rlwinm r26, r8, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r11, r23, r25\n\t" + "rlwinm r23, r8, 10, 22, 29\n\t" + "rlwinm r24, r0, 18, 22, 29\n\t" + "rlwinm r25, r10, 26, 22, 29\n\t" + "rlwinm r26, r9, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r12, r23, r25\n\t" + "rlwinm r23, r9, 10, 22, 29\n\t" + "rlwinm r24, r8, 18, 22, 29\n\t" + "rlwinm r25, r0, 26, 22, 29\n\t" + "rlwinm r26, r10, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r14, r23, r25\n\t" + "rlwinm r23, r10, 10, 22, 29\n\t" + "rlwinm r24, r9, 18, 22, 29\n\t" + "rlwinm r25, r8, 26, 22, 29\n\t" + "rlwinm r26, r0, 2, 22, 29\n\t" + "lwzx r23, r16, r23\n\t" + "lwzx r24, r17, r24\n\t" + "lwzx r25, r18, r25\n\t" + "lwzx r26, r19, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r15, r23, r25\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r11, r11, r23\n\t" + "xor r12, r12, r24\n\t" + "xor r14, r14, r25\n\t" + "xor r15, r15, r26\n\t" + "addi r21, r21, 16\n\t" + "rlwinm r23, r11, 8, 24, 31\n\t" + "rlwinm r24, r15, 16, 24, 31\n\t" + "rlwinm r25, r14, 24, 24, 31\n\t" + "rlwinm r26, r12, 0, 24, 31\n\t" + "lbzx r23, r20, r23\n\t" + "lbzx r24, r20, r24\n\t" + "lbzx r25, r20, r25\n\t" + "lbzx r26, r20, r26\n\t" + "slwi r0, r23, 24\n\t" + "rlwimi r0, r24, 16, 8, 15\n\t" + "rlwimi r0, r25, 8, 16, 23\n\t" + "rlwimi r0, r26, 0, 24, 31\n\t" + "rlwinm r23, r12, 8, 24, 31\n\t" + "rlwinm r24, r11, 16, 24, 31\n\t" + "rlwinm r25, r15, 24, 24, 31\n\t" + "rlwinm r26, r14, 0, 24, 31\n\t" + "lbzx r23, r20, r23\n\t" + "lbzx r24, r20, r24\n\t" + "lbzx r25, r20, r25\n\t" + "lbzx r26, r20, r26\n\t" + "slwi r8, r23, 24\n\t" + "rlwimi r8, r24, 16, 8, 15\n\t" + "rlwimi r8, r25, 8, 16, 23\n\t" + "rlwimi r8, r26, 0, 24, 31\n\t" + "rlwinm r23, r14, 8, 24, 31\n\t" + "rlwinm r24, r12, 16, 24, 31\n\t" + "rlwinm r25, r11, 24, 24, 31\n\t" + "rlwinm r26, r15, 0, 24, 31\n\t" + "lbzx r23, r20, r23\n\t" + "lbzx r24, r20, r24\n\t" + "lbzx r25, r20, r25\n\t" + "lbzx r26, r20, r26\n\t" + "slwi r9, r23, 24\n\t" + "rlwimi r9, r24, 16, 8, 15\n\t" + "rlwimi r9, r25, 8, 16, 23\n\t" + "rlwimi r9, r26, 0, 24, 31\n\t" + "rlwinm r23, r15, 8, 24, 31\n\t" + "rlwinm r24, r14, 16, 24, 31\n\t" + "rlwinm r25, r12, 24, 24, 31\n\t" + "rlwinm r26, r11, 0, 24, 31\n\t" + "lbzx r23, r20, r23\n\t" + "lbzx r24, r20, r24\n\t" + "lbzx r25, r20, r25\n\t" + "lbzx r26, r20, r26\n\t" + "slwi r10, r23, 24\n\t" + "rlwimi r10, r24, 16, 8, 15\n\t" + "rlwimi r10, r25, 8, 16, 23\n\t" + "rlwimi r10, r26, 0, 24, 31\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r0, r0, r23\n\t" + "xor r8, r8, r24\n\t" + "xor r9, r9, r25\n\t" + "xor r10, r10, r26\n\t" + "stw r0, 0(%[out])\n\t" + "stw r8, 4(%[out])\n\t" + "stw r9, 8(%[out])\n\t" + "stw r10, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "cmplw %[in], r27\n\t" + "blt L_AES_ECB_decrypt_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [L_AES_PPC32_td] "+r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "+r" (L_AES_PPC32_inv_sbox_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [L_AES_PPC32_td] "r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "r" (L_AES_PPC32_inv_sbox_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r10", "r11", "r12", "r14", "r15", "r16", "r17", + "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", + "r27" + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#ifdef HAVE_AES_CBC +void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* iv_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* iv_p) +#else +WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* iv) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("r3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("r4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("r5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("r6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("r7") = (int)nr_p; + register unsigned char* iv __asm__ ("r8") = (unsigned char*)iv_p; + register word32* L_AES_PPC32_te_c __asm__ ("r9") = + (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r17, %[L_AES_PPC32_te]\n\t" + "addi r18, r17, 0x400\n\t" + "addi r19, r17, 0x800\n\t" + "addi r20, r17, 0xc00\n\t" + "lwz r0, 0(%[iv])\n\t" + "lwz r9, 4(%[iv])\n\t" + "lwz r10, 8(%[iv])\n\t" + "lwz r11, 12(%[iv])\n\t" + "\n" + "L_AES_CBC_encrypt_block_%=:\n\t" + "lwz r12, 0(%[in])\n\t" + "lwz r14, 4(%[in])\n\t" + "lwz r15, 8(%[in])\n\t" + "lwz r16, 12(%[in])\n\t" + "xor r0, r0, r12\n\t" + "xor r9, r9, r14\n\t" + "xor r10, r10, r15\n\t" + "xor r11, r11, r16\n\t" + "mr r21, %[ks]\n\t" + "addi r22, %[nr], -2\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r0, r0, r23\n\t" + "xor r9, r9, r24\n\t" + "xor r10, r10, r25\n\t" + "xor r11, r11, r26\n\t" + "addi r21, r21, 16\n\t" + "srwi r22, r22, 1\n\t" + "mtctr r22\n\t" + "\n" + "L_AES_CBC_encrypt_round_%=:\n\t" + "rlwinm r23, r0, 10, 22, 29\n\t" + "rlwinm r24, r9, 18, 22, 29\n\t" + "rlwinm r25, r10, 26, 22, 29\n\t" + "rlwinm r26, r11, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r12, r23, r25\n\t" + "rlwinm r23, r9, 10, 22, 29\n\t" + "rlwinm r24, r10, 18, 22, 29\n\t" + "rlwinm r25, r11, 26, 22, 29\n\t" + "rlwinm r26, r0, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r14, r23, r25\n\t" + "rlwinm r23, r10, 10, 22, 29\n\t" + "rlwinm r24, r11, 18, 22, 29\n\t" + "rlwinm r25, r0, 26, 22, 29\n\t" + "rlwinm r26, r9, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r15, r23, r25\n\t" + "rlwinm r23, r11, 10, 22, 29\n\t" + "rlwinm r24, r0, 18, 22, 29\n\t" + "rlwinm r25, r9, 26, 22, 29\n\t" + "rlwinm r26, r10, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r16, r23, r25\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r12, r12, r23\n\t" + "xor r14, r14, r24\n\t" + "xor r15, r15, r25\n\t" + "xor r16, r16, r26\n\t" + "addi r21, r21, 16\n\t" + "rlwinm r23, r12, 10, 22, 29\n\t" + "rlwinm r24, r14, 18, 22, 29\n\t" + "rlwinm r25, r15, 26, 22, 29\n\t" + "rlwinm r26, r16, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r0, r23, r25\n\t" + "rlwinm r23, r14, 10, 22, 29\n\t" + "rlwinm r24, r15, 18, 22, 29\n\t" + "rlwinm r25, r16, 26, 22, 29\n\t" + "rlwinm r26, r12, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r9, r23, r25\n\t" + "rlwinm r23, r15, 10, 22, 29\n\t" + "rlwinm r24, r16, 18, 22, 29\n\t" + "rlwinm r25, r12, 26, 22, 29\n\t" + "rlwinm r26, r14, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r10, r23, r25\n\t" + "rlwinm r23, r16, 10, 22, 29\n\t" + "rlwinm r24, r12, 18, 22, 29\n\t" + "rlwinm r25, r14, 26, 22, 29\n\t" + "rlwinm r26, r15, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r11, r23, r25\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r0, r0, r23\n\t" + "xor r9, r9, r24\n\t" + "xor r10, r10, r25\n\t" + "xor r11, r11, r26\n\t" + "addi r21, r21, 16\n\t" + "bdnz L_AES_CBC_encrypt_round_%=\n\t" + "rlwinm r23, r0, 10, 22, 29\n\t" + "rlwinm r24, r9, 18, 22, 29\n\t" + "rlwinm r25, r10, 26, 22, 29\n\t" + "rlwinm r26, r11, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r12, r23, r25\n\t" + "rlwinm r23, r9, 10, 22, 29\n\t" + "rlwinm r24, r10, 18, 22, 29\n\t" + "rlwinm r25, r11, 26, 22, 29\n\t" + "rlwinm r26, r0, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r14, r23, r25\n\t" + "rlwinm r23, r10, 10, 22, 29\n\t" + "rlwinm r24, r11, 18, 22, 29\n\t" + "rlwinm r25, r0, 26, 22, 29\n\t" + "rlwinm r26, r9, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r15, r23, r25\n\t" + "rlwinm r23, r11, 10, 22, 29\n\t" + "rlwinm r24, r0, 18, 22, 29\n\t" + "rlwinm r25, r9, 26, 22, 29\n\t" + "rlwinm r26, r10, 2, 22, 29\n\t" + "lwzx r23, r17, r23\n\t" + "lwzx r24, r18, r24\n\t" + "lwzx r25, r19, r25\n\t" + "lwzx r26, r20, r26\n\t" + "xor r23, r23, r24\n\t" + "xor r25, r25, r26\n\t" + "xor r16, r23, r25\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r12, r12, r23\n\t" + "xor r14, r14, r24\n\t" + "xor r15, r15, r25\n\t" + "xor r16, r16, r26\n\t" + "addi r21, r21, 16\n\t" + "rlwinm r23, r12, 10, 22, 29\n\t" + "rlwinm r24, r14, 18, 22, 29\n\t" + "rlwinm r25, r15, 26, 22, 29\n\t" + "rlwinm r26, r16, 2, 22, 29\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r20, r24\n\t" + "lwzx r25, r17, r25\n\t" + "lwzx r26, r18, r26\n\t" + "rlwinm r0, r23, 0, 0, 7\n\t" + "rlwimi r0, r24, 0, 8, 15\n\t" + "rlwimi r0, r25, 0, 16, 23\n\t" + "rlwimi r0, r26, 0, 24, 31\n\t" + "rlwinm r23, r14, 10, 22, 29\n\t" + "rlwinm r24, r15, 18, 22, 29\n\t" + "rlwinm r25, r16, 26, 22, 29\n\t" + "rlwinm r26, r12, 2, 22, 29\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r20, r24\n\t" + "lwzx r25, r17, r25\n\t" + "lwzx r26, r18, r26\n\t" + "rlwinm r9, r23, 0, 0, 7\n\t" + "rlwimi r9, r24, 0, 8, 15\n\t" + "rlwimi r9, r25, 0, 16, 23\n\t" + "rlwimi r9, r26, 0, 24, 31\n\t" + "rlwinm r23, r15, 10, 22, 29\n\t" + "rlwinm r24, r16, 18, 22, 29\n\t" + "rlwinm r25, r12, 26, 22, 29\n\t" + "rlwinm r26, r14, 2, 22, 29\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r20, r24\n\t" + "lwzx r25, r17, r25\n\t" + "lwzx r26, r18, r26\n\t" + "rlwinm r10, r23, 0, 0, 7\n\t" + "rlwimi r10, r24, 0, 8, 15\n\t" + "rlwimi r10, r25, 0, 16, 23\n\t" + "rlwimi r10, r26, 0, 24, 31\n\t" + "rlwinm r23, r16, 10, 22, 29\n\t" + "rlwinm r24, r12, 18, 22, 29\n\t" + "rlwinm r25, r14, 26, 22, 29\n\t" + "rlwinm r26, r15, 2, 22, 29\n\t" + "lwzx r23, r19, r23\n\t" + "lwzx r24, r20, r24\n\t" + "lwzx r25, r17, r25\n\t" + "lwzx r26, r18, r26\n\t" + "rlwinm r11, r23, 0, 0, 7\n\t" + "rlwimi r11, r24, 0, 8, 15\n\t" + "rlwimi r11, r25, 0, 16, 23\n\t" + "rlwimi r11, r26, 0, 24, 31\n\t" + "lwz r23, 0(r21)\n\t" + "lwz r24, 4(r21)\n\t" + "lwz r25, 8(r21)\n\t" + "lwz r26, 12(r21)\n\t" + "xor r0, r0, r23\n\t" + "xor r9, r9, r24\n\t" + "xor r10, r10, r25\n\t" + "xor r11, r11, r26\n\t" + "stw r0, 0(%[out])\n\t" + "stw r9, 4(%[out])\n\t" + "stw r10, 8(%[out])\n\t" + "stw r11, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_encrypt_block_%=\n\t" + "stw r0, 0(%[iv])\n\t" + "stw r9, 4(%[iv])\n\t" + "stw r10, 8(%[iv])\n\t" + "stw r11, 12(%[iv])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [iv] "+r" (iv), + [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [iv] "r" (iv), [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r10", "r11", "r12", "r14", "r15", "r16", "r17", + "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26" + ); +} + +#ifdef HAVE_AES_DECRYPT +void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* iv_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* iv_p) +#else +WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* iv) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("r3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("r4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("r5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("r6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("r7") = (int)nr_p; + register unsigned char* iv __asm__ ("r8") = (unsigned char*)iv_p; + register word32* L_AES_PPC32_td_c __asm__ ("r9") = + (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c __asm__ ("r10") = + (word8*)&L_AES_PPC32_inv_sbox; +#else + register word32* L_AES_PPC32_td_c = (word32*)&L_AES_PPC32_td; + register word8* L_AES_PPC32_inv_sbox_c = (word8*)&L_AES_PPC32_inv_sbox; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r21, %[L_AES_PPC32_td]\n\t" + "addi r22, r21, 0x400\n\t" + "addi r23, r21, 0x800\n\t" + "addi r24, r21, 0xc00\n\t" + "mr r25, %[L_AES_PPC32_inv_sbox]\n\t" + "lwz r17, 0(%[iv])\n\t" + "lwz r18, 4(%[iv])\n\t" + "lwz r19, 8(%[iv])\n\t" + "lwz r20, 12(%[iv])\n\t" + "\n" + "L_AES_CBC_decrypt_block_%=:\n\t" + "lwz r0, 0(%[in])\n\t" + "lwz r9, 4(%[in])\n\t" + "lwz r10, 8(%[in])\n\t" + "lwz r11, 12(%[in])\n\t" + "mr r26, %[ks]\n\t" + "addi r27, %[nr], -2\n\t" + "lwz r28, 0(r26)\n\t" + "lwz r29, 4(r26)\n\t" + "lwz r30, 8(r26)\n\t" + "lwz r31, 12(r26)\n\t" + "xor r0, r0, r28\n\t" + "xor r9, r9, r29\n\t" + "xor r10, r10, r30\n\t" + "xor r11, r11, r31\n\t" + "addi r26, r26, 16\n\t" + "srwi r27, r27, 1\n\t" + "mtctr r27\n\t" + "\n" + "L_AES_CBC_decrypt_round_%=:\n\t" + "rlwinm r28, r0, 10, 22, 29\n\t" + "rlwinm r29, r11, 18, 22, 29\n\t" + "rlwinm r30, r10, 26, 22, 29\n\t" + "rlwinm r31, r9, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r12, r28, r30\n\t" + "rlwinm r28, r9, 10, 22, 29\n\t" + "rlwinm r29, r0, 18, 22, 29\n\t" + "rlwinm r30, r11, 26, 22, 29\n\t" + "rlwinm r31, r10, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r14, r28, r30\n\t" + "rlwinm r28, r10, 10, 22, 29\n\t" + "rlwinm r29, r9, 18, 22, 29\n\t" + "rlwinm r30, r0, 26, 22, 29\n\t" + "rlwinm r31, r11, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r15, r28, r30\n\t" + "rlwinm r28, r11, 10, 22, 29\n\t" + "rlwinm r29, r10, 18, 22, 29\n\t" + "rlwinm r30, r9, 26, 22, 29\n\t" + "rlwinm r31, r0, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r16, r28, r30\n\t" + "lwz r28, 0(r26)\n\t" + "lwz r29, 4(r26)\n\t" + "lwz r30, 8(r26)\n\t" + "lwz r31, 12(r26)\n\t" + "xor r12, r12, r28\n\t" + "xor r14, r14, r29\n\t" + "xor r15, r15, r30\n\t" + "xor r16, r16, r31\n\t" + "addi r26, r26, 16\n\t" + "rlwinm r28, r12, 10, 22, 29\n\t" + "rlwinm r29, r16, 18, 22, 29\n\t" + "rlwinm r30, r15, 26, 22, 29\n\t" + "rlwinm r31, r14, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r0, r28, r30\n\t" + "rlwinm r28, r14, 10, 22, 29\n\t" + "rlwinm r29, r12, 18, 22, 29\n\t" + "rlwinm r30, r16, 26, 22, 29\n\t" + "rlwinm r31, r15, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r9, r28, r30\n\t" + "rlwinm r28, r15, 10, 22, 29\n\t" + "rlwinm r29, r14, 18, 22, 29\n\t" + "rlwinm r30, r12, 26, 22, 29\n\t" + "rlwinm r31, r16, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r10, r28, r30\n\t" + "rlwinm r28, r16, 10, 22, 29\n\t" + "rlwinm r29, r15, 18, 22, 29\n\t" + "rlwinm r30, r14, 26, 22, 29\n\t" + "rlwinm r31, r12, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r11, r28, r30\n\t" + "lwz r28, 0(r26)\n\t" + "lwz r29, 4(r26)\n\t" + "lwz r30, 8(r26)\n\t" + "lwz r31, 12(r26)\n\t" + "xor r0, r0, r28\n\t" + "xor r9, r9, r29\n\t" + "xor r10, r10, r30\n\t" + "xor r11, r11, r31\n\t" + "addi r26, r26, 16\n\t" + "bdnz L_AES_CBC_decrypt_round_%=\n\t" + "rlwinm r28, r0, 10, 22, 29\n\t" + "rlwinm r29, r11, 18, 22, 29\n\t" + "rlwinm r30, r10, 26, 22, 29\n\t" + "rlwinm r31, r9, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r12, r28, r30\n\t" + "rlwinm r28, r9, 10, 22, 29\n\t" + "rlwinm r29, r0, 18, 22, 29\n\t" + "rlwinm r30, r11, 26, 22, 29\n\t" + "rlwinm r31, r10, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r14, r28, r30\n\t" + "rlwinm r28, r10, 10, 22, 29\n\t" + "rlwinm r29, r9, 18, 22, 29\n\t" + "rlwinm r30, r0, 26, 22, 29\n\t" + "rlwinm r31, r11, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r15, r28, r30\n\t" + "rlwinm r28, r11, 10, 22, 29\n\t" + "rlwinm r29, r10, 18, 22, 29\n\t" + "rlwinm r30, r9, 26, 22, 29\n\t" + "rlwinm r31, r0, 2, 22, 29\n\t" + "lwzx r28, r21, r28\n\t" + "lwzx r29, r22, r29\n\t" + "lwzx r30, r23, r30\n\t" + "lwzx r31, r24, r31\n\t" + "xor r28, r28, r29\n\t" + "xor r30, r30, r31\n\t" + "xor r16, r28, r30\n\t" + "lwz r28, 0(r26)\n\t" + "lwz r29, 4(r26)\n\t" + "lwz r30, 8(r26)\n\t" + "lwz r31, 12(r26)\n\t" + "xor r12, r12, r28\n\t" + "xor r14, r14, r29\n\t" + "xor r15, r15, r30\n\t" + "xor r16, r16, r31\n\t" + "addi r26, r26, 16\n\t" + "rlwinm r28, r12, 8, 24, 31\n\t" + "rlwinm r29, r16, 16, 24, 31\n\t" + "rlwinm r30, r15, 24, 24, 31\n\t" + "rlwinm r31, r14, 0, 24, 31\n\t" + "lbzx r28, r25, r28\n\t" + "lbzx r29, r25, r29\n\t" + "lbzx r30, r25, r30\n\t" + "lbzx r31, r25, r31\n\t" + "slwi r0, r28, 24\n\t" + "rlwimi r0, r29, 16, 8, 15\n\t" + "rlwimi r0, r30, 8, 16, 23\n\t" + "rlwimi r0, r31, 0, 24, 31\n\t" + "rlwinm r28, r14, 8, 24, 31\n\t" + "rlwinm r29, r12, 16, 24, 31\n\t" + "rlwinm r30, r16, 24, 24, 31\n\t" + "rlwinm r31, r15, 0, 24, 31\n\t" + "lbzx r28, r25, r28\n\t" + "lbzx r29, r25, r29\n\t" + "lbzx r30, r25, r30\n\t" + "lbzx r31, r25, r31\n\t" + "slwi r9, r28, 24\n\t" + "rlwimi r9, r29, 16, 8, 15\n\t" + "rlwimi r9, r30, 8, 16, 23\n\t" + "rlwimi r9, r31, 0, 24, 31\n\t" + "rlwinm r28, r15, 8, 24, 31\n\t" + "rlwinm r29, r14, 16, 24, 31\n\t" + "rlwinm r30, r12, 24, 24, 31\n\t" + "rlwinm r31, r16, 0, 24, 31\n\t" + "lbzx r28, r25, r28\n\t" + "lbzx r29, r25, r29\n\t" + "lbzx r30, r25, r30\n\t" + "lbzx r31, r25, r31\n\t" + "slwi r10, r28, 24\n\t" + "rlwimi r10, r29, 16, 8, 15\n\t" + "rlwimi r10, r30, 8, 16, 23\n\t" + "rlwimi r10, r31, 0, 24, 31\n\t" + "rlwinm r28, r16, 8, 24, 31\n\t" + "rlwinm r29, r15, 16, 24, 31\n\t" + "rlwinm r30, r14, 24, 24, 31\n\t" + "rlwinm r31, r12, 0, 24, 31\n\t" + "lbzx r28, r25, r28\n\t" + "lbzx r29, r25, r29\n\t" + "lbzx r30, r25, r30\n\t" + "lbzx r31, r25, r31\n\t" + "slwi r11, r28, 24\n\t" + "rlwimi r11, r29, 16, 8, 15\n\t" + "rlwimi r11, r30, 8, 16, 23\n\t" + "rlwimi r11, r31, 0, 24, 31\n\t" + "lwz r28, 0(r26)\n\t" + "lwz r29, 4(r26)\n\t" + "lwz r30, 8(r26)\n\t" + "lwz r31, 12(r26)\n\t" + "xor r0, r0, r28\n\t" + "xor r9, r9, r29\n\t" + "xor r10, r10, r30\n\t" + "xor r11, r11, r31\n\t" + "xor r0, r0, r17\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "xor r11, r11, r20\n\t" + "lwz r17, 0(%[in])\n\t" + "lwz r18, 4(%[in])\n\t" + "lwz r19, 8(%[in])\n\t" + "lwz r20, 12(%[in])\n\t" + "stw r0, 0(%[out])\n\t" + "stw r9, 4(%[out])\n\t" + "stw r10, 8(%[out])\n\t" + "stw r11, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_decrypt_block_%=\n\t" + "stw r17, 0(%[iv])\n\t" + "stw r18, 4(%[iv])\n\t" + "stw r19, 8(%[iv])\n\t" + "stw r20, 12(%[iv])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [iv] "+r" (iv), + [L_AES_PPC32_td] "+r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "+r" (L_AES_PPC32_inv_sbox_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [iv] "r" (iv), [L_AES_PPC32_td] "r" (L_AES_PPC32_td_c), + [L_AES_PPC32_inv_sbox] "r" (L_AES_PPC32_inv_sbox_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r11", "r12", "r14", "r15", "r16", "r17", "r18", + "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", + "r28", "r29", "r30", "r31" + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#endif /* HAVE_AES_CBC */ +#ifdef WOLFSSL_AES_COUNTER +void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* ctr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* ctr_p) +#else +WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* ctr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("r3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("r4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("r5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("r6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("r7") = (int)nr_p; + register unsigned char* ctr __asm__ ("r8") = (unsigned char*)ctr_p; + register word32* L_AES_PPC32_te_c __asm__ ("r9") = + (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r21, %[L_AES_PPC32_te]\n\t" + "addi r22, r21, 0x400\n\t" + "addi r23, r21, 0x800\n\t" + "addi r24, r21, 0xc00\n\t" + "lwz r17, 0(%[ctr])\n\t" + "lwz r18, 4(%[ctr])\n\t" + "lwz r19, 8(%[ctr])\n\t" + "lwz r20, 12(%[ctr])\n\t" + "\n" + "L_AES_CTR_encrypt_block_%=:\n\t" + "mr r0, r17\n\t" + "mr r9, r18\n\t" + "mr r10, r19\n\t" + "mr r11, r20\n\t" + "mr r25, %[ks]\n\t" + "addi r26, %[nr], -2\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r0, r0, r27\n\t" + "xor r9, r9, r28\n\t" + "xor r10, r10, r29\n\t" + "xor r11, r11, r30\n\t" + "addi r25, r25, 16\n\t" + "srwi r26, r26, 1\n\t" + "mtctr r26\n\t" + "\n" + "L_AES_CTR_encrypt_round_%=:\n\t" + "rlwinm r27, r0, 10, 22, 29\n\t" + "rlwinm r28, r9, 18, 22, 29\n\t" + "rlwinm r29, r10, 26, 22, 29\n\t" + "rlwinm r30, r11, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r12, r27, r29\n\t" + "rlwinm r27, r9, 10, 22, 29\n\t" + "rlwinm r28, r10, 18, 22, 29\n\t" + "rlwinm r29, r11, 26, 22, 29\n\t" + "rlwinm r30, r0, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r14, r27, r29\n\t" + "rlwinm r27, r10, 10, 22, 29\n\t" + "rlwinm r28, r11, 18, 22, 29\n\t" + "rlwinm r29, r0, 26, 22, 29\n\t" + "rlwinm r30, r9, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r15, r27, r29\n\t" + "rlwinm r27, r11, 10, 22, 29\n\t" + "rlwinm r28, r0, 18, 22, 29\n\t" + "rlwinm r29, r9, 26, 22, 29\n\t" + "rlwinm r30, r10, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r16, r27, r29\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r12, r12, r27\n\t" + "xor r14, r14, r28\n\t" + "xor r15, r15, r29\n\t" + "xor r16, r16, r30\n\t" + "addi r25, r25, 16\n\t" + "rlwinm r27, r12, 10, 22, 29\n\t" + "rlwinm r28, r14, 18, 22, 29\n\t" + "rlwinm r29, r15, 26, 22, 29\n\t" + "rlwinm r30, r16, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r0, r27, r29\n\t" + "rlwinm r27, r14, 10, 22, 29\n\t" + "rlwinm r28, r15, 18, 22, 29\n\t" + "rlwinm r29, r16, 26, 22, 29\n\t" + "rlwinm r30, r12, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r9, r27, r29\n\t" + "rlwinm r27, r15, 10, 22, 29\n\t" + "rlwinm r28, r16, 18, 22, 29\n\t" + "rlwinm r29, r12, 26, 22, 29\n\t" + "rlwinm r30, r14, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r10, r27, r29\n\t" + "rlwinm r27, r16, 10, 22, 29\n\t" + "rlwinm r28, r12, 18, 22, 29\n\t" + "rlwinm r29, r14, 26, 22, 29\n\t" + "rlwinm r30, r15, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r11, r27, r29\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r0, r0, r27\n\t" + "xor r9, r9, r28\n\t" + "xor r10, r10, r29\n\t" + "xor r11, r11, r30\n\t" + "addi r25, r25, 16\n\t" + "bdnz L_AES_CTR_encrypt_round_%=\n\t" + "rlwinm r27, r0, 10, 22, 29\n\t" + "rlwinm r28, r9, 18, 22, 29\n\t" + "rlwinm r29, r10, 26, 22, 29\n\t" + "rlwinm r30, r11, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r12, r27, r29\n\t" + "rlwinm r27, r9, 10, 22, 29\n\t" + "rlwinm r28, r10, 18, 22, 29\n\t" + "rlwinm r29, r11, 26, 22, 29\n\t" + "rlwinm r30, r0, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r14, r27, r29\n\t" + "rlwinm r27, r10, 10, 22, 29\n\t" + "rlwinm r28, r11, 18, 22, 29\n\t" + "rlwinm r29, r0, 26, 22, 29\n\t" + "rlwinm r30, r9, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r15, r27, r29\n\t" + "rlwinm r27, r11, 10, 22, 29\n\t" + "rlwinm r28, r0, 18, 22, 29\n\t" + "rlwinm r29, r9, 26, 22, 29\n\t" + "rlwinm r30, r10, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r16, r27, r29\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r12, r12, r27\n\t" + "xor r14, r14, r28\n\t" + "xor r15, r15, r29\n\t" + "xor r16, r16, r30\n\t" + "addi r25, r25, 16\n\t" + "rlwinm r27, r12, 10, 22, 29\n\t" + "rlwinm r28, r14, 18, 22, 29\n\t" + "rlwinm r29, r15, 26, 22, 29\n\t" + "rlwinm r30, r16, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r0, r27, 0, 0, 7\n\t" + "rlwimi r0, r28, 0, 8, 15\n\t" + "rlwimi r0, r29, 0, 16, 23\n\t" + "rlwimi r0, r30, 0, 24, 31\n\t" + "rlwinm r27, r14, 10, 22, 29\n\t" + "rlwinm r28, r15, 18, 22, 29\n\t" + "rlwinm r29, r16, 26, 22, 29\n\t" + "rlwinm r30, r12, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r9, r27, 0, 0, 7\n\t" + "rlwimi r9, r28, 0, 8, 15\n\t" + "rlwimi r9, r29, 0, 16, 23\n\t" + "rlwimi r9, r30, 0, 24, 31\n\t" + "rlwinm r27, r15, 10, 22, 29\n\t" + "rlwinm r28, r16, 18, 22, 29\n\t" + "rlwinm r29, r12, 26, 22, 29\n\t" + "rlwinm r30, r14, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r10, r27, 0, 0, 7\n\t" + "rlwimi r10, r28, 0, 8, 15\n\t" + "rlwimi r10, r29, 0, 16, 23\n\t" + "rlwimi r10, r30, 0, 24, 31\n\t" + "rlwinm r27, r16, 10, 22, 29\n\t" + "rlwinm r28, r12, 18, 22, 29\n\t" + "rlwinm r29, r14, 26, 22, 29\n\t" + "rlwinm r30, r15, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r11, r27, 0, 0, 7\n\t" + "rlwimi r11, r28, 0, 8, 15\n\t" + "rlwimi r11, r29, 0, 16, 23\n\t" + "rlwimi r11, r30, 0, 24, 31\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r0, r0, r27\n\t" + "xor r9, r9, r28\n\t" + "xor r10, r10, r29\n\t" + "xor r11, r11, r30\n\t" + "lwz r12, 0(%[in])\n\t" + "lwz r14, 4(%[in])\n\t" + "lwz r15, 8(%[in])\n\t" + "lwz r16, 12(%[in])\n\t" + "xor r0, r0, r12\n\t" + "xor r9, r9, r14\n\t" + "xor r10, r10, r15\n\t" + "xor r11, r11, r16\n\t" + "stw r0, 0(%[out])\n\t" + "stw r9, 4(%[out])\n\t" + "stw r10, 8(%[out])\n\t" + "stw r11, 12(%[out])\n\t" + "addic r20, r20, 1\n\t" + "addze r19, r19\n\t" + "addze r18, r18\n\t" + "addze r17, r17\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CTR_encrypt_block_%=\n\t" + "stw r17, 0(%[ctr])\n\t" + "stw r18, 4(%[ctr])\n\t" + "stw r19, 8(%[ctr])\n\t" + "stw r20, 12(%[ctr])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [ctr] "+r" (ctr), + [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [ctr] "r" (ctr), + [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r10", "r11", "r12", "r14", "r15", "r16", "r17", + "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", + "r27", "r28", "r29", "r30" + ); +} + +#endif /* WOLFSSL_AES_COUNTER */ +#ifdef HAVE_AESGCM +void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* ctr_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in_p, + unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p, + int nr_p, unsigned char* ctr_p) +#else +WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in, + unsigned char* out, unsigned long len, const unsigned char* ks, int nr, + unsigned char* ctr) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in __asm__ ("r3") = + (const unsigned char*)in_p; + register unsigned char* out __asm__ ("r4") = (unsigned char*)out_p; + register unsigned long len __asm__ ("r5") = (unsigned long)len_p; + register const unsigned char* ks __asm__ ("r6") = + (const unsigned char*)ks_p; + register int nr __asm__ ("r7") = (int)nr_p; + register unsigned char* ctr __asm__ ("r8") = (unsigned char*)ctr_p; + register word32* L_AES_PPC32_te_c __asm__ ("r9") = + (word32*)&L_AES_PPC32_te; +#else + register word32* L_AES_PPC32_te_c = (word32*)&L_AES_PPC32_te; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r21, %[L_AES_PPC32_te]\n\t" + "addi r22, r21, 0x400\n\t" + "addi r23, r21, 0x800\n\t" + "addi r24, r21, 0xc00\n\t" + "lwz r17, 0(%[ctr])\n\t" + "lwz r18, 4(%[ctr])\n\t" + "lwz r19, 8(%[ctr])\n\t" + "lwz r20, 12(%[ctr])\n\t" + "\n" + "L_AES_GCM_encrypt_block_%=:\n\t" + "addi r20, r20, 1\n\t" + "mr r0, r17\n\t" + "mr r9, r18\n\t" + "mr r10, r19\n\t" + "mr r11, r20\n\t" + "mr r25, %[ks]\n\t" + "addi r26, %[nr], -2\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r0, r0, r27\n\t" + "xor r9, r9, r28\n\t" + "xor r10, r10, r29\n\t" + "xor r11, r11, r30\n\t" + "addi r25, r25, 16\n\t" + "srwi r26, r26, 1\n\t" + "mtctr r26\n\t" + "\n" + "L_AES_GCM_encrypt_round_%=:\n\t" + "rlwinm r27, r0, 10, 22, 29\n\t" + "rlwinm r28, r9, 18, 22, 29\n\t" + "rlwinm r29, r10, 26, 22, 29\n\t" + "rlwinm r30, r11, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r12, r27, r29\n\t" + "rlwinm r27, r9, 10, 22, 29\n\t" + "rlwinm r28, r10, 18, 22, 29\n\t" + "rlwinm r29, r11, 26, 22, 29\n\t" + "rlwinm r30, r0, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r14, r27, r29\n\t" + "rlwinm r27, r10, 10, 22, 29\n\t" + "rlwinm r28, r11, 18, 22, 29\n\t" + "rlwinm r29, r0, 26, 22, 29\n\t" + "rlwinm r30, r9, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r15, r27, r29\n\t" + "rlwinm r27, r11, 10, 22, 29\n\t" + "rlwinm r28, r0, 18, 22, 29\n\t" + "rlwinm r29, r9, 26, 22, 29\n\t" + "rlwinm r30, r10, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r16, r27, r29\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r12, r12, r27\n\t" + "xor r14, r14, r28\n\t" + "xor r15, r15, r29\n\t" + "xor r16, r16, r30\n\t" + "addi r25, r25, 16\n\t" + "rlwinm r27, r12, 10, 22, 29\n\t" + "rlwinm r28, r14, 18, 22, 29\n\t" + "rlwinm r29, r15, 26, 22, 29\n\t" + "rlwinm r30, r16, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r0, r27, r29\n\t" + "rlwinm r27, r14, 10, 22, 29\n\t" + "rlwinm r28, r15, 18, 22, 29\n\t" + "rlwinm r29, r16, 26, 22, 29\n\t" + "rlwinm r30, r12, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r9, r27, r29\n\t" + "rlwinm r27, r15, 10, 22, 29\n\t" + "rlwinm r28, r16, 18, 22, 29\n\t" + "rlwinm r29, r12, 26, 22, 29\n\t" + "rlwinm r30, r14, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r10, r27, r29\n\t" + "rlwinm r27, r16, 10, 22, 29\n\t" + "rlwinm r28, r12, 18, 22, 29\n\t" + "rlwinm r29, r14, 26, 22, 29\n\t" + "rlwinm r30, r15, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r11, r27, r29\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r0, r0, r27\n\t" + "xor r9, r9, r28\n\t" + "xor r10, r10, r29\n\t" + "xor r11, r11, r30\n\t" + "addi r25, r25, 16\n\t" + "bdnz L_AES_GCM_encrypt_round_%=\n\t" + "rlwinm r27, r0, 10, 22, 29\n\t" + "rlwinm r28, r9, 18, 22, 29\n\t" + "rlwinm r29, r10, 26, 22, 29\n\t" + "rlwinm r30, r11, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r12, r27, r29\n\t" + "rlwinm r27, r9, 10, 22, 29\n\t" + "rlwinm r28, r10, 18, 22, 29\n\t" + "rlwinm r29, r11, 26, 22, 29\n\t" + "rlwinm r30, r0, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r14, r27, r29\n\t" + "rlwinm r27, r10, 10, 22, 29\n\t" + "rlwinm r28, r11, 18, 22, 29\n\t" + "rlwinm r29, r0, 26, 22, 29\n\t" + "rlwinm r30, r9, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r15, r27, r29\n\t" + "rlwinm r27, r11, 10, 22, 29\n\t" + "rlwinm r28, r0, 18, 22, 29\n\t" + "rlwinm r29, r9, 26, 22, 29\n\t" + "rlwinm r30, r10, 2, 22, 29\n\t" + "lwzx r27, r21, r27\n\t" + "lwzx r28, r22, r28\n\t" + "lwzx r29, r23, r29\n\t" + "lwzx r30, r24, r30\n\t" + "xor r27, r27, r28\n\t" + "xor r29, r29, r30\n\t" + "xor r16, r27, r29\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r12, r12, r27\n\t" + "xor r14, r14, r28\n\t" + "xor r15, r15, r29\n\t" + "xor r16, r16, r30\n\t" + "addi r25, r25, 16\n\t" + "rlwinm r27, r12, 10, 22, 29\n\t" + "rlwinm r28, r14, 18, 22, 29\n\t" + "rlwinm r29, r15, 26, 22, 29\n\t" + "rlwinm r30, r16, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r0, r27, 0, 0, 7\n\t" + "rlwimi r0, r28, 0, 8, 15\n\t" + "rlwimi r0, r29, 0, 16, 23\n\t" + "rlwimi r0, r30, 0, 24, 31\n\t" + "rlwinm r27, r14, 10, 22, 29\n\t" + "rlwinm r28, r15, 18, 22, 29\n\t" + "rlwinm r29, r16, 26, 22, 29\n\t" + "rlwinm r30, r12, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r9, r27, 0, 0, 7\n\t" + "rlwimi r9, r28, 0, 8, 15\n\t" + "rlwimi r9, r29, 0, 16, 23\n\t" + "rlwimi r9, r30, 0, 24, 31\n\t" + "rlwinm r27, r15, 10, 22, 29\n\t" + "rlwinm r28, r16, 18, 22, 29\n\t" + "rlwinm r29, r12, 26, 22, 29\n\t" + "rlwinm r30, r14, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r10, r27, 0, 0, 7\n\t" + "rlwimi r10, r28, 0, 8, 15\n\t" + "rlwimi r10, r29, 0, 16, 23\n\t" + "rlwimi r10, r30, 0, 24, 31\n\t" + "rlwinm r27, r16, 10, 22, 29\n\t" + "rlwinm r28, r12, 18, 22, 29\n\t" + "rlwinm r29, r14, 26, 22, 29\n\t" + "rlwinm r30, r15, 2, 22, 29\n\t" + "lwzx r27, r23, r27\n\t" + "lwzx r28, r24, r28\n\t" + "lwzx r29, r21, r29\n\t" + "lwzx r30, r22, r30\n\t" + "rlwinm r11, r27, 0, 0, 7\n\t" + "rlwimi r11, r28, 0, 8, 15\n\t" + "rlwimi r11, r29, 0, 16, 23\n\t" + "rlwimi r11, r30, 0, 24, 31\n\t" + "lwz r27, 0(r25)\n\t" + "lwz r28, 4(r25)\n\t" + "lwz r29, 8(r25)\n\t" + "lwz r30, 12(r25)\n\t" + "xor r0, r0, r27\n\t" + "xor r9, r9, r28\n\t" + "xor r10, r10, r29\n\t" + "xor r11, r11, r30\n\t" + "lwz r12, 0(%[in])\n\t" + "lwz r14, 4(%[in])\n\t" + "lwz r15, 8(%[in])\n\t" + "lwz r16, 12(%[in])\n\t" + "xor r0, r0, r12\n\t" + "xor r9, r9, r14\n\t" + "xor r10, r10, r15\n\t" + "xor r11, r11, r16\n\t" + "stw r0, 0(%[out])\n\t" + "stw r9, 4(%[out])\n\t" + "stw r10, 8(%[out])\n\t" + "stw r11, 12(%[out])\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_GCM_encrypt_block_%=\n\t" + "stw r17, 0(%[ctr])\n\t" + "stw r18, 4(%[ctr])\n\t" + "stw r19, 8(%[ctr])\n\t" + "stw r20, 12(%[ctr])\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [ctr] "+r" (ctr), + [L_AES_PPC32_te] "+r" (L_AES_PPC32_te_c) + : +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [ctr] "r" (ctr), + [L_AES_PPC32_te] "r" (L_AES_PPC32_te_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r10", "r11", "r12", "r14", "r15", "r16", "r17", + "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", + "r27", "r28", "r29", "r30" + ); +} + +#endif /* HAVE_AESGCM */ +#ifdef GCM_TABLE_4BIT +XALIGNED(8) static const word32 L_GCM_gmult_len_r[] = { + 0x00000000, 0x1c200000, 0x38400000, 0x24600000, + 0x70800000, 0x6ca00000, 0x48c00000, 0x54e00000, + 0xe1000000, 0xfd200000, 0xd9400000, 0xc5600000, + 0x91800000, 0x8da00000, 0xa9c00000, 0xb5e00000, + 0x00000000, 0x01c20000, 0x03840000, 0x02460000, + 0x07080000, 0x06ca0000, 0x048c0000, 0x054e0000, + 0x0e100000, 0x0fd20000, 0x0d940000, 0x0c560000, + 0x09180000, 0x08da0000, 0x0a9c0000, 0x0b5e0000, +}; + +void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p, + const unsigned char* data_p, unsigned long len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p, + const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p) +#else +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x, + const unsigned char** m, const unsigned char* data, unsigned long len) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* x __asm__ ("r3") = (unsigned char*)x_p; + register const unsigned char** m __asm__ ("r4") = + (const unsigned char**)m_p; + register const unsigned char* data __asm__ ("r5") = + (const unsigned char*)data_p; + register unsigned long len __asm__ ("r6") = (unsigned long)len_p; + register word32* L_GCM_gmult_len_r_c __asm__ ("r7") = + (word32*)&L_GCM_gmult_len_r; +#else + register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r10, %[L_GCM_gmult_len_r]\n\t" + "addi r11, r10, 0x40\n\t" + "srwi %[len], %[len], 4\n\t" + "mtctr %[len]\n\t" + /* Process a 16-byte block */ + "\n" + "L_GCM_gmult_len_block_%=:\n\t" + "lwz r0, 0(%[x])\n\t" + "lwz r7, 4(%[x])\n\t" + "lwz r8, 8(%[x])\n\t" + "lwz r9, 12(%[x])\n\t" + "lwz r18, 0(%[data])\n\t" + "lwz r19, 4(%[data])\n\t" + "lwz r20, 8(%[data])\n\t" + "lwz r21, 12(%[data])\n\t" + "xor r0, r0, r18\n\t" + "xor r7, r7, r19\n\t" + "xor r8, r8, r20\n\t" + "xor r9, r9, r21\n\t" + /* Byte 15 */ + "rlwinm r25, r9, 0, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r14, 0(r12)\n\t" + "lwz r15, 4(r12)\n\t" + "lwz r16, 8(r12)\n\t" + "lwz r17, 12(r12)\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 14 */ + "rlwinm r25, r9, 24, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 13 */ + "rlwinm r25, r9, 16, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 12 */ + "rlwinm r25, r9, 8, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 11 */ + "rlwinm r25, r8, 0, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 10 */ + "rlwinm r25, r8, 24, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 9 */ + "rlwinm r25, r8, 16, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 8 */ + "rlwinm r25, r8, 8, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 7 */ + "rlwinm r25, r7, 0, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 6 */ + "rlwinm r25, r7, 24, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 5 */ + "rlwinm r25, r7, 16, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 4 */ + "rlwinm r25, r7, 8, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 3 */ + "rlwinm r25, r0, 0, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 2 */ + "rlwinm r25, r0, 24, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 1 */ + "rlwinm r25, r0, 16, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 24, 31\n\t" + "srwi r17, r17, 8\n\t" + "rlwimi r17, r16, 24, 0, 7\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r11, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r21, 12(r12)\n\t" + "rlwinm r24, r21, 20, 28, 31\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r24, r21, 4, 24, 27\n\t" + "xor r22, r22, r24\n\t" + "rlwinm r23, r22, 30, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "addi r12, r12, 0x100\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + /* Byte 0 */ + "rlwinm r25, r0, 8, 24, 31\n\t" + "rlwinm r23, r25, 4, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "rlwinm r22, r17, 0, 28, 31\n\t" + "srwi r17, r17, 4\n\t" + "rlwimi r17, r16, 28, 0, 3\n\t" + "srwi r16, r16, 4\n\t" + "rlwimi r16, r15, 28, 0, 3\n\t" + "srwi r15, r15, 4\n\t" + "rlwimi r15, r14, 28, 0, 3\n\t" + "srwi r14, r14, 4\n\t" + "rlwinm r23, r22, 2, 26, 29\n\t" + "lwzx r24, r10, r23\n\t" + "xor r14, r14, r24\n\t" + "rlwinm r23, r25, 0, 24, 27\n\t" + "add r12, %[m], r23\n\t" + "lwz r18, 0(r12)\n\t" + "lwz r19, 4(r12)\n\t" + "lwz r20, 8(r12)\n\t" + "lwz r21, 12(r12)\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "xor r17, r17, r21\n\t" + "stw r14, 0(%[x])\n\t" + "stw r15, 4(%[x])\n\t" + "stw r16, 8(%[x])\n\t" + "stw r17, 12(%[x])\n\t" + "addi %[data], %[data], 16\n\t" + "bdnz L_GCM_gmult_len_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len), + [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c) + : +#else + : + : [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len), + [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r8", "r9", "r10", "r11", "r12", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", + "r25" + ); +} + +#endif /* GCM_TABLE_4BIT */ +#ifdef GCM_TABLE +XALIGNED(4) static const word8 L_GCM_gmult_len_r[] = { + 0x00, 0x00, 0x01, 0xc2, 0x03, 0x84, 0x02, 0x46, + 0x07, 0x08, 0x06, 0xca, 0x04, 0x8c, 0x05, 0x4e, + 0x0e, 0x10, 0x0f, 0xd2, 0x0d, 0x94, 0x0c, 0x56, + 0x09, 0x18, 0x08, 0xda, 0x0a, 0x9c, 0x0b, 0x5e, + 0x1c, 0x20, 0x1d, 0xe2, 0x1f, 0xa4, 0x1e, 0x66, + 0x1b, 0x28, 0x1a, 0xea, 0x18, 0xac, 0x19, 0x6e, + 0x12, 0x30, 0x13, 0xf2, 0x11, 0xb4, 0x10, 0x76, + 0x15, 0x38, 0x14, 0xfa, 0x16, 0xbc, 0x17, 0x7e, + 0x38, 0x40, 0x39, 0x82, 0x3b, 0xc4, 0x3a, 0x06, + 0x3f, 0x48, 0x3e, 0x8a, 0x3c, 0xcc, 0x3d, 0x0e, + 0x36, 0x50, 0x37, 0x92, 0x35, 0xd4, 0x34, 0x16, + 0x31, 0x58, 0x30, 0x9a, 0x32, 0xdc, 0x33, 0x1e, + 0x24, 0x60, 0x25, 0xa2, 0x27, 0xe4, 0x26, 0x26, + 0x23, 0x68, 0x22, 0xaa, 0x20, 0xec, 0x21, 0x2e, + 0x2a, 0x70, 0x2b, 0xb2, 0x29, 0xf4, 0x28, 0x36, + 0x2d, 0x78, 0x2c, 0xba, 0x2e, 0xfc, 0x2f, 0x3e, + 0x70, 0x80, 0x71, 0x42, 0x73, 0x04, 0x72, 0xc6, + 0x77, 0x88, 0x76, 0x4a, 0x74, 0x0c, 0x75, 0xce, + 0x7e, 0x90, 0x7f, 0x52, 0x7d, 0x14, 0x7c, 0xd6, + 0x79, 0x98, 0x78, 0x5a, 0x7a, 0x1c, 0x7b, 0xde, + 0x6c, 0xa0, 0x6d, 0x62, 0x6f, 0x24, 0x6e, 0xe6, + 0x6b, 0xa8, 0x6a, 0x6a, 0x68, 0x2c, 0x69, 0xee, + 0x62, 0xb0, 0x63, 0x72, 0x61, 0x34, 0x60, 0xf6, + 0x65, 0xb8, 0x64, 0x7a, 0x66, 0x3c, 0x67, 0xfe, + 0x48, 0xc0, 0x49, 0x02, 0x4b, 0x44, 0x4a, 0x86, + 0x4f, 0xc8, 0x4e, 0x0a, 0x4c, 0x4c, 0x4d, 0x8e, + 0x46, 0xd0, 0x47, 0x12, 0x45, 0x54, 0x44, 0x96, + 0x41, 0xd8, 0x40, 0x1a, 0x42, 0x5c, 0x43, 0x9e, + 0x54, 0xe0, 0x55, 0x22, 0x57, 0x64, 0x56, 0xa6, + 0x53, 0xe8, 0x52, 0x2a, 0x50, 0x6c, 0x51, 0xae, + 0x5a, 0xf0, 0x5b, 0x32, 0x59, 0x74, 0x58, 0xb6, + 0x5d, 0xf8, 0x5c, 0x3a, 0x5e, 0x7c, 0x5f, 0xbe, + 0xe1, 0x00, 0xe0, 0xc2, 0xe2, 0x84, 0xe3, 0x46, + 0xe6, 0x08, 0xe7, 0xca, 0xe5, 0x8c, 0xe4, 0x4e, + 0xef, 0x10, 0xee, 0xd2, 0xec, 0x94, 0xed, 0x56, + 0xe8, 0x18, 0xe9, 0xda, 0xeb, 0x9c, 0xea, 0x5e, + 0xfd, 0x20, 0xfc, 0xe2, 0xfe, 0xa4, 0xff, 0x66, + 0xfa, 0x28, 0xfb, 0xea, 0xf9, 0xac, 0xf8, 0x6e, + 0xf3, 0x30, 0xf2, 0xf2, 0xf0, 0xb4, 0xf1, 0x76, + 0xf4, 0x38, 0xf5, 0xfa, 0xf7, 0xbc, 0xf6, 0x7e, + 0xd9, 0x40, 0xd8, 0x82, 0xda, 0xc4, 0xdb, 0x06, + 0xde, 0x48, 0xdf, 0x8a, 0xdd, 0xcc, 0xdc, 0x0e, + 0xd7, 0x50, 0xd6, 0x92, 0xd4, 0xd4, 0xd5, 0x16, + 0xd0, 0x58, 0xd1, 0x9a, 0xd3, 0xdc, 0xd2, 0x1e, + 0xc5, 0x60, 0xc4, 0xa2, 0xc6, 0xe4, 0xc7, 0x26, + 0xc2, 0x68, 0xc3, 0xaa, 0xc1, 0xec, 0xc0, 0x2e, + 0xcb, 0x70, 0xca, 0xb2, 0xc8, 0xf4, 0xc9, 0x36, + 0xcc, 0x78, 0xcd, 0xba, 0xcf, 0xfc, 0xce, 0x3e, + 0x91, 0x80, 0x90, 0x42, 0x92, 0x04, 0x93, 0xc6, + 0x96, 0x88, 0x97, 0x4a, 0x95, 0x0c, 0x94, 0xce, + 0x9f, 0x90, 0x9e, 0x52, 0x9c, 0x14, 0x9d, 0xd6, + 0x98, 0x98, 0x99, 0x5a, 0x9b, 0x1c, 0x9a, 0xde, + 0x8d, 0xa0, 0x8c, 0x62, 0x8e, 0x24, 0x8f, 0xe6, + 0x8a, 0xa8, 0x8b, 0x6a, 0x89, 0x2c, 0x88, 0xee, + 0x83, 0xb0, 0x82, 0x72, 0x80, 0x34, 0x81, 0xf6, + 0x84, 0xb8, 0x85, 0x7a, 0x87, 0x3c, 0x86, 0xfe, + 0xa9, 0xc0, 0xa8, 0x02, 0xaa, 0x44, 0xab, 0x86, + 0xae, 0xc8, 0xaf, 0x0a, 0xad, 0x4c, 0xac, 0x8e, + 0xa7, 0xd0, 0xa6, 0x12, 0xa4, 0x54, 0xa5, 0x96, + 0xa0, 0xd8, 0xa1, 0x1a, 0xa3, 0x5c, 0xa2, 0x9e, + 0xb5, 0xe0, 0xb4, 0x22, 0xb6, 0x64, 0xb7, 0xa6, + 0xb2, 0xe8, 0xb3, 0x2a, 0xb1, 0x6c, 0xb0, 0xae, + 0xbb, 0xf0, 0xba, 0x32, 0xb8, 0x74, 0xb9, 0xb6, + 0xbc, 0xf8, 0xbd, 0x3a, 0xbf, 0x7c, 0xbe, 0xbe, +}; + +void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p, + const unsigned char* data_p, unsigned long len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p, + const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p) +#else +WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x, + const unsigned char** m, const unsigned char* data, unsigned long len) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* x __asm__ ("r3") = (unsigned char*)x_p; + register const unsigned char** m __asm__ ("r4") = + (const unsigned char**)m_p; + register const unsigned char* data __asm__ ("r5") = + (const unsigned char*)data_p; + register unsigned long len __asm__ ("r6") = (unsigned long)len_p; + register word8* L_GCM_gmult_len_r_c __asm__ ("r7") = + (word8*)&L_GCM_gmult_len_r; +#else + register word8* L_GCM_gmult_len_r_c = (word8*)&L_GCM_gmult_len_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r10, %[L_GCM_gmult_len_r]\n\t" + "srwi %[len], %[len], 4\n\t" + "mtctr %[len]\n\t" + /* Process a 16-byte block */ + "\n" + "L_GCM_gmult_len_block_%=:\n\t" + "lwz r0, 0(%[x])\n\t" + "lwz r7, 4(%[x])\n\t" + "lwz r8, 8(%[x])\n\t" + "lwz r9, 12(%[x])\n\t" + "lwz r17, 0(%[data])\n\t" + "lwz r18, 4(%[data])\n\t" + "lwz r19, 8(%[data])\n\t" + "lwz r20, 12(%[data])\n\t" + "xor r0, r0, r17\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "xor r9, r9, r20\n\t" + /* Byte 15 */ + "rlwinm r21, r9, 4, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r12, 0(r11)\n\t" + "lwz r14, 4(r11)\n\t" + "lwz r15, 8(r11)\n\t" + "lwz r16, 12(r11)\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 14 */ + "rlwinm r21, r9, 28, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 13 */ + "rlwinm r21, r9, 20, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 12 */ + "rlwinm r21, r9, 12, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 11 */ + "rlwinm r21, r8, 4, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 10 */ + "rlwinm r21, r8, 28, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 9 */ + "rlwinm r21, r8, 20, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 8 */ + "rlwinm r21, r8, 12, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 7 */ + "rlwinm r21, r7, 4, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 6 */ + "rlwinm r21, r7, 28, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 5 */ + "rlwinm r21, r7, 20, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 4 */ + "rlwinm r21, r7, 12, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 3 */ + "rlwinm r21, r0, 4, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 2 */ + "rlwinm r21, r0, 28, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 1 */ + "rlwinm r21, r0, 20, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "rlwinm r21, r16, 1, 23, 30\n\t" + "srwi r16, r16, 8\n\t" + "rlwimi r16, r15, 24, 0, 7\n\t" + "srwi r15, r15, 8\n\t" + "rlwimi r15, r14, 24, 0, 7\n\t" + "srwi r14, r14, 8\n\t" + "rlwimi r14, r12, 24, 0, 7\n\t" + "srwi r12, r12, 8\n\t" + "lhzx r22, r21, r10\n\t" + "slwi r22, r22, 16\n\t" + "xor r12, r12, r22\n\t" + /* Byte 0 */ + "rlwinm r21, r0, 12, 20, 27\n\t" + "add r11, %[m], r21\n\t" + "lwz r17, 0(r11)\n\t" + "lwz r18, 4(r11)\n\t" + "lwz r19, 8(r11)\n\t" + "lwz r20, 12(r11)\n\t" + "xor r12, r12, r17\n\t" + "xor r14, r14, r18\n\t" + "xor r15, r15, r19\n\t" + "xor r16, r16, r20\n\t" + "stw r12, 0(%[x])\n\t" + "stw r14, 4(%[x])\n\t" + "stw r15, 8(%[x])\n\t" + "stw r16, 12(%[x])\n\t" + "addi %[data], %[data], 16\n\t" + "bdnz L_GCM_gmult_len_block_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len), + [L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c) + : +#else + : + : [x] "r" (x), [m] "r" (m), [data] "r" (data), [len] "r" (len), + [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r8", "r9", "r10", "r11", "r12", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22" + ); +} + +#endif /* GCM_TABLE */ +#endif /* !defined(NO_AES) && defined(WOLFSSL_PPC32_ASM) */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S index 66e9de8713e..f3408be4c49 100644 --- a/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S +++ b/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S @@ -25,6 +25,7 @@ * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha256-asm.S */ +#include #ifdef WOLFSSL_PPC32_ASM #ifndef WOLFSSL_PPC32_ASM_INLINE diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S b/wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S new file mode 100644 index 00000000000..8a2435b73e6 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S @@ -0,0 +1,1264 @@ +/* ppc32-sha3-asm + * + * Copyright (C) 2006-2026 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 ./sha3/sha3.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S + */ + +#include + +#ifdef WOLFSSL_PPC32_ASM +#ifndef WOLFSSL_PPC32_ASM_INLINE + .machine ppc +#if defined(WOLFSSL_SHA3) && defined(WOLFSSL_PPC32_ASM) +#ifndef __APPLE__ + .text + .type L_sha3_ppc32_rt, %object + .size L_sha3_ppc32_rt, 192 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_sha3_ppc32_rt: + .quad 0x0000000000000001,0x0000000000008082 + .quad 0x800000000000808a,0x8000000080008000 + .quad 0x000000000000808b,0x0000000080000001 + .quad 0x8000000080008081,0x8000000000008009 + .quad 0x000000000000008a,0x0000000000000088 + .quad 0x0000000080008009,0x000000008000000a + .quad 0x000000008000808b,0x800000000000008b + .quad 0x8000000000008089,0x8000000000008003 + .quad 0x8000000000008002,0x8000000000000080 + .quad 0x000000000000800a,0x800000008000000a + .quad 0x8000000080008081,0x8000000000008080 + .quad 0x0000000080000001,0x8000000080008008 + .section ".text" + .align 4 + .globl BlockSha3 + .type BlockSha3, @function +BlockSha3: + stwu 1, -32(1) + mflr 0 + stw 0, 28(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + lis 20, L_sha3_ppc32_rt@ha + la 20, L_sha3_ppc32_rt@l(20) + subi 1, 1, 0xd0 + li 14, 12 + mtctr 14 + # Start of 24 rounds (two per iteration) +L_sha3_ppc32_begin: + # Round even - state -> scratch + # Column Mix + lwz 0, 0(3) + lwz 4, 4(3) + lwz 18, 40(3) + lwz 19, 44(3) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 18, 80(3) + lwz 19, 84(3) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 18, 120(3) + lwz 19, 124(3) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 18, 160(3) + lwz 19, 164(3) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 5, 8(3) + lwz 6, 12(3) + lwz 18, 48(3) + lwz 19, 52(3) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 18, 88(3) + lwz 19, 92(3) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 18, 128(3) + lwz 19, 132(3) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 18, 168(3) + lwz 19, 172(3) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 7, 16(3) + lwz 8, 20(3) + lwz 18, 56(3) + lwz 19, 60(3) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 18, 96(3) + lwz 19, 100(3) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 18, 136(3) + lwz 19, 140(3) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 18, 176(3) + lwz 19, 180(3) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 9, 24(3) + lwz 10, 28(3) + lwz 18, 64(3) + lwz 19, 68(3) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 18, 104(3) + lwz 19, 108(3) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 18, 144(3) + lwz 19, 148(3) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 18, 184(3) + lwz 19, 188(3) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 11, 32(3) + lwz 12, 36(3) + lwz 18, 72(3) + lwz 19, 76(3) + xor 11, 11, 18 + xor 12, 12, 19 + lwz 18, 112(3) + lwz 19, 116(3) + xor 11, 11, 18 + xor 12, 12, 19 + lwz 18, 152(3) + lwz 19, 156(3) + xor 11, 11, 18 + xor 12, 12, 19 + lwz 18, 192(3) + lwz 19, 196(3) + xor 11, 11, 18 + xor 12, 12, 19 + rlwinm 14, 5, 1, 0, 30 + rlwimi 14, 6, 1, 31, 31 + rlwinm 15, 6, 1, 0, 30 + rlwimi 15, 5, 1, 31, 31 + xor 16, 11, 14 + xor 17, 12, 15 + lwz 18, 0(3) + lwz 19, 4(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 0(3) + stw 19, 4(3) + lwz 18, 40(3) + lwz 19, 44(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 40(3) + stw 19, 44(3) + lwz 18, 80(3) + lwz 19, 84(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 80(3) + stw 19, 84(3) + lwz 18, 120(3) + lwz 19, 124(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 120(3) + stw 19, 124(3) + lwz 18, 160(3) + lwz 19, 164(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 160(3) + stw 19, 164(3) + rlwinm 14, 7, 1, 0, 30 + rlwimi 14, 8, 1, 31, 31 + rlwinm 15, 8, 1, 0, 30 + rlwimi 15, 7, 1, 31, 31 + xor 16, 0, 14 + xor 17, 4, 15 + lwz 18, 8(3) + lwz 19, 12(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 8(3) + stw 19, 12(3) + lwz 18, 48(3) + lwz 19, 52(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 48(3) + stw 19, 52(3) + lwz 18, 88(3) + lwz 19, 92(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 88(3) + stw 19, 92(3) + lwz 18, 128(3) + lwz 19, 132(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 128(3) + stw 19, 132(3) + lwz 18, 168(3) + lwz 19, 172(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 168(3) + stw 19, 172(3) + rlwinm 14, 9, 1, 0, 30 + rlwimi 14, 10, 1, 31, 31 + rlwinm 15, 10, 1, 0, 30 + rlwimi 15, 9, 1, 31, 31 + xor 16, 5, 14 + xor 17, 6, 15 + lwz 18, 16(3) + lwz 19, 20(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 16(3) + stw 19, 20(3) + lwz 18, 56(3) + lwz 19, 60(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 56(3) + stw 19, 60(3) + lwz 18, 96(3) + lwz 19, 100(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 96(3) + stw 19, 100(3) + lwz 18, 136(3) + lwz 19, 140(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 136(3) + stw 19, 140(3) + lwz 18, 176(3) + lwz 19, 180(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 176(3) + stw 19, 180(3) + rlwinm 14, 11, 1, 0, 30 + rlwimi 14, 12, 1, 31, 31 + rlwinm 15, 12, 1, 0, 30 + rlwimi 15, 11, 1, 31, 31 + xor 16, 7, 14 + xor 17, 8, 15 + lwz 18, 24(3) + lwz 19, 28(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 24(3) + stw 19, 28(3) + lwz 18, 64(3) + lwz 19, 68(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 64(3) + stw 19, 68(3) + lwz 18, 104(3) + lwz 19, 108(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 104(3) + stw 19, 108(3) + lwz 18, 144(3) + lwz 19, 148(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 144(3) + stw 19, 148(3) + lwz 18, 184(3) + lwz 19, 188(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 184(3) + stw 19, 188(3) + rlwinm 14, 0, 1, 0, 30 + rlwimi 14, 4, 1, 31, 31 + rlwinm 15, 4, 1, 0, 30 + rlwimi 15, 0, 1, 31, 31 + xor 16, 9, 14 + xor 17, 10, 15 + lwz 18, 32(3) + lwz 19, 36(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 32(3) + stw 19, 36(3) + lwz 18, 72(3) + lwz 19, 76(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 72(3) + stw 19, 76(3) + lwz 18, 112(3) + lwz 19, 116(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 112(3) + stw 19, 116(3) + lwz 18, 152(3) + lwz 19, 156(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 152(3) + stw 19, 156(3) + lwz 18, 192(3) + lwz 19, 196(3) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 192(3) + stw 19, 196(3) + # Row Mix + # Row 0 + lwz 0, 0(3) + lwz 4, 4(3) + lwz 14, 48(3) + lwz 15, 52(3) + rlwinm 5, 15, 12, 0, 19 + rlwimi 5, 14, 12, 20, 31 + rlwinm 6, 14, 12, 0, 19 + rlwimi 6, 15, 12, 20, 31 + lwz 14, 96(3) + lwz 15, 100(3) + rlwinm 7, 15, 11, 0, 20 + rlwimi 7, 14, 11, 21, 31 + rlwinm 8, 14, 11, 0, 20 + rlwimi 8, 15, 11, 21, 31 + lwz 14, 144(3) + lwz 15, 148(3) + rlwinm 9, 14, 21, 0, 10 + rlwimi 9, 15, 21, 11, 31 + rlwinm 10, 15, 21, 0, 10 + rlwimi 10, 14, 21, 11, 31 + lwz 14, 192(3) + lwz 15, 196(3) + rlwinm 11, 14, 14, 0, 17 + rlwimi 11, 15, 14, 18, 31 + rlwinm 12, 15, 14, 0, 17 + rlwimi 12, 14, 14, 18, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 8(1) + stw 15, 12(1) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 16(1) + stw 15, 20(1) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 24(1) + stw 15, 28(1) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 32(1) + stw 15, 36(1) + # Get constant + lwz 11, 0(20) + lwz 12, 4(20) + addi 20, 20, 8 + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + # XOR in constant + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 0(1) + stw 15, 4(1) + # Row 1 + lwz 14, 24(3) + lwz 15, 28(3) + rlwinm 0, 14, 28, 0, 3 + rlwimi 0, 15, 28, 4, 31 + rlwinm 4, 15, 28, 0, 3 + rlwimi 4, 14, 28, 4, 31 + lwz 14, 72(3) + lwz 15, 76(3) + rlwinm 5, 14, 20, 0, 11 + rlwimi 5, 15, 20, 12, 31 + rlwinm 6, 15, 20, 0, 11 + rlwimi 6, 14, 20, 12, 31 + lwz 14, 80(3) + lwz 15, 84(3) + rlwinm 7, 14, 3, 0, 28 + rlwimi 7, 15, 3, 29, 31 + rlwinm 8, 15, 3, 0, 28 + rlwimi 8, 14, 3, 29, 31 + lwz 14, 128(3) + lwz 15, 132(3) + rlwinm 9, 15, 13, 0, 18 + rlwimi 9, 14, 13, 19, 31 + rlwinm 10, 14, 13, 0, 18 + rlwimi 10, 15, 13, 19, 31 + lwz 14, 176(3) + lwz 15, 180(3) + rlwinm 11, 15, 29, 0, 2 + rlwimi 11, 14, 29, 3, 31 + rlwinm 12, 14, 29, 0, 2 + rlwimi 12, 15, 29, 3, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 48(1) + stw 15, 52(1) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 56(1) + stw 15, 60(1) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 64(1) + stw 15, 68(1) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 72(1) + stw 15, 76(1) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 40(1) + stw 15, 44(1) + # Row 2 + lwz 14, 8(3) + lwz 15, 12(3) + rlwinm 0, 14, 1, 0, 30 + rlwimi 0, 15, 1, 31, 31 + rlwinm 4, 15, 1, 0, 30 + rlwimi 4, 14, 1, 31, 31 + lwz 14, 56(3) + lwz 15, 60(3) + rlwinm 5, 14, 6, 0, 25 + rlwimi 5, 15, 6, 26, 31 + rlwinm 6, 15, 6, 0, 25 + rlwimi 6, 14, 6, 26, 31 + lwz 14, 104(3) + lwz 15, 108(3) + rlwinm 7, 14, 25, 0, 6 + rlwimi 7, 15, 25, 7, 31 + rlwinm 8, 15, 25, 0, 6 + rlwimi 8, 14, 25, 7, 31 + lwz 14, 152(3) + lwz 15, 156(3) + rlwinm 9, 14, 8, 0, 23 + rlwimi 9, 15, 8, 24, 31 + rlwinm 10, 15, 8, 0, 23 + rlwimi 10, 14, 8, 24, 31 + lwz 14, 160(3) + lwz 15, 164(3) + rlwinm 11, 14, 18, 0, 13 + rlwimi 11, 15, 18, 14, 31 + rlwinm 12, 15, 18, 0, 13 + rlwimi 12, 14, 18, 14, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 88(1) + stw 15, 92(1) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 96(1) + stw 15, 100(1) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 104(1) + stw 15, 108(1) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 112(1) + stw 15, 116(1) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 80(1) + stw 15, 84(1) + # Row 3 + lwz 14, 32(3) + lwz 15, 36(3) + rlwinm 0, 14, 27, 0, 4 + rlwimi 0, 15, 27, 5, 31 + rlwinm 4, 15, 27, 0, 4 + rlwimi 4, 14, 27, 5, 31 + lwz 14, 40(3) + lwz 15, 44(3) + rlwinm 5, 15, 4, 0, 27 + rlwimi 5, 14, 4, 28, 31 + rlwinm 6, 14, 4, 0, 27 + rlwimi 6, 15, 4, 28, 31 + lwz 14, 88(3) + lwz 15, 92(3) + rlwinm 7, 14, 10, 0, 21 + rlwimi 7, 15, 10, 22, 31 + rlwinm 8, 15, 10, 0, 21 + rlwimi 8, 14, 10, 22, 31 + lwz 14, 136(3) + lwz 15, 140(3) + rlwinm 9, 14, 15, 0, 16 + rlwimi 9, 15, 15, 17, 31 + rlwinm 10, 15, 15, 0, 16 + rlwimi 10, 14, 15, 17, 31 + lwz 14, 184(3) + lwz 15, 188(3) + rlwinm 11, 15, 24, 0, 7 + rlwimi 11, 14, 24, 8, 31 + rlwinm 12, 14, 24, 0, 7 + rlwimi 12, 15, 24, 8, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 128(1) + stw 15, 132(1) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 136(1) + stw 15, 140(1) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 144(1) + stw 15, 148(1) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 152(1) + stw 15, 156(1) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 120(1) + stw 15, 124(1) + # Row 4 + lwz 14, 16(3) + lwz 15, 20(3) + rlwinm 0, 15, 30, 0, 1 + rlwimi 0, 14, 30, 2, 31 + rlwinm 4, 14, 30, 0, 1 + rlwimi 4, 15, 30, 2, 31 + lwz 14, 64(3) + lwz 15, 68(3) + rlwinm 5, 15, 23, 0, 8 + rlwimi 5, 14, 23, 9, 31 + rlwinm 6, 14, 23, 0, 8 + rlwimi 6, 15, 23, 9, 31 + lwz 14, 112(3) + lwz 15, 116(3) + rlwinm 7, 15, 7, 0, 24 + rlwimi 7, 14, 7, 25, 31 + rlwinm 8, 14, 7, 0, 24 + rlwimi 8, 15, 7, 25, 31 + lwz 14, 120(3) + lwz 15, 124(3) + rlwinm 9, 15, 9, 0, 22 + rlwimi 9, 14, 9, 23, 31 + rlwinm 10, 14, 9, 0, 22 + rlwimi 10, 15, 9, 23, 31 + lwz 14, 168(3) + lwz 15, 172(3) + rlwinm 11, 14, 2, 0, 29 + rlwimi 11, 15, 2, 30, 31 + rlwinm 12, 15, 2, 0, 29 + rlwimi 12, 14, 2, 30, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 168(1) + stw 15, 172(1) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 176(1) + stw 15, 180(1) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 184(1) + stw 15, 188(1) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 192(1) + stw 15, 196(1) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 160(1) + stw 15, 164(1) + # Round odd - scratch -> state + # Column Mix + lwz 0, 0(1) + lwz 4, 4(1) + lwz 18, 40(1) + lwz 19, 44(1) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 18, 80(1) + lwz 19, 84(1) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 18, 120(1) + lwz 19, 124(1) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 18, 160(1) + lwz 19, 164(1) + xor 0, 0, 18 + xor 4, 4, 19 + lwz 5, 8(1) + lwz 6, 12(1) + lwz 18, 48(1) + lwz 19, 52(1) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 18, 88(1) + lwz 19, 92(1) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 18, 128(1) + lwz 19, 132(1) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 18, 168(1) + lwz 19, 172(1) + xor 5, 5, 18 + xor 6, 6, 19 + lwz 7, 16(1) + lwz 8, 20(1) + lwz 18, 56(1) + lwz 19, 60(1) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 18, 96(1) + lwz 19, 100(1) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 18, 136(1) + lwz 19, 140(1) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 18, 176(1) + lwz 19, 180(1) + xor 7, 7, 18 + xor 8, 8, 19 + lwz 9, 24(1) + lwz 10, 28(1) + lwz 18, 64(1) + lwz 19, 68(1) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 18, 104(1) + lwz 19, 108(1) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 18, 144(1) + lwz 19, 148(1) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 18, 184(1) + lwz 19, 188(1) + xor 9, 9, 18 + xor 10, 10, 19 + lwz 11, 32(1) + lwz 12, 36(1) + lwz 18, 72(1) + lwz 19, 76(1) + xor 11, 11, 18 + xor 12, 12, 19 + lwz 18, 112(1) + lwz 19, 116(1) + xor 11, 11, 18 + xor 12, 12, 19 + lwz 18, 152(1) + lwz 19, 156(1) + xor 11, 11, 18 + xor 12, 12, 19 + lwz 18, 192(1) + lwz 19, 196(1) + xor 11, 11, 18 + xor 12, 12, 19 + rlwinm 14, 5, 1, 0, 30 + rlwimi 14, 6, 1, 31, 31 + rlwinm 15, 6, 1, 0, 30 + rlwimi 15, 5, 1, 31, 31 + xor 16, 11, 14 + xor 17, 12, 15 + lwz 18, 0(1) + lwz 19, 4(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 0(1) + stw 19, 4(1) + lwz 18, 40(1) + lwz 19, 44(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 40(1) + stw 19, 44(1) + lwz 18, 80(1) + lwz 19, 84(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 80(1) + stw 19, 84(1) + lwz 18, 120(1) + lwz 19, 124(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 120(1) + stw 19, 124(1) + lwz 18, 160(1) + lwz 19, 164(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 160(1) + stw 19, 164(1) + rlwinm 14, 7, 1, 0, 30 + rlwimi 14, 8, 1, 31, 31 + rlwinm 15, 8, 1, 0, 30 + rlwimi 15, 7, 1, 31, 31 + xor 16, 0, 14 + xor 17, 4, 15 + lwz 18, 8(1) + lwz 19, 12(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 8(1) + stw 19, 12(1) + lwz 18, 48(1) + lwz 19, 52(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 48(1) + stw 19, 52(1) + lwz 18, 88(1) + lwz 19, 92(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 88(1) + stw 19, 92(1) + lwz 18, 128(1) + lwz 19, 132(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 128(1) + stw 19, 132(1) + lwz 18, 168(1) + lwz 19, 172(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 168(1) + stw 19, 172(1) + rlwinm 14, 9, 1, 0, 30 + rlwimi 14, 10, 1, 31, 31 + rlwinm 15, 10, 1, 0, 30 + rlwimi 15, 9, 1, 31, 31 + xor 16, 5, 14 + xor 17, 6, 15 + lwz 18, 16(1) + lwz 19, 20(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 16(1) + stw 19, 20(1) + lwz 18, 56(1) + lwz 19, 60(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 56(1) + stw 19, 60(1) + lwz 18, 96(1) + lwz 19, 100(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 96(1) + stw 19, 100(1) + lwz 18, 136(1) + lwz 19, 140(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 136(1) + stw 19, 140(1) + lwz 18, 176(1) + lwz 19, 180(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 176(1) + stw 19, 180(1) + rlwinm 14, 11, 1, 0, 30 + rlwimi 14, 12, 1, 31, 31 + rlwinm 15, 12, 1, 0, 30 + rlwimi 15, 11, 1, 31, 31 + xor 16, 7, 14 + xor 17, 8, 15 + lwz 18, 24(1) + lwz 19, 28(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 24(1) + stw 19, 28(1) + lwz 18, 64(1) + lwz 19, 68(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 64(1) + stw 19, 68(1) + lwz 18, 104(1) + lwz 19, 108(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 104(1) + stw 19, 108(1) + lwz 18, 144(1) + lwz 19, 148(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 144(1) + stw 19, 148(1) + lwz 18, 184(1) + lwz 19, 188(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 184(1) + stw 19, 188(1) + rlwinm 14, 0, 1, 0, 30 + rlwimi 14, 4, 1, 31, 31 + rlwinm 15, 4, 1, 0, 30 + rlwimi 15, 0, 1, 31, 31 + xor 16, 9, 14 + xor 17, 10, 15 + lwz 18, 32(1) + lwz 19, 36(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 32(1) + stw 19, 36(1) + lwz 18, 72(1) + lwz 19, 76(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 72(1) + stw 19, 76(1) + lwz 18, 112(1) + lwz 19, 116(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 112(1) + stw 19, 116(1) + lwz 18, 152(1) + lwz 19, 156(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 152(1) + stw 19, 156(1) + lwz 18, 192(1) + lwz 19, 196(1) + xor 18, 18, 16 + xor 19, 19, 17 + stw 18, 192(1) + stw 19, 196(1) + # Row Mix + # Row 0 + lwz 0, 0(1) + lwz 4, 4(1) + lwz 14, 48(1) + lwz 15, 52(1) + rlwinm 5, 15, 12, 0, 19 + rlwimi 5, 14, 12, 20, 31 + rlwinm 6, 14, 12, 0, 19 + rlwimi 6, 15, 12, 20, 31 + lwz 14, 96(1) + lwz 15, 100(1) + rlwinm 7, 15, 11, 0, 20 + rlwimi 7, 14, 11, 21, 31 + rlwinm 8, 14, 11, 0, 20 + rlwimi 8, 15, 11, 21, 31 + lwz 14, 144(1) + lwz 15, 148(1) + rlwinm 9, 14, 21, 0, 10 + rlwimi 9, 15, 21, 11, 31 + rlwinm 10, 15, 21, 0, 10 + rlwimi 10, 14, 21, 11, 31 + lwz 14, 192(1) + lwz 15, 196(1) + rlwinm 11, 14, 14, 0, 17 + rlwimi 11, 15, 14, 18, 31 + rlwinm 12, 15, 14, 0, 17 + rlwimi 12, 14, 14, 18, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 8(3) + stw 15, 12(3) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 16(3) + stw 15, 20(3) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 24(3) + stw 15, 28(3) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 32(3) + stw 15, 36(3) + # Get constant + lwz 11, 0(20) + lwz 12, 4(20) + addi 20, 20, 8 + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + # XOR in constant + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 0(3) + stw 15, 4(3) + # Row 1 + lwz 14, 24(1) + lwz 15, 28(1) + rlwinm 0, 14, 28, 0, 3 + rlwimi 0, 15, 28, 4, 31 + rlwinm 4, 15, 28, 0, 3 + rlwimi 4, 14, 28, 4, 31 + lwz 14, 72(1) + lwz 15, 76(1) + rlwinm 5, 14, 20, 0, 11 + rlwimi 5, 15, 20, 12, 31 + rlwinm 6, 15, 20, 0, 11 + rlwimi 6, 14, 20, 12, 31 + lwz 14, 80(1) + lwz 15, 84(1) + rlwinm 7, 14, 3, 0, 28 + rlwimi 7, 15, 3, 29, 31 + rlwinm 8, 15, 3, 0, 28 + rlwimi 8, 14, 3, 29, 31 + lwz 14, 128(1) + lwz 15, 132(1) + rlwinm 9, 15, 13, 0, 18 + rlwimi 9, 14, 13, 19, 31 + rlwinm 10, 14, 13, 0, 18 + rlwimi 10, 15, 13, 19, 31 + lwz 14, 176(1) + lwz 15, 180(1) + rlwinm 11, 15, 29, 0, 2 + rlwimi 11, 14, 29, 3, 31 + rlwinm 12, 14, 29, 0, 2 + rlwimi 12, 15, 29, 3, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 48(3) + stw 15, 52(3) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 56(3) + stw 15, 60(3) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 64(3) + stw 15, 68(3) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 72(3) + stw 15, 76(3) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 40(3) + stw 15, 44(3) + # Row 2 + lwz 14, 8(1) + lwz 15, 12(1) + rlwinm 0, 14, 1, 0, 30 + rlwimi 0, 15, 1, 31, 31 + rlwinm 4, 15, 1, 0, 30 + rlwimi 4, 14, 1, 31, 31 + lwz 14, 56(1) + lwz 15, 60(1) + rlwinm 5, 14, 6, 0, 25 + rlwimi 5, 15, 6, 26, 31 + rlwinm 6, 15, 6, 0, 25 + rlwimi 6, 14, 6, 26, 31 + lwz 14, 104(1) + lwz 15, 108(1) + rlwinm 7, 14, 25, 0, 6 + rlwimi 7, 15, 25, 7, 31 + rlwinm 8, 15, 25, 0, 6 + rlwimi 8, 14, 25, 7, 31 + lwz 14, 152(1) + lwz 15, 156(1) + rlwinm 9, 14, 8, 0, 23 + rlwimi 9, 15, 8, 24, 31 + rlwinm 10, 15, 8, 0, 23 + rlwimi 10, 14, 8, 24, 31 + lwz 14, 160(1) + lwz 15, 164(1) + rlwinm 11, 14, 18, 0, 13 + rlwimi 11, 15, 18, 14, 31 + rlwinm 12, 15, 18, 0, 13 + rlwimi 12, 14, 18, 14, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 88(3) + stw 15, 92(3) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 96(3) + stw 15, 100(3) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 104(3) + stw 15, 108(3) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 112(3) + stw 15, 116(3) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 80(3) + stw 15, 84(3) + # Row 3 + lwz 14, 32(1) + lwz 15, 36(1) + rlwinm 0, 14, 27, 0, 4 + rlwimi 0, 15, 27, 5, 31 + rlwinm 4, 15, 27, 0, 4 + rlwimi 4, 14, 27, 5, 31 + lwz 14, 40(1) + lwz 15, 44(1) + rlwinm 5, 15, 4, 0, 27 + rlwimi 5, 14, 4, 28, 31 + rlwinm 6, 14, 4, 0, 27 + rlwimi 6, 15, 4, 28, 31 + lwz 14, 88(1) + lwz 15, 92(1) + rlwinm 7, 14, 10, 0, 21 + rlwimi 7, 15, 10, 22, 31 + rlwinm 8, 15, 10, 0, 21 + rlwimi 8, 14, 10, 22, 31 + lwz 14, 136(1) + lwz 15, 140(1) + rlwinm 9, 14, 15, 0, 16 + rlwimi 9, 15, 15, 17, 31 + rlwinm 10, 15, 15, 0, 16 + rlwimi 10, 14, 15, 17, 31 + lwz 14, 184(1) + lwz 15, 188(1) + rlwinm 11, 15, 24, 0, 7 + rlwimi 11, 14, 24, 8, 31 + rlwinm 12, 14, 24, 0, 7 + rlwimi 12, 15, 24, 8, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 128(3) + stw 15, 132(3) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 136(3) + stw 15, 140(3) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 144(3) + stw 15, 148(3) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 152(3) + stw 15, 156(3) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 120(3) + stw 15, 124(3) + # Row 4 + lwz 14, 16(1) + lwz 15, 20(1) + rlwinm 0, 15, 30, 0, 1 + rlwimi 0, 14, 30, 2, 31 + rlwinm 4, 14, 30, 0, 1 + rlwimi 4, 15, 30, 2, 31 + lwz 14, 64(1) + lwz 15, 68(1) + rlwinm 5, 15, 23, 0, 8 + rlwimi 5, 14, 23, 9, 31 + rlwinm 6, 14, 23, 0, 8 + rlwimi 6, 15, 23, 9, 31 + lwz 14, 112(1) + lwz 15, 116(1) + rlwinm 7, 15, 7, 0, 24 + rlwimi 7, 14, 7, 25, 31 + rlwinm 8, 14, 7, 0, 24 + rlwimi 8, 15, 7, 25, 31 + lwz 14, 120(1) + lwz 15, 124(1) + rlwinm 9, 15, 9, 0, 22 + rlwimi 9, 14, 9, 23, 31 + rlwinm 10, 14, 9, 0, 22 + rlwimi 10, 15, 9, 23, 31 + lwz 14, 168(1) + lwz 15, 172(1) + rlwinm 11, 14, 2, 0, 29 + rlwimi 11, 15, 2, 30, 31 + rlwinm 12, 15, 2, 0, 29 + rlwimi 12, 14, 2, 30, 31 + andc 14, 9, 7 + andc 15, 10, 8 + xor 14, 14, 5 + xor 15, 15, 6 + stw 14, 168(3) + stw 15, 172(3) + andc 14, 11, 9 + andc 15, 12, 10 + xor 14, 14, 7 + xor 15, 15, 8 + stw 14, 176(3) + stw 15, 180(3) + andc 14, 0, 11 + andc 15, 4, 12 + xor 14, 14, 9 + xor 15, 15, 10 + stw 14, 184(3) + stw 15, 188(3) + andc 14, 5, 0 + andc 15, 6, 4 + xor 14, 14, 11 + xor 15, 15, 12 + stw 14, 192(3) + stw 15, 196(3) + andc 14, 7, 5 + andc 15, 8, 6 + xor 14, 14, 0 + xor 15, 15, 4 + stw 14, 160(3) + stw 15, 164(3) + bdnz L_sha3_ppc32_begin + addi 1, 1, 0xd0 + lwz 0, 28(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + addi 1, 1, 32 + blr + .size BlockSha3,.-BlockSha3 +#endif /* WOLFSSL_SHA3 && WOLFSSL_PPC32_ASM */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c b/wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c new file mode 100644 index 00000000000..8fcbe8e420c --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha3-asm_c.c @@ -0,0 +1,1269 @@ +/* ppc32-sha3-asm + * + * Copyright (C) 2006-2026 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 ./sha3/sha3.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha3-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#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__ */ + +#if defined(WOLFSSL_SHA3) && defined(WOLFSSL_PPC32_ASM) +#include + +XALIGNED(16) static const word64 L_sha3_ppc32_rt[] = { + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL, +}; + +void BlockSha3(word64* state_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void BlockSha3(word64* state_p) +#else +WC_OMIT_FRAME_POINTER void BlockSha3(word64* state) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register word64* state __asm__ ("3") = (word64*)state_p; + register word64* L_sha3_ppc32_rt_c __asm__ ("4") = + (word64*)&L_sha3_ppc32_rt; +#else + register word64* L_sha3_ppc32_rt_c = (word64*)&L_sha3_ppc32_rt; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 20, %[L_sha3_ppc32_rt]\n\t" + "subi 1, 1, 0xd0\n\t" + "li 14, 12\n\t" + "mtctr 14\n\t" + /* Start of 24 rounds (two per iteration) */ + "\n" + "L_sha3_ppc32_begin_%=:\n\t" + /* Round even - state -> scratch */ + /* Column Mix */ + "lwz 0, 0(%[state])\n\t" + "lwz 4, 4(%[state])\n\t" + "lwz 18, 40(%[state])\n\t" + "lwz 19, 44(%[state])\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 18, 80(%[state])\n\t" + "lwz 19, 84(%[state])\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 18, 120(%[state])\n\t" + "lwz 19, 124(%[state])\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 18, 160(%[state])\n\t" + "lwz 19, 164(%[state])\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 5, 8(%[state])\n\t" + "lwz 6, 12(%[state])\n\t" + "lwz 18, 48(%[state])\n\t" + "lwz 19, 52(%[state])\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 18, 88(%[state])\n\t" + "lwz 19, 92(%[state])\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 18, 128(%[state])\n\t" + "lwz 19, 132(%[state])\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 18, 168(%[state])\n\t" + "lwz 19, 172(%[state])\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 7, 16(%[state])\n\t" + "lwz 8, 20(%[state])\n\t" + "lwz 18, 56(%[state])\n\t" + "lwz 19, 60(%[state])\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 18, 96(%[state])\n\t" + "lwz 19, 100(%[state])\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 18, 136(%[state])\n\t" + "lwz 19, 140(%[state])\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 18, 176(%[state])\n\t" + "lwz 19, 180(%[state])\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 9, 24(%[state])\n\t" + "lwz 10, 28(%[state])\n\t" + "lwz 18, 64(%[state])\n\t" + "lwz 19, 68(%[state])\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 18, 104(%[state])\n\t" + "lwz 19, 108(%[state])\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 18, 144(%[state])\n\t" + "lwz 19, 148(%[state])\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 18, 184(%[state])\n\t" + "lwz 19, 188(%[state])\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 11, 32(%[state])\n\t" + "lwz 12, 36(%[state])\n\t" + "lwz 18, 72(%[state])\n\t" + "lwz 19, 76(%[state])\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "lwz 18, 112(%[state])\n\t" + "lwz 19, 116(%[state])\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "lwz 18, 152(%[state])\n\t" + "lwz 19, 156(%[state])\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "lwz 18, 192(%[state])\n\t" + "lwz 19, 196(%[state])\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "rlwinm 14, 5, 1, 0, 30\n\t" + "rlwimi 14, 6, 1, 31, 31\n\t" + "rlwinm 15, 6, 1, 0, 30\n\t" + "rlwimi 15, 5, 1, 31, 31\n\t" + "xor 16, 11, 14\n\t" + "xor 17, 12, 15\n\t" + "lwz 18, 0(%[state])\n\t" + "lwz 19, 4(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 0(%[state])\n\t" + "stw 19, 4(%[state])\n\t" + "lwz 18, 40(%[state])\n\t" + "lwz 19, 44(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 40(%[state])\n\t" + "stw 19, 44(%[state])\n\t" + "lwz 18, 80(%[state])\n\t" + "lwz 19, 84(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 80(%[state])\n\t" + "stw 19, 84(%[state])\n\t" + "lwz 18, 120(%[state])\n\t" + "lwz 19, 124(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 120(%[state])\n\t" + "stw 19, 124(%[state])\n\t" + "lwz 18, 160(%[state])\n\t" + "lwz 19, 164(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 160(%[state])\n\t" + "stw 19, 164(%[state])\n\t" + "rlwinm 14, 7, 1, 0, 30\n\t" + "rlwimi 14, 8, 1, 31, 31\n\t" + "rlwinm 15, 8, 1, 0, 30\n\t" + "rlwimi 15, 7, 1, 31, 31\n\t" + "xor 16, 0, 14\n\t" + "xor 17, 4, 15\n\t" + "lwz 18, 8(%[state])\n\t" + "lwz 19, 12(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 8(%[state])\n\t" + "stw 19, 12(%[state])\n\t" + "lwz 18, 48(%[state])\n\t" + "lwz 19, 52(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 48(%[state])\n\t" + "stw 19, 52(%[state])\n\t" + "lwz 18, 88(%[state])\n\t" + "lwz 19, 92(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 88(%[state])\n\t" + "stw 19, 92(%[state])\n\t" + "lwz 18, 128(%[state])\n\t" + "lwz 19, 132(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 128(%[state])\n\t" + "stw 19, 132(%[state])\n\t" + "lwz 18, 168(%[state])\n\t" + "lwz 19, 172(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 168(%[state])\n\t" + "stw 19, 172(%[state])\n\t" + "rlwinm 14, 9, 1, 0, 30\n\t" + "rlwimi 14, 10, 1, 31, 31\n\t" + "rlwinm 15, 10, 1, 0, 30\n\t" + "rlwimi 15, 9, 1, 31, 31\n\t" + "xor 16, 5, 14\n\t" + "xor 17, 6, 15\n\t" + "lwz 18, 16(%[state])\n\t" + "lwz 19, 20(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 16(%[state])\n\t" + "stw 19, 20(%[state])\n\t" + "lwz 18, 56(%[state])\n\t" + "lwz 19, 60(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 56(%[state])\n\t" + "stw 19, 60(%[state])\n\t" + "lwz 18, 96(%[state])\n\t" + "lwz 19, 100(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 96(%[state])\n\t" + "stw 19, 100(%[state])\n\t" + "lwz 18, 136(%[state])\n\t" + "lwz 19, 140(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 136(%[state])\n\t" + "stw 19, 140(%[state])\n\t" + "lwz 18, 176(%[state])\n\t" + "lwz 19, 180(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 176(%[state])\n\t" + "stw 19, 180(%[state])\n\t" + "rlwinm 14, 11, 1, 0, 30\n\t" + "rlwimi 14, 12, 1, 31, 31\n\t" + "rlwinm 15, 12, 1, 0, 30\n\t" + "rlwimi 15, 11, 1, 31, 31\n\t" + "xor 16, 7, 14\n\t" + "xor 17, 8, 15\n\t" + "lwz 18, 24(%[state])\n\t" + "lwz 19, 28(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 24(%[state])\n\t" + "stw 19, 28(%[state])\n\t" + "lwz 18, 64(%[state])\n\t" + "lwz 19, 68(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 64(%[state])\n\t" + "stw 19, 68(%[state])\n\t" + "lwz 18, 104(%[state])\n\t" + "lwz 19, 108(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 104(%[state])\n\t" + "stw 19, 108(%[state])\n\t" + "lwz 18, 144(%[state])\n\t" + "lwz 19, 148(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 144(%[state])\n\t" + "stw 19, 148(%[state])\n\t" + "lwz 18, 184(%[state])\n\t" + "lwz 19, 188(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 184(%[state])\n\t" + "stw 19, 188(%[state])\n\t" + "rlwinm 14, 0, 1, 0, 30\n\t" + "rlwimi 14, 4, 1, 31, 31\n\t" + "rlwinm 15, 4, 1, 0, 30\n\t" + "rlwimi 15, 0, 1, 31, 31\n\t" + "xor 16, 9, 14\n\t" + "xor 17, 10, 15\n\t" + "lwz 18, 32(%[state])\n\t" + "lwz 19, 36(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 32(%[state])\n\t" + "stw 19, 36(%[state])\n\t" + "lwz 18, 72(%[state])\n\t" + "lwz 19, 76(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 72(%[state])\n\t" + "stw 19, 76(%[state])\n\t" + "lwz 18, 112(%[state])\n\t" + "lwz 19, 116(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 112(%[state])\n\t" + "stw 19, 116(%[state])\n\t" + "lwz 18, 152(%[state])\n\t" + "lwz 19, 156(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 152(%[state])\n\t" + "stw 19, 156(%[state])\n\t" + "lwz 18, 192(%[state])\n\t" + "lwz 19, 196(%[state])\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 192(%[state])\n\t" + "stw 19, 196(%[state])\n\t" + /* Row Mix */ + /* Row 0 */ + "lwz 0, 0(%[state])\n\t" + "lwz 4, 4(%[state])\n\t" + "lwz 14, 48(%[state])\n\t" + "lwz 15, 52(%[state])\n\t" + "rlwinm 5, 15, 12, 0, 19\n\t" + "rlwimi 5, 14, 12, 20, 31\n\t" + "rlwinm 6, 14, 12, 0, 19\n\t" + "rlwimi 6, 15, 12, 20, 31\n\t" + "lwz 14, 96(%[state])\n\t" + "lwz 15, 100(%[state])\n\t" + "rlwinm 7, 15, 11, 0, 20\n\t" + "rlwimi 7, 14, 11, 21, 31\n\t" + "rlwinm 8, 14, 11, 0, 20\n\t" + "rlwimi 8, 15, 11, 21, 31\n\t" + "lwz 14, 144(%[state])\n\t" + "lwz 15, 148(%[state])\n\t" + "rlwinm 9, 14, 21, 0, 10\n\t" + "rlwimi 9, 15, 21, 11, 31\n\t" + "rlwinm 10, 15, 21, 0, 10\n\t" + "rlwimi 10, 14, 21, 11, 31\n\t" + "lwz 14, 192(%[state])\n\t" + "lwz 15, 196(%[state])\n\t" + "rlwinm 11, 14, 14, 0, 17\n\t" + "rlwimi 11, 15, 14, 18, 31\n\t" + "rlwinm 12, 15, 14, 0, 17\n\t" + "rlwimi 12, 14, 14, 18, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 8(1)\n\t" + "stw 15, 12(1)\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 16(1)\n\t" + "stw 15, 20(1)\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 24(1)\n\t" + "stw 15, 28(1)\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 32(1)\n\t" + "stw 15, 36(1)\n\t" + /* Get constant */ + "lwz 11, 0(20)\n\t" + "lwz 12, 4(20)\n\t" + "addi 20, 20, 8\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + /* XOR in constant */ + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 0(1)\n\t" + "stw 15, 4(1)\n\t" + /* Row 1 */ + "lwz 14, 24(%[state])\n\t" + "lwz 15, 28(%[state])\n\t" + "rlwinm 0, 14, 28, 0, 3\n\t" + "rlwimi 0, 15, 28, 4, 31\n\t" + "rlwinm 4, 15, 28, 0, 3\n\t" + "rlwimi 4, 14, 28, 4, 31\n\t" + "lwz 14, 72(%[state])\n\t" + "lwz 15, 76(%[state])\n\t" + "rlwinm 5, 14, 20, 0, 11\n\t" + "rlwimi 5, 15, 20, 12, 31\n\t" + "rlwinm 6, 15, 20, 0, 11\n\t" + "rlwimi 6, 14, 20, 12, 31\n\t" + "lwz 14, 80(%[state])\n\t" + "lwz 15, 84(%[state])\n\t" + "rlwinm 7, 14, 3, 0, 28\n\t" + "rlwimi 7, 15, 3, 29, 31\n\t" + "rlwinm 8, 15, 3, 0, 28\n\t" + "rlwimi 8, 14, 3, 29, 31\n\t" + "lwz 14, 128(%[state])\n\t" + "lwz 15, 132(%[state])\n\t" + "rlwinm 9, 15, 13, 0, 18\n\t" + "rlwimi 9, 14, 13, 19, 31\n\t" + "rlwinm 10, 14, 13, 0, 18\n\t" + "rlwimi 10, 15, 13, 19, 31\n\t" + "lwz 14, 176(%[state])\n\t" + "lwz 15, 180(%[state])\n\t" + "rlwinm 11, 15, 29, 0, 2\n\t" + "rlwimi 11, 14, 29, 3, 31\n\t" + "rlwinm 12, 14, 29, 0, 2\n\t" + "rlwimi 12, 15, 29, 3, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 48(1)\n\t" + "stw 15, 52(1)\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 56(1)\n\t" + "stw 15, 60(1)\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 64(1)\n\t" + "stw 15, 68(1)\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 72(1)\n\t" + "stw 15, 76(1)\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 40(1)\n\t" + "stw 15, 44(1)\n\t" + /* Row 2 */ + "lwz 14, 8(%[state])\n\t" + "lwz 15, 12(%[state])\n\t" + "rlwinm 0, 14, 1, 0, 30\n\t" + "rlwimi 0, 15, 1, 31, 31\n\t" + "rlwinm 4, 15, 1, 0, 30\n\t" + "rlwimi 4, 14, 1, 31, 31\n\t" + "lwz 14, 56(%[state])\n\t" + "lwz 15, 60(%[state])\n\t" + "rlwinm 5, 14, 6, 0, 25\n\t" + "rlwimi 5, 15, 6, 26, 31\n\t" + "rlwinm 6, 15, 6, 0, 25\n\t" + "rlwimi 6, 14, 6, 26, 31\n\t" + "lwz 14, 104(%[state])\n\t" + "lwz 15, 108(%[state])\n\t" + "rlwinm 7, 14, 25, 0, 6\n\t" + "rlwimi 7, 15, 25, 7, 31\n\t" + "rlwinm 8, 15, 25, 0, 6\n\t" + "rlwimi 8, 14, 25, 7, 31\n\t" + "lwz 14, 152(%[state])\n\t" + "lwz 15, 156(%[state])\n\t" + "rlwinm 9, 14, 8, 0, 23\n\t" + "rlwimi 9, 15, 8, 24, 31\n\t" + "rlwinm 10, 15, 8, 0, 23\n\t" + "rlwimi 10, 14, 8, 24, 31\n\t" + "lwz 14, 160(%[state])\n\t" + "lwz 15, 164(%[state])\n\t" + "rlwinm 11, 14, 18, 0, 13\n\t" + "rlwimi 11, 15, 18, 14, 31\n\t" + "rlwinm 12, 15, 18, 0, 13\n\t" + "rlwimi 12, 14, 18, 14, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 88(1)\n\t" + "stw 15, 92(1)\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 96(1)\n\t" + "stw 15, 100(1)\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 104(1)\n\t" + "stw 15, 108(1)\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 112(1)\n\t" + "stw 15, 116(1)\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 80(1)\n\t" + "stw 15, 84(1)\n\t" + /* Row 3 */ + "lwz 14, 32(%[state])\n\t" + "lwz 15, 36(%[state])\n\t" + "rlwinm 0, 14, 27, 0, 4\n\t" + "rlwimi 0, 15, 27, 5, 31\n\t" + "rlwinm 4, 15, 27, 0, 4\n\t" + "rlwimi 4, 14, 27, 5, 31\n\t" + "lwz 14, 40(%[state])\n\t" + "lwz 15, 44(%[state])\n\t" + "rlwinm 5, 15, 4, 0, 27\n\t" + "rlwimi 5, 14, 4, 28, 31\n\t" + "rlwinm 6, 14, 4, 0, 27\n\t" + "rlwimi 6, 15, 4, 28, 31\n\t" + "lwz 14, 88(%[state])\n\t" + "lwz 15, 92(%[state])\n\t" + "rlwinm 7, 14, 10, 0, 21\n\t" + "rlwimi 7, 15, 10, 22, 31\n\t" + "rlwinm 8, 15, 10, 0, 21\n\t" + "rlwimi 8, 14, 10, 22, 31\n\t" + "lwz 14, 136(%[state])\n\t" + "lwz 15, 140(%[state])\n\t" + "rlwinm 9, 14, 15, 0, 16\n\t" + "rlwimi 9, 15, 15, 17, 31\n\t" + "rlwinm 10, 15, 15, 0, 16\n\t" + "rlwimi 10, 14, 15, 17, 31\n\t" + "lwz 14, 184(%[state])\n\t" + "lwz 15, 188(%[state])\n\t" + "rlwinm 11, 15, 24, 0, 7\n\t" + "rlwimi 11, 14, 24, 8, 31\n\t" + "rlwinm 12, 14, 24, 0, 7\n\t" + "rlwimi 12, 15, 24, 8, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 128(1)\n\t" + "stw 15, 132(1)\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 136(1)\n\t" + "stw 15, 140(1)\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 144(1)\n\t" + "stw 15, 148(1)\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 152(1)\n\t" + "stw 15, 156(1)\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 120(1)\n\t" + "stw 15, 124(1)\n\t" + /* Row 4 */ + "lwz 14, 16(%[state])\n\t" + "lwz 15, 20(%[state])\n\t" + "rlwinm 0, 15, 30, 0, 1\n\t" + "rlwimi 0, 14, 30, 2, 31\n\t" + "rlwinm 4, 14, 30, 0, 1\n\t" + "rlwimi 4, 15, 30, 2, 31\n\t" + "lwz 14, 64(%[state])\n\t" + "lwz 15, 68(%[state])\n\t" + "rlwinm 5, 15, 23, 0, 8\n\t" + "rlwimi 5, 14, 23, 9, 31\n\t" + "rlwinm 6, 14, 23, 0, 8\n\t" + "rlwimi 6, 15, 23, 9, 31\n\t" + "lwz 14, 112(%[state])\n\t" + "lwz 15, 116(%[state])\n\t" + "rlwinm 7, 15, 7, 0, 24\n\t" + "rlwimi 7, 14, 7, 25, 31\n\t" + "rlwinm 8, 14, 7, 0, 24\n\t" + "rlwimi 8, 15, 7, 25, 31\n\t" + "lwz 14, 120(%[state])\n\t" + "lwz 15, 124(%[state])\n\t" + "rlwinm 9, 15, 9, 0, 22\n\t" + "rlwimi 9, 14, 9, 23, 31\n\t" + "rlwinm 10, 14, 9, 0, 22\n\t" + "rlwimi 10, 15, 9, 23, 31\n\t" + "lwz 14, 168(%[state])\n\t" + "lwz 15, 172(%[state])\n\t" + "rlwinm 11, 14, 2, 0, 29\n\t" + "rlwimi 11, 15, 2, 30, 31\n\t" + "rlwinm 12, 15, 2, 0, 29\n\t" + "rlwimi 12, 14, 2, 30, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 168(1)\n\t" + "stw 15, 172(1)\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 176(1)\n\t" + "stw 15, 180(1)\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 184(1)\n\t" + "stw 15, 188(1)\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 192(1)\n\t" + "stw 15, 196(1)\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 160(1)\n\t" + "stw 15, 164(1)\n\t" + /* Round odd - scratch -> state */ + /* Column Mix */ + "lwz 0, 0(1)\n\t" + "lwz 4, 4(1)\n\t" + "lwz 18, 40(1)\n\t" + "lwz 19, 44(1)\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 18, 80(1)\n\t" + "lwz 19, 84(1)\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 18, 120(1)\n\t" + "lwz 19, 124(1)\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 18, 160(1)\n\t" + "lwz 19, 164(1)\n\t" + "xor 0, 0, 18\n\t" + "xor 4, 4, 19\n\t" + "lwz 5, 8(1)\n\t" + "lwz 6, 12(1)\n\t" + "lwz 18, 48(1)\n\t" + "lwz 19, 52(1)\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 18, 88(1)\n\t" + "lwz 19, 92(1)\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 18, 128(1)\n\t" + "lwz 19, 132(1)\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 18, 168(1)\n\t" + "lwz 19, 172(1)\n\t" + "xor 5, 5, 18\n\t" + "xor 6, 6, 19\n\t" + "lwz 7, 16(1)\n\t" + "lwz 8, 20(1)\n\t" + "lwz 18, 56(1)\n\t" + "lwz 19, 60(1)\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 18, 96(1)\n\t" + "lwz 19, 100(1)\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 18, 136(1)\n\t" + "lwz 19, 140(1)\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 18, 176(1)\n\t" + "lwz 19, 180(1)\n\t" + "xor 7, 7, 18\n\t" + "xor 8, 8, 19\n\t" + "lwz 9, 24(1)\n\t" + "lwz 10, 28(1)\n\t" + "lwz 18, 64(1)\n\t" + "lwz 19, 68(1)\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 18, 104(1)\n\t" + "lwz 19, 108(1)\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 18, 144(1)\n\t" + "lwz 19, 148(1)\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 18, 184(1)\n\t" + "lwz 19, 188(1)\n\t" + "xor 9, 9, 18\n\t" + "xor 10, 10, 19\n\t" + "lwz 11, 32(1)\n\t" + "lwz 12, 36(1)\n\t" + "lwz 18, 72(1)\n\t" + "lwz 19, 76(1)\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "lwz 18, 112(1)\n\t" + "lwz 19, 116(1)\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "lwz 18, 152(1)\n\t" + "lwz 19, 156(1)\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "lwz 18, 192(1)\n\t" + "lwz 19, 196(1)\n\t" + "xor 11, 11, 18\n\t" + "xor 12, 12, 19\n\t" + "rlwinm 14, 5, 1, 0, 30\n\t" + "rlwimi 14, 6, 1, 31, 31\n\t" + "rlwinm 15, 6, 1, 0, 30\n\t" + "rlwimi 15, 5, 1, 31, 31\n\t" + "xor 16, 11, 14\n\t" + "xor 17, 12, 15\n\t" + "lwz 18, 0(1)\n\t" + "lwz 19, 4(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 0(1)\n\t" + "stw 19, 4(1)\n\t" + "lwz 18, 40(1)\n\t" + "lwz 19, 44(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 40(1)\n\t" + "stw 19, 44(1)\n\t" + "lwz 18, 80(1)\n\t" + "lwz 19, 84(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 80(1)\n\t" + "stw 19, 84(1)\n\t" + "lwz 18, 120(1)\n\t" + "lwz 19, 124(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 120(1)\n\t" + "stw 19, 124(1)\n\t" + "lwz 18, 160(1)\n\t" + "lwz 19, 164(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 160(1)\n\t" + "stw 19, 164(1)\n\t" + "rlwinm 14, 7, 1, 0, 30\n\t" + "rlwimi 14, 8, 1, 31, 31\n\t" + "rlwinm 15, 8, 1, 0, 30\n\t" + "rlwimi 15, 7, 1, 31, 31\n\t" + "xor 16, 0, 14\n\t" + "xor 17, 4, 15\n\t" + "lwz 18, 8(1)\n\t" + "lwz 19, 12(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 8(1)\n\t" + "stw 19, 12(1)\n\t" + "lwz 18, 48(1)\n\t" + "lwz 19, 52(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 48(1)\n\t" + "stw 19, 52(1)\n\t" + "lwz 18, 88(1)\n\t" + "lwz 19, 92(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 88(1)\n\t" + "stw 19, 92(1)\n\t" + "lwz 18, 128(1)\n\t" + "lwz 19, 132(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 128(1)\n\t" + "stw 19, 132(1)\n\t" + "lwz 18, 168(1)\n\t" + "lwz 19, 172(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 168(1)\n\t" + "stw 19, 172(1)\n\t" + "rlwinm 14, 9, 1, 0, 30\n\t" + "rlwimi 14, 10, 1, 31, 31\n\t" + "rlwinm 15, 10, 1, 0, 30\n\t" + "rlwimi 15, 9, 1, 31, 31\n\t" + "xor 16, 5, 14\n\t" + "xor 17, 6, 15\n\t" + "lwz 18, 16(1)\n\t" + "lwz 19, 20(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 16(1)\n\t" + "stw 19, 20(1)\n\t" + "lwz 18, 56(1)\n\t" + "lwz 19, 60(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 56(1)\n\t" + "stw 19, 60(1)\n\t" + "lwz 18, 96(1)\n\t" + "lwz 19, 100(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 96(1)\n\t" + "stw 19, 100(1)\n\t" + "lwz 18, 136(1)\n\t" + "lwz 19, 140(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 136(1)\n\t" + "stw 19, 140(1)\n\t" + "lwz 18, 176(1)\n\t" + "lwz 19, 180(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 176(1)\n\t" + "stw 19, 180(1)\n\t" + "rlwinm 14, 11, 1, 0, 30\n\t" + "rlwimi 14, 12, 1, 31, 31\n\t" + "rlwinm 15, 12, 1, 0, 30\n\t" + "rlwimi 15, 11, 1, 31, 31\n\t" + "xor 16, 7, 14\n\t" + "xor 17, 8, 15\n\t" + "lwz 18, 24(1)\n\t" + "lwz 19, 28(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 24(1)\n\t" + "stw 19, 28(1)\n\t" + "lwz 18, 64(1)\n\t" + "lwz 19, 68(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 64(1)\n\t" + "stw 19, 68(1)\n\t" + "lwz 18, 104(1)\n\t" + "lwz 19, 108(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 104(1)\n\t" + "stw 19, 108(1)\n\t" + "lwz 18, 144(1)\n\t" + "lwz 19, 148(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 144(1)\n\t" + "stw 19, 148(1)\n\t" + "lwz 18, 184(1)\n\t" + "lwz 19, 188(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 184(1)\n\t" + "stw 19, 188(1)\n\t" + "rlwinm 14, 0, 1, 0, 30\n\t" + "rlwimi 14, 4, 1, 31, 31\n\t" + "rlwinm 15, 4, 1, 0, 30\n\t" + "rlwimi 15, 0, 1, 31, 31\n\t" + "xor 16, 9, 14\n\t" + "xor 17, 10, 15\n\t" + "lwz 18, 32(1)\n\t" + "lwz 19, 36(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 32(1)\n\t" + "stw 19, 36(1)\n\t" + "lwz 18, 72(1)\n\t" + "lwz 19, 76(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 72(1)\n\t" + "stw 19, 76(1)\n\t" + "lwz 18, 112(1)\n\t" + "lwz 19, 116(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 112(1)\n\t" + "stw 19, 116(1)\n\t" + "lwz 18, 152(1)\n\t" + "lwz 19, 156(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 152(1)\n\t" + "stw 19, 156(1)\n\t" + "lwz 18, 192(1)\n\t" + "lwz 19, 196(1)\n\t" + "xor 18, 18, 16\n\t" + "xor 19, 19, 17\n\t" + "stw 18, 192(1)\n\t" + "stw 19, 196(1)\n\t" + /* Row Mix */ + /* Row 0 */ + "lwz 0, 0(1)\n\t" + "lwz 4, 4(1)\n\t" + "lwz 14, 48(1)\n\t" + "lwz 15, 52(1)\n\t" + "rlwinm 5, 15, 12, 0, 19\n\t" + "rlwimi 5, 14, 12, 20, 31\n\t" + "rlwinm 6, 14, 12, 0, 19\n\t" + "rlwimi 6, 15, 12, 20, 31\n\t" + "lwz 14, 96(1)\n\t" + "lwz 15, 100(1)\n\t" + "rlwinm 7, 15, 11, 0, 20\n\t" + "rlwimi 7, 14, 11, 21, 31\n\t" + "rlwinm 8, 14, 11, 0, 20\n\t" + "rlwimi 8, 15, 11, 21, 31\n\t" + "lwz 14, 144(1)\n\t" + "lwz 15, 148(1)\n\t" + "rlwinm 9, 14, 21, 0, 10\n\t" + "rlwimi 9, 15, 21, 11, 31\n\t" + "rlwinm 10, 15, 21, 0, 10\n\t" + "rlwimi 10, 14, 21, 11, 31\n\t" + "lwz 14, 192(1)\n\t" + "lwz 15, 196(1)\n\t" + "rlwinm 11, 14, 14, 0, 17\n\t" + "rlwimi 11, 15, 14, 18, 31\n\t" + "rlwinm 12, 15, 14, 0, 17\n\t" + "rlwimi 12, 14, 14, 18, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 8(%[state])\n\t" + "stw 15, 12(%[state])\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 16(%[state])\n\t" + "stw 15, 20(%[state])\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 24(%[state])\n\t" + "stw 15, 28(%[state])\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 32(%[state])\n\t" + "stw 15, 36(%[state])\n\t" + /* Get constant */ + "lwz 11, 0(20)\n\t" + "lwz 12, 4(20)\n\t" + "addi 20, 20, 8\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + /* XOR in constant */ + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 0(%[state])\n\t" + "stw 15, 4(%[state])\n\t" + /* Row 1 */ + "lwz 14, 24(1)\n\t" + "lwz 15, 28(1)\n\t" + "rlwinm 0, 14, 28, 0, 3\n\t" + "rlwimi 0, 15, 28, 4, 31\n\t" + "rlwinm 4, 15, 28, 0, 3\n\t" + "rlwimi 4, 14, 28, 4, 31\n\t" + "lwz 14, 72(1)\n\t" + "lwz 15, 76(1)\n\t" + "rlwinm 5, 14, 20, 0, 11\n\t" + "rlwimi 5, 15, 20, 12, 31\n\t" + "rlwinm 6, 15, 20, 0, 11\n\t" + "rlwimi 6, 14, 20, 12, 31\n\t" + "lwz 14, 80(1)\n\t" + "lwz 15, 84(1)\n\t" + "rlwinm 7, 14, 3, 0, 28\n\t" + "rlwimi 7, 15, 3, 29, 31\n\t" + "rlwinm 8, 15, 3, 0, 28\n\t" + "rlwimi 8, 14, 3, 29, 31\n\t" + "lwz 14, 128(1)\n\t" + "lwz 15, 132(1)\n\t" + "rlwinm 9, 15, 13, 0, 18\n\t" + "rlwimi 9, 14, 13, 19, 31\n\t" + "rlwinm 10, 14, 13, 0, 18\n\t" + "rlwimi 10, 15, 13, 19, 31\n\t" + "lwz 14, 176(1)\n\t" + "lwz 15, 180(1)\n\t" + "rlwinm 11, 15, 29, 0, 2\n\t" + "rlwimi 11, 14, 29, 3, 31\n\t" + "rlwinm 12, 14, 29, 0, 2\n\t" + "rlwimi 12, 15, 29, 3, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 48(%[state])\n\t" + "stw 15, 52(%[state])\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 56(%[state])\n\t" + "stw 15, 60(%[state])\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 64(%[state])\n\t" + "stw 15, 68(%[state])\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 72(%[state])\n\t" + "stw 15, 76(%[state])\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 40(%[state])\n\t" + "stw 15, 44(%[state])\n\t" + /* Row 2 */ + "lwz 14, 8(1)\n\t" + "lwz 15, 12(1)\n\t" + "rlwinm 0, 14, 1, 0, 30\n\t" + "rlwimi 0, 15, 1, 31, 31\n\t" + "rlwinm 4, 15, 1, 0, 30\n\t" + "rlwimi 4, 14, 1, 31, 31\n\t" + "lwz 14, 56(1)\n\t" + "lwz 15, 60(1)\n\t" + "rlwinm 5, 14, 6, 0, 25\n\t" + "rlwimi 5, 15, 6, 26, 31\n\t" + "rlwinm 6, 15, 6, 0, 25\n\t" + "rlwimi 6, 14, 6, 26, 31\n\t" + "lwz 14, 104(1)\n\t" + "lwz 15, 108(1)\n\t" + "rlwinm 7, 14, 25, 0, 6\n\t" + "rlwimi 7, 15, 25, 7, 31\n\t" + "rlwinm 8, 15, 25, 0, 6\n\t" + "rlwimi 8, 14, 25, 7, 31\n\t" + "lwz 14, 152(1)\n\t" + "lwz 15, 156(1)\n\t" + "rlwinm 9, 14, 8, 0, 23\n\t" + "rlwimi 9, 15, 8, 24, 31\n\t" + "rlwinm 10, 15, 8, 0, 23\n\t" + "rlwimi 10, 14, 8, 24, 31\n\t" + "lwz 14, 160(1)\n\t" + "lwz 15, 164(1)\n\t" + "rlwinm 11, 14, 18, 0, 13\n\t" + "rlwimi 11, 15, 18, 14, 31\n\t" + "rlwinm 12, 15, 18, 0, 13\n\t" + "rlwimi 12, 14, 18, 14, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 88(%[state])\n\t" + "stw 15, 92(%[state])\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 96(%[state])\n\t" + "stw 15, 100(%[state])\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 104(%[state])\n\t" + "stw 15, 108(%[state])\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 112(%[state])\n\t" + "stw 15, 116(%[state])\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 80(%[state])\n\t" + "stw 15, 84(%[state])\n\t" + /* Row 3 */ + "lwz 14, 32(1)\n\t" + "lwz 15, 36(1)\n\t" + "rlwinm 0, 14, 27, 0, 4\n\t" + "rlwimi 0, 15, 27, 5, 31\n\t" + "rlwinm 4, 15, 27, 0, 4\n\t" + "rlwimi 4, 14, 27, 5, 31\n\t" + "lwz 14, 40(1)\n\t" + "lwz 15, 44(1)\n\t" + "rlwinm 5, 15, 4, 0, 27\n\t" + "rlwimi 5, 14, 4, 28, 31\n\t" + "rlwinm 6, 14, 4, 0, 27\n\t" + "rlwimi 6, 15, 4, 28, 31\n\t" + "lwz 14, 88(1)\n\t" + "lwz 15, 92(1)\n\t" + "rlwinm 7, 14, 10, 0, 21\n\t" + "rlwimi 7, 15, 10, 22, 31\n\t" + "rlwinm 8, 15, 10, 0, 21\n\t" + "rlwimi 8, 14, 10, 22, 31\n\t" + "lwz 14, 136(1)\n\t" + "lwz 15, 140(1)\n\t" + "rlwinm 9, 14, 15, 0, 16\n\t" + "rlwimi 9, 15, 15, 17, 31\n\t" + "rlwinm 10, 15, 15, 0, 16\n\t" + "rlwimi 10, 14, 15, 17, 31\n\t" + "lwz 14, 184(1)\n\t" + "lwz 15, 188(1)\n\t" + "rlwinm 11, 15, 24, 0, 7\n\t" + "rlwimi 11, 14, 24, 8, 31\n\t" + "rlwinm 12, 14, 24, 0, 7\n\t" + "rlwimi 12, 15, 24, 8, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 128(%[state])\n\t" + "stw 15, 132(%[state])\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 136(%[state])\n\t" + "stw 15, 140(%[state])\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 144(%[state])\n\t" + "stw 15, 148(%[state])\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 152(%[state])\n\t" + "stw 15, 156(%[state])\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 120(%[state])\n\t" + "stw 15, 124(%[state])\n\t" + /* Row 4 */ + "lwz 14, 16(1)\n\t" + "lwz 15, 20(1)\n\t" + "rlwinm 0, 15, 30, 0, 1\n\t" + "rlwimi 0, 14, 30, 2, 31\n\t" + "rlwinm 4, 14, 30, 0, 1\n\t" + "rlwimi 4, 15, 30, 2, 31\n\t" + "lwz 14, 64(1)\n\t" + "lwz 15, 68(1)\n\t" + "rlwinm 5, 15, 23, 0, 8\n\t" + "rlwimi 5, 14, 23, 9, 31\n\t" + "rlwinm 6, 14, 23, 0, 8\n\t" + "rlwimi 6, 15, 23, 9, 31\n\t" + "lwz 14, 112(1)\n\t" + "lwz 15, 116(1)\n\t" + "rlwinm 7, 15, 7, 0, 24\n\t" + "rlwimi 7, 14, 7, 25, 31\n\t" + "rlwinm 8, 14, 7, 0, 24\n\t" + "rlwimi 8, 15, 7, 25, 31\n\t" + "lwz 14, 120(1)\n\t" + "lwz 15, 124(1)\n\t" + "rlwinm 9, 15, 9, 0, 22\n\t" + "rlwimi 9, 14, 9, 23, 31\n\t" + "rlwinm 10, 14, 9, 0, 22\n\t" + "rlwimi 10, 15, 9, 23, 31\n\t" + "lwz 14, 168(1)\n\t" + "lwz 15, 172(1)\n\t" + "rlwinm 11, 14, 2, 0, 29\n\t" + "rlwimi 11, 15, 2, 30, 31\n\t" + "rlwinm 12, 15, 2, 0, 29\n\t" + "rlwimi 12, 14, 2, 30, 31\n\t" + "andc 14, 9, 7\n\t" + "andc 15, 10, 8\n\t" + "xor 14, 14, 5\n\t" + "xor 15, 15, 6\n\t" + "stw 14, 168(%[state])\n\t" + "stw 15, 172(%[state])\n\t" + "andc 14, 11, 9\n\t" + "andc 15, 12, 10\n\t" + "xor 14, 14, 7\n\t" + "xor 15, 15, 8\n\t" + "stw 14, 176(%[state])\n\t" + "stw 15, 180(%[state])\n\t" + "andc 14, 0, 11\n\t" + "andc 15, 4, 12\n\t" + "xor 14, 14, 9\n\t" + "xor 15, 15, 10\n\t" + "stw 14, 184(%[state])\n\t" + "stw 15, 188(%[state])\n\t" + "andc 14, 5, 0\n\t" + "andc 15, 6, 4\n\t" + "xor 14, 14, 11\n\t" + "xor 15, 15, 12\n\t" + "stw 14, 192(%[state])\n\t" + "stw 15, 196(%[state])\n\t" + "andc 14, 7, 5\n\t" + "andc 15, 8, 6\n\t" + "xor 14, 14, 0\n\t" + "xor 15, 15, 4\n\t" + "stw 14, 160(%[state])\n\t" + "stw 15, 164(%[state])\n\t" + "bdnz L_sha3_ppc32_begin_%=\n\t" + "addi 1, 1, 0xd0\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [state] "+r" (state), [L_sha3_ppc32_rt] "+r" (L_sha3_ppc32_rt_c) + : +#else + : + : [state] "r" (state), [L_sha3_ppc32_rt] "r" (L_sha3_ppc32_rt_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "5", "6", "7", "8", "9", "10", "11", "12", "14", + "15", "16", "17", "18", "19", "20" + ); +} + +#endif /* WOLFSSL_SHA3 && WOLFSSL_PPC32_ASM */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c b/wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c new file mode 100644 index 00000000000..570235d10b8 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha3-asm_cr.c @@ -0,0 +1,1269 @@ +/* ppc32-sha3-asm + * + * Copyright (C) 2006-2026 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 ./sha3/sha3.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha3-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#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__ */ + +#if defined(WOLFSSL_SHA3) && defined(WOLFSSL_PPC32_ASM) +#include + +XALIGNED(16) static const word64 L_sha3_ppc32_rt[] = { + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL, +}; + +void BlockSha3(word64* state_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void BlockSha3(word64* state_p) +#else +WC_OMIT_FRAME_POINTER void BlockSha3(word64* state) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register word64* state __asm__ ("r3") = (word64*)state_p; + register word64* L_sha3_ppc32_rt_c __asm__ ("r4") = + (word64*)&L_sha3_ppc32_rt; +#else + register word64* L_sha3_ppc32_rt_c = (word64*)&L_sha3_ppc32_rt; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr r20, %[L_sha3_ppc32_rt]\n\t" + "subi r1, r1, 0xd0\n\t" + "li r14, 12\n\t" + "mtctr r14\n\t" + /* Start of 24 rounds (two per iteration) */ + "\n" + "L_sha3_ppc32_begin_%=:\n\t" + /* Round even - state -> scratch */ + /* Column Mix */ + "lwz r0, 0(%[state])\n\t" + "lwz r4, 4(%[state])\n\t" + "lwz r18, 40(%[state])\n\t" + "lwz r19, 44(%[state])\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r18, 80(%[state])\n\t" + "lwz r19, 84(%[state])\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r18, 120(%[state])\n\t" + "lwz r19, 124(%[state])\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r18, 160(%[state])\n\t" + "lwz r19, 164(%[state])\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r5, 8(%[state])\n\t" + "lwz r6, 12(%[state])\n\t" + "lwz r18, 48(%[state])\n\t" + "lwz r19, 52(%[state])\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r18, 88(%[state])\n\t" + "lwz r19, 92(%[state])\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r18, 128(%[state])\n\t" + "lwz r19, 132(%[state])\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r18, 168(%[state])\n\t" + "lwz r19, 172(%[state])\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r7, 16(%[state])\n\t" + "lwz r8, 20(%[state])\n\t" + "lwz r18, 56(%[state])\n\t" + "lwz r19, 60(%[state])\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r18, 96(%[state])\n\t" + "lwz r19, 100(%[state])\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r18, 136(%[state])\n\t" + "lwz r19, 140(%[state])\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r18, 176(%[state])\n\t" + "lwz r19, 180(%[state])\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r9, 24(%[state])\n\t" + "lwz r10, 28(%[state])\n\t" + "lwz r18, 64(%[state])\n\t" + "lwz r19, 68(%[state])\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r18, 104(%[state])\n\t" + "lwz r19, 108(%[state])\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r18, 144(%[state])\n\t" + "lwz r19, 148(%[state])\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r18, 184(%[state])\n\t" + "lwz r19, 188(%[state])\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r11, 32(%[state])\n\t" + "lwz r12, 36(%[state])\n\t" + "lwz r18, 72(%[state])\n\t" + "lwz r19, 76(%[state])\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "lwz r18, 112(%[state])\n\t" + "lwz r19, 116(%[state])\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "lwz r18, 152(%[state])\n\t" + "lwz r19, 156(%[state])\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "lwz r18, 192(%[state])\n\t" + "lwz r19, 196(%[state])\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "rlwinm r14, r5, 1, 0, 30\n\t" + "rlwimi r14, r6, 1, 31, 31\n\t" + "rlwinm r15, r6, 1, 0, 30\n\t" + "rlwimi r15, r5, 1, 31, 31\n\t" + "xor r16, r11, r14\n\t" + "xor r17, r12, r15\n\t" + "lwz r18, 0(%[state])\n\t" + "lwz r19, 4(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 0(%[state])\n\t" + "stw r19, 4(%[state])\n\t" + "lwz r18, 40(%[state])\n\t" + "lwz r19, 44(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 40(%[state])\n\t" + "stw r19, 44(%[state])\n\t" + "lwz r18, 80(%[state])\n\t" + "lwz r19, 84(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 80(%[state])\n\t" + "stw r19, 84(%[state])\n\t" + "lwz r18, 120(%[state])\n\t" + "lwz r19, 124(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 120(%[state])\n\t" + "stw r19, 124(%[state])\n\t" + "lwz r18, 160(%[state])\n\t" + "lwz r19, 164(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 160(%[state])\n\t" + "stw r19, 164(%[state])\n\t" + "rlwinm r14, r7, 1, 0, 30\n\t" + "rlwimi r14, r8, 1, 31, 31\n\t" + "rlwinm r15, r8, 1, 0, 30\n\t" + "rlwimi r15, r7, 1, 31, 31\n\t" + "xor r16, r0, r14\n\t" + "xor r17, r4, r15\n\t" + "lwz r18, 8(%[state])\n\t" + "lwz r19, 12(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 8(%[state])\n\t" + "stw r19, 12(%[state])\n\t" + "lwz r18, 48(%[state])\n\t" + "lwz r19, 52(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 48(%[state])\n\t" + "stw r19, 52(%[state])\n\t" + "lwz r18, 88(%[state])\n\t" + "lwz r19, 92(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 88(%[state])\n\t" + "stw r19, 92(%[state])\n\t" + "lwz r18, 128(%[state])\n\t" + "lwz r19, 132(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 128(%[state])\n\t" + "stw r19, 132(%[state])\n\t" + "lwz r18, 168(%[state])\n\t" + "lwz r19, 172(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 168(%[state])\n\t" + "stw r19, 172(%[state])\n\t" + "rlwinm r14, r9, 1, 0, 30\n\t" + "rlwimi r14, r10, 1, 31, 31\n\t" + "rlwinm r15, r10, 1, 0, 30\n\t" + "rlwimi r15, r9, 1, 31, 31\n\t" + "xor r16, r5, r14\n\t" + "xor r17, r6, r15\n\t" + "lwz r18, 16(%[state])\n\t" + "lwz r19, 20(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 16(%[state])\n\t" + "stw r19, 20(%[state])\n\t" + "lwz r18, 56(%[state])\n\t" + "lwz r19, 60(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 56(%[state])\n\t" + "stw r19, 60(%[state])\n\t" + "lwz r18, 96(%[state])\n\t" + "lwz r19, 100(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 96(%[state])\n\t" + "stw r19, 100(%[state])\n\t" + "lwz r18, 136(%[state])\n\t" + "lwz r19, 140(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 136(%[state])\n\t" + "stw r19, 140(%[state])\n\t" + "lwz r18, 176(%[state])\n\t" + "lwz r19, 180(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 176(%[state])\n\t" + "stw r19, 180(%[state])\n\t" + "rlwinm r14, r11, 1, 0, 30\n\t" + "rlwimi r14, r12, 1, 31, 31\n\t" + "rlwinm r15, r12, 1, 0, 30\n\t" + "rlwimi r15, r11, 1, 31, 31\n\t" + "xor r16, r7, r14\n\t" + "xor r17, r8, r15\n\t" + "lwz r18, 24(%[state])\n\t" + "lwz r19, 28(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 24(%[state])\n\t" + "stw r19, 28(%[state])\n\t" + "lwz r18, 64(%[state])\n\t" + "lwz r19, 68(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 64(%[state])\n\t" + "stw r19, 68(%[state])\n\t" + "lwz r18, 104(%[state])\n\t" + "lwz r19, 108(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 104(%[state])\n\t" + "stw r19, 108(%[state])\n\t" + "lwz r18, 144(%[state])\n\t" + "lwz r19, 148(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 144(%[state])\n\t" + "stw r19, 148(%[state])\n\t" + "lwz r18, 184(%[state])\n\t" + "lwz r19, 188(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 184(%[state])\n\t" + "stw r19, 188(%[state])\n\t" + "rlwinm r14, r0, 1, 0, 30\n\t" + "rlwimi r14, r4, 1, 31, 31\n\t" + "rlwinm r15, r4, 1, 0, 30\n\t" + "rlwimi r15, r0, 1, 31, 31\n\t" + "xor r16, r9, r14\n\t" + "xor r17, r10, r15\n\t" + "lwz r18, 32(%[state])\n\t" + "lwz r19, 36(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 32(%[state])\n\t" + "stw r19, 36(%[state])\n\t" + "lwz r18, 72(%[state])\n\t" + "lwz r19, 76(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 72(%[state])\n\t" + "stw r19, 76(%[state])\n\t" + "lwz r18, 112(%[state])\n\t" + "lwz r19, 116(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 112(%[state])\n\t" + "stw r19, 116(%[state])\n\t" + "lwz r18, 152(%[state])\n\t" + "lwz r19, 156(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 152(%[state])\n\t" + "stw r19, 156(%[state])\n\t" + "lwz r18, 192(%[state])\n\t" + "lwz r19, 196(%[state])\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 192(%[state])\n\t" + "stw r19, 196(%[state])\n\t" + /* Row Mix */ + /* Row 0 */ + "lwz r0, 0(%[state])\n\t" + "lwz r4, 4(%[state])\n\t" + "lwz r14, 48(%[state])\n\t" + "lwz r15, 52(%[state])\n\t" + "rlwinm r5, r15, 12, 0, 19\n\t" + "rlwimi r5, r14, 12, 20, 31\n\t" + "rlwinm r6, r14, 12, 0, 19\n\t" + "rlwimi r6, r15, 12, 20, 31\n\t" + "lwz r14, 96(%[state])\n\t" + "lwz r15, 100(%[state])\n\t" + "rlwinm r7, r15, 11, 0, 20\n\t" + "rlwimi r7, r14, 11, 21, 31\n\t" + "rlwinm r8, r14, 11, 0, 20\n\t" + "rlwimi r8, r15, 11, 21, 31\n\t" + "lwz r14, 144(%[state])\n\t" + "lwz r15, 148(%[state])\n\t" + "rlwinm r9, r14, 21, 0, 10\n\t" + "rlwimi r9, r15, 21, 11, 31\n\t" + "rlwinm r10, r15, 21, 0, 10\n\t" + "rlwimi r10, r14, 21, 11, 31\n\t" + "lwz r14, 192(%[state])\n\t" + "lwz r15, 196(%[state])\n\t" + "rlwinm r11, r14, 14, 0, 17\n\t" + "rlwimi r11, r15, 14, 18, 31\n\t" + "rlwinm r12, r15, 14, 0, 17\n\t" + "rlwimi r12, r14, 14, 18, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 8(r1)\n\t" + "stw r15, 12(r1)\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 16(r1)\n\t" + "stw r15, 20(r1)\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 24(r1)\n\t" + "stw r15, 28(r1)\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 32(r1)\n\t" + "stw r15, 36(r1)\n\t" + /* Get constant */ + "lwz r11, 0(r20)\n\t" + "lwz r12, 4(r20)\n\t" + "addi r20, r20, 8\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + /* XOR in constant */ + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 0(r1)\n\t" + "stw r15, 4(r1)\n\t" + /* Row 1 */ + "lwz r14, 24(%[state])\n\t" + "lwz r15, 28(%[state])\n\t" + "rlwinm r0, r14, 28, 0, 3\n\t" + "rlwimi r0, r15, 28, 4, 31\n\t" + "rlwinm r4, r15, 28, 0, 3\n\t" + "rlwimi r4, r14, 28, 4, 31\n\t" + "lwz r14, 72(%[state])\n\t" + "lwz r15, 76(%[state])\n\t" + "rlwinm r5, r14, 20, 0, 11\n\t" + "rlwimi r5, r15, 20, 12, 31\n\t" + "rlwinm r6, r15, 20, 0, 11\n\t" + "rlwimi r6, r14, 20, 12, 31\n\t" + "lwz r14, 80(%[state])\n\t" + "lwz r15, 84(%[state])\n\t" + "rlwinm r7, r14, 3, 0, 28\n\t" + "rlwimi r7, r15, 3, 29, 31\n\t" + "rlwinm r8, r15, 3, 0, 28\n\t" + "rlwimi r8, r14, 3, 29, 31\n\t" + "lwz r14, 128(%[state])\n\t" + "lwz r15, 132(%[state])\n\t" + "rlwinm r9, r15, 13, 0, 18\n\t" + "rlwimi r9, r14, 13, 19, 31\n\t" + "rlwinm r10, r14, 13, 0, 18\n\t" + "rlwimi r10, r15, 13, 19, 31\n\t" + "lwz r14, 176(%[state])\n\t" + "lwz r15, 180(%[state])\n\t" + "rlwinm r11, r15, 29, 0, 2\n\t" + "rlwimi r11, r14, 29, 3, 31\n\t" + "rlwinm r12, r14, 29, 0, 2\n\t" + "rlwimi r12, r15, 29, 3, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 48(r1)\n\t" + "stw r15, 52(r1)\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 56(r1)\n\t" + "stw r15, 60(r1)\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 64(r1)\n\t" + "stw r15, 68(r1)\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 72(r1)\n\t" + "stw r15, 76(r1)\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 40(r1)\n\t" + "stw r15, 44(r1)\n\t" + /* Row 2 */ + "lwz r14, 8(%[state])\n\t" + "lwz r15, 12(%[state])\n\t" + "rlwinm r0, r14, 1, 0, 30\n\t" + "rlwimi r0, r15, 1, 31, 31\n\t" + "rlwinm r4, r15, 1, 0, 30\n\t" + "rlwimi r4, r14, 1, 31, 31\n\t" + "lwz r14, 56(%[state])\n\t" + "lwz r15, 60(%[state])\n\t" + "rlwinm r5, r14, 6, 0, 25\n\t" + "rlwimi r5, r15, 6, 26, 31\n\t" + "rlwinm r6, r15, 6, 0, 25\n\t" + "rlwimi r6, r14, 6, 26, 31\n\t" + "lwz r14, 104(%[state])\n\t" + "lwz r15, 108(%[state])\n\t" + "rlwinm r7, r14, 25, 0, 6\n\t" + "rlwimi r7, r15, 25, 7, 31\n\t" + "rlwinm r8, r15, 25, 0, 6\n\t" + "rlwimi r8, r14, 25, 7, 31\n\t" + "lwz r14, 152(%[state])\n\t" + "lwz r15, 156(%[state])\n\t" + "rlwinm r9, r14, 8, 0, 23\n\t" + "rlwimi r9, r15, 8, 24, 31\n\t" + "rlwinm r10, r15, 8, 0, 23\n\t" + "rlwimi r10, r14, 8, 24, 31\n\t" + "lwz r14, 160(%[state])\n\t" + "lwz r15, 164(%[state])\n\t" + "rlwinm r11, r14, 18, 0, 13\n\t" + "rlwimi r11, r15, 18, 14, 31\n\t" + "rlwinm r12, r15, 18, 0, 13\n\t" + "rlwimi r12, r14, 18, 14, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 88(r1)\n\t" + "stw r15, 92(r1)\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 96(r1)\n\t" + "stw r15, 100(r1)\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 104(r1)\n\t" + "stw r15, 108(r1)\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 112(r1)\n\t" + "stw r15, 116(r1)\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 80(r1)\n\t" + "stw r15, 84(r1)\n\t" + /* Row 3 */ + "lwz r14, 32(%[state])\n\t" + "lwz r15, 36(%[state])\n\t" + "rlwinm r0, r14, 27, 0, 4\n\t" + "rlwimi r0, r15, 27, 5, 31\n\t" + "rlwinm r4, r15, 27, 0, 4\n\t" + "rlwimi r4, r14, 27, 5, 31\n\t" + "lwz r14, 40(%[state])\n\t" + "lwz r15, 44(%[state])\n\t" + "rlwinm r5, r15, 4, 0, 27\n\t" + "rlwimi r5, r14, 4, 28, 31\n\t" + "rlwinm r6, r14, 4, 0, 27\n\t" + "rlwimi r6, r15, 4, 28, 31\n\t" + "lwz r14, 88(%[state])\n\t" + "lwz r15, 92(%[state])\n\t" + "rlwinm r7, r14, 10, 0, 21\n\t" + "rlwimi r7, r15, 10, 22, 31\n\t" + "rlwinm r8, r15, 10, 0, 21\n\t" + "rlwimi r8, r14, 10, 22, 31\n\t" + "lwz r14, 136(%[state])\n\t" + "lwz r15, 140(%[state])\n\t" + "rlwinm r9, r14, 15, 0, 16\n\t" + "rlwimi r9, r15, 15, 17, 31\n\t" + "rlwinm r10, r15, 15, 0, 16\n\t" + "rlwimi r10, r14, 15, 17, 31\n\t" + "lwz r14, 184(%[state])\n\t" + "lwz r15, 188(%[state])\n\t" + "rlwinm r11, r15, 24, 0, 7\n\t" + "rlwimi r11, r14, 24, 8, 31\n\t" + "rlwinm r12, r14, 24, 0, 7\n\t" + "rlwimi r12, r15, 24, 8, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 128(r1)\n\t" + "stw r15, 132(r1)\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 136(r1)\n\t" + "stw r15, 140(r1)\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 144(r1)\n\t" + "stw r15, 148(r1)\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 152(r1)\n\t" + "stw r15, 156(r1)\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 120(r1)\n\t" + "stw r15, 124(r1)\n\t" + /* Row 4 */ + "lwz r14, 16(%[state])\n\t" + "lwz r15, 20(%[state])\n\t" + "rlwinm r0, r15, 30, 0, 1\n\t" + "rlwimi r0, r14, 30, 2, 31\n\t" + "rlwinm r4, r14, 30, 0, 1\n\t" + "rlwimi r4, r15, 30, 2, 31\n\t" + "lwz r14, 64(%[state])\n\t" + "lwz r15, 68(%[state])\n\t" + "rlwinm r5, r15, 23, 0, 8\n\t" + "rlwimi r5, r14, 23, 9, 31\n\t" + "rlwinm r6, r14, 23, 0, 8\n\t" + "rlwimi r6, r15, 23, 9, 31\n\t" + "lwz r14, 112(%[state])\n\t" + "lwz r15, 116(%[state])\n\t" + "rlwinm r7, r15, 7, 0, 24\n\t" + "rlwimi r7, r14, 7, 25, 31\n\t" + "rlwinm r8, r14, 7, 0, 24\n\t" + "rlwimi r8, r15, 7, 25, 31\n\t" + "lwz r14, 120(%[state])\n\t" + "lwz r15, 124(%[state])\n\t" + "rlwinm r9, r15, 9, 0, 22\n\t" + "rlwimi r9, r14, 9, 23, 31\n\t" + "rlwinm r10, r14, 9, 0, 22\n\t" + "rlwimi r10, r15, 9, 23, 31\n\t" + "lwz r14, 168(%[state])\n\t" + "lwz r15, 172(%[state])\n\t" + "rlwinm r11, r14, 2, 0, 29\n\t" + "rlwimi r11, r15, 2, 30, 31\n\t" + "rlwinm r12, r15, 2, 0, 29\n\t" + "rlwimi r12, r14, 2, 30, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 168(r1)\n\t" + "stw r15, 172(r1)\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 176(r1)\n\t" + "stw r15, 180(r1)\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 184(r1)\n\t" + "stw r15, 188(r1)\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 192(r1)\n\t" + "stw r15, 196(r1)\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 160(r1)\n\t" + "stw r15, 164(r1)\n\t" + /* Round odd - scratch -> state */ + /* Column Mix */ + "lwz r0, 0(r1)\n\t" + "lwz r4, 4(r1)\n\t" + "lwz r18, 40(r1)\n\t" + "lwz r19, 44(r1)\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r18, 80(r1)\n\t" + "lwz r19, 84(r1)\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r18, 120(r1)\n\t" + "lwz r19, 124(r1)\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r18, 160(r1)\n\t" + "lwz r19, 164(r1)\n\t" + "xor r0, r0, r18\n\t" + "xor r4, r4, r19\n\t" + "lwz r5, 8(r1)\n\t" + "lwz r6, 12(r1)\n\t" + "lwz r18, 48(r1)\n\t" + "lwz r19, 52(r1)\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r18, 88(r1)\n\t" + "lwz r19, 92(r1)\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r18, 128(r1)\n\t" + "lwz r19, 132(r1)\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r18, 168(r1)\n\t" + "lwz r19, 172(r1)\n\t" + "xor r5, r5, r18\n\t" + "xor r6, r6, r19\n\t" + "lwz r7, 16(r1)\n\t" + "lwz r8, 20(r1)\n\t" + "lwz r18, 56(r1)\n\t" + "lwz r19, 60(r1)\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r18, 96(r1)\n\t" + "lwz r19, 100(r1)\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r18, 136(r1)\n\t" + "lwz r19, 140(r1)\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r18, 176(r1)\n\t" + "lwz r19, 180(r1)\n\t" + "xor r7, r7, r18\n\t" + "xor r8, r8, r19\n\t" + "lwz r9, 24(r1)\n\t" + "lwz r10, 28(r1)\n\t" + "lwz r18, 64(r1)\n\t" + "lwz r19, 68(r1)\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r18, 104(r1)\n\t" + "lwz r19, 108(r1)\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r18, 144(r1)\n\t" + "lwz r19, 148(r1)\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r18, 184(r1)\n\t" + "lwz r19, 188(r1)\n\t" + "xor r9, r9, r18\n\t" + "xor r10, r10, r19\n\t" + "lwz r11, 32(r1)\n\t" + "lwz r12, 36(r1)\n\t" + "lwz r18, 72(r1)\n\t" + "lwz r19, 76(r1)\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "lwz r18, 112(r1)\n\t" + "lwz r19, 116(r1)\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "lwz r18, 152(r1)\n\t" + "lwz r19, 156(r1)\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "lwz r18, 192(r1)\n\t" + "lwz r19, 196(r1)\n\t" + "xor r11, r11, r18\n\t" + "xor r12, r12, r19\n\t" + "rlwinm r14, r5, 1, 0, 30\n\t" + "rlwimi r14, r6, 1, 31, 31\n\t" + "rlwinm r15, r6, 1, 0, 30\n\t" + "rlwimi r15, r5, 1, 31, 31\n\t" + "xor r16, r11, r14\n\t" + "xor r17, r12, r15\n\t" + "lwz r18, 0(r1)\n\t" + "lwz r19, 4(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 0(r1)\n\t" + "stw r19, 4(r1)\n\t" + "lwz r18, 40(r1)\n\t" + "lwz r19, 44(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 40(r1)\n\t" + "stw r19, 44(r1)\n\t" + "lwz r18, 80(r1)\n\t" + "lwz r19, 84(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 80(r1)\n\t" + "stw r19, 84(r1)\n\t" + "lwz r18, 120(r1)\n\t" + "lwz r19, 124(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 120(r1)\n\t" + "stw r19, 124(r1)\n\t" + "lwz r18, 160(r1)\n\t" + "lwz r19, 164(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 160(r1)\n\t" + "stw r19, 164(r1)\n\t" + "rlwinm r14, r7, 1, 0, 30\n\t" + "rlwimi r14, r8, 1, 31, 31\n\t" + "rlwinm r15, r8, 1, 0, 30\n\t" + "rlwimi r15, r7, 1, 31, 31\n\t" + "xor r16, r0, r14\n\t" + "xor r17, r4, r15\n\t" + "lwz r18, 8(r1)\n\t" + "lwz r19, 12(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 8(r1)\n\t" + "stw r19, 12(r1)\n\t" + "lwz r18, 48(r1)\n\t" + "lwz r19, 52(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 48(r1)\n\t" + "stw r19, 52(r1)\n\t" + "lwz r18, 88(r1)\n\t" + "lwz r19, 92(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 88(r1)\n\t" + "stw r19, 92(r1)\n\t" + "lwz r18, 128(r1)\n\t" + "lwz r19, 132(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 128(r1)\n\t" + "stw r19, 132(r1)\n\t" + "lwz r18, 168(r1)\n\t" + "lwz r19, 172(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 168(r1)\n\t" + "stw r19, 172(r1)\n\t" + "rlwinm r14, r9, 1, 0, 30\n\t" + "rlwimi r14, r10, 1, 31, 31\n\t" + "rlwinm r15, r10, 1, 0, 30\n\t" + "rlwimi r15, r9, 1, 31, 31\n\t" + "xor r16, r5, r14\n\t" + "xor r17, r6, r15\n\t" + "lwz r18, 16(r1)\n\t" + "lwz r19, 20(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 16(r1)\n\t" + "stw r19, 20(r1)\n\t" + "lwz r18, 56(r1)\n\t" + "lwz r19, 60(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 56(r1)\n\t" + "stw r19, 60(r1)\n\t" + "lwz r18, 96(r1)\n\t" + "lwz r19, 100(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 96(r1)\n\t" + "stw r19, 100(r1)\n\t" + "lwz r18, 136(r1)\n\t" + "lwz r19, 140(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 136(r1)\n\t" + "stw r19, 140(r1)\n\t" + "lwz r18, 176(r1)\n\t" + "lwz r19, 180(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 176(r1)\n\t" + "stw r19, 180(r1)\n\t" + "rlwinm r14, r11, 1, 0, 30\n\t" + "rlwimi r14, r12, 1, 31, 31\n\t" + "rlwinm r15, r12, 1, 0, 30\n\t" + "rlwimi r15, r11, 1, 31, 31\n\t" + "xor r16, r7, r14\n\t" + "xor r17, r8, r15\n\t" + "lwz r18, 24(r1)\n\t" + "lwz r19, 28(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 24(r1)\n\t" + "stw r19, 28(r1)\n\t" + "lwz r18, 64(r1)\n\t" + "lwz r19, 68(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 64(r1)\n\t" + "stw r19, 68(r1)\n\t" + "lwz r18, 104(r1)\n\t" + "lwz r19, 108(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 104(r1)\n\t" + "stw r19, 108(r1)\n\t" + "lwz r18, 144(r1)\n\t" + "lwz r19, 148(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 144(r1)\n\t" + "stw r19, 148(r1)\n\t" + "lwz r18, 184(r1)\n\t" + "lwz r19, 188(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 184(r1)\n\t" + "stw r19, 188(r1)\n\t" + "rlwinm r14, r0, 1, 0, 30\n\t" + "rlwimi r14, r4, 1, 31, 31\n\t" + "rlwinm r15, r4, 1, 0, 30\n\t" + "rlwimi r15, r0, 1, 31, 31\n\t" + "xor r16, r9, r14\n\t" + "xor r17, r10, r15\n\t" + "lwz r18, 32(r1)\n\t" + "lwz r19, 36(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 32(r1)\n\t" + "stw r19, 36(r1)\n\t" + "lwz r18, 72(r1)\n\t" + "lwz r19, 76(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 72(r1)\n\t" + "stw r19, 76(r1)\n\t" + "lwz r18, 112(r1)\n\t" + "lwz r19, 116(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 112(r1)\n\t" + "stw r19, 116(r1)\n\t" + "lwz r18, 152(r1)\n\t" + "lwz r19, 156(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 152(r1)\n\t" + "stw r19, 156(r1)\n\t" + "lwz r18, 192(r1)\n\t" + "lwz r19, 196(r1)\n\t" + "xor r18, r18, r16\n\t" + "xor r19, r19, r17\n\t" + "stw r18, 192(r1)\n\t" + "stw r19, 196(r1)\n\t" + /* Row Mix */ + /* Row 0 */ + "lwz r0, 0(r1)\n\t" + "lwz r4, 4(r1)\n\t" + "lwz r14, 48(r1)\n\t" + "lwz r15, 52(r1)\n\t" + "rlwinm r5, r15, 12, 0, 19\n\t" + "rlwimi r5, r14, 12, 20, 31\n\t" + "rlwinm r6, r14, 12, 0, 19\n\t" + "rlwimi r6, r15, 12, 20, 31\n\t" + "lwz r14, 96(r1)\n\t" + "lwz r15, 100(r1)\n\t" + "rlwinm r7, r15, 11, 0, 20\n\t" + "rlwimi r7, r14, 11, 21, 31\n\t" + "rlwinm r8, r14, 11, 0, 20\n\t" + "rlwimi r8, r15, 11, 21, 31\n\t" + "lwz r14, 144(r1)\n\t" + "lwz r15, 148(r1)\n\t" + "rlwinm r9, r14, 21, 0, 10\n\t" + "rlwimi r9, r15, 21, 11, 31\n\t" + "rlwinm r10, r15, 21, 0, 10\n\t" + "rlwimi r10, r14, 21, 11, 31\n\t" + "lwz r14, 192(r1)\n\t" + "lwz r15, 196(r1)\n\t" + "rlwinm r11, r14, 14, 0, 17\n\t" + "rlwimi r11, r15, 14, 18, 31\n\t" + "rlwinm r12, r15, 14, 0, 17\n\t" + "rlwimi r12, r14, 14, 18, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 8(%[state])\n\t" + "stw r15, 12(%[state])\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 16(%[state])\n\t" + "stw r15, 20(%[state])\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 24(%[state])\n\t" + "stw r15, 28(%[state])\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 32(%[state])\n\t" + "stw r15, 36(%[state])\n\t" + /* Get constant */ + "lwz r11, 0(r20)\n\t" + "lwz r12, 4(r20)\n\t" + "addi r20, r20, 8\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + /* XOR in constant */ + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 0(%[state])\n\t" + "stw r15, 4(%[state])\n\t" + /* Row 1 */ + "lwz r14, 24(r1)\n\t" + "lwz r15, 28(r1)\n\t" + "rlwinm r0, r14, 28, 0, 3\n\t" + "rlwimi r0, r15, 28, 4, 31\n\t" + "rlwinm r4, r15, 28, 0, 3\n\t" + "rlwimi r4, r14, 28, 4, 31\n\t" + "lwz r14, 72(r1)\n\t" + "lwz r15, 76(r1)\n\t" + "rlwinm r5, r14, 20, 0, 11\n\t" + "rlwimi r5, r15, 20, 12, 31\n\t" + "rlwinm r6, r15, 20, 0, 11\n\t" + "rlwimi r6, r14, 20, 12, 31\n\t" + "lwz r14, 80(r1)\n\t" + "lwz r15, 84(r1)\n\t" + "rlwinm r7, r14, 3, 0, 28\n\t" + "rlwimi r7, r15, 3, 29, 31\n\t" + "rlwinm r8, r15, 3, 0, 28\n\t" + "rlwimi r8, r14, 3, 29, 31\n\t" + "lwz r14, 128(r1)\n\t" + "lwz r15, 132(r1)\n\t" + "rlwinm r9, r15, 13, 0, 18\n\t" + "rlwimi r9, r14, 13, 19, 31\n\t" + "rlwinm r10, r14, 13, 0, 18\n\t" + "rlwimi r10, r15, 13, 19, 31\n\t" + "lwz r14, 176(r1)\n\t" + "lwz r15, 180(r1)\n\t" + "rlwinm r11, r15, 29, 0, 2\n\t" + "rlwimi r11, r14, 29, 3, 31\n\t" + "rlwinm r12, r14, 29, 0, 2\n\t" + "rlwimi r12, r15, 29, 3, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 48(%[state])\n\t" + "stw r15, 52(%[state])\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 56(%[state])\n\t" + "stw r15, 60(%[state])\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 64(%[state])\n\t" + "stw r15, 68(%[state])\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 72(%[state])\n\t" + "stw r15, 76(%[state])\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 40(%[state])\n\t" + "stw r15, 44(%[state])\n\t" + /* Row 2 */ + "lwz r14, 8(r1)\n\t" + "lwz r15, 12(r1)\n\t" + "rlwinm r0, r14, 1, 0, 30\n\t" + "rlwimi r0, r15, 1, 31, 31\n\t" + "rlwinm r4, r15, 1, 0, 30\n\t" + "rlwimi r4, r14, 1, 31, 31\n\t" + "lwz r14, 56(r1)\n\t" + "lwz r15, 60(r1)\n\t" + "rlwinm r5, r14, 6, 0, 25\n\t" + "rlwimi r5, r15, 6, 26, 31\n\t" + "rlwinm r6, r15, 6, 0, 25\n\t" + "rlwimi r6, r14, 6, 26, 31\n\t" + "lwz r14, 104(r1)\n\t" + "lwz r15, 108(r1)\n\t" + "rlwinm r7, r14, 25, 0, 6\n\t" + "rlwimi r7, r15, 25, 7, 31\n\t" + "rlwinm r8, r15, 25, 0, 6\n\t" + "rlwimi r8, r14, 25, 7, 31\n\t" + "lwz r14, 152(r1)\n\t" + "lwz r15, 156(r1)\n\t" + "rlwinm r9, r14, 8, 0, 23\n\t" + "rlwimi r9, r15, 8, 24, 31\n\t" + "rlwinm r10, r15, 8, 0, 23\n\t" + "rlwimi r10, r14, 8, 24, 31\n\t" + "lwz r14, 160(r1)\n\t" + "lwz r15, 164(r1)\n\t" + "rlwinm r11, r14, 18, 0, 13\n\t" + "rlwimi r11, r15, 18, 14, 31\n\t" + "rlwinm r12, r15, 18, 0, 13\n\t" + "rlwimi r12, r14, 18, 14, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 88(%[state])\n\t" + "stw r15, 92(%[state])\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 96(%[state])\n\t" + "stw r15, 100(%[state])\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 104(%[state])\n\t" + "stw r15, 108(%[state])\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 112(%[state])\n\t" + "stw r15, 116(%[state])\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 80(%[state])\n\t" + "stw r15, 84(%[state])\n\t" + /* Row 3 */ + "lwz r14, 32(r1)\n\t" + "lwz r15, 36(r1)\n\t" + "rlwinm r0, r14, 27, 0, 4\n\t" + "rlwimi r0, r15, 27, 5, 31\n\t" + "rlwinm r4, r15, 27, 0, 4\n\t" + "rlwimi r4, r14, 27, 5, 31\n\t" + "lwz r14, 40(r1)\n\t" + "lwz r15, 44(r1)\n\t" + "rlwinm r5, r15, 4, 0, 27\n\t" + "rlwimi r5, r14, 4, 28, 31\n\t" + "rlwinm r6, r14, 4, 0, 27\n\t" + "rlwimi r6, r15, 4, 28, 31\n\t" + "lwz r14, 88(r1)\n\t" + "lwz r15, 92(r1)\n\t" + "rlwinm r7, r14, 10, 0, 21\n\t" + "rlwimi r7, r15, 10, 22, 31\n\t" + "rlwinm r8, r15, 10, 0, 21\n\t" + "rlwimi r8, r14, 10, 22, 31\n\t" + "lwz r14, 136(r1)\n\t" + "lwz r15, 140(r1)\n\t" + "rlwinm r9, r14, 15, 0, 16\n\t" + "rlwimi r9, r15, 15, 17, 31\n\t" + "rlwinm r10, r15, 15, 0, 16\n\t" + "rlwimi r10, r14, 15, 17, 31\n\t" + "lwz r14, 184(r1)\n\t" + "lwz r15, 188(r1)\n\t" + "rlwinm r11, r15, 24, 0, 7\n\t" + "rlwimi r11, r14, 24, 8, 31\n\t" + "rlwinm r12, r14, 24, 0, 7\n\t" + "rlwimi r12, r15, 24, 8, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 128(%[state])\n\t" + "stw r15, 132(%[state])\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 136(%[state])\n\t" + "stw r15, 140(%[state])\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 144(%[state])\n\t" + "stw r15, 148(%[state])\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 152(%[state])\n\t" + "stw r15, 156(%[state])\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 120(%[state])\n\t" + "stw r15, 124(%[state])\n\t" + /* Row 4 */ + "lwz r14, 16(r1)\n\t" + "lwz r15, 20(r1)\n\t" + "rlwinm r0, r15, 30, 0, 1\n\t" + "rlwimi r0, r14, 30, 2, 31\n\t" + "rlwinm r4, r14, 30, 0, 1\n\t" + "rlwimi r4, r15, 30, 2, 31\n\t" + "lwz r14, 64(r1)\n\t" + "lwz r15, 68(r1)\n\t" + "rlwinm r5, r15, 23, 0, 8\n\t" + "rlwimi r5, r14, 23, 9, 31\n\t" + "rlwinm r6, r14, 23, 0, 8\n\t" + "rlwimi r6, r15, 23, 9, 31\n\t" + "lwz r14, 112(r1)\n\t" + "lwz r15, 116(r1)\n\t" + "rlwinm r7, r15, 7, 0, 24\n\t" + "rlwimi r7, r14, 7, 25, 31\n\t" + "rlwinm r8, r14, 7, 0, 24\n\t" + "rlwimi r8, r15, 7, 25, 31\n\t" + "lwz r14, 120(r1)\n\t" + "lwz r15, 124(r1)\n\t" + "rlwinm r9, r15, 9, 0, 22\n\t" + "rlwimi r9, r14, 9, 23, 31\n\t" + "rlwinm r10, r14, 9, 0, 22\n\t" + "rlwimi r10, r15, 9, 23, 31\n\t" + "lwz r14, 168(r1)\n\t" + "lwz r15, 172(r1)\n\t" + "rlwinm r11, r14, 2, 0, 29\n\t" + "rlwimi r11, r15, 2, 30, 31\n\t" + "rlwinm r12, r15, 2, 0, 29\n\t" + "rlwimi r12, r14, 2, 30, 31\n\t" + "andc r14, r9, r7\n\t" + "andc r15, r10, r8\n\t" + "xor r14, r14, r5\n\t" + "xor r15, r15, r6\n\t" + "stw r14, 168(%[state])\n\t" + "stw r15, 172(%[state])\n\t" + "andc r14, r11, r9\n\t" + "andc r15, r12, r10\n\t" + "xor r14, r14, r7\n\t" + "xor r15, r15, r8\n\t" + "stw r14, 176(%[state])\n\t" + "stw r15, 180(%[state])\n\t" + "andc r14, r0, r11\n\t" + "andc r15, r4, r12\n\t" + "xor r14, r14, r9\n\t" + "xor r15, r15, r10\n\t" + "stw r14, 184(%[state])\n\t" + "stw r15, 188(%[state])\n\t" + "andc r14, r5, r0\n\t" + "andc r15, r6, r4\n\t" + "xor r14, r14, r11\n\t" + "xor r15, r15, r12\n\t" + "stw r14, 192(%[state])\n\t" + "stw r15, 196(%[state])\n\t" + "andc r14, r7, r5\n\t" + "andc r15, r8, r6\n\t" + "xor r14, r14, r0\n\t" + "xor r15, r15, r4\n\t" + "stw r14, 160(%[state])\n\t" + "stw r15, 164(%[state])\n\t" + "bdnz L_sha3_ppc32_begin_%=\n\t" + "addi r1, r1, 0xd0\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [state] "+r" (state), [L_sha3_ppc32_rt] "+r" (L_sha3_ppc32_rt_c) + : +#else + : + : [state] "r" (state), [L_sha3_ppc32_rt] "r" (L_sha3_ppc32_rt_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "r0", "r5", "r6", "r7", "r8", "r9", "r10", "r11", + "r12", "r14", "r15", "r16", "r17", "r18", "r19", "r20" + ); +} + +#endif /* WOLFSSL_SHA3 && WOLFSSL_PPC32_ASM */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S b/wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S new file mode 100644 index 00000000000..2b962ebf374 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S @@ -0,0 +1,8496 @@ +/* ppc32-sha512-asm + * + * Copyright (C) 2006-2026 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/sha512.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha512-asm.S + */ + +#include + +#ifdef WOLFSSL_PPC32_ASM +#ifndef WOLFSSL_PPC32_ASM_INLINE + .machine ppc +#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384) +#ifndef __APPLE__ + .text + .type L_SHA512_transform_len_k, %object + .size L_SHA512_transform_len_k, 640 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA512_transform_len_k: + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + .section ".text" + .align 4 + .globl Transform_Sha512_Len + .type Transform_Sha512_Len, @function +Transform_Sha512_Len: + stwu 1, -72(1) + mflr 0 + stw 0, 68(1) + stw 14, 0(1) + stw 15, 4(1) + stw 16, 8(1) + stw 17, 12(1) + stw 18, 16(1) + stw 19, 20(1) + stw 20, 24(1) + stw 21, 28(1) + stw 22, 32(1) + stw 23, 36(1) + stw 24, 40(1) + stw 25, 44(1) + stw 26, 48(1) + stw 27, 52(1) + stw 28, 56(1) + stw 29, 60(1) + stw 30, 64(1) + srwi 5, 5, 7 + lis 30, L_SHA512_transform_len_k@ha + la 30, L_SHA512_transform_len_k@l(30) + # Copy digest to add in at end + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + lwz 9, 16(3) + lwz 10, 20(3) + lwz 11, 24(3) + lwz 12, 28(3) + lwz 14, 32(3) + lwz 15, 36(3) + lwz 16, 40(3) + lwz 17, 44(3) + lwz 18, 48(3) + lwz 19, 52(3) + lwz 20, 56(3) + lwz 21, 60(3) + subi 1, 1, 0x80 + mtctr 5 + # Start of loop processing a block +L_SHA512_transform_len_begin: + # Load W - 128 bytes + lwz 22, 0(4) + lwz 23, 4(4) + stw 22, 0(1) + stw 23, 4(1) + lwz 22, 8(4) + lwz 23, 12(4) + stw 22, 8(1) + stw 23, 12(1) + lwz 22, 16(4) + lwz 23, 20(4) + stw 22, 16(1) + stw 23, 20(1) + lwz 22, 24(4) + lwz 23, 28(4) + stw 22, 24(1) + stw 23, 28(1) + lwz 22, 32(4) + lwz 23, 36(4) + stw 22, 32(1) + stw 23, 36(1) + lwz 22, 40(4) + lwz 23, 44(4) + stw 22, 40(1) + stw 23, 44(1) + lwz 22, 48(4) + lwz 23, 52(4) + stw 22, 48(1) + stw 23, 52(1) + lwz 22, 56(4) + lwz 23, 60(4) + stw 22, 56(1) + stw 23, 60(1) + lwz 22, 64(4) + lwz 23, 68(4) + stw 22, 64(1) + stw 23, 68(1) + lwz 22, 72(4) + lwz 23, 76(4) + stw 22, 72(1) + stw 23, 76(1) + lwz 22, 80(4) + lwz 23, 84(4) + stw 22, 80(1) + stw 23, 84(1) + lwz 22, 88(4) + lwz 23, 92(4) + stw 22, 88(1) + stw 23, 92(1) + lwz 22, 96(4) + lwz 23, 100(4) + stw 22, 96(1) + stw 23, 100(1) + lwz 22, 104(4) + lwz 23, 108(4) + stw 22, 104(1) + stw 23, 108(1) + lwz 22, 112(4) + lwz 23, 116(4) + stw 22, 112(1) + stw 23, 116(1) + lwz 22, 120(4) + lwz 23, 124(4) + stw 22, 120(1) + stw 23, 124(1) + # Start of 80 rounds + # Round 0 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(1) + lwz 23, 4(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(30) + lwz 23, 4(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[0] + lwz 28, 0(1) + lwz 29, 4(1) + lwz 24, 72(1) + lwz 25, 76(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 0(1) + stw 29, 4(1) + # Round 1 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(1) + lwz 23, 12(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(30) + lwz 23, 12(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[1] + lwz 28, 8(1) + lwz 29, 12(1) + lwz 24, 80(1) + lwz 25, 84(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 8(1) + stw 29, 12(1) + # Round 2 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(1) + lwz 23, 20(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(30) + lwz 23, 20(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[2] + lwz 28, 16(1) + lwz 29, 20(1) + lwz 24, 88(1) + lwz 25, 92(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 16(1) + stw 29, 20(1) + # Round 3 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(1) + lwz 23, 28(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(30) + lwz 23, 28(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[3] + lwz 28, 24(1) + lwz 29, 28(1) + lwz 24, 96(1) + lwz 25, 100(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 24(1) + stw 29, 28(1) + # Round 4 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(1) + lwz 23, 36(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(30) + lwz 23, 36(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[4] + lwz 28, 32(1) + lwz 29, 36(1) + lwz 24, 104(1) + lwz 25, 108(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 32(1) + stw 29, 36(1) + # Round 5 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(1) + lwz 23, 44(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(30) + lwz 23, 44(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[5] + lwz 28, 40(1) + lwz 29, 44(1) + lwz 24, 112(1) + lwz 25, 116(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 40(1) + stw 29, 44(1) + # Round 6 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(1) + lwz 23, 52(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(30) + lwz 23, 52(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[6] + lwz 28, 48(1) + lwz 29, 52(1) + lwz 24, 120(1) + lwz 25, 124(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 48(1) + stw 29, 52(1) + # Round 7 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(1) + lwz 23, 60(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(30) + lwz 23, 60(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[7] + lwz 28, 56(1) + lwz 29, 60(1) + lwz 24, 0(1) + lwz 25, 4(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 56(1) + stw 29, 60(1) + # Round 8 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(1) + lwz 23, 68(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(30) + lwz 23, 68(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[8] + lwz 28, 64(1) + lwz 29, 68(1) + lwz 24, 8(1) + lwz 25, 12(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 64(1) + stw 29, 68(1) + # Round 9 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(1) + lwz 23, 76(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(30) + lwz 23, 76(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[9] + lwz 28, 72(1) + lwz 29, 76(1) + lwz 24, 16(1) + lwz 25, 20(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 72(1) + stw 29, 76(1) + # Round 10 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(1) + lwz 23, 84(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(30) + lwz 23, 84(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[10] + lwz 28, 80(1) + lwz 29, 84(1) + lwz 24, 24(1) + lwz 25, 28(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 80(1) + stw 29, 84(1) + # Round 11 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(1) + lwz 23, 92(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(30) + lwz 23, 92(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[11] + lwz 28, 88(1) + lwz 29, 92(1) + lwz 24, 32(1) + lwz 25, 36(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 88(1) + stw 29, 92(1) + # Round 12 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(1) + lwz 23, 100(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(30) + lwz 23, 100(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[12] + lwz 28, 96(1) + lwz 29, 100(1) + lwz 24, 40(1) + lwz 25, 44(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 96(1) + stw 29, 100(1) + # Round 13 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(1) + lwz 23, 108(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(30) + lwz 23, 108(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[13] + lwz 28, 104(1) + lwz 29, 108(1) + lwz 24, 48(1) + lwz 25, 52(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 104(1) + stw 29, 108(1) + # Round 14 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(1) + lwz 23, 116(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(30) + lwz 23, 116(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[14] + lwz 28, 112(1) + lwz 29, 116(1) + lwz 24, 56(1) + lwz 25, 60(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 112(1) + stw 29, 116(1) + # Round 15 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(1) + lwz 23, 124(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(30) + lwz 23, 124(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[15] + lwz 28, 120(1) + lwz 29, 124(1) + lwz 24, 64(1) + lwz 25, 68(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 120(1) + stw 29, 124(1) + addi 30, 30, 0x80 + # Round 0 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(1) + lwz 23, 4(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(30) + lwz 23, 4(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[0] + lwz 28, 0(1) + lwz 29, 4(1) + lwz 24, 72(1) + lwz 25, 76(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 0(1) + stw 29, 4(1) + # Round 1 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(1) + lwz 23, 12(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(30) + lwz 23, 12(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[1] + lwz 28, 8(1) + lwz 29, 12(1) + lwz 24, 80(1) + lwz 25, 84(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 8(1) + stw 29, 12(1) + # Round 2 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(1) + lwz 23, 20(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(30) + lwz 23, 20(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[2] + lwz 28, 16(1) + lwz 29, 20(1) + lwz 24, 88(1) + lwz 25, 92(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 16(1) + stw 29, 20(1) + # Round 3 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(1) + lwz 23, 28(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(30) + lwz 23, 28(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[3] + lwz 28, 24(1) + lwz 29, 28(1) + lwz 24, 96(1) + lwz 25, 100(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 24(1) + stw 29, 28(1) + # Round 4 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(1) + lwz 23, 36(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(30) + lwz 23, 36(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[4] + lwz 28, 32(1) + lwz 29, 36(1) + lwz 24, 104(1) + lwz 25, 108(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 32(1) + stw 29, 36(1) + # Round 5 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(1) + lwz 23, 44(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(30) + lwz 23, 44(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[5] + lwz 28, 40(1) + lwz 29, 44(1) + lwz 24, 112(1) + lwz 25, 116(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 40(1) + stw 29, 44(1) + # Round 6 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(1) + lwz 23, 52(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(30) + lwz 23, 52(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[6] + lwz 28, 48(1) + lwz 29, 52(1) + lwz 24, 120(1) + lwz 25, 124(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 48(1) + stw 29, 52(1) + # Round 7 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(1) + lwz 23, 60(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(30) + lwz 23, 60(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[7] + lwz 28, 56(1) + lwz 29, 60(1) + lwz 24, 0(1) + lwz 25, 4(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 56(1) + stw 29, 60(1) + # Round 8 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(1) + lwz 23, 68(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(30) + lwz 23, 68(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[8] + lwz 28, 64(1) + lwz 29, 68(1) + lwz 24, 8(1) + lwz 25, 12(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 64(1) + stw 29, 68(1) + # Round 9 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(1) + lwz 23, 76(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(30) + lwz 23, 76(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[9] + lwz 28, 72(1) + lwz 29, 76(1) + lwz 24, 16(1) + lwz 25, 20(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 72(1) + stw 29, 76(1) + # Round 10 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(1) + lwz 23, 84(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(30) + lwz 23, 84(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[10] + lwz 28, 80(1) + lwz 29, 84(1) + lwz 24, 24(1) + lwz 25, 28(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 80(1) + stw 29, 84(1) + # Round 11 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(1) + lwz 23, 92(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(30) + lwz 23, 92(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[11] + lwz 28, 88(1) + lwz 29, 92(1) + lwz 24, 32(1) + lwz 25, 36(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 88(1) + stw 29, 92(1) + # Round 12 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(1) + lwz 23, 100(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(30) + lwz 23, 100(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[12] + lwz 28, 96(1) + lwz 29, 100(1) + lwz 24, 40(1) + lwz 25, 44(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 96(1) + stw 29, 100(1) + # Round 13 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(1) + lwz 23, 108(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(30) + lwz 23, 108(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[13] + lwz 28, 104(1) + lwz 29, 108(1) + lwz 24, 48(1) + lwz 25, 52(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 104(1) + stw 29, 108(1) + # Round 14 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(1) + lwz 23, 116(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(30) + lwz 23, 116(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[14] + lwz 28, 112(1) + lwz 29, 116(1) + lwz 24, 56(1) + lwz 25, 60(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 112(1) + stw 29, 116(1) + # Round 15 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(1) + lwz 23, 124(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(30) + lwz 23, 124(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[15] + lwz 28, 120(1) + lwz 29, 124(1) + lwz 24, 64(1) + lwz 25, 68(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 120(1) + stw 29, 124(1) + addi 30, 30, 0x80 + # Round 0 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(1) + lwz 23, 4(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(30) + lwz 23, 4(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[0] + lwz 28, 0(1) + lwz 29, 4(1) + lwz 24, 72(1) + lwz 25, 76(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 0(1) + stw 29, 4(1) + # Round 1 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(1) + lwz 23, 12(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(30) + lwz 23, 12(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[1] + lwz 28, 8(1) + lwz 29, 12(1) + lwz 24, 80(1) + lwz 25, 84(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 8(1) + stw 29, 12(1) + # Round 2 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(1) + lwz 23, 20(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(30) + lwz 23, 20(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[2] + lwz 28, 16(1) + lwz 29, 20(1) + lwz 24, 88(1) + lwz 25, 92(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 16(1) + stw 29, 20(1) + # Round 3 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(1) + lwz 23, 28(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(30) + lwz 23, 28(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[3] + lwz 28, 24(1) + lwz 29, 28(1) + lwz 24, 96(1) + lwz 25, 100(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 24(1) + stw 29, 28(1) + # Round 4 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(1) + lwz 23, 36(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(30) + lwz 23, 36(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[4] + lwz 28, 32(1) + lwz 29, 36(1) + lwz 24, 104(1) + lwz 25, 108(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 32(1) + stw 29, 36(1) + # Round 5 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(1) + lwz 23, 44(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(30) + lwz 23, 44(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[5] + lwz 28, 40(1) + lwz 29, 44(1) + lwz 24, 112(1) + lwz 25, 116(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 40(1) + stw 29, 44(1) + # Round 6 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(1) + lwz 23, 52(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(30) + lwz 23, 52(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[6] + lwz 28, 48(1) + lwz 29, 52(1) + lwz 24, 120(1) + lwz 25, 124(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 48(1) + stw 29, 52(1) + # Round 7 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(1) + lwz 23, 60(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(30) + lwz 23, 60(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[7] + lwz 28, 56(1) + lwz 29, 60(1) + lwz 24, 0(1) + lwz 25, 4(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 56(1) + stw 29, 60(1) + # Round 8 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(1) + lwz 23, 68(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(30) + lwz 23, 68(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[8] + lwz 28, 64(1) + lwz 29, 68(1) + lwz 24, 8(1) + lwz 25, 12(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 64(1) + stw 29, 68(1) + # Round 9 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(1) + lwz 23, 76(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(30) + lwz 23, 76(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[9] + lwz 28, 72(1) + lwz 29, 76(1) + lwz 24, 16(1) + lwz 25, 20(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 72(1) + stw 29, 76(1) + # Round 10 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(1) + lwz 23, 84(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(30) + lwz 23, 84(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[10] + lwz 28, 80(1) + lwz 29, 84(1) + lwz 24, 24(1) + lwz 25, 28(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 80(1) + stw 29, 84(1) + # Round 11 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(1) + lwz 23, 92(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(30) + lwz 23, 92(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[11] + lwz 28, 88(1) + lwz 29, 92(1) + lwz 24, 32(1) + lwz 25, 36(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 88(1) + stw 29, 92(1) + # Round 12 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(1) + lwz 23, 100(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(30) + lwz 23, 100(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[12] + lwz 28, 96(1) + lwz 29, 100(1) + lwz 24, 40(1) + lwz 25, 44(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 96(1) + stw 29, 100(1) + # Round 13 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(1) + lwz 23, 108(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(30) + lwz 23, 108(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[13] + lwz 28, 104(1) + lwz 29, 108(1) + lwz 24, 48(1) + lwz 25, 52(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 104(1) + stw 29, 108(1) + # Round 14 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(1) + lwz 23, 116(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(30) + lwz 23, 116(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[14] + lwz 28, 112(1) + lwz 29, 116(1) + lwz 24, 56(1) + lwz 25, 60(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 112(1) + stw 29, 116(1) + # Round 15 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(1) + lwz 23, 124(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(30) + lwz 23, 124(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[15] + lwz 28, 120(1) + lwz 29, 124(1) + lwz 24, 64(1) + lwz 25, 68(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 120(1) + stw 29, 124(1) + addi 30, 30, 0x80 + # Round 0 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(1) + lwz 23, 4(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(30) + lwz 23, 4(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[0] + lwz 28, 0(1) + lwz 29, 4(1) + lwz 24, 72(1) + lwz 25, 76(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 0(1) + stw 29, 4(1) + # Round 1 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(1) + lwz 23, 12(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(30) + lwz 23, 12(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[1] + lwz 28, 8(1) + lwz 29, 12(1) + lwz 24, 80(1) + lwz 25, 84(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 8(1) + stw 29, 12(1) + # Round 2 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(1) + lwz 23, 20(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(30) + lwz 23, 20(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[2] + lwz 28, 16(1) + lwz 29, 20(1) + lwz 24, 88(1) + lwz 25, 92(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 16(1) + stw 29, 20(1) + # Round 3 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(1) + lwz 23, 28(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(30) + lwz 23, 28(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[3] + lwz 28, 24(1) + lwz 29, 28(1) + lwz 24, 96(1) + lwz 25, 100(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 8(1) + lwz 23, 12(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 24(1) + stw 29, 28(1) + # Round 4 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(1) + lwz 23, 36(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(30) + lwz 23, 36(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[4] + lwz 28, 32(1) + lwz 29, 36(1) + lwz 24, 104(1) + lwz 25, 108(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 16(1) + lwz 23, 20(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 32(1) + stw 29, 36(1) + # Round 5 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(1) + lwz 23, 44(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(30) + lwz 23, 44(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[5] + lwz 28, 40(1) + lwz 29, 44(1) + lwz 24, 112(1) + lwz 25, 116(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 24(1) + lwz 23, 28(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 40(1) + stw 29, 44(1) + # Round 6 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(1) + lwz 23, 52(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(30) + lwz 23, 52(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[6] + lwz 28, 48(1) + lwz 29, 52(1) + lwz 24, 120(1) + lwz 25, 124(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 32(1) + lwz 23, 36(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 48(1) + stw 29, 52(1) + # Round 7 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(1) + lwz 23, 60(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(30) + lwz 23, 60(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[7] + lwz 28, 56(1) + lwz 29, 60(1) + lwz 24, 0(1) + lwz 25, 4(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 40(1) + lwz 23, 44(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 56(1) + stw 29, 60(1) + # Round 8 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(1) + lwz 23, 68(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(30) + lwz 23, 68(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Calc new W[8] + lwz 28, 64(1) + lwz 29, 68(1) + lwz 24, 8(1) + lwz 25, 12(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 48(1) + lwz 23, 52(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 64(1) + stw 29, 68(1) + # Round 9 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(1) + lwz 23, 76(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(30) + lwz 23, 76(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Calc new W[9] + lwz 28, 72(1) + lwz 29, 76(1) + lwz 24, 16(1) + lwz 25, 20(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 56(1) + lwz 23, 60(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 72(1) + stw 29, 76(1) + # Round 10 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(1) + lwz 23, 84(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(30) + lwz 23, 84(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Calc new W[10] + lwz 28, 80(1) + lwz 29, 84(1) + lwz 24, 24(1) + lwz 25, 28(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 64(1) + lwz 23, 68(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 80(1) + stw 29, 84(1) + # Round 11 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(1) + lwz 23, 92(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(30) + lwz 23, 92(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Calc new W[11] + lwz 28, 88(1) + lwz 29, 92(1) + lwz 24, 32(1) + lwz 25, 36(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 72(1) + lwz 23, 76(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 88(1) + stw 29, 92(1) + # Round 12 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(1) + lwz 23, 100(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(30) + lwz 23, 100(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Calc new W[12] + lwz 28, 96(1) + lwz 29, 100(1) + lwz 24, 40(1) + lwz 25, 44(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 80(1) + lwz 23, 84(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 96(1) + stw 29, 100(1) + # Round 13 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(1) + lwz 23, 108(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(30) + lwz 23, 108(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Calc new W[13] + lwz 28, 104(1) + lwz 29, 108(1) + lwz 24, 48(1) + lwz 25, 52(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 88(1) + lwz 23, 92(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 112(1) + lwz 23, 116(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 104(1) + stw 29, 108(1) + # Round 14 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(1) + lwz 23, 116(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(30) + lwz 23, 116(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Calc new W[14] + lwz 28, 112(1) + lwz 29, 116(1) + lwz 24, 56(1) + lwz 25, 60(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 96(1) + lwz 23, 100(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 120(1) + lwz 23, 124(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 112(1) + stw 29, 116(1) + # Round 15 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(1) + lwz 23, 124(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(30) + lwz 23, 124(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Calc new W[15] + lwz 28, 120(1) + lwz 29, 124(1) + lwz 24, 64(1) + lwz 25, 68(1) + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 104(1) + lwz 23, 108(1) + rlwinm 24, 22, 13, 19, 31 + rlwimi 24, 23, 13, 0, 18 + rlwinm 25, 23, 13, 19, 31 + rlwimi 25, 22, 13, 0, 18 + rlwinm 26, 23, 3, 29, 31 + rlwimi 26, 22, 3, 0, 28 + rlwinm 27, 22, 3, 29, 31 + rlwimi 27, 23, 3, 0, 28 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 6 + rlwinm 27, 23, 26, 6, 31 + rlwimi 27, 22, 26, 0, 5 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + lwz 22, 0(1) + lwz 23, 4(1) + rlwinm 24, 22, 31, 1, 31 + rlwimi 24, 23, 31, 0, 0 + rlwinm 25, 23, 31, 1, 31 + rlwimi 25, 22, 31, 0, 0 + rlwinm 26, 22, 24, 8, 31 + rlwimi 26, 23, 24, 0, 7 + rlwinm 27, 23, 24, 8, 31 + rlwimi 27, 22, 24, 0, 7 + xor 24, 24, 26 + xor 25, 25, 27 + srwi 26, 22, 7 + rlwinm 27, 23, 25, 7, 31 + rlwimi 27, 22, 25, 0, 6 + xor 24, 24, 26 + xor 25, 25, 27 + addc 29, 29, 25 + adde 28, 28, 24 + stw 28, 120(1) + stw 29, 124(1) + addi 30, 30, 0x80 + # Round 0 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(1) + lwz 23, 4(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 0(30) + lwz 23, 4(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Round 1 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(1) + lwz 23, 12(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 8(30) + lwz 23, 12(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Round 2 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(1) + lwz 23, 20(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 16(30) + lwz 23, 20(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Round 3 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(1) + lwz 23, 28(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 24(30) + lwz 23, 28(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Round 4 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(1) + lwz 23, 36(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 32(30) + lwz 23, 36(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Round 5 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(1) + lwz 23, 44(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 40(30) + lwz 23, 44(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Round 6 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(1) + lwz 23, 52(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 48(30) + lwz 23, 52(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Round 7 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(1) + lwz 23, 60(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 56(30) + lwz 23, 60(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + # Round 8 + rlwinm 22, 14, 18, 14, 31 + rlwimi 22, 15, 18, 0, 13 + rlwinm 23, 15, 18, 14, 31 + rlwimi 23, 14, 18, 0, 13 + rlwinm 24, 14, 14, 18, 31 + rlwimi 24, 15, 14, 0, 17 + rlwinm 25, 15, 14, 18, 31 + rlwimi 25, 14, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 23, 9, 31 + rlwimi 24, 14, 23, 0, 8 + rlwinm 25, 14, 23, 9, 31 + rlwimi 25, 15, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 16, 18 + xor 23, 17, 19 + and 22, 22, 14 + and 23, 23, 15 + xor 22, 22, 18 + xor 23, 23, 19 + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(1) + lwz 23, 68(1) + addc 21, 21, 23 + adde 20, 20, 22 + lwz 22, 64(30) + lwz 23, 68(30) + addc 21, 21, 23 + adde 20, 20, 22 + addc 12, 12, 21 + adde 11, 11, 20 + rlwinm 22, 0, 4, 28, 31 + rlwimi 22, 6, 4, 0, 27 + rlwinm 23, 6, 4, 28, 31 + rlwimi 23, 0, 4, 0, 27 + rlwinm 24, 6, 30, 2, 31 + rlwimi 24, 0, 30, 0, 1 + rlwinm 25, 0, 30, 2, 31 + rlwimi 25, 6, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 25, 7, 31 + rlwimi 24, 0, 25, 0, 6 + rlwinm 25, 0, 25, 7, 31 + rlwimi 25, 6, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 21, 21, 23 + adde 20, 20, 22 + xor 22, 0, 7 + xor 23, 6, 8 + xor 24, 7, 9 + xor 25, 8, 10 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 7 + xor 23, 23, 8 + addc 21, 21, 23 + adde 20, 20, 22 + # Round 9 + rlwinm 22, 11, 18, 14, 31 + rlwimi 22, 12, 18, 0, 13 + rlwinm 23, 12, 18, 14, 31 + rlwimi 23, 11, 18, 0, 13 + rlwinm 24, 11, 14, 18, 31 + rlwimi 24, 12, 14, 0, 17 + rlwinm 25, 12, 14, 18, 31 + rlwimi 25, 11, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 23, 9, 31 + rlwimi 24, 11, 23, 0, 8 + rlwinm 25, 11, 23, 9, 31 + rlwimi 25, 12, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 14, 16 + xor 23, 15, 17 + and 22, 22, 11 + and 23, 23, 12 + xor 22, 22, 16 + xor 23, 23, 17 + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(1) + lwz 23, 76(1) + addc 19, 19, 23 + adde 18, 18, 22 + lwz 22, 72(30) + lwz 23, 76(30) + addc 19, 19, 23 + adde 18, 18, 22 + addc 10, 10, 19 + adde 9, 9, 18 + rlwinm 22, 20, 4, 28, 31 + rlwimi 22, 21, 4, 0, 27 + rlwinm 23, 21, 4, 28, 31 + rlwimi 23, 20, 4, 0, 27 + rlwinm 24, 21, 30, 2, 31 + rlwimi 24, 20, 30, 0, 1 + rlwinm 25, 20, 30, 2, 31 + rlwimi 25, 21, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 25, 7, 31 + rlwimi 24, 20, 25, 0, 6 + rlwinm 25, 20, 25, 7, 31 + rlwimi 25, 21, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 19, 19, 23 + adde 18, 18, 22 + xor 22, 20, 0 + xor 23, 21, 6 + xor 24, 0, 7 + xor 25, 6, 8 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 0 + xor 23, 23, 6 + addc 19, 19, 23 + adde 18, 18, 22 + # Round 10 + rlwinm 22, 9, 18, 14, 31 + rlwimi 22, 10, 18, 0, 13 + rlwinm 23, 10, 18, 14, 31 + rlwimi 23, 9, 18, 0, 13 + rlwinm 24, 9, 14, 18, 31 + rlwimi 24, 10, 14, 0, 17 + rlwinm 25, 10, 14, 18, 31 + rlwimi 25, 9, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 23, 9, 31 + rlwimi 24, 9, 23, 0, 8 + rlwinm 25, 9, 23, 9, 31 + rlwimi 25, 10, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 11, 14 + xor 23, 12, 15 + and 22, 22, 9 + and 23, 23, 10 + xor 22, 22, 14 + xor 23, 23, 15 + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(1) + lwz 23, 84(1) + addc 17, 17, 23 + adde 16, 16, 22 + lwz 22, 80(30) + lwz 23, 84(30) + addc 17, 17, 23 + adde 16, 16, 22 + addc 8, 8, 17 + adde 7, 7, 16 + rlwinm 22, 18, 4, 28, 31 + rlwimi 22, 19, 4, 0, 27 + rlwinm 23, 19, 4, 28, 31 + rlwimi 23, 18, 4, 0, 27 + rlwinm 24, 19, 30, 2, 31 + rlwimi 24, 18, 30, 0, 1 + rlwinm 25, 18, 30, 2, 31 + rlwimi 25, 19, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 25, 7, 31 + rlwimi 24, 18, 25, 0, 6 + rlwinm 25, 18, 25, 7, 31 + rlwimi 25, 19, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 17, 17, 23 + adde 16, 16, 22 + xor 22, 18, 20 + xor 23, 19, 21 + xor 24, 20, 0 + xor 25, 21, 6 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 20 + xor 23, 23, 21 + addc 17, 17, 23 + adde 16, 16, 22 + # Round 11 + rlwinm 22, 7, 18, 14, 31 + rlwimi 22, 8, 18, 0, 13 + rlwinm 23, 8, 18, 14, 31 + rlwimi 23, 7, 18, 0, 13 + rlwinm 24, 7, 14, 18, 31 + rlwimi 24, 8, 14, 0, 17 + rlwinm 25, 8, 14, 18, 31 + rlwimi 25, 7, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 23, 9, 31 + rlwimi 24, 7, 23, 0, 8 + rlwinm 25, 7, 23, 9, 31 + rlwimi 25, 8, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 9, 11 + xor 23, 10, 12 + and 22, 22, 7 + and 23, 23, 8 + xor 22, 22, 11 + xor 23, 23, 12 + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(1) + lwz 23, 92(1) + addc 15, 15, 23 + adde 14, 14, 22 + lwz 22, 88(30) + lwz 23, 92(30) + addc 15, 15, 23 + adde 14, 14, 22 + addc 6, 6, 15 + adde 0, 0, 14 + rlwinm 22, 16, 4, 28, 31 + rlwimi 22, 17, 4, 0, 27 + rlwinm 23, 17, 4, 28, 31 + rlwimi 23, 16, 4, 0, 27 + rlwinm 24, 17, 30, 2, 31 + rlwimi 24, 16, 30, 0, 1 + rlwinm 25, 16, 30, 2, 31 + rlwimi 25, 17, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 25, 7, 31 + rlwimi 24, 16, 25, 0, 6 + rlwinm 25, 16, 25, 7, 31 + rlwimi 25, 17, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 15, 15, 23 + adde 14, 14, 22 + xor 22, 16, 18 + xor 23, 17, 19 + xor 24, 18, 20 + xor 25, 19, 21 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 18 + xor 23, 23, 19 + addc 15, 15, 23 + adde 14, 14, 22 + # Round 12 + rlwinm 22, 0, 18, 14, 31 + rlwimi 22, 6, 18, 0, 13 + rlwinm 23, 6, 18, 14, 31 + rlwimi 23, 0, 18, 0, 13 + rlwinm 24, 0, 14, 18, 31 + rlwimi 24, 6, 14, 0, 17 + rlwinm 25, 6, 14, 18, 31 + rlwimi 25, 0, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 6, 23, 9, 31 + rlwimi 24, 0, 23, 0, 8 + rlwinm 25, 0, 23, 9, 31 + rlwimi 25, 6, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 7, 9 + xor 23, 8, 10 + and 22, 22, 0 + and 23, 23, 6 + xor 22, 22, 9 + xor 23, 23, 10 + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(1) + lwz 23, 100(1) + addc 12, 12, 23 + adde 11, 11, 22 + lwz 22, 96(30) + lwz 23, 100(30) + addc 12, 12, 23 + adde 11, 11, 22 + addc 21, 21, 12 + adde 20, 20, 11 + rlwinm 22, 14, 4, 28, 31 + rlwimi 22, 15, 4, 0, 27 + rlwinm 23, 15, 4, 28, 31 + rlwimi 23, 14, 4, 0, 27 + rlwinm 24, 15, 30, 2, 31 + rlwimi 24, 14, 30, 0, 1 + rlwinm 25, 14, 30, 2, 31 + rlwimi 25, 15, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 15, 25, 7, 31 + rlwimi 24, 14, 25, 0, 6 + rlwinm 25, 14, 25, 7, 31 + rlwimi 25, 15, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 12, 12, 23 + adde 11, 11, 22 + xor 22, 14, 16 + xor 23, 15, 17 + xor 24, 16, 18 + xor 25, 17, 19 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 16 + xor 23, 23, 17 + addc 12, 12, 23 + adde 11, 11, 22 + # Round 13 + rlwinm 22, 20, 18, 14, 31 + rlwimi 22, 21, 18, 0, 13 + rlwinm 23, 21, 18, 14, 31 + rlwimi 23, 20, 18, 0, 13 + rlwinm 24, 20, 14, 18, 31 + rlwimi 24, 21, 14, 0, 17 + rlwinm 25, 21, 14, 18, 31 + rlwimi 25, 20, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 21, 23, 9, 31 + rlwimi 24, 20, 23, 0, 8 + rlwinm 25, 20, 23, 9, 31 + rlwimi 25, 21, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 0, 7 + xor 23, 6, 8 + and 22, 22, 20 + and 23, 23, 21 + xor 22, 22, 7 + xor 23, 23, 8 + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(1) + lwz 23, 108(1) + addc 10, 10, 23 + adde 9, 9, 22 + lwz 22, 104(30) + lwz 23, 108(30) + addc 10, 10, 23 + adde 9, 9, 22 + addc 19, 19, 10 + adde 18, 18, 9 + rlwinm 22, 11, 4, 28, 31 + rlwimi 22, 12, 4, 0, 27 + rlwinm 23, 12, 4, 28, 31 + rlwimi 23, 11, 4, 0, 27 + rlwinm 24, 12, 30, 2, 31 + rlwimi 24, 11, 30, 0, 1 + rlwinm 25, 11, 30, 2, 31 + rlwimi 25, 12, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 12, 25, 7, 31 + rlwimi 24, 11, 25, 0, 6 + rlwinm 25, 11, 25, 7, 31 + rlwimi 25, 12, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 10, 10, 23 + adde 9, 9, 22 + xor 22, 11, 14 + xor 23, 12, 15 + xor 24, 14, 16 + xor 25, 15, 17 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 14 + xor 23, 23, 15 + addc 10, 10, 23 + adde 9, 9, 22 + # Round 14 + rlwinm 22, 18, 18, 14, 31 + rlwimi 22, 19, 18, 0, 13 + rlwinm 23, 19, 18, 14, 31 + rlwimi 23, 18, 18, 0, 13 + rlwinm 24, 18, 14, 18, 31 + rlwimi 24, 19, 14, 0, 17 + rlwinm 25, 19, 14, 18, 31 + rlwimi 25, 18, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 19, 23, 9, 31 + rlwimi 24, 18, 23, 0, 8 + rlwinm 25, 18, 23, 9, 31 + rlwimi 25, 19, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 20, 0 + xor 23, 21, 6 + and 22, 22, 18 + and 23, 23, 19 + xor 22, 22, 0 + xor 23, 23, 6 + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(1) + lwz 23, 116(1) + addc 8, 8, 23 + adde 7, 7, 22 + lwz 22, 112(30) + lwz 23, 116(30) + addc 8, 8, 23 + adde 7, 7, 22 + addc 17, 17, 8 + adde 16, 16, 7 + rlwinm 22, 9, 4, 28, 31 + rlwimi 22, 10, 4, 0, 27 + rlwinm 23, 10, 4, 28, 31 + rlwimi 23, 9, 4, 0, 27 + rlwinm 24, 10, 30, 2, 31 + rlwimi 24, 9, 30, 0, 1 + rlwinm 25, 9, 30, 2, 31 + rlwimi 25, 10, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 10, 25, 7, 31 + rlwimi 24, 9, 25, 0, 6 + rlwinm 25, 9, 25, 7, 31 + rlwimi 25, 10, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 8, 8, 23 + adde 7, 7, 22 + xor 22, 9, 11 + xor 23, 10, 12 + xor 24, 11, 14 + xor 25, 12, 15 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 11 + xor 23, 23, 12 + addc 8, 8, 23 + adde 7, 7, 22 + # Round 15 + rlwinm 22, 16, 18, 14, 31 + rlwimi 22, 17, 18, 0, 13 + rlwinm 23, 17, 18, 14, 31 + rlwimi 23, 16, 18, 0, 13 + rlwinm 24, 16, 14, 18, 31 + rlwimi 24, 17, 14, 0, 17 + rlwinm 25, 17, 14, 18, 31 + rlwimi 25, 16, 14, 0, 17 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 17, 23, 9, 31 + rlwimi 24, 16, 23, 0, 8 + rlwinm 25, 16, 23, 9, 31 + rlwimi 25, 17, 23, 0, 8 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 18, 20 + xor 23, 19, 21 + and 22, 22, 16 + and 23, 23, 17 + xor 22, 22, 20 + xor 23, 23, 21 + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(1) + lwz 23, 124(1) + addc 6, 6, 23 + adde 0, 0, 22 + lwz 22, 120(30) + lwz 23, 124(30) + addc 6, 6, 23 + adde 0, 0, 22 + addc 15, 15, 6 + adde 14, 14, 0 + rlwinm 22, 7, 4, 28, 31 + rlwimi 22, 8, 4, 0, 27 + rlwinm 23, 8, 4, 28, 31 + rlwimi 23, 7, 4, 0, 27 + rlwinm 24, 8, 30, 2, 31 + rlwimi 24, 7, 30, 0, 1 + rlwinm 25, 7, 30, 2, 31 + rlwimi 25, 8, 30, 0, 1 + xor 22, 22, 24 + xor 23, 23, 25 + rlwinm 24, 8, 25, 7, 31 + rlwimi 24, 7, 25, 0, 6 + rlwinm 25, 7, 25, 7, 31 + rlwimi 25, 8, 25, 0, 6 + xor 22, 22, 24 + xor 23, 23, 25 + addc 6, 6, 23 + adde 0, 0, 22 + xor 22, 7, 9 + xor 23, 8, 10 + xor 24, 9, 11 + xor 25, 10, 12 + and 22, 22, 24 + and 23, 23, 25 + xor 22, 22, 9 + xor 23, 23, 10 + addc 6, 6, 23 + adde 0, 0, 22 + subi 30, 30, 0x200 + # Add in digest from start + lwz 22, 0(3) + lwz 23, 4(3) + addc 6, 6, 23 + adde 0, 0, 22 + stw 0, 0(3) + stw 6, 4(3) + lwz 22, 8(3) + lwz 23, 12(3) + addc 8, 8, 23 + adde 7, 7, 22 + stw 7, 8(3) + stw 8, 12(3) + lwz 22, 16(3) + lwz 23, 20(3) + addc 10, 10, 23 + adde 9, 9, 22 + stw 9, 16(3) + stw 10, 20(3) + lwz 22, 24(3) + lwz 23, 28(3) + addc 12, 12, 23 + adde 11, 11, 22 + stw 11, 24(3) + stw 12, 28(3) + lwz 22, 32(3) + lwz 23, 36(3) + addc 15, 15, 23 + adde 14, 14, 22 + stw 14, 32(3) + stw 15, 36(3) + lwz 22, 40(3) + lwz 23, 44(3) + addc 17, 17, 23 + adde 16, 16, 22 + stw 16, 40(3) + stw 17, 44(3) + lwz 22, 48(3) + lwz 23, 52(3) + addc 19, 19, 23 + adde 18, 18, 22 + stw 18, 48(3) + stw 19, 52(3) + lwz 22, 56(3) + lwz 23, 60(3) + addc 21, 21, 23 + adde 20, 20, 22 + stw 20, 56(3) + stw 21, 60(3) + addi 4, 4, 0x80 + bdnz L_SHA512_transform_len_begin + addi 1, 1, 0x80 + lwz 0, 68(1) + mtlr 0 + lwz 14, 0(1) + lwz 15, 4(1) + lwz 16, 8(1) + lwz 17, 12(1) + lwz 18, 16(1) + lwz 19, 20(1) + lwz 20, 24(1) + lwz 21, 28(1) + lwz 22, 32(1) + lwz 23, 36(1) + lwz 24, 40(1) + lwz 25, 44(1) + lwz 26, 48(1) + lwz 27, 52(1) + lwz 28, 56(1) + lwz 29, 60(1) + lwz 30, 64(1) + addi 1, 1, 0x48 + blr + .size Transform_Sha512_Len,.-Transform_Sha512_Len +#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c b/wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c new file mode 100644 index 00000000000..deff9d80085 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha512-asm_c.c @@ -0,0 +1,8490 @@ +/* ppc32-sha512-asm + * + * Copyright (C) 2006-2026 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/sha512.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha512-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#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__ */ + +#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384) +#include + +XALIGNED(16) static const word64 L_SHA512_transform_len_k[] = { + 0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, + 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, + 0x3956c25bf348b538UL, 0x59f111f1b605d019UL, + 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, + 0xd807aa98a3030242UL, 0x12835b0145706fbeUL, + 0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, + 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, + 0x9bdc06a725c71235UL, 0xc19bf174cf692694UL, + 0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL, + 0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL, + 0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL, + 0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL, + 0x983e5152ee66dfabUL, 0xa831c66d2db43210UL, + 0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL, + 0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL, + 0x06ca6351e003826fUL, 0x142929670a0e6e70UL, + 0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL, + 0x4d2c6dfc5ac42aedUL, 0x53380d139d95b3dfUL, + 0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL, + 0x81c2c92e47edaee6UL, 0x92722c851482353bUL, + 0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL, + 0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL, + 0xd192e819d6ef5218UL, 0xd69906245565a910UL, + 0xf40e35855771202aUL, 0x106aa07032bbd1b8UL, + 0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL, + 0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL, + 0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL, + 0x5b9cca4f7763e373UL, 0x682e6ff3d6b2b8a3UL, + 0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL, + 0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL, + 0x90befffa23631e28UL, 0xa4506cebde82bde9UL, + 0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL, + 0xca273eceea26619cUL, 0xd186b8c721c0c207UL, + 0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL, + 0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL, + 0x113f9804bef90daeUL, 0x1b710b35131c471bUL, + 0x28db77f523047d84UL, 0x32caab7b40c72493UL, + 0x3c9ebe0a15c9bebcUL, 0x431d67c49c100d4cUL, + 0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL, + 0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL, +}; + +void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, + word32 len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void Transform_Sha512_Len(wc_Sha512* sha512_p, + const byte* data_p, word32 len_p) +#else +WC_OMIT_FRAME_POINTER void Transform_Sha512_Len(wc_Sha512* sha512, + const byte* data, word32 len) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register wc_Sha512* sha512 __asm__ ("3") = (wc_Sha512*)sha512_p; + register const byte* data __asm__ ("4") = (const byte*)data_p; + register word32 len __asm__ ("5") = (word32)len_p; + register word64* L_SHA512_transform_len_k_c __asm__ ("6") = + (word64*)&L_SHA512_transform_len_k; +#else + register word64* L_SHA512_transform_len_k_c = + (word64*)&L_SHA512_transform_len_k; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "srwi %[len], %[len], 7\n\t" + "mr 30, %[L_SHA512_transform_len_k]\n\t" + /* Copy digest to add in at end */ + "lwz 0, 0(%[sha512])\n\t" + "lwz 6, 4(%[sha512])\n\t" + "lwz 7, 8(%[sha512])\n\t" + "lwz 8, 12(%[sha512])\n\t" + "lwz 9, 16(%[sha512])\n\t" + "lwz 10, 20(%[sha512])\n\t" + "lwz 11, 24(%[sha512])\n\t" + "lwz 12, 28(%[sha512])\n\t" + "lwz 14, 32(%[sha512])\n\t" + "lwz 15, 36(%[sha512])\n\t" + "lwz 16, 40(%[sha512])\n\t" + "lwz 17, 44(%[sha512])\n\t" + "lwz 18, 48(%[sha512])\n\t" + "lwz 19, 52(%[sha512])\n\t" + "lwz 20, 56(%[sha512])\n\t" + "lwz 21, 60(%[sha512])\n\t" + "subi 1, 1, 0x80\n\t" + "mtctr %[len]\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA512_transform_len_begin_%=:\n\t" + /* Load W - 128 bytes */ + "lwz 22, 0(%[data])\n\t" + "lwz 23, 4(%[data])\n\t" + "stw 22, 0(1)\n\t" + "stw 23, 4(1)\n\t" + "lwz 22, 8(%[data])\n\t" + "lwz 23, 12(%[data])\n\t" + "stw 22, 8(1)\n\t" + "stw 23, 12(1)\n\t" + "lwz 22, 16(%[data])\n\t" + "lwz 23, 20(%[data])\n\t" + "stw 22, 16(1)\n\t" + "stw 23, 20(1)\n\t" + "lwz 22, 24(%[data])\n\t" + "lwz 23, 28(%[data])\n\t" + "stw 22, 24(1)\n\t" + "stw 23, 28(1)\n\t" + "lwz 22, 32(%[data])\n\t" + "lwz 23, 36(%[data])\n\t" + "stw 22, 32(1)\n\t" + "stw 23, 36(1)\n\t" + "lwz 22, 40(%[data])\n\t" + "lwz 23, 44(%[data])\n\t" + "stw 22, 40(1)\n\t" + "stw 23, 44(1)\n\t" + "lwz 22, 48(%[data])\n\t" + "lwz 23, 52(%[data])\n\t" + "stw 22, 48(1)\n\t" + "stw 23, 52(1)\n\t" + "lwz 22, 56(%[data])\n\t" + "lwz 23, 60(%[data])\n\t" + "stw 22, 56(1)\n\t" + "stw 23, 60(1)\n\t" + "lwz 22, 64(%[data])\n\t" + "lwz 23, 68(%[data])\n\t" + "stw 22, 64(1)\n\t" + "stw 23, 68(1)\n\t" + "lwz 22, 72(%[data])\n\t" + "lwz 23, 76(%[data])\n\t" + "stw 22, 72(1)\n\t" + "stw 23, 76(1)\n\t" + "lwz 22, 80(%[data])\n\t" + "lwz 23, 84(%[data])\n\t" + "stw 22, 80(1)\n\t" + "stw 23, 84(1)\n\t" + "lwz 22, 88(%[data])\n\t" + "lwz 23, 92(%[data])\n\t" + "stw 22, 88(1)\n\t" + "stw 23, 92(1)\n\t" + "lwz 22, 96(%[data])\n\t" + "lwz 23, 100(%[data])\n\t" + "stw 22, 96(1)\n\t" + "stw 23, 100(1)\n\t" + "lwz 22, 104(%[data])\n\t" + "lwz 23, 108(%[data])\n\t" + "stw 22, 104(1)\n\t" + "stw 23, 108(1)\n\t" + "lwz 22, 112(%[data])\n\t" + "lwz 23, 116(%[data])\n\t" + "stw 22, 112(1)\n\t" + "stw 23, 116(1)\n\t" + "lwz 22, 120(%[data])\n\t" + "lwz 23, 124(%[data])\n\t" + "stw 22, 120(1)\n\t" + "stw 23, 124(1)\n\t" + /* Start of 80 rounds */ + /* Round 0 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(30)\n\t" + "lwz 23, 4(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[0] */ + "lwz 28, 0(1)\n\t" + "lwz 29, 4(1)\n\t" + "lwz 24, 72(1)\n\t" + "lwz 25, 76(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 0(1)\n\t" + "stw 29, 4(1)\n\t" + /* Round 1 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(30)\n\t" + "lwz 23, 12(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[1] */ + "lwz 28, 8(1)\n\t" + "lwz 29, 12(1)\n\t" + "lwz 24, 80(1)\n\t" + "lwz 25, 84(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 8(1)\n\t" + "stw 29, 12(1)\n\t" + /* Round 2 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(30)\n\t" + "lwz 23, 20(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[2] */ + "lwz 28, 16(1)\n\t" + "lwz 29, 20(1)\n\t" + "lwz 24, 88(1)\n\t" + "lwz 25, 92(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 16(1)\n\t" + "stw 29, 20(1)\n\t" + /* Round 3 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(30)\n\t" + "lwz 23, 28(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[3] */ + "lwz 28, 24(1)\n\t" + "lwz 29, 28(1)\n\t" + "lwz 24, 96(1)\n\t" + "lwz 25, 100(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 24(1)\n\t" + "stw 29, 28(1)\n\t" + /* Round 4 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(30)\n\t" + "lwz 23, 36(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[4] */ + "lwz 28, 32(1)\n\t" + "lwz 29, 36(1)\n\t" + "lwz 24, 104(1)\n\t" + "lwz 25, 108(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 32(1)\n\t" + "stw 29, 36(1)\n\t" + /* Round 5 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(30)\n\t" + "lwz 23, 44(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[5] */ + "lwz 28, 40(1)\n\t" + "lwz 29, 44(1)\n\t" + "lwz 24, 112(1)\n\t" + "lwz 25, 116(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 40(1)\n\t" + "stw 29, 44(1)\n\t" + /* Round 6 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(30)\n\t" + "lwz 23, 52(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[6] */ + "lwz 28, 48(1)\n\t" + "lwz 29, 52(1)\n\t" + "lwz 24, 120(1)\n\t" + "lwz 25, 124(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 48(1)\n\t" + "stw 29, 52(1)\n\t" + /* Round 7 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(30)\n\t" + "lwz 23, 60(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[7] */ + "lwz 28, 56(1)\n\t" + "lwz 29, 60(1)\n\t" + "lwz 24, 0(1)\n\t" + "lwz 25, 4(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 56(1)\n\t" + "stw 29, 60(1)\n\t" + /* Round 8 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(30)\n\t" + "lwz 23, 68(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[8] */ + "lwz 28, 64(1)\n\t" + "lwz 29, 68(1)\n\t" + "lwz 24, 8(1)\n\t" + "lwz 25, 12(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 64(1)\n\t" + "stw 29, 68(1)\n\t" + /* Round 9 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(30)\n\t" + "lwz 23, 76(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[9] */ + "lwz 28, 72(1)\n\t" + "lwz 29, 76(1)\n\t" + "lwz 24, 16(1)\n\t" + "lwz 25, 20(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 72(1)\n\t" + "stw 29, 76(1)\n\t" + /* Round 10 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(30)\n\t" + "lwz 23, 84(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[10] */ + "lwz 28, 80(1)\n\t" + "lwz 29, 84(1)\n\t" + "lwz 24, 24(1)\n\t" + "lwz 25, 28(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 80(1)\n\t" + "stw 29, 84(1)\n\t" + /* Round 11 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(30)\n\t" + "lwz 23, 92(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[11] */ + "lwz 28, 88(1)\n\t" + "lwz 29, 92(1)\n\t" + "lwz 24, 32(1)\n\t" + "lwz 25, 36(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 88(1)\n\t" + "stw 29, 92(1)\n\t" + /* Round 12 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(30)\n\t" + "lwz 23, 100(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[12] */ + "lwz 28, 96(1)\n\t" + "lwz 29, 100(1)\n\t" + "lwz 24, 40(1)\n\t" + "lwz 25, 44(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 96(1)\n\t" + "stw 29, 100(1)\n\t" + /* Round 13 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(30)\n\t" + "lwz 23, 108(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[13] */ + "lwz 28, 104(1)\n\t" + "lwz 29, 108(1)\n\t" + "lwz 24, 48(1)\n\t" + "lwz 25, 52(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 104(1)\n\t" + "stw 29, 108(1)\n\t" + /* Round 14 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(30)\n\t" + "lwz 23, 116(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[14] */ + "lwz 28, 112(1)\n\t" + "lwz 29, 116(1)\n\t" + "lwz 24, 56(1)\n\t" + "lwz 25, 60(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 112(1)\n\t" + "stw 29, 116(1)\n\t" + /* Round 15 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(30)\n\t" + "lwz 23, 124(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[15] */ + "lwz 28, 120(1)\n\t" + "lwz 29, 124(1)\n\t" + "lwz 24, 64(1)\n\t" + "lwz 25, 68(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 120(1)\n\t" + "stw 29, 124(1)\n\t" + "addi 30, 30, 0x80\n\t" + /* Round 0 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(30)\n\t" + "lwz 23, 4(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[0] */ + "lwz 28, 0(1)\n\t" + "lwz 29, 4(1)\n\t" + "lwz 24, 72(1)\n\t" + "lwz 25, 76(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 0(1)\n\t" + "stw 29, 4(1)\n\t" + /* Round 1 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(30)\n\t" + "lwz 23, 12(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[1] */ + "lwz 28, 8(1)\n\t" + "lwz 29, 12(1)\n\t" + "lwz 24, 80(1)\n\t" + "lwz 25, 84(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 8(1)\n\t" + "stw 29, 12(1)\n\t" + /* Round 2 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(30)\n\t" + "lwz 23, 20(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[2] */ + "lwz 28, 16(1)\n\t" + "lwz 29, 20(1)\n\t" + "lwz 24, 88(1)\n\t" + "lwz 25, 92(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 16(1)\n\t" + "stw 29, 20(1)\n\t" + /* Round 3 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(30)\n\t" + "lwz 23, 28(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[3] */ + "lwz 28, 24(1)\n\t" + "lwz 29, 28(1)\n\t" + "lwz 24, 96(1)\n\t" + "lwz 25, 100(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 24(1)\n\t" + "stw 29, 28(1)\n\t" + /* Round 4 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(30)\n\t" + "lwz 23, 36(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[4] */ + "lwz 28, 32(1)\n\t" + "lwz 29, 36(1)\n\t" + "lwz 24, 104(1)\n\t" + "lwz 25, 108(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 32(1)\n\t" + "stw 29, 36(1)\n\t" + /* Round 5 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(30)\n\t" + "lwz 23, 44(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[5] */ + "lwz 28, 40(1)\n\t" + "lwz 29, 44(1)\n\t" + "lwz 24, 112(1)\n\t" + "lwz 25, 116(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 40(1)\n\t" + "stw 29, 44(1)\n\t" + /* Round 6 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(30)\n\t" + "lwz 23, 52(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[6] */ + "lwz 28, 48(1)\n\t" + "lwz 29, 52(1)\n\t" + "lwz 24, 120(1)\n\t" + "lwz 25, 124(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 48(1)\n\t" + "stw 29, 52(1)\n\t" + /* Round 7 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(30)\n\t" + "lwz 23, 60(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[7] */ + "lwz 28, 56(1)\n\t" + "lwz 29, 60(1)\n\t" + "lwz 24, 0(1)\n\t" + "lwz 25, 4(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 56(1)\n\t" + "stw 29, 60(1)\n\t" + /* Round 8 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(30)\n\t" + "lwz 23, 68(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[8] */ + "lwz 28, 64(1)\n\t" + "lwz 29, 68(1)\n\t" + "lwz 24, 8(1)\n\t" + "lwz 25, 12(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 64(1)\n\t" + "stw 29, 68(1)\n\t" + /* Round 9 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(30)\n\t" + "lwz 23, 76(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[9] */ + "lwz 28, 72(1)\n\t" + "lwz 29, 76(1)\n\t" + "lwz 24, 16(1)\n\t" + "lwz 25, 20(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 72(1)\n\t" + "stw 29, 76(1)\n\t" + /* Round 10 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(30)\n\t" + "lwz 23, 84(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[10] */ + "lwz 28, 80(1)\n\t" + "lwz 29, 84(1)\n\t" + "lwz 24, 24(1)\n\t" + "lwz 25, 28(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 80(1)\n\t" + "stw 29, 84(1)\n\t" + /* Round 11 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(30)\n\t" + "lwz 23, 92(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[11] */ + "lwz 28, 88(1)\n\t" + "lwz 29, 92(1)\n\t" + "lwz 24, 32(1)\n\t" + "lwz 25, 36(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 88(1)\n\t" + "stw 29, 92(1)\n\t" + /* Round 12 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(30)\n\t" + "lwz 23, 100(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[12] */ + "lwz 28, 96(1)\n\t" + "lwz 29, 100(1)\n\t" + "lwz 24, 40(1)\n\t" + "lwz 25, 44(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 96(1)\n\t" + "stw 29, 100(1)\n\t" + /* Round 13 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(30)\n\t" + "lwz 23, 108(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[13] */ + "lwz 28, 104(1)\n\t" + "lwz 29, 108(1)\n\t" + "lwz 24, 48(1)\n\t" + "lwz 25, 52(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 104(1)\n\t" + "stw 29, 108(1)\n\t" + /* Round 14 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(30)\n\t" + "lwz 23, 116(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[14] */ + "lwz 28, 112(1)\n\t" + "lwz 29, 116(1)\n\t" + "lwz 24, 56(1)\n\t" + "lwz 25, 60(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 112(1)\n\t" + "stw 29, 116(1)\n\t" + /* Round 15 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(30)\n\t" + "lwz 23, 124(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[15] */ + "lwz 28, 120(1)\n\t" + "lwz 29, 124(1)\n\t" + "lwz 24, 64(1)\n\t" + "lwz 25, 68(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 120(1)\n\t" + "stw 29, 124(1)\n\t" + "addi 30, 30, 0x80\n\t" + /* Round 0 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(30)\n\t" + "lwz 23, 4(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[0] */ + "lwz 28, 0(1)\n\t" + "lwz 29, 4(1)\n\t" + "lwz 24, 72(1)\n\t" + "lwz 25, 76(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 0(1)\n\t" + "stw 29, 4(1)\n\t" + /* Round 1 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(30)\n\t" + "lwz 23, 12(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[1] */ + "lwz 28, 8(1)\n\t" + "lwz 29, 12(1)\n\t" + "lwz 24, 80(1)\n\t" + "lwz 25, 84(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 8(1)\n\t" + "stw 29, 12(1)\n\t" + /* Round 2 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(30)\n\t" + "lwz 23, 20(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[2] */ + "lwz 28, 16(1)\n\t" + "lwz 29, 20(1)\n\t" + "lwz 24, 88(1)\n\t" + "lwz 25, 92(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 16(1)\n\t" + "stw 29, 20(1)\n\t" + /* Round 3 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(30)\n\t" + "lwz 23, 28(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[3] */ + "lwz 28, 24(1)\n\t" + "lwz 29, 28(1)\n\t" + "lwz 24, 96(1)\n\t" + "lwz 25, 100(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 24(1)\n\t" + "stw 29, 28(1)\n\t" + /* Round 4 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(30)\n\t" + "lwz 23, 36(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[4] */ + "lwz 28, 32(1)\n\t" + "lwz 29, 36(1)\n\t" + "lwz 24, 104(1)\n\t" + "lwz 25, 108(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 32(1)\n\t" + "stw 29, 36(1)\n\t" + /* Round 5 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(30)\n\t" + "lwz 23, 44(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[5] */ + "lwz 28, 40(1)\n\t" + "lwz 29, 44(1)\n\t" + "lwz 24, 112(1)\n\t" + "lwz 25, 116(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 40(1)\n\t" + "stw 29, 44(1)\n\t" + /* Round 6 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(30)\n\t" + "lwz 23, 52(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[6] */ + "lwz 28, 48(1)\n\t" + "lwz 29, 52(1)\n\t" + "lwz 24, 120(1)\n\t" + "lwz 25, 124(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 48(1)\n\t" + "stw 29, 52(1)\n\t" + /* Round 7 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(30)\n\t" + "lwz 23, 60(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[7] */ + "lwz 28, 56(1)\n\t" + "lwz 29, 60(1)\n\t" + "lwz 24, 0(1)\n\t" + "lwz 25, 4(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 56(1)\n\t" + "stw 29, 60(1)\n\t" + /* Round 8 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(30)\n\t" + "lwz 23, 68(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[8] */ + "lwz 28, 64(1)\n\t" + "lwz 29, 68(1)\n\t" + "lwz 24, 8(1)\n\t" + "lwz 25, 12(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 64(1)\n\t" + "stw 29, 68(1)\n\t" + /* Round 9 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(30)\n\t" + "lwz 23, 76(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[9] */ + "lwz 28, 72(1)\n\t" + "lwz 29, 76(1)\n\t" + "lwz 24, 16(1)\n\t" + "lwz 25, 20(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 72(1)\n\t" + "stw 29, 76(1)\n\t" + /* Round 10 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(30)\n\t" + "lwz 23, 84(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[10] */ + "lwz 28, 80(1)\n\t" + "lwz 29, 84(1)\n\t" + "lwz 24, 24(1)\n\t" + "lwz 25, 28(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 80(1)\n\t" + "stw 29, 84(1)\n\t" + /* Round 11 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(30)\n\t" + "lwz 23, 92(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[11] */ + "lwz 28, 88(1)\n\t" + "lwz 29, 92(1)\n\t" + "lwz 24, 32(1)\n\t" + "lwz 25, 36(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 88(1)\n\t" + "stw 29, 92(1)\n\t" + /* Round 12 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(30)\n\t" + "lwz 23, 100(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[12] */ + "lwz 28, 96(1)\n\t" + "lwz 29, 100(1)\n\t" + "lwz 24, 40(1)\n\t" + "lwz 25, 44(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 96(1)\n\t" + "stw 29, 100(1)\n\t" + /* Round 13 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(30)\n\t" + "lwz 23, 108(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[13] */ + "lwz 28, 104(1)\n\t" + "lwz 29, 108(1)\n\t" + "lwz 24, 48(1)\n\t" + "lwz 25, 52(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 104(1)\n\t" + "stw 29, 108(1)\n\t" + /* Round 14 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(30)\n\t" + "lwz 23, 116(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[14] */ + "lwz 28, 112(1)\n\t" + "lwz 29, 116(1)\n\t" + "lwz 24, 56(1)\n\t" + "lwz 25, 60(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 112(1)\n\t" + "stw 29, 116(1)\n\t" + /* Round 15 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(30)\n\t" + "lwz 23, 124(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[15] */ + "lwz 28, 120(1)\n\t" + "lwz 29, 124(1)\n\t" + "lwz 24, 64(1)\n\t" + "lwz 25, 68(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 120(1)\n\t" + "stw 29, 124(1)\n\t" + "addi 30, 30, 0x80\n\t" + /* Round 0 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(30)\n\t" + "lwz 23, 4(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[0] */ + "lwz 28, 0(1)\n\t" + "lwz 29, 4(1)\n\t" + "lwz 24, 72(1)\n\t" + "lwz 25, 76(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 0(1)\n\t" + "stw 29, 4(1)\n\t" + /* Round 1 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(30)\n\t" + "lwz 23, 12(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[1] */ + "lwz 28, 8(1)\n\t" + "lwz 29, 12(1)\n\t" + "lwz 24, 80(1)\n\t" + "lwz 25, 84(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 8(1)\n\t" + "stw 29, 12(1)\n\t" + /* Round 2 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(30)\n\t" + "lwz 23, 20(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[2] */ + "lwz 28, 16(1)\n\t" + "lwz 29, 20(1)\n\t" + "lwz 24, 88(1)\n\t" + "lwz 25, 92(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 16(1)\n\t" + "stw 29, 20(1)\n\t" + /* Round 3 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(30)\n\t" + "lwz 23, 28(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[3] */ + "lwz 28, 24(1)\n\t" + "lwz 29, 28(1)\n\t" + "lwz 24, 96(1)\n\t" + "lwz 25, 100(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 24(1)\n\t" + "stw 29, 28(1)\n\t" + /* Round 4 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(30)\n\t" + "lwz 23, 36(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[4] */ + "lwz 28, 32(1)\n\t" + "lwz 29, 36(1)\n\t" + "lwz 24, 104(1)\n\t" + "lwz 25, 108(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 32(1)\n\t" + "stw 29, 36(1)\n\t" + /* Round 5 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(30)\n\t" + "lwz 23, 44(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[5] */ + "lwz 28, 40(1)\n\t" + "lwz 29, 44(1)\n\t" + "lwz 24, 112(1)\n\t" + "lwz 25, 116(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 40(1)\n\t" + "stw 29, 44(1)\n\t" + /* Round 6 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(30)\n\t" + "lwz 23, 52(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[6] */ + "lwz 28, 48(1)\n\t" + "lwz 29, 52(1)\n\t" + "lwz 24, 120(1)\n\t" + "lwz 25, 124(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 48(1)\n\t" + "stw 29, 52(1)\n\t" + /* Round 7 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(30)\n\t" + "lwz 23, 60(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[7] */ + "lwz 28, 56(1)\n\t" + "lwz 29, 60(1)\n\t" + "lwz 24, 0(1)\n\t" + "lwz 25, 4(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 56(1)\n\t" + "stw 29, 60(1)\n\t" + /* Round 8 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(30)\n\t" + "lwz 23, 68(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Calc new W[8] */ + "lwz 28, 64(1)\n\t" + "lwz 29, 68(1)\n\t" + "lwz 24, 8(1)\n\t" + "lwz 25, 12(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 64(1)\n\t" + "stw 29, 68(1)\n\t" + /* Round 9 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(30)\n\t" + "lwz 23, 76(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Calc new W[9] */ + "lwz 28, 72(1)\n\t" + "lwz 29, 76(1)\n\t" + "lwz 24, 16(1)\n\t" + "lwz 25, 20(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 72(1)\n\t" + "stw 29, 76(1)\n\t" + /* Round 10 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(30)\n\t" + "lwz 23, 84(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Calc new W[10] */ + "lwz 28, 80(1)\n\t" + "lwz 29, 84(1)\n\t" + "lwz 24, 24(1)\n\t" + "lwz 25, 28(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 80(1)\n\t" + "stw 29, 84(1)\n\t" + /* Round 11 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(30)\n\t" + "lwz 23, 92(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Calc new W[11] */ + "lwz 28, 88(1)\n\t" + "lwz 29, 92(1)\n\t" + "lwz 24, 32(1)\n\t" + "lwz 25, 36(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 88(1)\n\t" + "stw 29, 92(1)\n\t" + /* Round 12 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(30)\n\t" + "lwz 23, 100(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Calc new W[12] */ + "lwz 28, 96(1)\n\t" + "lwz 29, 100(1)\n\t" + "lwz 24, 40(1)\n\t" + "lwz 25, 44(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 96(1)\n\t" + "stw 29, 100(1)\n\t" + /* Round 13 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(30)\n\t" + "lwz 23, 108(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Calc new W[13] */ + "lwz 28, 104(1)\n\t" + "lwz 29, 108(1)\n\t" + "lwz 24, 48(1)\n\t" + "lwz 25, 52(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 104(1)\n\t" + "stw 29, 108(1)\n\t" + /* Round 14 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(30)\n\t" + "lwz 23, 116(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Calc new W[14] */ + "lwz 28, 112(1)\n\t" + "lwz 29, 116(1)\n\t" + "lwz 24, 56(1)\n\t" + "lwz 25, 60(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 112(1)\n\t" + "stw 29, 116(1)\n\t" + /* Round 15 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(30)\n\t" + "lwz 23, 124(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Calc new W[15] */ + "lwz 28, 120(1)\n\t" + "lwz 29, 124(1)\n\t" + "lwz 24, 64(1)\n\t" + "lwz 25, 68(1)\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "rlwinm 24, 22, 13, 19, 31\n\t" + "rlwimi 24, 23, 13, 0, 18\n\t" + "rlwinm 25, 23, 13, 19, 31\n\t" + "rlwimi 25, 22, 13, 0, 18\n\t" + "rlwinm 26, 23, 3, 29, 31\n\t" + "rlwimi 26, 22, 3, 0, 28\n\t" + "rlwinm 27, 22, 3, 29, 31\n\t" + "rlwimi 27, 23, 3, 0, 28\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 6\n\t" + "rlwinm 27, 23, 26, 6, 31\n\t" + "rlwimi 27, 22, 26, 0, 5\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "rlwinm 24, 22, 31, 1, 31\n\t" + "rlwimi 24, 23, 31, 0, 0\n\t" + "rlwinm 25, 23, 31, 1, 31\n\t" + "rlwimi 25, 22, 31, 0, 0\n\t" + "rlwinm 26, 22, 24, 8, 31\n\t" + "rlwimi 26, 23, 24, 0, 7\n\t" + "rlwinm 27, 23, 24, 8, 31\n\t" + "rlwimi 27, 22, 24, 0, 7\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "srwi 26, 22, 7\n\t" + "rlwinm 27, 23, 25, 7, 31\n\t" + "rlwimi 27, 22, 25, 0, 6\n\t" + "xor 24, 24, 26\n\t" + "xor 25, 25, 27\n\t" + "addc 29, 29, 25\n\t" + "adde 28, 28, 24\n\t" + "stw 28, 120(1)\n\t" + "stw 29, 124(1)\n\t" + "addi 30, 30, 0x80\n\t" + /* Round 0 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(1)\n\t" + "lwz 23, 4(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 0(30)\n\t" + "lwz 23, 4(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Round 1 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(1)\n\t" + "lwz 23, 12(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 8(30)\n\t" + "lwz 23, 12(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Round 2 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(1)\n\t" + "lwz 23, 20(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 16(30)\n\t" + "lwz 23, 20(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Round 3 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(1)\n\t" + "lwz 23, 28(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 24(30)\n\t" + "lwz 23, 28(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Round 4 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(1)\n\t" + "lwz 23, 36(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 32(30)\n\t" + "lwz 23, 36(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Round 5 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(1)\n\t" + "lwz 23, 44(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 40(30)\n\t" + "lwz 23, 44(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Round 6 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(1)\n\t" + "lwz 23, 52(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 48(30)\n\t" + "lwz 23, 52(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Round 7 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(1)\n\t" + "lwz 23, 60(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 56(30)\n\t" + "lwz 23, 60(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + /* Round 8 */ + "rlwinm 22, 14, 18, 14, 31\n\t" + "rlwimi 22, 15, 18, 0, 13\n\t" + "rlwinm 23, 15, 18, 14, 31\n\t" + "rlwimi 23, 14, 18, 0, 13\n\t" + "rlwinm 24, 14, 14, 18, 31\n\t" + "rlwimi 24, 15, 14, 0, 17\n\t" + "rlwinm 25, 15, 14, 18, 31\n\t" + "rlwimi 25, 14, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 23, 9, 31\n\t" + "rlwimi 24, 14, 23, 0, 8\n\t" + "rlwinm 25, 14, 23, 9, 31\n\t" + "rlwimi 25, 15, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "and 22, 22, 14\n\t" + "and 23, 23, 15\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(1)\n\t" + "lwz 23, 68(1)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "lwz 22, 64(30)\n\t" + "lwz 23, 68(30)\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "addc 12, 12, 21\n\t" + "adde 11, 11, 20\n\t" + "rlwinm 22, 0, 4, 28, 31\n\t" + "rlwimi 22, 6, 4, 0, 27\n\t" + "rlwinm 23, 6, 4, 28, 31\n\t" + "rlwimi 23, 0, 4, 0, 27\n\t" + "rlwinm 24, 6, 30, 2, 31\n\t" + "rlwimi 24, 0, 30, 0, 1\n\t" + "rlwinm 25, 0, 30, 2, 31\n\t" + "rlwimi 25, 6, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 25, 7, 31\n\t" + "rlwimi 24, 0, 25, 0, 6\n\t" + "rlwinm 25, 0, 25, 7, 31\n\t" + "rlwimi 25, 6, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "xor 24, 7, 9\n\t" + "xor 25, 8, 10\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + /* Round 9 */ + "rlwinm 22, 11, 18, 14, 31\n\t" + "rlwimi 22, 12, 18, 0, 13\n\t" + "rlwinm 23, 12, 18, 14, 31\n\t" + "rlwimi 23, 11, 18, 0, 13\n\t" + "rlwinm 24, 11, 14, 18, 31\n\t" + "rlwimi 24, 12, 14, 0, 17\n\t" + "rlwinm 25, 12, 14, 18, 31\n\t" + "rlwimi 25, 11, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 23, 9, 31\n\t" + "rlwimi 24, 11, 23, 0, 8\n\t" + "rlwinm 25, 11, 23, 9, 31\n\t" + "rlwimi 25, 12, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "and 22, 22, 11\n\t" + "and 23, 23, 12\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(1)\n\t" + "lwz 23, 76(1)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "lwz 22, 72(30)\n\t" + "lwz 23, 76(30)\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "addc 10, 10, 19\n\t" + "adde 9, 9, 18\n\t" + "rlwinm 22, 20, 4, 28, 31\n\t" + "rlwimi 22, 21, 4, 0, 27\n\t" + "rlwinm 23, 21, 4, 28, 31\n\t" + "rlwimi 23, 20, 4, 0, 27\n\t" + "rlwinm 24, 21, 30, 2, 31\n\t" + "rlwimi 24, 20, 30, 0, 1\n\t" + "rlwinm 25, 20, 30, 2, 31\n\t" + "rlwimi 25, 21, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 25, 7, 31\n\t" + "rlwimi 24, 20, 25, 0, 6\n\t" + "rlwinm 25, 20, 25, 7, 31\n\t" + "rlwimi 25, 21, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "xor 24, 0, 7\n\t" + "xor 25, 6, 8\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + /* Round 10 */ + "rlwinm 22, 9, 18, 14, 31\n\t" + "rlwimi 22, 10, 18, 0, 13\n\t" + "rlwinm 23, 10, 18, 14, 31\n\t" + "rlwimi 23, 9, 18, 0, 13\n\t" + "rlwinm 24, 9, 14, 18, 31\n\t" + "rlwimi 24, 10, 14, 0, 17\n\t" + "rlwinm 25, 10, 14, 18, 31\n\t" + "rlwimi 25, 9, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 23, 9, 31\n\t" + "rlwimi 24, 9, 23, 0, 8\n\t" + "rlwinm 25, 9, 23, 9, 31\n\t" + "rlwimi 25, 10, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "and 22, 22, 9\n\t" + "and 23, 23, 10\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(1)\n\t" + "lwz 23, 84(1)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "lwz 22, 80(30)\n\t" + "lwz 23, 84(30)\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "addc 8, 8, 17\n\t" + "adde 7, 7, 16\n\t" + "rlwinm 22, 18, 4, 28, 31\n\t" + "rlwimi 22, 19, 4, 0, 27\n\t" + "rlwinm 23, 19, 4, 28, 31\n\t" + "rlwimi 23, 18, 4, 0, 27\n\t" + "rlwinm 24, 19, 30, 2, 31\n\t" + "rlwimi 24, 18, 30, 0, 1\n\t" + "rlwinm 25, 18, 30, 2, 31\n\t" + "rlwimi 25, 19, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 25, 7, 31\n\t" + "rlwimi 24, 18, 25, 0, 6\n\t" + "rlwinm 25, 18, 25, 7, 31\n\t" + "rlwimi 25, 19, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "xor 24, 20, 0\n\t" + "xor 25, 21, 6\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + /* Round 11 */ + "rlwinm 22, 7, 18, 14, 31\n\t" + "rlwimi 22, 8, 18, 0, 13\n\t" + "rlwinm 23, 8, 18, 14, 31\n\t" + "rlwimi 23, 7, 18, 0, 13\n\t" + "rlwinm 24, 7, 14, 18, 31\n\t" + "rlwimi 24, 8, 14, 0, 17\n\t" + "rlwinm 25, 8, 14, 18, 31\n\t" + "rlwimi 25, 7, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 23, 9, 31\n\t" + "rlwimi 24, 7, 23, 0, 8\n\t" + "rlwinm 25, 7, 23, 9, 31\n\t" + "rlwimi 25, 8, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "and 22, 22, 7\n\t" + "and 23, 23, 8\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(1)\n\t" + "lwz 23, 92(1)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "lwz 22, 88(30)\n\t" + "lwz 23, 92(30)\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "addc 6, 6, 15\n\t" + "adde 0, 0, 14\n\t" + "rlwinm 22, 16, 4, 28, 31\n\t" + "rlwimi 22, 17, 4, 0, 27\n\t" + "rlwinm 23, 17, 4, 28, 31\n\t" + "rlwimi 23, 16, 4, 0, 27\n\t" + "rlwinm 24, 17, 30, 2, 31\n\t" + "rlwimi 24, 16, 30, 0, 1\n\t" + "rlwinm 25, 16, 30, 2, 31\n\t" + "rlwimi 25, 17, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 25, 7, 31\n\t" + "rlwimi 24, 16, 25, 0, 6\n\t" + "rlwinm 25, 16, 25, 7, 31\n\t" + "rlwimi 25, 17, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "xor 22, 16, 18\n\t" + "xor 23, 17, 19\n\t" + "xor 24, 18, 20\n\t" + "xor 25, 19, 21\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 18\n\t" + "xor 23, 23, 19\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + /* Round 12 */ + "rlwinm 22, 0, 18, 14, 31\n\t" + "rlwimi 22, 6, 18, 0, 13\n\t" + "rlwinm 23, 6, 18, 14, 31\n\t" + "rlwimi 23, 0, 18, 0, 13\n\t" + "rlwinm 24, 0, 14, 18, 31\n\t" + "rlwimi 24, 6, 14, 0, 17\n\t" + "rlwinm 25, 6, 14, 18, 31\n\t" + "rlwimi 25, 0, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 6, 23, 9, 31\n\t" + "rlwimi 24, 0, 23, 0, 8\n\t" + "rlwinm 25, 0, 23, 9, 31\n\t" + "rlwimi 25, 6, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "and 22, 22, 0\n\t" + "and 23, 23, 6\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(1)\n\t" + "lwz 23, 100(1)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "lwz 22, 96(30)\n\t" + "lwz 23, 100(30)\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "addc 21, 21, 12\n\t" + "adde 20, 20, 11\n\t" + "rlwinm 22, 14, 4, 28, 31\n\t" + "rlwimi 22, 15, 4, 0, 27\n\t" + "rlwinm 23, 15, 4, 28, 31\n\t" + "rlwimi 23, 14, 4, 0, 27\n\t" + "rlwinm 24, 15, 30, 2, 31\n\t" + "rlwimi 24, 14, 30, 0, 1\n\t" + "rlwinm 25, 14, 30, 2, 31\n\t" + "rlwimi 25, 15, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 15, 25, 7, 31\n\t" + "rlwimi 24, 14, 25, 0, 6\n\t" + "rlwinm 25, 14, 25, 7, 31\n\t" + "rlwimi 25, 15, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "xor 22, 14, 16\n\t" + "xor 23, 15, 17\n\t" + "xor 24, 16, 18\n\t" + "xor 25, 17, 19\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 16\n\t" + "xor 23, 23, 17\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + /* Round 13 */ + "rlwinm 22, 20, 18, 14, 31\n\t" + "rlwimi 22, 21, 18, 0, 13\n\t" + "rlwinm 23, 21, 18, 14, 31\n\t" + "rlwimi 23, 20, 18, 0, 13\n\t" + "rlwinm 24, 20, 14, 18, 31\n\t" + "rlwimi 24, 21, 14, 0, 17\n\t" + "rlwinm 25, 21, 14, 18, 31\n\t" + "rlwimi 25, 20, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 21, 23, 9, 31\n\t" + "rlwimi 24, 20, 23, 0, 8\n\t" + "rlwinm 25, 20, 23, 9, 31\n\t" + "rlwimi 25, 21, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 0, 7\n\t" + "xor 23, 6, 8\n\t" + "and 22, 22, 20\n\t" + "and 23, 23, 21\n\t" + "xor 22, 22, 7\n\t" + "xor 23, 23, 8\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(1)\n\t" + "lwz 23, 108(1)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "lwz 22, 104(30)\n\t" + "lwz 23, 108(30)\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "addc 19, 19, 10\n\t" + "adde 18, 18, 9\n\t" + "rlwinm 22, 11, 4, 28, 31\n\t" + "rlwimi 22, 12, 4, 0, 27\n\t" + "rlwinm 23, 12, 4, 28, 31\n\t" + "rlwimi 23, 11, 4, 0, 27\n\t" + "rlwinm 24, 12, 30, 2, 31\n\t" + "rlwimi 24, 11, 30, 0, 1\n\t" + "rlwinm 25, 11, 30, 2, 31\n\t" + "rlwimi 25, 12, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 12, 25, 7, 31\n\t" + "rlwimi 24, 11, 25, 0, 6\n\t" + "rlwinm 25, 11, 25, 7, 31\n\t" + "rlwimi 25, 12, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "xor 22, 11, 14\n\t" + "xor 23, 12, 15\n\t" + "xor 24, 14, 16\n\t" + "xor 25, 15, 17\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 14\n\t" + "xor 23, 23, 15\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + /* Round 14 */ + "rlwinm 22, 18, 18, 14, 31\n\t" + "rlwimi 22, 19, 18, 0, 13\n\t" + "rlwinm 23, 19, 18, 14, 31\n\t" + "rlwimi 23, 18, 18, 0, 13\n\t" + "rlwinm 24, 18, 14, 18, 31\n\t" + "rlwimi 24, 19, 14, 0, 17\n\t" + "rlwinm 25, 19, 14, 18, 31\n\t" + "rlwimi 25, 18, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 19, 23, 9, 31\n\t" + "rlwimi 24, 18, 23, 0, 8\n\t" + "rlwinm 25, 18, 23, 9, 31\n\t" + "rlwimi 25, 19, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 20, 0\n\t" + "xor 23, 21, 6\n\t" + "and 22, 22, 18\n\t" + "and 23, 23, 19\n\t" + "xor 22, 22, 0\n\t" + "xor 23, 23, 6\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(1)\n\t" + "lwz 23, 116(1)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "lwz 22, 112(30)\n\t" + "lwz 23, 116(30)\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "addc 17, 17, 8\n\t" + "adde 16, 16, 7\n\t" + "rlwinm 22, 9, 4, 28, 31\n\t" + "rlwimi 22, 10, 4, 0, 27\n\t" + "rlwinm 23, 10, 4, 28, 31\n\t" + "rlwimi 23, 9, 4, 0, 27\n\t" + "rlwinm 24, 10, 30, 2, 31\n\t" + "rlwimi 24, 9, 30, 0, 1\n\t" + "rlwinm 25, 9, 30, 2, 31\n\t" + "rlwimi 25, 10, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 10, 25, 7, 31\n\t" + "rlwimi 24, 9, 25, 0, 6\n\t" + "rlwinm 25, 9, 25, 7, 31\n\t" + "rlwimi 25, 10, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "xor 22, 9, 11\n\t" + "xor 23, 10, 12\n\t" + "xor 24, 11, 14\n\t" + "xor 25, 12, 15\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 11\n\t" + "xor 23, 23, 12\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + /* Round 15 */ + "rlwinm 22, 16, 18, 14, 31\n\t" + "rlwimi 22, 17, 18, 0, 13\n\t" + "rlwinm 23, 17, 18, 14, 31\n\t" + "rlwimi 23, 16, 18, 0, 13\n\t" + "rlwinm 24, 16, 14, 18, 31\n\t" + "rlwimi 24, 17, 14, 0, 17\n\t" + "rlwinm 25, 17, 14, 18, 31\n\t" + "rlwimi 25, 16, 14, 0, 17\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 17, 23, 9, 31\n\t" + "rlwimi 24, 16, 23, 0, 8\n\t" + "rlwinm 25, 16, 23, 9, 31\n\t" + "rlwimi 25, 17, 23, 0, 8\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 18, 20\n\t" + "xor 23, 19, 21\n\t" + "and 22, 22, 16\n\t" + "and 23, 23, 17\n\t" + "xor 22, 22, 20\n\t" + "xor 23, 23, 21\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(1)\n\t" + "lwz 23, 124(1)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "lwz 22, 120(30)\n\t" + "lwz 23, 124(30)\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "addc 15, 15, 6\n\t" + "adde 14, 14, 0\n\t" + "rlwinm 22, 7, 4, 28, 31\n\t" + "rlwimi 22, 8, 4, 0, 27\n\t" + "rlwinm 23, 8, 4, 28, 31\n\t" + "rlwimi 23, 7, 4, 0, 27\n\t" + "rlwinm 24, 8, 30, 2, 31\n\t" + "rlwimi 24, 7, 30, 0, 1\n\t" + "rlwinm 25, 7, 30, 2, 31\n\t" + "rlwimi 25, 8, 30, 0, 1\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "rlwinm 24, 8, 25, 7, 31\n\t" + "rlwimi 24, 7, 25, 0, 6\n\t" + "rlwinm 25, 7, 25, 7, 31\n\t" + "rlwimi 25, 8, 25, 0, 6\n\t" + "xor 22, 22, 24\n\t" + "xor 23, 23, 25\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "xor 22, 7, 9\n\t" + "xor 23, 8, 10\n\t" + "xor 24, 9, 11\n\t" + "xor 25, 10, 12\n\t" + "and 22, 22, 24\n\t" + "and 23, 23, 25\n\t" + "xor 22, 22, 9\n\t" + "xor 23, 23, 10\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "subi 30, 30, 0x200\n\t" + /* Add in digest from start */ + "lwz 22, 0(%[sha512])\n\t" + "lwz 23, 4(%[sha512])\n\t" + "addc 6, 6, 23\n\t" + "adde 0, 0, 22\n\t" + "stw 0, 0(%[sha512])\n\t" + "stw 6, 4(%[sha512])\n\t" + "lwz 22, 8(%[sha512])\n\t" + "lwz 23, 12(%[sha512])\n\t" + "addc 8, 8, 23\n\t" + "adde 7, 7, 22\n\t" + "stw 7, 8(%[sha512])\n\t" + "stw 8, 12(%[sha512])\n\t" + "lwz 22, 16(%[sha512])\n\t" + "lwz 23, 20(%[sha512])\n\t" + "addc 10, 10, 23\n\t" + "adde 9, 9, 22\n\t" + "stw 9, 16(%[sha512])\n\t" + "stw 10, 20(%[sha512])\n\t" + "lwz 22, 24(%[sha512])\n\t" + "lwz 23, 28(%[sha512])\n\t" + "addc 12, 12, 23\n\t" + "adde 11, 11, 22\n\t" + "stw 11, 24(%[sha512])\n\t" + "stw 12, 28(%[sha512])\n\t" + "lwz 22, 32(%[sha512])\n\t" + "lwz 23, 36(%[sha512])\n\t" + "addc 15, 15, 23\n\t" + "adde 14, 14, 22\n\t" + "stw 14, 32(%[sha512])\n\t" + "stw 15, 36(%[sha512])\n\t" + "lwz 22, 40(%[sha512])\n\t" + "lwz 23, 44(%[sha512])\n\t" + "addc 17, 17, 23\n\t" + "adde 16, 16, 22\n\t" + "stw 16, 40(%[sha512])\n\t" + "stw 17, 44(%[sha512])\n\t" + "lwz 22, 48(%[sha512])\n\t" + "lwz 23, 52(%[sha512])\n\t" + "addc 19, 19, 23\n\t" + "adde 18, 18, 22\n\t" + "stw 18, 48(%[sha512])\n\t" + "stw 19, 52(%[sha512])\n\t" + "lwz 22, 56(%[sha512])\n\t" + "lwz 23, 60(%[sha512])\n\t" + "addc 21, 21, 23\n\t" + "adde 20, 20, 22\n\t" + "stw 20, 56(%[sha512])\n\t" + "stw 21, 60(%[sha512])\n\t" + "addi %[data], %[data], 0x80\n\t" + "bdnz L_SHA512_transform_len_begin_%=\n\t" + "addi 1, 1, 0x80\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len), + [L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c) + : +#else + : + : [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len), + [L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k_c) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + : "memory", "cc", "0", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30" + ); +} + +#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c b/wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c new file mode 100644 index 00000000000..c004f707864 --- /dev/null +++ b/wolfcrypt/src/port/ppc32/ppc32-sha512-asm_cr.c @@ -0,0 +1,8490 @@ +/* ppc32-sha512-asm + * + * Copyright (C) 2006-2026 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/sha512.rb ppc32 \ + * ../wolfssl/wolfcrypt/src/port/ppc32/ppc32-sha512-asm.c + */ + +#include +#include + +#ifdef WOLFSSL_PPC32_ASM +#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__ */ + +#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384) +#include + +XALIGNED(16) static const word64 L_SHA512_transform_len_k[] = { + 0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, + 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, + 0x3956c25bf348b538UL, 0x59f111f1b605d019UL, + 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, + 0xd807aa98a3030242UL, 0x12835b0145706fbeUL, + 0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, + 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, + 0x9bdc06a725c71235UL, 0xc19bf174cf692694UL, + 0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL, + 0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL, + 0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL, + 0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL, + 0x983e5152ee66dfabUL, 0xa831c66d2db43210UL, + 0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL, + 0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL, + 0x06ca6351e003826fUL, 0x142929670a0e6e70UL, + 0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL, + 0x4d2c6dfc5ac42aedUL, 0x53380d139d95b3dfUL, + 0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL, + 0x81c2c92e47edaee6UL, 0x92722c851482353bUL, + 0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL, + 0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL, + 0xd192e819d6ef5218UL, 0xd69906245565a910UL, + 0xf40e35855771202aUL, 0x106aa07032bbd1b8UL, + 0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL, + 0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL, + 0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL, + 0x5b9cca4f7763e373UL, 0x682e6ff3d6b2b8a3UL, + 0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL, + 0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL, + 0x90befffa23631e28UL, 0xa4506cebde82bde9UL, + 0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL, + 0xca273eceea26619cUL, 0xd186b8c721c0c207UL, + 0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL, + 0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL, + 0x113f9804bef90daeUL, 0x1b710b35131c471bUL, + 0x28db77f523047d84UL, 0x32caab7b40c72493UL, + 0x3c9ebe0a15c9bebcUL, 0x431d67c49c100d4cUL, + 0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL, + 0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL, +}; + +void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, + word32 len_p); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +WC_OMIT_FRAME_POINTER void Transform_Sha512_Len(wc_Sha512* sha512_p, + const byte* data_p, word32 len_p) +#else +WC_OMIT_FRAME_POINTER void Transform_Sha512_Len(wc_Sha512* sha512, + const byte* data, word32 len) +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register wc_Sha512* sha512 __asm__ ("r3") = (wc_Sha512*)sha512_p; + register const byte* data __asm__ ("r4") = (const byte*)data_p; + register word32 len __asm__ ("r5") = (word32)len_p; + register word64* L_SHA512_transform_len_k_c __asm__ ("r6") = + (word64*)&L_SHA512_transform_len_k; +#else + register word64* L_SHA512_transform_len_k_c = + (word64*)&L_SHA512_transform_len_k; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "srwi %[len], %[len], 7\n\t" + "mr r30, %[L_SHA512_transform_len_k]\n\t" + /* Copy digest to add in at end */ + "lwz r0, 0(%[sha512])\n\t" + "lwz r6, 4(%[sha512])\n\t" + "lwz r7, 8(%[sha512])\n\t" + "lwz r8, 12(%[sha512])\n\t" + "lwz r9, 16(%[sha512])\n\t" + "lwz r10, 20(%[sha512])\n\t" + "lwz r11, 24(%[sha512])\n\t" + "lwz r12, 28(%[sha512])\n\t" + "lwz r14, 32(%[sha512])\n\t" + "lwz r15, 36(%[sha512])\n\t" + "lwz r16, 40(%[sha512])\n\t" + "lwz r17, 44(%[sha512])\n\t" + "lwz r18, 48(%[sha512])\n\t" + "lwz r19, 52(%[sha512])\n\t" + "lwz r20, 56(%[sha512])\n\t" + "lwz r21, 60(%[sha512])\n\t" + "subi r1, r1, 0x80\n\t" + "mtctr %[len]\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA512_transform_len_begin_%=:\n\t" + /* Load W - 128 bytes */ + "lwz r22, 0(%[data])\n\t" + "lwz r23, 4(%[data])\n\t" + "stw r22, 0(r1)\n\t" + "stw r23, 4(r1)\n\t" + "lwz r22, 8(%[data])\n\t" + "lwz r23, 12(%[data])\n\t" + "stw r22, 8(r1)\n\t" + "stw r23, 12(r1)\n\t" + "lwz r22, 16(%[data])\n\t" + "lwz r23, 20(%[data])\n\t" + "stw r22, 16(r1)\n\t" + "stw r23, 20(r1)\n\t" + "lwz r22, 24(%[data])\n\t" + "lwz r23, 28(%[data])\n\t" + "stw r22, 24(r1)\n\t" + "stw r23, 28(r1)\n\t" + "lwz r22, 32(%[data])\n\t" + "lwz r23, 36(%[data])\n\t" + "stw r22, 32(r1)\n\t" + "stw r23, 36(r1)\n\t" + "lwz r22, 40(%[data])\n\t" + "lwz r23, 44(%[data])\n\t" + "stw r22, 40(r1)\n\t" + "stw r23, 44(r1)\n\t" + "lwz r22, 48(%[data])\n\t" + "lwz r23, 52(%[data])\n\t" + "stw r22, 48(r1)\n\t" + "stw r23, 52(r1)\n\t" + "lwz r22, 56(%[data])\n\t" + "lwz r23, 60(%[data])\n\t" + "stw r22, 56(r1)\n\t" + "stw r23, 60(r1)\n\t" + "lwz r22, 64(%[data])\n\t" + "lwz r23, 68(%[data])\n\t" + "stw r22, 64(r1)\n\t" + "stw r23, 68(r1)\n\t" + "lwz r22, 72(%[data])\n\t" + "lwz r23, 76(%[data])\n\t" + "stw r22, 72(r1)\n\t" + "stw r23, 76(r1)\n\t" + "lwz r22, 80(%[data])\n\t" + "lwz r23, 84(%[data])\n\t" + "stw r22, 80(r1)\n\t" + "stw r23, 84(r1)\n\t" + "lwz r22, 88(%[data])\n\t" + "lwz r23, 92(%[data])\n\t" + "stw r22, 88(r1)\n\t" + "stw r23, 92(r1)\n\t" + "lwz r22, 96(%[data])\n\t" + "lwz r23, 100(%[data])\n\t" + "stw r22, 96(r1)\n\t" + "stw r23, 100(r1)\n\t" + "lwz r22, 104(%[data])\n\t" + "lwz r23, 108(%[data])\n\t" + "stw r22, 104(r1)\n\t" + "stw r23, 108(r1)\n\t" + "lwz r22, 112(%[data])\n\t" + "lwz r23, 116(%[data])\n\t" + "stw r22, 112(r1)\n\t" + "stw r23, 116(r1)\n\t" + "lwz r22, 120(%[data])\n\t" + "lwz r23, 124(%[data])\n\t" + "stw r22, 120(r1)\n\t" + "stw r23, 124(r1)\n\t" + /* Start of 80 rounds */ + /* Round 0 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r30)\n\t" + "lwz r23, 4(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[0] */ + "lwz r28, 0(r1)\n\t" + "lwz r29, 4(r1)\n\t" + "lwz r24, 72(r1)\n\t" + "lwz r25, 76(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 0(r1)\n\t" + "stw r29, 4(r1)\n\t" + /* Round 1 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r30)\n\t" + "lwz r23, 12(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[1] */ + "lwz r28, 8(r1)\n\t" + "lwz r29, 12(r1)\n\t" + "lwz r24, 80(r1)\n\t" + "lwz r25, 84(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 8(r1)\n\t" + "stw r29, 12(r1)\n\t" + /* Round 2 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r30)\n\t" + "lwz r23, 20(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[2] */ + "lwz r28, 16(r1)\n\t" + "lwz r29, 20(r1)\n\t" + "lwz r24, 88(r1)\n\t" + "lwz r25, 92(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 16(r1)\n\t" + "stw r29, 20(r1)\n\t" + /* Round 3 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r30)\n\t" + "lwz r23, 28(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[3] */ + "lwz r28, 24(r1)\n\t" + "lwz r29, 28(r1)\n\t" + "lwz r24, 96(r1)\n\t" + "lwz r25, 100(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 24(r1)\n\t" + "stw r29, 28(r1)\n\t" + /* Round 4 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r30)\n\t" + "lwz r23, 36(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[4] */ + "lwz r28, 32(r1)\n\t" + "lwz r29, 36(r1)\n\t" + "lwz r24, 104(r1)\n\t" + "lwz r25, 108(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 32(r1)\n\t" + "stw r29, 36(r1)\n\t" + /* Round 5 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r30)\n\t" + "lwz r23, 44(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[5] */ + "lwz r28, 40(r1)\n\t" + "lwz r29, 44(r1)\n\t" + "lwz r24, 112(r1)\n\t" + "lwz r25, 116(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 40(r1)\n\t" + "stw r29, 44(r1)\n\t" + /* Round 6 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r30)\n\t" + "lwz r23, 52(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[6] */ + "lwz r28, 48(r1)\n\t" + "lwz r29, 52(r1)\n\t" + "lwz r24, 120(r1)\n\t" + "lwz r25, 124(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 48(r1)\n\t" + "stw r29, 52(r1)\n\t" + /* Round 7 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r30)\n\t" + "lwz r23, 60(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[7] */ + "lwz r28, 56(r1)\n\t" + "lwz r29, 60(r1)\n\t" + "lwz r24, 0(r1)\n\t" + "lwz r25, 4(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 56(r1)\n\t" + "stw r29, 60(r1)\n\t" + /* Round 8 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r30)\n\t" + "lwz r23, 68(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[8] */ + "lwz r28, 64(r1)\n\t" + "lwz r29, 68(r1)\n\t" + "lwz r24, 8(r1)\n\t" + "lwz r25, 12(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 64(r1)\n\t" + "stw r29, 68(r1)\n\t" + /* Round 9 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r30)\n\t" + "lwz r23, 76(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[9] */ + "lwz r28, 72(r1)\n\t" + "lwz r29, 76(r1)\n\t" + "lwz r24, 16(r1)\n\t" + "lwz r25, 20(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 72(r1)\n\t" + "stw r29, 76(r1)\n\t" + /* Round 10 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r30)\n\t" + "lwz r23, 84(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[10] */ + "lwz r28, 80(r1)\n\t" + "lwz r29, 84(r1)\n\t" + "lwz r24, 24(r1)\n\t" + "lwz r25, 28(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 80(r1)\n\t" + "stw r29, 84(r1)\n\t" + /* Round 11 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r30)\n\t" + "lwz r23, 92(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[11] */ + "lwz r28, 88(r1)\n\t" + "lwz r29, 92(r1)\n\t" + "lwz r24, 32(r1)\n\t" + "lwz r25, 36(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 88(r1)\n\t" + "stw r29, 92(r1)\n\t" + /* Round 12 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r30)\n\t" + "lwz r23, 100(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[12] */ + "lwz r28, 96(r1)\n\t" + "lwz r29, 100(r1)\n\t" + "lwz r24, 40(r1)\n\t" + "lwz r25, 44(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 96(r1)\n\t" + "stw r29, 100(r1)\n\t" + /* Round 13 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r30)\n\t" + "lwz r23, 108(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[13] */ + "lwz r28, 104(r1)\n\t" + "lwz r29, 108(r1)\n\t" + "lwz r24, 48(r1)\n\t" + "lwz r25, 52(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 104(r1)\n\t" + "stw r29, 108(r1)\n\t" + /* Round 14 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r30)\n\t" + "lwz r23, 116(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[14] */ + "lwz r28, 112(r1)\n\t" + "lwz r29, 116(r1)\n\t" + "lwz r24, 56(r1)\n\t" + "lwz r25, 60(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 112(r1)\n\t" + "stw r29, 116(r1)\n\t" + /* Round 15 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r30)\n\t" + "lwz r23, 124(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[15] */ + "lwz r28, 120(r1)\n\t" + "lwz r29, 124(r1)\n\t" + "lwz r24, 64(r1)\n\t" + "lwz r25, 68(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 120(r1)\n\t" + "stw r29, 124(r1)\n\t" + "addi r30, r30, 0x80\n\t" + /* Round 0 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r30)\n\t" + "lwz r23, 4(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[0] */ + "lwz r28, 0(r1)\n\t" + "lwz r29, 4(r1)\n\t" + "lwz r24, 72(r1)\n\t" + "lwz r25, 76(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 0(r1)\n\t" + "stw r29, 4(r1)\n\t" + /* Round 1 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r30)\n\t" + "lwz r23, 12(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[1] */ + "lwz r28, 8(r1)\n\t" + "lwz r29, 12(r1)\n\t" + "lwz r24, 80(r1)\n\t" + "lwz r25, 84(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 8(r1)\n\t" + "stw r29, 12(r1)\n\t" + /* Round 2 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r30)\n\t" + "lwz r23, 20(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[2] */ + "lwz r28, 16(r1)\n\t" + "lwz r29, 20(r1)\n\t" + "lwz r24, 88(r1)\n\t" + "lwz r25, 92(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 16(r1)\n\t" + "stw r29, 20(r1)\n\t" + /* Round 3 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r30)\n\t" + "lwz r23, 28(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[3] */ + "lwz r28, 24(r1)\n\t" + "lwz r29, 28(r1)\n\t" + "lwz r24, 96(r1)\n\t" + "lwz r25, 100(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 24(r1)\n\t" + "stw r29, 28(r1)\n\t" + /* Round 4 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r30)\n\t" + "lwz r23, 36(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[4] */ + "lwz r28, 32(r1)\n\t" + "lwz r29, 36(r1)\n\t" + "lwz r24, 104(r1)\n\t" + "lwz r25, 108(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 32(r1)\n\t" + "stw r29, 36(r1)\n\t" + /* Round 5 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r30)\n\t" + "lwz r23, 44(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[5] */ + "lwz r28, 40(r1)\n\t" + "lwz r29, 44(r1)\n\t" + "lwz r24, 112(r1)\n\t" + "lwz r25, 116(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 40(r1)\n\t" + "stw r29, 44(r1)\n\t" + /* Round 6 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r30)\n\t" + "lwz r23, 52(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[6] */ + "lwz r28, 48(r1)\n\t" + "lwz r29, 52(r1)\n\t" + "lwz r24, 120(r1)\n\t" + "lwz r25, 124(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 48(r1)\n\t" + "stw r29, 52(r1)\n\t" + /* Round 7 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r30)\n\t" + "lwz r23, 60(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[7] */ + "lwz r28, 56(r1)\n\t" + "lwz r29, 60(r1)\n\t" + "lwz r24, 0(r1)\n\t" + "lwz r25, 4(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 56(r1)\n\t" + "stw r29, 60(r1)\n\t" + /* Round 8 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r30)\n\t" + "lwz r23, 68(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[8] */ + "lwz r28, 64(r1)\n\t" + "lwz r29, 68(r1)\n\t" + "lwz r24, 8(r1)\n\t" + "lwz r25, 12(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 64(r1)\n\t" + "stw r29, 68(r1)\n\t" + /* Round 9 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r30)\n\t" + "lwz r23, 76(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[9] */ + "lwz r28, 72(r1)\n\t" + "lwz r29, 76(r1)\n\t" + "lwz r24, 16(r1)\n\t" + "lwz r25, 20(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 72(r1)\n\t" + "stw r29, 76(r1)\n\t" + /* Round 10 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r30)\n\t" + "lwz r23, 84(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[10] */ + "lwz r28, 80(r1)\n\t" + "lwz r29, 84(r1)\n\t" + "lwz r24, 24(r1)\n\t" + "lwz r25, 28(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 80(r1)\n\t" + "stw r29, 84(r1)\n\t" + /* Round 11 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r30)\n\t" + "lwz r23, 92(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[11] */ + "lwz r28, 88(r1)\n\t" + "lwz r29, 92(r1)\n\t" + "lwz r24, 32(r1)\n\t" + "lwz r25, 36(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 88(r1)\n\t" + "stw r29, 92(r1)\n\t" + /* Round 12 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r30)\n\t" + "lwz r23, 100(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[12] */ + "lwz r28, 96(r1)\n\t" + "lwz r29, 100(r1)\n\t" + "lwz r24, 40(r1)\n\t" + "lwz r25, 44(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 96(r1)\n\t" + "stw r29, 100(r1)\n\t" + /* Round 13 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r30)\n\t" + "lwz r23, 108(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[13] */ + "lwz r28, 104(r1)\n\t" + "lwz r29, 108(r1)\n\t" + "lwz r24, 48(r1)\n\t" + "lwz r25, 52(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 104(r1)\n\t" + "stw r29, 108(r1)\n\t" + /* Round 14 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r30)\n\t" + "lwz r23, 116(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[14] */ + "lwz r28, 112(r1)\n\t" + "lwz r29, 116(r1)\n\t" + "lwz r24, 56(r1)\n\t" + "lwz r25, 60(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 112(r1)\n\t" + "stw r29, 116(r1)\n\t" + /* Round 15 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r30)\n\t" + "lwz r23, 124(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[15] */ + "lwz r28, 120(r1)\n\t" + "lwz r29, 124(r1)\n\t" + "lwz r24, 64(r1)\n\t" + "lwz r25, 68(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 120(r1)\n\t" + "stw r29, 124(r1)\n\t" + "addi r30, r30, 0x80\n\t" + /* Round 0 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r30)\n\t" + "lwz r23, 4(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[0] */ + "lwz r28, 0(r1)\n\t" + "lwz r29, 4(r1)\n\t" + "lwz r24, 72(r1)\n\t" + "lwz r25, 76(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 0(r1)\n\t" + "stw r29, 4(r1)\n\t" + /* Round 1 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r30)\n\t" + "lwz r23, 12(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[1] */ + "lwz r28, 8(r1)\n\t" + "lwz r29, 12(r1)\n\t" + "lwz r24, 80(r1)\n\t" + "lwz r25, 84(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 8(r1)\n\t" + "stw r29, 12(r1)\n\t" + /* Round 2 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r30)\n\t" + "lwz r23, 20(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[2] */ + "lwz r28, 16(r1)\n\t" + "lwz r29, 20(r1)\n\t" + "lwz r24, 88(r1)\n\t" + "lwz r25, 92(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 16(r1)\n\t" + "stw r29, 20(r1)\n\t" + /* Round 3 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r30)\n\t" + "lwz r23, 28(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[3] */ + "lwz r28, 24(r1)\n\t" + "lwz r29, 28(r1)\n\t" + "lwz r24, 96(r1)\n\t" + "lwz r25, 100(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 24(r1)\n\t" + "stw r29, 28(r1)\n\t" + /* Round 4 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r30)\n\t" + "lwz r23, 36(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[4] */ + "lwz r28, 32(r1)\n\t" + "lwz r29, 36(r1)\n\t" + "lwz r24, 104(r1)\n\t" + "lwz r25, 108(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 32(r1)\n\t" + "stw r29, 36(r1)\n\t" + /* Round 5 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r30)\n\t" + "lwz r23, 44(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[5] */ + "lwz r28, 40(r1)\n\t" + "lwz r29, 44(r1)\n\t" + "lwz r24, 112(r1)\n\t" + "lwz r25, 116(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 40(r1)\n\t" + "stw r29, 44(r1)\n\t" + /* Round 6 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r30)\n\t" + "lwz r23, 52(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[6] */ + "lwz r28, 48(r1)\n\t" + "lwz r29, 52(r1)\n\t" + "lwz r24, 120(r1)\n\t" + "lwz r25, 124(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 48(r1)\n\t" + "stw r29, 52(r1)\n\t" + /* Round 7 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r30)\n\t" + "lwz r23, 60(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[7] */ + "lwz r28, 56(r1)\n\t" + "lwz r29, 60(r1)\n\t" + "lwz r24, 0(r1)\n\t" + "lwz r25, 4(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 56(r1)\n\t" + "stw r29, 60(r1)\n\t" + /* Round 8 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r30)\n\t" + "lwz r23, 68(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[8] */ + "lwz r28, 64(r1)\n\t" + "lwz r29, 68(r1)\n\t" + "lwz r24, 8(r1)\n\t" + "lwz r25, 12(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 64(r1)\n\t" + "stw r29, 68(r1)\n\t" + /* Round 9 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r30)\n\t" + "lwz r23, 76(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[9] */ + "lwz r28, 72(r1)\n\t" + "lwz r29, 76(r1)\n\t" + "lwz r24, 16(r1)\n\t" + "lwz r25, 20(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 72(r1)\n\t" + "stw r29, 76(r1)\n\t" + /* Round 10 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r30)\n\t" + "lwz r23, 84(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[10] */ + "lwz r28, 80(r1)\n\t" + "lwz r29, 84(r1)\n\t" + "lwz r24, 24(r1)\n\t" + "lwz r25, 28(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 80(r1)\n\t" + "stw r29, 84(r1)\n\t" + /* Round 11 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r30)\n\t" + "lwz r23, 92(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[11] */ + "lwz r28, 88(r1)\n\t" + "lwz r29, 92(r1)\n\t" + "lwz r24, 32(r1)\n\t" + "lwz r25, 36(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 88(r1)\n\t" + "stw r29, 92(r1)\n\t" + /* Round 12 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r30)\n\t" + "lwz r23, 100(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[12] */ + "lwz r28, 96(r1)\n\t" + "lwz r29, 100(r1)\n\t" + "lwz r24, 40(r1)\n\t" + "lwz r25, 44(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 96(r1)\n\t" + "stw r29, 100(r1)\n\t" + /* Round 13 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r30)\n\t" + "lwz r23, 108(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[13] */ + "lwz r28, 104(r1)\n\t" + "lwz r29, 108(r1)\n\t" + "lwz r24, 48(r1)\n\t" + "lwz r25, 52(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 104(r1)\n\t" + "stw r29, 108(r1)\n\t" + /* Round 14 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r30)\n\t" + "lwz r23, 116(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[14] */ + "lwz r28, 112(r1)\n\t" + "lwz r29, 116(r1)\n\t" + "lwz r24, 56(r1)\n\t" + "lwz r25, 60(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 112(r1)\n\t" + "stw r29, 116(r1)\n\t" + /* Round 15 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r30)\n\t" + "lwz r23, 124(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[15] */ + "lwz r28, 120(r1)\n\t" + "lwz r29, 124(r1)\n\t" + "lwz r24, 64(r1)\n\t" + "lwz r25, 68(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 120(r1)\n\t" + "stw r29, 124(r1)\n\t" + "addi r30, r30, 0x80\n\t" + /* Round 0 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r30)\n\t" + "lwz r23, 4(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[0] */ + "lwz r28, 0(r1)\n\t" + "lwz r29, 4(r1)\n\t" + "lwz r24, 72(r1)\n\t" + "lwz r25, 76(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 0(r1)\n\t" + "stw r29, 4(r1)\n\t" + /* Round 1 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r30)\n\t" + "lwz r23, 12(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[1] */ + "lwz r28, 8(r1)\n\t" + "lwz r29, 12(r1)\n\t" + "lwz r24, 80(r1)\n\t" + "lwz r25, 84(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 8(r1)\n\t" + "stw r29, 12(r1)\n\t" + /* Round 2 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r30)\n\t" + "lwz r23, 20(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[2] */ + "lwz r28, 16(r1)\n\t" + "lwz r29, 20(r1)\n\t" + "lwz r24, 88(r1)\n\t" + "lwz r25, 92(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 16(r1)\n\t" + "stw r29, 20(r1)\n\t" + /* Round 3 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r30)\n\t" + "lwz r23, 28(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[3] */ + "lwz r28, 24(r1)\n\t" + "lwz r29, 28(r1)\n\t" + "lwz r24, 96(r1)\n\t" + "lwz r25, 100(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 24(r1)\n\t" + "stw r29, 28(r1)\n\t" + /* Round 4 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r30)\n\t" + "lwz r23, 36(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[4] */ + "lwz r28, 32(r1)\n\t" + "lwz r29, 36(r1)\n\t" + "lwz r24, 104(r1)\n\t" + "lwz r25, 108(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 32(r1)\n\t" + "stw r29, 36(r1)\n\t" + /* Round 5 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r30)\n\t" + "lwz r23, 44(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[5] */ + "lwz r28, 40(r1)\n\t" + "lwz r29, 44(r1)\n\t" + "lwz r24, 112(r1)\n\t" + "lwz r25, 116(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 40(r1)\n\t" + "stw r29, 44(r1)\n\t" + /* Round 6 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r30)\n\t" + "lwz r23, 52(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[6] */ + "lwz r28, 48(r1)\n\t" + "lwz r29, 52(r1)\n\t" + "lwz r24, 120(r1)\n\t" + "lwz r25, 124(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 48(r1)\n\t" + "stw r29, 52(r1)\n\t" + /* Round 7 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r30)\n\t" + "lwz r23, 60(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[7] */ + "lwz r28, 56(r1)\n\t" + "lwz r29, 60(r1)\n\t" + "lwz r24, 0(r1)\n\t" + "lwz r25, 4(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 56(r1)\n\t" + "stw r29, 60(r1)\n\t" + /* Round 8 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r30)\n\t" + "lwz r23, 68(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Calc new W[8] */ + "lwz r28, 64(r1)\n\t" + "lwz r29, 68(r1)\n\t" + "lwz r24, 8(r1)\n\t" + "lwz r25, 12(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 64(r1)\n\t" + "stw r29, 68(r1)\n\t" + /* Round 9 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r30)\n\t" + "lwz r23, 76(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Calc new W[9] */ + "lwz r28, 72(r1)\n\t" + "lwz r29, 76(r1)\n\t" + "lwz r24, 16(r1)\n\t" + "lwz r25, 20(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 72(r1)\n\t" + "stw r29, 76(r1)\n\t" + /* Round 10 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r30)\n\t" + "lwz r23, 84(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Calc new W[10] */ + "lwz r28, 80(r1)\n\t" + "lwz r29, 84(r1)\n\t" + "lwz r24, 24(r1)\n\t" + "lwz r25, 28(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 80(r1)\n\t" + "stw r29, 84(r1)\n\t" + /* Round 11 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r30)\n\t" + "lwz r23, 92(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Calc new W[11] */ + "lwz r28, 88(r1)\n\t" + "lwz r29, 92(r1)\n\t" + "lwz r24, 32(r1)\n\t" + "lwz r25, 36(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 88(r1)\n\t" + "stw r29, 92(r1)\n\t" + /* Round 12 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r30)\n\t" + "lwz r23, 100(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Calc new W[12] */ + "lwz r28, 96(r1)\n\t" + "lwz r29, 100(r1)\n\t" + "lwz r24, 40(r1)\n\t" + "lwz r25, 44(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 96(r1)\n\t" + "stw r29, 100(r1)\n\t" + /* Round 13 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r30)\n\t" + "lwz r23, 108(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Calc new W[13] */ + "lwz r28, 104(r1)\n\t" + "lwz r29, 108(r1)\n\t" + "lwz r24, 48(r1)\n\t" + "lwz r25, 52(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 104(r1)\n\t" + "stw r29, 108(r1)\n\t" + /* Round 14 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r30)\n\t" + "lwz r23, 116(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Calc new W[14] */ + "lwz r28, 112(r1)\n\t" + "lwz r29, 116(r1)\n\t" + "lwz r24, 56(r1)\n\t" + "lwz r25, 60(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 112(r1)\n\t" + "stw r29, 116(r1)\n\t" + /* Round 15 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r30)\n\t" + "lwz r23, 124(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Calc new W[15] */ + "lwz r28, 120(r1)\n\t" + "lwz r29, 124(r1)\n\t" + "lwz r24, 64(r1)\n\t" + "lwz r25, 68(r1)\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "rlwinm r24, r22, 13, 19, 31\n\t" + "rlwimi r24, r23, 13, 0, 18\n\t" + "rlwinm r25, r23, 13, 19, 31\n\t" + "rlwimi r25, r22, 13, 0, 18\n\t" + "rlwinm r26, r23, 3, 29, 31\n\t" + "rlwimi r26, r22, 3, 0, 28\n\t" + "rlwinm r27, r22, 3, 29, 31\n\t" + "rlwimi r27, r23, 3, 0, 28\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 6\n\t" + "rlwinm r27, r23, 26, 6, 31\n\t" + "rlwimi r27, r22, 26, 0, 5\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "rlwinm r24, r22, 31, 1, 31\n\t" + "rlwimi r24, r23, 31, 0, 0\n\t" + "rlwinm r25, r23, 31, 1, 31\n\t" + "rlwimi r25, r22, 31, 0, 0\n\t" + "rlwinm r26, r22, 24, 8, 31\n\t" + "rlwimi r26, r23, 24, 0, 7\n\t" + "rlwinm r27, r23, 24, 8, 31\n\t" + "rlwimi r27, r22, 24, 0, 7\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "srwi r26, r22, 7\n\t" + "rlwinm r27, r23, 25, 7, 31\n\t" + "rlwimi r27, r22, 25, 0, 6\n\t" + "xor r24, r24, r26\n\t" + "xor r25, r25, r27\n\t" + "addc r29, r29, r25\n\t" + "adde r28, r28, r24\n\t" + "stw r28, 120(r1)\n\t" + "stw r29, 124(r1)\n\t" + "addi r30, r30, 0x80\n\t" + /* Round 0 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r1)\n\t" + "lwz r23, 4(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 0(r30)\n\t" + "lwz r23, 4(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Round 1 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r1)\n\t" + "lwz r23, 12(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 8(r30)\n\t" + "lwz r23, 12(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Round 2 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r1)\n\t" + "lwz r23, 20(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 16(r30)\n\t" + "lwz r23, 20(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Round 3 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r1)\n\t" + "lwz r23, 28(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 24(r30)\n\t" + "lwz r23, 28(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Round 4 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r1)\n\t" + "lwz r23, 36(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 32(r30)\n\t" + "lwz r23, 36(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Round 5 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r1)\n\t" + "lwz r23, 44(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 40(r30)\n\t" + "lwz r23, 44(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Round 6 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r1)\n\t" + "lwz r23, 52(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 48(r30)\n\t" + "lwz r23, 52(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Round 7 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r1)\n\t" + "lwz r23, 60(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 56(r30)\n\t" + "lwz r23, 60(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + /* Round 8 */ + "rlwinm r22, r14, 18, 14, 31\n\t" + "rlwimi r22, r15, 18, 0, 13\n\t" + "rlwinm r23, r15, 18, 14, 31\n\t" + "rlwimi r23, r14, 18, 0, 13\n\t" + "rlwinm r24, r14, 14, 18, 31\n\t" + "rlwimi r24, r15, 14, 0, 17\n\t" + "rlwinm r25, r15, 14, 18, 31\n\t" + "rlwimi r25, r14, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 23, 9, 31\n\t" + "rlwimi r24, r14, 23, 0, 8\n\t" + "rlwinm r25, r14, 23, 9, 31\n\t" + "rlwimi r25, r15, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "and r22, r22, r14\n\t" + "and r23, r23, r15\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r1)\n\t" + "lwz r23, 68(r1)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "lwz r22, 64(r30)\n\t" + "lwz r23, 68(r30)\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "addc r12, r12, r21\n\t" + "adde r11, r11, r20\n\t" + "rlwinm r22, r0, 4, 28, 31\n\t" + "rlwimi r22, r6, 4, 0, 27\n\t" + "rlwinm r23, r6, 4, 28, 31\n\t" + "rlwimi r23, r0, 4, 0, 27\n\t" + "rlwinm r24, r6, 30, 2, 31\n\t" + "rlwimi r24, r0, 30, 0, 1\n\t" + "rlwinm r25, r0, 30, 2, 31\n\t" + "rlwimi r25, r6, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 25, 7, 31\n\t" + "rlwimi r24, r0, 25, 0, 6\n\t" + "rlwinm r25, r0, 25, 7, 31\n\t" + "rlwimi r25, r6, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "xor r24, r7, r9\n\t" + "xor r25, r8, r10\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + /* Round 9 */ + "rlwinm r22, r11, 18, 14, 31\n\t" + "rlwimi r22, r12, 18, 0, 13\n\t" + "rlwinm r23, r12, 18, 14, 31\n\t" + "rlwimi r23, r11, 18, 0, 13\n\t" + "rlwinm r24, r11, 14, 18, 31\n\t" + "rlwimi r24, r12, 14, 0, 17\n\t" + "rlwinm r25, r12, 14, 18, 31\n\t" + "rlwimi r25, r11, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 23, 9, 31\n\t" + "rlwimi r24, r11, 23, 0, 8\n\t" + "rlwinm r25, r11, 23, 9, 31\n\t" + "rlwimi r25, r12, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "and r22, r22, r11\n\t" + "and r23, r23, r12\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r1)\n\t" + "lwz r23, 76(r1)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "lwz r22, 72(r30)\n\t" + "lwz r23, 76(r30)\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "addc r10, r10, r19\n\t" + "adde r9, r9, r18\n\t" + "rlwinm r22, r20, 4, 28, 31\n\t" + "rlwimi r22, r21, 4, 0, 27\n\t" + "rlwinm r23, r21, 4, 28, 31\n\t" + "rlwimi r23, r20, 4, 0, 27\n\t" + "rlwinm r24, r21, 30, 2, 31\n\t" + "rlwimi r24, r20, 30, 0, 1\n\t" + "rlwinm r25, r20, 30, 2, 31\n\t" + "rlwimi r25, r21, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 25, 7, 31\n\t" + "rlwimi r24, r20, 25, 0, 6\n\t" + "rlwinm r25, r20, 25, 7, 31\n\t" + "rlwimi r25, r21, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "xor r24, r0, r7\n\t" + "xor r25, r6, r8\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + /* Round 10 */ + "rlwinm r22, r9, 18, 14, 31\n\t" + "rlwimi r22, r10, 18, 0, 13\n\t" + "rlwinm r23, r10, 18, 14, 31\n\t" + "rlwimi r23, r9, 18, 0, 13\n\t" + "rlwinm r24, r9, 14, 18, 31\n\t" + "rlwimi r24, r10, 14, 0, 17\n\t" + "rlwinm r25, r10, 14, 18, 31\n\t" + "rlwimi r25, r9, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 23, 9, 31\n\t" + "rlwimi r24, r9, 23, 0, 8\n\t" + "rlwinm r25, r9, 23, 9, 31\n\t" + "rlwimi r25, r10, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "and r22, r22, r9\n\t" + "and r23, r23, r10\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r1)\n\t" + "lwz r23, 84(r1)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "lwz r22, 80(r30)\n\t" + "lwz r23, 84(r30)\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "addc r8, r8, r17\n\t" + "adde r7, r7, r16\n\t" + "rlwinm r22, r18, 4, 28, 31\n\t" + "rlwimi r22, r19, 4, 0, 27\n\t" + "rlwinm r23, r19, 4, 28, 31\n\t" + "rlwimi r23, r18, 4, 0, 27\n\t" + "rlwinm r24, r19, 30, 2, 31\n\t" + "rlwimi r24, r18, 30, 0, 1\n\t" + "rlwinm r25, r18, 30, 2, 31\n\t" + "rlwimi r25, r19, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 25, 7, 31\n\t" + "rlwimi r24, r18, 25, 0, 6\n\t" + "rlwinm r25, r18, 25, 7, 31\n\t" + "rlwimi r25, r19, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "xor r24, r20, r0\n\t" + "xor r25, r21, r6\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + /* Round 11 */ + "rlwinm r22, r7, 18, 14, 31\n\t" + "rlwimi r22, r8, 18, 0, 13\n\t" + "rlwinm r23, r8, 18, 14, 31\n\t" + "rlwimi r23, r7, 18, 0, 13\n\t" + "rlwinm r24, r7, 14, 18, 31\n\t" + "rlwimi r24, r8, 14, 0, 17\n\t" + "rlwinm r25, r8, 14, 18, 31\n\t" + "rlwimi r25, r7, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 23, 9, 31\n\t" + "rlwimi r24, r7, 23, 0, 8\n\t" + "rlwinm r25, r7, 23, 9, 31\n\t" + "rlwimi r25, r8, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "and r22, r22, r7\n\t" + "and r23, r23, r8\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r1)\n\t" + "lwz r23, 92(r1)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "lwz r22, 88(r30)\n\t" + "lwz r23, 92(r30)\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "addc r6, r6, r15\n\t" + "adde r0, r0, r14\n\t" + "rlwinm r22, r16, 4, 28, 31\n\t" + "rlwimi r22, r17, 4, 0, 27\n\t" + "rlwinm r23, r17, 4, 28, 31\n\t" + "rlwimi r23, r16, 4, 0, 27\n\t" + "rlwinm r24, r17, 30, 2, 31\n\t" + "rlwimi r24, r16, 30, 0, 1\n\t" + "rlwinm r25, r16, 30, 2, 31\n\t" + "rlwimi r25, r17, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 25, 7, 31\n\t" + "rlwimi r24, r16, 25, 0, 6\n\t" + "rlwinm r25, r16, 25, 7, 31\n\t" + "rlwimi r25, r17, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "xor r22, r16, r18\n\t" + "xor r23, r17, r19\n\t" + "xor r24, r18, r20\n\t" + "xor r25, r19, r21\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r18\n\t" + "xor r23, r23, r19\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + /* Round 12 */ + "rlwinm r22, r0, 18, 14, 31\n\t" + "rlwimi r22, r6, 18, 0, 13\n\t" + "rlwinm r23, r6, 18, 14, 31\n\t" + "rlwimi r23, r0, 18, 0, 13\n\t" + "rlwinm r24, r0, 14, 18, 31\n\t" + "rlwimi r24, r6, 14, 0, 17\n\t" + "rlwinm r25, r6, 14, 18, 31\n\t" + "rlwimi r25, r0, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r6, 23, 9, 31\n\t" + "rlwimi r24, r0, 23, 0, 8\n\t" + "rlwinm r25, r0, 23, 9, 31\n\t" + "rlwimi r25, r6, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "and r22, r22, r0\n\t" + "and r23, r23, r6\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r1)\n\t" + "lwz r23, 100(r1)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "lwz r22, 96(r30)\n\t" + "lwz r23, 100(r30)\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "addc r21, r21, r12\n\t" + "adde r20, r20, r11\n\t" + "rlwinm r22, r14, 4, 28, 31\n\t" + "rlwimi r22, r15, 4, 0, 27\n\t" + "rlwinm r23, r15, 4, 28, 31\n\t" + "rlwimi r23, r14, 4, 0, 27\n\t" + "rlwinm r24, r15, 30, 2, 31\n\t" + "rlwimi r24, r14, 30, 0, 1\n\t" + "rlwinm r25, r14, 30, 2, 31\n\t" + "rlwimi r25, r15, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r15, 25, 7, 31\n\t" + "rlwimi r24, r14, 25, 0, 6\n\t" + "rlwinm r25, r14, 25, 7, 31\n\t" + "rlwimi r25, r15, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "xor r22, r14, r16\n\t" + "xor r23, r15, r17\n\t" + "xor r24, r16, r18\n\t" + "xor r25, r17, r19\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r16\n\t" + "xor r23, r23, r17\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + /* Round 13 */ + "rlwinm r22, r20, 18, 14, 31\n\t" + "rlwimi r22, r21, 18, 0, 13\n\t" + "rlwinm r23, r21, 18, 14, 31\n\t" + "rlwimi r23, r20, 18, 0, 13\n\t" + "rlwinm r24, r20, 14, 18, 31\n\t" + "rlwimi r24, r21, 14, 0, 17\n\t" + "rlwinm r25, r21, 14, 18, 31\n\t" + "rlwimi r25, r20, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r21, 23, 9, 31\n\t" + "rlwimi r24, r20, 23, 0, 8\n\t" + "rlwinm r25, r20, 23, 9, 31\n\t" + "rlwimi r25, r21, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r0, r7\n\t" + "xor r23, r6, r8\n\t" + "and r22, r22, r20\n\t" + "and r23, r23, r21\n\t" + "xor r22, r22, r7\n\t" + "xor r23, r23, r8\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r1)\n\t" + "lwz r23, 108(r1)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "lwz r22, 104(r30)\n\t" + "lwz r23, 108(r30)\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "addc r19, r19, r10\n\t" + "adde r18, r18, r9\n\t" + "rlwinm r22, r11, 4, 28, 31\n\t" + "rlwimi r22, r12, 4, 0, 27\n\t" + "rlwinm r23, r12, 4, 28, 31\n\t" + "rlwimi r23, r11, 4, 0, 27\n\t" + "rlwinm r24, r12, 30, 2, 31\n\t" + "rlwimi r24, r11, 30, 0, 1\n\t" + "rlwinm r25, r11, 30, 2, 31\n\t" + "rlwimi r25, r12, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r12, 25, 7, 31\n\t" + "rlwimi r24, r11, 25, 0, 6\n\t" + "rlwinm r25, r11, 25, 7, 31\n\t" + "rlwimi r25, r12, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "xor r22, r11, r14\n\t" + "xor r23, r12, r15\n\t" + "xor r24, r14, r16\n\t" + "xor r25, r15, r17\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r14\n\t" + "xor r23, r23, r15\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + /* Round 14 */ + "rlwinm r22, r18, 18, 14, 31\n\t" + "rlwimi r22, r19, 18, 0, 13\n\t" + "rlwinm r23, r19, 18, 14, 31\n\t" + "rlwimi r23, r18, 18, 0, 13\n\t" + "rlwinm r24, r18, 14, 18, 31\n\t" + "rlwimi r24, r19, 14, 0, 17\n\t" + "rlwinm r25, r19, 14, 18, 31\n\t" + "rlwimi r25, r18, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r19, 23, 9, 31\n\t" + "rlwimi r24, r18, 23, 0, 8\n\t" + "rlwinm r25, r18, 23, 9, 31\n\t" + "rlwimi r25, r19, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r20, r0\n\t" + "xor r23, r21, r6\n\t" + "and r22, r22, r18\n\t" + "and r23, r23, r19\n\t" + "xor r22, r22, r0\n\t" + "xor r23, r23, r6\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r1)\n\t" + "lwz r23, 116(r1)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "lwz r22, 112(r30)\n\t" + "lwz r23, 116(r30)\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "addc r17, r17, r8\n\t" + "adde r16, r16, r7\n\t" + "rlwinm r22, r9, 4, 28, 31\n\t" + "rlwimi r22, r10, 4, 0, 27\n\t" + "rlwinm r23, r10, 4, 28, 31\n\t" + "rlwimi r23, r9, 4, 0, 27\n\t" + "rlwinm r24, r10, 30, 2, 31\n\t" + "rlwimi r24, r9, 30, 0, 1\n\t" + "rlwinm r25, r9, 30, 2, 31\n\t" + "rlwimi r25, r10, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r10, 25, 7, 31\n\t" + "rlwimi r24, r9, 25, 0, 6\n\t" + "rlwinm r25, r9, 25, 7, 31\n\t" + "rlwimi r25, r10, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "xor r22, r9, r11\n\t" + "xor r23, r10, r12\n\t" + "xor r24, r11, r14\n\t" + "xor r25, r12, r15\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r11\n\t" + "xor r23, r23, r12\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + /* Round 15 */ + "rlwinm r22, r16, 18, 14, 31\n\t" + "rlwimi r22, r17, 18, 0, 13\n\t" + "rlwinm r23, r17, 18, 14, 31\n\t" + "rlwimi r23, r16, 18, 0, 13\n\t" + "rlwinm r24, r16, 14, 18, 31\n\t" + "rlwimi r24, r17, 14, 0, 17\n\t" + "rlwinm r25, r17, 14, 18, 31\n\t" + "rlwimi r25, r16, 14, 0, 17\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r17, 23, 9, 31\n\t" + "rlwimi r24, r16, 23, 0, 8\n\t" + "rlwinm r25, r16, 23, 9, 31\n\t" + "rlwimi r25, r17, 23, 0, 8\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r18, r20\n\t" + "xor r23, r19, r21\n\t" + "and r22, r22, r16\n\t" + "and r23, r23, r17\n\t" + "xor r22, r22, r20\n\t" + "xor r23, r23, r21\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r1)\n\t" + "lwz r23, 124(r1)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "lwz r22, 120(r30)\n\t" + "lwz r23, 124(r30)\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "addc r15, r15, r6\n\t" + "adde r14, r14, r0\n\t" + "rlwinm r22, r7, 4, 28, 31\n\t" + "rlwimi r22, r8, 4, 0, 27\n\t" + "rlwinm r23, r8, 4, 28, 31\n\t" + "rlwimi r23, r7, 4, 0, 27\n\t" + "rlwinm r24, r8, 30, 2, 31\n\t" + "rlwimi r24, r7, 30, 0, 1\n\t" + "rlwinm r25, r7, 30, 2, 31\n\t" + "rlwimi r25, r8, 30, 0, 1\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "rlwinm r24, r8, 25, 7, 31\n\t" + "rlwimi r24, r7, 25, 0, 6\n\t" + "rlwinm r25, r7, 25, 7, 31\n\t" + "rlwimi r25, r8, 25, 0, 6\n\t" + "xor r22, r22, r24\n\t" + "xor r23, r23, r25\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "xor r22, r7, r9\n\t" + "xor r23, r8, r10\n\t" + "xor r24, r9, r11\n\t" + "xor r25, r10, r12\n\t" + "and r22, r22, r24\n\t" + "and r23, r23, r25\n\t" + "xor r22, r22, r9\n\t" + "xor r23, r23, r10\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "subi r30, r30, 0x200\n\t" + /* Add in digest from start */ + "lwz r22, 0(%[sha512])\n\t" + "lwz r23, 4(%[sha512])\n\t" + "addc r6, r6, r23\n\t" + "adde r0, r0, r22\n\t" + "stw r0, 0(%[sha512])\n\t" + "stw r6, 4(%[sha512])\n\t" + "lwz r22, 8(%[sha512])\n\t" + "lwz r23, 12(%[sha512])\n\t" + "addc r8, r8, r23\n\t" + "adde r7, r7, r22\n\t" + "stw r7, 8(%[sha512])\n\t" + "stw r8, 12(%[sha512])\n\t" + "lwz r22, 16(%[sha512])\n\t" + "lwz r23, 20(%[sha512])\n\t" + "addc r10, r10, r23\n\t" + "adde r9, r9, r22\n\t" + "stw r9, 16(%[sha512])\n\t" + "stw r10, 20(%[sha512])\n\t" + "lwz r22, 24(%[sha512])\n\t" + "lwz r23, 28(%[sha512])\n\t" + "addc r12, r12, r23\n\t" + "adde r11, r11, r22\n\t" + "stw r11, 24(%[sha512])\n\t" + "stw r12, 28(%[sha512])\n\t" + "lwz r22, 32(%[sha512])\n\t" + "lwz r23, 36(%[sha512])\n\t" + "addc r15, r15, r23\n\t" + "adde r14, r14, r22\n\t" + "stw r14, 32(%[sha512])\n\t" + "stw r15, 36(%[sha512])\n\t" + "lwz r22, 40(%[sha512])\n\t" + "lwz r23, 44(%[sha512])\n\t" + "addc r17, r17, r23\n\t" + "adde r16, r16, r22\n\t" + "stw r16, 40(%[sha512])\n\t" + "stw r17, 44(%[sha512])\n\t" + "lwz r22, 48(%[sha512])\n\t" + "lwz r23, 52(%[sha512])\n\t" + "addc r19, r19, r23\n\t" + "adde r18, r18, r22\n\t" + "stw r18, 48(%[sha512])\n\t" + "stw r19, 52(%[sha512])\n\t" + "lwz r22, 56(%[sha512])\n\t" + "lwz r23, 60(%[sha512])\n\t" + "addc r21, r21, r23\n\t" + "adde r20, r20, r22\n\t" + "stw r20, 56(%[sha512])\n\t" + "stw r21, 60(%[sha512])\n\t" + "addi %[data], %[data], 0x80\n\t" + "bdnz L_SHA512_transform_len_begin_%=\n\t" + "addi r1, r1, 0x80\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len), + [L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c) + : +#else + : + : [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len), + [L_SHA512_transform_len_k] "r" (L_SHA512_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" + ); +} + +#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */ + +#endif /* WOLFSSL_PPC32_ASM_INLINE */ +#endif /* WOLFSSL_PPC32_ASM */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-aes-asm.S b/wolfcrypt/src/port/ppc64/ppc64-aes-asm.S index 38166beb8a5..9fe1cf44657 100644 --- a/wolfcrypt/src/port/ppc64/ppc64-aes-asm.S +++ b/wolfcrypt/src/port/ppc64/ppc64-aes-asm.S @@ -32,548 +32,164 @@ #ifdef HAVE_AES_DECRYPT #ifndef __APPLE__ .text - .section .rodata - .type L_AES_PPC64_td, @object + .type L_AES_PPC64_td, %object .size L_AES_PPC64_td, 1024 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_AES_PPC64_td: - .long 0x5051f4a7 - .long 0x537e4165 - .long 0xc31a17a4 - .long 0x963a275e - .long 0xcb3bab6b - .long 0xf11f9d45 - .long 0xabacfa58 - .long 0x934be303 - .long 0x552030fa - .long 0xf6ad766d - .long 0x9188cc76 - .long 0x25f5024c - .long 0xfc4fe5d7 - .long 0xd7c52acb - .long 0x80263544 - .long 0x8fb562a3 - .long 0x49deb15a - .long 0x6725ba1b - .long 0x9845ea0e - .long 0xe15dfec0 - .long 0x2c32f75 - .long 0x12814cf0 - .long 0xa38d4697 - .long 0xc66bd3f9 - .long 0xe7038f5f - .long 0x9515929c - .long 0xebbf6d7a - .long 0xda955259 - .long 0x2dd4be83 - .long 0xd3587421 - .long 0x2949e069 - .long 0x448ec9c8 - .long 0x6a75c289 - .long 0x78f48e79 - .long 0x6b99583e - .long 0xdd27b971 - .long 0xb6bee14f - .long 0x17f088ad - .long 0x66c920ac - .long 0xb47dce3a - .long 0x1863df4a - .long 0x82e51a31 - .long 0x60975133 - .long 0x4562537f - .long 0xe0b16477 - .long 0x84bb6bae - .long 0x1cfe81a0 - .long 0x94f9082b - .long 0x58704868 - .long 0x198f45fd - .long 0x8794de6c - .long 0xb7527bf8 - .long 0x23ab73d3 - .long 0xe2724b02 - .long 0x57e31f8f - .long 0x2a6655ab - .long 0x7b2eb28 - .long 0x32fb5c2 - .long 0x9a86c57b - .long 0xa5d33708 - .long 0xf2302887 - .long 0xb223bfa5 - .long 0xba02036a - .long 0x5ced1682 - .long 0x2b8acf1c - .long 0x92a779b4 - .long 0xf0f307f2 - .long 0xa14e69e2 - .long 0xcd65daf4 - .long 0xd50605be - .long 0x1fd13462 - .long 0x8ac4a6fe - .long 0x9d342e53 - .long 0xa0a2f355 - .long 0x32058ae1 - .long 0x75a4f6eb - .long 0x390b83ec - .long 0xaa4060ef - .long 0x65e719f - .long 0x51bd6e10 - .long 0xf93e218a - .long 0x3d96dd06 - .long 0xaedd3e05 - .long 0x464de6bd - .long 0xb591548d - .long 0x571c45d - .long 0x6f0406d4 - .long 0xff605015 - .long 0x241998fb - .long 0x97d6bde9 - .long 0xcc894043 - .long 0x7767d99e - .long 0xbdb0e842 - .long 0x8807898b - .long 0x38e7195b - .long 0xdb79c8ee - .long 0x47a17c0a - .long 0xe97c420f - .long 0xc9f8841e - .long 0x0 - .long 0x83098086 - .long 0x48322bed - .long 0xac1e1170 - .long 0x4e6c5a72 - .long 0xfbfd0eff - .long 0x560f8538 - .long 0x1e3daed5 - .long 0x27362d39 - .long 0x640a0fd9 - .long 0x21685ca6 - .long 0xd19b5b54 - .long 0x3a24362e - .long 0xb10c0a67 - .long 0xf9357e7 - .long 0xd2b4ee96 - .long 0x9e1b9b91 - .long 0x4f80c0c5 - .long 0xa261dc20 - .long 0x695a774b - .long 0x161c121a - .long 0xae293ba - .long 0xe5c0a02a - .long 0x433c22e0 - .long 0x1d121b17 - .long 0xb0e090d - .long 0xadf28bc7 - .long 0xb92db6a8 - .long 0xc8141ea9 - .long 0x8557f119 - .long 0x4caf7507 - .long 0xbbee99dd - .long 0xfda37f60 - .long 0x9ff70126 - .long 0xbc5c72f5 - .long 0xc544663b - .long 0x345bfb7e - .long 0x768b4329 - .long 0xdccb23c6 - .long 0x68b6edfc - .long 0x63b8e4f1 - .long 0xcad731dc - .long 0x10426385 - .long 0x40139722 - .long 0x2084c611 - .long 0x7d854a24 - .long 0xf8d2bb3d - .long 0x11aef932 - .long 0x6dc729a1 - .long 0x4b1d9e2f - .long 0xf3dcb230 - .long 0xec0d8652 - .long 0xd077c1e3 - .long 0x6c2bb316 - .long 0x99a970b9 - .long 0xfa119448 - .long 0x2247e964 - .long 0xc4a8fc8c - .long 0x1aa0f03f - .long 0xd8567d2c - .long 0xef223390 - .long 0xc787494e - .long 0xc1d938d1 - .long 0xfe8ccaa2 - .long 0x3698d40b - .long 0xcfa6f581 - .long 0x28a57ade - .long 0x26dab78e - .long 0xa43fadbf - .long 0xe42c3a9d - .long 0xd507892 - .long 0x9b6a5fcc - .long 0x62547e46 - .long 0xc2f68d13 - .long 0xe890d8b8 - .long 0x5e2e39f7 - .long 0xf582c3af - .long 0xbe9f5d80 - .long 0x7c69d093 - .long 0xa96fd52d - .long 0xb3cf2512 - .long 0x3bc8ac99 - .long 0xa710187d - .long 0x6ee89c63 - .long 0x7bdb3bbb - .long 0x9cd2678 - .long 0xf46e5918 - .long 0x1ec9ab7 - .long 0xa8834f9a - .long 0x65e6956e - .long 0x7eaaffe6 - .long 0x821bccf - .long 0xe6ef15e8 - .long 0xd9bae79b - .long 0xce4a6f36 - .long 0xd4ea9f09 - .long 0xd629b07c - .long 0xaf31a4b2 - .long 0x312a3f23 - .long 0x30c6a594 - .long 0xc035a266 - .long 0x37744ebc - .long 0xa6fc82ca - .long 0xb0e090d0 - .long 0x1533a7d8 - .long 0x4af10498 - .long 0xf741ecda - .long 0xe7fcd50 - .long 0x2f1791f6 - .long 0x8d764dd6 - .long 0x4d43efb0 - .long 0x54ccaa4d - .long 0xdfe49604 - .long 0xe39ed1b5 - .long 0x1b4c6a88 - .long 0xb8c12c1f - .long 0x7f466551 - .long 0x49d5eea - .long 0x5d018c35 - .long 0x73fa8774 - .long 0x2efb0b41 - .long 0x5ab3671d - .long 0x5292dbd2 - .long 0x33e91056 - .long 0x136dd647 - .long 0x8c9ad761 - .long 0x7a37a10c - .long 0x8e59f814 - .long 0x89eb133c - .long 0xeecea927 - .long 0x35b761c9 - .long 0xede11ce5 - .long 0x3c7a47b1 - .long 0x599cd2df - .long 0x3f55f273 - .long 0x791814ce - .long 0xbf73c737 - .long 0xea53f7cd - .long 0x5b5ffdaa - .long 0x14df3d6f - .long 0x867844db - .long 0x81caaff3 - .long 0x3eb968c4 - .long 0x2c382434 - .long 0x5fc2a340 - .long 0x72161dc3 - .long 0xcbce225 - .long 0x8b283c49 - .long 0x41ff0d95 - .long 0x7139a801 - .long 0xde080cb3 - .long 0x9cd8b4e4 - .long 0x906456c1 - .long 0x617bcb84 - .long 0x70d532b6 - .long 0x74486c5c - .long 0x42d0b857 + .long 0x5051f4a7,0x537e4165,0xc31a17a4,0x963a275e + .long 0xcb3bab6b,0xf11f9d45,0xabacfa58,0x934be303 + .long 0x552030fa,0xf6ad766d,0x9188cc76,0x25f5024c + .long 0xfc4fe5d7,0xd7c52acb,0x80263544,0x8fb562a3 + .long 0x49deb15a,0x6725ba1b,0x9845ea0e,0xe15dfec0 + .long 0x02c32f75,0x12814cf0,0xa38d4697,0xc66bd3f9 + .long 0xe7038f5f,0x9515929c,0xebbf6d7a,0xda955259 + .long 0x2dd4be83,0xd3587421,0x2949e069,0x448ec9c8 + .long 0x6a75c289,0x78f48e79,0x6b99583e,0xdd27b971 + .long 0xb6bee14f,0x17f088ad,0x66c920ac,0xb47dce3a + .long 0x1863df4a,0x82e51a31,0x60975133,0x4562537f + .long 0xe0b16477,0x84bb6bae,0x1cfe81a0,0x94f9082b + .long 0x58704868,0x198f45fd,0x8794de6c,0xb7527bf8 + .long 0x23ab73d3,0xe2724b02,0x57e31f8f,0x2a6655ab + .long 0x07b2eb28,0x032fb5c2,0x9a86c57b,0xa5d33708 + .long 0xf2302887,0xb223bfa5,0xba02036a,0x5ced1682 + .long 0x2b8acf1c,0x92a779b4,0xf0f307f2,0xa14e69e2 + .long 0xcd65daf4,0xd50605be,0x1fd13462,0x8ac4a6fe + .long 0x9d342e53,0xa0a2f355,0x32058ae1,0x75a4f6eb + .long 0x390b83ec,0xaa4060ef,0x065e719f,0x51bd6e10 + .long 0xf93e218a,0x3d96dd06,0xaedd3e05,0x464de6bd + .long 0xb591548d,0x0571c45d,0x6f0406d4,0xff605015 + .long 0x241998fb,0x97d6bde9,0xcc894043,0x7767d99e + .long 0xbdb0e842,0x8807898b,0x38e7195b,0xdb79c8ee + .long 0x47a17c0a,0xe97c420f,0xc9f8841e,0x00000000 + .long 0x83098086,0x48322bed,0xac1e1170,0x4e6c5a72 + .long 0xfbfd0eff,0x560f8538,0x1e3daed5,0x27362d39 + .long 0x640a0fd9,0x21685ca6,0xd19b5b54,0x3a24362e + .long 0xb10c0a67,0x0f9357e7,0xd2b4ee96,0x9e1b9b91 + .long 0x4f80c0c5,0xa261dc20,0x695a774b,0x161c121a + .long 0x0ae293ba,0xe5c0a02a,0x433c22e0,0x1d121b17 + .long 0x0b0e090d,0xadf28bc7,0xb92db6a8,0xc8141ea9 + .long 0x8557f119,0x4caf7507,0xbbee99dd,0xfda37f60 + .long 0x9ff70126,0xbc5c72f5,0xc544663b,0x345bfb7e + .long 0x768b4329,0xdccb23c6,0x68b6edfc,0x63b8e4f1 + .long 0xcad731dc,0x10426385,0x40139722,0x2084c611 + .long 0x7d854a24,0xf8d2bb3d,0x11aef932,0x6dc729a1 + .long 0x4b1d9e2f,0xf3dcb230,0xec0d8652,0xd077c1e3 + .long 0x6c2bb316,0x99a970b9,0xfa119448,0x2247e964 + .long 0xc4a8fc8c,0x1aa0f03f,0xd8567d2c,0xef223390 + .long 0xc787494e,0xc1d938d1,0xfe8ccaa2,0x3698d40b + .long 0xcfa6f581,0x28a57ade,0x26dab78e,0xa43fadbf + .long 0xe42c3a9d,0x0d507892,0x9b6a5fcc,0x62547e46 + .long 0xc2f68d13,0xe890d8b8,0x5e2e39f7,0xf582c3af + .long 0xbe9f5d80,0x7c69d093,0xa96fd52d,0xb3cf2512 + .long 0x3bc8ac99,0xa710187d,0x6ee89c63,0x7bdb3bbb + .long 0x09cd2678,0xf46e5918,0x01ec9ab7,0xa8834f9a + .long 0x65e6956e,0x7eaaffe6,0x0821bccf,0xe6ef15e8 + .long 0xd9bae79b,0xce4a6f36,0xd4ea9f09,0xd629b07c + .long 0xaf31a4b2,0x312a3f23,0x30c6a594,0xc035a266 + .long 0x37744ebc,0xa6fc82ca,0xb0e090d0,0x1533a7d8 + .long 0x4af10498,0xf741ecda,0x0e7fcd50,0x2f1791f6 + .long 0x8d764dd6,0x4d43efb0,0x54ccaa4d,0xdfe49604 + .long 0xe39ed1b5,0x1b4c6a88,0xb8c12c1f,0x7f466551 + .long 0x049d5eea,0x5d018c35,0x73fa8774,0x2efb0b41 + .long 0x5ab3671d,0x5292dbd2,0x33e91056,0x136dd647 + .long 0x8c9ad761,0x7a37a10c,0x8e59f814,0x89eb133c + .long 0xeecea927,0x35b761c9,0xede11ce5,0x3c7a47b1 + .long 0x599cd2df,0x3f55f273,0x791814ce,0xbf73c737 + .long 0xea53f7cd,0x5b5ffdaa,0x14df3d6f,0x867844db + .long 0x81caaff3,0x3eb968c4,0x2c382434,0x5fc2a340 + .long 0x72161dc3,0x0cbce225,0x8b283c49,0x41ff0d95 + .long 0x7139a801,0xde080cb3,0x9cd8b4e4,0x906456c1 + .long 0x617bcb84,0x70d532b6,0x74486c5c,0x42d0b857 #endif /* HAVE_AES_DECRYPT */ #if defined(HAVE_AES_DECRYPT) || defined(HAVE_AES_CBC) || \ defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \ defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) #ifndef __APPLE__ .text - .section .rodata - .type L_AES_PPC64_te, @object + .type L_AES_PPC64_te, %object .size L_AES_PPC64_te, 1024 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_AES_PPC64_te: - .long 0xa5c66363 - .long 0x84f87c7c - .long 0x99ee7777 - .long 0x8df67b7b - .long 0xdfff2f2 - .long 0xbdd66b6b - .long 0xb1de6f6f - .long 0x5491c5c5 - .long 0x50603030 - .long 0x3020101 - .long 0xa9ce6767 - .long 0x7d562b2b - .long 0x19e7fefe - .long 0x62b5d7d7 - .long 0xe64dabab - .long 0x9aec7676 - .long 0x458fcaca - .long 0x9d1f8282 - .long 0x4089c9c9 - .long 0x87fa7d7d - .long 0x15effafa - .long 0xebb25959 - .long 0xc98e4747 - .long 0xbfbf0f0 - .long 0xec41adad - .long 0x67b3d4d4 - .long 0xfd5fa2a2 - .long 0xea45afaf - .long 0xbf239c9c - .long 0xf753a4a4 - .long 0x96e47272 - .long 0x5b9bc0c0 - .long 0xc275b7b7 - .long 0x1ce1fdfd - .long 0xae3d9393 - .long 0x6a4c2626 - .long 0x5a6c3636 - .long 0x417e3f3f - .long 0x2f5f7f7 - .long 0x4f83cccc - .long 0x5c683434 - .long 0xf451a5a5 - .long 0x34d1e5e5 - .long 0x8f9f1f1 - .long 0x93e27171 - .long 0x73abd8d8 - .long 0x53623131 - .long 0x3f2a1515 - .long 0xc080404 - .long 0x5295c7c7 - .long 0x65462323 - .long 0x5e9dc3c3 - .long 0x28301818 - .long 0xa1379696 - .long 0xf0a0505 - .long 0xb52f9a9a - .long 0x90e0707 - .long 0x36241212 - .long 0x9b1b8080 - .long 0x3ddfe2e2 - .long 0x26cdebeb - .long 0x694e2727 - .long 0xcd7fb2b2 - .long 0x9fea7575 - .long 0x1b120909 - .long 0x9e1d8383 - .long 0x74582c2c - .long 0x2e341a1a - .long 0x2d361b1b - .long 0xb2dc6e6e - .long 0xeeb45a5a - .long 0xfb5ba0a0 - .long 0xf6a45252 - .long 0x4d763b3b - .long 0x61b7d6d6 - .long 0xce7db3b3 - .long 0x7b522929 - .long 0x3edde3e3 - .long 0x715e2f2f - .long 0x97138484 - .long 0xf5a65353 - .long 0x68b9d1d1 - .long 0x0 - .long 0x2cc1eded - .long 0x60402020 - .long 0x1fe3fcfc - .long 0xc879b1b1 - .long 0xedb65b5b - .long 0xbed46a6a - .long 0x468dcbcb - .long 0xd967bebe - .long 0x4b723939 - .long 0xde944a4a - .long 0xd4984c4c - .long 0xe8b05858 - .long 0x4a85cfcf - .long 0x6bbbd0d0 - .long 0x2ac5efef - .long 0xe54faaaa - .long 0x16edfbfb - .long 0xc5864343 - .long 0xd79a4d4d - .long 0x55663333 - .long 0x94118585 - .long 0xcf8a4545 - .long 0x10e9f9f9 - .long 0x6040202 - .long 0x81fe7f7f - .long 0xf0a05050 - .long 0x44783c3c - .long 0xba259f9f - .long 0xe34ba8a8 - .long 0xf3a25151 - .long 0xfe5da3a3 - .long 0xc0804040 - .long 0x8a058f8f - .long 0xad3f9292 - .long 0xbc219d9d - .long 0x48703838 - .long 0x4f1f5f5 - .long 0xdf63bcbc - .long 0xc177b6b6 - .long 0x75afdada - .long 0x63422121 - .long 0x30201010 - .long 0x1ae5ffff - .long 0xefdf3f3 - .long 0x6dbfd2d2 - .long 0x4c81cdcd - .long 0x14180c0c - .long 0x35261313 - .long 0x2fc3ecec - .long 0xe1be5f5f - .long 0xa2359797 - .long 0xcc884444 - .long 0x392e1717 - .long 0x5793c4c4 - .long 0xf255a7a7 - .long 0x82fc7e7e - .long 0x477a3d3d - .long 0xacc86464 - .long 0xe7ba5d5d - .long 0x2b321919 - .long 0x95e67373 - .long 0xa0c06060 - .long 0x98198181 - .long 0xd19e4f4f - .long 0x7fa3dcdc - .long 0x66442222 - .long 0x7e542a2a - .long 0xab3b9090 - .long 0x830b8888 - .long 0xca8c4646 - .long 0x29c7eeee - .long 0xd36bb8b8 - .long 0x3c281414 - .long 0x79a7dede - .long 0xe2bc5e5e - .long 0x1d160b0b - .long 0x76addbdb - .long 0x3bdbe0e0 - .long 0x56643232 - .long 0x4e743a3a - .long 0x1e140a0a - .long 0xdb924949 - .long 0xa0c0606 - .long 0x6c482424 - .long 0xe4b85c5c - .long 0x5d9fc2c2 - .long 0x6ebdd3d3 - .long 0xef43acac - .long 0xa6c46262 - .long 0xa8399191 - .long 0xa4319595 - .long 0x37d3e4e4 - .long 0x8bf27979 - .long 0x32d5e7e7 - .long 0x438bc8c8 - .long 0x596e3737 - .long 0xb7da6d6d - .long 0x8c018d8d - .long 0x64b1d5d5 - .long 0xd29c4e4e - .long 0xe049a9a9 - .long 0xb4d86c6c - .long 0xfaac5656 - .long 0x7f3f4f4 - .long 0x25cfeaea - .long 0xafca6565 - .long 0x8ef47a7a - .long 0xe947aeae - .long 0x18100808 - .long 0xd56fbaba - .long 0x88f07878 - .long 0x6f4a2525 - .long 0x725c2e2e - .long 0x24381c1c - .long 0xf157a6a6 - .long 0xc773b4b4 - .long 0x5197c6c6 - .long 0x23cbe8e8 - .long 0x7ca1dddd - .long 0x9ce87474 - .long 0x213e1f1f - .long 0xdd964b4b - .long 0xdc61bdbd - .long 0x860d8b8b - .long 0x850f8a8a - .long 0x90e07070 - .long 0x427c3e3e - .long 0xc471b5b5 - .long 0xaacc6666 - .long 0xd8904848 - .long 0x5060303 - .long 0x1f7f6f6 - .long 0x121c0e0e - .long 0xa3c26161 - .long 0x5f6a3535 - .long 0xf9ae5757 - .long 0xd069b9b9 - .long 0x91178686 - .long 0x5899c1c1 - .long 0x273a1d1d - .long 0xb9279e9e - .long 0x38d9e1e1 - .long 0x13ebf8f8 - .long 0xb32b9898 - .long 0x33221111 - .long 0xbbd26969 - .long 0x70a9d9d9 - .long 0x89078e8e - .long 0xa7339494 - .long 0xb62d9b9b - .long 0x223c1e1e - .long 0x92158787 - .long 0x20c9e9e9 - .long 0x4987cece - .long 0xffaa5555 - .long 0x78502828 - .long 0x7aa5dfdf - .long 0x8f038c8c - .long 0xf859a1a1 - .long 0x80098989 - .long 0x171a0d0d - .long 0xda65bfbf - .long 0x31d7e6e6 - .long 0xc6844242 - .long 0xb8d06868 - .long 0xc3824141 - .long 0xb0299999 - .long 0x775a2d2d - .long 0x111e0f0f - .long 0xcb7bb0b0 - .long 0xfca85454 - .long 0xd66dbbbb - .long 0x3a2c1616 + .long 0xa5c66363,0x84f87c7c,0x99ee7777,0x8df67b7b + .long 0x0dfff2f2,0xbdd66b6b,0xb1de6f6f,0x5491c5c5 + .long 0x50603030,0x03020101,0xa9ce6767,0x7d562b2b + .long 0x19e7fefe,0x62b5d7d7,0xe64dabab,0x9aec7676 + .long 0x458fcaca,0x9d1f8282,0x4089c9c9,0x87fa7d7d + .long 0x15effafa,0xebb25959,0xc98e4747,0x0bfbf0f0 + .long 0xec41adad,0x67b3d4d4,0xfd5fa2a2,0xea45afaf + .long 0xbf239c9c,0xf753a4a4,0x96e47272,0x5b9bc0c0 + .long 0xc275b7b7,0x1ce1fdfd,0xae3d9393,0x6a4c2626 + .long 0x5a6c3636,0x417e3f3f,0x02f5f7f7,0x4f83cccc + .long 0x5c683434,0xf451a5a5,0x34d1e5e5,0x08f9f1f1 + .long 0x93e27171,0x73abd8d8,0x53623131,0x3f2a1515 + .long 0x0c080404,0x5295c7c7,0x65462323,0x5e9dc3c3 + .long 0x28301818,0xa1379696,0x0f0a0505,0xb52f9a9a + .long 0x090e0707,0x36241212,0x9b1b8080,0x3ddfe2e2 + .long 0x26cdebeb,0x694e2727,0xcd7fb2b2,0x9fea7575 + .long 0x1b120909,0x9e1d8383,0x74582c2c,0x2e341a1a + .long 0x2d361b1b,0xb2dc6e6e,0xeeb45a5a,0xfb5ba0a0 + .long 0xf6a45252,0x4d763b3b,0x61b7d6d6,0xce7db3b3 + .long 0x7b522929,0x3edde3e3,0x715e2f2f,0x97138484 + .long 0xf5a65353,0x68b9d1d1,0x00000000,0x2cc1eded + .long 0x60402020,0x1fe3fcfc,0xc879b1b1,0xedb65b5b + .long 0xbed46a6a,0x468dcbcb,0xd967bebe,0x4b723939 + .long 0xde944a4a,0xd4984c4c,0xe8b05858,0x4a85cfcf + .long 0x6bbbd0d0,0x2ac5efef,0xe54faaaa,0x16edfbfb + .long 0xc5864343,0xd79a4d4d,0x55663333,0x94118585 + .long 0xcf8a4545,0x10e9f9f9,0x06040202,0x81fe7f7f + .long 0xf0a05050,0x44783c3c,0xba259f9f,0xe34ba8a8 + .long 0xf3a25151,0xfe5da3a3,0xc0804040,0x8a058f8f + .long 0xad3f9292,0xbc219d9d,0x48703838,0x04f1f5f5 + .long 0xdf63bcbc,0xc177b6b6,0x75afdada,0x63422121 + .long 0x30201010,0x1ae5ffff,0x0efdf3f3,0x6dbfd2d2 + .long 0x4c81cdcd,0x14180c0c,0x35261313,0x2fc3ecec + .long 0xe1be5f5f,0xa2359797,0xcc884444,0x392e1717 + .long 0x5793c4c4,0xf255a7a7,0x82fc7e7e,0x477a3d3d + .long 0xacc86464,0xe7ba5d5d,0x2b321919,0x95e67373 + .long 0xa0c06060,0x98198181,0xd19e4f4f,0x7fa3dcdc + .long 0x66442222,0x7e542a2a,0xab3b9090,0x830b8888 + .long 0xca8c4646,0x29c7eeee,0xd36bb8b8,0x3c281414 + .long 0x79a7dede,0xe2bc5e5e,0x1d160b0b,0x76addbdb + .long 0x3bdbe0e0,0x56643232,0x4e743a3a,0x1e140a0a + .long 0xdb924949,0x0a0c0606,0x6c482424,0xe4b85c5c + .long 0x5d9fc2c2,0x6ebdd3d3,0xef43acac,0xa6c46262 + .long 0xa8399191,0xa4319595,0x37d3e4e4,0x8bf27979 + .long 0x32d5e7e7,0x438bc8c8,0x596e3737,0xb7da6d6d + .long 0x8c018d8d,0x64b1d5d5,0xd29c4e4e,0xe049a9a9 + .long 0xb4d86c6c,0xfaac5656,0x07f3f4f4,0x25cfeaea + .long 0xafca6565,0x8ef47a7a,0xe947aeae,0x18100808 + .long 0xd56fbaba,0x88f07878,0x6f4a2525,0x725c2e2e + .long 0x24381c1c,0xf157a6a6,0xc773b4b4,0x5197c6c6 + .long 0x23cbe8e8,0x7ca1dddd,0x9ce87474,0x213e1f1f + .long 0xdd964b4b,0xdc61bdbd,0x860d8b8b,0x850f8a8a + .long 0x90e07070,0x427c3e3e,0xc471b5b5,0xaacc6666 + .long 0xd8904848,0x05060303,0x01f7f6f6,0x121c0e0e + .long 0xa3c26161,0x5f6a3535,0xf9ae5757,0xd069b9b9 + .long 0x91178686,0x5899c1c1,0x273a1d1d,0xb9279e9e + .long 0x38d9e1e1,0x13ebf8f8,0xb32b9898,0x33221111 + .long 0xbbd26969,0x70a9d9d9,0x89078e8e,0xa7339494 + .long 0xb62d9b9b,0x223c1e1e,0x92158787,0x20c9e9e9 + .long 0x4987cece,0xffaa5555,0x78502828,0x7aa5dfdf + .long 0x8f038c8c,0xf859a1a1,0x80098989,0x171a0d0d + .long 0xda65bfbf,0x31d7e6e6,0xc6844242,0xb8d06868 + .long 0xc3824141,0xb0299999,0x775a2d2d,0x111e0f0f + .long 0xcb7bb0b0,0xfca85454,0xd66dbbbb,0x3a2c1616 #endif /* HAVE_AES_DECRYPT || HAVE_AES_CBC || HAVE_AESCCM || HAVE_AESGCM || * WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */ #ifdef HAVE_AES_DECRYPT @@ -754,28 +370,21 @@ L_AES_invert_key_mix_loop: #endif /* HAVE_AES_DECRYPT */ #ifndef __APPLE__ .text - .section .rodata - .type L_AES_PPC64_rcon, @object + .type L_AES_PPC64_rcon, %object .size L_AES_PPC64_rcon, 40 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_AES_PPC64_rcon: - .long 0x1000000 - .long 0x2000000 - .long 0x4000000 - .long 0x8000000 - .long 0x10000000 - .long 0x20000000 - .long 0x40000000 - .long 0x80000000 - .long 0x1b000000 - .long 0x36000000 + .long 0x01000000,0x02000000,0x04000000,0x08000000 + .long 0x10000000,0x20000000,0x40000000,0x80000000 + .long 0x1b000000,0x36000000 #ifndef __APPLE__ .text .globl AES_set_encrypt_key @@ -1060,1042 +669,274 @@ L_AES_set_encrypt_key_end: #endif /* __APPLE__ */ #ifndef __APPLE__ .text - .section .rodata - .type L_AES_PPC64_te4_0, @object + .type L_AES_PPC64_te4_0, %object .size L_AES_PPC64_te4_0, 4096 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_AES_PPC64_te4_0: - .long 0xc66363a5 - .long 0xf87c7c84 - .long 0xee777799 - .long 0xf67b7b8d - .long 0xfff2f20d - .long 0xd66b6bbd - .long 0xde6f6fb1 - .long 0x91c5c554 - .long 0x60303050 - .long 0x2010103 - .long 0xce6767a9 - .long 0x562b2b7d - .long 0xe7fefe19 - .long 0xb5d7d762 - .long 0x4dababe6 - .long 0xec76769a - .long 0x8fcaca45 - .long 0x1f82829d - .long 0x89c9c940 - .long 0xfa7d7d87 - .long 0xeffafa15 - .long 0xb25959eb - .long 0x8e4747c9 - .long 0xfbf0f00b - .long 0x41adadec - .long 0xb3d4d467 - .long 0x5fa2a2fd - .long 0x45afafea - .long 0x239c9cbf - .long 0x53a4a4f7 - .long 0xe4727296 - .long 0x9bc0c05b - .long 0x75b7b7c2 - .long 0xe1fdfd1c - .long 0x3d9393ae - .long 0x4c26266a - .long 0x6c36365a - .long 0x7e3f3f41 - .long 0xf5f7f702 - .long 0x83cccc4f - .long 0x6834345c - .long 0x51a5a5f4 - .long 0xd1e5e534 - .long 0xf9f1f108 - .long 0xe2717193 - .long 0xabd8d873 - .long 0x62313153 - .long 0x2a15153f - .long 0x804040c - .long 0x95c7c752 - .long 0x46232365 - .long 0x9dc3c35e - .long 0x30181828 - .long 0x379696a1 - .long 0xa05050f - .long 0x2f9a9ab5 - .long 0xe070709 - .long 0x24121236 - .long 0x1b80809b - .long 0xdfe2e23d - .long 0xcdebeb26 - .long 0x4e272769 - .long 0x7fb2b2cd - .long 0xea75759f - .long 0x1209091b - .long 0x1d83839e - .long 0x582c2c74 - .long 0x341a1a2e - .long 0x361b1b2d - .long 0xdc6e6eb2 - .long 0xb45a5aee - .long 0x5ba0a0fb - .long 0xa45252f6 - .long 0x763b3b4d - .long 0xb7d6d661 - .long 0x7db3b3ce - .long 0x5229297b - .long 0xdde3e33e - .long 0x5e2f2f71 - .long 0x13848497 - .long 0xa65353f5 - .long 0xb9d1d168 - .long 0x0 - .long 0xc1eded2c - .long 0x40202060 - .long 0xe3fcfc1f - .long 0x79b1b1c8 - .long 0xb65b5bed - .long 0xd46a6abe - .long 0x8dcbcb46 - .long 0x67bebed9 - .long 0x7239394b - .long 0x944a4ade - .long 0x984c4cd4 - .long 0xb05858e8 - .long 0x85cfcf4a - .long 0xbbd0d06b - .long 0xc5efef2a - .long 0x4faaaae5 - .long 0xedfbfb16 - .long 0x864343c5 - .long 0x9a4d4dd7 - .long 0x66333355 - .long 0x11858594 - .long 0x8a4545cf - .long 0xe9f9f910 - .long 0x4020206 - .long 0xfe7f7f81 - .long 0xa05050f0 - .long 0x783c3c44 - .long 0x259f9fba - .long 0x4ba8a8e3 - .long 0xa25151f3 - .long 0x5da3a3fe - .long 0x804040c0 - .long 0x58f8f8a - .long 0x3f9292ad - .long 0x219d9dbc - .long 0x70383848 - .long 0xf1f5f504 - .long 0x63bcbcdf - .long 0x77b6b6c1 - .long 0xafdada75 - .long 0x42212163 - .long 0x20101030 - .long 0xe5ffff1a - .long 0xfdf3f30e - .long 0xbfd2d26d - .long 0x81cdcd4c - .long 0x180c0c14 - .long 0x26131335 - .long 0xc3ecec2f - .long 0xbe5f5fe1 - .long 0x359797a2 - .long 0x884444cc - .long 0x2e171739 - .long 0x93c4c457 - .long 0x55a7a7f2 - .long 0xfc7e7e82 - .long 0x7a3d3d47 - .long 0xc86464ac - .long 0xba5d5de7 - .long 0x3219192b - .long 0xe6737395 - .long 0xc06060a0 - .long 0x19818198 - .long 0x9e4f4fd1 - .long 0xa3dcdc7f - .long 0x44222266 - .long 0x542a2a7e - .long 0x3b9090ab - .long 0xb888883 - .long 0x8c4646ca - .long 0xc7eeee29 - .long 0x6bb8b8d3 - .long 0x2814143c - .long 0xa7dede79 - .long 0xbc5e5ee2 - .long 0x160b0b1d - .long 0xaddbdb76 - .long 0xdbe0e03b - .long 0x64323256 - .long 0x743a3a4e - .long 0x140a0a1e - .long 0x924949db - .long 0xc06060a - .long 0x4824246c - .long 0xb85c5ce4 - .long 0x9fc2c25d - .long 0xbdd3d36e - .long 0x43acacef - .long 0xc46262a6 - .long 0x399191a8 - .long 0x319595a4 - .long 0xd3e4e437 - .long 0xf279798b - .long 0xd5e7e732 - .long 0x8bc8c843 - .long 0x6e373759 - .long 0xda6d6db7 - .long 0x18d8d8c - .long 0xb1d5d564 - .long 0x9c4e4ed2 - .long 0x49a9a9e0 - .long 0xd86c6cb4 - .long 0xac5656fa - .long 0xf3f4f407 - .long 0xcfeaea25 - .long 0xca6565af - .long 0xf47a7a8e - .long 0x47aeaee9 - .long 0x10080818 - .long 0x6fbabad5 - .long 0xf0787888 - .long 0x4a25256f - .long 0x5c2e2e72 - .long 0x381c1c24 - .long 0x57a6a6f1 - .long 0x73b4b4c7 - .long 0x97c6c651 - .long 0xcbe8e823 - .long 0xa1dddd7c - .long 0xe874749c - .long 0x3e1f1f21 - .long 0x964b4bdd - .long 0x61bdbddc - .long 0xd8b8b86 - .long 0xf8a8a85 - .long 0xe0707090 - .long 0x7c3e3e42 - .long 0x71b5b5c4 - .long 0xcc6666aa - .long 0x904848d8 - .long 0x6030305 - .long 0xf7f6f601 - .long 0x1c0e0e12 - .long 0xc26161a3 - .long 0x6a35355f - .long 0xae5757f9 - .long 0x69b9b9d0 - .long 0x17868691 - .long 0x99c1c158 - .long 0x3a1d1d27 - .long 0x279e9eb9 - .long 0xd9e1e138 - .long 0xebf8f813 - .long 0x2b9898b3 - .long 0x22111133 - .long 0xd26969bb - .long 0xa9d9d970 - .long 0x78e8e89 - .long 0x339494a7 - .long 0x2d9b9bb6 - .long 0x3c1e1e22 - .long 0x15878792 - .long 0xc9e9e920 - .long 0x87cece49 - .long 0xaa5555ff - .long 0x50282878 - .long 0xa5dfdf7a - .long 0x38c8c8f - .long 0x59a1a1f8 - .long 0x9898980 - .long 0x1a0d0d17 - .long 0x65bfbfda - .long 0xd7e6e631 - .long 0x844242c6 - .long 0xd06868b8 - .long 0x824141c3 - .long 0x299999b0 - .long 0x5a2d2d77 - .long 0x1e0f0f11 - .long 0x7bb0b0cb - .long 0xa85454fc - .long 0x6dbbbbd6 - .long 0x2c16163a - .long 0xa5c66363 - .long 0x84f87c7c - .long 0x99ee7777 - .long 0x8df67b7b - .long 0xdfff2f2 - .long 0xbdd66b6b - .long 0xb1de6f6f - .long 0x5491c5c5 - .long 0x50603030 - .long 0x3020101 - .long 0xa9ce6767 - .long 0x7d562b2b - .long 0x19e7fefe - .long 0x62b5d7d7 - .long 0xe64dabab - .long 0x9aec7676 - .long 0x458fcaca - .long 0x9d1f8282 - .long 0x4089c9c9 - .long 0x87fa7d7d - .long 0x15effafa - .long 0xebb25959 - .long 0xc98e4747 - .long 0xbfbf0f0 - .long 0xec41adad - .long 0x67b3d4d4 - .long 0xfd5fa2a2 - .long 0xea45afaf - .long 0xbf239c9c - .long 0xf753a4a4 - .long 0x96e47272 - .long 0x5b9bc0c0 - .long 0xc275b7b7 - .long 0x1ce1fdfd - .long 0xae3d9393 - .long 0x6a4c2626 - .long 0x5a6c3636 - .long 0x417e3f3f - .long 0x2f5f7f7 - .long 0x4f83cccc - .long 0x5c683434 - .long 0xf451a5a5 - .long 0x34d1e5e5 - .long 0x8f9f1f1 - .long 0x93e27171 - .long 0x73abd8d8 - .long 0x53623131 - .long 0x3f2a1515 - .long 0xc080404 - .long 0x5295c7c7 - .long 0x65462323 - .long 0x5e9dc3c3 - .long 0x28301818 - .long 0xa1379696 - .long 0xf0a0505 - .long 0xb52f9a9a - .long 0x90e0707 - .long 0x36241212 - .long 0x9b1b8080 - .long 0x3ddfe2e2 - .long 0x26cdebeb - .long 0x694e2727 - .long 0xcd7fb2b2 - .long 0x9fea7575 - .long 0x1b120909 - .long 0x9e1d8383 - .long 0x74582c2c - .long 0x2e341a1a - .long 0x2d361b1b - .long 0xb2dc6e6e - .long 0xeeb45a5a - .long 0xfb5ba0a0 - .long 0xf6a45252 - .long 0x4d763b3b - .long 0x61b7d6d6 - .long 0xce7db3b3 - .long 0x7b522929 - .long 0x3edde3e3 - .long 0x715e2f2f - .long 0x97138484 - .long 0xf5a65353 - .long 0x68b9d1d1 - .long 0x0 - .long 0x2cc1eded - .long 0x60402020 - .long 0x1fe3fcfc - .long 0xc879b1b1 - .long 0xedb65b5b - .long 0xbed46a6a - .long 0x468dcbcb - .long 0xd967bebe - .long 0x4b723939 - .long 0xde944a4a - .long 0xd4984c4c - .long 0xe8b05858 - .long 0x4a85cfcf - .long 0x6bbbd0d0 - .long 0x2ac5efef - .long 0xe54faaaa - .long 0x16edfbfb - .long 0xc5864343 - .long 0xd79a4d4d - .long 0x55663333 - .long 0x94118585 - .long 0xcf8a4545 - .long 0x10e9f9f9 - .long 0x6040202 - .long 0x81fe7f7f - .long 0xf0a05050 - .long 0x44783c3c - .long 0xba259f9f - .long 0xe34ba8a8 - .long 0xf3a25151 - .long 0xfe5da3a3 - .long 0xc0804040 - .long 0x8a058f8f - .long 0xad3f9292 - .long 0xbc219d9d - .long 0x48703838 - .long 0x4f1f5f5 - .long 0xdf63bcbc - .long 0xc177b6b6 - .long 0x75afdada - .long 0x63422121 - .long 0x30201010 - .long 0x1ae5ffff - .long 0xefdf3f3 - .long 0x6dbfd2d2 - .long 0x4c81cdcd - .long 0x14180c0c - .long 0x35261313 - .long 0x2fc3ecec - .long 0xe1be5f5f - .long 0xa2359797 - .long 0xcc884444 - .long 0x392e1717 - .long 0x5793c4c4 - .long 0xf255a7a7 - .long 0x82fc7e7e - .long 0x477a3d3d - .long 0xacc86464 - .long 0xe7ba5d5d - .long 0x2b321919 - .long 0x95e67373 - .long 0xa0c06060 - .long 0x98198181 - .long 0xd19e4f4f - .long 0x7fa3dcdc - .long 0x66442222 - .long 0x7e542a2a - .long 0xab3b9090 - .long 0x830b8888 - .long 0xca8c4646 - .long 0x29c7eeee - .long 0xd36bb8b8 - .long 0x3c281414 - .long 0x79a7dede - .long 0xe2bc5e5e - .long 0x1d160b0b - .long 0x76addbdb - .long 0x3bdbe0e0 - .long 0x56643232 - .long 0x4e743a3a - .long 0x1e140a0a - .long 0xdb924949 - .long 0xa0c0606 - .long 0x6c482424 - .long 0xe4b85c5c - .long 0x5d9fc2c2 - .long 0x6ebdd3d3 - .long 0xef43acac - .long 0xa6c46262 - .long 0xa8399191 - .long 0xa4319595 - .long 0x37d3e4e4 - .long 0x8bf27979 - .long 0x32d5e7e7 - .long 0x438bc8c8 - .long 0x596e3737 - .long 0xb7da6d6d - .long 0x8c018d8d - .long 0x64b1d5d5 - .long 0xd29c4e4e - .long 0xe049a9a9 - .long 0xb4d86c6c - .long 0xfaac5656 - .long 0x7f3f4f4 - .long 0x25cfeaea - .long 0xafca6565 - .long 0x8ef47a7a - .long 0xe947aeae - .long 0x18100808 - .long 0xd56fbaba - .long 0x88f07878 - .long 0x6f4a2525 - .long 0x725c2e2e - .long 0x24381c1c - .long 0xf157a6a6 - .long 0xc773b4b4 - .long 0x5197c6c6 - .long 0x23cbe8e8 - .long 0x7ca1dddd - .long 0x9ce87474 - .long 0x213e1f1f - .long 0xdd964b4b - .long 0xdc61bdbd - .long 0x860d8b8b - .long 0x850f8a8a - .long 0x90e07070 - .long 0x427c3e3e - .long 0xc471b5b5 - .long 0xaacc6666 - .long 0xd8904848 - .long 0x5060303 - .long 0x1f7f6f6 - .long 0x121c0e0e - .long 0xa3c26161 - .long 0x5f6a3535 - .long 0xf9ae5757 - .long 0xd069b9b9 - .long 0x91178686 - .long 0x5899c1c1 - .long 0x273a1d1d - .long 0xb9279e9e - .long 0x38d9e1e1 - .long 0x13ebf8f8 - .long 0xb32b9898 - .long 0x33221111 - .long 0xbbd26969 - .long 0x70a9d9d9 - .long 0x89078e8e - .long 0xa7339494 - .long 0xb62d9b9b - .long 0x223c1e1e - .long 0x92158787 - .long 0x20c9e9e9 - .long 0x4987cece - .long 0xffaa5555 - .long 0x78502828 - .long 0x7aa5dfdf - .long 0x8f038c8c - .long 0xf859a1a1 - .long 0x80098989 - .long 0x171a0d0d - .long 0xda65bfbf - .long 0x31d7e6e6 - .long 0xc6844242 - .long 0xb8d06868 - .long 0xc3824141 - .long 0xb0299999 - .long 0x775a2d2d - .long 0x111e0f0f - .long 0xcb7bb0b0 - .long 0xfca85454 - .long 0xd66dbbbb - .long 0x3a2c1616 - .long 0x63a5c663 - .long 0x7c84f87c - .long 0x7799ee77 - .long 0x7b8df67b - .long 0xf20dfff2 - .long 0x6bbdd66b - .long 0x6fb1de6f - .long 0xc55491c5 - .long 0x30506030 - .long 0x1030201 - .long 0x67a9ce67 - .long 0x2b7d562b - .long 0xfe19e7fe - .long 0xd762b5d7 - .long 0xabe64dab - .long 0x769aec76 - .long 0xca458fca - .long 0x829d1f82 - .long 0xc94089c9 - .long 0x7d87fa7d - .long 0xfa15effa - .long 0x59ebb259 - .long 0x47c98e47 - .long 0xf00bfbf0 - .long 0xadec41ad - .long 0xd467b3d4 - .long 0xa2fd5fa2 - .long 0xafea45af - .long 0x9cbf239c - .long 0xa4f753a4 - .long 0x7296e472 - .long 0xc05b9bc0 - .long 0xb7c275b7 - .long 0xfd1ce1fd - .long 0x93ae3d93 - .long 0x266a4c26 - .long 0x365a6c36 - .long 0x3f417e3f - .long 0xf702f5f7 - .long 0xcc4f83cc - .long 0x345c6834 - .long 0xa5f451a5 - .long 0xe534d1e5 - .long 0xf108f9f1 - .long 0x7193e271 - .long 0xd873abd8 - .long 0x31536231 - .long 0x153f2a15 - .long 0x40c0804 - .long 0xc75295c7 - .long 0x23654623 - .long 0xc35e9dc3 - .long 0x18283018 - .long 0x96a13796 - .long 0x50f0a05 - .long 0x9ab52f9a - .long 0x7090e07 - .long 0x12362412 - .long 0x809b1b80 - .long 0xe23ddfe2 - .long 0xeb26cdeb - .long 0x27694e27 - .long 0xb2cd7fb2 - .long 0x759fea75 - .long 0x91b1209 - .long 0x839e1d83 - .long 0x2c74582c - .long 0x1a2e341a - .long 0x1b2d361b - .long 0x6eb2dc6e - .long 0x5aeeb45a - .long 0xa0fb5ba0 - .long 0x52f6a452 - .long 0x3b4d763b - .long 0xd661b7d6 - .long 0xb3ce7db3 - .long 0x297b5229 - .long 0xe33edde3 - .long 0x2f715e2f - .long 0x84971384 - .long 0x53f5a653 - .long 0xd168b9d1 - .long 0x0 - .long 0xed2cc1ed - .long 0x20604020 - .long 0xfc1fe3fc - .long 0xb1c879b1 - .long 0x5bedb65b - .long 0x6abed46a - .long 0xcb468dcb - .long 0xbed967be - .long 0x394b7239 - .long 0x4ade944a - .long 0x4cd4984c - .long 0x58e8b058 - .long 0xcf4a85cf - .long 0xd06bbbd0 - .long 0xef2ac5ef - .long 0xaae54faa - .long 0xfb16edfb - .long 0x43c58643 - .long 0x4dd79a4d - .long 0x33556633 - .long 0x85941185 - .long 0x45cf8a45 - .long 0xf910e9f9 - .long 0x2060402 - .long 0x7f81fe7f - .long 0x50f0a050 - .long 0x3c44783c - .long 0x9fba259f - .long 0xa8e34ba8 - .long 0x51f3a251 - .long 0xa3fe5da3 - .long 0x40c08040 - .long 0x8f8a058f - .long 0x92ad3f92 - .long 0x9dbc219d - .long 0x38487038 - .long 0xf504f1f5 - .long 0xbcdf63bc - .long 0xb6c177b6 - .long 0xda75afda - .long 0x21634221 - .long 0x10302010 - .long 0xff1ae5ff - .long 0xf30efdf3 - .long 0xd26dbfd2 - .long 0xcd4c81cd - .long 0xc14180c - .long 0x13352613 - .long 0xec2fc3ec - .long 0x5fe1be5f - .long 0x97a23597 - .long 0x44cc8844 - .long 0x17392e17 - .long 0xc45793c4 - .long 0xa7f255a7 - .long 0x7e82fc7e - .long 0x3d477a3d - .long 0x64acc864 - .long 0x5de7ba5d - .long 0x192b3219 - .long 0x7395e673 - .long 0x60a0c060 - .long 0x81981981 - .long 0x4fd19e4f - .long 0xdc7fa3dc - .long 0x22664422 - .long 0x2a7e542a - .long 0x90ab3b90 - .long 0x88830b88 - .long 0x46ca8c46 - .long 0xee29c7ee - .long 0xb8d36bb8 - .long 0x143c2814 - .long 0xde79a7de - .long 0x5ee2bc5e - .long 0xb1d160b - .long 0xdb76addb - .long 0xe03bdbe0 - .long 0x32566432 - .long 0x3a4e743a - .long 0xa1e140a - .long 0x49db9249 - .long 0x60a0c06 - .long 0x246c4824 - .long 0x5ce4b85c - .long 0xc25d9fc2 - .long 0xd36ebdd3 - .long 0xacef43ac - .long 0x62a6c462 - .long 0x91a83991 - .long 0x95a43195 - .long 0xe437d3e4 - .long 0x798bf279 - .long 0xe732d5e7 - .long 0xc8438bc8 - .long 0x37596e37 - .long 0x6db7da6d - .long 0x8d8c018d - .long 0xd564b1d5 - .long 0x4ed29c4e - .long 0xa9e049a9 - .long 0x6cb4d86c - .long 0x56faac56 - .long 0xf407f3f4 - .long 0xea25cfea - .long 0x65afca65 - .long 0x7a8ef47a - .long 0xaee947ae - .long 0x8181008 - .long 0xbad56fba - .long 0x7888f078 - .long 0x256f4a25 - .long 0x2e725c2e - .long 0x1c24381c - .long 0xa6f157a6 - .long 0xb4c773b4 - .long 0xc65197c6 - .long 0xe823cbe8 - .long 0xdd7ca1dd - .long 0x749ce874 - .long 0x1f213e1f - .long 0x4bdd964b - .long 0xbddc61bd - .long 0x8b860d8b - .long 0x8a850f8a - .long 0x7090e070 - .long 0x3e427c3e - .long 0xb5c471b5 - .long 0x66aacc66 - .long 0x48d89048 - .long 0x3050603 - .long 0xf601f7f6 - .long 0xe121c0e - .long 0x61a3c261 - .long 0x355f6a35 - .long 0x57f9ae57 - .long 0xb9d069b9 - .long 0x86911786 - .long 0xc15899c1 - .long 0x1d273a1d - .long 0x9eb9279e - .long 0xe138d9e1 - .long 0xf813ebf8 - .long 0x98b32b98 - .long 0x11332211 - .long 0x69bbd269 - .long 0xd970a9d9 - .long 0x8e89078e - .long 0x94a73394 - .long 0x9bb62d9b - .long 0x1e223c1e - .long 0x87921587 - .long 0xe920c9e9 - .long 0xce4987ce - .long 0x55ffaa55 - .long 0x28785028 - .long 0xdf7aa5df - .long 0x8c8f038c - .long 0xa1f859a1 - .long 0x89800989 - .long 0xd171a0d - .long 0xbfda65bf - .long 0xe631d7e6 - .long 0x42c68442 - .long 0x68b8d068 - .long 0x41c38241 - .long 0x99b02999 - .long 0x2d775a2d - .long 0xf111e0f - .long 0xb0cb7bb0 - .long 0x54fca854 - .long 0xbbd66dbb - .long 0x163a2c16 - .long 0x6363a5c6 - .long 0x7c7c84f8 - .long 0x777799ee - .long 0x7b7b8df6 - .long 0xf2f20dff - .long 0x6b6bbdd6 - .long 0x6f6fb1de - .long 0xc5c55491 - .long 0x30305060 - .long 0x1010302 - .long 0x6767a9ce - .long 0x2b2b7d56 - .long 0xfefe19e7 - .long 0xd7d762b5 - .long 0xababe64d - .long 0x76769aec - .long 0xcaca458f - .long 0x82829d1f - .long 0xc9c94089 - .long 0x7d7d87fa - .long 0xfafa15ef - .long 0x5959ebb2 - .long 0x4747c98e - .long 0xf0f00bfb - .long 0xadadec41 - .long 0xd4d467b3 - .long 0xa2a2fd5f - .long 0xafafea45 - .long 0x9c9cbf23 - .long 0xa4a4f753 - .long 0x727296e4 - .long 0xc0c05b9b - .long 0xb7b7c275 - .long 0xfdfd1ce1 - .long 0x9393ae3d - .long 0x26266a4c - .long 0x36365a6c - .long 0x3f3f417e - .long 0xf7f702f5 - .long 0xcccc4f83 - .long 0x34345c68 - .long 0xa5a5f451 - .long 0xe5e534d1 - .long 0xf1f108f9 - .long 0x717193e2 - .long 0xd8d873ab - .long 0x31315362 - .long 0x15153f2a - .long 0x4040c08 - .long 0xc7c75295 - .long 0x23236546 - .long 0xc3c35e9d - .long 0x18182830 - .long 0x9696a137 - .long 0x5050f0a - .long 0x9a9ab52f - .long 0x707090e - .long 0x12123624 - .long 0x80809b1b - .long 0xe2e23ddf - .long 0xebeb26cd - .long 0x2727694e - .long 0xb2b2cd7f - .long 0x75759fea - .long 0x9091b12 - .long 0x83839e1d - .long 0x2c2c7458 - .long 0x1a1a2e34 - .long 0x1b1b2d36 - .long 0x6e6eb2dc - .long 0x5a5aeeb4 - .long 0xa0a0fb5b - .long 0x5252f6a4 - .long 0x3b3b4d76 - .long 0xd6d661b7 - .long 0xb3b3ce7d - .long 0x29297b52 - .long 0xe3e33edd - .long 0x2f2f715e - .long 0x84849713 - .long 0x5353f5a6 - .long 0xd1d168b9 - .long 0x0 - .long 0xeded2cc1 - .long 0x20206040 - .long 0xfcfc1fe3 - .long 0xb1b1c879 - .long 0x5b5bedb6 - .long 0x6a6abed4 - .long 0xcbcb468d - .long 0xbebed967 - .long 0x39394b72 - .long 0x4a4ade94 - .long 0x4c4cd498 - .long 0x5858e8b0 - .long 0xcfcf4a85 - .long 0xd0d06bbb - .long 0xefef2ac5 - .long 0xaaaae54f - .long 0xfbfb16ed - .long 0x4343c586 - .long 0x4d4dd79a - .long 0x33335566 - .long 0x85859411 - .long 0x4545cf8a - .long 0xf9f910e9 - .long 0x2020604 - .long 0x7f7f81fe - .long 0x5050f0a0 - .long 0x3c3c4478 - .long 0x9f9fba25 - .long 0xa8a8e34b - .long 0x5151f3a2 - .long 0xa3a3fe5d - .long 0x4040c080 - .long 0x8f8f8a05 - .long 0x9292ad3f - .long 0x9d9dbc21 - .long 0x38384870 - .long 0xf5f504f1 - .long 0xbcbcdf63 - .long 0xb6b6c177 - .long 0xdada75af - .long 0x21216342 - .long 0x10103020 - .long 0xffff1ae5 - .long 0xf3f30efd - .long 0xd2d26dbf - .long 0xcdcd4c81 - .long 0xc0c1418 - .long 0x13133526 - .long 0xecec2fc3 - .long 0x5f5fe1be - .long 0x9797a235 - .long 0x4444cc88 - .long 0x1717392e - .long 0xc4c45793 - .long 0xa7a7f255 - .long 0x7e7e82fc - .long 0x3d3d477a - .long 0x6464acc8 - .long 0x5d5de7ba - .long 0x19192b32 - .long 0x737395e6 - .long 0x6060a0c0 - .long 0x81819819 - .long 0x4f4fd19e - .long 0xdcdc7fa3 - .long 0x22226644 - .long 0x2a2a7e54 - .long 0x9090ab3b - .long 0x8888830b - .long 0x4646ca8c - .long 0xeeee29c7 - .long 0xb8b8d36b - .long 0x14143c28 - .long 0xdede79a7 - .long 0x5e5ee2bc - .long 0xb0b1d16 - .long 0xdbdb76ad - .long 0xe0e03bdb - .long 0x32325664 - .long 0x3a3a4e74 - .long 0xa0a1e14 - .long 0x4949db92 - .long 0x6060a0c - .long 0x24246c48 - .long 0x5c5ce4b8 - .long 0xc2c25d9f - .long 0xd3d36ebd - .long 0xacacef43 - .long 0x6262a6c4 - .long 0x9191a839 - .long 0x9595a431 - .long 0xe4e437d3 - .long 0x79798bf2 - .long 0xe7e732d5 - .long 0xc8c8438b - .long 0x3737596e - .long 0x6d6db7da - .long 0x8d8d8c01 - .long 0xd5d564b1 - .long 0x4e4ed29c - .long 0xa9a9e049 - .long 0x6c6cb4d8 - .long 0x5656faac - .long 0xf4f407f3 - .long 0xeaea25cf - .long 0x6565afca - .long 0x7a7a8ef4 - .long 0xaeaee947 - .long 0x8081810 - .long 0xbabad56f - .long 0x787888f0 - .long 0x25256f4a - .long 0x2e2e725c - .long 0x1c1c2438 - .long 0xa6a6f157 - .long 0xb4b4c773 - .long 0xc6c65197 - .long 0xe8e823cb - .long 0xdddd7ca1 - .long 0x74749ce8 - .long 0x1f1f213e - .long 0x4b4bdd96 - .long 0xbdbddc61 - .long 0x8b8b860d - .long 0x8a8a850f - .long 0x707090e0 - .long 0x3e3e427c - .long 0xb5b5c471 - .long 0x6666aacc - .long 0x4848d890 - .long 0x3030506 - .long 0xf6f601f7 - .long 0xe0e121c - .long 0x6161a3c2 - .long 0x35355f6a - .long 0x5757f9ae - .long 0xb9b9d069 - .long 0x86869117 - .long 0xc1c15899 - .long 0x1d1d273a - .long 0x9e9eb927 - .long 0xe1e138d9 - .long 0xf8f813eb - .long 0x9898b32b - .long 0x11113322 - .long 0x6969bbd2 - .long 0xd9d970a9 - .long 0x8e8e8907 - .long 0x9494a733 - .long 0x9b9bb62d - .long 0x1e1e223c - .long 0x87879215 - .long 0xe9e920c9 - .long 0xcece4987 - .long 0x5555ffaa - .long 0x28287850 - .long 0xdfdf7aa5 - .long 0x8c8c8f03 - .long 0xa1a1f859 - .long 0x89898009 - .long 0xd0d171a - .long 0xbfbfda65 - .long 0xe6e631d7 - .long 0x4242c684 - .long 0x6868b8d0 - .long 0x4141c382 - .long 0x9999b029 - .long 0x2d2d775a - .long 0xf0f111e - .long 0xb0b0cb7b - .long 0x5454fca8 - .long 0xbbbbd66d - .long 0x16163a2c + .long 0xc66363a5,0xf87c7c84,0xee777799,0xf67b7b8d + .long 0xfff2f20d,0xd66b6bbd,0xde6f6fb1,0x91c5c554 + .long 0x60303050,0x02010103,0xce6767a9,0x562b2b7d + .long 0xe7fefe19,0xb5d7d762,0x4dababe6,0xec76769a + .long 0x8fcaca45,0x1f82829d,0x89c9c940,0xfa7d7d87 + .long 0xeffafa15,0xb25959eb,0x8e4747c9,0xfbf0f00b + .long 0x41adadec,0xb3d4d467,0x5fa2a2fd,0x45afafea + .long 0x239c9cbf,0x53a4a4f7,0xe4727296,0x9bc0c05b + .long 0x75b7b7c2,0xe1fdfd1c,0x3d9393ae,0x4c26266a + .long 0x6c36365a,0x7e3f3f41,0xf5f7f702,0x83cccc4f + .long 0x6834345c,0x51a5a5f4,0xd1e5e534,0xf9f1f108 + .long 0xe2717193,0xabd8d873,0x62313153,0x2a15153f + .long 0x0804040c,0x95c7c752,0x46232365,0x9dc3c35e + .long 0x30181828,0x379696a1,0x0a05050f,0x2f9a9ab5 + .long 0x0e070709,0x24121236,0x1b80809b,0xdfe2e23d + .long 0xcdebeb26,0x4e272769,0x7fb2b2cd,0xea75759f + .long 0x1209091b,0x1d83839e,0x582c2c74,0x341a1a2e + .long 0x361b1b2d,0xdc6e6eb2,0xb45a5aee,0x5ba0a0fb + .long 0xa45252f6,0x763b3b4d,0xb7d6d661,0x7db3b3ce + .long 0x5229297b,0xdde3e33e,0x5e2f2f71,0x13848497 + .long 0xa65353f5,0xb9d1d168,0x00000000,0xc1eded2c + .long 0x40202060,0xe3fcfc1f,0x79b1b1c8,0xb65b5bed + .long 0xd46a6abe,0x8dcbcb46,0x67bebed9,0x7239394b + .long 0x944a4ade,0x984c4cd4,0xb05858e8,0x85cfcf4a + .long 0xbbd0d06b,0xc5efef2a,0x4faaaae5,0xedfbfb16 + .long 0x864343c5,0x9a4d4dd7,0x66333355,0x11858594 + .long 0x8a4545cf,0xe9f9f910,0x04020206,0xfe7f7f81 + .long 0xa05050f0,0x783c3c44,0x259f9fba,0x4ba8a8e3 + .long 0xa25151f3,0x5da3a3fe,0x804040c0,0x058f8f8a + .long 0x3f9292ad,0x219d9dbc,0x70383848,0xf1f5f504 + .long 0x63bcbcdf,0x77b6b6c1,0xafdada75,0x42212163 + .long 0x20101030,0xe5ffff1a,0xfdf3f30e,0xbfd2d26d + .long 0x81cdcd4c,0x180c0c14,0x26131335,0xc3ecec2f + .long 0xbe5f5fe1,0x359797a2,0x884444cc,0x2e171739 + .long 0x93c4c457,0x55a7a7f2,0xfc7e7e82,0x7a3d3d47 + .long 0xc86464ac,0xba5d5de7,0x3219192b,0xe6737395 + .long 0xc06060a0,0x19818198,0x9e4f4fd1,0xa3dcdc7f + .long 0x44222266,0x542a2a7e,0x3b9090ab,0x0b888883 + .long 0x8c4646ca,0xc7eeee29,0x6bb8b8d3,0x2814143c + .long 0xa7dede79,0xbc5e5ee2,0x160b0b1d,0xaddbdb76 + .long 0xdbe0e03b,0x64323256,0x743a3a4e,0x140a0a1e + .long 0x924949db,0x0c06060a,0x4824246c,0xb85c5ce4 + .long 0x9fc2c25d,0xbdd3d36e,0x43acacef,0xc46262a6 + .long 0x399191a8,0x319595a4,0xd3e4e437,0xf279798b + .long 0xd5e7e732,0x8bc8c843,0x6e373759,0xda6d6db7 + .long 0x018d8d8c,0xb1d5d564,0x9c4e4ed2,0x49a9a9e0 + .long 0xd86c6cb4,0xac5656fa,0xf3f4f407,0xcfeaea25 + .long 0xca6565af,0xf47a7a8e,0x47aeaee9,0x10080818 + .long 0x6fbabad5,0xf0787888,0x4a25256f,0x5c2e2e72 + .long 0x381c1c24,0x57a6a6f1,0x73b4b4c7,0x97c6c651 + .long 0xcbe8e823,0xa1dddd7c,0xe874749c,0x3e1f1f21 + .long 0x964b4bdd,0x61bdbddc,0x0d8b8b86,0x0f8a8a85 + .long 0xe0707090,0x7c3e3e42,0x71b5b5c4,0xcc6666aa + .long 0x904848d8,0x06030305,0xf7f6f601,0x1c0e0e12 + .long 0xc26161a3,0x6a35355f,0xae5757f9,0x69b9b9d0 + .long 0x17868691,0x99c1c158,0x3a1d1d27,0x279e9eb9 + .long 0xd9e1e138,0xebf8f813,0x2b9898b3,0x22111133 + .long 0xd26969bb,0xa9d9d970,0x078e8e89,0x339494a7 + .long 0x2d9b9bb6,0x3c1e1e22,0x15878792,0xc9e9e920 + .long 0x87cece49,0xaa5555ff,0x50282878,0xa5dfdf7a + .long 0x038c8c8f,0x59a1a1f8,0x09898980,0x1a0d0d17 + .long 0x65bfbfda,0xd7e6e631,0x844242c6,0xd06868b8 + .long 0x824141c3,0x299999b0,0x5a2d2d77,0x1e0f0f11 + .long 0x7bb0b0cb,0xa85454fc,0x6dbbbbd6,0x2c16163a + .long 0xa5c66363,0x84f87c7c,0x99ee7777,0x8df67b7b + .long 0x0dfff2f2,0xbdd66b6b,0xb1de6f6f,0x5491c5c5 + .long 0x50603030,0x03020101,0xa9ce6767,0x7d562b2b + .long 0x19e7fefe,0x62b5d7d7,0xe64dabab,0x9aec7676 + .long 0x458fcaca,0x9d1f8282,0x4089c9c9,0x87fa7d7d + .long 0x15effafa,0xebb25959,0xc98e4747,0x0bfbf0f0 + .long 0xec41adad,0x67b3d4d4,0xfd5fa2a2,0xea45afaf + .long 0xbf239c9c,0xf753a4a4,0x96e47272,0x5b9bc0c0 + .long 0xc275b7b7,0x1ce1fdfd,0xae3d9393,0x6a4c2626 + .long 0x5a6c3636,0x417e3f3f,0x02f5f7f7,0x4f83cccc + .long 0x5c683434,0xf451a5a5,0x34d1e5e5,0x08f9f1f1 + .long 0x93e27171,0x73abd8d8,0x53623131,0x3f2a1515 + .long 0x0c080404,0x5295c7c7,0x65462323,0x5e9dc3c3 + .long 0x28301818,0xa1379696,0x0f0a0505,0xb52f9a9a + .long 0x090e0707,0x36241212,0x9b1b8080,0x3ddfe2e2 + .long 0x26cdebeb,0x694e2727,0xcd7fb2b2,0x9fea7575 + .long 0x1b120909,0x9e1d8383,0x74582c2c,0x2e341a1a + .long 0x2d361b1b,0xb2dc6e6e,0xeeb45a5a,0xfb5ba0a0 + .long 0xf6a45252,0x4d763b3b,0x61b7d6d6,0xce7db3b3 + .long 0x7b522929,0x3edde3e3,0x715e2f2f,0x97138484 + .long 0xf5a65353,0x68b9d1d1,0x00000000,0x2cc1eded + .long 0x60402020,0x1fe3fcfc,0xc879b1b1,0xedb65b5b + .long 0xbed46a6a,0x468dcbcb,0xd967bebe,0x4b723939 + .long 0xde944a4a,0xd4984c4c,0xe8b05858,0x4a85cfcf + .long 0x6bbbd0d0,0x2ac5efef,0xe54faaaa,0x16edfbfb + .long 0xc5864343,0xd79a4d4d,0x55663333,0x94118585 + .long 0xcf8a4545,0x10e9f9f9,0x06040202,0x81fe7f7f + .long 0xf0a05050,0x44783c3c,0xba259f9f,0xe34ba8a8 + .long 0xf3a25151,0xfe5da3a3,0xc0804040,0x8a058f8f + .long 0xad3f9292,0xbc219d9d,0x48703838,0x04f1f5f5 + .long 0xdf63bcbc,0xc177b6b6,0x75afdada,0x63422121 + .long 0x30201010,0x1ae5ffff,0x0efdf3f3,0x6dbfd2d2 + .long 0x4c81cdcd,0x14180c0c,0x35261313,0x2fc3ecec + .long 0xe1be5f5f,0xa2359797,0xcc884444,0x392e1717 + .long 0x5793c4c4,0xf255a7a7,0x82fc7e7e,0x477a3d3d + .long 0xacc86464,0xe7ba5d5d,0x2b321919,0x95e67373 + .long 0xa0c06060,0x98198181,0xd19e4f4f,0x7fa3dcdc + .long 0x66442222,0x7e542a2a,0xab3b9090,0x830b8888 + .long 0xca8c4646,0x29c7eeee,0xd36bb8b8,0x3c281414 + .long 0x79a7dede,0xe2bc5e5e,0x1d160b0b,0x76addbdb + .long 0x3bdbe0e0,0x56643232,0x4e743a3a,0x1e140a0a + .long 0xdb924949,0x0a0c0606,0x6c482424,0xe4b85c5c + .long 0x5d9fc2c2,0x6ebdd3d3,0xef43acac,0xa6c46262 + .long 0xa8399191,0xa4319595,0x37d3e4e4,0x8bf27979 + .long 0x32d5e7e7,0x438bc8c8,0x596e3737,0xb7da6d6d + .long 0x8c018d8d,0x64b1d5d5,0xd29c4e4e,0xe049a9a9 + .long 0xb4d86c6c,0xfaac5656,0x07f3f4f4,0x25cfeaea + .long 0xafca6565,0x8ef47a7a,0xe947aeae,0x18100808 + .long 0xd56fbaba,0x88f07878,0x6f4a2525,0x725c2e2e + .long 0x24381c1c,0xf157a6a6,0xc773b4b4,0x5197c6c6 + .long 0x23cbe8e8,0x7ca1dddd,0x9ce87474,0x213e1f1f + .long 0xdd964b4b,0xdc61bdbd,0x860d8b8b,0x850f8a8a + .long 0x90e07070,0x427c3e3e,0xc471b5b5,0xaacc6666 + .long 0xd8904848,0x05060303,0x01f7f6f6,0x121c0e0e + .long 0xa3c26161,0x5f6a3535,0xf9ae5757,0xd069b9b9 + .long 0x91178686,0x5899c1c1,0x273a1d1d,0xb9279e9e + .long 0x38d9e1e1,0x13ebf8f8,0xb32b9898,0x33221111 + .long 0xbbd26969,0x70a9d9d9,0x89078e8e,0xa7339494 + .long 0xb62d9b9b,0x223c1e1e,0x92158787,0x20c9e9e9 + .long 0x4987cece,0xffaa5555,0x78502828,0x7aa5dfdf + .long 0x8f038c8c,0xf859a1a1,0x80098989,0x171a0d0d + .long 0xda65bfbf,0x31d7e6e6,0xc6844242,0xb8d06868 + .long 0xc3824141,0xb0299999,0x775a2d2d,0x111e0f0f + .long 0xcb7bb0b0,0xfca85454,0xd66dbbbb,0x3a2c1616 + .long 0x63a5c663,0x7c84f87c,0x7799ee77,0x7b8df67b + .long 0xf20dfff2,0x6bbdd66b,0x6fb1de6f,0xc55491c5 + .long 0x30506030,0x01030201,0x67a9ce67,0x2b7d562b + .long 0xfe19e7fe,0xd762b5d7,0xabe64dab,0x769aec76 + .long 0xca458fca,0x829d1f82,0xc94089c9,0x7d87fa7d + .long 0xfa15effa,0x59ebb259,0x47c98e47,0xf00bfbf0 + .long 0xadec41ad,0xd467b3d4,0xa2fd5fa2,0xafea45af + .long 0x9cbf239c,0xa4f753a4,0x7296e472,0xc05b9bc0 + .long 0xb7c275b7,0xfd1ce1fd,0x93ae3d93,0x266a4c26 + .long 0x365a6c36,0x3f417e3f,0xf702f5f7,0xcc4f83cc + .long 0x345c6834,0xa5f451a5,0xe534d1e5,0xf108f9f1 + .long 0x7193e271,0xd873abd8,0x31536231,0x153f2a15 + .long 0x040c0804,0xc75295c7,0x23654623,0xc35e9dc3 + .long 0x18283018,0x96a13796,0x050f0a05,0x9ab52f9a + .long 0x07090e07,0x12362412,0x809b1b80,0xe23ddfe2 + .long 0xeb26cdeb,0x27694e27,0xb2cd7fb2,0x759fea75 + .long 0x091b1209,0x839e1d83,0x2c74582c,0x1a2e341a + .long 0x1b2d361b,0x6eb2dc6e,0x5aeeb45a,0xa0fb5ba0 + .long 0x52f6a452,0x3b4d763b,0xd661b7d6,0xb3ce7db3 + .long 0x297b5229,0xe33edde3,0x2f715e2f,0x84971384 + .long 0x53f5a653,0xd168b9d1,0x00000000,0xed2cc1ed + .long 0x20604020,0xfc1fe3fc,0xb1c879b1,0x5bedb65b + .long 0x6abed46a,0xcb468dcb,0xbed967be,0x394b7239 + .long 0x4ade944a,0x4cd4984c,0x58e8b058,0xcf4a85cf + .long 0xd06bbbd0,0xef2ac5ef,0xaae54faa,0xfb16edfb + .long 0x43c58643,0x4dd79a4d,0x33556633,0x85941185 + .long 0x45cf8a45,0xf910e9f9,0x02060402,0x7f81fe7f + .long 0x50f0a050,0x3c44783c,0x9fba259f,0xa8e34ba8 + .long 0x51f3a251,0xa3fe5da3,0x40c08040,0x8f8a058f + .long 0x92ad3f92,0x9dbc219d,0x38487038,0xf504f1f5 + .long 0xbcdf63bc,0xb6c177b6,0xda75afda,0x21634221 + .long 0x10302010,0xff1ae5ff,0xf30efdf3,0xd26dbfd2 + .long 0xcd4c81cd,0x0c14180c,0x13352613,0xec2fc3ec + .long 0x5fe1be5f,0x97a23597,0x44cc8844,0x17392e17 + .long 0xc45793c4,0xa7f255a7,0x7e82fc7e,0x3d477a3d + .long 0x64acc864,0x5de7ba5d,0x192b3219,0x7395e673 + .long 0x60a0c060,0x81981981,0x4fd19e4f,0xdc7fa3dc + .long 0x22664422,0x2a7e542a,0x90ab3b90,0x88830b88 + .long 0x46ca8c46,0xee29c7ee,0xb8d36bb8,0x143c2814 + .long 0xde79a7de,0x5ee2bc5e,0x0b1d160b,0xdb76addb + .long 0xe03bdbe0,0x32566432,0x3a4e743a,0x0a1e140a + .long 0x49db9249,0x060a0c06,0x246c4824,0x5ce4b85c + .long 0xc25d9fc2,0xd36ebdd3,0xacef43ac,0x62a6c462 + .long 0x91a83991,0x95a43195,0xe437d3e4,0x798bf279 + .long 0xe732d5e7,0xc8438bc8,0x37596e37,0x6db7da6d + .long 0x8d8c018d,0xd564b1d5,0x4ed29c4e,0xa9e049a9 + .long 0x6cb4d86c,0x56faac56,0xf407f3f4,0xea25cfea + .long 0x65afca65,0x7a8ef47a,0xaee947ae,0x08181008 + .long 0xbad56fba,0x7888f078,0x256f4a25,0x2e725c2e + .long 0x1c24381c,0xa6f157a6,0xb4c773b4,0xc65197c6 + .long 0xe823cbe8,0xdd7ca1dd,0x749ce874,0x1f213e1f + .long 0x4bdd964b,0xbddc61bd,0x8b860d8b,0x8a850f8a + .long 0x7090e070,0x3e427c3e,0xb5c471b5,0x66aacc66 + .long 0x48d89048,0x03050603,0xf601f7f6,0x0e121c0e + .long 0x61a3c261,0x355f6a35,0x57f9ae57,0xb9d069b9 + .long 0x86911786,0xc15899c1,0x1d273a1d,0x9eb9279e + .long 0xe138d9e1,0xf813ebf8,0x98b32b98,0x11332211 + .long 0x69bbd269,0xd970a9d9,0x8e89078e,0x94a73394 + .long 0x9bb62d9b,0x1e223c1e,0x87921587,0xe920c9e9 + .long 0xce4987ce,0x55ffaa55,0x28785028,0xdf7aa5df + .long 0x8c8f038c,0xa1f859a1,0x89800989,0x0d171a0d + .long 0xbfda65bf,0xe631d7e6,0x42c68442,0x68b8d068 + .long 0x41c38241,0x99b02999,0x2d775a2d,0x0f111e0f + .long 0xb0cb7bb0,0x54fca854,0xbbd66dbb,0x163a2c16 + .long 0x6363a5c6,0x7c7c84f8,0x777799ee,0x7b7b8df6 + .long 0xf2f20dff,0x6b6bbdd6,0x6f6fb1de,0xc5c55491 + .long 0x30305060,0x01010302,0x6767a9ce,0x2b2b7d56 + .long 0xfefe19e7,0xd7d762b5,0xababe64d,0x76769aec + .long 0xcaca458f,0x82829d1f,0xc9c94089,0x7d7d87fa + .long 0xfafa15ef,0x5959ebb2,0x4747c98e,0xf0f00bfb + .long 0xadadec41,0xd4d467b3,0xa2a2fd5f,0xafafea45 + .long 0x9c9cbf23,0xa4a4f753,0x727296e4,0xc0c05b9b + .long 0xb7b7c275,0xfdfd1ce1,0x9393ae3d,0x26266a4c + .long 0x36365a6c,0x3f3f417e,0xf7f702f5,0xcccc4f83 + .long 0x34345c68,0xa5a5f451,0xe5e534d1,0xf1f108f9 + .long 0x717193e2,0xd8d873ab,0x31315362,0x15153f2a + .long 0x04040c08,0xc7c75295,0x23236546,0xc3c35e9d + .long 0x18182830,0x9696a137,0x05050f0a,0x9a9ab52f + .long 0x0707090e,0x12123624,0x80809b1b,0xe2e23ddf + .long 0xebeb26cd,0x2727694e,0xb2b2cd7f,0x75759fea + .long 0x09091b12,0x83839e1d,0x2c2c7458,0x1a1a2e34 + .long 0x1b1b2d36,0x6e6eb2dc,0x5a5aeeb4,0xa0a0fb5b + .long 0x5252f6a4,0x3b3b4d76,0xd6d661b7,0xb3b3ce7d + .long 0x29297b52,0xe3e33edd,0x2f2f715e,0x84849713 + .long 0x5353f5a6,0xd1d168b9,0x00000000,0xeded2cc1 + .long 0x20206040,0xfcfc1fe3,0xb1b1c879,0x5b5bedb6 + .long 0x6a6abed4,0xcbcb468d,0xbebed967,0x39394b72 + .long 0x4a4ade94,0x4c4cd498,0x5858e8b0,0xcfcf4a85 + .long 0xd0d06bbb,0xefef2ac5,0xaaaae54f,0xfbfb16ed + .long 0x4343c586,0x4d4dd79a,0x33335566,0x85859411 + .long 0x4545cf8a,0xf9f910e9,0x02020604,0x7f7f81fe + .long 0x5050f0a0,0x3c3c4478,0x9f9fba25,0xa8a8e34b + .long 0x5151f3a2,0xa3a3fe5d,0x4040c080,0x8f8f8a05 + .long 0x9292ad3f,0x9d9dbc21,0x38384870,0xf5f504f1 + .long 0xbcbcdf63,0xb6b6c177,0xdada75af,0x21216342 + .long 0x10103020,0xffff1ae5,0xf3f30efd,0xd2d26dbf + .long 0xcdcd4c81,0x0c0c1418,0x13133526,0xecec2fc3 + .long 0x5f5fe1be,0x9797a235,0x4444cc88,0x1717392e + .long 0xc4c45793,0xa7a7f255,0x7e7e82fc,0x3d3d477a + .long 0x6464acc8,0x5d5de7ba,0x19192b32,0x737395e6 + .long 0x6060a0c0,0x81819819,0x4f4fd19e,0xdcdc7fa3 + .long 0x22226644,0x2a2a7e54,0x9090ab3b,0x8888830b + .long 0x4646ca8c,0xeeee29c7,0xb8b8d36b,0x14143c28 + .long 0xdede79a7,0x5e5ee2bc,0x0b0b1d16,0xdbdb76ad + .long 0xe0e03bdb,0x32325664,0x3a3a4e74,0x0a0a1e14 + .long 0x4949db92,0x06060a0c,0x24246c48,0x5c5ce4b8 + .long 0xc2c25d9f,0xd3d36ebd,0xacacef43,0x6262a6c4 + .long 0x9191a839,0x9595a431,0xe4e437d3,0x79798bf2 + .long 0xe7e732d5,0xc8c8438b,0x3737596e,0x6d6db7da + .long 0x8d8d8c01,0xd5d564b1,0x4e4ed29c,0xa9a9e049 + .long 0x6c6cb4d8,0x5656faac,0xf4f407f3,0xeaea25cf + .long 0x6565afca,0x7a7a8ef4,0xaeaee947,0x08081810 + .long 0xbabad56f,0x787888f0,0x25256f4a,0x2e2e725c + .long 0x1c1c2438,0xa6a6f157,0xb4b4c773,0xc6c65197 + .long 0xe8e823cb,0xdddd7ca1,0x74749ce8,0x1f1f213e + .long 0x4b4bdd96,0xbdbddc61,0x8b8b860d,0x8a8a850f + .long 0x707090e0,0x3e3e427c,0xb5b5c471,0x6666aacc + .long 0x4848d890,0x03030506,0xf6f601f7,0x0e0e121c + .long 0x6161a3c2,0x35355f6a,0x5757f9ae,0xb9b9d069 + .long 0x86869117,0xc1c15899,0x1d1d273a,0x9e9eb927 + .long 0xe1e138d9,0xf8f813eb,0x9898b32b,0x11113322 + .long 0x6969bbd2,0xd9d970a9,0x8e8e8907,0x9494a733 + .long 0x9b9bb62d,0x1e1e223c,0x87879215,0xe9e920c9 + .long 0xcece4987,0x5555ffaa,0x28287850,0xdfdf7aa5 + .long 0x8c8c8f03,0xa1a1f859,0x89898009,0x0d0d171a + .long 0xbfbfda65,0xe6e631d7,0x4242c684,0x6868b8d0 + .long 0x4141c382,0x9999b029,0x2d2d775a,0x0f0f111e + .long 0xb0b0cb7b,0x5454fca8,0xbbbbd66d,0x16163a2c #if defined(HAVE_AESCCM) || defined(HAVE_AESGCM) || \ defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \ defined(HAVE_AES_ECB) @@ -4608,274 +3449,50 @@ L_AES_XTS_encrypt_done_data: defined(HAVE_AES_CBC) || defined(HAVE_AES_ECB) #ifndef __APPLE__ .text - .section .rodata - .type L_AES_PPC64_td4, @object + .type L_AES_PPC64_td4, %object .size L_AES_PPC64_td4, 256 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_AES_PPC64_td4: - .byte 0x52 - .byte 0x9 - .byte 0x6a - .byte 0xd5 - .byte 0x30 - .byte 0x36 - .byte 0xa5 - .byte 0x38 - .byte 0xbf - .byte 0x40 - .byte 0xa3 - .byte 0x9e - .byte 0x81 - .byte 0xf3 - .byte 0xd7 - .byte 0xfb - .byte 0x7c - .byte 0xe3 - .byte 0x39 - .byte 0x82 - .byte 0x9b - .byte 0x2f - .byte 0xff - .byte 0x87 - .byte 0x34 - .byte 0x8e - .byte 0x43 - .byte 0x44 - .byte 0xc4 - .byte 0xde - .byte 0xe9 - .byte 0xcb - .byte 0x54 - .byte 0x7b - .byte 0x94 - .byte 0x32 - .byte 0xa6 - .byte 0xc2 - .byte 0x23 - .byte 0x3d - .byte 0xee - .byte 0x4c - .byte 0x95 - .byte 0xb - .byte 0x42 - .byte 0xfa - .byte 0xc3 - .byte 0x4e - .byte 0x8 - .byte 0x2e - .byte 0xa1 - .byte 0x66 - .byte 0x28 - .byte 0xd9 - .byte 0x24 - .byte 0xb2 - .byte 0x76 - .byte 0x5b - .byte 0xa2 - .byte 0x49 - .byte 0x6d - .byte 0x8b - .byte 0xd1 - .byte 0x25 - .byte 0x72 - .byte 0xf8 - .byte 0xf6 - .byte 0x64 - .byte 0x86 - .byte 0x68 - .byte 0x98 - .byte 0x16 - .byte 0xd4 - .byte 0xa4 - .byte 0x5c - .byte 0xcc - .byte 0x5d - .byte 0x65 - .byte 0xb6 - .byte 0x92 - .byte 0x6c - .byte 0x70 - .byte 0x48 - .byte 0x50 - .byte 0xfd - .byte 0xed - .byte 0xb9 - .byte 0xda - .byte 0x5e - .byte 0x15 - .byte 0x46 - .byte 0x57 - .byte 0xa7 - .byte 0x8d - .byte 0x9d - .byte 0x84 - .byte 0x90 - .byte 0xd8 - .byte 0xab - .byte 0x0 - .byte 0x8c - .byte 0xbc - .byte 0xd3 - .byte 0xa - .byte 0xf7 - .byte 0xe4 - .byte 0x58 - .byte 0x5 - .byte 0xb8 - .byte 0xb3 - .byte 0x45 - .byte 0x6 - .byte 0xd0 - .byte 0x2c - .byte 0x1e - .byte 0x8f - .byte 0xca - .byte 0x3f - .byte 0xf - .byte 0x2 - .byte 0xc1 - .byte 0xaf - .byte 0xbd - .byte 0x3 - .byte 0x1 - .byte 0x13 - .byte 0x8a - .byte 0x6b - .byte 0x3a - .byte 0x91 - .byte 0x11 - .byte 0x41 - .byte 0x4f - .byte 0x67 - .byte 0xdc - .byte 0xea - .byte 0x97 - .byte 0xf2 - .byte 0xcf - .byte 0xce - .byte 0xf0 - .byte 0xb4 - .byte 0xe6 - .byte 0x73 - .byte 0x96 - .byte 0xac - .byte 0x74 - .byte 0x22 - .byte 0xe7 - .byte 0xad - .byte 0x35 - .byte 0x85 - .byte 0xe2 - .byte 0xf9 - .byte 0x37 - .byte 0xe8 - .byte 0x1c - .byte 0x75 - .byte 0xdf - .byte 0x6e - .byte 0x47 - .byte 0xf1 - .byte 0x1a - .byte 0x71 - .byte 0x1d - .byte 0x29 - .byte 0xc5 - .byte 0x89 - .byte 0x6f - .byte 0xb7 - .byte 0x62 - .byte 0xe - .byte 0xaa - .byte 0x18 - .byte 0xbe - .byte 0x1b - .byte 0xfc - .byte 0x56 - .byte 0x3e - .byte 0x4b - .byte 0xc6 - .byte 0xd2 - .byte 0x79 - .byte 0x20 - .byte 0x9a - .byte 0xdb - .byte 0xc0 - .byte 0xfe - .byte 0x78 - .byte 0xcd - .byte 0x5a - .byte 0xf4 - .byte 0x1f - .byte 0xdd - .byte 0xa8 - .byte 0x33 - .byte 0x88 - .byte 0x7 - .byte 0xc7 - .byte 0x31 - .byte 0xb1 - .byte 0x12 - .byte 0x10 - .byte 0x59 - .byte 0x27 - .byte 0x80 - .byte 0xec - .byte 0x5f - .byte 0x60 - .byte 0x51 - .byte 0x7f - .byte 0xa9 - .byte 0x19 - .byte 0xb5 - .byte 0x4a - .byte 0xd - .byte 0x2d - .byte 0xe5 - .byte 0x7a - .byte 0x9f - .byte 0x93 - .byte 0xc9 - .byte 0x9c - .byte 0xef - .byte 0xa0 - .byte 0xe0 - .byte 0x3b - .byte 0x4d - .byte 0xae - .byte 0x2a - .byte 0xf5 - .byte 0xb0 - .byte 0xc8 - .byte 0xeb - .byte 0xbb - .byte 0x3c - .byte 0x83 - .byte 0x53 - .byte 0x99 - .byte 0x61 - .byte 0x17 - .byte 0x2b - .byte 0x4 - .byte 0x7e - .byte 0xba - .byte 0x77 - .byte 0xd6 - .byte 0x26 - .byte 0xe1 - .byte 0x69 - .byte 0x14 - .byte 0x63 - .byte 0x55 - .byte 0x21 - .byte 0xc - .byte 0x7d + .byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38 + .byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb + .byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87 + .byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb + .byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d + .byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e + .byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2 + .byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25 + .byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16 + .byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92 + .byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda + .byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84 + .byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a + .byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06 + .byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02 + .byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b + .byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea + .byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73 + .byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85 + .byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e + .byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89 + .byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b + .byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20 + .byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4 + .byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31 + .byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f + .byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d + .byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef + .byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0 + .byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61 + .byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26 + .byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d #if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || defined(HAVE_AES_ECB) #ifndef __APPLE__ .text @@ -7279,50 +5896,26 @@ L_AES_XTS_decrypt_done_data: #ifdef GCM_TABLE_4BIT #ifndef __APPLE__ .text - .section .rodata - .type L_GCM_gmult_len_r, @object + .type L_GCM_gmult_len_r, %object .size L_GCM_gmult_len_r, 128 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_GCM_gmult_len_r: - .long 0x0 - .long 0x1c200000 - .long 0x38400000 - .long 0x24600000 - .long 0x70800000 - .long 0x6ca00000 - .long 0x48c00000 - .long 0x54e00000 - .long 0xe1000000 - .long 0xfd200000 - .long 0xd9400000 - .long 0xc5600000 - .long 0x91800000 - .long 0x8da00000 - .long 0xa9c00000 - .long 0xb5e00000 - .long 0x0 - .long 0x1c20000 - .long 0x3840000 - .long 0x2460000 - .long 0x7080000 - .long 0x6ca0000 - .long 0x48c0000 - .long 0x54e0000 - .long 0xe100000 - .long 0xfd20000 - .long 0xd940000 - .long 0xc560000 - .long 0x9180000 - .long 0x8da0000 - .long 0xa9c0000 - .long 0xb5e0000 + .long 0x00000000,0x1c200000,0x38400000,0x24600000 + .long 0x70800000,0x6ca00000,0x48c00000,0x54e00000 + .long 0xe1000000,0xfd200000,0xd9400000,0xc5600000 + .long 0x91800000,0x8da00000,0xa9c00000,0xb5e00000 + .long 0x00000000,0x01c20000,0x03840000,0x02460000 + .long 0x07080000,0x06ca0000,0x048c0000,0x054e0000 + .long 0x0e100000,0x0fd20000,0x0d940000,0x0c560000 + .long 0x09180000,0x08da0000,0x0a9c0000,0x0b5e0000 #ifndef __APPLE__ .text .globl GCM_gmult_len @@ -7791,530 +6384,82 @@ L_GCM_gmult_len_start_block: #ifdef GCM_TABLE #ifndef __APPLE__ .text - .section .rodata - .type L_GCM_gmult_len_r, @object + .type L_GCM_gmult_len_r, %object .size L_GCM_gmult_len_r, 512 #else .section __DATA,__data #endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned #ifndef __APPLE__ - .align 4 + .align 3 #else - .p2align 4 + .p2align 3 #endif /* __APPLE__ */ L_GCM_gmult_len_r: - .byte 0x0 - .byte 0x0 - .byte 0xc2 - .byte 0x1 - .byte 0x84 - .byte 0x3 - .byte 0x46 - .byte 0x2 - .byte 0x8 - .byte 0x7 - .byte 0xca - .byte 0x6 - .byte 0x8c - .byte 0x4 - .byte 0x4e - .byte 0x5 - .byte 0x10 - .byte 0xe - .byte 0xd2 - .byte 0xf - .byte 0x94 - .byte 0xd - .byte 0x56 - .byte 0xc - .byte 0x18 - .byte 0x9 - .byte 0xda - .byte 0x8 - .byte 0x9c - .byte 0xa - .byte 0x5e - .byte 0xb - .byte 0x20 - .byte 0x1c - .byte 0xe2 - .byte 0x1d - .byte 0xa4 - .byte 0x1f - .byte 0x66 - .byte 0x1e - .byte 0x28 - .byte 0x1b - .byte 0xea - .byte 0x1a - .byte 0xac - .byte 0x18 - .byte 0x6e - .byte 0x19 - .byte 0x30 - .byte 0x12 - .byte 0xf2 - .byte 0x13 - .byte 0xb4 - .byte 0x11 - .byte 0x76 - .byte 0x10 - .byte 0x38 - .byte 0x15 - .byte 0xfa - .byte 0x14 - .byte 0xbc - .byte 0x16 - .byte 0x7e - .byte 0x17 - .byte 0x40 - .byte 0x38 - .byte 0x82 - .byte 0x39 - .byte 0xc4 - .byte 0x3b - .byte 0x6 - .byte 0x3a - .byte 0x48 - .byte 0x3f - .byte 0x8a - .byte 0x3e - .byte 0xcc - .byte 0x3c - .byte 0xe - .byte 0x3d - .byte 0x50 - .byte 0x36 - .byte 0x92 - .byte 0x37 - .byte 0xd4 - .byte 0x35 - .byte 0x16 - .byte 0x34 - .byte 0x58 - .byte 0x31 - .byte 0x9a - .byte 0x30 - .byte 0xdc - .byte 0x32 - .byte 0x1e - .byte 0x33 - .byte 0x60 - .byte 0x24 - .byte 0xa2 - .byte 0x25 - .byte 0xe4 - .byte 0x27 - .byte 0x26 - .byte 0x26 - .byte 0x68 - .byte 0x23 - .byte 0xaa - .byte 0x22 - .byte 0xec - .byte 0x20 - .byte 0x2e - .byte 0x21 - .byte 0x70 - .byte 0x2a - .byte 0xb2 - .byte 0x2b - .byte 0xf4 - .byte 0x29 - .byte 0x36 - .byte 0x28 - .byte 0x78 - .byte 0x2d - .byte 0xba - .byte 0x2c - .byte 0xfc - .byte 0x2e - .byte 0x3e - .byte 0x2f - .byte 0x80 - .byte 0x70 - .byte 0x42 - .byte 0x71 - .byte 0x4 - .byte 0x73 - .byte 0xc6 - .byte 0x72 - .byte 0x88 - .byte 0x77 - .byte 0x4a - .byte 0x76 - .byte 0xc - .byte 0x74 - .byte 0xce - .byte 0x75 - .byte 0x90 - .byte 0x7e - .byte 0x52 - .byte 0x7f - .byte 0x14 - .byte 0x7d - .byte 0xd6 - .byte 0x7c - .byte 0x98 - .byte 0x79 - .byte 0x5a - .byte 0x78 - .byte 0x1c - .byte 0x7a - .byte 0xde - .byte 0x7b - .byte 0xa0 - .byte 0x6c - .byte 0x62 - .byte 0x6d - .byte 0x24 - .byte 0x6f - .byte 0xe6 - .byte 0x6e - .byte 0xa8 - .byte 0x6b - .byte 0x6a - .byte 0x6a - .byte 0x2c - .byte 0x68 - .byte 0xee - .byte 0x69 - .byte 0xb0 - .byte 0x62 - .byte 0x72 - .byte 0x63 - .byte 0x34 - .byte 0x61 - .byte 0xf6 - .byte 0x60 - .byte 0xb8 - .byte 0x65 - .byte 0x7a - .byte 0x64 - .byte 0x3c - .byte 0x66 - .byte 0xfe - .byte 0x67 - .byte 0xc0 - .byte 0x48 - .byte 0x2 - .byte 0x49 - .byte 0x44 - .byte 0x4b - .byte 0x86 - .byte 0x4a - .byte 0xc8 - .byte 0x4f - .byte 0xa - .byte 0x4e - .byte 0x4c - .byte 0x4c - .byte 0x8e - .byte 0x4d - .byte 0xd0 - .byte 0x46 - .byte 0x12 - .byte 0x47 - .byte 0x54 - .byte 0x45 - .byte 0x96 - .byte 0x44 - .byte 0xd8 - .byte 0x41 - .byte 0x1a - .byte 0x40 - .byte 0x5c - .byte 0x42 - .byte 0x9e - .byte 0x43 - .byte 0xe0 - .byte 0x54 - .byte 0x22 - .byte 0x55 - .byte 0x64 - .byte 0x57 - .byte 0xa6 - .byte 0x56 - .byte 0xe8 - .byte 0x53 - .byte 0x2a - .byte 0x52 - .byte 0x6c - .byte 0x50 - .byte 0xae - .byte 0x51 - .byte 0xf0 - .byte 0x5a - .byte 0x32 - .byte 0x5b - .byte 0x74 - .byte 0x59 - .byte 0xb6 - .byte 0x58 - .byte 0xf8 - .byte 0x5d - .byte 0x3a - .byte 0x5c - .byte 0x7c - .byte 0x5e - .byte 0xbe - .byte 0x5f - .byte 0x0 - .byte 0xe1 - .byte 0xc2 - .byte 0xe0 - .byte 0x84 - .byte 0xe2 - .byte 0x46 - .byte 0xe3 - .byte 0x8 - .byte 0xe6 - .byte 0xca - .byte 0xe7 - .byte 0x8c - .byte 0xe5 - .byte 0x4e - .byte 0xe4 - .byte 0x10 - .byte 0xef - .byte 0xd2 - .byte 0xee - .byte 0x94 - .byte 0xec - .byte 0x56 - .byte 0xed - .byte 0x18 - .byte 0xe8 - .byte 0xda - .byte 0xe9 - .byte 0x9c - .byte 0xeb - .byte 0x5e - .byte 0xea - .byte 0x20 - .byte 0xfd - .byte 0xe2 - .byte 0xfc - .byte 0xa4 - .byte 0xfe - .byte 0x66 - .byte 0xff - .byte 0x28 - .byte 0xfa - .byte 0xea - .byte 0xfb - .byte 0xac - .byte 0xf9 - .byte 0x6e - .byte 0xf8 - .byte 0x30 - .byte 0xf3 - .byte 0xf2 - .byte 0xf2 - .byte 0xb4 - .byte 0xf0 - .byte 0x76 - .byte 0xf1 - .byte 0x38 - .byte 0xf4 - .byte 0xfa - .byte 0xf5 - .byte 0xbc - .byte 0xf7 - .byte 0x7e - .byte 0xf6 - .byte 0x40 - .byte 0xd9 - .byte 0x82 - .byte 0xd8 - .byte 0xc4 - .byte 0xda - .byte 0x6 - .byte 0xdb - .byte 0x48 - .byte 0xde - .byte 0x8a - .byte 0xdf - .byte 0xcc - .byte 0xdd - .byte 0xe - .byte 0xdc - .byte 0x50 - .byte 0xd7 - .byte 0x92 - .byte 0xd6 - .byte 0xd4 - .byte 0xd4 - .byte 0x16 - .byte 0xd5 - .byte 0x58 - .byte 0xd0 - .byte 0x9a - .byte 0xd1 - .byte 0xdc - .byte 0xd3 - .byte 0x1e - .byte 0xd2 - .byte 0x60 - .byte 0xc5 - .byte 0xa2 - .byte 0xc4 - .byte 0xe4 - .byte 0xc6 - .byte 0x26 - .byte 0xc7 - .byte 0x68 - .byte 0xc2 - .byte 0xaa - .byte 0xc3 - .byte 0xec - .byte 0xc1 - .byte 0x2e - .byte 0xc0 - .byte 0x70 - .byte 0xcb - .byte 0xb2 - .byte 0xca - .byte 0xf4 - .byte 0xc8 - .byte 0x36 - .byte 0xc9 - .byte 0x78 - .byte 0xcc - .byte 0xba - .byte 0xcd - .byte 0xfc - .byte 0xcf - .byte 0x3e - .byte 0xce - .byte 0x80 - .byte 0x91 - .byte 0x42 - .byte 0x90 - .byte 0x4 - .byte 0x92 - .byte 0xc6 - .byte 0x93 - .byte 0x88 - .byte 0x96 - .byte 0x4a - .byte 0x97 - .byte 0xc - .byte 0x95 - .byte 0xce - .byte 0x94 - .byte 0x90 - .byte 0x9f - .byte 0x52 - .byte 0x9e - .byte 0x14 - .byte 0x9c - .byte 0xd6 - .byte 0x9d - .byte 0x98 - .byte 0x98 - .byte 0x5a - .byte 0x99 - .byte 0x1c - .byte 0x9b - .byte 0xde - .byte 0x9a - .byte 0xa0 - .byte 0x8d - .byte 0x62 - .byte 0x8c - .byte 0x24 - .byte 0x8e - .byte 0xe6 - .byte 0x8f - .byte 0xa8 - .byte 0x8a - .byte 0x6a - .byte 0x8b - .byte 0x2c - .byte 0x89 - .byte 0xee - .byte 0x88 - .byte 0xb0 - .byte 0x83 - .byte 0x72 - .byte 0x82 - .byte 0x34 - .byte 0x80 - .byte 0xf6 - .byte 0x81 - .byte 0xb8 - .byte 0x84 - .byte 0x7a - .byte 0x85 - .byte 0x3c - .byte 0x87 - .byte 0xfe - .byte 0x86 - .byte 0xc0 - .byte 0xa9 - .byte 0x2 - .byte 0xa8 - .byte 0x44 - .byte 0xaa - .byte 0x86 - .byte 0xab - .byte 0xc8 - .byte 0xae - .byte 0xa - .byte 0xaf - .byte 0x4c - .byte 0xad - .byte 0x8e - .byte 0xac - .byte 0xd0 - .byte 0xa7 - .byte 0x12 - .byte 0xa6 - .byte 0x54 - .byte 0xa4 - .byte 0x96 - .byte 0xa5 - .byte 0xd8 - .byte 0xa0 - .byte 0x1a - .byte 0xa1 - .byte 0x5c - .byte 0xa3 - .byte 0x9e - .byte 0xa2 - .byte 0xe0 - .byte 0xb5 - .byte 0x22 - .byte 0xb4 - .byte 0x64 - .byte 0xb6 - .byte 0xa6 - .byte 0xb7 - .byte 0xe8 - .byte 0xb2 - .byte 0x2a - .byte 0xb3 - .byte 0x6c - .byte 0xb1 - .byte 0xae - .byte 0xb0 - .byte 0xf0 - .byte 0xbb - .byte 0x32 - .byte 0xba - .byte 0x74 - .byte 0xb8 - .byte 0xb6 - .byte 0xb9 - .byte 0xf8 - .byte 0xbc - .byte 0x3a - .byte 0xbd - .byte 0x7c - .byte 0xbf - .byte 0xbe - .byte 0xbe + .byte 0x00,0x00,0xc2,0x01,0x84,0x03,0x46,0x02 + .byte 0x08,0x07,0xca,0x06,0x8c,0x04,0x4e,0x05 + .byte 0x10,0x0e,0xd2,0x0f,0x94,0x0d,0x56,0x0c + .byte 0x18,0x09,0xda,0x08,0x9c,0x0a,0x5e,0x0b + .byte 0x20,0x1c,0xe2,0x1d,0xa4,0x1f,0x66,0x1e + .byte 0x28,0x1b,0xea,0x1a,0xac,0x18,0x6e,0x19 + .byte 0x30,0x12,0xf2,0x13,0xb4,0x11,0x76,0x10 + .byte 0x38,0x15,0xfa,0x14,0xbc,0x16,0x7e,0x17 + .byte 0x40,0x38,0x82,0x39,0xc4,0x3b,0x06,0x3a + .byte 0x48,0x3f,0x8a,0x3e,0xcc,0x3c,0x0e,0x3d + .byte 0x50,0x36,0x92,0x37,0xd4,0x35,0x16,0x34 + .byte 0x58,0x31,0x9a,0x30,0xdc,0x32,0x1e,0x33 + .byte 0x60,0x24,0xa2,0x25,0xe4,0x27,0x26,0x26 + .byte 0x68,0x23,0xaa,0x22,0xec,0x20,0x2e,0x21 + .byte 0x70,0x2a,0xb2,0x2b,0xf4,0x29,0x36,0x28 + .byte 0x78,0x2d,0xba,0x2c,0xfc,0x2e,0x3e,0x2f + .byte 0x80,0x70,0x42,0x71,0x04,0x73,0xc6,0x72 + .byte 0x88,0x77,0x4a,0x76,0x0c,0x74,0xce,0x75 + .byte 0x90,0x7e,0x52,0x7f,0x14,0x7d,0xd6,0x7c + .byte 0x98,0x79,0x5a,0x78,0x1c,0x7a,0xde,0x7b + .byte 0xa0,0x6c,0x62,0x6d,0x24,0x6f,0xe6,0x6e + .byte 0xa8,0x6b,0x6a,0x6a,0x2c,0x68,0xee,0x69 + .byte 0xb0,0x62,0x72,0x63,0x34,0x61,0xf6,0x60 + .byte 0xb8,0x65,0x7a,0x64,0x3c,0x66,0xfe,0x67 + .byte 0xc0,0x48,0x02,0x49,0x44,0x4b,0x86,0x4a + .byte 0xc8,0x4f,0x0a,0x4e,0x4c,0x4c,0x8e,0x4d + .byte 0xd0,0x46,0x12,0x47,0x54,0x45,0x96,0x44 + .byte 0xd8,0x41,0x1a,0x40,0x5c,0x42,0x9e,0x43 + .byte 0xe0,0x54,0x22,0x55,0x64,0x57,0xa6,0x56 + .byte 0xe8,0x53,0x2a,0x52,0x6c,0x50,0xae,0x51 + .byte 0xf0,0x5a,0x32,0x5b,0x74,0x59,0xb6,0x58 + .byte 0xf8,0x5d,0x3a,0x5c,0x7c,0x5e,0xbe,0x5f + .byte 0x00,0xe1,0xc2,0xe0,0x84,0xe2,0x46,0xe3 + .byte 0x08,0xe6,0xca,0xe7,0x8c,0xe5,0x4e,0xe4 + .byte 0x10,0xef,0xd2,0xee,0x94,0xec,0x56,0xed + .byte 0x18,0xe8,0xda,0xe9,0x9c,0xeb,0x5e,0xea + .byte 0x20,0xfd,0xe2,0xfc,0xa4,0xfe,0x66,0xff + .byte 0x28,0xfa,0xea,0xfb,0xac,0xf9,0x6e,0xf8 + .byte 0x30,0xf3,0xf2,0xf2,0xb4,0xf0,0x76,0xf1 + .byte 0x38,0xf4,0xfa,0xf5,0xbc,0xf7,0x7e,0xf6 + .byte 0x40,0xd9,0x82,0xd8,0xc4,0xda,0x06,0xdb + .byte 0x48,0xde,0x8a,0xdf,0xcc,0xdd,0x0e,0xdc + .byte 0x50,0xd7,0x92,0xd6,0xd4,0xd4,0x16,0xd5 + .byte 0x58,0xd0,0x9a,0xd1,0xdc,0xd3,0x1e,0xd2 + .byte 0x60,0xc5,0xa2,0xc4,0xe4,0xc6,0x26,0xc7 + .byte 0x68,0xc2,0xaa,0xc3,0xec,0xc1,0x2e,0xc0 + .byte 0x70,0xcb,0xb2,0xca,0xf4,0xc8,0x36,0xc9 + .byte 0x78,0xcc,0xba,0xcd,0xfc,0xcf,0x3e,0xce + .byte 0x80,0x91,0x42,0x90,0x04,0x92,0xc6,0x93 + .byte 0x88,0x96,0x4a,0x97,0x0c,0x95,0xce,0x94 + .byte 0x90,0x9f,0x52,0x9e,0x14,0x9c,0xd6,0x9d + .byte 0x98,0x98,0x5a,0x99,0x1c,0x9b,0xde,0x9a + .byte 0xa0,0x8d,0x62,0x8c,0x24,0x8e,0xe6,0x8f + .byte 0xa8,0x8a,0x6a,0x8b,0x2c,0x89,0xee,0x88 + .byte 0xb0,0x83,0x72,0x82,0x34,0x80,0xf6,0x81 + .byte 0xb8,0x84,0x7a,0x85,0x3c,0x87,0xfe,0x86 + .byte 0xc0,0xa9,0x02,0xa8,0x44,0xaa,0x86,0xab + .byte 0xc8,0xae,0x0a,0xaf,0x4c,0xad,0x8e,0xac + .byte 0xd0,0xa7,0x12,0xa6,0x54,0xa4,0x96,0xa5 + .byte 0xd8,0xa0,0x1a,0xa1,0x5c,0xa3,0x9e,0xa2 + .byte 0xe0,0xb5,0x22,0xb4,0x64,0xb6,0xa6,0xb7 + .byte 0xe8,0xb2,0x2a,0xb3,0x6c,0xb1,0xae,0xb0 + .byte 0xf0,0xbb,0x32,0xba,0x74,0xb8,0xb6,0xb9 + .byte 0xf8,0xbc,0x3a,0xbd,0x7c,0xbf,0xbe,0xbe #ifndef __APPLE__ .text .globl GCM_gmult_len @@ -8588,6 +6733,9448 @@ L_GCM_gmult_len_start_block: #endif /* __APPLE__ */ #endif /* GCM_TABLE */ #endif /* HAVE_AESGCM */ +#ifdef WOLFSSL_PPC64_ASM_CRYPTO +#ifndef __APPLE__ + .text + .type L_AES_PPC64_crypto_sbox, %object + .size L_AES_PPC64_crypto_sbox, 256 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_AES_PPC64_crypto_sbox: + .byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5 + .byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76 + .byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0 + .byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0 + .byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc + .byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15 + .byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a + .byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75 + .byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0 + .byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84 + .byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b + .byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf + .byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85 + .byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8 + .byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5 + .byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2 + .byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17 + .byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73 + .byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88 + .byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb + .byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c + .byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79 + .byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9 + .byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08 + .byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6 + .byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a + .byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e + .byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e + .byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94 + .byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf + .byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68 + .byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16 +#ifndef __APPLE__ + .text + .type L_AES_PPC64_crypto_rcon, %object + .size L_AES_PPC64_crypto_rcon, 40 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_AES_PPC64_crypto_rcon: + .long 0x01000000,0x02000000,0x04000000,0x08000000 + .long 0x10000000,0x20000000,0x40000000,0x80000000 + .long 0x1b000000,0x36000000 +#if defined(WOLFSSL_AES_COUNTER) && defined(HAVE_AESGCM) +#ifndef __APPLE__ + .text + .type L_AES_PPC64_crypto_one, %object + .size L_AES_PPC64_crypto_one, 16 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_AES_PPC64_crypto_one: + .long 0x00000000,0x00000000,0x00000000,0x00000001 +#endif /* defined(WOLFSSL_AES_COUNTER) && defined(HAVE_AESGCM) */ + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_set_encrypt_key_crypto +.type AES_set_encrypt_key_crypto,@function +.align 16 +AES_set_encrypt_key_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_set_encrypt_key_crypto, .-AES_set_encrypt_key_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_set_encrypt_key_crypto +.p2align 4 +_AES_set_encrypt_key_crypto: +#endif /* __APPLE__ */ + stdu 1, -40(1) + mflr 0 + std 0, 32(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + addis 14, 2, L_AES_PPC64_crypto_sbox@toc@ha + addi 14, 14, L_AES_PPC64_crypto_sbox@toc@l + addis 15, 2, L_AES_PPC64_crypto_rcon@toc@ha + addi 15, 15, L_AES_PPC64_crypto_rcon@toc@l + cmplwi 4, 0x80 + beq L_AES_set_encrypt_key_crypto_128 + cmplwi 4, 0xc0 + beq L_AES_set_encrypt_key_crypto_192 + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + lwz 9, 16(3) + lwz 10, 20(3) + lwz 11, 24(3) + lwz 12, 28(3) + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + stw 9, 16(5) + stw 10, 20(5) + stw 11, 24(5) + stw 12, 28(5) + addi 5, 5, 32 + li 17, 6 + mtctr 17 +L_AES_set_encrypt_key_crypto_loop_256: + rlwinm 17, 12, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 12, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 12, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 12, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + addi 5, 5, 16 + rlwinm 17, 8, 8, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 8, 16, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 8, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 8, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + xor 9, 9, 16 + xor 10, 10, 9 + xor 11, 11, 10 + xor 12, 12, 11 + stw 9, 0(5) + stw 10, 4(5) + stw 11, 8(5) + stw 12, 12(5) + addi 5, 5, 16 + bdnz L_AES_set_encrypt_key_crypto_loop_256 + rlwinm 17, 12, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 12, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 12, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 12, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + addi 5, 5, 16 + b L_AES_set_encrypt_key_crypto_end +L_AES_set_encrypt_key_crypto_192: + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + lwz 9, 16(3) + lwz 10, 20(3) + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + stw 9, 16(5) + stw 10, 20(5) + addi 5, 5, 24 + li 17, 7 + mtctr 17 +L_AES_set_encrypt_key_crypto_loop_192: + rlwinm 17, 10, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 10, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 10, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 10, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + xor 9, 9, 8 + xor 10, 10, 9 + stw 9, 16(5) + stw 10, 20(5) + addi 5, 5, 24 + bdnz L_AES_set_encrypt_key_crypto_loop_192 + rlwinm 17, 10, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 10, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 10, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 10, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + b L_AES_set_encrypt_key_crypto_end +L_AES_set_encrypt_key_crypto_128: + lwz 0, 0(3) + lwz 6, 4(3) + lwz 7, 8(3) + lwz 8, 12(3) + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + addi 5, 5, 16 + li 17, 10 + mtctr 17 +L_AES_set_encrypt_key_crypto_loop_128: + rlwinm 17, 8, 16, 24, 31 + lbzx 17, 14, 17 + slwi 16, 17, 24 + rlwinm 17, 8, 24, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 16, 8, 15 + rlwinm 17, 8, 0, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 8, 16, 23 + rlwinm 17, 8, 8, 24, 31 + lbzx 17, 14, 17 + rlwimi 16, 17, 0, 24, 31 + lwz 17, 0(15) + addi 15, 15, 4 + xor 0, 0, 16 + xor 0, 0, 17 + xor 6, 6, 0 + xor 7, 7, 6 + xor 8, 8, 7 + stw 0, 0(5) + stw 6, 4(5) + stw 7, 8(5) + stw 8, 12(5) + addi 5, 5, 16 + bdnz L_AES_set_encrypt_key_crypto_loop_128 +L_AES_set_encrypt_key_crypto_end: + ld 0, 32(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + addi 1, 1, 40 + blr +#ifndef __APPLE__ + .size AES_set_encrypt_key_crypto,.-AES_set_encrypt_key_crypto +#endif /* __APPLE__ */ + .machine "pop" + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_invert_key_crypto +.type AES_invert_key_crypto,@function +.align 16 +AES_invert_key_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_invert_key_crypto, .-AES_invert_key_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_invert_key_crypto +.p2align 4 +_AES_invert_key_crypto: +#endif /* __APPLE__ */ + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + addi 5, 3, 0 + slwi 6, 4, 4 + add 6, 3, 6 + srwi 11, 4, 1 + mtctr 11 +L_AES_invert_key_crypto_loop: + ld 7, 0(5) + ld 8, 8(5) + ld 9, 0(6) + ld 10, 8(6) + std 9, 0(5) + std 10, 8(5) + std 7, 0(6) + std 8, 8(6) + addi 5, 5, 16 + addi 6, 6, -16 + bdnz L_AES_invert_key_crypto_loop + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + blr +#ifndef __APPLE__ + .size AES_invert_key_crypto,.-AES_invert_key_crypto +#endif /* __APPLE__ */ + .machine "pop" + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_ECB_encrypt_crypto +.type AES_ECB_encrypt_crypto,@function +.align 16 +AES_ECB_encrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_ECB_encrypt_crypto, .-AES_ECB_encrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_ECB_encrypt_crypto +.p2align 4 +_AES_ECB_encrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 48 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + cmplwi 7, 10 + beq L_AES_ECB_encrypt_crypto_128 + cmplwi 7, 12 + beq L_AES_ECB_encrypt_crypto_192 + addi 8, 6, 0 + lxvd2x 32, 0, 8 + addi 8, 8, 16 + lxvd2x 33, 0, 8 + addi 8, 8, 16 + lxvd2x 34, 0, 8 + addi 8, 8, 16 + lxvd2x 35, 0, 8 + addi 8, 8, 16 + lxvd2x 36, 0, 8 + addi 8, 8, 16 + lxvd2x 37, 0, 8 + addi 8, 8, 16 + lxvd2x 38, 0, 8 + addi 8, 8, 16 + lxvd2x 39, 0, 8 + addi 8, 8, 16 + lxvd2x 40, 0, 8 + addi 8, 8, 16 + lxvd2x 41, 0, 8 + addi 8, 8, 16 + lxvd2x 42, 0, 8 + addi 8, 8, 16 + lxvd2x 43, 0, 8 + addi 8, 8, 16 + lxvd2x 44, 0, 8 + addi 8, 8, 16 + lxvd2x 45, 0, 8 + addi 8, 8, 16 + lxvd2x 46, 0, 8 + addi 8, 8, 16 + cmpdi 5, 0x80 + blt L_AES_ECB_encrypt_crypto_256_blk4 +L_AES_ECB_encrypt_crypto_256_blk8: + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 19, 19, 12 + vcipher 20, 20, 12 + vcipher 21, 21, 12 + vcipher 22, 22, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipher 19, 19, 13 + vcipher 20, 20, 13 + vcipher 21, 21, 13 + vcipher 22, 22, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vcipherlast 19, 19, 14 + vcipherlast 20, 20, 14 + vcipherlast 21, 21, 14 + vcipherlast 22, 22, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_ECB_encrypt_crypto_256_blk8 +L_AES_ECB_encrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_ECB_encrypt_crypto_256_blk2 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_ECB_encrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_ECB_encrypt_crypto_256_blk1 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_ECB_encrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_ECB_encrypt_crypto_256_done + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipher 15, 15, 12 + vcipher 15, 15, 13 + vcipherlast 15, 15, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_ECB_encrypt_crypto_256_done: + b L_AES_ECB_encrypt_crypto_alldone +L_AES_ECB_encrypt_crypto_192: + addi 8, 6, 0 + lxvd2x 32, 0, 8 + addi 8, 8, 16 + lxvd2x 33, 0, 8 + addi 8, 8, 16 + lxvd2x 34, 0, 8 + addi 8, 8, 16 + lxvd2x 35, 0, 8 + addi 8, 8, 16 + lxvd2x 36, 0, 8 + addi 8, 8, 16 + lxvd2x 37, 0, 8 + addi 8, 8, 16 + lxvd2x 38, 0, 8 + addi 8, 8, 16 + lxvd2x 39, 0, 8 + addi 8, 8, 16 + lxvd2x 40, 0, 8 + addi 8, 8, 16 + lxvd2x 41, 0, 8 + addi 8, 8, 16 + lxvd2x 42, 0, 8 + addi 8, 8, 16 + lxvd2x 43, 0, 8 + addi 8, 8, 16 + lxvd2x 44, 0, 8 + addi 8, 8, 16 + cmpdi 5, 0x80 + blt L_AES_ECB_encrypt_crypto_192_blk4 +L_AES_ECB_encrypt_crypto_192_blk8: + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vcipherlast 19, 19, 12 + vcipherlast 20, 20, 12 + vcipherlast 21, 21, 12 + vcipherlast 22, 22, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_ECB_encrypt_crypto_192_blk8 +L_AES_ECB_encrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_ECB_encrypt_crypto_192_blk2 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_ECB_encrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_ECB_encrypt_crypto_192_blk1 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_ECB_encrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_ECB_encrypt_crypto_192_done + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipherlast 15, 15, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_ECB_encrypt_crypto_192_done: + b L_AES_ECB_encrypt_crypto_alldone +L_AES_ECB_encrypt_crypto_128: + addi 8, 6, 0 + lxvd2x 32, 0, 8 + addi 8, 8, 16 + lxvd2x 33, 0, 8 + addi 8, 8, 16 + lxvd2x 34, 0, 8 + addi 8, 8, 16 + lxvd2x 35, 0, 8 + addi 8, 8, 16 + lxvd2x 36, 0, 8 + addi 8, 8, 16 + lxvd2x 37, 0, 8 + addi 8, 8, 16 + lxvd2x 38, 0, 8 + addi 8, 8, 16 + lxvd2x 39, 0, 8 + addi 8, 8, 16 + lxvd2x 40, 0, 8 + addi 8, 8, 16 + lxvd2x 41, 0, 8 + addi 8, 8, 16 + lxvd2x 42, 0, 8 + addi 8, 8, 16 + cmpdi 5, 0x80 + blt L_AES_ECB_encrypt_crypto_128_blk4 +L_AES_ECB_encrypt_crypto_128_blk8: + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vcipherlast 19, 19, 10 + vcipherlast 20, 20, 10 + vcipherlast 21, 21, 10 + vcipherlast 22, 22, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_ECB_encrypt_crypto_128_blk8 +L_AES_ECB_encrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_ECB_encrypt_crypto_128_blk2 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_ECB_encrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_ECB_encrypt_crypto_128_blk1 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_ECB_encrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_ECB_encrypt_crypto_128_done + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipherlast 15, 15, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_ECB_encrypt_crypto_128_done: +L_AES_ECB_encrypt_crypto_alldone: + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + addi 1, 1, 48 + blr +#ifndef __APPLE__ + .size AES_ECB_encrypt_crypto,.-AES_ECB_encrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#ifdef HAVE_AES_DECRYPT + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_ECB_decrypt_crypto +.type AES_ECB_decrypt_crypto,@function +.align 16 +AES_ECB_decrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_ECB_decrypt_crypto, .-AES_ECB_decrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_ECB_decrypt_crypto +.p2align 4 +_AES_ECB_decrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 48 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + cmplwi 7, 10 + beq L_AES_ECB_decrypt_crypto_128 + cmplwi 7, 12 + beq L_AES_ECB_decrypt_crypto_192 + addi 8, 6, 0 + lxvd2x 32, 0, 8 + addi 8, 8, 16 + lxvd2x 33, 0, 8 + addi 8, 8, 16 + lxvd2x 34, 0, 8 + addi 8, 8, 16 + lxvd2x 35, 0, 8 + addi 8, 8, 16 + lxvd2x 36, 0, 8 + addi 8, 8, 16 + lxvd2x 37, 0, 8 + addi 8, 8, 16 + lxvd2x 38, 0, 8 + addi 8, 8, 16 + lxvd2x 39, 0, 8 + addi 8, 8, 16 + lxvd2x 40, 0, 8 + addi 8, 8, 16 + lxvd2x 41, 0, 8 + addi 8, 8, 16 + lxvd2x 42, 0, 8 + addi 8, 8, 16 + lxvd2x 43, 0, 8 + addi 8, 8, 16 + lxvd2x 44, 0, 8 + addi 8, 8, 16 + lxvd2x 45, 0, 8 + addi 8, 8, 16 + lxvd2x 46, 0, 8 + addi 8, 8, 16 + cmpdi 5, 0x80 + blt L_AES_ECB_decrypt_crypto_256_blk4 +L_AES_ECB_decrypt_crypto_256_blk8: + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 19, 19, 10 + vncipher 20, 20, 10 + vncipher 21, 21, 10 + vncipher 22, 22, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 19, 19, 11 + vncipher 20, 20, 11 + vncipher 21, 21, 11 + vncipher 22, 22, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 17, 17, 12 + vncipher 18, 18, 12 + vncipher 19, 19, 12 + vncipher 20, 20, 12 + vncipher 21, 21, 12 + vncipher 22, 22, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipher 17, 17, 13 + vncipher 18, 18, 13 + vncipher 19, 19, 13 + vncipher 20, 20, 13 + vncipher 21, 21, 13 + vncipher 22, 22, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vncipherlast 17, 17, 14 + vncipherlast 18, 18, 14 + vncipherlast 19, 19, 14 + vncipherlast 20, 20, 14 + vncipherlast 21, 21, 14 + vncipherlast 22, 22, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_ECB_decrypt_crypto_256_blk8 +L_AES_ECB_decrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_ECB_decrypt_crypto_256_blk2 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 17, 17, 12 + vncipher 18, 18, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipher 17, 17, 13 + vncipher 18, 18, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vncipherlast 17, 17, 14 + vncipherlast 18, 18, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_ECB_decrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_ECB_decrypt_crypto_256_blk1 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_ECB_decrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_ECB_decrypt_crypto_256_done + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipher 15, 15, 10 + vncipher 15, 15, 11 + vncipher 15, 15, 12 + vncipher 15, 15, 13 + vncipherlast 15, 15, 14 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_ECB_decrypt_crypto_256_done: + b L_AES_ECB_decrypt_crypto_alldone +L_AES_ECB_decrypt_crypto_192: + addi 8, 6, 0 + lxvd2x 32, 0, 8 + addi 8, 8, 16 + lxvd2x 33, 0, 8 + addi 8, 8, 16 + lxvd2x 34, 0, 8 + addi 8, 8, 16 + lxvd2x 35, 0, 8 + addi 8, 8, 16 + lxvd2x 36, 0, 8 + addi 8, 8, 16 + lxvd2x 37, 0, 8 + addi 8, 8, 16 + lxvd2x 38, 0, 8 + addi 8, 8, 16 + lxvd2x 39, 0, 8 + addi 8, 8, 16 + lxvd2x 40, 0, 8 + addi 8, 8, 16 + lxvd2x 41, 0, 8 + addi 8, 8, 16 + lxvd2x 42, 0, 8 + addi 8, 8, 16 + lxvd2x 43, 0, 8 + addi 8, 8, 16 + lxvd2x 44, 0, 8 + addi 8, 8, 16 + cmpdi 5, 0x80 + blt L_AES_ECB_decrypt_crypto_192_blk4 +L_AES_ECB_decrypt_crypto_192_blk8: + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 19, 19, 10 + vncipher 20, 20, 10 + vncipher 21, 21, 10 + vncipher 22, 22, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 19, 19, 11 + vncipher 20, 20, 11 + vncipher 21, 21, 11 + vncipher 22, 22, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vncipherlast 17, 17, 12 + vncipherlast 18, 18, 12 + vncipherlast 19, 19, 12 + vncipherlast 20, 20, 12 + vncipherlast 21, 21, 12 + vncipherlast 22, 22, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_ECB_decrypt_crypto_192_blk8 +L_AES_ECB_decrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_ECB_decrypt_crypto_192_blk2 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vncipherlast 17, 17, 12 + vncipherlast 18, 18, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_ECB_decrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_ECB_decrypt_crypto_192_blk1 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_ECB_decrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_ECB_decrypt_crypto_192_done + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipher 15, 15, 10 + vncipher 15, 15, 11 + vncipherlast 15, 15, 12 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_ECB_decrypt_crypto_192_done: + b L_AES_ECB_decrypt_crypto_alldone +L_AES_ECB_decrypt_crypto_128: + addi 8, 6, 0 + lxvd2x 32, 0, 8 + addi 8, 8, 16 + lxvd2x 33, 0, 8 + addi 8, 8, 16 + lxvd2x 34, 0, 8 + addi 8, 8, 16 + lxvd2x 35, 0, 8 + addi 8, 8, 16 + lxvd2x 36, 0, 8 + addi 8, 8, 16 + lxvd2x 37, 0, 8 + addi 8, 8, 16 + lxvd2x 38, 0, 8 + addi 8, 8, 16 + lxvd2x 39, 0, 8 + addi 8, 8, 16 + lxvd2x 40, 0, 8 + addi 8, 8, 16 + lxvd2x 41, 0, 8 + addi 8, 8, 16 + lxvd2x 42, 0, 8 + addi 8, 8, 16 + cmpdi 5, 0x80 + blt L_AES_ECB_decrypt_crypto_128_blk4 +L_AES_ECB_decrypt_crypto_128_blk8: + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vncipherlast 17, 17, 10 + vncipherlast 18, 18, 10 + vncipherlast 19, 19, 10 + vncipherlast 20, 20, 10 + vncipherlast 21, 21, 10 + vncipherlast 22, 22, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_ECB_decrypt_crypto_128_blk8 +L_AES_ECB_decrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_ECB_decrypt_crypto_128_blk2 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vncipherlast 17, 17, 10 + vncipherlast 18, 18, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_ECB_decrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_ECB_decrypt_crypto_128_blk1 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_ECB_decrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_ECB_decrypt_crypto_128_done + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipherlast 15, 15, 10 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_ECB_decrypt_crypto_128_done: +L_AES_ECB_decrypt_crypto_alldone: + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + addi 1, 1, 48 + blr +#ifndef __APPLE__ + .size AES_ECB_decrypt_crypto,.-AES_ECB_decrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* HAVE_AES_DECRYPT */ +#ifdef HAVE_AES_CBC + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_CBC_encrypt_crypto +.type AES_CBC_encrypt_crypto,@function +.align 16 +AES_CBC_encrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_CBC_encrypt_crypto, .-AES_CBC_encrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_CBC_encrypt_crypto +.p2align 4 +_AES_CBC_encrypt_crypto: +#endif /* __APPLE__ */ + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + lxvd2x 47, 0, 8 + cmplwi 7, 10 + beq L_AES_CBC_encrypt_crypto_128 + cmplwi 7, 12 + beq L_AES_CBC_encrypt_crypto_192 + addi 9, 6, 0 + lxvd2x 32, 0, 9 + addi 9, 9, 16 + lxvd2x 33, 0, 9 + addi 9, 9, 16 + lxvd2x 34, 0, 9 + addi 9, 9, 16 + lxvd2x 35, 0, 9 + addi 9, 9, 16 + lxvd2x 36, 0, 9 + addi 9, 9, 16 + lxvd2x 37, 0, 9 + addi 9, 9, 16 + lxvd2x 38, 0, 9 + addi 9, 9, 16 + lxvd2x 39, 0, 9 + addi 9, 9, 16 + lxvd2x 40, 0, 9 + addi 9, 9, 16 + lxvd2x 41, 0, 9 + addi 9, 9, 16 + lxvd2x 42, 0, 9 + addi 9, 9, 16 + lxvd2x 43, 0, 9 + addi 9, 9, 16 + lxvd2x 44, 0, 9 + addi 9, 9, 16 + lxvd2x 45, 0, 9 + addi 9, 9, 16 + lxvd2x 46, 0, 9 + addi 9, 9, 16 +L_AES_CBC_encrypt_crypto_256_block: + lxvd2x 48, 0, 3 + vxor 15, 15, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipher 15, 15, 12 + vcipher 15, 15, 13 + vcipherlast 15, 15, 14 + stxvd2x 47, 0, 4 + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_CBC_encrypt_crypto_256_block + b L_AES_CBC_encrypt_crypto_alldone +L_AES_CBC_encrypt_crypto_192: + addi 9, 6, 0 + lxvd2x 32, 0, 9 + addi 9, 9, 16 + lxvd2x 33, 0, 9 + addi 9, 9, 16 + lxvd2x 34, 0, 9 + addi 9, 9, 16 + lxvd2x 35, 0, 9 + addi 9, 9, 16 + lxvd2x 36, 0, 9 + addi 9, 9, 16 + lxvd2x 37, 0, 9 + addi 9, 9, 16 + lxvd2x 38, 0, 9 + addi 9, 9, 16 + lxvd2x 39, 0, 9 + addi 9, 9, 16 + lxvd2x 40, 0, 9 + addi 9, 9, 16 + lxvd2x 41, 0, 9 + addi 9, 9, 16 + lxvd2x 42, 0, 9 + addi 9, 9, 16 + lxvd2x 43, 0, 9 + addi 9, 9, 16 + lxvd2x 44, 0, 9 + addi 9, 9, 16 +L_AES_CBC_encrypt_crypto_192_block: + lxvd2x 48, 0, 3 + vxor 15, 15, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipherlast 15, 15, 12 + stxvd2x 47, 0, 4 + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_CBC_encrypt_crypto_192_block + b L_AES_CBC_encrypt_crypto_alldone +L_AES_CBC_encrypt_crypto_128: + addi 9, 6, 0 + lxvd2x 32, 0, 9 + addi 9, 9, 16 + lxvd2x 33, 0, 9 + addi 9, 9, 16 + lxvd2x 34, 0, 9 + addi 9, 9, 16 + lxvd2x 35, 0, 9 + addi 9, 9, 16 + lxvd2x 36, 0, 9 + addi 9, 9, 16 + lxvd2x 37, 0, 9 + addi 9, 9, 16 + lxvd2x 38, 0, 9 + addi 9, 9, 16 + lxvd2x 39, 0, 9 + addi 9, 9, 16 + lxvd2x 40, 0, 9 + addi 9, 9, 16 + lxvd2x 41, 0, 9 + addi 9, 9, 16 + lxvd2x 42, 0, 9 + addi 9, 9, 16 +L_AES_CBC_encrypt_crypto_128_block: + lxvd2x 48, 0, 3 + vxor 15, 15, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipherlast 15, 15, 10 + stxvd2x 47, 0, 4 + addi 3, 3, 16 + addi 4, 4, 16 + addic. 5, 5, -16 + bne L_AES_CBC_encrypt_crypto_128_block +L_AES_CBC_encrypt_crypto_alldone: + stxvd2x 47, 0, 8 + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + blr +#ifndef __APPLE__ + .size AES_CBC_encrypt_crypto,.-AES_CBC_encrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#ifdef HAVE_AES_DECRYPT + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_CBC_decrypt_crypto +.type AES_CBC_decrypt_crypto,@function +.align 16 +AES_CBC_decrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_CBC_decrypt_crypto, .-AES_CBC_decrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_CBC_decrypt_crypto +.p2align 4 +_AES_CBC_decrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + lxvd2x 63, 0, 8 + cmplwi 7, 10 + beq L_AES_CBC_decrypt_crypto_128 + cmplwi 7, 12 + beq L_AES_CBC_decrypt_crypto_192 + addi 9, 6, 0 + lxvd2x 32, 0, 9 + addi 9, 9, 16 + lxvd2x 33, 0, 9 + addi 9, 9, 16 + lxvd2x 34, 0, 9 + addi 9, 9, 16 + lxvd2x 35, 0, 9 + addi 9, 9, 16 + lxvd2x 36, 0, 9 + addi 9, 9, 16 + lxvd2x 37, 0, 9 + addi 9, 9, 16 + lxvd2x 38, 0, 9 + addi 9, 9, 16 + lxvd2x 39, 0, 9 + addi 9, 9, 16 + lxvd2x 40, 0, 9 + addi 9, 9, 16 + lxvd2x 41, 0, 9 + addi 9, 9, 16 + lxvd2x 42, 0, 9 + addi 9, 9, 16 + lxvd2x 43, 0, 9 + addi 9, 9, 16 + lxvd2x 44, 0, 9 + addi 9, 9, 16 + lxvd2x 45, 0, 9 + addi 9, 9, 16 + lxvd2x 46, 0, 9 + addi 9, 9, 16 + cmpdi 5, 0x80 + blt L_AES_CBC_decrypt_crypto_256_blk4 +L_AES_CBC_decrypt_crypto_256_blk8: + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 49, 0, 3 + vor 25, 17, 17 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 50, 0, 3 + vor 26, 18, 18 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 51, 0, 3 + vor 27, 19, 19 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 52, 0, 3 + vor 28, 20, 20 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 53, 0, 3 + vor 29, 21, 21 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 54, 0, 3 + vor 30, 22, 22 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 19, 19, 10 + vncipher 20, 20, 10 + vncipher 21, 21, 10 + vncipher 22, 22, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 19, 19, 11 + vncipher 20, 20, 11 + vncipher 21, 21, 11 + vncipher 22, 22, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 17, 17, 12 + vncipher 18, 18, 12 + vncipher 19, 19, 12 + vncipher 20, 20, 12 + vncipher 21, 21, 12 + vncipher 22, 22, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipher 17, 17, 13 + vncipher 18, 18, 13 + vncipher 19, 19, 13 + vncipher 20, 20, 13 + vncipher 21, 21, 13 + vncipher 22, 22, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vncipherlast 17, 17, 14 + vncipherlast 18, 18, 14 + vncipherlast 19, 19, 14 + vncipherlast 20, 20, 14 + vncipherlast 21, 21, 14 + vncipherlast 22, 22, 14 + vxor 15, 15, 31 + vxor 16, 16, 23 + vxor 17, 17, 24 + vxor 18, 18, 25 + vxor 19, 19, 26 + vxor 20, 20, 27 + vxor 21, 21, 28 + vxor 22, 22, 29 + vor 31, 30, 30 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_CBC_decrypt_crypto_256_blk8 +L_AES_CBC_decrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_CBC_decrypt_crypto_256_blk2 + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 49, 0, 3 + vor 25, 17, 17 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 50, 0, 3 + vor 26, 18, 18 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 17, 17, 12 + vncipher 18, 18, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipher 17, 17, 13 + vncipher 18, 18, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vncipherlast 17, 17, 14 + vncipherlast 18, 18, 14 + vxor 15, 15, 31 + vxor 16, 16, 23 + vxor 17, 17, 24 + vxor 18, 18, 25 + vor 31, 26, 26 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_CBC_decrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_CBC_decrypt_crypto_256_blk1 + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vxor 15, 15, 31 + vxor 16, 16, 23 + vor 31, 24, 24 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_CBC_decrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_CBC_decrypt_crypto_256_done + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipher 15, 15, 10 + vncipher 15, 15, 11 + vncipher 15, 15, 12 + vncipher 15, 15, 13 + vncipherlast 15, 15, 14 + vxor 15, 15, 31 + vor 31, 23, 23 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_CBC_decrypt_crypto_256_done: + b L_AES_CBC_decrypt_crypto_alldone +L_AES_CBC_decrypt_crypto_192: + addi 9, 6, 0 + lxvd2x 32, 0, 9 + addi 9, 9, 16 + lxvd2x 33, 0, 9 + addi 9, 9, 16 + lxvd2x 34, 0, 9 + addi 9, 9, 16 + lxvd2x 35, 0, 9 + addi 9, 9, 16 + lxvd2x 36, 0, 9 + addi 9, 9, 16 + lxvd2x 37, 0, 9 + addi 9, 9, 16 + lxvd2x 38, 0, 9 + addi 9, 9, 16 + lxvd2x 39, 0, 9 + addi 9, 9, 16 + lxvd2x 40, 0, 9 + addi 9, 9, 16 + lxvd2x 41, 0, 9 + addi 9, 9, 16 + lxvd2x 42, 0, 9 + addi 9, 9, 16 + lxvd2x 43, 0, 9 + addi 9, 9, 16 + lxvd2x 44, 0, 9 + addi 9, 9, 16 + cmpdi 5, 0x80 + blt L_AES_CBC_decrypt_crypto_192_blk4 +L_AES_CBC_decrypt_crypto_192_blk8: + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 49, 0, 3 + vor 25, 17, 17 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 50, 0, 3 + vor 26, 18, 18 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 51, 0, 3 + vor 27, 19, 19 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 52, 0, 3 + vor 28, 20, 20 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 53, 0, 3 + vor 29, 21, 21 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 54, 0, 3 + vor 30, 22, 22 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 19, 19, 10 + vncipher 20, 20, 10 + vncipher 21, 21, 10 + vncipher 22, 22, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 19, 19, 11 + vncipher 20, 20, 11 + vncipher 21, 21, 11 + vncipher 22, 22, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vncipherlast 17, 17, 12 + vncipherlast 18, 18, 12 + vncipherlast 19, 19, 12 + vncipherlast 20, 20, 12 + vncipherlast 21, 21, 12 + vncipherlast 22, 22, 12 + vxor 15, 15, 31 + vxor 16, 16, 23 + vxor 17, 17, 24 + vxor 18, 18, 25 + vxor 19, 19, 26 + vxor 20, 20, 27 + vxor 21, 21, 28 + vxor 22, 22, 29 + vor 31, 30, 30 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_CBC_decrypt_crypto_192_blk8 +L_AES_CBC_decrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_CBC_decrypt_crypto_192_blk2 + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 49, 0, 3 + vor 25, 17, 17 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 50, 0, 3 + vor 26, 18, 18 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vncipherlast 17, 17, 12 + vncipherlast 18, 18, 12 + vxor 15, 15, 31 + vxor 16, 16, 23 + vxor 17, 17, 24 + vxor 18, 18, 25 + vor 31, 26, 26 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_CBC_decrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_CBC_decrypt_crypto_192_blk1 + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vxor 15, 15, 31 + vxor 16, 16, 23 + vor 31, 24, 24 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_CBC_decrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_CBC_decrypt_crypto_192_done + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipher 15, 15, 10 + vncipher 15, 15, 11 + vncipherlast 15, 15, 12 + vxor 15, 15, 31 + vor 31, 23, 23 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_CBC_decrypt_crypto_192_done: + b L_AES_CBC_decrypt_crypto_alldone +L_AES_CBC_decrypt_crypto_128: + addi 9, 6, 0 + lxvd2x 32, 0, 9 + addi 9, 9, 16 + lxvd2x 33, 0, 9 + addi 9, 9, 16 + lxvd2x 34, 0, 9 + addi 9, 9, 16 + lxvd2x 35, 0, 9 + addi 9, 9, 16 + lxvd2x 36, 0, 9 + addi 9, 9, 16 + lxvd2x 37, 0, 9 + addi 9, 9, 16 + lxvd2x 38, 0, 9 + addi 9, 9, 16 + lxvd2x 39, 0, 9 + addi 9, 9, 16 + lxvd2x 40, 0, 9 + addi 9, 9, 16 + lxvd2x 41, 0, 9 + addi 9, 9, 16 + lxvd2x 42, 0, 9 + addi 9, 9, 16 + cmpdi 5, 0x80 + blt L_AES_CBC_decrypt_crypto_128_blk4 +L_AES_CBC_decrypt_crypto_128_blk8: + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 49, 0, 3 + vor 25, 17, 17 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 50, 0, 3 + vor 26, 18, 18 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 51, 0, 3 + vor 27, 19, 19 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 52, 0, 3 + vor 28, 20, 20 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 53, 0, 3 + vor 29, 21, 21 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 54, 0, 3 + vor 30, 22, 22 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vncipherlast 17, 17, 10 + vncipherlast 18, 18, 10 + vncipherlast 19, 19, 10 + vncipherlast 20, 20, 10 + vncipherlast 21, 21, 10 + vncipherlast 22, 22, 10 + vxor 15, 15, 31 + vxor 16, 16, 23 + vxor 17, 17, 24 + vxor 18, 18, 25 + vxor 19, 19, 26 + vxor 20, 20, 27 + vxor 21, 21, 28 + vxor 22, 22, 29 + vor 31, 30, 30 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_CBC_decrypt_crypto_128_blk8 +L_AES_CBC_decrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_CBC_decrypt_crypto_128_blk2 + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 49, 0, 3 + vor 25, 17, 17 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 50, 0, 3 + vor 26, 18, 18 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vncipherlast 17, 17, 10 + vncipherlast 18, 18, 10 + vxor 15, 15, 31 + vxor 16, 16, 23 + vxor 17, 17, 24 + vxor 18, 18, 25 + vor 31, 26, 26 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_CBC_decrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_CBC_decrypt_crypto_128_blk1 + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + lxvd2x 48, 0, 3 + vor 24, 16, 16 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vxor 15, 15, 31 + vxor 16, 16, 23 + vor 31, 24, 24 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_CBC_decrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_CBC_decrypt_crypto_128_done + lxvd2x 47, 0, 3 + vor 23, 15, 15 /* codespell:ignore vor */ + addi 3, 3, 16 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipherlast 15, 15, 10 + vxor 15, 15, 31 + vor 31, 23, 23 /* codespell:ignore vor */ + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_CBC_decrypt_crypto_128_done: +L_AES_CBC_decrypt_crypto_alldone: + stxvd2x 63, 0, 8 + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size AES_CBC_decrypt_crypto,.-AES_CBC_decrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* HAVE_AES_DECRYPT */ +#endif /* HAVE_AES_CBC */ +#ifdef WOLFSSL_AES_COUNTER + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_CTR_encrypt_crypto +.type AES_CTR_encrypt_crypto,@function +.align 16 +AES_CTR_encrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_CTR_encrypt_crypto, .-AES_CTR_encrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_CTR_encrypt_crypto +.p2align 4 +_AES_CTR_encrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + addis 9, 2, L_AES_PPC64_crypto_one@toc@ha + addi 9, 9, L_AES_PPC64_crypto_one@toc@l + lxvd2x 63, 0, 9 + cmplwi 7, 10 + beq L_AES_CTR_encrypt_crypto_128 + cmplwi 7, 12 + beq L_AES_CTR_encrypt_crypto_192 + addi 10, 6, 0 + lxvd2x 32, 0, 10 + addi 10, 10, 16 + lxvd2x 33, 0, 10 + addi 10, 10, 16 + lxvd2x 34, 0, 10 + addi 10, 10, 16 + lxvd2x 35, 0, 10 + addi 10, 10, 16 + lxvd2x 36, 0, 10 + addi 10, 10, 16 + lxvd2x 37, 0, 10 + addi 10, 10, 16 + lxvd2x 38, 0, 10 + addi 10, 10, 16 + lxvd2x 39, 0, 10 + addi 10, 10, 16 + lxvd2x 40, 0, 10 + addi 10, 10, 16 + lxvd2x 41, 0, 10 + addi 10, 10, 16 + lxvd2x 42, 0, 10 + addi 10, 10, 16 + lxvd2x 43, 0, 10 + addi 10, 10, 16 + lxvd2x 44, 0, 10 + addi 10, 10, 16 + lxvd2x 45, 0, 10 + addi 10, 10, 16 + lxvd2x 46, 0, 10 + addi 10, 10, 16 + cmpdi 5, 0x80 + blt L_AES_CTR_encrypt_crypto_256_blk4 +L_AES_CTR_encrypt_crypto_256_blk8: + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 17, 16, 31 + vadduqm 18, 17, 31 + vadduqm 19, 18, 31 + vadduqm 20, 19, 31 + vadduqm 21, 20, 31 + vadduqm 22, 21, 31 + vadduqm 23, 22, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + lxvd2x 59, 0, 3 + addi 3, 3, 16 + lxvd2x 60, 0, 3 + addi 3, 3, 16 + lxvd2x 61, 0, 3 + addi 3, 3, 16 + lxvd2x 62, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 19, 19, 12 + vcipher 20, 20, 12 + vcipher 21, 21, 12 + vcipher 22, 22, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipher 19, 19, 13 + vcipher 20, 20, 13 + vcipher 21, 21, 13 + vcipher 22, 22, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vcipherlast 19, 19, 14 + vcipherlast 20, 20, 14 + vcipherlast 21, 21, 14 + vcipherlast 22, 22, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_CTR_encrypt_crypto_256_blk8 +L_AES_CTR_encrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_CTR_encrypt_crypto_256_blk2 + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 17, 16, 31 + vadduqm 18, 17, 31 + vadduqm 23, 18, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_CTR_encrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_CTR_encrypt_crypto_256_blk1 + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 23, 16, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_CTR_encrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_CTR_encrypt_crypto_256_done + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 23, 15, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipher 15, 15, 12 + vcipher 15, 15, 13 + vcipherlast 15, 15, 14 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_CTR_encrypt_crypto_256_done: + b L_AES_CTR_encrypt_crypto_alldone +L_AES_CTR_encrypt_crypto_192: + addi 10, 6, 0 + lxvd2x 32, 0, 10 + addi 10, 10, 16 + lxvd2x 33, 0, 10 + addi 10, 10, 16 + lxvd2x 34, 0, 10 + addi 10, 10, 16 + lxvd2x 35, 0, 10 + addi 10, 10, 16 + lxvd2x 36, 0, 10 + addi 10, 10, 16 + lxvd2x 37, 0, 10 + addi 10, 10, 16 + lxvd2x 38, 0, 10 + addi 10, 10, 16 + lxvd2x 39, 0, 10 + addi 10, 10, 16 + lxvd2x 40, 0, 10 + addi 10, 10, 16 + lxvd2x 41, 0, 10 + addi 10, 10, 16 + lxvd2x 42, 0, 10 + addi 10, 10, 16 + lxvd2x 43, 0, 10 + addi 10, 10, 16 + lxvd2x 44, 0, 10 + addi 10, 10, 16 + cmpdi 5, 0x80 + blt L_AES_CTR_encrypt_crypto_192_blk4 +L_AES_CTR_encrypt_crypto_192_blk8: + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 17, 16, 31 + vadduqm 18, 17, 31 + vadduqm 19, 18, 31 + vadduqm 20, 19, 31 + vadduqm 21, 20, 31 + vadduqm 22, 21, 31 + vadduqm 23, 22, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + lxvd2x 59, 0, 3 + addi 3, 3, 16 + lxvd2x 60, 0, 3 + addi 3, 3, 16 + lxvd2x 61, 0, 3 + addi 3, 3, 16 + lxvd2x 62, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vcipherlast 19, 19, 12 + vcipherlast 20, 20, 12 + vcipherlast 21, 21, 12 + vcipherlast 22, 22, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_CTR_encrypt_crypto_192_blk8 +L_AES_CTR_encrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_CTR_encrypt_crypto_192_blk2 + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 17, 16, 31 + vadduqm 18, 17, 31 + vadduqm 23, 18, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_CTR_encrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_CTR_encrypt_crypto_192_blk1 + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 23, 16, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_CTR_encrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_CTR_encrypt_crypto_192_done + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 23, 15, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipherlast 15, 15, 12 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_CTR_encrypt_crypto_192_done: + b L_AES_CTR_encrypt_crypto_alldone +L_AES_CTR_encrypt_crypto_128: + addi 10, 6, 0 + lxvd2x 32, 0, 10 + addi 10, 10, 16 + lxvd2x 33, 0, 10 + addi 10, 10, 16 + lxvd2x 34, 0, 10 + addi 10, 10, 16 + lxvd2x 35, 0, 10 + addi 10, 10, 16 + lxvd2x 36, 0, 10 + addi 10, 10, 16 + lxvd2x 37, 0, 10 + addi 10, 10, 16 + lxvd2x 38, 0, 10 + addi 10, 10, 16 + lxvd2x 39, 0, 10 + addi 10, 10, 16 + lxvd2x 40, 0, 10 + addi 10, 10, 16 + lxvd2x 41, 0, 10 + addi 10, 10, 16 + lxvd2x 42, 0, 10 + addi 10, 10, 16 + cmpdi 5, 0x80 + blt L_AES_CTR_encrypt_crypto_128_blk4 +L_AES_CTR_encrypt_crypto_128_blk8: + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 17, 16, 31 + vadduqm 18, 17, 31 + vadduqm 19, 18, 31 + vadduqm 20, 19, 31 + vadduqm 21, 20, 31 + vadduqm 22, 21, 31 + vadduqm 23, 22, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + lxvd2x 59, 0, 3 + addi 3, 3, 16 + lxvd2x 60, 0, 3 + addi 3, 3, 16 + lxvd2x 61, 0, 3 + addi 3, 3, 16 + lxvd2x 62, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vcipherlast 19, 19, 10 + vcipherlast 20, 20, 10 + vcipherlast 21, 21, 10 + vcipherlast 22, 22, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_CTR_encrypt_crypto_128_blk8 +L_AES_CTR_encrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_CTR_encrypt_crypto_128_blk2 + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 17, 16, 31 + vadduqm 18, 17, 31 + vadduqm 23, 18, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_CTR_encrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_CTR_encrypt_crypto_128_blk1 + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 16, 15, 31 + vadduqm 23, 16, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_CTR_encrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_CTR_encrypt_crypto_128_done + lxvd2x 55, 0, 8 + vor 15, 23, 23 /* codespell:ignore vor */ + vadduqm 23, 15, 31 + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipherlast 15, 15, 10 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_CTR_encrypt_crypto_128_done: +L_AES_CTR_encrypt_crypto_alldone: + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size AES_CTR_encrypt_crypto,.-AES_CTR_encrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* WOLFSSL_AES_COUNTER */ +#ifdef HAVE_AESGCM + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_GCM_encrypt_crypto +.type AES_GCM_encrypt_crypto,@function +.align 16 +AES_GCM_encrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_GCM_encrypt_crypto, .-AES_GCM_encrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_GCM_encrypt_crypto +.p2align 4 +_AES_GCM_encrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + addis 9, 2, L_AES_PPC64_crypto_one@toc@ha + addi 9, 9, L_AES_PPC64_crypto_one@toc@l + lxvd2x 63, 0, 9 + cmplwi 7, 10 + beq L_AES_GCM_encrypt_crypto_128 + cmplwi 7, 12 + beq L_AES_GCM_encrypt_crypto_192 + addi 10, 6, 0 + lxvd2x 32, 0, 10 + addi 10, 10, 16 + lxvd2x 33, 0, 10 + addi 10, 10, 16 + lxvd2x 34, 0, 10 + addi 10, 10, 16 + lxvd2x 35, 0, 10 + addi 10, 10, 16 + lxvd2x 36, 0, 10 + addi 10, 10, 16 + lxvd2x 37, 0, 10 + addi 10, 10, 16 + lxvd2x 38, 0, 10 + addi 10, 10, 16 + lxvd2x 39, 0, 10 + addi 10, 10, 16 + lxvd2x 40, 0, 10 + addi 10, 10, 16 + lxvd2x 41, 0, 10 + addi 10, 10, 16 + lxvd2x 42, 0, 10 + addi 10, 10, 16 + lxvd2x 43, 0, 10 + addi 10, 10, 16 + lxvd2x 44, 0, 10 + addi 10, 10, 16 + lxvd2x 45, 0, 10 + addi 10, 10, 16 + lxvd2x 46, 0, 10 + addi 10, 10, 16 + cmpdi 5, 0x80 + blt L_AES_GCM_encrypt_crypto_256_blk4 +L_AES_GCM_encrypt_crypto_256_blk8: + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vadduwm 17, 16, 31 + vadduwm 18, 17, 31 + vadduwm 19, 18, 31 + vadduwm 20, 19, 31 + vadduwm 21, 20, 31 + vadduwm 22, 21, 31 + vor 23, 22, 22 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + lxvd2x 59, 0, 3 + addi 3, 3, 16 + lxvd2x 60, 0, 3 + addi 3, 3, 16 + lxvd2x 61, 0, 3 + addi 3, 3, 16 + lxvd2x 62, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 19, 19, 12 + vcipher 20, 20, 12 + vcipher 21, 21, 12 + vcipher 22, 22, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipher 19, 19, 13 + vcipher 20, 20, 13 + vcipher 21, 21, 13 + vcipher 22, 22, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vcipherlast 19, 19, 14 + vcipherlast 20, 20, 14 + vcipherlast 21, 21, 14 + vcipherlast 22, 22, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_GCM_encrypt_crypto_256_blk8 +L_AES_GCM_encrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_GCM_encrypt_crypto_256_blk2 + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vadduwm 17, 16, 31 + vadduwm 18, 17, 31 + vor 23, 18, 18 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_GCM_encrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_GCM_encrypt_crypto_256_blk1 + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vor 23, 16, 16 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_GCM_encrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_GCM_encrypt_crypto_256_done + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vor 23, 15, 15 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipher 15, 15, 12 + vcipher 15, 15, 13 + vcipherlast 15, 15, 14 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_GCM_encrypt_crypto_256_done: + b L_AES_GCM_encrypt_crypto_alldone +L_AES_GCM_encrypt_crypto_192: + addi 10, 6, 0 + lxvd2x 32, 0, 10 + addi 10, 10, 16 + lxvd2x 33, 0, 10 + addi 10, 10, 16 + lxvd2x 34, 0, 10 + addi 10, 10, 16 + lxvd2x 35, 0, 10 + addi 10, 10, 16 + lxvd2x 36, 0, 10 + addi 10, 10, 16 + lxvd2x 37, 0, 10 + addi 10, 10, 16 + lxvd2x 38, 0, 10 + addi 10, 10, 16 + lxvd2x 39, 0, 10 + addi 10, 10, 16 + lxvd2x 40, 0, 10 + addi 10, 10, 16 + lxvd2x 41, 0, 10 + addi 10, 10, 16 + lxvd2x 42, 0, 10 + addi 10, 10, 16 + lxvd2x 43, 0, 10 + addi 10, 10, 16 + lxvd2x 44, 0, 10 + addi 10, 10, 16 + cmpdi 5, 0x80 + blt L_AES_GCM_encrypt_crypto_192_blk4 +L_AES_GCM_encrypt_crypto_192_blk8: + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vadduwm 17, 16, 31 + vadduwm 18, 17, 31 + vadduwm 19, 18, 31 + vadduwm 20, 19, 31 + vadduwm 21, 20, 31 + vadduwm 22, 21, 31 + vor 23, 22, 22 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + lxvd2x 59, 0, 3 + addi 3, 3, 16 + lxvd2x 60, 0, 3 + addi 3, 3, 16 + lxvd2x 61, 0, 3 + addi 3, 3, 16 + lxvd2x 62, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vcipherlast 19, 19, 12 + vcipherlast 20, 20, 12 + vcipherlast 21, 21, 12 + vcipherlast 22, 22, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_GCM_encrypt_crypto_192_blk8 +L_AES_GCM_encrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_GCM_encrypt_crypto_192_blk2 + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vadduwm 17, 16, 31 + vadduwm 18, 17, 31 + vor 23, 18, 18 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_GCM_encrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_GCM_encrypt_crypto_192_blk1 + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vor 23, 16, 16 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_GCM_encrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_GCM_encrypt_crypto_192_done + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vor 23, 15, 15 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipherlast 15, 15, 12 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_GCM_encrypt_crypto_192_done: + b L_AES_GCM_encrypt_crypto_alldone +L_AES_GCM_encrypt_crypto_128: + addi 10, 6, 0 + lxvd2x 32, 0, 10 + addi 10, 10, 16 + lxvd2x 33, 0, 10 + addi 10, 10, 16 + lxvd2x 34, 0, 10 + addi 10, 10, 16 + lxvd2x 35, 0, 10 + addi 10, 10, 16 + lxvd2x 36, 0, 10 + addi 10, 10, 16 + lxvd2x 37, 0, 10 + addi 10, 10, 16 + lxvd2x 38, 0, 10 + addi 10, 10, 16 + lxvd2x 39, 0, 10 + addi 10, 10, 16 + lxvd2x 40, 0, 10 + addi 10, 10, 16 + lxvd2x 41, 0, 10 + addi 10, 10, 16 + lxvd2x 42, 0, 10 + addi 10, 10, 16 + cmpdi 5, 0x80 + blt L_AES_GCM_encrypt_crypto_128_blk4 +L_AES_GCM_encrypt_crypto_128_blk8: + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vadduwm 17, 16, 31 + vadduwm 18, 17, 31 + vadduwm 19, 18, 31 + vadduwm 20, 19, 31 + vadduwm 21, 20, 31 + vadduwm 22, 21, 31 + vor 23, 22, 22 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + lxvd2x 59, 0, 3 + addi 3, 3, 16 + lxvd2x 60, 0, 3 + addi 3, 3, 16 + lxvd2x 61, 0, 3 + addi 3, 3, 16 + lxvd2x 62, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vcipherlast 19, 19, 10 + vcipherlast 20, 20, 10 + vcipherlast 21, 21, 10 + vcipherlast 22, 22, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_GCM_encrypt_crypto_128_blk8 +L_AES_GCM_encrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_GCM_encrypt_crypto_128_blk2 + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vadduwm 17, 16, 31 + vadduwm 18, 17, 31 + vor 23, 18, 18 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + lxvd2x 57, 0, 3 + addi 3, 3, 16 + lxvd2x 58, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_GCM_encrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_GCM_encrypt_crypto_128_blk1 + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vadduwm 16, 15, 31 + vor 23, 16, 16 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + lxvd2x 56, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_GCM_encrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_GCM_encrypt_crypto_128_done + lxvd2x 55, 0, 8 + vadduwm 15, 23, 31 + vor 23, 15, 15 /* codespell:ignore vor */ + stxvd2x 55, 0, 8 + lxvd2x 55, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipherlast 15, 15, 10 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_GCM_encrypt_crypto_128_done: +L_AES_GCM_encrypt_crypto_alldone: + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size AES_GCM_encrypt_crypto,.-AES_GCM_encrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* HAVE_AESGCM */ +#ifdef WOLFSSL_AES_XTS + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_XTS_encrypt_crypto +.type AES_XTS_encrypt_crypto,@function +.align 16 +AES_XTS_encrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_XTS_encrypt_crypto, .-AES_XTS_encrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_XTS_encrypt_crypto +.p2align 4 +_AES_XTS_encrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -40(1) + mflr 0 + std 0, 32(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + li 12, 8 + lxvd2x 63, 0, 6 + cmplwi 10, 10 + beq L_AES_XTS_encrypt_crypto_128 + cmplwi 10, 12 + beq L_AES_XTS_encrypt_crypto_192 + addi 11, 8, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + lxvd2x 45, 0, 11 + addi 11, 11, 16 + lxvd2x 46, 0, 11 + addi 11, 11, 16 + vxor 31, 31, 0 + vcipher 31, 31, 1 + vcipher 31, 31, 2 + vcipher 31, 31, 3 + vcipher 31, 31, 4 + vcipher 31, 31, 5 + vcipher 31, 31, 6 + vcipher 31, 31, 7 + vcipher 31, 31, 8 + vcipher 31, 31, 9 + vcipher 31, 31, 10 + vcipher 31, 31, 11 + vcipher 31, 31, 12 + vcipher 31, 31, 13 + vcipherlast 31, 31, 14 + addi 11, 7, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + lxvd2x 45, 0, 11 + addi 11, 11, 16 + lxvd2x 46, 0, 11 + addi 11, 11, 16 + cmpdi 5, 0x80 + blt L_AES_XTS_encrypt_crypto_256_blk4 +L_AES_XTS_encrypt_crypto_256_blk8: + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 59, 0, 9 + stxvd2x 59, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 60, 0, 9 + stxvd2x 60, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 61, 0, 9 + stxvd2x 61, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 62, 0, 9 + stxvd2x 62, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 19, 19, 12 + vcipher 20, 20, 12 + vcipher 21, 21, 12 + vcipher 22, 22, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipher 19, 19, 13 + vcipher 20, 20, 13 + vcipher 21, 21, 13 + vcipher 22, 22, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vcipherlast 19, 19, 14 + vcipherlast 20, 20, 14 + vcipherlast 21, 21, 14 + vcipherlast 22, 22, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_XTS_encrypt_crypto_256_blk8 +L_AES_XTS_encrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_XTS_encrypt_crypto_256_blk2 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 17, 17, 12 + vcipher 18, 18, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipher 17, 17, 13 + vcipher 18, 18, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vcipherlast 17, 17, 14 + vcipherlast 18, 18, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_XTS_encrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_XTS_encrypt_crypto_256_blk1 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 15, 15, 12 + vcipher 16, 16, 12 + vcipher 15, 15, 13 + vcipher 16, 16, 13 + vcipherlast 15, 15, 14 + vcipherlast 16, 16, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_XTS_encrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_XTS_encrypt_crypto_256_done + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipher 15, 15, 12 + vcipher 15, 15, 13 + vcipherlast 15, 15, 14 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_XTS_encrypt_crypto_256_done: + b L_AES_XTS_encrypt_crypto_alldone +L_AES_XTS_encrypt_crypto_192: + addi 11, 8, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + vxor 31, 31, 0 + vcipher 31, 31, 1 + vcipher 31, 31, 2 + vcipher 31, 31, 3 + vcipher 31, 31, 4 + vcipher 31, 31, 5 + vcipher 31, 31, 6 + vcipher 31, 31, 7 + vcipher 31, 31, 8 + vcipher 31, 31, 9 + vcipher 31, 31, 10 + vcipher 31, 31, 11 + vcipherlast 31, 31, 12 + addi 11, 7, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + cmpdi 5, 0x80 + blt L_AES_XTS_encrypt_crypto_192_blk4 +L_AES_XTS_encrypt_crypto_192_blk8: + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 59, 0, 9 + stxvd2x 59, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 60, 0, 9 + stxvd2x 60, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 61, 0, 9 + stxvd2x 61, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 62, 0, 9 + stxvd2x 62, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 19, 19, 10 + vcipher 20, 20, 10 + vcipher 21, 21, 10 + vcipher 22, 22, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipher 19, 19, 11 + vcipher 20, 20, 11 + vcipher 21, 21, 11 + vcipher 22, 22, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vcipherlast 19, 19, 12 + vcipherlast 20, 20, 12 + vcipherlast 21, 21, 12 + vcipherlast 22, 22, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_XTS_encrypt_crypto_192_blk8 +L_AES_XTS_encrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_XTS_encrypt_crypto_192_blk2 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 17, 17, 10 + vcipher 18, 18, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipher 17, 17, 11 + vcipher 18, 18, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vcipherlast 17, 17, 12 + vcipherlast 18, 18, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_XTS_encrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_XTS_encrypt_crypto_192_blk1 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 15, 15, 10 + vcipher 16, 16, 10 + vcipher 15, 15, 11 + vcipher 16, 16, 11 + vcipherlast 15, 15, 12 + vcipherlast 16, 16, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_XTS_encrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_XTS_encrypt_crypto_192_done + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipher 15, 15, 10 + vcipher 15, 15, 11 + vcipherlast 15, 15, 12 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_XTS_encrypt_crypto_192_done: + b L_AES_XTS_encrypt_crypto_alldone +L_AES_XTS_encrypt_crypto_128: + addi 11, 8, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + vxor 31, 31, 0 + vcipher 31, 31, 1 + vcipher 31, 31, 2 + vcipher 31, 31, 3 + vcipher 31, 31, 4 + vcipher 31, 31, 5 + vcipher 31, 31, 6 + vcipher 31, 31, 7 + vcipher 31, 31, 8 + vcipher 31, 31, 9 + vcipherlast 31, 31, 10 + addi 11, 7, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + cmpdi 5, 0x80 + blt L_AES_XTS_encrypt_crypto_128_blk4 +L_AES_XTS_encrypt_crypto_128_blk8: + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 59, 0, 9 + stxvd2x 59, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 60, 0, 9 + stxvd2x 60, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 61, 0, 9 + stxvd2x 61, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 62, 0, 9 + stxvd2x 62, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 19, 19, 1 + vcipher 20, 20, 1 + vcipher 21, 21, 1 + vcipher 22, 22, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 19, 19, 2 + vcipher 20, 20, 2 + vcipher 21, 21, 2 + vcipher 22, 22, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 19, 19, 3 + vcipher 20, 20, 3 + vcipher 21, 21, 3 + vcipher 22, 22, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 19, 19, 4 + vcipher 20, 20, 4 + vcipher 21, 21, 4 + vcipher 22, 22, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 19, 19, 5 + vcipher 20, 20, 5 + vcipher 21, 21, 5 + vcipher 22, 22, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 19, 19, 6 + vcipher 20, 20, 6 + vcipher 21, 21, 6 + vcipher 22, 22, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 19, 19, 7 + vcipher 20, 20, 7 + vcipher 21, 21, 7 + vcipher 22, 22, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 19, 19, 8 + vcipher 20, 20, 8 + vcipher 21, 21, 8 + vcipher 22, 22, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipher 19, 19, 9 + vcipher 20, 20, 9 + vcipher 21, 21, 9 + vcipher 22, 22, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vcipherlast 19, 19, 10 + vcipherlast 20, 20, 10 + vcipherlast 21, 21, 10 + vcipherlast 22, 22, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_XTS_encrypt_crypto_128_blk8 +L_AES_XTS_encrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_XTS_encrypt_crypto_128_blk2 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 17, 17, 1 + vcipher 18, 18, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 17, 17, 2 + vcipher 18, 18, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 17, 17, 3 + vcipher 18, 18, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 17, 17, 4 + vcipher 18, 18, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 17, 17, 5 + vcipher 18, 18, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 17, 17, 6 + vcipher 18, 18, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 17, 17, 7 + vcipher 18, 18, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 17, 17, 8 + vcipher 18, 18, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipher 17, 17, 9 + vcipher 18, 18, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vcipherlast 17, 17, 10 + vcipherlast 18, 18, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_XTS_encrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_XTS_encrypt_crypto_128_blk1 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 15, 15, 0 + vxor 16, 16, 0 + vcipher 15, 15, 1 + vcipher 16, 16, 1 + vcipher 15, 15, 2 + vcipher 16, 16, 2 + vcipher 15, 15, 3 + vcipher 16, 16, 3 + vcipher 15, 15, 4 + vcipher 16, 16, 4 + vcipher 15, 15, 5 + vcipher 16, 16, 5 + vcipher 15, 15, 6 + vcipher 16, 16, 6 + vcipher 15, 15, 7 + vcipher 16, 16, 7 + vcipher 15, 15, 8 + vcipher 16, 16, 8 + vcipher 15, 15, 9 + vcipher 16, 16, 9 + vcipherlast 15, 15, 10 + vcipherlast 16, 16, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_XTS_encrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_XTS_encrypt_crypto_128_done + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 15, 15, 0 + vcipher 15, 15, 1 + vcipher 15, 15, 2 + vcipher 15, 15, 3 + vcipher 15, 15, 4 + vcipher 15, 15, 5 + vcipher 15, 15, 6 + vcipher 15, 15, 7 + vcipher 15, 15, 8 + vcipher 15, 15, 9 + vcipherlast 15, 15, 10 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_XTS_encrypt_crypto_128_done: +L_AES_XTS_encrypt_crypto_alldone: + ld 0, 32(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + addi 1, 1, 40 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size AES_XTS_encrypt_crypto,.-AES_XTS_encrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#ifdef HAVE_AES_DECRYPT + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl AES_XTS_decrypt_crypto +.type AES_XTS_decrypt_crypto,@function +.align 16 +AES_XTS_decrypt_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry AES_XTS_decrypt_crypto, .-AES_XTS_decrypt_crypto +#endif +#else +.section __TEXT,__text +.globl _AES_XTS_decrypt_crypto +.p2align 4 +_AES_XTS_decrypt_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -40(1) + mflr 0 + std 0, 32(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + li 12, 8 + lxvd2x 63, 0, 6 + cmplwi 10, 10 + beq L_AES_XTS_decrypt_crypto_128 + cmplwi 10, 12 + beq L_AES_XTS_decrypt_crypto_192 + addi 11, 8, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + lxvd2x 45, 0, 11 + addi 11, 11, 16 + lxvd2x 46, 0, 11 + addi 11, 11, 16 + vxor 31, 31, 0 + vcipher 31, 31, 1 + vcipher 31, 31, 2 + vcipher 31, 31, 3 + vcipher 31, 31, 4 + vcipher 31, 31, 5 + vcipher 31, 31, 6 + vcipher 31, 31, 7 + vcipher 31, 31, 8 + vcipher 31, 31, 9 + vcipher 31, 31, 10 + vcipher 31, 31, 11 + vcipher 31, 31, 12 + vcipher 31, 31, 13 + vcipherlast 31, 31, 14 + addi 11, 7, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + lxvd2x 45, 0, 11 + addi 11, 11, 16 + lxvd2x 46, 0, 11 + addi 11, 11, 16 + cmpdi 5, 0x80 + blt L_AES_XTS_decrypt_crypto_256_blk4 +L_AES_XTS_decrypt_crypto_256_blk8: + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 59, 0, 9 + stxvd2x 59, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 60, 0, 9 + stxvd2x 60, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 61, 0, 9 + stxvd2x 61, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 62, 0, 9 + stxvd2x 62, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 19, 19, 10 + vncipher 20, 20, 10 + vncipher 21, 21, 10 + vncipher 22, 22, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 19, 19, 11 + vncipher 20, 20, 11 + vncipher 21, 21, 11 + vncipher 22, 22, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 17, 17, 12 + vncipher 18, 18, 12 + vncipher 19, 19, 12 + vncipher 20, 20, 12 + vncipher 21, 21, 12 + vncipher 22, 22, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipher 17, 17, 13 + vncipher 18, 18, 13 + vncipher 19, 19, 13 + vncipher 20, 20, 13 + vncipher 21, 21, 13 + vncipher 22, 22, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vncipherlast 17, 17, 14 + vncipherlast 18, 18, 14 + vncipherlast 19, 19, 14 + vncipherlast 20, 20, 14 + vncipherlast 21, 21, 14 + vncipherlast 22, 22, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_XTS_decrypt_crypto_256_blk8 +L_AES_XTS_decrypt_crypto_256_blk4: + cmpdi 5, 0x40 + blt L_AES_XTS_decrypt_crypto_256_blk2 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 17, 17, 12 + vncipher 18, 18, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipher 17, 17, 13 + vncipher 18, 18, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vncipherlast 17, 17, 14 + vncipherlast 18, 18, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_XTS_decrypt_crypto_256_blk2: + cmpdi 5, 32 + blt L_AES_XTS_decrypt_crypto_256_blk1 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 15, 15, 12 + vncipher 16, 16, 12 + vncipher 15, 15, 13 + vncipher 16, 16, 13 + vncipherlast 15, 15, 14 + vncipherlast 16, 16, 14 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_XTS_decrypt_crypto_256_blk1: + cmpdi 5, 16 + blt L_AES_XTS_decrypt_crypto_256_done + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipher 15, 15, 10 + vncipher 15, 15, 11 + vncipher 15, 15, 12 + vncipher 15, 15, 13 + vncipherlast 15, 15, 14 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_XTS_decrypt_crypto_256_done: + b L_AES_XTS_decrypt_crypto_alldone +L_AES_XTS_decrypt_crypto_192: + addi 11, 8, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + vxor 31, 31, 0 + vcipher 31, 31, 1 + vcipher 31, 31, 2 + vcipher 31, 31, 3 + vcipher 31, 31, 4 + vcipher 31, 31, 5 + vcipher 31, 31, 6 + vcipher 31, 31, 7 + vcipher 31, 31, 8 + vcipher 31, 31, 9 + vcipher 31, 31, 10 + vcipher 31, 31, 11 + vcipherlast 31, 31, 12 + addi 11, 7, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + lxvd2x 43, 0, 11 + addi 11, 11, 16 + lxvd2x 44, 0, 11 + addi 11, 11, 16 + cmpdi 5, 0x80 + blt L_AES_XTS_decrypt_crypto_192_blk4 +L_AES_XTS_decrypt_crypto_192_blk8: + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 59, 0, 9 + stxvd2x 59, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 60, 0, 9 + stxvd2x 60, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 61, 0, 9 + stxvd2x 61, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 62, 0, 9 + stxvd2x 62, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 19, 19, 10 + vncipher 20, 20, 10 + vncipher 21, 21, 10 + vncipher 22, 22, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipher 19, 19, 11 + vncipher 20, 20, 11 + vncipher 21, 21, 11 + vncipher 22, 22, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vncipherlast 17, 17, 12 + vncipherlast 18, 18, 12 + vncipherlast 19, 19, 12 + vncipherlast 20, 20, 12 + vncipherlast 21, 21, 12 + vncipherlast 22, 22, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_XTS_decrypt_crypto_192_blk8 +L_AES_XTS_decrypt_crypto_192_blk4: + cmpdi 5, 0x40 + blt L_AES_XTS_decrypt_crypto_192_blk2 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 17, 17, 10 + vncipher 18, 18, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipher 17, 17, 11 + vncipher 18, 18, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vncipherlast 17, 17, 12 + vncipherlast 18, 18, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_XTS_decrypt_crypto_192_blk2: + cmpdi 5, 32 + blt L_AES_XTS_decrypt_crypto_192_blk1 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 15, 15, 10 + vncipher 16, 16, 10 + vncipher 15, 15, 11 + vncipher 16, 16, 11 + vncipherlast 15, 15, 12 + vncipherlast 16, 16, 12 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_XTS_decrypt_crypto_192_blk1: + cmpdi 5, 16 + blt L_AES_XTS_decrypt_crypto_192_done + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipher 15, 15, 10 + vncipher 15, 15, 11 + vncipherlast 15, 15, 12 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_XTS_decrypt_crypto_192_done: + b L_AES_XTS_decrypt_crypto_alldone +L_AES_XTS_decrypt_crypto_128: + addi 11, 8, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + vxor 31, 31, 0 + vcipher 31, 31, 1 + vcipher 31, 31, 2 + vcipher 31, 31, 3 + vcipher 31, 31, 4 + vcipher 31, 31, 5 + vcipher 31, 31, 6 + vcipher 31, 31, 7 + vcipher 31, 31, 8 + vcipher 31, 31, 9 + vcipherlast 31, 31, 10 + addi 11, 7, 0 + lxvd2x 32, 0, 11 + addi 11, 11, 16 + lxvd2x 33, 0, 11 + addi 11, 11, 16 + lxvd2x 34, 0, 11 + addi 11, 11, 16 + lxvd2x 35, 0, 11 + addi 11, 11, 16 + lxvd2x 36, 0, 11 + addi 11, 11, 16 + lxvd2x 37, 0, 11 + addi 11, 11, 16 + lxvd2x 38, 0, 11 + addi 11, 11, 16 + lxvd2x 39, 0, 11 + addi 11, 11, 16 + lxvd2x 40, 0, 11 + addi 11, 11, 16 + lxvd2x 41, 0, 11 + addi 11, 11, 16 + lxvd2x 42, 0, 11 + addi 11, 11, 16 + cmpdi 5, 0x80 + blt L_AES_XTS_decrypt_crypto_128_blk4 +L_AES_XTS_decrypt_crypto_128_blk8: + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 59, 0, 9 + stxvd2x 59, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 60, 0, 9 + stxvd2x 60, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 61, 0, 9 + stxvd2x 61, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 62, 0, 9 + stxvd2x 62, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + lxvd2x 51, 0, 3 + addi 3, 3, 16 + lxvd2x 52, 0, 3 + addi 3, 3, 16 + lxvd2x 53, 0, 3 + addi 3, 3, 16 + lxvd2x 54, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vxor 19, 19, 0 + vxor 20, 20, 0 + vxor 21, 21, 0 + vxor 22, 22, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 19, 19, 1 + vncipher 20, 20, 1 + vncipher 21, 21, 1 + vncipher 22, 22, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 19, 19, 2 + vncipher 20, 20, 2 + vncipher 21, 21, 2 + vncipher 22, 22, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 19, 19, 3 + vncipher 20, 20, 3 + vncipher 21, 21, 3 + vncipher 22, 22, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 19, 19, 4 + vncipher 20, 20, 4 + vncipher 21, 21, 4 + vncipher 22, 22, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 19, 19, 5 + vncipher 20, 20, 5 + vncipher 21, 21, 5 + vncipher 22, 22, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 19, 19, 6 + vncipher 20, 20, 6 + vncipher 21, 21, 6 + vncipher 22, 22, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 19, 19, 7 + vncipher 20, 20, 7 + vncipher 21, 21, 7 + vncipher 22, 22, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 19, 19, 8 + vncipher 20, 20, 8 + vncipher 21, 21, 8 + vncipher 22, 22, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipher 19, 19, 9 + vncipher 20, 20, 9 + vncipher 21, 21, 9 + vncipher 22, 22, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vncipherlast 17, 17, 10 + vncipherlast 18, 18, 10 + vncipherlast 19, 19, 10 + vncipherlast 20, 20, 10 + vncipherlast 21, 21, 10 + vncipherlast 22, 22, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 19, 19, 27 + vxor 20, 20, 28 + vxor 21, 21, 29 + vxor 22, 22, 30 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + stxvd2x 51, 0, 4 + addi 4, 4, 16 + stxvd2x 52, 0, 4 + addi 4, 4, 16 + stxvd2x 53, 0, 4 + addi 4, 4, 16 + stxvd2x 54, 0, 4 + addi 4, 4, 16 + addi 5, 5, -128 + cmpdi 5, 0x80 + bge L_AES_XTS_decrypt_crypto_128_blk8 +L_AES_XTS_decrypt_crypto_128_blk4: + cmpdi 5, 0x40 + blt L_AES_XTS_decrypt_crypto_128_blk2 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 57, 0, 9 + stxvd2x 57, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 58, 0, 9 + stxvd2x 58, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + lxvd2x 49, 0, 3 + addi 3, 3, 16 + lxvd2x 50, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + vxor 15, 15, 0 + vxor 16, 16, 0 + vxor 17, 17, 0 + vxor 18, 18, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 17, 17, 1 + vncipher 18, 18, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 17, 17, 2 + vncipher 18, 18, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 17, 17, 3 + vncipher 18, 18, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 17, 17, 4 + vncipher 18, 18, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 17, 17, 5 + vncipher 18, 18, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 17, 17, 6 + vncipher 18, 18, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 17, 17, 7 + vncipher 18, 18, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 17, 17, 8 + vncipher 18, 18, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipher 17, 17, 9 + vncipher 18, 18, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vncipherlast 17, 17, 10 + vncipherlast 18, 18, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 17, 17, 25 + vxor 18, 18, 26 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + stxvd2x 49, 0, 4 + addi 4, 4, 16 + stxvd2x 50, 0, 4 + addi 4, 4, 16 + addi 5, 5, -64 +L_AES_XTS_decrypt_crypto_128_blk2: + cmpdi 5, 32 + blt L_AES_XTS_decrypt_crypto_128_blk1 + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 56, 0, 9 + stxvd2x 56, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + lxvd2x 48, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 16, 16, 24 + vxor 15, 15, 0 + vxor 16, 16, 0 + vncipher 15, 15, 1 + vncipher 16, 16, 1 + vncipher 15, 15, 2 + vncipher 16, 16, 2 + vncipher 15, 15, 3 + vncipher 16, 16, 3 + vncipher 15, 15, 4 + vncipher 16, 16, 4 + vncipher 15, 15, 5 + vncipher 16, 16, 5 + vncipher 15, 15, 6 + vncipher 16, 16, 6 + vncipher 15, 15, 7 + vncipher 16, 16, 7 + vncipher 15, 15, 8 + vncipher 16, 16, 8 + vncipher 15, 15, 9 + vncipher 16, 16, 9 + vncipherlast 15, 15, 10 + vncipherlast 16, 16, 10 + vxor 15, 15, 23 + vxor 16, 16, 24 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + stxvd2x 48, 0, 4 + addi 4, 4, 16 + addi 5, 5, -32 +L_AES_XTS_decrypt_crypto_128_blk1: + cmpdi 5, 16 + blt L_AES_XTS_decrypt_crypto_128_done + vor 23, 31, 31 /* codespell:ignore vor */ + stxvd2x 55, 0, 9 + ldbrx 14, 0, 9 + ldbrx 15, 9, 12 + sradi 16, 15, 63 + srdi 17, 14, 63 + andi. 16, 16, 0x87 + sldi 15, 15, 1 + sldi 14, 14, 1 + xor 15, 15, 17 + xor 14, 14, 16 + stdbrx 14, 0, 9 + stdbrx 15, 9, 12 + lxvd2x 63, 0, 9 + lxvd2x 47, 0, 3 + addi 3, 3, 16 + vxor 15, 15, 23 + vxor 15, 15, 0 + vncipher 15, 15, 1 + vncipher 15, 15, 2 + vncipher 15, 15, 3 + vncipher 15, 15, 4 + vncipher 15, 15, 5 + vncipher 15, 15, 6 + vncipher 15, 15, 7 + vncipher 15, 15, 8 + vncipher 15, 15, 9 + vncipherlast 15, 15, 10 + vxor 15, 15, 23 + stxvd2x 47, 0, 4 + addi 4, 4, 16 + addi 5, 5, -16 +L_AES_XTS_decrypt_crypto_128_done: +L_AES_XTS_decrypt_crypto_alldone: + ld 0, 32(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + addi 1, 1, 40 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size AES_XTS_decrypt_crypto,.-AES_XTS_decrypt_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* HAVE_AES_DECRYPT */ +#endif /* WOLFSSL_AES_XTS */ +#endif /* WOLFSSL_PPC64_ASM_CRYPTO */ #endif /* !defined(NO_AES) && defined(WOLFSSL_PPC64_ASM) */ #endif /* WOLFSSL_PPC64_ASM */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c b/wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c index d0c25755aa2..59806d9adbe 100644 --- a/wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c +++ b/wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c @@ -209,12 +209,8 @@ void AES_invert_key(unsigned char* ks, word32 rounds) #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 5, %[L_AES_PPC64_te]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 6, %[L_AES_PPC64_td]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "addi 5, 5, 3\n\t" "sldi 16, %[rounds], 4\n\t" "add 16, 16, %[ks]\n\t" @@ -401,12 +397,8 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 6, %[L_AES_PPC64_te]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 7, %[L_AES_PPC64_rcon]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "addi 6, 6, 3\n\t" "cmplwi %[len], 0x80\n\t" "beq L_AES_set_encrypt_key_start_128_%=\n\t" @@ -961,9 +953,7 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 8, %[L_AES_PPC64_te4_0]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "addi 9, 8, 0x400\n\t" "addi 10, 8, 0x800\n\t" "addi 11, 8, 0xc00\n\t" @@ -1318,9 +1308,7 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 9, %[L_AES_PPC64_te4_0]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "ld 14, 0(%[iv])\n\t" "ld 15, 8(%[iv])\n\t" "addi 10, 9, 0x400\n\t" @@ -1682,9 +1670,7 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 9, %[L_AES_PPC64_te4_0]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "ld 22, 0(%[ctr])\n\t" "ld 23, 8(%[ctr])\n\t" "addi 10, 9, 0x400\n\t" @@ -2048,9 +2034,7 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 9, %[L_AES_PPC64_te4_0]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "ld 26, 0(%[ctr])\n\t" "ld 27, 8(%[ctr])\n\t" "addi 10, 9, 0x400\n\t" @@ -2413,10 +2397,8 @@ void AES_XTS_encrypt(const byte* in, byte* out, word32 sz, const byte* i, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( - "subi 1, 1, 8\n\t" -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG + "subi 1, 1, 0x88\n\t" "mr 11, %[L_AES_PPC64_te4_0]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "addi 12, 11, 0x400\n\t" "addi 14, 11, 0x800\n\t" "addi 15, 11, 0xc00\n\t" @@ -3376,7 +3358,7 @@ void AES_XTS_encrypt(const byte* in, byte* out, word32 sz, const byte* i, "std 17, 8(%[out])\n\t" "\n" "L_AES_XTS_encrypt_done_data_%=: \n\t" - "addi 1, 1, 8\n\t" + "addi 1, 1, 0x88\n\t" #ifndef WOLFSSL_NO_VAR_ASSIGN_REG : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i), [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp), @@ -3460,12 +3442,8 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 8, %[L_AES_PPC64_td]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 9, %[L_AES_PPC64_td4]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "\n" "L_AES_ECB_decrypt_loop_block_%=: \n\t" "addi 23, %[ks], 0\n\t" @@ -3821,12 +3799,8 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 10, %[L_AES_PPC64_td4]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 9, %[L_AES_PPC64_td]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "ld 24, 0(%[iv])\n\t" "ld 25, 8(%[iv])\n\t" "\n" @@ -4509,10 +4483,8 @@ void AES_XTS_decrypt(const byte* in, byte* out, word32 sz, const byte* i, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( - "subi 1, 1, 8\n\t" -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG + "subi 1, 1, 0x88\n\t" "mr 14, %[L_AES_PPC64_te4_0]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "addi 15, 14, 0x400\n\t" "addi 16, 14, 0x800\n\t" "addi 17, 14, 0xc00\n\t" @@ -4820,12 +4792,8 @@ void AES_XTS_decrypt(const byte* in, byte* out, word32 sz, const byte* i, "xor 27, 27, 19\n\t" "std 26, 0(%[tmp])\n\t" "std 27, 8(%[tmp])\n\t" -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 11, %[L_AES_PPC64_td]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 12, %[L_AES_PPC64_td4]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "cmpdi %[sz], 16\n\t" "blt L_AES_XTS_decrypt_start_partail_%=\n\t" "\n" @@ -5807,7 +5775,7 @@ void AES_XTS_decrypt(const byte* in, byte* out, word32 sz, const byte* i, "std 15, 8(%[out])\n\t" "\n" "L_AES_XTS_decrypt_done_data_%=: \n\t" - "addi 1, 1, 8\n\t" + "addi 1, 1, 0x88\n\t" #ifndef WOLFSSL_NO_VAR_ASSIGN_REG : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i), [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp), @@ -5870,9 +5838,7 @@ void GCM_gmult_len(unsigned char* x, const unsigned char** m, __asm__ __volatile__ ( "li 21, 0x100\n\t" "li 25, 8\n\t" -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 7, %[L_GCM_gmult_len_r]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "add 21, 21, %[m]\n\t" "addi 20, %[m], 8\n\t" "addi 22, 21, 8\n\t" @@ -6390,9 +6356,7 @@ void GCM_gmult_len(unsigned char* x, const unsigned char** m, #endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ __asm__ __volatile__ ( -#ifdef WOLFSSL_NO_VAR_ASSIGN_REG "mr 7, %[L_GCM_gmult_len_r]\n\t" -#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ "addi 0, %[m], 8\n\t" "li 17, 8\n\t" "\n" @@ -6642,6 +6606,9368 @@ void GCM_gmult_len(unsigned char* x, const unsigned char** m, #endif /* GCM_TABLE */ #endif /* HAVE_AESGCM */ +#ifdef WOLFSSL_PPC64_ASM_CRYPTO +static const byte L_AES_PPC64_crypto_sbox[] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, +}; + +static const word32 L_AES_PPC64_crypto_rcon[] = { + 0x01000000, 0x02000000, 0x04000000, 0x08000000, + 0x10000000, 0x20000000, 0x40000000, 0x80000000, + 0x1b000000, 0x36000000 +}; + +#if defined(WOLFSSL_AES_COUNTER) && defined(HAVE_AESGCM) +static const word32 L_AES_PPC64_crypto_one[] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000001, +}; + +#endif /* defined(WOLFSSL_AES_COUNTER) && defined(HAVE_AESGCM) */ +__attribute__((target("cpu=power8"))) +void AES_set_encrypt_key_crypto(const unsigned char* key, word32 len, + unsigned char* ks); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_set_encrypt_key_crypto(const unsigned char* key_p, word32 len_p, + unsigned char* ks_p) +#else +void AES_set_encrypt_key_crypto(const unsigned char* key, word32 len, + unsigned char* ks) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* key asm ("3") = (const unsigned char*)key_p; + register word32 len asm ("4") = (word32)len_p; + register unsigned char* ks asm ("5") = (unsigned char*)ks_p; + register byte* L_AES_PPC64_crypto_sbox_c asm ("6") = + (byte*)&L_AES_PPC64_crypto_sbox; + register word32* L_AES_PPC64_crypto_rcon_c asm ("7") = + (word32*)&L_AES_PPC64_crypto_rcon; +#else + register byte* L_AES_PPC64_crypto_sbox_c = (byte*)&L_AES_PPC64_crypto_sbox; + register word32* L_AES_PPC64_crypto_rcon_c = + (word32*)&L_AES_PPC64_crypto_rcon; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 14, %[L_AES_PPC64_crypto_sbox]\n\t" + "mr 15, %[L_AES_PPC64_crypto_rcon]\n\t" + "cmplwi %[len], 0x80\n\t" + "beq L_AES_set_encrypt_key_crypto_128_%=\n\t" + "cmplwi %[len], 0xc0\n\t" + "beq L_AES_set_encrypt_key_crypto_192_%=\n\t" + "lwz 0, 0(%[key])\n\t" + "lwz 6, 4(%[key])\n\t" + "lwz 7, 8(%[key])\n\t" + "lwz 8, 12(%[key])\n\t" + "lwz 9, 16(%[key])\n\t" + "lwz 10, 20(%[key])\n\t" + "lwz 11, 24(%[key])\n\t" + "lwz 12, 28(%[key])\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "stw 11, 24(%[ks])\n\t" + "stw 12, 28(%[ks])\n\t" + "addi %[ks], %[ks], 32\n\t" + "li 17, 6\n\t" + "mtctr 17\n\t" + "\n" + "L_AES_set_encrypt_key_crypto_loop_256_%=: \n\t" + "rlwinm 17, 12, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 12, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 12, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 12, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "rlwinm 17, 8, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 8, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 8, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 8, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "xor 9, 9, 16\n\t" + "xor 10, 10, 9\n\t" + "xor 11, 11, 10\n\t" + "xor 12, 12, 11\n\t" + "stw 9, 0(%[ks])\n\t" + "stw 10, 4(%[ks])\n\t" + "stw 11, 8(%[ks])\n\t" + "stw 12, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "bdnz L_AES_set_encrypt_key_crypto_loop_256_%=\n\t" + "rlwinm 17, 12, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 12, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 12, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 12, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "b L_AES_set_encrypt_key_crypto_end_%=\n\t" + "\n" + "L_AES_set_encrypt_key_crypto_192_%=: \n\t" + "lwz 0, 0(%[key])\n\t" + "lwz 6, 4(%[key])\n\t" + "lwz 7, 8(%[key])\n\t" + "lwz 8, 12(%[key])\n\t" + "lwz 9, 16(%[key])\n\t" + "lwz 10, 20(%[key])\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "addi %[ks], %[ks], 24\n\t" + "li 17, 7\n\t" + "mtctr 17\n\t" + "\n" + "L_AES_set_encrypt_key_crypto_loop_192_%=: \n\t" + "rlwinm 17, 10, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 10, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 10, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 10, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "xor 9, 9, 8\n\t" + "xor 10, 10, 9\n\t" + "stw 9, 16(%[ks])\n\t" + "stw 10, 20(%[ks])\n\t" + "addi %[ks], %[ks], 24\n\t" + "bdnz L_AES_set_encrypt_key_crypto_loop_192_%=\n\t" + "rlwinm 17, 10, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 10, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 10, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 10, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "b L_AES_set_encrypt_key_crypto_end_%=\n\t" + "\n" + "L_AES_set_encrypt_key_crypto_128_%=: \n\t" + "lwz 0, 0(%[key])\n\t" + "lwz 6, 4(%[key])\n\t" + "lwz 7, 8(%[key])\n\t" + "lwz 8, 12(%[key])\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "li 17, 10\n\t" + "mtctr 17\n\t" + "\n" + "L_AES_set_encrypt_key_crypto_loop_128_%=: \n\t" + "rlwinm 17, 8, 16, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "slwi 16, 17, 24\n\t" + "rlwinm 17, 8, 24, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 16, 8, 15\n\t" + "rlwinm 17, 8, 0, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 8, 16, 23\n\t" + "rlwinm 17, 8, 8, 24, 31\n\t" + "lbzx 17, 14, 17\n\t" + "rlwimi 16, 17, 0, 24, 31\n\t" + "lwz 17, 0(15)\n\t" + "addi 15, 15, 4\n\t" + "xor 0, 0, 16\n\t" + "xor 0, 0, 17\n\t" + "xor 6, 6, 0\n\t" + "xor 7, 7, 6\n\t" + "xor 8, 8, 7\n\t" + "stw 0, 0(%[ks])\n\t" + "stw 6, 4(%[ks])\n\t" + "stw 7, 8(%[ks])\n\t" + "stw 8, 12(%[ks])\n\t" + "addi %[ks], %[ks], 16\n\t" + "bdnz L_AES_set_encrypt_key_crypto_loop_128_%=\n\t" + "\n" + "L_AES_set_encrypt_key_crypto_end_%=: \n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks), + [L_AES_PPC64_crypto_sbox] "+r" (L_AES_PPC64_crypto_sbox_c), + [L_AES_PPC64_crypto_rcon] "+r" (L_AES_PPC64_crypto_rcon_c) + : + : "memory", "cc", "0", "8", "9", "10", "11", "12", "14", "15", "16", + "17" +#else + : + : [key] "r" (key), [len] "r" (len), [ks] "r" (ks), + [L_AES_PPC64_crypto_sbox] "r" (L_AES_PPC64_crypto_sbox_c), + [L_AES_PPC64_crypto_rcon] "r" (L_AES_PPC64_crypto_rcon_c) + : "memory", "cc", "0", "6", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +__attribute__((target("cpu=power8"))) +void AES_invert_key_crypto(unsigned char* ks, word32 rounds); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_invert_key_crypto(unsigned char* ks_p, word32 rounds_p) +#else +void AES_invert_key_crypto(unsigned char* ks, word32 rounds) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register unsigned char* ks asm ("3") = (unsigned char*)ks_p; + register word32 rounds asm ("4") = (word32)rounds_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "addi 5, %[ks], 0\n\t" + "slwi 6, %[rounds], 4\n\t" + "add 6, %[ks], 6\n\t" + "srwi 11, %[rounds], 1\n\t" + "mtctr 11\n\t" + "\n" + "L_AES_invert_key_crypto_loop_%=: \n\t" + "ld 7, 0(5)\n\t" + "ld 8, 8(5)\n\t" + "ld 9, 0(6)\n\t" + "ld 10, 8(6)\n\t" + "std 9, 0(5)\n\t" + "std 10, 8(5)\n\t" + "std 7, 0(6)\n\t" + "std 8, 8(6)\n\t" + "addi 5, 5, 16\n\t" + "addi 6, 6, -16\n\t" + "bdnz L_AES_invert_key_crypto_loop_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [ks] "+r" (ks), [rounds] "+r" (rounds) + : + : "memory", "cc", "0", "5", "6", "7", "8", "9", "10", "11" +#else + : + : [ks] "r" (ks), [rounds] "r" (rounds) + : "memory", "cc", "0", "5", "6", "7", "8", "9", "10", "11" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +__attribute__((target("cpu=power8"))) +void AES_ECB_encrypt_crypto(const unsigned char* in, unsigned char* out, + word32 len, const unsigned char* ks, int nr); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_ECB_encrypt_crypto(const unsigned char* in_p, unsigned char* out_p, + word32 len_p, const unsigned char* ks_p, int nr_p) +#else +void AES_ECB_encrypt_crypto(const unsigned char* in, unsigned char* out, + word32 len, const unsigned char* ks, int nr) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in asm ("3") = (const unsigned char*)in_p; + register unsigned char* out asm ("4") = (unsigned char*)out_p; + register word32 len asm ("5") = (word32)len_p; + register const unsigned char* ks asm ("6") = (const unsigned char*)ks_p; + register int nr asm ("7") = (int)nr_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "cmplwi %[nr], 10\n\t" + "beq L_AES_ECB_encrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_ECB_encrypt_crypto_192_%=\n\t" + "addi 8, %[ks], 0\n\t" + "lxvd2x 32, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 33, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 34, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 35, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 36, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 37, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 38, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 39, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 40, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 41, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 42, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 43, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 44, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 45, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 46, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_ECB_encrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_256_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 19, 19, 12\n\t" + "vcipher 20, 20, 12\n\t" + "vcipher 21, 21, 12\n\t" + "vcipher 22, 22, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipher 19, 19, 13\n\t" + "vcipher 20, 20, 13\n\t" + "vcipher 21, 21, 13\n\t" + "vcipher 22, 22, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vcipherlast 19, 19, 14\n\t" + "vcipherlast 20, 20, 14\n\t" + "vcipherlast 21, 21, 14\n\t" + "vcipherlast 22, 22, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_ECB_encrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_ECB_encrypt_crypto_256_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_ECB_encrypt_crypto_256_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_ECB_encrypt_crypto_256_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_256_done_%=: \n\t" + "b L_AES_ECB_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_192_%=: \n\t" + "addi 8, %[ks], 0\n\t" + "lxvd2x 32, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 33, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 34, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 35, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 36, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 37, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 38, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 39, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 40, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 41, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 42, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 43, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 44, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_ECB_encrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_192_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vcipherlast 19, 19, 12\n\t" + "vcipherlast 20, 20, 12\n\t" + "vcipherlast 21, 21, 12\n\t" + "vcipherlast 22, 22, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_ECB_encrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_ECB_encrypt_crypto_192_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_ECB_encrypt_crypto_192_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_ECB_encrypt_crypto_192_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_192_done_%=: \n\t" + "b L_AES_ECB_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_128_%=: \n\t" + "addi 8, %[ks], 0\n\t" + "lxvd2x 32, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 33, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 34, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 35, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 36, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 37, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 38, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 39, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 40, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 41, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 42, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_ECB_encrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_128_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vcipherlast 19, 19, 10\n\t" + "vcipherlast 20, 20, 10\n\t" + "vcipherlast 21, 21, 10\n\t" + "vcipherlast 22, 22, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_ECB_encrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_ECB_encrypt_crypto_128_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_ECB_encrypt_crypto_128_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_ECB_encrypt_crypto_128_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_ECB_encrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_ECB_encrypt_crypto_alldone_%=: \n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr) + : + : "memory", "cc", "0", "8", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22" +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr) + : "memory", "cc", "0", "8", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#ifdef HAVE_AES_DECRYPT +__attribute__((target("cpu=power8"))) +void AES_ECB_decrypt_crypto(const unsigned char* in, unsigned char* out, + word32 len, const unsigned char* ks, int nr); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_ECB_decrypt_crypto(const unsigned char* in_p, unsigned char* out_p, + word32 len_p, const unsigned char* ks_p, int nr_p) +#else +void AES_ECB_decrypt_crypto(const unsigned char* in, unsigned char* out, + word32 len, const unsigned char* ks, int nr) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in asm ("3") = (const unsigned char*)in_p; + register unsigned char* out asm ("4") = (unsigned char*)out_p; + register word32 len asm ("5") = (word32)len_p; + register const unsigned char* ks asm ("6") = (const unsigned char*)ks_p; + register int nr asm ("7") = (int)nr_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "cmplwi %[nr], 10\n\t" + "beq L_AES_ECB_decrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_ECB_decrypt_crypto_192_%=\n\t" + "addi 8, %[ks], 0\n\t" + "lxvd2x 32, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 33, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 34, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 35, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 36, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 37, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 38, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 39, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 40, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 41, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 42, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 43, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 44, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 45, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 46, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_ECB_decrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_256_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 19, 19, 10\n\t" + "vncipher 20, 20, 10\n\t" + "vncipher 21, 21, 10\n\t" + "vncipher 22, 22, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 19, 19, 11\n\t" + "vncipher 20, 20, 11\n\t" + "vncipher 21, 21, 11\n\t" + "vncipher 22, 22, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 17, 17, 12\n\t" + "vncipher 18, 18, 12\n\t" + "vncipher 19, 19, 12\n\t" + "vncipher 20, 20, 12\n\t" + "vncipher 21, 21, 12\n\t" + "vncipher 22, 22, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipher 17, 17, 13\n\t" + "vncipher 18, 18, 13\n\t" + "vncipher 19, 19, 13\n\t" + "vncipher 20, 20, 13\n\t" + "vncipher 21, 21, 13\n\t" + "vncipher 22, 22, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vncipherlast 17, 17, 14\n\t" + "vncipherlast 18, 18, 14\n\t" + "vncipherlast 19, 19, 14\n\t" + "vncipherlast 20, 20, 14\n\t" + "vncipherlast 21, 21, 14\n\t" + "vncipherlast 22, 22, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_ECB_decrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_ECB_decrypt_crypto_256_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 17, 17, 12\n\t" + "vncipher 18, 18, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipher 17, 17, 13\n\t" + "vncipher 18, 18, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vncipherlast 17, 17, 14\n\t" + "vncipherlast 18, 18, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_ECB_decrypt_crypto_256_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_ECB_decrypt_crypto_256_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_256_done_%=: \n\t" + "b L_AES_ECB_decrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_192_%=: \n\t" + "addi 8, %[ks], 0\n\t" + "lxvd2x 32, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 33, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 34, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 35, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 36, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 37, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 38, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 39, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 40, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 41, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 42, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 43, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 44, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_ECB_decrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_192_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 19, 19, 10\n\t" + "vncipher 20, 20, 10\n\t" + "vncipher 21, 21, 10\n\t" + "vncipher 22, 22, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 19, 19, 11\n\t" + "vncipher 20, 20, 11\n\t" + "vncipher 21, 21, 11\n\t" + "vncipher 22, 22, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vncipherlast 17, 17, 12\n\t" + "vncipherlast 18, 18, 12\n\t" + "vncipherlast 19, 19, 12\n\t" + "vncipherlast 20, 20, 12\n\t" + "vncipherlast 21, 21, 12\n\t" + "vncipherlast 22, 22, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_ECB_decrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_ECB_decrypt_crypto_192_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vncipherlast 17, 17, 12\n\t" + "vncipherlast 18, 18, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_ECB_decrypt_crypto_192_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_ECB_decrypt_crypto_192_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_192_done_%=: \n\t" + "b L_AES_ECB_decrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_128_%=: \n\t" + "addi 8, %[ks], 0\n\t" + "lxvd2x 32, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 33, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 34, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 35, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 36, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 37, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 38, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 39, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 40, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 41, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "lxvd2x 42, 0, 8\n\t" + "addi 8, 8, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_ECB_decrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_128_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vncipherlast 17, 17, 10\n\t" + "vncipherlast 18, 18, 10\n\t" + "vncipherlast 19, 19, 10\n\t" + "vncipherlast 20, 20, 10\n\t" + "vncipherlast 21, 21, 10\n\t" + "vncipherlast 22, 22, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_ECB_decrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_ECB_decrypt_crypto_128_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vncipherlast 17, 17, 10\n\t" + "vncipherlast 18, 18, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_ECB_decrypt_crypto_128_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_ECB_decrypt_crypto_128_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_ECB_decrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_ECB_decrypt_crypto_alldone_%=: \n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr) + : + : "memory", "cc", "0", "8", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22" +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr) + : "memory", "cc", "0", "8", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#ifdef HAVE_AES_CBC +__attribute__((target("cpu=power8"))) +void AES_CBC_encrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* iv); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_CBC_encrypt_crypto(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* iv_p) +#else +void AES_CBC_encrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* iv) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in asm ("3") = (const unsigned char*)in_p; + register unsigned char* out asm ("4") = (unsigned char*)out_p; + register unsigned long len asm ("5") = (unsigned long)len_p; + register const unsigned char* ks asm ("6") = (const unsigned char*)ks_p; + register int nr asm ("7") = (int)nr_p; + register unsigned char* iv asm ("8") = (unsigned char*)iv_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "lxvd2x 47, 0, %[iv]\n\t" + "cmplwi %[nr], 10\n\t" + "beq L_AES_CBC_encrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_CBC_encrypt_crypto_192_%=\n\t" + "addi 9, %[ks], 0\n\t" + "lxvd2x 32, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 33, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 34, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 35, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 36, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 37, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 38, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 39, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 40, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 41, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 42, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 43, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 44, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 45, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 46, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "\n" + "L_AES_CBC_encrypt_crypto_256_block_%=: \n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vxor 15, 15, 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_encrypt_crypto_256_block_%=\n\t" + "b L_AES_CBC_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_CBC_encrypt_crypto_192_%=: \n\t" + "addi 9, %[ks], 0\n\t" + "lxvd2x 32, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 33, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 34, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 35, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 36, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 37, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 38, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 39, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 40, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 41, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 42, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 43, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 44, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "\n" + "L_AES_CBC_encrypt_crypto_192_block_%=: \n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vxor 15, 15, 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_encrypt_crypto_192_block_%=\n\t" + "b L_AES_CBC_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_CBC_encrypt_crypto_128_%=: \n\t" + "addi 9, %[ks], 0\n\t" + "lxvd2x 32, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 33, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 34, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 35, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 36, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 37, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 38, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 39, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 40, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 41, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 42, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "\n" + "L_AES_CBC_encrypt_crypto_128_block_%=: \n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vxor 15, 15, 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[in], %[in], 16\n\t" + "addi %[out], %[out], 16\n\t" + "addic. %[len], %[len], -16\n\t" + "bne L_AES_CBC_encrypt_crypto_128_block_%=\n\t" + "\n" + "L_AES_CBC_encrypt_crypto_alldone_%=: \n\t" + "stxvd2x 47, 0, %[iv]\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [iv] "+r" (iv) + : + : "memory", "cc", "0", "9", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16" +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [iv] "r" (iv) + : "memory", "cc", "0", "9", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#ifdef HAVE_AES_DECRYPT +__attribute__((target("cpu=power8"))) +void AES_CBC_decrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* iv); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_CBC_decrypt_crypto(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* iv_p) +#else +void AES_CBC_decrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* iv) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in asm ("3") = (const unsigned char*)in_p; + register unsigned char* out asm ("4") = (unsigned char*)out_p; + register unsigned long len asm ("5") = (unsigned long)len_p; + register const unsigned char* ks asm ("6") = (const unsigned char*)ks_p; + register int nr asm ("7") = (int)nr_p; + register unsigned char* iv asm ("8") = (unsigned char*)iv_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "lxvd2x 63, 0, %[iv]\n\t" + "cmplwi %[nr], 10\n\t" + "beq L_AES_CBC_decrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_CBC_decrypt_crypto_192_%=\n\t" + "addi 9, %[ks], 0\n\t" + "lxvd2x 32, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 33, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 34, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 35, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 36, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 37, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 38, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 39, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 40, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 41, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 42, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 43, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 44, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 45, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 46, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_CBC_decrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_256_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "vor 25, 17, 17\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "vor 26, 18, 18\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "vor 27, 19, 19\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "vor 28, 20, 20\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "vor 29, 21, 21\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "vor 30, 22, 22\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 19, 19, 10\n\t" + "vncipher 20, 20, 10\n\t" + "vncipher 21, 21, 10\n\t" + "vncipher 22, 22, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 19, 19, 11\n\t" + "vncipher 20, 20, 11\n\t" + "vncipher 21, 21, 11\n\t" + "vncipher 22, 22, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 17, 17, 12\n\t" + "vncipher 18, 18, 12\n\t" + "vncipher 19, 19, 12\n\t" + "vncipher 20, 20, 12\n\t" + "vncipher 21, 21, 12\n\t" + "vncipher 22, 22, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipher 17, 17, 13\n\t" + "vncipher 18, 18, 13\n\t" + "vncipher 19, 19, 13\n\t" + "vncipher 20, 20, 13\n\t" + "vncipher 21, 21, 13\n\t" + "vncipher 22, 22, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vncipherlast 17, 17, 14\n\t" + "vncipherlast 18, 18, 14\n\t" + "vncipherlast 19, 19, 14\n\t" + "vncipherlast 20, 20, 14\n\t" + "vncipherlast 21, 21, 14\n\t" + "vncipherlast 22, 22, 14\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vxor 17, 17, 24\n\t" + "vxor 18, 18, 25\n\t" + "vxor 19, 19, 26\n\t" + "vxor 20, 20, 27\n\t" + "vxor 21, 21, 28\n\t" + "vxor 22, 22, 29\n\t" + "vor 31, 30, 30\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_CBC_decrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_CBC_decrypt_crypto_256_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "vor 25, 17, 17\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "vor 26, 18, 18\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 17, 17, 12\n\t" + "vncipher 18, 18, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipher 17, 17, 13\n\t" + "vncipher 18, 18, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vncipherlast 17, 17, 14\n\t" + "vncipherlast 18, 18, 14\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vxor 17, 17, 24\n\t" + "vxor 18, 18, 25\n\t" + "vor 31, 26, 26\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_CBC_decrypt_crypto_256_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vor 31, 24, 24\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_CBC_decrypt_crypto_256_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vxor 15, 15, 31\n\t" + "vor 31, 23, 23\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_256_done_%=: \n\t" + "b L_AES_CBC_decrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_192_%=: \n\t" + "addi 9, %[ks], 0\n\t" + "lxvd2x 32, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 33, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 34, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 35, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 36, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 37, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 38, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 39, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 40, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 41, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 42, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 43, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 44, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_CBC_decrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_192_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "vor 25, 17, 17\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "vor 26, 18, 18\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "vor 27, 19, 19\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "vor 28, 20, 20\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "vor 29, 21, 21\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "vor 30, 22, 22\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 19, 19, 10\n\t" + "vncipher 20, 20, 10\n\t" + "vncipher 21, 21, 10\n\t" + "vncipher 22, 22, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 19, 19, 11\n\t" + "vncipher 20, 20, 11\n\t" + "vncipher 21, 21, 11\n\t" + "vncipher 22, 22, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vncipherlast 17, 17, 12\n\t" + "vncipherlast 18, 18, 12\n\t" + "vncipherlast 19, 19, 12\n\t" + "vncipherlast 20, 20, 12\n\t" + "vncipherlast 21, 21, 12\n\t" + "vncipherlast 22, 22, 12\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vxor 17, 17, 24\n\t" + "vxor 18, 18, 25\n\t" + "vxor 19, 19, 26\n\t" + "vxor 20, 20, 27\n\t" + "vxor 21, 21, 28\n\t" + "vxor 22, 22, 29\n\t" + "vor 31, 30, 30\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_CBC_decrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_CBC_decrypt_crypto_192_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "vor 25, 17, 17\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "vor 26, 18, 18\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vncipherlast 17, 17, 12\n\t" + "vncipherlast 18, 18, 12\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vxor 17, 17, 24\n\t" + "vxor 18, 18, 25\n\t" + "vor 31, 26, 26\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_CBC_decrypt_crypto_192_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vor 31, 24, 24\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_CBC_decrypt_crypto_192_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vxor 15, 15, 31\n\t" + "vor 31, 23, 23\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_192_done_%=: \n\t" + "b L_AES_CBC_decrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_128_%=: \n\t" + "addi 9, %[ks], 0\n\t" + "lxvd2x 32, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 33, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 34, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 35, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 36, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 37, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 38, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 39, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 40, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 41, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "lxvd2x 42, 0, 9\n\t" + "addi 9, 9, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_CBC_decrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_128_blk8_%=: \n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "vor 25, 17, 17\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "vor 26, 18, 18\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "vor 27, 19, 19\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "vor 28, 20, 20\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "vor 29, 21, 21\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "vor 30, 22, 22\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vncipherlast 17, 17, 10\n\t" + "vncipherlast 18, 18, 10\n\t" + "vncipherlast 19, 19, 10\n\t" + "vncipherlast 20, 20, 10\n\t" + "vncipherlast 21, 21, 10\n\t" + "vncipherlast 22, 22, 10\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vxor 17, 17, 24\n\t" + "vxor 18, 18, 25\n\t" + "vxor 19, 19, 26\n\t" + "vxor 20, 20, 27\n\t" + "vxor 21, 21, 28\n\t" + "vxor 22, 22, 29\n\t" + "vor 31, 30, 30\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_CBC_decrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_CBC_decrypt_crypto_128_blk2_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "vor 25, 17, 17\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "vor 26, 18, 18\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vncipherlast 17, 17, 10\n\t" + "vncipherlast 18, 18, 10\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vxor 17, 17, 24\n\t" + "vxor 18, 18, 25\n\t" + "vor 31, 26, 26\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_CBC_decrypt_crypto_128_blk1_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "vor 24, 16, 16\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vxor 15, 15, 31\n\t" + "vxor 16, 16, 23\n\t" + "vor 31, 24, 24\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_CBC_decrypt_crypto_128_done_%=\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vxor 15, 15, 31\n\t" + "vor 31, 23, 23\n\t" /* codespell:ignore vor */ + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_CBC_decrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_CBC_decrypt_crypto_alldone_%=: \n\t" + "stxvd2x 63, 0, %[iv]\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [iv] "+r" (iv) + : + : "memory", "cc", "0", "9", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", + "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [iv] "r" (iv) + : "memory", "cc", "0", "9", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", + "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#endif /* HAVE_AES_CBC */ +#ifdef WOLFSSL_AES_COUNTER +__attribute__((target("cpu=power8"))) +void AES_CTR_encrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_CTR_encrypt_crypto(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* ctr_p) +#else +void AES_CTR_encrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in asm ("3") = (const unsigned char*)in_p; + register unsigned char* out asm ("4") = (unsigned char*)out_p; + register unsigned long len asm ("5") = (unsigned long)len_p; + register const unsigned char* ks asm ("6") = (const unsigned char*)ks_p; + register int nr asm ("7") = (int)nr_p; + register unsigned char* ctr asm ("8") = (unsigned char*)ctr_p; + register word32* L_AES_PPC64_crypto_one_c asm ("9") = + (word32*)&L_AES_PPC64_crypto_one; +#else + register word32* L_AES_PPC64_crypto_one_c = + (word32*)&L_AES_PPC64_crypto_one; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 9, %[L_AES_PPC64_crypto_one]\n\t" + "lxvd2x 63, 0, 9\n\t" + "cmplwi %[nr], 10\n\t" + "beq L_AES_CTR_encrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_CTR_encrypt_crypto_192_%=\n\t" + "addi 10, %[ks], 0\n\t" + "lxvd2x 32, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 33, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 34, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 35, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 36, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 37, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 38, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 39, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 40, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 41, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 42, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 43, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 44, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 45, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 46, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_CTR_encrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_256_blk8_%=: \n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 17, 16, 31\n\t" + "vadduqm 18, 17, 31\n\t" + "vadduqm 19, 18, 31\n\t" + "vadduqm 20, 19, 31\n\t" + "vadduqm 21, 20, 31\n\t" + "vadduqm 22, 21, 31\n\t" + "vadduqm 23, 22, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 59, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 60, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 61, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 62, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 19, 19, 12\n\t" + "vcipher 20, 20, 12\n\t" + "vcipher 21, 21, 12\n\t" + "vcipher 22, 22, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipher 19, 19, 13\n\t" + "vcipher 20, 20, 13\n\t" + "vcipher 21, 21, 13\n\t" + "vcipher 22, 22, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vcipherlast 19, 19, 14\n\t" + "vcipherlast 20, 20, 14\n\t" + "vcipherlast 21, 21, 14\n\t" + "vcipherlast 22, 22, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_CTR_encrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_CTR_encrypt_crypto_256_blk2_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 17, 16, 31\n\t" + "vadduqm 18, 17, 31\n\t" + "vadduqm 23, 18, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_CTR_encrypt_crypto_256_blk1_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 23, 16, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_CTR_encrypt_crypto_256_done_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 23, 15, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_256_done_%=: \n\t" + "b L_AES_CTR_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_192_%=: \n\t" + "addi 10, %[ks], 0\n\t" + "lxvd2x 32, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 33, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 34, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 35, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 36, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 37, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 38, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 39, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 40, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 41, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 42, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 43, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 44, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_CTR_encrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_192_blk8_%=: \n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 17, 16, 31\n\t" + "vadduqm 18, 17, 31\n\t" + "vadduqm 19, 18, 31\n\t" + "vadduqm 20, 19, 31\n\t" + "vadduqm 21, 20, 31\n\t" + "vadduqm 22, 21, 31\n\t" + "vadduqm 23, 22, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 59, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 60, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 61, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 62, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vcipherlast 19, 19, 12\n\t" + "vcipherlast 20, 20, 12\n\t" + "vcipherlast 21, 21, 12\n\t" + "vcipherlast 22, 22, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_CTR_encrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_CTR_encrypt_crypto_192_blk2_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 17, 16, 31\n\t" + "vadduqm 18, 17, 31\n\t" + "vadduqm 23, 18, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_CTR_encrypt_crypto_192_blk1_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 23, 16, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_CTR_encrypt_crypto_192_done_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 23, 15, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_192_done_%=: \n\t" + "b L_AES_CTR_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_128_%=: \n\t" + "addi 10, %[ks], 0\n\t" + "lxvd2x 32, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 33, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 34, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 35, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 36, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 37, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 38, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 39, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 40, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 41, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 42, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_CTR_encrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_128_blk8_%=: \n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 17, 16, 31\n\t" + "vadduqm 18, 17, 31\n\t" + "vadduqm 19, 18, 31\n\t" + "vadduqm 20, 19, 31\n\t" + "vadduqm 21, 20, 31\n\t" + "vadduqm 22, 21, 31\n\t" + "vadduqm 23, 22, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 59, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 60, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 61, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 62, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vcipherlast 19, 19, 10\n\t" + "vcipherlast 20, 20, 10\n\t" + "vcipherlast 21, 21, 10\n\t" + "vcipherlast 22, 22, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_CTR_encrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_CTR_encrypt_crypto_128_blk2_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 17, 16, 31\n\t" + "vadduqm 18, 17, 31\n\t" + "vadduqm 23, 18, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_CTR_encrypt_crypto_128_blk1_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 16, 15, 31\n\t" + "vadduqm 23, 16, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_CTR_encrypt_crypto_128_done_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vor 15, 23, 23\n\t" /* codespell:ignore vor */ + "vadduqm 23, 15, 31\n\t" + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_CTR_encrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_CTR_encrypt_crypto_alldone_%=: \n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [ctr] "+r" (ctr), + [L_AES_PPC64_crypto_one] "+r" (L_AES_PPC64_crypto_one_c) + : + : "memory", "cc", "0", "10", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", + "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [ctr] "r" (ctr), + [L_AES_PPC64_crypto_one] "r" (L_AES_PPC64_crypto_one_c) + : "memory", "cc", "0", "9", "10", "v0", "v1", "v2", "v3", "v4", "v5", + "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", + "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* WOLFSSL_AES_COUNTER */ +#ifdef HAVE_AESGCM +__attribute__((target("cpu=power8"))) +void AES_GCM_encrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_GCM_encrypt_crypto(const unsigned char* in_p, unsigned char* out_p, + unsigned long len_p, const unsigned char* ks_p, int nr_p, + unsigned char* ctr_p) +#else +void AES_GCM_encrypt_crypto(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const unsigned char* in asm ("3") = (const unsigned char*)in_p; + register unsigned char* out asm ("4") = (unsigned char*)out_p; + register unsigned long len asm ("5") = (unsigned long)len_p; + register const unsigned char* ks asm ("6") = (const unsigned char*)ks_p; + register int nr asm ("7") = (int)nr_p; + register unsigned char* ctr asm ("8") = (unsigned char*)ctr_p; + register word32* L_AES_PPC64_crypto_one_c asm ("9") = + (word32*)&L_AES_PPC64_crypto_one; +#else + register word32* L_AES_PPC64_crypto_one_c = + (word32*)&L_AES_PPC64_crypto_one; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 9, %[L_AES_PPC64_crypto_one]\n\t" + "lxvd2x 63, 0, 9\n\t" + "cmplwi %[nr], 10\n\t" + "beq L_AES_GCM_encrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_GCM_encrypt_crypto_192_%=\n\t" + "addi 10, %[ks], 0\n\t" + "lxvd2x 32, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 33, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 34, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 35, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 36, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 37, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 38, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 39, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 40, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 41, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 42, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 43, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 44, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 45, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 46, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_GCM_encrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_256_blk8_%=: \n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vadduwm 17, 16, 31\n\t" + "vadduwm 18, 17, 31\n\t" + "vadduwm 19, 18, 31\n\t" + "vadduwm 20, 19, 31\n\t" + "vadduwm 21, 20, 31\n\t" + "vadduwm 22, 21, 31\n\t" + "vor 23, 22, 22\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 59, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 60, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 61, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 62, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 19, 19, 12\n\t" + "vcipher 20, 20, 12\n\t" + "vcipher 21, 21, 12\n\t" + "vcipher 22, 22, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipher 19, 19, 13\n\t" + "vcipher 20, 20, 13\n\t" + "vcipher 21, 21, 13\n\t" + "vcipher 22, 22, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vcipherlast 19, 19, 14\n\t" + "vcipherlast 20, 20, 14\n\t" + "vcipherlast 21, 21, 14\n\t" + "vcipherlast 22, 22, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_GCM_encrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_GCM_encrypt_crypto_256_blk2_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vadduwm 17, 16, 31\n\t" + "vadduwm 18, 17, 31\n\t" + "vor 23, 18, 18\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_GCM_encrypt_crypto_256_blk1_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vor 23, 16, 16\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_GCM_encrypt_crypto_256_done_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_256_done_%=: \n\t" + "b L_AES_GCM_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_192_%=: \n\t" + "addi 10, %[ks], 0\n\t" + "lxvd2x 32, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 33, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 34, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 35, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 36, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 37, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 38, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 39, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 40, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 41, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 42, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 43, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 44, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_GCM_encrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_192_blk8_%=: \n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vadduwm 17, 16, 31\n\t" + "vadduwm 18, 17, 31\n\t" + "vadduwm 19, 18, 31\n\t" + "vadduwm 20, 19, 31\n\t" + "vadduwm 21, 20, 31\n\t" + "vadduwm 22, 21, 31\n\t" + "vor 23, 22, 22\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 59, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 60, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 61, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 62, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vcipherlast 19, 19, 12\n\t" + "vcipherlast 20, 20, 12\n\t" + "vcipherlast 21, 21, 12\n\t" + "vcipherlast 22, 22, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_GCM_encrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_GCM_encrypt_crypto_192_blk2_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vadduwm 17, 16, 31\n\t" + "vadduwm 18, 17, 31\n\t" + "vor 23, 18, 18\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_GCM_encrypt_crypto_192_blk1_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vor 23, 16, 16\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_GCM_encrypt_crypto_192_done_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_192_done_%=: \n\t" + "b L_AES_GCM_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_128_%=: \n\t" + "addi 10, %[ks], 0\n\t" + "lxvd2x 32, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 33, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 34, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 35, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 36, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 37, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 38, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 39, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 40, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 41, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "lxvd2x 42, 0, 10\n\t" + "addi 10, 10, 16\n\t" + "cmpdi %[len], 0x80\n\t" + "blt L_AES_GCM_encrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_128_blk8_%=: \n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vadduwm 17, 16, 31\n\t" + "vadduwm 18, 17, 31\n\t" + "vadduwm 19, 18, 31\n\t" + "vadduwm 20, 19, 31\n\t" + "vadduwm 21, 20, 31\n\t" + "vadduwm 22, 21, 31\n\t" + "vor 23, 22, 22\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 59, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 60, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 61, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 62, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vcipherlast 19, 19, 10\n\t" + "vcipherlast 20, 20, 10\n\t" + "vcipherlast 21, 21, 10\n\t" + "vcipherlast 22, 22, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -128\n\t" + "cmpdi %[len], 0x80\n\t" + "bge L_AES_GCM_encrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[len], 0x40\n\t" + "blt L_AES_GCM_encrypt_crypto_128_blk2_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vadduwm 17, 16, 31\n\t" + "vadduwm 18, 17, 31\n\t" + "vor 23, 18, 18\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 57, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 58, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -64\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[len], 32\n\t" + "blt L_AES_GCM_encrypt_crypto_128_blk1_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vadduwm 16, 15, 31\n\t" + "vor 23, 16, 16\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 56, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -32\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[len], 16\n\t" + "blt L_AES_GCM_encrypt_crypto_128_done_%=\n\t" + "lxvd2x 55, 0, %[ctr]\n\t" + "vadduwm 15, 23, 31\n\t" + "vor 23, 15, 15\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[ctr]\n\t" + "lxvd2x 55, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[len], %[len], -16\n\t" + "\n" + "L_AES_GCM_encrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_GCM_encrypt_crypto_alldone_%=: \n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), + [nr] "+r" (nr), [ctr] "+r" (ctr), + [L_AES_PPC64_crypto_one] "+r" (L_AES_PPC64_crypto_one_c) + : + : "memory", "cc", "0", "10", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", + "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [in] "r" (in), [out] "r" (out), [len] "r" (len), [ks] "r" (ks), + [nr] "r" (nr), [ctr] "r" (ctr), + [L_AES_PPC64_crypto_one] "r" (L_AES_PPC64_crypto_one_c) + : "memory", "cc", "0", "9", "10", "v0", "v1", "v2", "v3", "v4", "v5", + "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", + "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* HAVE_AESGCM */ +#ifdef WOLFSSL_AES_XTS +__attribute__((target("cpu=power8"))) +void AES_XTS_encrypt_crypto(const byte* in, byte* out, word32 sz, const byte* i, + byte* key, byte* key2, byte* tmp, int nr); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_XTS_encrypt_crypto(const byte* in_p, byte* out_p, word32 sz_p, + const byte* i_p, byte* key_p, byte* key2_p, byte* tmp_p, int nr_p) +#else +void AES_XTS_encrypt_crypto(const byte* in, byte* out, word32 sz, const byte* i, + byte* key, byte* key2, byte* tmp, int nr) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const byte* in asm ("3") = (const byte*)in_p; + register byte* out asm ("4") = (byte*)out_p; + register word32 sz asm ("5") = (word32)sz_p; + register const byte* i asm ("6") = (const byte*)i_p; + register byte* key asm ("7") = (byte*)key_p; + register byte* key2 asm ("8") = (byte*)key2_p; + register byte* tmp asm ("9") = (byte*)tmp_p; + register int nr asm ("10") = (int)nr_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "subi 1, 1, 40\n\t" + "li 12, 8\n\t" + "lxvd2x 63, 0, %[i]\n\t" + "cmplwi %[nr], 10\n\t" + "beq L_AES_XTS_encrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_XTS_encrypt_crypto_192_%=\n\t" + "addi 11, %[key2], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 45, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 46, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "vxor 31, 31, 0\n\t" + "vcipher 31, 31, 1\n\t" + "vcipher 31, 31, 2\n\t" + "vcipher 31, 31, 3\n\t" + "vcipher 31, 31, 4\n\t" + "vcipher 31, 31, 5\n\t" + "vcipher 31, 31, 6\n\t" + "vcipher 31, 31, 7\n\t" + "vcipher 31, 31, 8\n\t" + "vcipher 31, 31, 9\n\t" + "vcipher 31, 31, 10\n\t" + "vcipher 31, 31, 11\n\t" + "vcipher 31, 31, 12\n\t" + "vcipher 31, 31, 13\n\t" + "vcipherlast 31, 31, 14\n\t" + "addi 11, %[key], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 45, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 46, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "cmpdi %[sz], 0x80\n\t" + "blt L_AES_XTS_encrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_256_blk8_%=: \n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 59, 0, %[tmp]\n\t" + "stxvd2x 59, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 60, 0, %[tmp]\n\t" + "stxvd2x 60, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 61, 0, %[tmp]\n\t" + "stxvd2x 61, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 62, 0, %[tmp]\n\t" + "stxvd2x 62, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 19, 19, 12\n\t" + "vcipher 20, 20, 12\n\t" + "vcipher 21, 21, 12\n\t" + "vcipher 22, 22, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipher 19, 19, 13\n\t" + "vcipher 20, 20, 13\n\t" + "vcipher 21, 21, 13\n\t" + "vcipher 22, 22, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vcipherlast 19, 19, 14\n\t" + "vcipherlast 20, 20, 14\n\t" + "vcipherlast 21, 21, 14\n\t" + "vcipherlast 22, 22, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -128\n\t" + "cmpdi %[sz], 0x80\n\t" + "bge L_AES_XTS_encrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[sz], 0x40\n\t" + "blt L_AES_XTS_encrypt_crypto_256_blk2_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 17, 17, 12\n\t" + "vcipher 18, 18, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipher 17, 17, 13\n\t" + "vcipher 18, 18, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vcipherlast 17, 17, 14\n\t" + "vcipherlast 18, 18, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -64\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[sz], 32\n\t" + "blt L_AES_XTS_encrypt_crypto_256_blk1_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 16, 16, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipher 16, 16, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vcipherlast 16, 16, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -32\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[sz], 16\n\t" + "blt L_AES_XTS_encrypt_crypto_256_done_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 15, 15, 12\n\t" + "vcipher 15, 15, 13\n\t" + "vcipherlast 15, 15, 14\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -16\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_256_done_%=: \n\t" + "b L_AES_XTS_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_192_%=: \n\t" + "addi 11, %[key2], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "vxor 31, 31, 0\n\t" + "vcipher 31, 31, 1\n\t" + "vcipher 31, 31, 2\n\t" + "vcipher 31, 31, 3\n\t" + "vcipher 31, 31, 4\n\t" + "vcipher 31, 31, 5\n\t" + "vcipher 31, 31, 6\n\t" + "vcipher 31, 31, 7\n\t" + "vcipher 31, 31, 8\n\t" + "vcipher 31, 31, 9\n\t" + "vcipher 31, 31, 10\n\t" + "vcipher 31, 31, 11\n\t" + "vcipherlast 31, 31, 12\n\t" + "addi 11, %[key], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "cmpdi %[sz], 0x80\n\t" + "blt L_AES_XTS_encrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_192_blk8_%=: \n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 59, 0, %[tmp]\n\t" + "stxvd2x 59, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 60, 0, %[tmp]\n\t" + "stxvd2x 60, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 61, 0, %[tmp]\n\t" + "stxvd2x 61, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 62, 0, %[tmp]\n\t" + "stxvd2x 62, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 19, 19, 10\n\t" + "vcipher 20, 20, 10\n\t" + "vcipher 21, 21, 10\n\t" + "vcipher 22, 22, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipher 19, 19, 11\n\t" + "vcipher 20, 20, 11\n\t" + "vcipher 21, 21, 11\n\t" + "vcipher 22, 22, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vcipherlast 19, 19, 12\n\t" + "vcipherlast 20, 20, 12\n\t" + "vcipherlast 21, 21, 12\n\t" + "vcipherlast 22, 22, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -128\n\t" + "cmpdi %[sz], 0x80\n\t" + "bge L_AES_XTS_encrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[sz], 0x40\n\t" + "blt L_AES_XTS_encrypt_crypto_192_blk2_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 17, 17, 10\n\t" + "vcipher 18, 18, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipher 17, 17, 11\n\t" + "vcipher 18, 18, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vcipherlast 17, 17, 12\n\t" + "vcipherlast 18, 18, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -64\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[sz], 32\n\t" + "blt L_AES_XTS_encrypt_crypto_192_blk1_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 16, 16, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipher 16, 16, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vcipherlast 16, 16, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -32\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[sz], 16\n\t" + "blt L_AES_XTS_encrypt_crypto_192_done_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 15, 15, 10\n\t" + "vcipher 15, 15, 11\n\t" + "vcipherlast 15, 15, 12\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -16\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_192_done_%=: \n\t" + "b L_AES_XTS_encrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_128_%=: \n\t" + "addi 11, %[key2], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "vxor 31, 31, 0\n\t" + "vcipher 31, 31, 1\n\t" + "vcipher 31, 31, 2\n\t" + "vcipher 31, 31, 3\n\t" + "vcipher 31, 31, 4\n\t" + "vcipher 31, 31, 5\n\t" + "vcipher 31, 31, 6\n\t" + "vcipher 31, 31, 7\n\t" + "vcipher 31, 31, 8\n\t" + "vcipher 31, 31, 9\n\t" + "vcipherlast 31, 31, 10\n\t" + "addi 11, %[key], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "cmpdi %[sz], 0x80\n\t" + "blt L_AES_XTS_encrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_128_blk8_%=: \n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 59, 0, %[tmp]\n\t" + "stxvd2x 59, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 60, 0, %[tmp]\n\t" + "stxvd2x 60, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 61, 0, %[tmp]\n\t" + "stxvd2x 61, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 62, 0, %[tmp]\n\t" + "stxvd2x 62, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 19, 19, 1\n\t" + "vcipher 20, 20, 1\n\t" + "vcipher 21, 21, 1\n\t" + "vcipher 22, 22, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 19, 19, 2\n\t" + "vcipher 20, 20, 2\n\t" + "vcipher 21, 21, 2\n\t" + "vcipher 22, 22, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 19, 19, 3\n\t" + "vcipher 20, 20, 3\n\t" + "vcipher 21, 21, 3\n\t" + "vcipher 22, 22, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 19, 19, 4\n\t" + "vcipher 20, 20, 4\n\t" + "vcipher 21, 21, 4\n\t" + "vcipher 22, 22, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 19, 19, 5\n\t" + "vcipher 20, 20, 5\n\t" + "vcipher 21, 21, 5\n\t" + "vcipher 22, 22, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 19, 19, 6\n\t" + "vcipher 20, 20, 6\n\t" + "vcipher 21, 21, 6\n\t" + "vcipher 22, 22, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 19, 19, 7\n\t" + "vcipher 20, 20, 7\n\t" + "vcipher 21, 21, 7\n\t" + "vcipher 22, 22, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 19, 19, 8\n\t" + "vcipher 20, 20, 8\n\t" + "vcipher 21, 21, 8\n\t" + "vcipher 22, 22, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipher 19, 19, 9\n\t" + "vcipher 20, 20, 9\n\t" + "vcipher 21, 21, 9\n\t" + "vcipher 22, 22, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vcipherlast 19, 19, 10\n\t" + "vcipherlast 20, 20, 10\n\t" + "vcipherlast 21, 21, 10\n\t" + "vcipherlast 22, 22, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -128\n\t" + "cmpdi %[sz], 0x80\n\t" + "bge L_AES_XTS_encrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[sz], 0x40\n\t" + "blt L_AES_XTS_encrypt_crypto_128_blk2_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 17, 17, 1\n\t" + "vcipher 18, 18, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 17, 17, 2\n\t" + "vcipher 18, 18, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 17, 17, 3\n\t" + "vcipher 18, 18, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 17, 17, 4\n\t" + "vcipher 18, 18, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 17, 17, 5\n\t" + "vcipher 18, 18, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 17, 17, 6\n\t" + "vcipher 18, 18, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 17, 17, 7\n\t" + "vcipher 18, 18, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 17, 17, 8\n\t" + "vcipher 18, 18, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipher 17, 17, 9\n\t" + "vcipher 18, 18, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vcipherlast 17, 17, 10\n\t" + "vcipherlast 18, 18, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -64\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[sz], 32\n\t" + "blt L_AES_XTS_encrypt_crypto_128_blk1_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 16, 16, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 16, 16, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 16, 16, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 16, 16, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 16, 16, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 16, 16, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 16, 16, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 16, 16, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipher 16, 16, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vcipherlast 16, 16, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -32\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[sz], 16\n\t" + "blt L_AES_XTS_encrypt_crypto_128_done_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 15, 15, 0\n\t" + "vcipher 15, 15, 1\n\t" + "vcipher 15, 15, 2\n\t" + "vcipher 15, 15, 3\n\t" + "vcipher 15, 15, 4\n\t" + "vcipher 15, 15, 5\n\t" + "vcipher 15, 15, 6\n\t" + "vcipher 15, 15, 7\n\t" + "vcipher 15, 15, 8\n\t" + "vcipher 15, 15, 9\n\t" + "vcipherlast 15, 15, 10\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -16\n\t" + "\n" + "L_AES_XTS_encrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_XTS_encrypt_crypto_alldone_%=: \n\t" + "addi 1, 1, 40\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i), + [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp), + [nr] "+r" (nr) + : + : "memory", "cc", "0", "11", "12", "14", "15", "16", "17", "v0", "v1", + "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", + "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", + "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", + "v31" +#else + : + : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [i] "r" (i), + [key] "r" (key), [key2] "r" (key2), [tmp] "r" (tmp), [nr] "r" (nr) + : "memory", "cc", "0", "11", "12", "14", "15", "16", "17", "v0", "v1", + "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", + "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", + "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", + "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#ifdef HAVE_AES_DECRYPT +__attribute__((target("cpu=power8"))) +void AES_XTS_decrypt_crypto(const byte* in, byte* out, word32 sz, const byte* i, + byte* key, byte* key2, byte* tmp, int nr); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void AES_XTS_decrypt_crypto(const byte* in_p, byte* out_p, word32 sz_p, + const byte* i_p, byte* key_p, byte* key2_p, byte* tmp_p, int nr_p) +#else +void AES_XTS_decrypt_crypto(const byte* in, byte* out, word32 sz, const byte* i, + byte* key, byte* key2, byte* tmp, int nr) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register const byte* in asm ("3") = (const byte*)in_p; + register byte* out asm ("4") = (byte*)out_p; + register word32 sz asm ("5") = (word32)sz_p; + register const byte* i asm ("6") = (const byte*)i_p; + register byte* key asm ("7") = (byte*)key_p; + register byte* key2 asm ("8") = (byte*)key2_p; + register byte* tmp asm ("9") = (byte*)tmp_p; + register int nr asm ("10") = (int)nr_p; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "subi 1, 1, 40\n\t" + "li 12, 8\n\t" + "lxvd2x 63, 0, %[i]\n\t" + "cmplwi %[nr], 10\n\t" + "beq L_AES_XTS_decrypt_crypto_128_%=\n\t" + "cmplwi %[nr], 12\n\t" + "beq L_AES_XTS_decrypt_crypto_192_%=\n\t" + "addi 11, %[key2], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 45, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 46, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "vxor 31, 31, 0\n\t" + "vcipher 31, 31, 1\n\t" + "vcipher 31, 31, 2\n\t" + "vcipher 31, 31, 3\n\t" + "vcipher 31, 31, 4\n\t" + "vcipher 31, 31, 5\n\t" + "vcipher 31, 31, 6\n\t" + "vcipher 31, 31, 7\n\t" + "vcipher 31, 31, 8\n\t" + "vcipher 31, 31, 9\n\t" + "vcipher 31, 31, 10\n\t" + "vcipher 31, 31, 11\n\t" + "vcipher 31, 31, 12\n\t" + "vcipher 31, 31, 13\n\t" + "vcipherlast 31, 31, 14\n\t" + "addi 11, %[key], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 45, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 46, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "cmpdi %[sz], 0x80\n\t" + "blt L_AES_XTS_decrypt_crypto_256_blk4_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_256_blk8_%=: \n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 59, 0, %[tmp]\n\t" + "stxvd2x 59, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 60, 0, %[tmp]\n\t" + "stxvd2x 60, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 61, 0, %[tmp]\n\t" + "stxvd2x 61, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 62, 0, %[tmp]\n\t" + "stxvd2x 62, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 19, 19, 10\n\t" + "vncipher 20, 20, 10\n\t" + "vncipher 21, 21, 10\n\t" + "vncipher 22, 22, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 19, 19, 11\n\t" + "vncipher 20, 20, 11\n\t" + "vncipher 21, 21, 11\n\t" + "vncipher 22, 22, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 17, 17, 12\n\t" + "vncipher 18, 18, 12\n\t" + "vncipher 19, 19, 12\n\t" + "vncipher 20, 20, 12\n\t" + "vncipher 21, 21, 12\n\t" + "vncipher 22, 22, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipher 17, 17, 13\n\t" + "vncipher 18, 18, 13\n\t" + "vncipher 19, 19, 13\n\t" + "vncipher 20, 20, 13\n\t" + "vncipher 21, 21, 13\n\t" + "vncipher 22, 22, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vncipherlast 17, 17, 14\n\t" + "vncipherlast 18, 18, 14\n\t" + "vncipherlast 19, 19, 14\n\t" + "vncipherlast 20, 20, 14\n\t" + "vncipherlast 21, 21, 14\n\t" + "vncipherlast 22, 22, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -128\n\t" + "cmpdi %[sz], 0x80\n\t" + "bge L_AES_XTS_decrypt_crypto_256_blk8_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_256_blk4_%=: \n\t" + "cmpdi %[sz], 0x40\n\t" + "blt L_AES_XTS_decrypt_crypto_256_blk2_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 17, 17, 12\n\t" + "vncipher 18, 18, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipher 17, 17, 13\n\t" + "vncipher 18, 18, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vncipherlast 17, 17, 14\n\t" + "vncipherlast 18, 18, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -64\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_256_blk2_%=: \n\t" + "cmpdi %[sz], 32\n\t" + "blt L_AES_XTS_decrypt_crypto_256_blk1_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 16, 16, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipher 16, 16, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vncipherlast 16, 16, 14\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -32\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_256_blk1_%=: \n\t" + "cmpdi %[sz], 16\n\t" + "blt L_AES_XTS_decrypt_crypto_256_done_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 15, 15, 12\n\t" + "vncipher 15, 15, 13\n\t" + "vncipherlast 15, 15, 14\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -16\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_256_done_%=: \n\t" + "b L_AES_XTS_decrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_192_%=: \n\t" + "addi 11, %[key2], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "vxor 31, 31, 0\n\t" + "vcipher 31, 31, 1\n\t" + "vcipher 31, 31, 2\n\t" + "vcipher 31, 31, 3\n\t" + "vcipher 31, 31, 4\n\t" + "vcipher 31, 31, 5\n\t" + "vcipher 31, 31, 6\n\t" + "vcipher 31, 31, 7\n\t" + "vcipher 31, 31, 8\n\t" + "vcipher 31, 31, 9\n\t" + "vcipher 31, 31, 10\n\t" + "vcipher 31, 31, 11\n\t" + "vcipherlast 31, 31, 12\n\t" + "addi 11, %[key], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 43, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 44, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "cmpdi %[sz], 0x80\n\t" + "blt L_AES_XTS_decrypt_crypto_192_blk4_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_192_blk8_%=: \n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 59, 0, %[tmp]\n\t" + "stxvd2x 59, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 60, 0, %[tmp]\n\t" + "stxvd2x 60, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 61, 0, %[tmp]\n\t" + "stxvd2x 61, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 62, 0, %[tmp]\n\t" + "stxvd2x 62, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 19, 19, 10\n\t" + "vncipher 20, 20, 10\n\t" + "vncipher 21, 21, 10\n\t" + "vncipher 22, 22, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipher 19, 19, 11\n\t" + "vncipher 20, 20, 11\n\t" + "vncipher 21, 21, 11\n\t" + "vncipher 22, 22, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vncipherlast 17, 17, 12\n\t" + "vncipherlast 18, 18, 12\n\t" + "vncipherlast 19, 19, 12\n\t" + "vncipherlast 20, 20, 12\n\t" + "vncipherlast 21, 21, 12\n\t" + "vncipherlast 22, 22, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -128\n\t" + "cmpdi %[sz], 0x80\n\t" + "bge L_AES_XTS_decrypt_crypto_192_blk8_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_192_blk4_%=: \n\t" + "cmpdi %[sz], 0x40\n\t" + "blt L_AES_XTS_decrypt_crypto_192_blk2_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 17, 17, 10\n\t" + "vncipher 18, 18, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipher 17, 17, 11\n\t" + "vncipher 18, 18, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vncipherlast 17, 17, 12\n\t" + "vncipherlast 18, 18, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -64\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_192_blk2_%=: \n\t" + "cmpdi %[sz], 32\n\t" + "blt L_AES_XTS_decrypt_crypto_192_blk1_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 16, 16, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipher 16, 16, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vncipherlast 16, 16, 12\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -32\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_192_blk1_%=: \n\t" + "cmpdi %[sz], 16\n\t" + "blt L_AES_XTS_decrypt_crypto_192_done_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 15, 15, 10\n\t" + "vncipher 15, 15, 11\n\t" + "vncipherlast 15, 15, 12\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -16\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_192_done_%=: \n\t" + "b L_AES_XTS_decrypt_crypto_alldone_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_128_%=: \n\t" + "addi 11, %[key2], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "vxor 31, 31, 0\n\t" + "vcipher 31, 31, 1\n\t" + "vcipher 31, 31, 2\n\t" + "vcipher 31, 31, 3\n\t" + "vcipher 31, 31, 4\n\t" + "vcipher 31, 31, 5\n\t" + "vcipher 31, 31, 6\n\t" + "vcipher 31, 31, 7\n\t" + "vcipher 31, 31, 8\n\t" + "vcipher 31, 31, 9\n\t" + "vcipherlast 31, 31, 10\n\t" + "addi 11, %[key], 0\n\t" + "lxvd2x 32, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 33, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 34, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 35, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 36, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 37, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 38, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 39, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 40, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 41, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "lxvd2x 42, 0, 11\n\t" + "addi 11, 11, 16\n\t" + "cmpdi %[sz], 0x80\n\t" + "blt L_AES_XTS_decrypt_crypto_128_blk4_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_128_blk8_%=: \n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 59, 0, %[tmp]\n\t" + "stxvd2x 59, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 60, 0, %[tmp]\n\t" + "stxvd2x 60, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 61, 0, %[tmp]\n\t" + "stxvd2x 61, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 62, 0, %[tmp]\n\t" + "stxvd2x 62, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 51, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 52, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 53, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 54, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vxor 19, 19, 0\n\t" + "vxor 20, 20, 0\n\t" + "vxor 21, 21, 0\n\t" + "vxor 22, 22, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 19, 19, 1\n\t" + "vncipher 20, 20, 1\n\t" + "vncipher 21, 21, 1\n\t" + "vncipher 22, 22, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 19, 19, 2\n\t" + "vncipher 20, 20, 2\n\t" + "vncipher 21, 21, 2\n\t" + "vncipher 22, 22, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 19, 19, 3\n\t" + "vncipher 20, 20, 3\n\t" + "vncipher 21, 21, 3\n\t" + "vncipher 22, 22, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 19, 19, 4\n\t" + "vncipher 20, 20, 4\n\t" + "vncipher 21, 21, 4\n\t" + "vncipher 22, 22, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 19, 19, 5\n\t" + "vncipher 20, 20, 5\n\t" + "vncipher 21, 21, 5\n\t" + "vncipher 22, 22, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 19, 19, 6\n\t" + "vncipher 20, 20, 6\n\t" + "vncipher 21, 21, 6\n\t" + "vncipher 22, 22, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 19, 19, 7\n\t" + "vncipher 20, 20, 7\n\t" + "vncipher 21, 21, 7\n\t" + "vncipher 22, 22, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 19, 19, 8\n\t" + "vncipher 20, 20, 8\n\t" + "vncipher 21, 21, 8\n\t" + "vncipher 22, 22, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipher 19, 19, 9\n\t" + "vncipher 20, 20, 9\n\t" + "vncipher 21, 21, 9\n\t" + "vncipher 22, 22, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vncipherlast 17, 17, 10\n\t" + "vncipherlast 18, 18, 10\n\t" + "vncipherlast 19, 19, 10\n\t" + "vncipherlast 20, 20, 10\n\t" + "vncipherlast 21, 21, 10\n\t" + "vncipherlast 22, 22, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 19, 19, 27\n\t" + "vxor 20, 20, 28\n\t" + "vxor 21, 21, 29\n\t" + "vxor 22, 22, 30\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 51, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 52, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 53, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 54, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -128\n\t" + "cmpdi %[sz], 0x80\n\t" + "bge L_AES_XTS_decrypt_crypto_128_blk8_%=\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_128_blk4_%=: \n\t" + "cmpdi %[sz], 0x40\n\t" + "blt L_AES_XTS_decrypt_crypto_128_blk2_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 57, 0, %[tmp]\n\t" + "stxvd2x 57, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 58, 0, %[tmp]\n\t" + "stxvd2x 58, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 49, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 50, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vxor 17, 17, 0\n\t" + "vxor 18, 18, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 17, 17, 1\n\t" + "vncipher 18, 18, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 17, 17, 2\n\t" + "vncipher 18, 18, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 17, 17, 3\n\t" + "vncipher 18, 18, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 17, 17, 4\n\t" + "vncipher 18, 18, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 17, 17, 5\n\t" + "vncipher 18, 18, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 17, 17, 6\n\t" + "vncipher 18, 18, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 17, 17, 7\n\t" + "vncipher 18, 18, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 17, 17, 8\n\t" + "vncipher 18, 18, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipher 17, 17, 9\n\t" + "vncipher 18, 18, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vncipherlast 17, 17, 10\n\t" + "vncipherlast 18, 18, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 17, 17, 25\n\t" + "vxor 18, 18, 26\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 49, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 50, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -64\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_128_blk2_%=: \n\t" + "cmpdi %[sz], 32\n\t" + "blt L_AES_XTS_decrypt_crypto_128_blk1_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 56, 0, %[tmp]\n\t" + "stxvd2x 56, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "lxvd2x 48, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "vxor 15, 15, 0\n\t" + "vxor 16, 16, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 16, 16, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 16, 16, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 16, 16, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 16, 16, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 16, 16, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 16, 16, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 16, 16, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 16, 16, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipher 16, 16, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vncipherlast 16, 16, 10\n\t" + "vxor 15, 15, 23\n\t" + "vxor 16, 16, 24\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "stxvd2x 48, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -32\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_128_blk1_%=: \n\t" + "cmpdi %[sz], 16\n\t" + "blt L_AES_XTS_decrypt_crypto_128_done_%=\n\t" + "vor 23, 31, 31\n\t" /* codespell:ignore vor */ + "stxvd2x 55, 0, %[tmp]\n\t" + "ldbrx 14, 0, %[tmp]\n\t" + "ldbrx 15, %[tmp], 12\n\t" + "sradi 16, 15, 63\n\t" + "srdi 17, 14, 63\n\t" + "andi. 16, 16, 0x87\n\t" + "sldi 15, 15, 1\n\t" + "sldi 14, 14, 1\n\t" + "xor 15, 15, 17\n\t" + "xor 14, 14, 16\n\t" + "stdbrx 14, 0, %[tmp]\n\t" + "stdbrx 15, %[tmp], 12\n\t" + "lxvd2x 63, 0, %[tmp]\n\t" + "lxvd2x 47, 0, %[in]\n\t" + "addi %[in], %[in], 16\n\t" + "vxor 15, 15, 23\n\t" + "vxor 15, 15, 0\n\t" + "vncipher 15, 15, 1\n\t" + "vncipher 15, 15, 2\n\t" + "vncipher 15, 15, 3\n\t" + "vncipher 15, 15, 4\n\t" + "vncipher 15, 15, 5\n\t" + "vncipher 15, 15, 6\n\t" + "vncipher 15, 15, 7\n\t" + "vncipher 15, 15, 8\n\t" + "vncipher 15, 15, 9\n\t" + "vncipherlast 15, 15, 10\n\t" + "vxor 15, 15, 23\n\t" + "stxvd2x 47, 0, %[out]\n\t" + "addi %[out], %[out], 16\n\t" + "addi %[sz], %[sz], -16\n\t" + "\n" + "L_AES_XTS_decrypt_crypto_128_done_%=: \n\t" + "\n" + "L_AES_XTS_decrypt_crypto_alldone_%=: \n\t" + "addi 1, 1, 40\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [in] "+r" (in), [out] "+r" (out), [sz] "+r" (sz), [i] "+r" (i), + [key] "+r" (key), [key2] "+r" (key2), [tmp] "+r" (tmp), + [nr] "+r" (nr) + : + : "memory", "cc", "0", "11", "12", "14", "15", "16", "17", "v0", "v1", + "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", + "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", + "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", + "v31" +#else + : + : [in] "r" (in), [out] "r" (out), [sz] "r" (sz), [i] "r" (i), + [key] "r" (key), [key2] "r" (key2), [tmp] "r" (tmp), [nr] "r" (nr) + : "memory", "cc", "0", "11", "12", "14", "15", "16", "17", "v0", "v1", + "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", + "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", + "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", + "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* HAVE_AES_DECRYPT */ +#endif /* WOLFSSL_AES_XTS */ +#endif /* WOLFSSL_PPC64_ASM_CRYPTO */ #endif /* !defined(NO_AES) && defined(WOLFSSL_PPC64_ASM) */ #endif /* WOLFSSL_PPC64_ASM */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S new file mode 100644 index 00000000000..a9a72b45c48 --- /dev/null +++ b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S @@ -0,0 +1,4794 @@ +/* ppc64-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 + */ + +#include + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha2/sha256.rb ppc64 \ + * ../wolfssl/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.S + */ +#ifdef WOLFSSL_PPC64_ASM +#ifndef WOLFSSL_PPC64_ASM_INLINE +#ifndef NO_SHA256 +#ifndef __APPLE__ + .text + .type L_SHA256_transform_len_k, %object + .size L_SHA256_transform_len_k, 256 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_SHA256_transform_len_k: + .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +#ifndef __APPLE__ +.text +.globl Transform_Sha256_Len +.type Transform_Sha256_Len,@function +.align 16 +Transform_Sha256_Len: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry Transform_Sha256_Len, .-Transform_Sha256_Len +#endif +#else +.section __TEXT,__text +.globl _Transform_Sha256_Len +.p2align 4 +_Transform_Sha256_Len: +#endif /* __APPLE__ */ + stdu 1, -152(1) + mflr 0 + std 0, 144(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + std 18, 32(1) + std 19, 40(1) + std 20, 48(1) + std 21, 56(1) + std 22, 64(1) + std 23, 72(1) + std 24, 80(1) + std 25, 88(1) + std 26, 96(1) + std 27, 104(1) + std 28, 112(1) + std 29, 120(1) + std 30, 128(1) + std 31, 136(1) + srwi 5, 5, 6 + addis 6, 2, L_SHA256_transform_len_k@toc@ha + addi 6, 6, L_SHA256_transform_len_k@toc@l + # Copy digest to add in at end + lwz 7, 0(3) + lwz 8, 4(3) + lwz 9, 8(3) + lwz 10, 12(3) + lwz 11, 16(3) + lwz 12, 20(3) + lwz 14, 24(3) + lwz 15, 28(3) +#ifndef WOLFSSL_PPC64_ASM_SMALL + mtctr 5 + # Start of loop processing a block +L_SHA256_transform_len_begin: + # Load W - 64 bytes + lwz 16, 0(4) + lwz 17, 4(4) + lwz 18, 8(4) + lwz 19, 12(4) + lwz 20, 16(4) + lwz 21, 20(4) + lwz 22, 24(4) + lwz 23, 28(4) + lwz 24, 32(4) + lwz 25, 36(4) + lwz 26, 40(4) + lwz 27, 44(4) + lwz 28, 48(4) + lwz 29, 52(4) + lwz 30, 56(4) + lwz 31, 60(4) + # Start of 16 rounds + # Round 0 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotlwi 0, 17, 25 + rotlwi 5, 17, 14 + xor 0, 0, 5 + srwi 5, 17, 3 + xor 0, 0, 5 + add 16, 16, 0 + rotlwi 0, 30, 15 + rotlwi 5, 30, 13 + xor 0, 0, 5 + srwi 5, 30, 10 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotlwi 0, 18, 25 + rotlwi 5, 18, 14 + xor 0, 0, 5 + srwi 5, 18, 3 + xor 0, 0, 5 + add 17, 17, 0 + rotlwi 0, 31, 15 + rotlwi 5, 31, 13 + xor 0, 0, 5 + srwi 5, 31, 10 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 8(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotlwi 0, 19, 25 + rotlwi 5, 19, 14 + xor 0, 0, 5 + srwi 5, 19, 3 + xor 0, 0, 5 + add 18, 18, 0 + rotlwi 0, 16, 15 + rotlwi 5, 16, 13 + xor 0, 0, 5 + srwi 5, 16, 10 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 12(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotlwi 0, 20, 25 + rotlwi 5, 20, 14 + xor 0, 0, 5 + srwi 5, 20, 3 + xor 0, 0, 5 + add 19, 19, 0 + rotlwi 0, 17, 15 + rotlwi 5, 17, 13 + xor 0, 0, 5 + srwi 5, 17, 10 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 16(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotlwi 0, 21, 25 + rotlwi 5, 21, 14 + xor 0, 0, 5 + srwi 5, 21, 3 + xor 0, 0, 5 + add 20, 20, 0 + rotlwi 0, 18, 15 + rotlwi 5, 18, 13 + xor 0, 0, 5 + srwi 5, 18, 10 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 20(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotlwi 0, 22, 25 + rotlwi 5, 22, 14 + xor 0, 0, 5 + srwi 5, 22, 3 + xor 0, 0, 5 + add 21, 21, 0 + rotlwi 0, 19, 15 + rotlwi 5, 19, 13 + xor 0, 0, 5 + srwi 5, 19, 10 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 24(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotlwi 0, 23, 25 + rotlwi 5, 23, 14 + xor 0, 0, 5 + srwi 5, 23, 3 + xor 0, 0, 5 + add 22, 22, 0 + rotlwi 0, 20, 15 + rotlwi 5, 20, 13 + xor 0, 0, 5 + srwi 5, 20, 10 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 28(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotlwi 0, 24, 25 + rotlwi 5, 24, 14 + xor 0, 0, 5 + srwi 5, 24, 3 + xor 0, 0, 5 + add 23, 23, 0 + rotlwi 0, 21, 15 + rotlwi 5, 21, 13 + xor 0, 0, 5 + srwi 5, 21, 10 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotlwi 0, 25, 25 + rotlwi 5, 25, 14 + xor 0, 0, 5 + srwi 5, 25, 3 + xor 0, 0, 5 + add 24, 24, 0 + rotlwi 0, 22, 15 + rotlwi 5, 22, 13 + xor 0, 0, 5 + srwi 5, 22, 10 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotlwi 0, 26, 25 + rotlwi 5, 26, 14 + xor 0, 0, 5 + srwi 5, 26, 3 + xor 0, 0, 5 + add 25, 25, 0 + rotlwi 0, 23, 15 + rotlwi 5, 23, 13 + xor 0, 0, 5 + srwi 5, 23, 10 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 40(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotlwi 0, 27, 25 + rotlwi 5, 27, 14 + xor 0, 0, 5 + srwi 5, 27, 3 + xor 0, 0, 5 + add 26, 26, 0 + rotlwi 0, 24, 15 + rotlwi 5, 24, 13 + xor 0, 0, 5 + srwi 5, 24, 10 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 44(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotlwi 0, 28, 25 + rotlwi 5, 28, 14 + xor 0, 0, 5 + srwi 5, 28, 3 + xor 0, 0, 5 + add 27, 27, 0 + rotlwi 0, 25, 15 + rotlwi 5, 25, 13 + xor 0, 0, 5 + srwi 5, 25, 10 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 48(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotlwi 0, 29, 25 + rotlwi 5, 29, 14 + xor 0, 0, 5 + srwi 5, 29, 3 + xor 0, 0, 5 + add 28, 28, 0 + rotlwi 0, 26, 15 + rotlwi 5, 26, 13 + xor 0, 0, 5 + srwi 5, 26, 10 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 52(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotlwi 0, 30, 25 + rotlwi 5, 30, 14 + xor 0, 0, 5 + srwi 5, 30, 3 + xor 0, 0, 5 + add 29, 29, 0 + rotlwi 0, 27, 15 + rotlwi 5, 27, 13 + xor 0, 0, 5 + srwi 5, 27, 10 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 56(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotlwi 0, 31, 25 + rotlwi 5, 31, 14 + xor 0, 0, 5 + srwi 5, 31, 3 + xor 0, 0, 5 + add 30, 30, 0 + rotlwi 0, 28, 15 + rotlwi 5, 28, 13 + xor 0, 0, 5 + srwi 5, 28, 10 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 60(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotlwi 0, 16, 25 + rotlwi 5, 16, 14 + xor 0, 0, 5 + srwi 5, 16, 3 + xor 0, 0, 5 + add 31, 31, 0 + rotlwi 0, 29, 15 + rotlwi 5, 29, 13 + xor 0, 0, 5 + srwi 5, 29, 10 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x40 + # Round 0 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotlwi 0, 17, 25 + rotlwi 5, 17, 14 + xor 0, 0, 5 + srwi 5, 17, 3 + xor 0, 0, 5 + add 16, 16, 0 + rotlwi 0, 30, 15 + rotlwi 5, 30, 13 + xor 0, 0, 5 + srwi 5, 30, 10 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotlwi 0, 18, 25 + rotlwi 5, 18, 14 + xor 0, 0, 5 + srwi 5, 18, 3 + xor 0, 0, 5 + add 17, 17, 0 + rotlwi 0, 31, 15 + rotlwi 5, 31, 13 + xor 0, 0, 5 + srwi 5, 31, 10 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 8(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotlwi 0, 19, 25 + rotlwi 5, 19, 14 + xor 0, 0, 5 + srwi 5, 19, 3 + xor 0, 0, 5 + add 18, 18, 0 + rotlwi 0, 16, 15 + rotlwi 5, 16, 13 + xor 0, 0, 5 + srwi 5, 16, 10 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 12(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotlwi 0, 20, 25 + rotlwi 5, 20, 14 + xor 0, 0, 5 + srwi 5, 20, 3 + xor 0, 0, 5 + add 19, 19, 0 + rotlwi 0, 17, 15 + rotlwi 5, 17, 13 + xor 0, 0, 5 + srwi 5, 17, 10 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 16(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotlwi 0, 21, 25 + rotlwi 5, 21, 14 + xor 0, 0, 5 + srwi 5, 21, 3 + xor 0, 0, 5 + add 20, 20, 0 + rotlwi 0, 18, 15 + rotlwi 5, 18, 13 + xor 0, 0, 5 + srwi 5, 18, 10 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 20(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotlwi 0, 22, 25 + rotlwi 5, 22, 14 + xor 0, 0, 5 + srwi 5, 22, 3 + xor 0, 0, 5 + add 21, 21, 0 + rotlwi 0, 19, 15 + rotlwi 5, 19, 13 + xor 0, 0, 5 + srwi 5, 19, 10 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 24(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotlwi 0, 23, 25 + rotlwi 5, 23, 14 + xor 0, 0, 5 + srwi 5, 23, 3 + xor 0, 0, 5 + add 22, 22, 0 + rotlwi 0, 20, 15 + rotlwi 5, 20, 13 + xor 0, 0, 5 + srwi 5, 20, 10 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 28(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotlwi 0, 24, 25 + rotlwi 5, 24, 14 + xor 0, 0, 5 + srwi 5, 24, 3 + xor 0, 0, 5 + add 23, 23, 0 + rotlwi 0, 21, 15 + rotlwi 5, 21, 13 + xor 0, 0, 5 + srwi 5, 21, 10 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotlwi 0, 25, 25 + rotlwi 5, 25, 14 + xor 0, 0, 5 + srwi 5, 25, 3 + xor 0, 0, 5 + add 24, 24, 0 + rotlwi 0, 22, 15 + rotlwi 5, 22, 13 + xor 0, 0, 5 + srwi 5, 22, 10 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotlwi 0, 26, 25 + rotlwi 5, 26, 14 + xor 0, 0, 5 + srwi 5, 26, 3 + xor 0, 0, 5 + add 25, 25, 0 + rotlwi 0, 23, 15 + rotlwi 5, 23, 13 + xor 0, 0, 5 + srwi 5, 23, 10 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 40(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotlwi 0, 27, 25 + rotlwi 5, 27, 14 + xor 0, 0, 5 + srwi 5, 27, 3 + xor 0, 0, 5 + add 26, 26, 0 + rotlwi 0, 24, 15 + rotlwi 5, 24, 13 + xor 0, 0, 5 + srwi 5, 24, 10 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 44(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotlwi 0, 28, 25 + rotlwi 5, 28, 14 + xor 0, 0, 5 + srwi 5, 28, 3 + xor 0, 0, 5 + add 27, 27, 0 + rotlwi 0, 25, 15 + rotlwi 5, 25, 13 + xor 0, 0, 5 + srwi 5, 25, 10 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 48(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotlwi 0, 29, 25 + rotlwi 5, 29, 14 + xor 0, 0, 5 + srwi 5, 29, 3 + xor 0, 0, 5 + add 28, 28, 0 + rotlwi 0, 26, 15 + rotlwi 5, 26, 13 + xor 0, 0, 5 + srwi 5, 26, 10 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 52(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotlwi 0, 30, 25 + rotlwi 5, 30, 14 + xor 0, 0, 5 + srwi 5, 30, 3 + xor 0, 0, 5 + add 29, 29, 0 + rotlwi 0, 27, 15 + rotlwi 5, 27, 13 + xor 0, 0, 5 + srwi 5, 27, 10 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 56(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotlwi 0, 31, 25 + rotlwi 5, 31, 14 + xor 0, 0, 5 + srwi 5, 31, 3 + xor 0, 0, 5 + add 30, 30, 0 + rotlwi 0, 28, 15 + rotlwi 5, 28, 13 + xor 0, 0, 5 + srwi 5, 28, 10 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 60(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotlwi 0, 16, 25 + rotlwi 5, 16, 14 + xor 0, 0, 5 + srwi 5, 16, 3 + xor 0, 0, 5 + add 31, 31, 0 + rotlwi 0, 29, 15 + rotlwi 5, 29, 13 + xor 0, 0, 5 + srwi 5, 29, 10 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x40 + # Round 0 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotlwi 0, 17, 25 + rotlwi 5, 17, 14 + xor 0, 0, 5 + srwi 5, 17, 3 + xor 0, 0, 5 + add 16, 16, 0 + rotlwi 0, 30, 15 + rotlwi 5, 30, 13 + xor 0, 0, 5 + srwi 5, 30, 10 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotlwi 0, 18, 25 + rotlwi 5, 18, 14 + xor 0, 0, 5 + srwi 5, 18, 3 + xor 0, 0, 5 + add 17, 17, 0 + rotlwi 0, 31, 15 + rotlwi 5, 31, 13 + xor 0, 0, 5 + srwi 5, 31, 10 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 8(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotlwi 0, 19, 25 + rotlwi 5, 19, 14 + xor 0, 0, 5 + srwi 5, 19, 3 + xor 0, 0, 5 + add 18, 18, 0 + rotlwi 0, 16, 15 + rotlwi 5, 16, 13 + xor 0, 0, 5 + srwi 5, 16, 10 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 12(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotlwi 0, 20, 25 + rotlwi 5, 20, 14 + xor 0, 0, 5 + srwi 5, 20, 3 + xor 0, 0, 5 + add 19, 19, 0 + rotlwi 0, 17, 15 + rotlwi 5, 17, 13 + xor 0, 0, 5 + srwi 5, 17, 10 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 16(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotlwi 0, 21, 25 + rotlwi 5, 21, 14 + xor 0, 0, 5 + srwi 5, 21, 3 + xor 0, 0, 5 + add 20, 20, 0 + rotlwi 0, 18, 15 + rotlwi 5, 18, 13 + xor 0, 0, 5 + srwi 5, 18, 10 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 20(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotlwi 0, 22, 25 + rotlwi 5, 22, 14 + xor 0, 0, 5 + srwi 5, 22, 3 + xor 0, 0, 5 + add 21, 21, 0 + rotlwi 0, 19, 15 + rotlwi 5, 19, 13 + xor 0, 0, 5 + srwi 5, 19, 10 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 24(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotlwi 0, 23, 25 + rotlwi 5, 23, 14 + xor 0, 0, 5 + srwi 5, 23, 3 + xor 0, 0, 5 + add 22, 22, 0 + rotlwi 0, 20, 15 + rotlwi 5, 20, 13 + xor 0, 0, 5 + srwi 5, 20, 10 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 28(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotlwi 0, 24, 25 + rotlwi 5, 24, 14 + xor 0, 0, 5 + srwi 5, 24, 3 + xor 0, 0, 5 + add 23, 23, 0 + rotlwi 0, 21, 15 + rotlwi 5, 21, 13 + xor 0, 0, 5 + srwi 5, 21, 10 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotlwi 0, 25, 25 + rotlwi 5, 25, 14 + xor 0, 0, 5 + srwi 5, 25, 3 + xor 0, 0, 5 + add 24, 24, 0 + rotlwi 0, 22, 15 + rotlwi 5, 22, 13 + xor 0, 0, 5 + srwi 5, 22, 10 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotlwi 0, 26, 25 + rotlwi 5, 26, 14 + xor 0, 0, 5 + srwi 5, 26, 3 + xor 0, 0, 5 + add 25, 25, 0 + rotlwi 0, 23, 15 + rotlwi 5, 23, 13 + xor 0, 0, 5 + srwi 5, 23, 10 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 40(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotlwi 0, 27, 25 + rotlwi 5, 27, 14 + xor 0, 0, 5 + srwi 5, 27, 3 + xor 0, 0, 5 + add 26, 26, 0 + rotlwi 0, 24, 15 + rotlwi 5, 24, 13 + xor 0, 0, 5 + srwi 5, 24, 10 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 44(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotlwi 0, 28, 25 + rotlwi 5, 28, 14 + xor 0, 0, 5 + srwi 5, 28, 3 + xor 0, 0, 5 + add 27, 27, 0 + rotlwi 0, 25, 15 + rotlwi 5, 25, 13 + xor 0, 0, 5 + srwi 5, 25, 10 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 48(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotlwi 0, 29, 25 + rotlwi 5, 29, 14 + xor 0, 0, 5 + srwi 5, 29, 3 + xor 0, 0, 5 + add 28, 28, 0 + rotlwi 0, 26, 15 + rotlwi 5, 26, 13 + xor 0, 0, 5 + srwi 5, 26, 10 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 52(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotlwi 0, 30, 25 + rotlwi 5, 30, 14 + xor 0, 0, 5 + srwi 5, 30, 3 + xor 0, 0, 5 + add 29, 29, 0 + rotlwi 0, 27, 15 + rotlwi 5, 27, 13 + xor 0, 0, 5 + srwi 5, 27, 10 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 56(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotlwi 0, 31, 25 + rotlwi 5, 31, 14 + xor 0, 0, 5 + srwi 5, 31, 3 + xor 0, 0, 5 + add 30, 30, 0 + rotlwi 0, 28, 15 + rotlwi 5, 28, 13 + xor 0, 0, 5 + srwi 5, 28, 10 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 60(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotlwi 0, 16, 25 + rotlwi 5, 16, 14 + xor 0, 0, 5 + srwi 5, 16, 3 + xor 0, 0, 5 + add 31, 31, 0 + rotlwi 0, 29, 15 + rotlwi 5, 29, 13 + xor 0, 0, 5 + srwi 5, 29, 10 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x40 + # Round 0 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Round 1 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Round 2 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 8(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Round 3 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 12(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Round 4 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 16(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Round 5 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 20(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Round 6 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 24(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Round 7 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 28(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Round 8 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Round 9 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Round 10 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 40(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Round 11 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 44(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Round 12 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 48(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Round 13 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 52(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Round 14 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 56(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Round 15 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 60(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + subi 6, 6, 0xc0 + # Add in digest from start + lwz 0, 0(3) + lwz 5, 4(3) + add 7, 7, 0 + add 8, 8, 5 + lwz 0, 8(3) + lwz 5, 12(3) + add 9, 9, 0 + add 10, 10, 5 + lwz 0, 16(3) + lwz 5, 20(3) + add 11, 11, 0 + add 12, 12, 5 + lwz 0, 24(3) + lwz 5, 28(3) + add 14, 14, 0 + add 15, 15, 5 + stw 7, 0(3) + stw 8, 4(3) + stw 9, 8(3) + stw 10, 12(3) + stw 11, 16(3) + stw 12, 20(3) + stw 14, 24(3) + stw 15, 28(3) + addi 4, 4, 0x40 + bdnz L_SHA256_transform_len_begin +#else + subi 1, 1, 16 + stw 5, 0(1) + # Start of loop processing a block +L_SHA256_transform_len_begin: + # Load W - 64 bytes + lwz 16, 0(4) + lwz 17, 4(4) + lwz 18, 8(4) + lwz 19, 12(4) + lwz 20, 16(4) + lwz 21, 20(4) + lwz 22, 24(4) + lwz 23, 28(4) + lwz 24, 32(4) + lwz 25, 36(4) + lwz 26, 40(4) + lwz 27, 44(4) + lwz 28, 48(4) + lwz 29, 52(4) + lwz 30, 56(4) + lwz 31, 60(4) + li 0, 4 + mtctr 0 + # Start of 16 rounds +L_SHA256_transform_len_start: + # Round 0 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_0 + # Calc new W[0] + rotlwi 0, 17, 25 + rotlwi 5, 17, 14 + xor 0, 0, 5 + srwi 5, 17, 3 + xor 0, 0, 5 + add 16, 16, 0 + rotlwi 0, 30, 15 + rotlwi 5, 30, 13 + xor 0, 0, 5 + srwi 5, 30, 10 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 +L_SHA256_transform_len_after_blk_0: + # Round 1 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 4(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_1 + # Calc new W[1] + rotlwi 0, 18, 25 + rotlwi 5, 18, 14 + xor 0, 0, 5 + srwi 5, 18, 3 + xor 0, 0, 5 + add 17, 17, 0 + rotlwi 0, 31, 15 + rotlwi 5, 31, 13 + xor 0, 0, 5 + srwi 5, 31, 10 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 +L_SHA256_transform_len_after_blk_1: + # Round 2 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 8(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_2 + # Calc new W[2] + rotlwi 0, 19, 25 + rotlwi 5, 19, 14 + xor 0, 0, 5 + srwi 5, 19, 3 + xor 0, 0, 5 + add 18, 18, 0 + rotlwi 0, 16, 15 + rotlwi 5, 16, 13 + xor 0, 0, 5 + srwi 5, 16, 10 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 +L_SHA256_transform_len_after_blk_2: + # Round 3 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 12(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_3 + # Calc new W[3] + rotlwi 0, 20, 25 + rotlwi 5, 20, 14 + xor 0, 0, 5 + srwi 5, 20, 3 + xor 0, 0, 5 + add 19, 19, 0 + rotlwi 0, 17, 15 + rotlwi 5, 17, 13 + xor 0, 0, 5 + srwi 5, 17, 10 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 +L_SHA256_transform_len_after_blk_3: + # Round 4 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 16(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_4 + # Calc new W[4] + rotlwi 0, 21, 25 + rotlwi 5, 21, 14 + xor 0, 0, 5 + srwi 5, 21, 3 + xor 0, 0, 5 + add 20, 20, 0 + rotlwi 0, 18, 15 + rotlwi 5, 18, 13 + xor 0, 0, 5 + srwi 5, 18, 10 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 +L_SHA256_transform_len_after_blk_4: + # Round 5 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 20(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_5 + # Calc new W[5] + rotlwi 0, 22, 25 + rotlwi 5, 22, 14 + xor 0, 0, 5 + srwi 5, 22, 3 + xor 0, 0, 5 + add 21, 21, 0 + rotlwi 0, 19, 15 + rotlwi 5, 19, 13 + xor 0, 0, 5 + srwi 5, 19, 10 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 +L_SHA256_transform_len_after_blk_5: + # Round 6 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 24(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_6 + # Calc new W[6] + rotlwi 0, 23, 25 + rotlwi 5, 23, 14 + xor 0, 0, 5 + srwi 5, 23, 3 + xor 0, 0, 5 + add 22, 22, 0 + rotlwi 0, 20, 15 + rotlwi 5, 20, 13 + xor 0, 0, 5 + srwi 5, 20, 10 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 +L_SHA256_transform_len_after_blk_6: + # Round 7 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 28(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_7 + # Calc new W[7] + rotlwi 0, 24, 25 + rotlwi 5, 24, 14 + xor 0, 0, 5 + srwi 5, 24, 3 + xor 0, 0, 5 + add 23, 23, 0 + rotlwi 0, 21, 15 + rotlwi 5, 21, 13 + xor 0, 0, 5 + srwi 5, 21, 10 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 +L_SHA256_transform_len_after_blk_7: + # Round 8 + rotlwi 0, 11, 26 + rotlwi 5, 11, 21 + xor 0, 0, 5 + rotlwi 5, 11, 7 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + lwz 0, 32(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotlwi 0, 7, 30 + rotlwi 5, 7, 19 + xor 0, 0, 5 + rotlwi 5, 7, 10 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_8 + # Calc new W[8] + rotlwi 0, 25, 25 + rotlwi 5, 25, 14 + xor 0, 0, 5 + srwi 5, 25, 3 + xor 0, 0, 5 + add 24, 24, 0 + rotlwi 0, 22, 15 + rotlwi 5, 22, 13 + xor 0, 0, 5 + srwi 5, 22, 10 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 +L_SHA256_transform_len_after_blk_8: + # Round 9 + rotlwi 0, 10, 26 + rotlwi 5, 10, 21 + xor 0, 0, 5 + rotlwi 5, 10, 7 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + lwz 0, 36(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotlwi 0, 15, 30 + rotlwi 5, 15, 19 + xor 0, 0, 5 + rotlwi 5, 15, 10 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_9 + # Calc new W[9] + rotlwi 0, 26, 25 + rotlwi 5, 26, 14 + xor 0, 0, 5 + srwi 5, 26, 3 + xor 0, 0, 5 + add 25, 25, 0 + rotlwi 0, 23, 15 + rotlwi 5, 23, 13 + xor 0, 0, 5 + srwi 5, 23, 10 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 +L_SHA256_transform_len_after_blk_9: + # Round 10 + rotlwi 0, 9, 26 + rotlwi 5, 9, 21 + xor 0, 0, 5 + rotlwi 5, 9, 7 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + lwz 0, 40(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotlwi 0, 14, 30 + rotlwi 5, 14, 19 + xor 0, 0, 5 + rotlwi 5, 14, 10 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_10 + # Calc new W[10] + rotlwi 0, 27, 25 + rotlwi 5, 27, 14 + xor 0, 0, 5 + srwi 5, 27, 3 + xor 0, 0, 5 + add 26, 26, 0 + rotlwi 0, 24, 15 + rotlwi 5, 24, 13 + xor 0, 0, 5 + srwi 5, 24, 10 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 +L_SHA256_transform_len_after_blk_10: + # Round 11 + rotlwi 0, 8, 26 + rotlwi 5, 8, 21 + xor 0, 0, 5 + rotlwi 5, 8, 7 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + lwz 0, 44(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotlwi 0, 12, 30 + rotlwi 5, 12, 19 + xor 0, 0, 5 + rotlwi 5, 12, 10 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_11 + # Calc new W[11] + rotlwi 0, 28, 25 + rotlwi 5, 28, 14 + xor 0, 0, 5 + srwi 5, 28, 3 + xor 0, 0, 5 + add 27, 27, 0 + rotlwi 0, 25, 15 + rotlwi 5, 25, 13 + xor 0, 0, 5 + srwi 5, 25, 10 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 +L_SHA256_transform_len_after_blk_11: + # Round 12 + rotlwi 0, 7, 26 + rotlwi 5, 7, 21 + xor 0, 0, 5 + rotlwi 5, 7, 7 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + lwz 0, 48(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotlwi 0, 11, 30 + rotlwi 5, 11, 19 + xor 0, 0, 5 + rotlwi 5, 11, 10 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_12 + # Calc new W[12] + rotlwi 0, 29, 25 + rotlwi 5, 29, 14 + xor 0, 0, 5 + srwi 5, 29, 3 + xor 0, 0, 5 + add 28, 28, 0 + rotlwi 0, 26, 15 + rotlwi 5, 26, 13 + xor 0, 0, 5 + srwi 5, 26, 10 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 +L_SHA256_transform_len_after_blk_12: + # Round 13 + rotlwi 0, 15, 26 + rotlwi 5, 15, 21 + xor 0, 0, 5 + rotlwi 5, 15, 7 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + lwz 0, 52(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotlwi 0, 10, 30 + rotlwi 5, 10, 19 + xor 0, 0, 5 + rotlwi 5, 10, 10 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_13 + # Calc new W[13] + rotlwi 0, 30, 25 + rotlwi 5, 30, 14 + xor 0, 0, 5 + srwi 5, 30, 3 + xor 0, 0, 5 + add 29, 29, 0 + rotlwi 0, 27, 15 + rotlwi 5, 27, 13 + xor 0, 0, 5 + srwi 5, 27, 10 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 +L_SHA256_transform_len_after_blk_13: + # Round 14 + rotlwi 0, 14, 26 + rotlwi 5, 14, 21 + xor 0, 0, 5 + rotlwi 5, 14, 7 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + lwz 0, 56(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotlwi 0, 9, 30 + rotlwi 5, 9, 19 + xor 0, 0, 5 + rotlwi 5, 9, 10 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_14 + # Calc new W[14] + rotlwi 0, 31, 25 + rotlwi 5, 31, 14 + xor 0, 0, 5 + srwi 5, 31, 3 + xor 0, 0, 5 + add 30, 30, 0 + rotlwi 0, 28, 15 + rotlwi 5, 28, 13 + xor 0, 0, 5 + srwi 5, 28, 10 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 +L_SHA256_transform_len_after_blk_14: + # Round 15 + rotlwi 0, 12, 26 + rotlwi 5, 12, 21 + xor 0, 0, 5 + rotlwi 5, 12, 7 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + lwz 0, 60(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotlwi 0, 8, 30 + rotlwi 5, 8, 19 + xor 0, 0, 5 + rotlwi 5, 8, 10 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA256_transform_len_after_blk_15 + # Calc new W[15] + rotlwi 0, 16, 25 + rotlwi 5, 16, 14 + xor 0, 0, 5 + srwi 5, 16, 3 + xor 0, 0, 5 + add 31, 31, 0 + rotlwi 0, 29, 15 + rotlwi 5, 29, 13 + xor 0, 0, 5 + srwi 5, 29, 10 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 +L_SHA256_transform_len_after_blk_15: + addi 6, 6, 0x40 + bdnz L_SHA256_transform_len_start + subi 6, 6, 0x100 + # Add in digest from start + lwz 0, 0(3) + lwz 5, 4(3) + add 7, 7, 0 + add 8, 8, 5 + lwz 0, 8(3) + lwz 5, 12(3) + add 9, 9, 0 + add 10, 10, 5 + lwz 0, 16(3) + lwz 5, 20(3) + add 11, 11, 0 + add 12, 12, 5 + lwz 0, 24(3) + lwz 5, 28(3) + add 14, 14, 0 + add 15, 15, 5 + stw 7, 0(3) + stw 8, 4(3) + stw 9, 8(3) + stw 10, 12(3) + stw 11, 16(3) + stw 12, 20(3) + stw 14, 24(3) + stw 15, 28(3) + lwz 5, 0(1) + mtctr 5 + subi 5, 5, 1 + addi 4, 4, 0x40 + stw 5, 0(1) + bdnz L_SHA256_transform_len_begin + addi 1, 1, 16 +#endif /* WOLFSSL_PPC64_ASM_SMALL */ + ld 0, 144(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + ld 18, 32(1) + ld 19, 40(1) + ld 20, 48(1) + ld 21, 56(1) + ld 22, 64(1) + ld 23, 72(1) + ld 24, 80(1) + ld 25, 88(1) + ld 26, 96(1) + ld 27, 104(1) + ld 28, 112(1) + ld 29, 120(1) + ld 30, 128(1) + ld 31, 136(1) + addi 1, 1, 0x98 + blr +#ifndef __APPLE__ + .size Transform_Sha256_Len,.-Transform_Sha256_Len +#endif /* __APPLE__ */ +#ifdef WOLFSSL_PPC64_ASM_CRYPTO +#ifndef __APPLE__ + .text + .type L_SHA256_crypto_k, %object + .size L_SHA256_crypto_k, 272 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 8-byte aligned, 64-bit aligned +#ifndef __APPLE__ + .align 3 +#else + .p2align 3 +#endif /* __APPLE__ */ +L_SHA256_crypto_k: + .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + .long 0x00000000,0x00000000,0x00000000,0x00000000 + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl Transform_Sha256_Len_crypto +.type Transform_Sha256_Len_crypto,@function +.align 16 +Transform_Sha256_Len_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry Transform_Sha256_Len_crypto, .-Transform_Sha256_Len_crypto +#endif +#else +.section __TEXT,__text +.globl _Transform_Sha256_Len_crypto +.p2align 4 +_Transform_Sha256_Len_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + srwi 5, 5, 6 + mtctr 5 + li 8, 16 + addis 6, 2, L_SHA256_crypto_k@toc@ha + addi 6, 6, L_SHA256_crypto_k@toc@l + # Start of loop processing a block +L_SHA256_crypto_begin: + # Load state, one word per vector register + lxvw4x 32, 0, 3 + lxvw4x 36, 8, 3 + vsldoi 1, 0, 0, 4 + vsldoi 2, 0, 0, 8 + vsldoi 3, 0, 0, 12 + vsldoi 5, 4, 4, 4 + vsldoi 6, 4, 4, 8 + vsldoi 7, 4, 4, 12 + # Load message, one word per vector register + lxvw4x 48, 0, 4 + addi 4, 4, 16 + vsldoi 17, 16, 16, 4 + vsldoi 18, 16, 16, 8 + vsldoi 19, 16, 16, 12 + lxvw4x 52, 0, 4 + addi 4, 4, 16 + vsldoi 21, 20, 20, 4 + vsldoi 22, 20, 20, 8 + vsldoi 23, 20, 20, 12 + lxvw4x 56, 0, 4 + addi 4, 4, 16 + vsldoi 25, 24, 24, 4 + vsldoi 26, 24, 24, 8 + vsldoi 27, 24, 24, 12 + lxvw4x 60, 0, 4 + addi 4, 4, 16 + vsldoi 29, 28, 28, 4 + vsldoi 30, 28, 28, 8 + vsldoi 31, 28, 28, 12 + # Preload first key + lxvw4x 40, 0, 6 + li 7, 4 + # 64 rounds + vadduwm 10, 8, 16 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vadduwm 10, 8, 17 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vadduwm 10, 8, 18 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vadduwm 10, 8, 19 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vadduwm 10, 8, 20 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vadduwm 10, 8, 21 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vadduwm 10, 8, 22 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vadduwm 10, 8, 23 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vadduwm 10, 8, 24 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vadduwm 10, 8, 25 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vadduwm 10, 8, 26 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vadduwm 10, 8, 27 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vadduwm 10, 8, 28 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vadduwm 10, 8, 29 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vadduwm 10, 8, 30 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vadduwm 10, 8, 31 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vshasigmaw 15, 30, 0, 15 + vshasigmaw 14, 17, 0, 0 + vadduwm 16, 16, 15 + vadduwm 16, 16, 14 + vadduwm 16, 16, 25 + vadduwm 10, 8, 16 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vshasigmaw 15, 31, 0, 15 + vshasigmaw 14, 18, 0, 0 + vadduwm 17, 17, 15 + vadduwm 17, 17, 14 + vadduwm 17, 17, 26 + vadduwm 10, 8, 17 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vshasigmaw 15, 16, 0, 15 + vshasigmaw 14, 19, 0, 0 + vadduwm 18, 18, 15 + vadduwm 18, 18, 14 + vadduwm 18, 18, 27 + vadduwm 10, 8, 18 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vshasigmaw 15, 17, 0, 15 + vshasigmaw 14, 20, 0, 0 + vadduwm 19, 19, 15 + vadduwm 19, 19, 14 + vadduwm 19, 19, 28 + vadduwm 10, 8, 19 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vshasigmaw 15, 18, 0, 15 + vshasigmaw 14, 21, 0, 0 + vadduwm 20, 20, 15 + vadduwm 20, 20, 14 + vadduwm 20, 20, 29 + vadduwm 10, 8, 20 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vshasigmaw 15, 19, 0, 15 + vshasigmaw 14, 22, 0, 0 + vadduwm 21, 21, 15 + vadduwm 21, 21, 14 + vadduwm 21, 21, 30 + vadduwm 10, 8, 21 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vshasigmaw 15, 20, 0, 15 + vshasigmaw 14, 23, 0, 0 + vadduwm 22, 22, 15 + vadduwm 22, 22, 14 + vadduwm 22, 22, 31 + vadduwm 10, 8, 22 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vshasigmaw 15, 21, 0, 15 + vshasigmaw 14, 24, 0, 0 + vadduwm 23, 23, 15 + vadduwm 23, 23, 14 + vadduwm 23, 23, 16 + vadduwm 10, 8, 23 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vshasigmaw 15, 22, 0, 15 + vshasigmaw 14, 25, 0, 0 + vadduwm 24, 24, 15 + vadduwm 24, 24, 14 + vadduwm 24, 24, 17 + vadduwm 10, 8, 24 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vshasigmaw 15, 23, 0, 15 + vshasigmaw 14, 26, 0, 0 + vadduwm 25, 25, 15 + vadduwm 25, 25, 14 + vadduwm 25, 25, 18 + vadduwm 10, 8, 25 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vshasigmaw 15, 24, 0, 15 + vshasigmaw 14, 27, 0, 0 + vadduwm 26, 26, 15 + vadduwm 26, 26, 14 + vadduwm 26, 26, 19 + vadduwm 10, 8, 26 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vshasigmaw 15, 25, 0, 15 + vshasigmaw 14, 28, 0, 0 + vadduwm 27, 27, 15 + vadduwm 27, 27, 14 + vadduwm 27, 27, 20 + vadduwm 10, 8, 27 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vshasigmaw 15, 26, 0, 15 + vshasigmaw 14, 29, 0, 0 + vadduwm 28, 28, 15 + vadduwm 28, 28, 14 + vadduwm 28, 28, 21 + vadduwm 10, 8, 28 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vshasigmaw 15, 27, 0, 15 + vshasigmaw 14, 30, 0, 0 + vadduwm 29, 29, 15 + vadduwm 29, 29, 14 + vadduwm 29, 29, 22 + vadduwm 10, 8, 29 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vshasigmaw 15, 28, 0, 15 + vshasigmaw 14, 31, 0, 0 + vadduwm 30, 30, 15 + vadduwm 30, 30, 14 + vadduwm 30, 30, 23 + vadduwm 10, 8, 30 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vshasigmaw 15, 29, 0, 15 + vshasigmaw 14, 16, 0, 0 + vadduwm 31, 31, 15 + vadduwm 31, 31, 14 + vadduwm 31, 31, 24 + vadduwm 10, 8, 31 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vshasigmaw 15, 30, 0, 15 + vshasigmaw 14, 17, 0, 0 + vadduwm 16, 16, 15 + vadduwm 16, 16, 14 + vadduwm 16, 16, 25 + vadduwm 10, 8, 16 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vshasigmaw 15, 31, 0, 15 + vshasigmaw 14, 18, 0, 0 + vadduwm 17, 17, 15 + vadduwm 17, 17, 14 + vadduwm 17, 17, 26 + vadduwm 10, 8, 17 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vshasigmaw 15, 16, 0, 15 + vshasigmaw 14, 19, 0, 0 + vadduwm 18, 18, 15 + vadduwm 18, 18, 14 + vadduwm 18, 18, 27 + vadduwm 10, 8, 18 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vshasigmaw 15, 17, 0, 15 + vshasigmaw 14, 20, 0, 0 + vadduwm 19, 19, 15 + vadduwm 19, 19, 14 + vadduwm 19, 19, 28 + vadduwm 10, 8, 19 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vshasigmaw 15, 18, 0, 15 + vshasigmaw 14, 21, 0, 0 + vadduwm 20, 20, 15 + vadduwm 20, 20, 14 + vadduwm 20, 20, 29 + vadduwm 10, 8, 20 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vshasigmaw 15, 19, 0, 15 + vshasigmaw 14, 22, 0, 0 + vadduwm 21, 21, 15 + vadduwm 21, 21, 14 + vadduwm 21, 21, 30 + vadduwm 10, 8, 21 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vshasigmaw 15, 20, 0, 15 + vshasigmaw 14, 23, 0, 0 + vadduwm 22, 22, 15 + vadduwm 22, 22, 14 + vadduwm 22, 22, 31 + vadduwm 10, 8, 22 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vshasigmaw 15, 21, 0, 15 + vshasigmaw 14, 24, 0, 0 + vadduwm 23, 23, 15 + vadduwm 23, 23, 14 + vadduwm 23, 23, 16 + vadduwm 10, 8, 23 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vshasigmaw 15, 22, 0, 15 + vshasigmaw 14, 25, 0, 0 + vadduwm 24, 24, 15 + vadduwm 24, 24, 14 + vadduwm 24, 24, 17 + vadduwm 10, 8, 24 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vshasigmaw 15, 23, 0, 15 + vshasigmaw 14, 26, 0, 0 + vadduwm 25, 25, 15 + vadduwm 25, 25, 14 + vadduwm 25, 25, 18 + vadduwm 10, 8, 25 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vshasigmaw 15, 24, 0, 15 + vshasigmaw 14, 27, 0, 0 + vadduwm 26, 26, 15 + vadduwm 26, 26, 14 + vadduwm 26, 26, 19 + vadduwm 10, 8, 26 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vshasigmaw 15, 25, 0, 15 + vshasigmaw 14, 28, 0, 0 + vadduwm 27, 27, 15 + vadduwm 27, 27, 14 + vadduwm 27, 27, 20 + vadduwm 10, 8, 27 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vshasigmaw 15, 26, 0, 15 + vshasigmaw 14, 29, 0, 0 + vadduwm 28, 28, 15 + vadduwm 28, 28, 14 + vadduwm 28, 28, 21 + vadduwm 10, 8, 28 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vshasigmaw 15, 27, 0, 15 + vshasigmaw 14, 30, 0, 0 + vadduwm 29, 29, 15 + vadduwm 29, 29, 14 + vadduwm 29, 29, 22 + vadduwm 10, 8, 29 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vshasigmaw 15, 28, 0, 15 + vshasigmaw 14, 31, 0, 0 + vadduwm 30, 30, 15 + vadduwm 30, 30, 14 + vadduwm 30, 30, 23 + vadduwm 10, 8, 30 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vshasigmaw 15, 29, 0, 15 + vshasigmaw 14, 16, 0, 0 + vadduwm 31, 31, 15 + vadduwm 31, 31, 14 + vadduwm 31, 31, 24 + vadduwm 10, 8, 31 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vshasigmaw 15, 30, 0, 15 + vshasigmaw 14, 17, 0, 0 + vadduwm 16, 16, 15 + vadduwm 16, 16, 14 + vadduwm 16, 16, 25 + vadduwm 10, 8, 16 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vshasigmaw 15, 31, 0, 15 + vshasigmaw 14, 18, 0, 0 + vadduwm 17, 17, 15 + vadduwm 17, 17, 14 + vadduwm 17, 17, 26 + vadduwm 10, 8, 17 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vshasigmaw 15, 16, 0, 15 + vshasigmaw 14, 19, 0, 0 + vadduwm 18, 18, 15 + vadduwm 18, 18, 14 + vadduwm 18, 18, 27 + vadduwm 10, 8, 18 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vshasigmaw 15, 17, 0, 15 + vshasigmaw 14, 20, 0, 0 + vadduwm 19, 19, 15 + vadduwm 19, 19, 14 + vadduwm 19, 19, 28 + vadduwm 10, 8, 19 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vshasigmaw 15, 18, 0, 15 + vshasigmaw 14, 21, 0, 0 + vadduwm 20, 20, 15 + vadduwm 20, 20, 14 + vadduwm 20, 20, 29 + vadduwm 10, 8, 20 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vshasigmaw 15, 19, 0, 15 + vshasigmaw 14, 22, 0, 0 + vadduwm 21, 21, 15 + vadduwm 21, 21, 14 + vadduwm 21, 21, 30 + vadduwm 10, 8, 21 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vshasigmaw 15, 20, 0, 15 + vshasigmaw 14, 23, 0, 0 + vadduwm 22, 22, 15 + vadduwm 22, 22, 14 + vadduwm 22, 22, 31 + vadduwm 10, 8, 22 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vshasigmaw 15, 21, 0, 15 + vshasigmaw 14, 24, 0, 0 + vadduwm 23, 23, 15 + vadduwm 23, 23, 14 + vadduwm 23, 23, 16 + vadduwm 10, 8, 23 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + vshasigmaw 15, 22, 0, 15 + vshasigmaw 14, 25, 0, 0 + vadduwm 24, 24, 15 + vadduwm 24, 24, 14 + vadduwm 24, 24, 17 + vadduwm 10, 8, 24 + vadduwm 13, 7, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 3, 7 + vadduwm 11, 11, 10 + vshasigmaw 15, 4, 1, 15 + vshasigmaw 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 7, 15, 14 + vadduwm 3, 9, 15 + vadduwm 7, 7, 12 + vshasigmaw 15, 23, 0, 15 + vshasigmaw 14, 26, 0, 0 + vadduwm 25, 25, 15 + vadduwm 25, 25, 14 + vadduwm 25, 25, 18 + vadduwm 10, 8, 25 + vadduwm 13, 6, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 2, 6 + vadduwm 11, 11, 10 + vshasigmaw 15, 3, 1, 15 + vshasigmaw 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 6, 15, 14 + vadduwm 2, 9, 15 + vadduwm 6, 6, 12 + vshasigmaw 15, 24, 0, 15 + vshasigmaw 14, 27, 0, 0 + vadduwm 26, 26, 15 + vadduwm 26, 26, 14 + vadduwm 26, 26, 19 + vadduwm 10, 8, 26 + vadduwm 13, 5, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 1, 5 + vadduwm 11, 11, 10 + vshasigmaw 15, 2, 1, 15 + vshasigmaw 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 5, 15, 14 + vadduwm 1, 9, 15 + vadduwm 5, 5, 12 + vshasigmaw 15, 25, 0, 15 + vshasigmaw 14, 28, 0, 0 + vadduwm 27, 27, 15 + vadduwm 27, 27, 14 + vadduwm 27, 27, 20 + vadduwm 10, 8, 27 + vadduwm 13, 4, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 0, 4 + vadduwm 11, 11, 10 + vshasigmaw 15, 1, 1, 15 + vshasigmaw 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 4, 15, 14 + vadduwm 0, 9, 15 + vadduwm 4, 4, 12 + vshasigmaw 15, 26, 0, 15 + vshasigmaw 14, 29, 0, 0 + vadduwm 28, 28, 15 + vadduwm 28, 28, 14 + vadduwm 28, 28, 21 + vadduwm 10, 8, 28 + vadduwm 13, 3, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 7, 3 + vadduwm 11, 11, 10 + vshasigmaw 15, 0, 1, 15 + vshasigmaw 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 3, 15, 14 + vadduwm 7, 9, 15 + vadduwm 3, 3, 12 + vshasigmaw 15, 27, 0, 15 + vshasigmaw 14, 30, 0, 0 + vadduwm 29, 29, 15 + vadduwm 29, 29, 14 + vadduwm 29, 29, 22 + vadduwm 10, 8, 29 + vadduwm 13, 2, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 6, 2 + vadduwm 11, 11, 10 + vshasigmaw 15, 7, 1, 15 + vshasigmaw 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 2, 15, 14 + vadduwm 6, 9, 15 + vadduwm 2, 2, 12 + vshasigmaw 15, 28, 0, 15 + vshasigmaw 14, 31, 0, 0 + vadduwm 30, 30, 15 + vadduwm 30, 30, 14 + vadduwm 30, 30, 23 + vadduwm 10, 8, 30 + vadduwm 13, 1, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 5, 1 + vadduwm 11, 11, 10 + vshasigmaw 15, 6, 1, 15 + vshasigmaw 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 1, 15, 14 + vadduwm 5, 9, 15 + vadduwm 1, 1, 12 + vshasigmaw 15, 29, 0, 15 + vshasigmaw 14, 16, 0, 0 + vadduwm 31, 31, 15 + vadduwm 31, 31, 14 + vadduwm 31, 31, 24 + vadduwm 10, 8, 31 + vadduwm 13, 0, 10 + lxvw4x 40, 7, 6 + addi 7, 7, 4 + vadduwm 11, 4, 0 + vadduwm 11, 11, 10 + vshasigmaw 15, 5, 1, 15 + vshasigmaw 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vadduwm 13, 13, 9 + vadduwm 12, 12, 13 + vadduwm 9, 9, 11 + vadduwm 0, 15, 14 + vadduwm 4, 9, 15 + vadduwm 0, 0, 12 + # Repack state, add original digest and store + vmrghw 0, 0, 1 + vmrghw 2, 2, 3 + xxmrghd 32, 32, 34 + vmrghw 4, 4, 5 + vmrghw 6, 6, 7 + xxmrghd 36, 36, 38 + lxvw4x 41, 0, 3 + lxvw4x 42, 8, 3 + vadduwm 0, 0, 9 + vadduwm 4, 4, 10 + stxvw4x 32, 0, 3 + stxvw4x 36, 8, 3 + bdnz L_SHA256_crypto_begin + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size Transform_Sha256_Len_crypto,.-Transform_Sha256_Len_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* WOLFSSL_PPC64_ASM_CRYPTO */ +#endif /* !NO_SHA256 */ +#endif /* WOLFSSL_PPC64_ASM */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC64_ASM_INLINE */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c new file mode 100644 index 00000000000..0c305b05950 --- /dev/null +++ b/wolfcrypt/src/port/ppc64/ppc64-sha256-asm_c.c @@ -0,0 +1,4743 @@ +/* ppc64-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 + */ + +#include +#include + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha2/sha256.rb ppc64 \ + * ../wolfssl/wolfcrypt/src/port/ppc64/ppc64-sha256-asm.c + */ +#ifdef WOLFSSL_PPC64_ASM +#include +#include +#ifdef WOLFSSL_PPC64_ASM_INLINE + +#ifdef __IAR_SYSTEMS_ICC__ +#define __asm__ asm +#define __volatile__ volatile +#define WOLFSSL_NO_VAR_ASSIGN_REG +#endif /* __IAR_SYSTEMS_ICC__ */ +#ifdef __KEIL__ +#define __asm__ __asm +#define __volatile__ volatile +#endif /* __KEIL__ */ +#ifdef __ghs__ +#define __asm__ __asm +#define __volatile__ +#define WOLFSSL_NO_VAR_ASSIGN_REG +#endif /* __ghs__ */ +#ifndef NO_SHA256 +#include + +static const word32 L_SHA256_transform_len_k[] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, +}; + +void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len); +#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 6, %[L_SHA256_transform_len_k]\n\t" + /* Copy digest to add in at end */ + "lwz 7, 0(%[sha256])\n\t" + "lwz 8, 4(%[sha256])\n\t" + "lwz 9, 8(%[sha256])\n\t" + "lwz 10, 12(%[sha256])\n\t" + "lwz 11, 16(%[sha256])\n\t" + "lwz 12, 20(%[sha256])\n\t" + "lwz 14, 24(%[sha256])\n\t" + "lwz 15, 28(%[sha256])\n\t" +#ifndef WOLFSSL_PPC64_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 16, 0(%[data])\n\t" + "lwz 17, 4(%[data])\n\t" + "lwz 18, 8(%[data])\n\t" + "lwz 19, 12(%[data])\n\t" + "lwz 20, 16(%[data])\n\t" + "lwz 21, 20(%[data])\n\t" + "lwz 22, 24(%[data])\n\t" + "lwz 23, 28(%[data])\n\t" + "lwz 24, 32(%[data])\n\t" + "lwz 25, 36(%[data])\n\t" + "lwz 26, 40(%[data])\n\t" + "lwz 27, 44(%[data])\n\t" + "lwz 28, 48(%[data])\n\t" + "lwz 29, 52(%[data])\n\t" + "lwz 30, 56(%[data])\n\t" + "lwz 31, 60(%[data])\n\t" + /* Start of 16 rounds */ + /* Round 0 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotlwi 0, 17, 25\n\t" + "rotlwi %[len], 17, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotlwi 0, 30, 15\n\t" + "rotlwi %[len], 30, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotlwi 0, 18, 25\n\t" + "rotlwi %[len], 18, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotlwi 0, 31, 15\n\t" + "rotlwi %[len], 31, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotlwi 0, 19, 25\n\t" + "rotlwi %[len], 19, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotlwi 0, 16, 15\n\t" + "rotlwi %[len], 16, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotlwi 0, 20, 25\n\t" + "rotlwi %[len], 20, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotlwi 0, 17, 15\n\t" + "rotlwi %[len], 17, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotlwi 0, 21, 25\n\t" + "rotlwi %[len], 21, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotlwi 0, 18, 15\n\t" + "rotlwi %[len], 18, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotlwi 0, 22, 25\n\t" + "rotlwi %[len], 22, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotlwi 0, 19, 15\n\t" + "rotlwi %[len], 19, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotlwi 0, 23, 25\n\t" + "rotlwi %[len], 23, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotlwi 0, 20, 15\n\t" + "rotlwi %[len], 20, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotlwi 0, 24, 25\n\t" + "rotlwi %[len], 24, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotlwi 0, 21, 15\n\t" + "rotlwi %[len], 21, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotlwi 0, 25, 25\n\t" + "rotlwi %[len], 25, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotlwi 0, 22, 15\n\t" + "rotlwi %[len], 22, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotlwi 0, 26, 25\n\t" + "rotlwi %[len], 26, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotlwi 0, 23, 15\n\t" + "rotlwi %[len], 23, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotlwi 0, 27, 25\n\t" + "rotlwi %[len], 27, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotlwi 0, 24, 15\n\t" + "rotlwi %[len], 24, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotlwi 0, 28, 25\n\t" + "rotlwi %[len], 28, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotlwi 0, 25, 15\n\t" + "rotlwi %[len], 25, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotlwi 0, 29, 25\n\t" + "rotlwi %[len], 29, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotlwi 0, 26, 15\n\t" + "rotlwi %[len], 26, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotlwi 0, 30, 25\n\t" + "rotlwi %[len], 30, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotlwi 0, 27, 15\n\t" + "rotlwi %[len], 27, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotlwi 0, 31, 25\n\t" + "rotlwi %[len], 31, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotlwi 0, 28, 15\n\t" + "rotlwi %[len], 28, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotlwi 0, 16, 25\n\t" + "rotlwi %[len], 16, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotlwi 0, 29, 15\n\t" + "rotlwi %[len], 29, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x40\n\t" + /* Round 0 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotlwi 0, 17, 25\n\t" + "rotlwi %[len], 17, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotlwi 0, 30, 15\n\t" + "rotlwi %[len], 30, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotlwi 0, 18, 25\n\t" + "rotlwi %[len], 18, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotlwi 0, 31, 15\n\t" + "rotlwi %[len], 31, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotlwi 0, 19, 25\n\t" + "rotlwi %[len], 19, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotlwi 0, 16, 15\n\t" + "rotlwi %[len], 16, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotlwi 0, 20, 25\n\t" + "rotlwi %[len], 20, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotlwi 0, 17, 15\n\t" + "rotlwi %[len], 17, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotlwi 0, 21, 25\n\t" + "rotlwi %[len], 21, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotlwi 0, 18, 15\n\t" + "rotlwi %[len], 18, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotlwi 0, 22, 25\n\t" + "rotlwi %[len], 22, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotlwi 0, 19, 15\n\t" + "rotlwi %[len], 19, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotlwi 0, 23, 25\n\t" + "rotlwi %[len], 23, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotlwi 0, 20, 15\n\t" + "rotlwi %[len], 20, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotlwi 0, 24, 25\n\t" + "rotlwi %[len], 24, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotlwi 0, 21, 15\n\t" + "rotlwi %[len], 21, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotlwi 0, 25, 25\n\t" + "rotlwi %[len], 25, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotlwi 0, 22, 15\n\t" + "rotlwi %[len], 22, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotlwi 0, 26, 25\n\t" + "rotlwi %[len], 26, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotlwi 0, 23, 15\n\t" + "rotlwi %[len], 23, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotlwi 0, 27, 25\n\t" + "rotlwi %[len], 27, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotlwi 0, 24, 15\n\t" + "rotlwi %[len], 24, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotlwi 0, 28, 25\n\t" + "rotlwi %[len], 28, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotlwi 0, 25, 15\n\t" + "rotlwi %[len], 25, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotlwi 0, 29, 25\n\t" + "rotlwi %[len], 29, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotlwi 0, 26, 15\n\t" + "rotlwi %[len], 26, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotlwi 0, 30, 25\n\t" + "rotlwi %[len], 30, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotlwi 0, 27, 15\n\t" + "rotlwi %[len], 27, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotlwi 0, 31, 25\n\t" + "rotlwi %[len], 31, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotlwi 0, 28, 15\n\t" + "rotlwi %[len], 28, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotlwi 0, 16, 25\n\t" + "rotlwi %[len], 16, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotlwi 0, 29, 15\n\t" + "rotlwi %[len], 29, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x40\n\t" + /* Round 0 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotlwi 0, 17, 25\n\t" + "rotlwi %[len], 17, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotlwi 0, 30, 15\n\t" + "rotlwi %[len], 30, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotlwi 0, 18, 25\n\t" + "rotlwi %[len], 18, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotlwi 0, 31, 15\n\t" + "rotlwi %[len], 31, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotlwi 0, 19, 25\n\t" + "rotlwi %[len], 19, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotlwi 0, 16, 15\n\t" + "rotlwi %[len], 16, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotlwi 0, 20, 25\n\t" + "rotlwi %[len], 20, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotlwi 0, 17, 15\n\t" + "rotlwi %[len], 17, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotlwi 0, 21, 25\n\t" + "rotlwi %[len], 21, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotlwi 0, 18, 15\n\t" + "rotlwi %[len], 18, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotlwi 0, 22, 25\n\t" + "rotlwi %[len], 22, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotlwi 0, 19, 15\n\t" + "rotlwi %[len], 19, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotlwi 0, 23, 25\n\t" + "rotlwi %[len], 23, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotlwi 0, 20, 15\n\t" + "rotlwi %[len], 20, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotlwi 0, 24, 25\n\t" + "rotlwi %[len], 24, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotlwi 0, 21, 15\n\t" + "rotlwi %[len], 21, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotlwi 0, 25, 25\n\t" + "rotlwi %[len], 25, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotlwi 0, 22, 15\n\t" + "rotlwi %[len], 22, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotlwi 0, 26, 25\n\t" + "rotlwi %[len], 26, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotlwi 0, 23, 15\n\t" + "rotlwi %[len], 23, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotlwi 0, 27, 25\n\t" + "rotlwi %[len], 27, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotlwi 0, 24, 15\n\t" + "rotlwi %[len], 24, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotlwi 0, 28, 25\n\t" + "rotlwi %[len], 28, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotlwi 0, 25, 15\n\t" + "rotlwi %[len], 25, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotlwi 0, 29, 25\n\t" + "rotlwi %[len], 29, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotlwi 0, 26, 15\n\t" + "rotlwi %[len], 26, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotlwi 0, 30, 25\n\t" + "rotlwi %[len], 30, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotlwi 0, 27, 15\n\t" + "rotlwi %[len], 27, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotlwi 0, 31, 25\n\t" + "rotlwi %[len], 31, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotlwi 0, 28, 15\n\t" + "rotlwi %[len], 28, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotlwi 0, 16, 25\n\t" + "rotlwi %[len], 16, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotlwi 0, 29, 15\n\t" + "rotlwi %[len], 29, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x40\n\t" + /* Round 0 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Round 1 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Round 2 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Round 3 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Round 4 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Round 7 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Round 8 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Round 9 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Round 10 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Round 11 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Round 12 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Round 15 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + "subi 6, 6, 0xc0\n\t" + /* Add in digest from start */ + "lwz 0, 0(%[sha256])\n\t" + "lwz %[len], 4(%[sha256])\n\t" + "add 7, 7, 0\n\t" + "add 8, 8, %[len]\n\t" + "lwz 0, 8(%[sha256])\n\t" + "lwz %[len], 12(%[sha256])\n\t" + "add 9, 9, 0\n\t" + "add 10, 10, %[len]\n\t" + "lwz 0, 16(%[sha256])\n\t" + "lwz %[len], 20(%[sha256])\n\t" + "add 11, 11, 0\n\t" + "add 12, 12, %[len]\n\t" + "lwz 0, 24(%[sha256])\n\t" + "lwz %[len], 28(%[sha256])\n\t" + "add 14, 14, 0\n\t" + "add 15, 15, %[len]\n\t" + "stw 7, 0(%[sha256])\n\t" + "stw 8, 4(%[sha256])\n\t" + "stw 9, 8(%[sha256])\n\t" + "stw 10, 12(%[sha256])\n\t" + "stw 11, 16(%[sha256])\n\t" + "stw 12, 20(%[sha256])\n\t" + "stw 14, 24(%[sha256])\n\t" + "stw 15, 28(%[sha256])\n\t" + "addi %[data], %[data], 0x40\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" +#else + "subi 1, 1, 16\n\t" + "stw %[len], 0(1)\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_transform_len_begin_%=: \n\t" + /* Load W - 64 bytes */ + "lwz 16, 0(%[data])\n\t" + "lwz 17, 4(%[data])\n\t" + "lwz 18, 8(%[data])\n\t" + "lwz 19, 12(%[data])\n\t" + "lwz 20, 16(%[data])\n\t" + "lwz 21, 20(%[data])\n\t" + "lwz 22, 24(%[data])\n\t" + "lwz 23, 28(%[data])\n\t" + "lwz 24, 32(%[data])\n\t" + "lwz 25, 36(%[data])\n\t" + "lwz 26, 40(%[data])\n\t" + "lwz 27, 44(%[data])\n\t" + "lwz 28, 48(%[data])\n\t" + "lwz 29, 52(%[data])\n\t" + "lwz 30, 56(%[data])\n\t" + "lwz 31, 60(%[data])\n\t" + "li 0, 4\n\t" + "mtctr 0\n\t" + /* Start of 16 rounds */ + "\n" + "L_SHA256_transform_len_start_%=: \n\t" + /* Round 0 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_0_%=\n\t" + /* Calc new W[0] */ + "rotlwi 0, 17, 25\n\t" + "rotlwi %[len], 17, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotlwi 0, 30, 15\n\t" + "rotlwi %[len], 30, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + "\n" + "L_SHA256_transform_len_after_blk_0_%=: \n\t" + /* Round 1 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 4(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_1_%=\n\t" + /* Calc new W[1] */ + "rotlwi 0, 18, 25\n\t" + "rotlwi %[len], 18, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotlwi 0, 31, 15\n\t" + "rotlwi %[len], 31, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + "\n" + "L_SHA256_transform_len_after_blk_1_%=: \n\t" + /* Round 2 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 8(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_2_%=\n\t" + /* Calc new W[2] */ + "rotlwi 0, 19, 25\n\t" + "rotlwi %[len], 19, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotlwi 0, 16, 15\n\t" + "rotlwi %[len], 16, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + "\n" + "L_SHA256_transform_len_after_blk_2_%=: \n\t" + /* Round 3 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 12(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_3_%=\n\t" + /* Calc new W[3] */ + "rotlwi 0, 20, 25\n\t" + "rotlwi %[len], 20, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotlwi 0, 17, 15\n\t" + "rotlwi %[len], 17, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 17, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + "\n" + "L_SHA256_transform_len_after_blk_3_%=: \n\t" + /* Round 4 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 16(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_4_%=\n\t" + /* Calc new W[4] */ + "rotlwi 0, 21, 25\n\t" + "rotlwi %[len], 21, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotlwi 0, 18, 15\n\t" + "rotlwi %[len], 18, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 18, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + "\n" + "L_SHA256_transform_len_after_blk_4_%=: \n\t" + /* Round 5 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 20(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_5_%=\n\t" + /* Calc new W[5] */ + "rotlwi 0, 22, 25\n\t" + "rotlwi %[len], 22, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotlwi 0, 19, 15\n\t" + "rotlwi %[len], 19, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 19, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + "\n" + "L_SHA256_transform_len_after_blk_5_%=: \n\t" + /* Round 6 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 24(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_6_%=\n\t" + /* Calc new W[6] */ + "rotlwi 0, 23, 25\n\t" + "rotlwi %[len], 23, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotlwi 0, 20, 15\n\t" + "rotlwi %[len], 20, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 20, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + "\n" + "L_SHA256_transform_len_after_blk_6_%=: \n\t" + /* Round 7 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 28(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_7_%=\n\t" + /* Calc new W[7] */ + "rotlwi 0, 24, 25\n\t" + "rotlwi %[len], 24, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotlwi 0, 21, 15\n\t" + "rotlwi %[len], 21, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 21, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + "\n" + "L_SHA256_transform_len_after_blk_7_%=: \n\t" + /* Round 8 */ + "rotlwi 0, 11, 26\n\t" + "rotlwi %[len], 11, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "lwz 0, 32(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotlwi 0, 7, 30\n\t" + "rotlwi %[len], 7, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_8_%=\n\t" + /* Calc new W[8] */ + "rotlwi 0, 25, 25\n\t" + "rotlwi %[len], 25, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotlwi 0, 22, 15\n\t" + "rotlwi %[len], 22, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 22, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + "\n" + "L_SHA256_transform_len_after_blk_8_%=: \n\t" + /* Round 9 */ + "rotlwi 0, 10, 26\n\t" + "rotlwi %[len], 10, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "lwz 0, 36(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotlwi 0, 15, 30\n\t" + "rotlwi %[len], 15, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_9_%=\n\t" + /* Calc new W[9] */ + "rotlwi 0, 26, 25\n\t" + "rotlwi %[len], 26, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotlwi 0, 23, 15\n\t" + "rotlwi %[len], 23, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 23, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + "\n" + "L_SHA256_transform_len_after_blk_9_%=: \n\t" + /* Round 10 */ + "rotlwi 0, 9, 26\n\t" + "rotlwi %[len], 9, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "lwz 0, 40(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotlwi 0, 14, 30\n\t" + "rotlwi %[len], 14, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_10_%=\n\t" + /* Calc new W[10] */ + "rotlwi 0, 27, 25\n\t" + "rotlwi %[len], 27, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotlwi 0, 24, 15\n\t" + "rotlwi %[len], 24, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 24, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + "\n" + "L_SHA256_transform_len_after_blk_10_%=: \n\t" + /* Round 11 */ + "rotlwi 0, 8, 26\n\t" + "rotlwi %[len], 8, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "lwz 0, 44(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotlwi 0, 12, 30\n\t" + "rotlwi %[len], 12, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_11_%=\n\t" + /* Calc new W[11] */ + "rotlwi 0, 28, 25\n\t" + "rotlwi %[len], 28, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotlwi 0, 25, 15\n\t" + "rotlwi %[len], 25, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 25, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + "\n" + "L_SHA256_transform_len_after_blk_11_%=: \n\t" + /* Round 12 */ + "rotlwi 0, 7, 26\n\t" + "rotlwi %[len], 7, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 7, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "lwz 0, 48(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotlwi 0, 11, 30\n\t" + "rotlwi %[len], 11, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 11, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_12_%=\n\t" + /* Calc new W[12] */ + "rotlwi 0, 29, 25\n\t" + "rotlwi %[len], 29, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotlwi 0, 26, 15\n\t" + "rotlwi %[len], 26, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 26, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + "\n" + "L_SHA256_transform_len_after_blk_12_%=: \n\t" + /* Round 13 */ + "rotlwi 0, 15, 26\n\t" + "rotlwi %[len], 15, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 15, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "lwz 0, 52(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotlwi 0, 10, 30\n\t" + "rotlwi %[len], 10, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 10, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_13_%=\n\t" + /* Calc new W[13] */ + "rotlwi 0, 30, 25\n\t" + "rotlwi %[len], 30, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 30, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotlwi 0, 27, 15\n\t" + "rotlwi %[len], 27, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 27, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + "\n" + "L_SHA256_transform_len_after_blk_13_%=: \n\t" + /* Round 14 */ + "rotlwi 0, 14, 26\n\t" + "rotlwi %[len], 14, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 14, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "lwz 0, 56(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotlwi 0, 9, 30\n\t" + "rotlwi %[len], 9, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 9, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_14_%=\n\t" + /* Calc new W[14] */ + "rotlwi 0, 31, 25\n\t" + "rotlwi %[len], 31, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 31, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotlwi 0, 28, 15\n\t" + "rotlwi %[len], 28, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 28, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + "\n" + "L_SHA256_transform_len_after_blk_14_%=: \n\t" + /* Round 15 */ + "rotlwi 0, 12, 26\n\t" + "rotlwi %[len], 12, 21\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 12, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "lwz 0, 60(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotlwi 0, 8, 30\n\t" + "rotlwi %[len], 8, 19\n\t" + "xor 0, 0, %[len]\n\t" + "rotlwi %[len], 8, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA256_transform_len_after_blk_15_%=\n\t" + /* Calc new W[15] */ + "rotlwi 0, 16, 25\n\t" + "rotlwi %[len], 16, 14\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 16, 3\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotlwi 0, 29, 15\n\t" + "rotlwi %[len], 29, 13\n\t" + "xor 0, 0, %[len]\n\t" + "srwi %[len], 29, 10\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "\n" + "L_SHA256_transform_len_after_blk_15_%=: \n\t" + "addi 6, 6, 0x40\n\t" + "bdnz L_SHA256_transform_len_start_%=\n\t" + "subi 6, 6, 0x100\n\t" + /* Add in digest from start */ + "lwz 0, 0(%[sha256])\n\t" + "lwz %[len], 4(%[sha256])\n\t" + "add 7, 7, 0\n\t" + "add 8, 8, %[len]\n\t" + "lwz 0, 8(%[sha256])\n\t" + "lwz %[len], 12(%[sha256])\n\t" + "add 9, 9, 0\n\t" + "add 10, 10, %[len]\n\t" + "lwz 0, 16(%[sha256])\n\t" + "lwz %[len], 20(%[sha256])\n\t" + "add 11, 11, 0\n\t" + "add 12, 12, %[len]\n\t" + "lwz 0, 24(%[sha256])\n\t" + "lwz %[len], 28(%[sha256])\n\t" + "add 14, 14, 0\n\t" + "add 15, 15, %[len]\n\t" + "stw 7, 0(%[sha256])\n\t" + "stw 8, 4(%[sha256])\n\t" + "stw 9, 8(%[sha256])\n\t" + "stw 10, 12(%[sha256])\n\t" + "stw 11, 16(%[sha256])\n\t" + "stw 12, 20(%[sha256])\n\t" + "stw 14, 24(%[sha256])\n\t" + "stw 15, 28(%[sha256])\n\t" + "lwz %[len], 0(1)\n\t" + "mtctr %[len]\n\t" + "subi %[len], %[len], 1\n\t" + "addi %[data], %[data], 0x40\n\t" + "stw %[len], 0(1)\n\t" + "bdnz L_SHA256_transform_len_begin_%=\n\t" + "addi 1, 1, 16\n\t" +#endif /* WOLFSSL_PPC64_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) + : + : "memory", "cc", "0", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30", "31" +#else + : + : [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len), + [L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k_c) + : "memory", "cc", "0", "6", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30", "31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#ifdef WOLFSSL_PPC64_ASM_CRYPTO +static const word32 L_SHA256_crypto_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, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +__attribute__((target("cpu=power8"))) +void Transform_Sha256_Len_crypto(wc_Sha256* sha256, const byte* data, + word32 len); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void Transform_Sha256_Len_crypto(wc_Sha256* sha256_p, const byte* data_p, + word32 len_p) +#else +void Transform_Sha256_Len_crypto(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_crypto_k_c asm ("6") = + (word32*)&L_SHA256_crypto_k; +#else + register word32* L_SHA256_crypto_k_c = (word32*)&L_SHA256_crypto_k; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "srwi %[len], %[len], 6\n\t" + "mtctr %[len]\n\t" + "li 8, 16\n\t" + "mr 6, %[L_SHA256_crypto_k]\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA256_crypto_begin_%=: \n\t" + /* Load state, one word per vector register */ + "lxvw4x 32, 0, %[sha256]\n\t" + "lxvw4x 36, 8, %[sha256]\n\t" + "vsldoi 1, 0, 0, 4\n\t" + "vsldoi 2, 0, 0, 8\n\t" + "vsldoi 3, 0, 0, 12\n\t" + "vsldoi 5, 4, 4, 4\n\t" + "vsldoi 6, 4, 4, 8\n\t" + "vsldoi 7, 4, 4, 12\n\t" + /* Load message, one word per vector register */ + "lxvw4x 48, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 17, 16, 16, 4\n\t" + "vsldoi 18, 16, 16, 8\n\t" + "vsldoi 19, 16, 16, 12\n\t" + "lxvw4x 52, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 21, 20, 20, 4\n\t" + "vsldoi 22, 20, 20, 8\n\t" + "vsldoi 23, 20, 20, 12\n\t" + "lxvw4x 56, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 25, 24, 24, 4\n\t" + "vsldoi 26, 24, 24, 8\n\t" + "vsldoi 27, 24, 24, 12\n\t" + "lxvw4x 60, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 29, 28, 28, 4\n\t" + "vsldoi 30, 28, 28, 8\n\t" + "vsldoi 31, 28, 28, 12\n\t" + /* Preload first key */ + "lxvw4x 40, 0, 6\n\t" + "li 7, 4\n\t" + /* 64 rounds */ + "vadduwm 10, 8, 16\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vadduwm 10, 8, 17\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vadduwm 10, 8, 18\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vadduwm 10, 8, 19\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vadduwm 10, 8, 20\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vadduwm 10, 8, 21\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vadduwm 10, 8, 22\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vadduwm 10, 8, 23\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vadduwm 10, 8, 24\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vadduwm 10, 8, 25\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vadduwm 10, 8, 26\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vadduwm 10, 8, 27\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vadduwm 10, 8, 28\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vadduwm 10, 8, 29\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vadduwm 10, 8, 30\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vadduwm 10, 8, 31\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vshasigmaw 15, 30, 0, 15\n\t" + "vshasigmaw 14, 17, 0, 0\n\t" + "vadduwm 16, 16, 15\n\t" + "vadduwm 16, 16, 14\n\t" + "vadduwm 16, 16, 25\n\t" + "vadduwm 10, 8, 16\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vshasigmaw 15, 31, 0, 15\n\t" + "vshasigmaw 14, 18, 0, 0\n\t" + "vadduwm 17, 17, 15\n\t" + "vadduwm 17, 17, 14\n\t" + "vadduwm 17, 17, 26\n\t" + "vadduwm 10, 8, 17\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vshasigmaw 15, 16, 0, 15\n\t" + "vshasigmaw 14, 19, 0, 0\n\t" + "vadduwm 18, 18, 15\n\t" + "vadduwm 18, 18, 14\n\t" + "vadduwm 18, 18, 27\n\t" + "vadduwm 10, 8, 18\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vshasigmaw 15, 17, 0, 15\n\t" + "vshasigmaw 14, 20, 0, 0\n\t" + "vadduwm 19, 19, 15\n\t" + "vadduwm 19, 19, 14\n\t" + "vadduwm 19, 19, 28\n\t" + "vadduwm 10, 8, 19\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vshasigmaw 15, 18, 0, 15\n\t" + "vshasigmaw 14, 21, 0, 0\n\t" + "vadduwm 20, 20, 15\n\t" + "vadduwm 20, 20, 14\n\t" + "vadduwm 20, 20, 29\n\t" + "vadduwm 10, 8, 20\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vshasigmaw 15, 19, 0, 15\n\t" + "vshasigmaw 14, 22, 0, 0\n\t" + "vadduwm 21, 21, 15\n\t" + "vadduwm 21, 21, 14\n\t" + "vadduwm 21, 21, 30\n\t" + "vadduwm 10, 8, 21\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vshasigmaw 15, 20, 0, 15\n\t" + "vshasigmaw 14, 23, 0, 0\n\t" + "vadduwm 22, 22, 15\n\t" + "vadduwm 22, 22, 14\n\t" + "vadduwm 22, 22, 31\n\t" + "vadduwm 10, 8, 22\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vshasigmaw 15, 21, 0, 15\n\t" + "vshasigmaw 14, 24, 0, 0\n\t" + "vadduwm 23, 23, 15\n\t" + "vadduwm 23, 23, 14\n\t" + "vadduwm 23, 23, 16\n\t" + "vadduwm 10, 8, 23\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vshasigmaw 15, 22, 0, 15\n\t" + "vshasigmaw 14, 25, 0, 0\n\t" + "vadduwm 24, 24, 15\n\t" + "vadduwm 24, 24, 14\n\t" + "vadduwm 24, 24, 17\n\t" + "vadduwm 10, 8, 24\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vshasigmaw 15, 23, 0, 15\n\t" + "vshasigmaw 14, 26, 0, 0\n\t" + "vadduwm 25, 25, 15\n\t" + "vadduwm 25, 25, 14\n\t" + "vadduwm 25, 25, 18\n\t" + "vadduwm 10, 8, 25\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vshasigmaw 15, 24, 0, 15\n\t" + "vshasigmaw 14, 27, 0, 0\n\t" + "vadduwm 26, 26, 15\n\t" + "vadduwm 26, 26, 14\n\t" + "vadduwm 26, 26, 19\n\t" + "vadduwm 10, 8, 26\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vshasigmaw 15, 25, 0, 15\n\t" + "vshasigmaw 14, 28, 0, 0\n\t" + "vadduwm 27, 27, 15\n\t" + "vadduwm 27, 27, 14\n\t" + "vadduwm 27, 27, 20\n\t" + "vadduwm 10, 8, 27\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vshasigmaw 15, 26, 0, 15\n\t" + "vshasigmaw 14, 29, 0, 0\n\t" + "vadduwm 28, 28, 15\n\t" + "vadduwm 28, 28, 14\n\t" + "vadduwm 28, 28, 21\n\t" + "vadduwm 10, 8, 28\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vshasigmaw 15, 27, 0, 15\n\t" + "vshasigmaw 14, 30, 0, 0\n\t" + "vadduwm 29, 29, 15\n\t" + "vadduwm 29, 29, 14\n\t" + "vadduwm 29, 29, 22\n\t" + "vadduwm 10, 8, 29\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vshasigmaw 15, 28, 0, 15\n\t" + "vshasigmaw 14, 31, 0, 0\n\t" + "vadduwm 30, 30, 15\n\t" + "vadduwm 30, 30, 14\n\t" + "vadduwm 30, 30, 23\n\t" + "vadduwm 10, 8, 30\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vshasigmaw 15, 29, 0, 15\n\t" + "vshasigmaw 14, 16, 0, 0\n\t" + "vadduwm 31, 31, 15\n\t" + "vadduwm 31, 31, 14\n\t" + "vadduwm 31, 31, 24\n\t" + "vadduwm 10, 8, 31\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vshasigmaw 15, 30, 0, 15\n\t" + "vshasigmaw 14, 17, 0, 0\n\t" + "vadduwm 16, 16, 15\n\t" + "vadduwm 16, 16, 14\n\t" + "vadduwm 16, 16, 25\n\t" + "vadduwm 10, 8, 16\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vshasigmaw 15, 31, 0, 15\n\t" + "vshasigmaw 14, 18, 0, 0\n\t" + "vadduwm 17, 17, 15\n\t" + "vadduwm 17, 17, 14\n\t" + "vadduwm 17, 17, 26\n\t" + "vadduwm 10, 8, 17\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vshasigmaw 15, 16, 0, 15\n\t" + "vshasigmaw 14, 19, 0, 0\n\t" + "vadduwm 18, 18, 15\n\t" + "vadduwm 18, 18, 14\n\t" + "vadduwm 18, 18, 27\n\t" + "vadduwm 10, 8, 18\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vshasigmaw 15, 17, 0, 15\n\t" + "vshasigmaw 14, 20, 0, 0\n\t" + "vadduwm 19, 19, 15\n\t" + "vadduwm 19, 19, 14\n\t" + "vadduwm 19, 19, 28\n\t" + "vadduwm 10, 8, 19\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vshasigmaw 15, 18, 0, 15\n\t" + "vshasigmaw 14, 21, 0, 0\n\t" + "vadduwm 20, 20, 15\n\t" + "vadduwm 20, 20, 14\n\t" + "vadduwm 20, 20, 29\n\t" + "vadduwm 10, 8, 20\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vshasigmaw 15, 19, 0, 15\n\t" + "vshasigmaw 14, 22, 0, 0\n\t" + "vadduwm 21, 21, 15\n\t" + "vadduwm 21, 21, 14\n\t" + "vadduwm 21, 21, 30\n\t" + "vadduwm 10, 8, 21\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vshasigmaw 15, 20, 0, 15\n\t" + "vshasigmaw 14, 23, 0, 0\n\t" + "vadduwm 22, 22, 15\n\t" + "vadduwm 22, 22, 14\n\t" + "vadduwm 22, 22, 31\n\t" + "vadduwm 10, 8, 22\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vshasigmaw 15, 21, 0, 15\n\t" + "vshasigmaw 14, 24, 0, 0\n\t" + "vadduwm 23, 23, 15\n\t" + "vadduwm 23, 23, 14\n\t" + "vadduwm 23, 23, 16\n\t" + "vadduwm 10, 8, 23\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vshasigmaw 15, 22, 0, 15\n\t" + "vshasigmaw 14, 25, 0, 0\n\t" + "vadduwm 24, 24, 15\n\t" + "vadduwm 24, 24, 14\n\t" + "vadduwm 24, 24, 17\n\t" + "vadduwm 10, 8, 24\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vshasigmaw 15, 23, 0, 15\n\t" + "vshasigmaw 14, 26, 0, 0\n\t" + "vadduwm 25, 25, 15\n\t" + "vadduwm 25, 25, 14\n\t" + "vadduwm 25, 25, 18\n\t" + "vadduwm 10, 8, 25\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vshasigmaw 15, 24, 0, 15\n\t" + "vshasigmaw 14, 27, 0, 0\n\t" + "vadduwm 26, 26, 15\n\t" + "vadduwm 26, 26, 14\n\t" + "vadduwm 26, 26, 19\n\t" + "vadduwm 10, 8, 26\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vshasigmaw 15, 25, 0, 15\n\t" + "vshasigmaw 14, 28, 0, 0\n\t" + "vadduwm 27, 27, 15\n\t" + "vadduwm 27, 27, 14\n\t" + "vadduwm 27, 27, 20\n\t" + "vadduwm 10, 8, 27\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vshasigmaw 15, 26, 0, 15\n\t" + "vshasigmaw 14, 29, 0, 0\n\t" + "vadduwm 28, 28, 15\n\t" + "vadduwm 28, 28, 14\n\t" + "vadduwm 28, 28, 21\n\t" + "vadduwm 10, 8, 28\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vshasigmaw 15, 27, 0, 15\n\t" + "vshasigmaw 14, 30, 0, 0\n\t" + "vadduwm 29, 29, 15\n\t" + "vadduwm 29, 29, 14\n\t" + "vadduwm 29, 29, 22\n\t" + "vadduwm 10, 8, 29\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vshasigmaw 15, 28, 0, 15\n\t" + "vshasigmaw 14, 31, 0, 0\n\t" + "vadduwm 30, 30, 15\n\t" + "vadduwm 30, 30, 14\n\t" + "vadduwm 30, 30, 23\n\t" + "vadduwm 10, 8, 30\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vshasigmaw 15, 29, 0, 15\n\t" + "vshasigmaw 14, 16, 0, 0\n\t" + "vadduwm 31, 31, 15\n\t" + "vadduwm 31, 31, 14\n\t" + "vadduwm 31, 31, 24\n\t" + "vadduwm 10, 8, 31\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vshasigmaw 15, 30, 0, 15\n\t" + "vshasigmaw 14, 17, 0, 0\n\t" + "vadduwm 16, 16, 15\n\t" + "vadduwm 16, 16, 14\n\t" + "vadduwm 16, 16, 25\n\t" + "vadduwm 10, 8, 16\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vshasigmaw 15, 31, 0, 15\n\t" + "vshasigmaw 14, 18, 0, 0\n\t" + "vadduwm 17, 17, 15\n\t" + "vadduwm 17, 17, 14\n\t" + "vadduwm 17, 17, 26\n\t" + "vadduwm 10, 8, 17\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vshasigmaw 15, 16, 0, 15\n\t" + "vshasigmaw 14, 19, 0, 0\n\t" + "vadduwm 18, 18, 15\n\t" + "vadduwm 18, 18, 14\n\t" + "vadduwm 18, 18, 27\n\t" + "vadduwm 10, 8, 18\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vshasigmaw 15, 17, 0, 15\n\t" + "vshasigmaw 14, 20, 0, 0\n\t" + "vadduwm 19, 19, 15\n\t" + "vadduwm 19, 19, 14\n\t" + "vadduwm 19, 19, 28\n\t" + "vadduwm 10, 8, 19\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vshasigmaw 15, 18, 0, 15\n\t" + "vshasigmaw 14, 21, 0, 0\n\t" + "vadduwm 20, 20, 15\n\t" + "vadduwm 20, 20, 14\n\t" + "vadduwm 20, 20, 29\n\t" + "vadduwm 10, 8, 20\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vshasigmaw 15, 19, 0, 15\n\t" + "vshasigmaw 14, 22, 0, 0\n\t" + "vadduwm 21, 21, 15\n\t" + "vadduwm 21, 21, 14\n\t" + "vadduwm 21, 21, 30\n\t" + "vadduwm 10, 8, 21\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vshasigmaw 15, 20, 0, 15\n\t" + "vshasigmaw 14, 23, 0, 0\n\t" + "vadduwm 22, 22, 15\n\t" + "vadduwm 22, 22, 14\n\t" + "vadduwm 22, 22, 31\n\t" + "vadduwm 10, 8, 22\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vshasigmaw 15, 21, 0, 15\n\t" + "vshasigmaw 14, 24, 0, 0\n\t" + "vadduwm 23, 23, 15\n\t" + "vadduwm 23, 23, 14\n\t" + "vadduwm 23, 23, 16\n\t" + "vadduwm 10, 8, 23\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + "vshasigmaw 15, 22, 0, 15\n\t" + "vshasigmaw 14, 25, 0, 0\n\t" + "vadduwm 24, 24, 15\n\t" + "vadduwm 24, 24, 14\n\t" + "vadduwm 24, 24, 17\n\t" + "vadduwm 10, 8, 24\n\t" + "vadduwm 13, 7, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 3, 7\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 4, 1, 15\n\t" + "vshasigmaw 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 7, 15, 14\n\t" + "vadduwm 3, 9, 15\n\t" + "vadduwm 7, 7, 12\n\t" + "vshasigmaw 15, 23, 0, 15\n\t" + "vshasigmaw 14, 26, 0, 0\n\t" + "vadduwm 25, 25, 15\n\t" + "vadduwm 25, 25, 14\n\t" + "vadduwm 25, 25, 18\n\t" + "vadduwm 10, 8, 25\n\t" + "vadduwm 13, 6, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 2, 6\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 3, 1, 15\n\t" + "vshasigmaw 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 6, 15, 14\n\t" + "vadduwm 2, 9, 15\n\t" + "vadduwm 6, 6, 12\n\t" + "vshasigmaw 15, 24, 0, 15\n\t" + "vshasigmaw 14, 27, 0, 0\n\t" + "vadduwm 26, 26, 15\n\t" + "vadduwm 26, 26, 14\n\t" + "vadduwm 26, 26, 19\n\t" + "vadduwm 10, 8, 26\n\t" + "vadduwm 13, 5, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 1, 5\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 2, 1, 15\n\t" + "vshasigmaw 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 5, 15, 14\n\t" + "vadduwm 1, 9, 15\n\t" + "vadduwm 5, 5, 12\n\t" + "vshasigmaw 15, 25, 0, 15\n\t" + "vshasigmaw 14, 28, 0, 0\n\t" + "vadduwm 27, 27, 15\n\t" + "vadduwm 27, 27, 14\n\t" + "vadduwm 27, 27, 20\n\t" + "vadduwm 10, 8, 27\n\t" + "vadduwm 13, 4, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 0, 4\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 1, 1, 15\n\t" + "vshasigmaw 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 4, 15, 14\n\t" + "vadduwm 0, 9, 15\n\t" + "vadduwm 4, 4, 12\n\t" + "vshasigmaw 15, 26, 0, 15\n\t" + "vshasigmaw 14, 29, 0, 0\n\t" + "vadduwm 28, 28, 15\n\t" + "vadduwm 28, 28, 14\n\t" + "vadduwm 28, 28, 21\n\t" + "vadduwm 10, 8, 28\n\t" + "vadduwm 13, 3, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 7, 3\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 0, 1, 15\n\t" + "vshasigmaw 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 3, 15, 14\n\t" + "vadduwm 7, 9, 15\n\t" + "vadduwm 3, 3, 12\n\t" + "vshasigmaw 15, 27, 0, 15\n\t" + "vshasigmaw 14, 30, 0, 0\n\t" + "vadduwm 29, 29, 15\n\t" + "vadduwm 29, 29, 14\n\t" + "vadduwm 29, 29, 22\n\t" + "vadduwm 10, 8, 29\n\t" + "vadduwm 13, 2, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 6, 2\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 7, 1, 15\n\t" + "vshasigmaw 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 2, 15, 14\n\t" + "vadduwm 6, 9, 15\n\t" + "vadduwm 2, 2, 12\n\t" + "vshasigmaw 15, 28, 0, 15\n\t" + "vshasigmaw 14, 31, 0, 0\n\t" + "vadduwm 30, 30, 15\n\t" + "vadduwm 30, 30, 14\n\t" + "vadduwm 30, 30, 23\n\t" + "vadduwm 10, 8, 30\n\t" + "vadduwm 13, 1, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 5, 1\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 6, 1, 15\n\t" + "vshasigmaw 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 1, 15, 14\n\t" + "vadduwm 5, 9, 15\n\t" + "vadduwm 1, 1, 12\n\t" + "vshasigmaw 15, 29, 0, 15\n\t" + "vshasigmaw 14, 16, 0, 0\n\t" + "vadduwm 31, 31, 15\n\t" + "vadduwm 31, 31, 14\n\t" + "vadduwm 31, 31, 24\n\t" + "vadduwm 10, 8, 31\n\t" + "vadduwm 13, 0, 10\n\t" + "lxvw4x 40, 7, 6\n\t" + "addi 7, 7, 4\n\t" + "vadduwm 11, 4, 0\n\t" + "vadduwm 11, 11, 10\n\t" + "vshasigmaw 15, 5, 1, 15\n\t" + "vshasigmaw 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vadduwm 13, 13, 9\n\t" + "vadduwm 12, 12, 13\n\t" + "vadduwm 9, 9, 11\n\t" + "vadduwm 0, 15, 14\n\t" + "vadduwm 4, 9, 15\n\t" + "vadduwm 0, 0, 12\n\t" + /* Repack state, add original digest and store */ + "vmrghw 0, 0, 1\n\t" + "vmrghw 2, 2, 3\n\t" + "xxmrghd 32, 32, 34\n\t" + "vmrghw 4, 4, 5\n\t" + "vmrghw 6, 6, 7\n\t" + "xxmrghd 36, 36, 38\n\t" + "lxvw4x 41, 0, %[sha256]\n\t" + "lxvw4x 42, 8, %[sha256]\n\t" + "vadduwm 0, 0, 9\n\t" + "vadduwm 4, 4, 10\n\t" + "stxvw4x 32, 0, %[sha256]\n\t" + "stxvw4x 36, 8, %[sha256]\n\t" + "bdnz L_SHA256_crypto_begin_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len), + [L_SHA256_crypto_k] "+r" (L_SHA256_crypto_k_c) + : + : "memory", "cc", "0", "7", "8", "v0", "v1", "v2", "v3", "v4", "v5", + "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", + "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [sha256] "r" (sha256), [data] "r" (data), [len] "r" (len), + [L_SHA256_crypto_k] "r" (L_SHA256_crypto_k_c) + : "memory", "cc", "0", "6", "7", "8", "v0", "v1", "v2", "v3", "v4", + "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", + "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* WOLFSSL_PPC64_ASM_CRYPTO */ +#endif /* !NO_SHA256 */ +#endif /* WOLFSSL_PPC64_ASM */ + +#endif /* WOLFSSL_PPC64_ASM_INLINE */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S b/wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S new file mode 100644 index 00000000000..67c2e1ef6ba --- /dev/null +++ b/wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S @@ -0,0 +1,1850 @@ +/* ppc64-sha3-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 + */ + +#include + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha3/sha3.rb ppc64 \ + * ../wolfssl/wolfcrypt/src/port/ppc64/ppc64-sha3-asm.S + */ +#ifdef WOLFSSL_PPC64_ASM +#ifndef WOLFSSL_PPC64_ASM_INLINE +#ifdef WOLFSSL_SHA3 +#ifndef __APPLE__ + .text + .type L_SHA3_transform_base_r, %object + .size L_SHA3_transform_base_r, 192 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA3_transform_base_r: + .quad 0x0000000000000001,0x0000000000008082 + .quad 0x800000000000808a,0x8000000080008000 + .quad 0x000000000000808b,0x0000000080000001 + .quad 0x8000000080008081,0x8000000000008009 + .quad 0x000000000000008a,0x0000000000000088 + .quad 0x0000000080008009,0x000000008000000a + .quad 0x000000008000808b,0x800000000000008b + .quad 0x8000000000008089,0x8000000000008003 + .quad 0x8000000000008002,0x8000000000000080 + .quad 0x000000000000800a,0x800000008000000a + .quad 0x8000000080008081,0x8000000000008080 + .quad 0x0000000080000001,0x8000000080008008 +#ifndef __APPLE__ +.text +.globl BlockSha3_base +.type BlockSha3_base,@function +.align 16 +BlockSha3_base: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry BlockSha3_base, .-BlockSha3_base +#endif +#else +.section __TEXT,__text +.globl _BlockSha3_base +.p2align 4 +_BlockSha3_base: +#endif /* __APPLE__ */ + stdu 1, -152(1) + mflr 0 + std 0, 144(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + std 18, 32(1) + std 19, 40(1) + std 20, 48(1) + std 21, 56(1) + std 22, 64(1) + std 23, 72(1) + std 24, 80(1) + std 25, 88(1) + std 26, 96(1) + std 27, 104(1) + std 28, 112(1) + std 29, 120(1) + std 30, 128(1) + std 31, 136(1) + subi 1, 1, 56 + addis 29, 2, L_SHA3_transform_base_r@toc@ha + addi 29, 29, L_SHA3_transform_base_r@toc@l + std 3, 40(1) + ld 0, 0(3) + ld 4, 8(3) + ld 5, 16(3) + ld 6, 24(3) + ld 7, 32(3) + ld 8, 40(3) + ld 9, 48(3) + ld 10, 56(3) + ld 11, 64(3) + ld 12, 72(3) + ld 14, 80(3) + ld 15, 88(3) + ld 16, 96(3) + ld 17, 104(3) + ld 18, 112(3) + ld 19, 120(3) + ld 20, 128(3) + ld 21, 136(3) + ld 22, 144(3) + ld 23, 152(3) + ld 24, 160(3) + ld 25, 168(3) + ld 26, 176(3) + ld 27, 184(3) + ld 28, 192(3) + li 30, 24 + mtctr 30 + # Start of 24 rounds +L_SHA3_transform_base_begin: + # Column Mix + xor 30, 0, 8 + xor 30, 30, 14 + xor 30, 30, 19 + xor 30, 30, 24 + std 30, 0(1) + xor 30, 4, 9 + xor 30, 30, 15 + xor 30, 30, 20 + xor 30, 30, 25 + std 30, 8(1) + xor 30, 5, 10 + xor 30, 30, 16 + xor 30, 30, 21 + xor 30, 30, 26 + std 30, 16(1) + xor 30, 6, 11 + xor 30, 30, 17 + xor 30, 30, 22 + xor 30, 30, 27 + std 30, 24(1) + xor 30, 7, 12 + xor 30, 30, 18 + xor 30, 30, 23 + xor 30, 30, 28 + std 30, 32(1) + ld 30, 8(1) + rotldi 30, 30, 1 + ld 31, 32(1) + xor 31, 31, 30 + xor 0, 0, 31 + xor 8, 8, 31 + xor 14, 14, 31 + xor 19, 19, 31 + xor 24, 24, 31 + ld 30, 16(1) + rotldi 30, 30, 1 + ld 31, 0(1) + xor 31, 31, 30 + xor 4, 4, 31 + xor 9, 9, 31 + xor 15, 15, 31 + xor 20, 20, 31 + xor 25, 25, 31 + ld 30, 24(1) + rotldi 30, 30, 1 + ld 31, 8(1) + xor 31, 31, 30 + xor 5, 5, 31 + xor 10, 10, 31 + xor 16, 16, 31 + xor 21, 21, 31 + xor 26, 26, 31 + ld 30, 32(1) + rotldi 30, 30, 1 + ld 31, 16(1) + xor 31, 31, 30 + xor 6, 6, 31 + xor 11, 11, 31 + xor 17, 17, 31 + xor 22, 22, 31 + xor 27, 27, 31 + ld 30, 0(1) + rotldi 30, 30, 1 + ld 31, 24(1) + xor 31, 31, 30 + xor 7, 7, 31 + xor 12, 12, 31 + xor 18, 18, 31 + xor 23, 23, 31 + xor 28, 28, 31 + std 29, 48(1) + # Swap Rotate + rotldi 3, 4, 1 + rotldi 4, 9, 44 + rotldi 9, 12, 20 + rotldi 12, 26, 61 + rotldi 26, 18, 39 + rotldi 18, 24, 18 + rotldi 24, 5, 62 + rotldi 5, 16, 43 + rotldi 16, 17, 25 + rotldi 17, 23, 8 + rotldi 23, 27, 56 + rotldi 27, 19, 41 + rotldi 19, 7, 27 + rotldi 7, 28, 14 + rotldi 28, 25, 2 + rotldi 25, 11, 55 + rotldi 11, 20, 45 + rotldi 20, 8, 36 + rotldi 8, 6, 28 + rotldi 6, 22, 21 + rotldi 22, 21, 15 + rotldi 21, 15, 10 + rotldi 15, 10, 6 + rotldi 10, 14, 3 + # Row Mix + andc 14, 5, 4 + andc 29, 6, 5 + andc 30, 0, 7 + andc 31, 4, 0 + xor 0, 0, 14 + xor 4, 4, 29 + andc 14, 7, 6 + xor 6, 6, 30 + xor 5, 5, 14 + xor 7, 7, 31 + andc 14, 10, 9 + andc 29, 11, 10 + andc 30, 8, 12 + andc 31, 9, 8 + xor 8, 8, 14 + xor 9, 9, 29 + andc 14, 12, 11 + xor 11, 11, 30 + xor 10, 10, 14 + xor 12, 12, 31 + andc 14, 16, 15 + andc 29, 17, 16 + andc 30, 3, 18 + andc 31, 15, 3 + xor 14, 3, 14 + xor 15, 15, 29 + andc 3, 18, 17 + xor 17, 17, 30 + xor 16, 16, 3 + xor 18, 18, 31 + andc 3, 21, 20 + andc 29, 22, 21 + andc 30, 19, 23 + andc 31, 20, 19 + xor 19, 19, 3 + xor 20, 20, 29 + andc 3, 23, 22 + xor 22, 22, 30 + xor 21, 21, 3 + xor 23, 23, 31 + andc 3, 26, 25 + andc 29, 27, 26 + andc 30, 24, 28 + andc 31, 25, 24 + xor 24, 24, 3 + xor 25, 25, 29 + andc 3, 28, 27 + xor 27, 27, 30 + xor 26, 26, 3 + xor 28, 28, 31 + ld 29, 48(1) + # Done transforming + ld 30, 0(29) + addi 29, 29, 8 + xor 0, 0, 30 + bdnz L_SHA3_transform_base_begin + ld 3, 40(1) + std 0, 0(3) + std 4, 8(3) + std 5, 16(3) + std 6, 24(3) + std 7, 32(3) + std 8, 40(3) + std 9, 48(3) + std 10, 56(3) + std 11, 64(3) + std 12, 72(3) + std 14, 80(3) + std 15, 88(3) + std 16, 96(3) + std 17, 104(3) + std 18, 112(3) + std 19, 120(3) + std 20, 128(3) + std 21, 136(3) + std 22, 144(3) + std 23, 152(3) + std 24, 160(3) + std 25, 168(3) + std 26, 176(3) + std 27, 184(3) + std 28, 192(3) + addi 1, 1, 56 + ld 0, 144(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + ld 18, 32(1) + ld 19, 40(1) + ld 20, 48(1) + ld 21, 56(1) + ld 22, 64(1) + ld 23, 72(1) + ld 24, 80(1) + ld 25, 88(1) + ld 26, 96(1) + ld 27, 104(1) + ld 28, 112(1) + ld 29, 120(1) + ld 30, 128(1) + ld 31, 136(1) + addi 1, 1, 0x98 + blr +#ifndef __APPLE__ + .size BlockSha3_base,.-BlockSha3_base +#endif /* __APPLE__ */ +#ifdef WOLFSSL_PPC64_ASM_POWER8 +#ifndef __APPLE__ + .text + .type L_SHA3_transform_power8_r, %object + .size L_SHA3_transform_power8_r, 192 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA3_transform_power8_r: + .quad 0x0000000000000001,0x0000000000008082 + .quad 0x800000000000808a,0x8000000080008000 + .quad 0x000000000000808b,0x0000000080000001 + .quad 0x8000000080008081,0x8000000000008009 + .quad 0x000000000000008a,0x0000000000000088 + .quad 0x0000000080008009,0x000000008000000a + .quad 0x000000008000808b,0x800000000000008b + .quad 0x8000000000008089,0x8000000000008003 + .quad 0x8000000000008002,0x8000000000000080 + .quad 0x000000000000800a,0x800000008000000a + .quad 0x8000000080008081,0x8000000000008080 + .quad 0x0000000080000001,0x8000000080008008 + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl BlockSha3_power8 +.type BlockSha3_power8,@function +.align 16 +BlockSha3_power8: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry BlockSha3_power8, .-BlockSha3_power8 +#endif +#else +.section __TEXT,__text +.globl _BlockSha3_power8 +.p2align 4 +_BlockSha3_power8: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + addis 4, 2, L_SHA3_transform_power8_r@toc@ha + addi 4, 4, L_SHA3_transform_power8_r@toc@l + # Load state + li 5, 0 + lxsdx 32, 3, 5 + addi 5, 5, 8 + lxsdx 33, 3, 5 + addi 5, 5, 8 + lxsdx 34, 3, 5 + addi 5, 5, 8 + lxsdx 35, 3, 5 + addi 5, 5, 8 + lxsdx 36, 3, 5 + addi 5, 5, 8 + lxsdx 37, 3, 5 + addi 5, 5, 8 + lxsdx 38, 3, 5 + addi 5, 5, 8 + lxsdx 39, 3, 5 + addi 5, 5, 8 + lxsdx 40, 3, 5 + addi 5, 5, 8 + lxsdx 41, 3, 5 + addi 5, 5, 8 + lxsdx 42, 3, 5 + addi 5, 5, 8 + lxsdx 43, 3, 5 + addi 5, 5, 8 + lxsdx 44, 3, 5 + addi 5, 5, 8 + lxsdx 45, 3, 5 + addi 5, 5, 8 + lxsdx 46, 3, 5 + addi 5, 5, 8 + lxsdx 47, 3, 5 + addi 5, 5, 8 + lxsdx 48, 3, 5 + addi 5, 5, 8 + lxsdx 49, 3, 5 + addi 5, 5, 8 + lxsdx 50, 3, 5 + addi 5, 5, 8 + lxsdx 51, 3, 5 + addi 5, 5, 8 + lxsdx 52, 3, 5 + addi 5, 5, 8 + lxsdx 53, 3, 5 + addi 5, 5, 8 + lxsdx 54, 3, 5 + addi 5, 5, 8 + lxsdx 55, 3, 5 + addi 5, 5, 8 + lxsdx 56, 3, 5 + li 5, 24 + mtctr 5 + # Start of 24 rounds +L_SHA3_transform_power8_begin: + # Column Mix + vxor 25, 0, 5 + vxor 25, 25, 10 + vxor 25, 25, 15 + vxor 25, 25, 20 + vxor 26, 1, 6 + vxor 26, 26, 11 + vxor 26, 26, 16 + vxor 26, 26, 21 + vxor 27, 2, 7 + vxor 27, 27, 12 + vxor 27, 27, 17 + vxor 27, 27, 22 + vxor 28, 3, 8 + vxor 28, 28, 13 + vxor 28, 28, 18 + vxor 28, 28, 23 + vxor 29, 4, 9 + vxor 29, 29, 14 + vxor 29, 29, 19 + vxor 29, 29, 24 + li 6, 1 + mtvsrd 63, 6 + vrld 30, 26, 31 + vxor 30, 29, 30 + vxor 0, 0, 30 + vxor 5, 5, 30 + vxor 10, 10, 30 + vxor 15, 15, 30 + vxor 20, 20, 30 + vrld 30, 27, 31 + vxor 30, 25, 30 + vxor 1, 1, 30 + vxor 6, 6, 30 + vxor 11, 11, 30 + vxor 16, 16, 30 + vxor 21, 21, 30 + vrld 30, 28, 31 + vxor 30, 26, 30 + vxor 2, 2, 30 + vxor 7, 7, 30 + vxor 12, 12, 30 + vxor 17, 17, 30 + vxor 22, 22, 30 + vrld 30, 29, 31 + vxor 30, 27, 30 + vxor 3, 3, 30 + vxor 8, 8, 30 + vxor 13, 13, 30 + vxor 18, 18, 30 + vxor 23, 23, 30 + vrld 30, 25, 31 + vxor 30, 28, 30 + vxor 4, 4, 30 + vxor 9, 9, 30 + vxor 14, 14, 30 + vxor 19, 19, 30 + vxor 24, 24, 30 + # Swap Rotate + li 6, 1 + mtvsrd 63, 6 + vrld 25, 1, 31 + li 6, 44 + mtvsrd 63, 6 + vrld 1, 6, 31 + li 6, 20 + mtvsrd 63, 6 + vrld 6, 9, 31 + li 6, 61 + mtvsrd 63, 6 + vrld 9, 22, 31 + li 6, 39 + mtvsrd 63, 6 + vrld 22, 14, 31 + li 6, 18 + mtvsrd 63, 6 + vrld 14, 20, 31 + li 6, 62 + mtvsrd 63, 6 + vrld 20, 2, 31 + li 6, 43 + mtvsrd 63, 6 + vrld 2, 12, 31 + li 6, 25 + mtvsrd 63, 6 + vrld 12, 13, 31 + li 6, 8 + mtvsrd 63, 6 + vrld 13, 19, 31 + li 6, 56 + mtvsrd 63, 6 + vrld 19, 23, 31 + li 6, 41 + mtvsrd 63, 6 + vrld 23, 15, 31 + li 6, 27 + mtvsrd 63, 6 + vrld 15, 4, 31 + li 6, 14 + mtvsrd 63, 6 + vrld 4, 24, 31 + li 6, 2 + mtvsrd 63, 6 + vrld 24, 21, 31 + li 6, 55 + mtvsrd 63, 6 + vrld 21, 8, 31 + li 6, 45 + mtvsrd 63, 6 + vrld 8, 16, 31 + li 6, 36 + mtvsrd 63, 6 + vrld 16, 5, 31 + li 6, 28 + mtvsrd 63, 6 + vrld 5, 3, 31 + li 6, 21 + mtvsrd 63, 6 + vrld 3, 18, 31 + li 6, 15 + mtvsrd 63, 6 + vrld 18, 17, 31 + li 6, 10 + mtvsrd 63, 6 + vrld 17, 11, 31 + li 6, 6 + mtvsrd 63, 6 + vrld 11, 7, 31 + li 6, 3 + mtvsrd 63, 6 + vrld 7, 10, 31 + # Row Mix + vandc 10, 2, 1 + vandc 26, 3, 2 + vandc 27, 0, 4 + vandc 28, 1, 0 + vxor 0, 0, 10 + vxor 1, 1, 26 + vandc 10, 4, 3 + vxor 3, 3, 27 + vxor 2, 2, 10 + vxor 4, 4, 28 + vandc 10, 7, 6 + vandc 26, 8, 7 + vandc 27, 5, 9 + vandc 28, 6, 5 + vxor 5, 5, 10 + vxor 6, 6, 26 + vandc 10, 9, 8 + vxor 8, 8, 27 + vxor 7, 7, 10 + vxor 9, 9, 28 + vandc 10, 12, 11 + vandc 26, 13, 12 + vandc 27, 25, 14 + vandc 28, 11, 25 + vxor 10, 25, 10 + vxor 11, 11, 26 + vandc 25, 14, 13 + vxor 13, 13, 27 + vxor 12, 12, 25 + vxor 14, 14, 28 + vandc 25, 17, 16 + vandc 26, 18, 17 + vandc 27, 15, 19 + vandc 28, 16, 15 + vxor 15, 15, 25 + vxor 16, 16, 26 + vandc 25, 19, 18 + vxor 18, 18, 27 + vxor 17, 17, 25 + vxor 19, 19, 28 + vandc 25, 22, 21 + vandc 26, 23, 22 + vandc 27, 20, 24 + vandc 28, 21, 20 + vxor 20, 20, 25 + vxor 21, 21, 26 + vandc 25, 24, 23 + vxor 23, 23, 27 + vxor 22, 22, 25 + vxor 24, 24, 28 + # Iota - XOR round constant into lane 0 + lxsdx 58, 0, 4 + addi 4, 4, 8 + vxor 0, 0, 26 + bdnz L_SHA3_transform_power8_begin + # Store state + li 5, 0 + stxsdx 32, 3, 5 + addi 5, 5, 8 + stxsdx 33, 3, 5 + addi 5, 5, 8 + stxsdx 34, 3, 5 + addi 5, 5, 8 + stxsdx 35, 3, 5 + addi 5, 5, 8 + stxsdx 36, 3, 5 + addi 5, 5, 8 + stxsdx 37, 3, 5 + addi 5, 5, 8 + stxsdx 38, 3, 5 + addi 5, 5, 8 + stxsdx 39, 3, 5 + addi 5, 5, 8 + stxsdx 40, 3, 5 + addi 5, 5, 8 + stxsdx 41, 3, 5 + addi 5, 5, 8 + stxsdx 42, 3, 5 + addi 5, 5, 8 + stxsdx 43, 3, 5 + addi 5, 5, 8 + stxsdx 44, 3, 5 + addi 5, 5, 8 + stxsdx 45, 3, 5 + addi 5, 5, 8 + stxsdx 46, 3, 5 + addi 5, 5, 8 + stxsdx 47, 3, 5 + addi 5, 5, 8 + stxsdx 48, 3, 5 + addi 5, 5, 8 + stxsdx 49, 3, 5 + addi 5, 5, 8 + stxsdx 50, 3, 5 + addi 5, 5, 8 + stxsdx 51, 3, 5 + addi 5, 5, 8 + stxsdx 52, 3, 5 + addi 5, 5, 8 + stxsdx 53, 3, 5 + addi 5, 5, 8 + stxsdx 54, 3, 5 + addi 5, 5, 8 + stxsdx 55, 3, 5 + addi 5, 5, 8 + stxsdx 56, 3, 5 + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size BlockSha3_power8,.-BlockSha3_power8 +#endif /* __APPLE__ */ + .machine "pop" +#if (defined(WOLFSSL_HAVE_MLKEM) || defined(HAVE_DILITHIUM)) && defined(WOLFSSL_SHA3_PPC64_BLOCKS_N) +#ifndef __APPLE__ + .text + .type L_SHA3_blocksx2_power8_rot, %object + .size L_SHA3_blocksx2_power8_rot, 200 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA3_blocksx2_power8_rot: + .quad 0x0000000000000001,0x0000000000000001 + .quad 0x000000000000002c,0x0000000000000014 + .quad 0x000000000000003d,0x0000000000000027 + .quad 0x0000000000000012,0x000000000000003e + .quad 0x000000000000002b,0x0000000000000019 + .quad 0x0000000000000008,0x0000000000000038 + .quad 0x0000000000000029,0x000000000000001b + .quad 0x000000000000000e,0x0000000000000002 + .quad 0x0000000000000037,0x000000000000002d + .quad 0x0000000000000024,0x000000000000001c + .quad 0x0000000000000015,0x000000000000000f + .quad 0x000000000000000a,0x0000000000000006 + .quad 0x0000000000000003 +#ifndef __APPLE__ + .text + .type L_SHA3_blocksx2_power8_r, %object + .size L_SHA3_blocksx2_power8_r, 192 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA3_blocksx2_power8_r: + .quad 0x0000000000000001,0x0000000000008082 + .quad 0x800000000000808a,0x8000000080008000 + .quad 0x000000000000808b,0x0000000080000001 + .quad 0x8000000080008081,0x8000000000008009 + .quad 0x000000000000008a,0x0000000000000088 + .quad 0x0000000080008009,0x000000008000000a + .quad 0x000000008000808b,0x800000000000008b + .quad 0x8000000000008089,0x8000000000008003 + .quad 0x8000000000008002,0x8000000000000080 + .quad 0x000000000000800a,0x800000008000000a + .quad 0x8000000080008081,0x8000000000008080 + .quad 0x0000000080000001,0x8000000080008008 + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl sha3_blocksx2_power8 +.type sha3_blocksx2_power8,@function +.align 16 +sha3_blocksx2_power8: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry sha3_blocksx2_power8, .-sha3_blocksx2_power8 +#endif +#else +.section __TEXT,__text +.globl _sha3_blocksx2_power8 +.p2align 4 +_sha3_blocksx2_power8: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + addis 4, 2, L_SHA3_blocksx2_power8_r@toc@ha + addi 4, 4, L_SHA3_blocksx2_power8_r@toc@l + addis 5, 2, L_SHA3_blocksx2_power8_rot@toc@ha + addi 5, 5, L_SHA3_blocksx2_power8_rot@toc@l + # Load states 0,1 (interleaved) + li 6, 0 + lxvd2x 32, 3, 6 + addi 6, 6, 16 + lxvd2x 33, 3, 6 + addi 6, 6, 16 + lxvd2x 34, 3, 6 + addi 6, 6, 16 + lxvd2x 35, 3, 6 + addi 6, 6, 16 + lxvd2x 36, 3, 6 + addi 6, 6, 16 + lxvd2x 37, 3, 6 + addi 6, 6, 16 + lxvd2x 38, 3, 6 + addi 6, 6, 16 + lxvd2x 39, 3, 6 + addi 6, 6, 16 + lxvd2x 40, 3, 6 + addi 6, 6, 16 + lxvd2x 41, 3, 6 + addi 6, 6, 16 + lxvd2x 42, 3, 6 + addi 6, 6, 16 + lxvd2x 43, 3, 6 + addi 6, 6, 16 + lxvd2x 44, 3, 6 + addi 6, 6, 16 + lxvd2x 45, 3, 6 + addi 6, 6, 16 + lxvd2x 46, 3, 6 + addi 6, 6, 16 + lxvd2x 47, 3, 6 + addi 6, 6, 16 + lxvd2x 48, 3, 6 + addi 6, 6, 16 + lxvd2x 49, 3, 6 + addi 6, 6, 16 + lxvd2x 50, 3, 6 + addi 6, 6, 16 + lxvd2x 51, 3, 6 + addi 6, 6, 16 + lxvd2x 52, 3, 6 + addi 6, 6, 16 + lxvd2x 53, 3, 6 + addi 6, 6, 16 + lxvd2x 54, 3, 6 + addi 6, 6, 16 + lxvd2x 55, 3, 6 + addi 6, 6, 16 + lxvd2x 56, 3, 6 + li 6, 24 + mtctr 6 + # Start of 24 rounds +L_SHA3_blocksx2_power8_begin: + # Column Mix + vxor 25, 0, 5 + vxor 25, 25, 10 + vxor 25, 25, 15 + vxor 25, 25, 20 + vxor 26, 1, 6 + vxor 26, 26, 11 + vxor 26, 26, 16 + vxor 26, 26, 21 + vxor 27, 2, 7 + vxor 27, 27, 12 + vxor 27, 27, 17 + vxor 27, 27, 22 + vxor 28, 3, 8 + vxor 28, 28, 13 + vxor 28, 28, 18 + vxor 28, 28, 23 + vxor 29, 4, 9 + vxor 29, 29, 14 + vxor 29, 29, 19 + vxor 29, 29, 24 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 30, 26, 31 + vxor 30, 29, 30 + vxor 0, 0, 30 + vxor 5, 5, 30 + vxor 10, 10, 30 + vxor 15, 15, 30 + vxor 20, 20, 30 + vrld 30, 27, 31 + vxor 30, 25, 30 + vxor 1, 1, 30 + vxor 6, 6, 30 + vxor 11, 11, 30 + vxor 16, 16, 30 + vxor 21, 21, 30 + vrld 30, 28, 31 + vxor 30, 26, 30 + vxor 2, 2, 30 + vxor 7, 7, 30 + vxor 12, 12, 30 + vxor 17, 17, 30 + vxor 22, 22, 30 + vrld 30, 29, 31 + vxor 30, 27, 30 + vxor 3, 3, 30 + vxor 8, 8, 30 + vxor 13, 13, 30 + vxor 18, 18, 30 + vxor 23, 23, 30 + vrld 30, 25, 31 + vxor 30, 28, 30 + vxor 4, 4, 30 + vxor 9, 9, 30 + vxor 14, 14, 30 + vxor 19, 19, 30 + vxor 24, 24, 30 + # Swap Rotate + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 25, 1, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 1, 6, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 6, 9, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 9, 22, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 22, 14, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 14, 20, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 20, 2, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 2, 12, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 12, 13, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 13, 19, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 19, 23, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 23, 15, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 15, 4, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 4, 24, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 24, 21, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 21, 8, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 8, 16, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 16, 5, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 5, 3, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 3, 18, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 18, 17, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 17, 11, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 11, 7, 31 + lxvdsx 63, 0, 5 + addi 5, 5, 8 + vrld 7, 10, 31 + # Row Mix + vandc 10, 2, 1 + vandc 26, 3, 2 + vandc 27, 0, 4 + vandc 28, 1, 0 + vxor 0, 0, 10 + vxor 1, 1, 26 + vandc 10, 4, 3 + vxor 3, 3, 27 + vxor 2, 2, 10 + vxor 4, 4, 28 + vandc 10, 7, 6 + vandc 26, 8, 7 + vandc 27, 5, 9 + vandc 28, 6, 5 + vxor 5, 5, 10 + vxor 6, 6, 26 + vandc 10, 9, 8 + vxor 8, 8, 27 + vxor 7, 7, 10 + vxor 9, 9, 28 + vandc 10, 12, 11 + vandc 26, 13, 12 + vandc 27, 25, 14 + vandc 28, 11, 25 + vxor 10, 25, 10 + vxor 11, 11, 26 + vandc 25, 14, 13 + vxor 13, 13, 27 + vxor 12, 12, 25 + vxor 14, 14, 28 + vandc 25, 17, 16 + vandc 26, 18, 17 + vandc 27, 15, 19 + vandc 28, 16, 15 + vxor 15, 15, 25 + vxor 16, 16, 26 + vandc 25, 19, 18 + vxor 18, 18, 27 + vxor 17, 17, 25 + vxor 19, 19, 28 + vandc 25, 22, 21 + vandc 26, 23, 22 + vandc 27, 20, 24 + vandc 28, 21, 20 + vxor 20, 20, 25 + vxor 21, 21, 26 + vandc 25, 24, 23 + vxor 23, 23, 27 + vxor 22, 22, 25 + vxor 24, 24, 28 + subi 5, 5, 0xc8 + # Iota - XOR round constant into lane 0 of both states + lxvdsx 58, 0, 4 + addi 4, 4, 8 + vxor 0, 0, 26 + bdnz L_SHA3_blocksx2_power8_begin + # Store states 0,1 + li 6, 0 + stxvd2x 32, 3, 6 + addi 6, 6, 16 + stxvd2x 33, 3, 6 + addi 6, 6, 16 + stxvd2x 34, 3, 6 + addi 6, 6, 16 + stxvd2x 35, 3, 6 + addi 6, 6, 16 + stxvd2x 36, 3, 6 + addi 6, 6, 16 + stxvd2x 37, 3, 6 + addi 6, 6, 16 + stxvd2x 38, 3, 6 + addi 6, 6, 16 + stxvd2x 39, 3, 6 + addi 6, 6, 16 + stxvd2x 40, 3, 6 + addi 6, 6, 16 + stxvd2x 41, 3, 6 + addi 6, 6, 16 + stxvd2x 42, 3, 6 + addi 6, 6, 16 + stxvd2x 43, 3, 6 + addi 6, 6, 16 + stxvd2x 44, 3, 6 + addi 6, 6, 16 + stxvd2x 45, 3, 6 + addi 6, 6, 16 + stxvd2x 46, 3, 6 + addi 6, 6, 16 + stxvd2x 47, 3, 6 + addi 6, 6, 16 + stxvd2x 48, 3, 6 + addi 6, 6, 16 + stxvd2x 49, 3, 6 + addi 6, 6, 16 + stxvd2x 50, 3, 6 + addi 6, 6, 16 + stxvd2x 51, 3, 6 + addi 6, 6, 16 + stxvd2x 52, 3, 6 + addi 6, 6, 16 + stxvd2x 53, 3, 6 + addi 6, 6, 16 + stxvd2x 54, 3, 6 + addi 6, 6, 16 + stxvd2x 55, 3, 6 + addi 6, 6, 16 + stxvd2x 56, 3, 6 + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size sha3_blocksx2_power8,.-sha3_blocksx2_power8 +#endif /* __APPLE__ */ + .machine "pop" +#ifndef __APPLE__ + .text + .type L_SHA3_blocksx3_power8_rot, %object + .size L_SHA3_blocksx3_power8_rot, 200 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA3_blocksx3_power8_rot: + .quad 0x0000000000000001,0x0000000000000001 + .quad 0x000000000000002c,0x0000000000000014 + .quad 0x000000000000003d,0x0000000000000027 + .quad 0x0000000000000012,0x000000000000003e + .quad 0x000000000000002b,0x0000000000000019 + .quad 0x0000000000000008,0x0000000000000038 + .quad 0x0000000000000029,0x000000000000001b + .quad 0x000000000000000e,0x0000000000000002 + .quad 0x0000000000000037,0x000000000000002d + .quad 0x0000000000000024,0x000000000000001c + .quad 0x0000000000000015,0x000000000000000f + .quad 0x000000000000000a,0x0000000000000006 + .quad 0x0000000000000003 +#ifndef __APPLE__ + .text + .type L_SHA3_blocksx3_power8_r, %object + .size L_SHA3_blocksx3_power8_r, 192 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA3_blocksx3_power8_r: + .quad 0x0000000000000001,0x0000000000008082 + .quad 0x800000000000808a,0x8000000080008000 + .quad 0x000000000000808b,0x0000000080000001 + .quad 0x8000000080008081,0x8000000000008009 + .quad 0x000000000000008a,0x0000000000000088 + .quad 0x0000000080008009,0x000000008000000a + .quad 0x000000008000808b,0x800000000000008b + .quad 0x8000000000008089,0x8000000000008003 + .quad 0x8000000000008002,0x8000000000000080 + .quad 0x000000000000800a,0x800000008000000a + .quad 0x8000000080008081,0x8000000000008080 + .quad 0x0000000080000001,0x8000000080008008 + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl sha3_blocksx3_power8 +.type sha3_blocksx3_power8,@function +.align 16 +sha3_blocksx3_power8: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry sha3_blocksx3_power8, .-sha3_blocksx3_power8 +#endif +#else +.section __TEXT,__text +.globl _sha3_blocksx3_power8 +.p2align 4 +_sha3_blocksx3_power8: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -152(1) + mflr 0 + std 0, 144(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + std 18, 32(1) + std 19, 40(1) + std 20, 48(1) + std 21, 56(1) + std 22, 64(1) + std 23, 72(1) + std 24, 80(1) + std 25, 88(1) + std 26, 96(1) + std 27, 104(1) + std 28, 112(1) + std 29, 120(1) + std 30, 128(1) + std 31, 136(1) + subi 1, 1, 0x40 + # Load states (0,1 interleaved into vectors; 2 into GPRs) + li 30, 0 + lxvd2x 32, 3, 30 + ld 0, 0(4) + addi 30, 30, 16 + lxvd2x 33, 3, 30 + ld 5, 8(4) + addi 30, 30, 16 + lxvd2x 34, 3, 30 + ld 6, 16(4) + addi 30, 30, 16 + lxvd2x 35, 3, 30 + ld 7, 24(4) + addi 30, 30, 16 + lxvd2x 36, 3, 30 + ld 8, 32(4) + addi 30, 30, 16 + lxvd2x 37, 3, 30 + ld 9, 40(4) + addi 30, 30, 16 + lxvd2x 38, 3, 30 + ld 10, 48(4) + addi 30, 30, 16 + lxvd2x 39, 3, 30 + ld 11, 56(4) + addi 30, 30, 16 + lxvd2x 40, 3, 30 + ld 12, 64(4) + addi 30, 30, 16 + lxvd2x 41, 3, 30 + ld 14, 72(4) + addi 30, 30, 16 + lxvd2x 42, 3, 30 + ld 15, 80(4) + addi 30, 30, 16 + lxvd2x 43, 3, 30 + ld 16, 88(4) + addi 30, 30, 16 + lxvd2x 44, 3, 30 + ld 17, 96(4) + addi 30, 30, 16 + lxvd2x 45, 3, 30 + ld 18, 104(4) + addi 30, 30, 16 + lxvd2x 46, 3, 30 + ld 19, 112(4) + addi 30, 30, 16 + lxvd2x 47, 3, 30 + ld 20, 120(4) + addi 30, 30, 16 + lxvd2x 48, 3, 30 + ld 21, 128(4) + addi 30, 30, 16 + lxvd2x 49, 3, 30 + ld 22, 136(4) + addi 30, 30, 16 + lxvd2x 50, 3, 30 + ld 23, 144(4) + addi 30, 30, 16 + lxvd2x 51, 3, 30 + ld 24, 152(4) + addi 30, 30, 16 + lxvd2x 52, 3, 30 + ld 25, 160(4) + addi 30, 30, 16 + lxvd2x 53, 3, 30 + ld 26, 168(4) + addi 30, 30, 16 + lxvd2x 54, 3, 30 + ld 27, 176(4) + addi 30, 30, 16 + lxvd2x 55, 3, 30 + ld 28, 184(4) + addi 30, 30, 16 + lxvd2x 56, 3, 30 + ld 29, 192(4) + addis 31, 2, L_SHA3_blocksx3_power8_rot@toc@ha + addi 31, 31, L_SHA3_blocksx3_power8_rot@toc@l + addis 30, 2, L_SHA3_blocksx3_power8_r@toc@ha + addi 30, 30, L_SHA3_blocksx3_power8_r@toc@l + std 30, 56(1) + std 3, 40(1) + std 4, 48(1) + li 30, 24 + mtctr 30 + # Start of 24 rounds +L_SHA3_blocksx3_power8_begin: + # Theta - column parities (VSX || scalar) + vxor 25, 0, 5 + xor 30, 0, 9 + vxor 25, 25, 10 + xor 30, 30, 15 + vxor 25, 25, 15 + xor 30, 30, 20 + vxor 25, 25, 20 + xor 30, 30, 25 + std 30, 0(1) + vxor 26, 1, 6 + xor 30, 5, 10 + vxor 26, 26, 11 + xor 30, 30, 16 + vxor 26, 26, 16 + xor 30, 30, 21 + vxor 26, 26, 21 + xor 30, 30, 26 + std 30, 8(1) + vxor 27, 2, 7 + xor 30, 6, 11 + vxor 27, 27, 12 + xor 30, 30, 17 + vxor 27, 27, 17 + xor 30, 30, 22 + vxor 27, 27, 22 + xor 30, 30, 27 + std 30, 16(1) + vxor 28, 3, 8 + xor 30, 7, 12 + vxor 28, 28, 13 + xor 30, 30, 18 + vxor 28, 28, 18 + xor 30, 30, 23 + vxor 28, 28, 23 + xor 30, 30, 28 + std 30, 24(1) + vxor 29, 4, 9 + xor 30, 8, 14 + vxor 29, 29, 14 + xor 30, 30, 19 + vxor 29, 29, 19 + xor 30, 30, 24 + vxor 29, 29, 24 + xor 30, 30, 29 + std 30, 32(1) + # Theta - fold and apply (VSX || scalar) + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 30, 26, 31 + ld 30, 8(1) + vxor 30, 29, 30 + rotldi 30, 30, 1 + ld 3, 32(1) + xor 3, 3, 30 + vxor 0, 0, 30 + xor 0, 0, 3 + vxor 5, 5, 30 + xor 9, 9, 3 + vxor 10, 10, 30 + xor 15, 15, 3 + vxor 15, 15, 30 + xor 20, 20, 3 + vxor 20, 20, 30 + xor 25, 25, 3 + vrld 30, 27, 31 + ld 30, 16(1) + vxor 30, 25, 30 + rotldi 30, 30, 1 + ld 3, 0(1) + xor 3, 3, 30 + vxor 1, 1, 30 + xor 5, 5, 3 + vxor 6, 6, 30 + xor 10, 10, 3 + vxor 11, 11, 30 + xor 16, 16, 3 + vxor 16, 16, 30 + xor 21, 21, 3 + vxor 21, 21, 30 + xor 26, 26, 3 + vrld 30, 28, 31 + ld 30, 24(1) + vxor 30, 26, 30 + rotldi 30, 30, 1 + ld 3, 8(1) + xor 3, 3, 30 + vxor 2, 2, 30 + xor 6, 6, 3 + vxor 7, 7, 30 + xor 11, 11, 3 + vxor 12, 12, 30 + xor 17, 17, 3 + vxor 17, 17, 30 + xor 22, 22, 3 + vxor 22, 22, 30 + xor 27, 27, 3 + vrld 30, 29, 31 + ld 30, 32(1) + vxor 30, 27, 30 + rotldi 30, 30, 1 + ld 3, 16(1) + xor 3, 3, 30 + vxor 3, 3, 30 + xor 7, 7, 3 + vxor 8, 8, 30 + xor 12, 12, 3 + vxor 13, 13, 30 + xor 18, 18, 3 + vxor 18, 18, 30 + xor 23, 23, 3 + vxor 23, 23, 30 + xor 28, 28, 3 + vrld 30, 25, 31 + ld 30, 0(1) + vxor 30, 28, 30 + rotldi 30, 30, 1 + ld 3, 24(1) + xor 3, 3, 30 + vxor 4, 4, 30 + xor 8, 8, 3 + vxor 9, 9, 30 + xor 14, 14, 3 + vxor 14, 14, 30 + xor 19, 19, 3 + vxor 19, 19, 30 + xor 24, 24, 3 + vxor 24, 24, 30 + xor 29, 29, 3 + # Rho + Pi (VSX || scalar) + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 25, 1, 31 + rotldi 4, 5, 1 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 1, 6, 31 + rotldi 5, 10, 44 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 6, 9, 31 + rotldi 10, 14, 20 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 9, 22, 31 + rotldi 14, 27, 61 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 22, 14, 31 + rotldi 27, 19, 39 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 14, 20, 31 + rotldi 19, 25, 18 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 20, 2, 31 + rotldi 25, 6, 62 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 2, 12, 31 + rotldi 6, 17, 43 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 12, 13, 31 + rotldi 17, 18, 25 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 13, 19, 31 + rotldi 18, 24, 8 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 19, 23, 31 + rotldi 24, 28, 56 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 23, 15, 31 + rotldi 28, 20, 41 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 15, 4, 31 + rotldi 20, 8, 27 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 4, 24, 31 + rotldi 8, 29, 14 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 24, 21, 31 + rotldi 29, 26, 2 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 21, 8, 31 + rotldi 26, 12, 55 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 8, 16, 31 + rotldi 12, 21, 45 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 16, 5, 31 + rotldi 21, 9, 36 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 5, 3, 31 + rotldi 9, 7, 28 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 3, 18, 31 + rotldi 7, 23, 21 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 18, 17, 31 + rotldi 23, 22, 15 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 17, 11, 31 + rotldi 22, 16, 10 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 11, 7, 31 + rotldi 16, 11, 6 + lxvdsx 63, 0, 31 + addi 31, 31, 8 + vrld 7, 10, 31 + rotldi 11, 15, 3 + # Chi (VSX || scalar) + vandc 26, 2, 1 + andc 30, 6, 5 + vandc 27, 3, 2 + andc 3, 7, 6 + vandc 10, 4, 3 + andc 15, 8, 7 + vxor 2, 2, 10 + xor 6, 6, 15 + vandc 10, 0, 4 + andc 15, 0, 8 + vxor 3, 3, 10 + xor 7, 7, 15 + vandc 10, 1, 0 + andc 15, 5, 0 + vxor 1, 1, 27 + xor 5, 5, 3 + vxor 4, 4, 10 + xor 8, 8, 15 + vxor 0, 0, 26 + xor 0, 0, 30 + vandc 26, 7, 6 + andc 30, 11, 10 + vandc 27, 8, 7 + andc 3, 12, 11 + vandc 10, 9, 8 + andc 15, 14, 12 + vxor 7, 7, 10 + xor 11, 11, 15 + vandc 10, 5, 9 + andc 15, 9, 14 + vxor 8, 8, 10 + xor 12, 12, 15 + vandc 10, 6, 5 + andc 15, 10, 9 + vxor 6, 6, 27 + xor 10, 10, 3 + vxor 9, 9, 10 + xor 14, 14, 15 + vxor 5, 5, 26 + xor 9, 9, 30 + vandc 26, 12, 11 + andc 30, 17, 16 + vandc 27, 13, 12 + andc 3, 18, 17 + vandc 10, 14, 13 + andc 15, 19, 18 + vxor 12, 12, 10 + xor 17, 17, 15 + vandc 10, 25, 14 + andc 15, 4, 19 + vxor 13, 13, 10 + xor 18, 18, 15 + vandc 10, 11, 25 + andc 15, 16, 4 + vxor 11, 11, 27 + xor 16, 16, 3 + vxor 14, 14, 10 + xor 19, 19, 15 + vxor 10, 25, 26 + xor 15, 4, 30 + vandc 26, 17, 16 + andc 30, 22, 21 + vandc 27, 18, 17 + andc 3, 23, 22 + vandc 25, 19, 18 + andc 4, 24, 23 + vxor 17, 17, 25 + xor 22, 22, 4 + vandc 25, 15, 19 + andc 4, 20, 24 + vxor 18, 18, 25 + xor 23, 23, 4 + vandc 25, 16, 15 + andc 4, 21, 20 + vxor 16, 16, 27 + xor 21, 21, 3 + vxor 19, 19, 25 + xor 24, 24, 4 + vxor 15, 15, 26 + xor 20, 20, 30 + vandc 26, 22, 21 + andc 30, 27, 26 + vandc 27, 23, 22 + andc 3, 28, 27 + vandc 25, 24, 23 + andc 4, 29, 28 + vxor 22, 22, 25 + xor 27, 27, 4 + vandc 25, 20, 24 + andc 4, 25, 29 + vxor 23, 23, 25 + xor 28, 28, 4 + vandc 25, 21, 20 + andc 4, 26, 25 + vxor 21, 21, 27 + xor 26, 26, 3 + vxor 24, 24, 25 + xor 29, 29, 4 + vxor 20, 20, 26 + xor 25, 25, 30 + subi 31, 31, 0xc8 + # Iota - XOR round constant into lane 0 of each state + ld 30, 56(1) + lxvdsx 58, 0, 30 + vxor 0, 0, 26 + ld 3, 0(30) + xor 0, 0, 3 + addi 30, 30, 8 + std 30, 56(1) + bdnz L_SHA3_blocksx3_power8_begin + ld 3, 40(1) + ld 4, 48(1) + # Store states + li 30, 0 + stxvd2x 32, 3, 30 + std 0, 0(4) + addi 30, 30, 16 + stxvd2x 33, 3, 30 + std 5, 8(4) + addi 30, 30, 16 + stxvd2x 34, 3, 30 + std 6, 16(4) + addi 30, 30, 16 + stxvd2x 35, 3, 30 + std 7, 24(4) + addi 30, 30, 16 + stxvd2x 36, 3, 30 + std 8, 32(4) + addi 30, 30, 16 + stxvd2x 37, 3, 30 + std 9, 40(4) + addi 30, 30, 16 + stxvd2x 38, 3, 30 + std 10, 48(4) + addi 30, 30, 16 + stxvd2x 39, 3, 30 + std 11, 56(4) + addi 30, 30, 16 + stxvd2x 40, 3, 30 + std 12, 64(4) + addi 30, 30, 16 + stxvd2x 41, 3, 30 + std 14, 72(4) + addi 30, 30, 16 + stxvd2x 42, 3, 30 + std 15, 80(4) + addi 30, 30, 16 + stxvd2x 43, 3, 30 + std 16, 88(4) + addi 30, 30, 16 + stxvd2x 44, 3, 30 + std 17, 96(4) + addi 30, 30, 16 + stxvd2x 45, 3, 30 + std 18, 104(4) + addi 30, 30, 16 + stxvd2x 46, 3, 30 + std 19, 112(4) + addi 30, 30, 16 + stxvd2x 47, 3, 30 + std 20, 120(4) + addi 30, 30, 16 + stxvd2x 48, 3, 30 + std 21, 128(4) + addi 30, 30, 16 + stxvd2x 49, 3, 30 + std 22, 136(4) + addi 30, 30, 16 + stxvd2x 50, 3, 30 + std 23, 144(4) + addi 30, 30, 16 + stxvd2x 51, 3, 30 + std 24, 152(4) + addi 30, 30, 16 + stxvd2x 52, 3, 30 + std 25, 160(4) + addi 30, 30, 16 + stxvd2x 53, 3, 30 + std 26, 168(4) + addi 30, 30, 16 + stxvd2x 54, 3, 30 + std 27, 176(4) + addi 30, 30, 16 + stxvd2x 55, 3, 30 + std 28, 184(4) + addi 30, 30, 16 + stxvd2x 56, 3, 30 + std 29, 192(4) + addi 1, 1, 0x40 + ld 0, 144(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + ld 18, 32(1) + ld 19, 40(1) + ld 20, 48(1) + ld 21, 56(1) + ld 22, 64(1) + ld 23, 72(1) + ld 24, 80(1) + ld 25, 88(1) + ld 26, 96(1) + ld 27, 104(1) + ld 28, 112(1) + ld 29, 120(1) + ld 30, 128(1) + ld 31, 136(1) + addi 1, 1, 0x98 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size sha3_blocksx3_power8,.-sha3_blocksx3_power8 +#endif /* __APPLE__ */ + .machine "pop" +#endif /* (WOLFSSL_HAVE_MLKEM || HAVE_DILITHIUM) && WOLFSSL_SHA3_PPC64_BLOCKS_N */ +#endif /* WOLFSSL_PPC64_ASM_POWER8 */ +#endif /* WOLFSSL_SHA3 */ +#endif /* WOLFSSL_PPC64_ASM */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC64_ASM_INLINE */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c b/wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c new file mode 100644 index 00000000000..9a9fb4b08a9 --- /dev/null +++ b/wolfcrypt/src/port/ppc64/ppc64-sha3-asm_c.c @@ -0,0 +1,1628 @@ +/* ppc64-sha3-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 + */ + +#include +#include + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha3/sha3.rb ppc64 \ + * ../wolfssl/wolfcrypt/src/port/ppc64/ppc64-sha3-asm.c + */ +#ifdef WOLFSSL_PPC64_ASM +#include +#include +#ifdef WOLFSSL_PPC64_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__ */ +#include + +#ifdef WOLFSSL_SHA3 +static const word64 L_SHA3_transform_base_r[] = { + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL, +}; + +void BlockSha3_base(word64* state); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void BlockSha3_base(word64* state_p) +#else +void BlockSha3_base(word64* state) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register word64* state asm ("3") = (word64*)state_p; + register word64* L_SHA3_transform_base_r_c asm ("4") = + (word64*)&L_SHA3_transform_base_r; +#else + register word64* L_SHA3_transform_base_r_c = + (word64*)&L_SHA3_transform_base_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "subi 1, 1, 0xc8\n\t" + "mr 29, %[L_SHA3_transform_base_r]\n\t" + "std %[state], 40(1)\n\t" + "ld 0, 0(%[state])\n\t" + "ld 4, 8(%[state])\n\t" + "ld 5, 16(%[state])\n\t" + "ld 6, 24(%[state])\n\t" + "ld 7, 32(%[state])\n\t" + "ld 8, 40(%[state])\n\t" + "ld 9, 48(%[state])\n\t" + "ld 10, 56(%[state])\n\t" + "ld 11, 64(%[state])\n\t" + "ld 12, 72(%[state])\n\t" + "ld 14, 80(%[state])\n\t" + "ld 15, 88(%[state])\n\t" + "ld 16, 96(%[state])\n\t" + "ld 17, 104(%[state])\n\t" + "ld 18, 112(%[state])\n\t" + "ld 19, 120(%[state])\n\t" + "ld 20, 128(%[state])\n\t" + "ld 21, 136(%[state])\n\t" + "ld 22, 144(%[state])\n\t" + "ld 23, 152(%[state])\n\t" + "ld 24, 160(%[state])\n\t" + "ld 25, 168(%[state])\n\t" + "ld 26, 176(%[state])\n\t" + "ld 27, 184(%[state])\n\t" + "ld 28, 192(%[state])\n\t" + "li 30, 24\n\t" + "mtctr 30\n\t" + /* Start of 24 rounds */ + "\n" + "L_SHA3_transform_base_begin_%=: \n\t" + /* Column Mix */ + "xor 30, 0, 8\n\t" + "xor 30, 30, 14\n\t" + "xor 30, 30, 19\n\t" + "xor 30, 30, 24\n\t" + "std 30, 0(1)\n\t" + "xor 30, 4, 9\n\t" + "xor 30, 30, 15\n\t" + "xor 30, 30, 20\n\t" + "xor 30, 30, 25\n\t" + "std 30, 8(1)\n\t" + "xor 30, 5, 10\n\t" + "xor 30, 30, 16\n\t" + "xor 30, 30, 21\n\t" + "xor 30, 30, 26\n\t" + "std 30, 16(1)\n\t" + "xor 30, 6, 11\n\t" + "xor 30, 30, 17\n\t" + "xor 30, 30, 22\n\t" + "xor 30, 30, 27\n\t" + "std 30, 24(1)\n\t" + "xor 30, 7, 12\n\t" + "xor 30, 30, 18\n\t" + "xor 30, 30, 23\n\t" + "xor 30, 30, 28\n\t" + "std 30, 32(1)\n\t" + "ld 30, 8(1)\n\t" + "rotldi 30, 30, 1\n\t" + "ld 31, 32(1)\n\t" + "xor 31, 31, 30\n\t" + "xor 0, 0, 31\n\t" + "xor 8, 8, 31\n\t" + "xor 14, 14, 31\n\t" + "xor 19, 19, 31\n\t" + "xor 24, 24, 31\n\t" + "ld 30, 16(1)\n\t" + "rotldi 30, 30, 1\n\t" + "ld 31, 0(1)\n\t" + "xor 31, 31, 30\n\t" + "xor 4, 4, 31\n\t" + "xor 9, 9, 31\n\t" + "xor 15, 15, 31\n\t" + "xor 20, 20, 31\n\t" + "xor 25, 25, 31\n\t" + "ld 30, 24(1)\n\t" + "rotldi 30, 30, 1\n\t" + "ld 31, 8(1)\n\t" + "xor 31, 31, 30\n\t" + "xor 5, 5, 31\n\t" + "xor 10, 10, 31\n\t" + "xor 16, 16, 31\n\t" + "xor 21, 21, 31\n\t" + "xor 26, 26, 31\n\t" + "ld 30, 32(1)\n\t" + "rotldi 30, 30, 1\n\t" + "ld 31, 16(1)\n\t" + "xor 31, 31, 30\n\t" + "xor 6, 6, 31\n\t" + "xor 11, 11, 31\n\t" + "xor 17, 17, 31\n\t" + "xor 22, 22, 31\n\t" + "xor 27, 27, 31\n\t" + "ld 30, 0(1)\n\t" + "rotldi 30, 30, 1\n\t" + "ld 31, 24(1)\n\t" + "xor 31, 31, 30\n\t" + "xor 7, 7, 31\n\t" + "xor 12, 12, 31\n\t" + "xor 18, 18, 31\n\t" + "xor 23, 23, 31\n\t" + "xor 28, 28, 31\n\t" + "std 29, 48(1)\n\t" + /* Swap Rotate */ + "rotldi %[state], 4, 1\n\t" + "rotldi 4, 9, 44\n\t" + "rotldi 9, 12, 20\n\t" + "rotldi 12, 26, 61\n\t" + "rotldi 26, 18, 39\n\t" + "rotldi 18, 24, 18\n\t" + "rotldi 24, 5, 62\n\t" + "rotldi 5, 16, 43\n\t" + "rotldi 16, 17, 25\n\t" + "rotldi 17, 23, 8\n\t" + "rotldi 23, 27, 56\n\t" + "rotldi 27, 19, 41\n\t" + "rotldi 19, 7, 27\n\t" + "rotldi 7, 28, 14\n\t" + "rotldi 28, 25, 2\n\t" + "rotldi 25, 11, 55\n\t" + "rotldi 11, 20, 45\n\t" + "rotldi 20, 8, 36\n\t" + "rotldi 8, 6, 28\n\t" + "rotldi 6, 22, 21\n\t" + "rotldi 22, 21, 15\n\t" + "rotldi 21, 15, 10\n\t" + "rotldi 15, 10, 6\n\t" + "rotldi 10, 14, 3\n\t" + /* Row Mix */ + "andc 14, 5, 4\n\t" + "andc 29, 6, 5\n\t" + "andc 30, 0, 7\n\t" + "andc 31, 4, 0\n\t" + "xor 0, 0, 14\n\t" + "xor 4, 4, 29\n\t" + "andc 14, 7, 6\n\t" + "xor 6, 6, 30\n\t" + "xor 5, 5, 14\n\t" + "xor 7, 7, 31\n\t" + "andc 14, 10, 9\n\t" + "andc 29, 11, 10\n\t" + "andc 30, 8, 12\n\t" + "andc 31, 9, 8\n\t" + "xor 8, 8, 14\n\t" + "xor 9, 9, 29\n\t" + "andc 14, 12, 11\n\t" + "xor 11, 11, 30\n\t" + "xor 10, 10, 14\n\t" + "xor 12, 12, 31\n\t" + "andc 14, 16, 15\n\t" + "andc 29, 17, 16\n\t" + "andc 30, %[state], 18\n\t" + "andc 31, 15, %[state]\n\t" + "xor 14, %[state], 14\n\t" + "xor 15, 15, 29\n\t" + "andc %[state], 18, 17\n\t" + "xor 17, 17, 30\n\t" + "xor 16, 16, %[state]\n\t" + "xor 18, 18, 31\n\t" + "andc %[state], 21, 20\n\t" + "andc 29, 22, 21\n\t" + "andc 30, 19, 23\n\t" + "andc 31, 20, 19\n\t" + "xor 19, 19, %[state]\n\t" + "xor 20, 20, 29\n\t" + "andc %[state], 23, 22\n\t" + "xor 22, 22, 30\n\t" + "xor 21, 21, %[state]\n\t" + "xor 23, 23, 31\n\t" + "andc %[state], 26, 25\n\t" + "andc 29, 27, 26\n\t" + "andc 30, 24, 28\n\t" + "andc 31, 25, 24\n\t" + "xor 24, 24, %[state]\n\t" + "xor 25, 25, 29\n\t" + "andc %[state], 28, 27\n\t" + "xor 27, 27, 30\n\t" + "xor 26, 26, %[state]\n\t" + "xor 28, 28, 31\n\t" + "ld 29, 48(1)\n\t" + /* Done transforming */ + "ld 30, 0(29)\n\t" + "addi 29, 29, 8\n\t" + "xor 0, 0, 30\n\t" + "bdnz L_SHA3_transform_base_begin_%=\n\t" + "ld %[state], 40(1)\n\t" + "std 0, 0(%[state])\n\t" + "std 4, 8(%[state])\n\t" + "std 5, 16(%[state])\n\t" + "std 6, 24(%[state])\n\t" + "std 7, 32(%[state])\n\t" + "std 8, 40(%[state])\n\t" + "std 9, 48(%[state])\n\t" + "std 10, 56(%[state])\n\t" + "std 11, 64(%[state])\n\t" + "std 12, 72(%[state])\n\t" + "std 14, 80(%[state])\n\t" + "std 15, 88(%[state])\n\t" + "std 16, 96(%[state])\n\t" + "std 17, 104(%[state])\n\t" + "std 18, 112(%[state])\n\t" + "std 19, 120(%[state])\n\t" + "std 20, 128(%[state])\n\t" + "std 21, 136(%[state])\n\t" + "std 22, 144(%[state])\n\t" + "std 23, 152(%[state])\n\t" + "std 24, 160(%[state])\n\t" + "std 25, 168(%[state])\n\t" + "std 26, 176(%[state])\n\t" + "std 27, 184(%[state])\n\t" + "std 28, 192(%[state])\n\t" + "addi 1, 1, 0xc8\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [state] "+r" (state), + [L_SHA3_transform_base_r] "+r" (L_SHA3_transform_base_r_c) + : + : "memory", "cc", "0", "5", "6", "7", "8", "9", "10", "11", "12", "14", + "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", + "26", "27", "28", "29", "30", "31" +#else + : + : [state] "r" (state), + [L_SHA3_transform_base_r] "r" (L_SHA3_transform_base_r_c) + : "memory", "cc", "0", "4", "5", "6", "7", "8", "9", "10", "11", "12", + "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", + "25", "26", "27", "28", "29", "30", "31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#ifdef WOLFSSL_PPC64_ASM_POWER8 +static const word64 L_SHA3_transform_power8_r[] = { + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL, +}; + +__attribute__((target("cpu=power8"))) +void BlockSha3_power8(word64* state); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void BlockSha3_power8(word64* state_p) +#else +void BlockSha3_power8(word64* state) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register word64* state asm ("3") = (word64*)state_p; + register word64* L_SHA3_transform_power8_r_c asm ("4") = + (word64*)&L_SHA3_transform_power8_r; +#else + register word64* L_SHA3_transform_power8_r_c = + (word64*)&L_SHA3_transform_power8_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 4, %[L_SHA3_transform_power8_r]\n\t" + /* Load state */ + "li 5, 0\n\t" + "lxsdx 32, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 33, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 34, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 35, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 36, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 37, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 38, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 39, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 40, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 41, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 42, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 43, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 44, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 45, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 46, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 47, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 48, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 49, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 50, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 51, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 52, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 53, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 54, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 55, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "lxsdx 56, %[state], 5\n\t" + "li 5, 24\n\t" + "mtctr 5\n\t" + /* Start of 24 rounds */ + "\n" + "L_SHA3_transform_power8_begin_%=: \n\t" + /* Column Mix */ + "vxor 25, 0, 5\n\t" + "vxor 25, 25, 10\n\t" + "vxor 25, 25, 15\n\t" + "vxor 25, 25, 20\n\t" + "vxor 26, 1, 6\n\t" + "vxor 26, 26, 11\n\t" + "vxor 26, 26, 16\n\t" + "vxor 26, 26, 21\n\t" + "vxor 27, 2, 7\n\t" + "vxor 27, 27, 12\n\t" + "vxor 27, 27, 17\n\t" + "vxor 27, 27, 22\n\t" + "vxor 28, 3, 8\n\t" + "vxor 28, 28, 13\n\t" + "vxor 28, 28, 18\n\t" + "vxor 28, 28, 23\n\t" + "vxor 29, 4, 9\n\t" + "vxor 29, 29, 14\n\t" + "vxor 29, 29, 19\n\t" + "vxor 29, 29, 24\n\t" + "li 6, 1\n\t" + "mtvsrd 63, 6\n\t" + "vrld 30, 26, 31\n\t" + "vxor 30, 29, 30\n\t" + "vxor 0, 0, 30\n\t" + "vxor 5, 5, 30\n\t" + "vxor 10, 10, 30\n\t" + "vxor 15, 15, 30\n\t" + "vxor 20, 20, 30\n\t" + "vrld 30, 27, 31\n\t" + "vxor 30, 25, 30\n\t" + "vxor 1, 1, 30\n\t" + "vxor 6, 6, 30\n\t" + "vxor 11, 11, 30\n\t" + "vxor 16, 16, 30\n\t" + "vxor 21, 21, 30\n\t" + "vrld 30, 28, 31\n\t" + "vxor 30, 26, 30\n\t" + "vxor 2, 2, 30\n\t" + "vxor 7, 7, 30\n\t" + "vxor 12, 12, 30\n\t" + "vxor 17, 17, 30\n\t" + "vxor 22, 22, 30\n\t" + "vrld 30, 29, 31\n\t" + "vxor 30, 27, 30\n\t" + "vxor 3, 3, 30\n\t" + "vxor 8, 8, 30\n\t" + "vxor 13, 13, 30\n\t" + "vxor 18, 18, 30\n\t" + "vxor 23, 23, 30\n\t" + "vrld 30, 25, 31\n\t" + "vxor 30, 28, 30\n\t" + "vxor 4, 4, 30\n\t" + "vxor 9, 9, 30\n\t" + "vxor 14, 14, 30\n\t" + "vxor 19, 19, 30\n\t" + "vxor 24, 24, 30\n\t" + /* Swap Rotate */ + "li 6, 1\n\t" + "mtvsrd 63, 6\n\t" + "vrld 25, 1, 31\n\t" + "li 6, 44\n\t" + "mtvsrd 63, 6\n\t" + "vrld 1, 6, 31\n\t" + "li 6, 20\n\t" + "mtvsrd 63, 6\n\t" + "vrld 6, 9, 31\n\t" + "li 6, 61\n\t" + "mtvsrd 63, 6\n\t" + "vrld 9, 22, 31\n\t" + "li 6, 39\n\t" + "mtvsrd 63, 6\n\t" + "vrld 22, 14, 31\n\t" + "li 6, 18\n\t" + "mtvsrd 63, 6\n\t" + "vrld 14, 20, 31\n\t" + "li 6, 62\n\t" + "mtvsrd 63, 6\n\t" + "vrld 20, 2, 31\n\t" + "li 6, 43\n\t" + "mtvsrd 63, 6\n\t" + "vrld 2, 12, 31\n\t" + "li 6, 25\n\t" + "mtvsrd 63, 6\n\t" + "vrld 12, 13, 31\n\t" + "li 6, 8\n\t" + "mtvsrd 63, 6\n\t" + "vrld 13, 19, 31\n\t" + "li 6, 56\n\t" + "mtvsrd 63, 6\n\t" + "vrld 19, 23, 31\n\t" + "li 6, 41\n\t" + "mtvsrd 63, 6\n\t" + "vrld 23, 15, 31\n\t" + "li 6, 27\n\t" + "mtvsrd 63, 6\n\t" + "vrld 15, 4, 31\n\t" + "li 6, 14\n\t" + "mtvsrd 63, 6\n\t" + "vrld 4, 24, 31\n\t" + "li 6, 2\n\t" + "mtvsrd 63, 6\n\t" + "vrld 24, 21, 31\n\t" + "li 6, 55\n\t" + "mtvsrd 63, 6\n\t" + "vrld 21, 8, 31\n\t" + "li 6, 45\n\t" + "mtvsrd 63, 6\n\t" + "vrld 8, 16, 31\n\t" + "li 6, 36\n\t" + "mtvsrd 63, 6\n\t" + "vrld 16, 5, 31\n\t" + "li 6, 28\n\t" + "mtvsrd 63, 6\n\t" + "vrld 5, 3, 31\n\t" + "li 6, 21\n\t" + "mtvsrd 63, 6\n\t" + "vrld 3, 18, 31\n\t" + "li 6, 15\n\t" + "mtvsrd 63, 6\n\t" + "vrld 18, 17, 31\n\t" + "li 6, 10\n\t" + "mtvsrd 63, 6\n\t" + "vrld 17, 11, 31\n\t" + "li 6, 6\n\t" + "mtvsrd 63, 6\n\t" + "vrld 11, 7, 31\n\t" + "li 6, 3\n\t" + "mtvsrd 63, 6\n\t" + "vrld 7, 10, 31\n\t" + /* Row Mix */ + "vandc 10, 2, 1\n\t" + "vandc 26, 3, 2\n\t" + "vandc 27, 0, 4\n\t" + "vandc 28, 1, 0\n\t" + "vxor 0, 0, 10\n\t" + "vxor 1, 1, 26\n\t" + "vandc 10, 4, 3\n\t" + "vxor 3, 3, 27\n\t" + "vxor 2, 2, 10\n\t" + "vxor 4, 4, 28\n\t" + "vandc 10, 7, 6\n\t" + "vandc 26, 8, 7\n\t" + "vandc 27, 5, 9\n\t" + "vandc 28, 6, 5\n\t" + "vxor 5, 5, 10\n\t" + "vxor 6, 6, 26\n\t" + "vandc 10, 9, 8\n\t" + "vxor 8, 8, 27\n\t" + "vxor 7, 7, 10\n\t" + "vxor 9, 9, 28\n\t" + "vandc 10, 12, 11\n\t" + "vandc 26, 13, 12\n\t" + "vandc 27, 25, 14\n\t" + "vandc 28, 11, 25\n\t" + "vxor 10, 25, 10\n\t" + "vxor 11, 11, 26\n\t" + "vandc 25, 14, 13\n\t" + "vxor 13, 13, 27\n\t" + "vxor 12, 12, 25\n\t" + "vxor 14, 14, 28\n\t" + "vandc 25, 17, 16\n\t" + "vandc 26, 18, 17\n\t" + "vandc 27, 15, 19\n\t" + "vandc 28, 16, 15\n\t" + "vxor 15, 15, 25\n\t" + "vxor 16, 16, 26\n\t" + "vandc 25, 19, 18\n\t" + "vxor 18, 18, 27\n\t" + "vxor 17, 17, 25\n\t" + "vxor 19, 19, 28\n\t" + "vandc 25, 22, 21\n\t" + "vandc 26, 23, 22\n\t" + "vandc 27, 20, 24\n\t" + "vandc 28, 21, 20\n\t" + "vxor 20, 20, 25\n\t" + "vxor 21, 21, 26\n\t" + "vandc 25, 24, 23\n\t" + "vxor 23, 23, 27\n\t" + "vxor 22, 22, 25\n\t" + "vxor 24, 24, 28\n\t" + /* Iota - XOR round constant into lane 0 */ + "lxsdx 58, 0, 4\n\t" + "addi 4, 4, 8\n\t" + "vxor 0, 0, 26\n\t" + "bdnz L_SHA3_transform_power8_begin_%=\n\t" + /* Store state */ + "li 5, 0\n\t" + "stxsdx 32, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 33, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 34, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 35, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 36, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 37, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 38, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 39, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 40, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 41, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 42, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 43, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 44, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 45, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 46, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 47, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 48, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 49, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 50, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 51, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 52, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 53, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 54, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 55, %[state], 5\n\t" + "addi 5, 5, 8\n\t" + "stxsdx 56, %[state], 5\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [state] "+r" (state), + [L_SHA3_transform_power8_r] "+r" (L_SHA3_transform_power8_r_c) + : + : "memory", "cc", "0", "5", "6", "v0", "v1", "v2", "v3", "v4", "v5", + "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", + "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [state] "r" (state), + [L_SHA3_transform_power8_r] "r" (L_SHA3_transform_power8_r_c) + : "memory", "cc", "0", "4", "5", "6", "v0", "v1", "v2", "v3", "v4", + "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", + "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#if (defined(WOLFSSL_HAVE_MLKEM) || \ + defined(HAVE_DILITHIUM)) && defined(WOLFSSL_SHA3_PPC64_BLOCKS_N) +static const word64 L_SHA3_blocksx2_power8_rot[] = { + 0x0000000000000001UL, 0x0000000000000001UL, + 0x000000000000002cUL, 0x0000000000000014UL, + 0x000000000000003dUL, 0x0000000000000027UL, + 0x0000000000000012UL, 0x000000000000003eUL, + 0x000000000000002bUL, 0x0000000000000019UL, + 0x0000000000000008UL, 0x0000000000000038UL, + 0x0000000000000029UL, 0x000000000000001bUL, + 0x000000000000000eUL, 0x0000000000000002UL, + 0x0000000000000037UL, 0x000000000000002dUL, + 0x0000000000000024UL, 0x000000000000001cUL, + 0x0000000000000015UL, 0x000000000000000fUL, + 0x000000000000000aUL, 0x0000000000000006UL, + 0x0000000000000003UL +}; + +static const word64 L_SHA3_blocksx2_power8_r[] = { + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL, +}; + +__attribute__((target("cpu=power8"))) +void sha3_blocksx2_power8(word64* s01); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void sha3_blocksx2_power8(word64* s01_p) +#else +void sha3_blocksx2_power8(word64* s01) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register word64* s01 asm ("3") = (word64*)s01_p; + register word64* L_SHA3_blocksx2_power8_rot_c asm ("4") = + (word64*)&L_SHA3_blocksx2_power8_rot; + register word64* L_SHA3_blocksx2_power8_r_c asm ("5") = + (word64*)&L_SHA3_blocksx2_power8_r; +#else + register word64* L_SHA3_blocksx2_power8_rot_c = + (word64*)&L_SHA3_blocksx2_power8_rot; + register word64* L_SHA3_blocksx2_power8_r_c = + (word64*)&L_SHA3_blocksx2_power8_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "mr 4, %[L_SHA3_blocksx2_power8_r]\n\t" + "mr 5, %[L_SHA3_blocksx2_power8_rot]\n\t" + /* Load states 0,1 (interleaved) */ + "li 6, 0\n\t" + "lxvd2x 32, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 33, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 34, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 35, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 36, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 37, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 38, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 39, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 40, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 41, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 42, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 43, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 44, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 45, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 46, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 47, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 48, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 49, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 50, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 51, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 52, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 53, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 54, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 55, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "lxvd2x 56, %[s01], 6\n\t" + "li 6, 24\n\t" + "mtctr 6\n\t" + /* Start of 24 rounds */ + "\n" + "L_SHA3_blocksx2_power8_begin_%=: \n\t" + /* Column Mix */ + "vxor 25, 0, 5\n\t" + "vxor 25, 25, 10\n\t" + "vxor 25, 25, 15\n\t" + "vxor 25, 25, 20\n\t" + "vxor 26, 1, 6\n\t" + "vxor 26, 26, 11\n\t" + "vxor 26, 26, 16\n\t" + "vxor 26, 26, 21\n\t" + "vxor 27, 2, 7\n\t" + "vxor 27, 27, 12\n\t" + "vxor 27, 27, 17\n\t" + "vxor 27, 27, 22\n\t" + "vxor 28, 3, 8\n\t" + "vxor 28, 28, 13\n\t" + "vxor 28, 28, 18\n\t" + "vxor 28, 28, 23\n\t" + "vxor 29, 4, 9\n\t" + "vxor 29, 29, 14\n\t" + "vxor 29, 29, 19\n\t" + "vxor 29, 29, 24\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 30, 26, 31\n\t" + "vxor 30, 29, 30\n\t" + "vxor 0, 0, 30\n\t" + "vxor 5, 5, 30\n\t" + "vxor 10, 10, 30\n\t" + "vxor 15, 15, 30\n\t" + "vxor 20, 20, 30\n\t" + "vrld 30, 27, 31\n\t" + "vxor 30, 25, 30\n\t" + "vxor 1, 1, 30\n\t" + "vxor 6, 6, 30\n\t" + "vxor 11, 11, 30\n\t" + "vxor 16, 16, 30\n\t" + "vxor 21, 21, 30\n\t" + "vrld 30, 28, 31\n\t" + "vxor 30, 26, 30\n\t" + "vxor 2, 2, 30\n\t" + "vxor 7, 7, 30\n\t" + "vxor 12, 12, 30\n\t" + "vxor 17, 17, 30\n\t" + "vxor 22, 22, 30\n\t" + "vrld 30, 29, 31\n\t" + "vxor 30, 27, 30\n\t" + "vxor 3, 3, 30\n\t" + "vxor 8, 8, 30\n\t" + "vxor 13, 13, 30\n\t" + "vxor 18, 18, 30\n\t" + "vxor 23, 23, 30\n\t" + "vrld 30, 25, 31\n\t" + "vxor 30, 28, 30\n\t" + "vxor 4, 4, 30\n\t" + "vxor 9, 9, 30\n\t" + "vxor 14, 14, 30\n\t" + "vxor 19, 19, 30\n\t" + "vxor 24, 24, 30\n\t" + /* Swap Rotate */ + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 25, 1, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 1, 6, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 6, 9, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 9, 22, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 22, 14, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 14, 20, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 20, 2, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 2, 12, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 12, 13, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 13, 19, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 19, 23, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 23, 15, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 15, 4, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 4, 24, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 24, 21, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 21, 8, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 8, 16, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 16, 5, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 5, 3, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 3, 18, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 18, 17, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 17, 11, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 11, 7, 31\n\t" + "lxvdsx 63, 0, 5\n\t" + "addi 5, 5, 8\n\t" + "vrld 7, 10, 31\n\t" + /* Row Mix */ + "vandc 10, 2, 1\n\t" + "vandc 26, 3, 2\n\t" + "vandc 27, 0, 4\n\t" + "vandc 28, 1, 0\n\t" + "vxor 0, 0, 10\n\t" + "vxor 1, 1, 26\n\t" + "vandc 10, 4, 3\n\t" + "vxor 3, 3, 27\n\t" + "vxor 2, 2, 10\n\t" + "vxor 4, 4, 28\n\t" + "vandc 10, 7, 6\n\t" + "vandc 26, 8, 7\n\t" + "vandc 27, 5, 9\n\t" + "vandc 28, 6, 5\n\t" + "vxor 5, 5, 10\n\t" + "vxor 6, 6, 26\n\t" + "vandc 10, 9, 8\n\t" + "vxor 8, 8, 27\n\t" + "vxor 7, 7, 10\n\t" + "vxor 9, 9, 28\n\t" + "vandc 10, 12, 11\n\t" + "vandc 26, 13, 12\n\t" + "vandc 27, 25, 14\n\t" + "vandc 28, 11, 25\n\t" + "vxor 10, 25, 10\n\t" + "vxor 11, 11, 26\n\t" + "vandc 25, 14, 13\n\t" + "vxor 13, 13, 27\n\t" + "vxor 12, 12, 25\n\t" + "vxor 14, 14, 28\n\t" + "vandc 25, 17, 16\n\t" + "vandc 26, 18, 17\n\t" + "vandc 27, 15, 19\n\t" + "vandc 28, 16, 15\n\t" + "vxor 15, 15, 25\n\t" + "vxor 16, 16, 26\n\t" + "vandc 25, 19, 18\n\t" + "vxor 18, 18, 27\n\t" + "vxor 17, 17, 25\n\t" + "vxor 19, 19, 28\n\t" + "vandc 25, 22, 21\n\t" + "vandc 26, 23, 22\n\t" + "vandc 27, 20, 24\n\t" + "vandc 28, 21, 20\n\t" + "vxor 20, 20, 25\n\t" + "vxor 21, 21, 26\n\t" + "vandc 25, 24, 23\n\t" + "vxor 23, 23, 27\n\t" + "vxor 22, 22, 25\n\t" + "vxor 24, 24, 28\n\t" + "subi 5, 5, 0xc8\n\t" + /* Iota - XOR round constant into lane 0 of both states */ + "lxvdsx 58, 0, 4\n\t" + "addi 4, 4, 8\n\t" + "vxor 0, 0, 26\n\t" + "bdnz L_SHA3_blocksx2_power8_begin_%=\n\t" + /* Store states 0,1 */ + "li 6, 0\n\t" + "stxvd2x 32, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 33, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 34, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 35, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 36, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 37, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 38, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 39, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 40, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 41, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 42, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 43, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 44, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 45, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 46, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 47, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 48, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 49, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 50, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 51, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 52, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 53, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 54, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 55, %[s01], 6\n\t" + "addi 6, 6, 16\n\t" + "stxvd2x 56, %[s01], 6\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [s01] "+r" (s01), + [L_SHA3_blocksx2_power8_rot] "+r" (L_SHA3_blocksx2_power8_rot_c), + [L_SHA3_blocksx2_power8_r] "+r" (L_SHA3_blocksx2_power8_r_c) + : + : "memory", "cc", "0", "6", "v0", "v1", "v2", "v3", "v4", "v5", "v6", + "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", + "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", + "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [s01] "r" (s01), + [L_SHA3_blocksx2_power8_rot] "r" (L_SHA3_blocksx2_power8_rot_c), + [L_SHA3_blocksx2_power8_r] "r" (L_SHA3_blocksx2_power8_r_c) + : "memory", "cc", "0", "4", "5", "6", "v0", "v1", "v2", "v3", "v4", + "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", + "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +static const word64 L_SHA3_blocksx3_power8_rot[] = { + 0x0000000000000001UL, 0x0000000000000001UL, + 0x000000000000002cUL, 0x0000000000000014UL, + 0x000000000000003dUL, 0x0000000000000027UL, + 0x0000000000000012UL, 0x000000000000003eUL, + 0x000000000000002bUL, 0x0000000000000019UL, + 0x0000000000000008UL, 0x0000000000000038UL, + 0x0000000000000029UL, 0x000000000000001bUL, + 0x000000000000000eUL, 0x0000000000000002UL, + 0x0000000000000037UL, 0x000000000000002dUL, + 0x0000000000000024UL, 0x000000000000001cUL, + 0x0000000000000015UL, 0x000000000000000fUL, + 0x000000000000000aUL, 0x0000000000000006UL, + 0x0000000000000003UL +}; + +static const word64 L_SHA3_blocksx3_power8_r[] = { + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL, +}; + +__attribute__((target("cpu=power8"))) +void sha3_blocksx3_power8(word64* s01, word64* s2); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void sha3_blocksx3_power8(word64* s01_p, word64* s2_p) +#else +void sha3_blocksx3_power8(word64* s01, word64* s2) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register word64* s01 asm ("3") = (word64*)s01_p; + register word64* s2 asm ("4") = (word64*)s2_p; + register word64* L_SHA3_blocksx3_power8_rot_c asm ("5") = + (word64*)&L_SHA3_blocksx3_power8_rot; + register word64* L_SHA3_blocksx3_power8_r_c asm ("6") = + (word64*)&L_SHA3_blocksx3_power8_r; +#else + register word64* L_SHA3_blocksx3_power8_rot_c = + (word64*)&L_SHA3_blocksx3_power8_rot; + register word64* L_SHA3_blocksx3_power8_r_c = + (word64*)&L_SHA3_blocksx3_power8_r; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "subi 1, 1, 0xd0\n\t" + /* Load states (0,1 interleaved into vectors; 2 into GPRs) */ + "li 30, 0\n\t" + "lxvd2x 32, %[s01], 30\n\t" + "ld 0, 0(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 33, %[s01], 30\n\t" + "ld 5, 8(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 34, %[s01], 30\n\t" + "ld 6, 16(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 35, %[s01], 30\n\t" + "ld 7, 24(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 36, %[s01], 30\n\t" + "ld 8, 32(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 37, %[s01], 30\n\t" + "ld 9, 40(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 38, %[s01], 30\n\t" + "ld 10, 48(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 39, %[s01], 30\n\t" + "ld 11, 56(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 40, %[s01], 30\n\t" + "ld 12, 64(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 41, %[s01], 30\n\t" + "ld 14, 72(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 42, %[s01], 30\n\t" + "ld 15, 80(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 43, %[s01], 30\n\t" + "ld 16, 88(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 44, %[s01], 30\n\t" + "ld 17, 96(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 45, %[s01], 30\n\t" + "ld 18, 104(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 46, %[s01], 30\n\t" + "ld 19, 112(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 47, %[s01], 30\n\t" + "ld 20, 120(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 48, %[s01], 30\n\t" + "ld 21, 128(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 49, %[s01], 30\n\t" + "ld 22, 136(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 50, %[s01], 30\n\t" + "ld 23, 144(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 51, %[s01], 30\n\t" + "ld 24, 152(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 52, %[s01], 30\n\t" + "ld 25, 160(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 53, %[s01], 30\n\t" + "ld 26, 168(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 54, %[s01], 30\n\t" + "ld 27, 176(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 55, %[s01], 30\n\t" + "ld 28, 184(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "lxvd2x 56, %[s01], 30\n\t" + "ld 29, 192(%[s2])\n\t" + "mr 31, %[L_SHA3_blocksx3_power8_rot]\n\t" + "mr 30, %[L_SHA3_blocksx3_power8_r]\n\t" + "std 30, 56(1)\n\t" + "std %[s01], 40(1)\n\t" + "std %[s2], 48(1)\n\t" + "li 30, 24\n\t" + "mtctr 30\n\t" + /* Start of 24 rounds */ + "\n" + "L_SHA3_blocksx3_power8_begin_%=: \n\t" + /* Theta - column parities (VSX || scalar) */ + "vxor 25, 0, 5\n\t" + "xor 30, 0, 9\n\t" + "vxor 25, 25, 10\n\t" + "xor 30, 30, 15\n\t" + "vxor 25, 25, 15\n\t" + "xor 30, 30, 20\n\t" + "vxor 25, 25, 20\n\t" + "xor 30, 30, 25\n\t" + "std 30, 0(1)\n\t" + "vxor 26, 1, 6\n\t" + "xor 30, 5, 10\n\t" + "vxor 26, 26, 11\n\t" + "xor 30, 30, 16\n\t" + "vxor 26, 26, 16\n\t" + "xor 30, 30, 21\n\t" + "vxor 26, 26, 21\n\t" + "xor 30, 30, 26\n\t" + "std 30, 8(1)\n\t" + "vxor 27, 2, 7\n\t" + "xor 30, 6, 11\n\t" + "vxor 27, 27, 12\n\t" + "xor 30, 30, 17\n\t" + "vxor 27, 27, 17\n\t" + "xor 30, 30, 22\n\t" + "vxor 27, 27, 22\n\t" + "xor 30, 30, 27\n\t" + "std 30, 16(1)\n\t" + "vxor 28, 3, 8\n\t" + "xor 30, 7, 12\n\t" + "vxor 28, 28, 13\n\t" + "xor 30, 30, 18\n\t" + "vxor 28, 28, 18\n\t" + "xor 30, 30, 23\n\t" + "vxor 28, 28, 23\n\t" + "xor 30, 30, 28\n\t" + "std 30, 24(1)\n\t" + "vxor 29, 4, 9\n\t" + "xor 30, 8, 14\n\t" + "vxor 29, 29, 14\n\t" + "xor 30, 30, 19\n\t" + "vxor 29, 29, 19\n\t" + "xor 30, 30, 24\n\t" + "vxor 29, 29, 24\n\t" + "xor 30, 30, 29\n\t" + "std 30, 32(1)\n\t" + /* Theta - fold and apply (VSX || scalar) */ + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 30, 26, 31\n\t" + "ld 30, 8(1)\n\t" + "vxor 30, 29, 30\n\t" + "rotldi 30, 30, 1\n\t" + "ld %[s01], 32(1)\n\t" + "xor %[s01], %[s01], 30\n\t" + "vxor 0, 0, 30\n\t" + "xor 0, 0, %[s01]\n\t" + "vxor 5, 5, 30\n\t" + "xor 9, 9, %[s01]\n\t" + "vxor 10, 10, 30\n\t" + "xor 15, 15, %[s01]\n\t" + "vxor 15, 15, 30\n\t" + "xor 20, 20, %[s01]\n\t" + "vxor 20, 20, 30\n\t" + "xor 25, 25, %[s01]\n\t" + "vrld 30, 27, 31\n\t" + "ld 30, 16(1)\n\t" + "vxor 30, 25, 30\n\t" + "rotldi 30, 30, 1\n\t" + "ld %[s01], 0(1)\n\t" + "xor %[s01], %[s01], 30\n\t" + "vxor 1, 1, 30\n\t" + "xor 5, 5, %[s01]\n\t" + "vxor 6, 6, 30\n\t" + "xor 10, 10, %[s01]\n\t" + "vxor 11, 11, 30\n\t" + "xor 16, 16, %[s01]\n\t" + "vxor 16, 16, 30\n\t" + "xor 21, 21, %[s01]\n\t" + "vxor 21, 21, 30\n\t" + "xor 26, 26, %[s01]\n\t" + "vrld 30, 28, 31\n\t" + "ld 30, 24(1)\n\t" + "vxor 30, 26, 30\n\t" + "rotldi 30, 30, 1\n\t" + "ld %[s01], 8(1)\n\t" + "xor %[s01], %[s01], 30\n\t" + "vxor 2, 2, 30\n\t" + "xor 6, 6, %[s01]\n\t" + "vxor 7, 7, 30\n\t" + "xor 11, 11, %[s01]\n\t" + "vxor 12, 12, 30\n\t" + "xor 17, 17, %[s01]\n\t" + "vxor 17, 17, 30\n\t" + "xor 22, 22, %[s01]\n\t" + "vxor 22, 22, 30\n\t" + "xor 27, 27, %[s01]\n\t" + "vrld 30, 29, 31\n\t" + "ld 30, 32(1)\n\t" + "vxor 30, 27, 30\n\t" + "rotldi 30, 30, 1\n\t" + "ld %[s01], 16(1)\n\t" + "xor %[s01], %[s01], 30\n\t" + "vxor 3, 3, 30\n\t" + "xor 7, 7, %[s01]\n\t" + "vxor 8, 8, 30\n\t" + "xor 12, 12, %[s01]\n\t" + "vxor 13, 13, 30\n\t" + "xor 18, 18, %[s01]\n\t" + "vxor 18, 18, 30\n\t" + "xor 23, 23, %[s01]\n\t" + "vxor 23, 23, 30\n\t" + "xor 28, 28, %[s01]\n\t" + "vrld 30, 25, 31\n\t" + "ld 30, 0(1)\n\t" + "vxor 30, 28, 30\n\t" + "rotldi 30, 30, 1\n\t" + "ld %[s01], 24(1)\n\t" + "xor %[s01], %[s01], 30\n\t" + "vxor 4, 4, 30\n\t" + "xor 8, 8, %[s01]\n\t" + "vxor 9, 9, 30\n\t" + "xor 14, 14, %[s01]\n\t" + "vxor 14, 14, 30\n\t" + "xor 19, 19, %[s01]\n\t" + "vxor 19, 19, 30\n\t" + "xor 24, 24, %[s01]\n\t" + "vxor 24, 24, 30\n\t" + "xor 29, 29, %[s01]\n\t" + /* Rho + Pi (VSX || scalar) */ + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 25, 1, 31\n\t" + "rotldi %[s2], 5, 1\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 1, 6, 31\n\t" + "rotldi 5, 10, 44\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 6, 9, 31\n\t" + "rotldi 10, 14, 20\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 9, 22, 31\n\t" + "rotldi 14, 27, 61\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 22, 14, 31\n\t" + "rotldi 27, 19, 39\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 14, 20, 31\n\t" + "rotldi 19, 25, 18\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 20, 2, 31\n\t" + "rotldi 25, 6, 62\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 2, 12, 31\n\t" + "rotldi 6, 17, 43\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 12, 13, 31\n\t" + "rotldi 17, 18, 25\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 13, 19, 31\n\t" + "rotldi 18, 24, 8\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 19, 23, 31\n\t" + "rotldi 24, 28, 56\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 23, 15, 31\n\t" + "rotldi 28, 20, 41\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 15, 4, 31\n\t" + "rotldi 20, 8, 27\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 4, 24, 31\n\t" + "rotldi 8, 29, 14\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 24, 21, 31\n\t" + "rotldi 29, 26, 2\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 21, 8, 31\n\t" + "rotldi 26, 12, 55\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 8, 16, 31\n\t" + "rotldi 12, 21, 45\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 16, 5, 31\n\t" + "rotldi 21, 9, 36\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 5, 3, 31\n\t" + "rotldi 9, 7, 28\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 3, 18, 31\n\t" + "rotldi 7, 23, 21\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 18, 17, 31\n\t" + "rotldi 23, 22, 15\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 17, 11, 31\n\t" + "rotldi 22, 16, 10\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 11, 7, 31\n\t" + "rotldi 16, 11, 6\n\t" + "lxvdsx 63, 0, 31\n\t" + "addi 31, 31, 8\n\t" + "vrld 7, 10, 31\n\t" + "rotldi 11, 15, 3\n\t" + /* Chi (VSX || scalar) */ + "vandc 26, 2, 1\n\t" + "andc 30, 6, 5\n\t" + "vandc 27, 3, 2\n\t" + "andc %[s01], 7, 6\n\t" + "vandc 10, 4, 3\n\t" + "andc 15, 8, 7\n\t" + "vxor 2, 2, 10\n\t" + "xor 6, 6, 15\n\t" + "vandc 10, 0, 4\n\t" + "andc 15, 0, 8\n\t" + "vxor 3, 3, 10\n\t" + "xor 7, 7, 15\n\t" + "vandc 10, 1, 0\n\t" + "andc 15, 5, 0\n\t" + "vxor 1, 1, 27\n\t" + "xor 5, 5, %[s01]\n\t" + "vxor 4, 4, 10\n\t" + "xor 8, 8, 15\n\t" + "vxor 0, 0, 26\n\t" + "xor 0, 0, 30\n\t" + "vandc 26, 7, 6\n\t" + "andc 30, 11, 10\n\t" + "vandc 27, 8, 7\n\t" + "andc %[s01], 12, 11\n\t" + "vandc 10, 9, 8\n\t" + "andc 15, 14, 12\n\t" + "vxor 7, 7, 10\n\t" + "xor 11, 11, 15\n\t" + "vandc 10, 5, 9\n\t" + "andc 15, 9, 14\n\t" + "vxor 8, 8, 10\n\t" + "xor 12, 12, 15\n\t" + "vandc 10, 6, 5\n\t" + "andc 15, 10, 9\n\t" + "vxor 6, 6, 27\n\t" + "xor 10, 10, %[s01]\n\t" + "vxor 9, 9, 10\n\t" + "xor 14, 14, 15\n\t" + "vxor 5, 5, 26\n\t" + "xor 9, 9, 30\n\t" + "vandc 26, 12, 11\n\t" + "andc 30, 17, 16\n\t" + "vandc 27, 13, 12\n\t" + "andc %[s01], 18, 17\n\t" + "vandc 10, 14, 13\n\t" + "andc 15, 19, 18\n\t" + "vxor 12, 12, 10\n\t" + "xor 17, 17, 15\n\t" + "vandc 10, 25, 14\n\t" + "andc 15, %[s2], 19\n\t" + "vxor 13, 13, 10\n\t" + "xor 18, 18, 15\n\t" + "vandc 10, 11, 25\n\t" + "andc 15, 16, %[s2]\n\t" + "vxor 11, 11, 27\n\t" + "xor 16, 16, %[s01]\n\t" + "vxor 14, 14, 10\n\t" + "xor 19, 19, 15\n\t" + "vxor 10, 25, 26\n\t" + "xor 15, %[s2], 30\n\t" + "vandc 26, 17, 16\n\t" + "andc 30, 22, 21\n\t" + "vandc 27, 18, 17\n\t" + "andc %[s01], 23, 22\n\t" + "vandc 25, 19, 18\n\t" + "andc %[s2], 24, 23\n\t" + "vxor 17, 17, 25\n\t" + "xor 22, 22, %[s2]\n\t" + "vandc 25, 15, 19\n\t" + "andc %[s2], 20, 24\n\t" + "vxor 18, 18, 25\n\t" + "xor 23, 23, %[s2]\n\t" + "vandc 25, 16, 15\n\t" + "andc %[s2], 21, 20\n\t" + "vxor 16, 16, 27\n\t" + "xor 21, 21, %[s01]\n\t" + "vxor 19, 19, 25\n\t" + "xor 24, 24, %[s2]\n\t" + "vxor 15, 15, 26\n\t" + "xor 20, 20, 30\n\t" + "vandc 26, 22, 21\n\t" + "andc 30, 27, 26\n\t" + "vandc 27, 23, 22\n\t" + "andc %[s01], 28, 27\n\t" + "vandc 25, 24, 23\n\t" + "andc %[s2], 29, 28\n\t" + "vxor 22, 22, 25\n\t" + "xor 27, 27, %[s2]\n\t" + "vandc 25, 20, 24\n\t" + "andc %[s2], 25, 29\n\t" + "vxor 23, 23, 25\n\t" + "xor 28, 28, %[s2]\n\t" + "vandc 25, 21, 20\n\t" + "andc %[s2], 26, 25\n\t" + "vxor 21, 21, 27\n\t" + "xor 26, 26, %[s01]\n\t" + "vxor 24, 24, 25\n\t" + "xor 29, 29, %[s2]\n\t" + "vxor 20, 20, 26\n\t" + "xor 25, 25, 30\n\t" + "subi 31, 31, 0xc8\n\t" + /* Iota - XOR round constant into lane 0 of each state */ + "ld 30, 56(1)\n\t" + "lxvdsx 58, 0, 30\n\t" + "vxor 0, 0, 26\n\t" + "ld %[s01], 0(30)\n\t" + "xor 0, 0, %[s01]\n\t" + "addi 30, 30, 8\n\t" + "std 30, 56(1)\n\t" + "bdnz L_SHA3_blocksx3_power8_begin_%=\n\t" + "ld %[s01], 40(1)\n\t" + "ld %[s2], 48(1)\n\t" + /* Store states */ + "li 30, 0\n\t" + "stxvd2x 32, %[s01], 30\n\t" + "std 0, 0(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 33, %[s01], 30\n\t" + "std 5, 8(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 34, %[s01], 30\n\t" + "std 6, 16(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 35, %[s01], 30\n\t" + "std 7, 24(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 36, %[s01], 30\n\t" + "std 8, 32(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 37, %[s01], 30\n\t" + "std 9, 40(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 38, %[s01], 30\n\t" + "std 10, 48(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 39, %[s01], 30\n\t" + "std 11, 56(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 40, %[s01], 30\n\t" + "std 12, 64(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 41, %[s01], 30\n\t" + "std 14, 72(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 42, %[s01], 30\n\t" + "std 15, 80(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 43, %[s01], 30\n\t" + "std 16, 88(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 44, %[s01], 30\n\t" + "std 17, 96(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 45, %[s01], 30\n\t" + "std 18, 104(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 46, %[s01], 30\n\t" + "std 19, 112(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 47, %[s01], 30\n\t" + "std 20, 120(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 48, %[s01], 30\n\t" + "std 21, 128(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 49, %[s01], 30\n\t" + "std 22, 136(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 50, %[s01], 30\n\t" + "std 23, 144(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 51, %[s01], 30\n\t" + "std 24, 152(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 52, %[s01], 30\n\t" + "std 25, 160(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 53, %[s01], 30\n\t" + "std 26, 168(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 54, %[s01], 30\n\t" + "std 27, 176(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 55, %[s01], 30\n\t" + "std 28, 184(%[s2])\n\t" + "addi 30, 30, 16\n\t" + "stxvd2x 56, %[s01], 30\n\t" + "std 29, 192(%[s2])\n\t" + "addi 1, 1, 0xd0\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [s01] "+r" (s01), [s2] "+r" (s2), + [L_SHA3_blocksx3_power8_rot] "+r" (L_SHA3_blocksx3_power8_rot_c), + [L_SHA3_blocksx3_power8_r] "+r" (L_SHA3_blocksx3_power8_r_c) + : + : "memory", "cc", "0", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30", "31", "v0", "v1", "v2", "v3", "v4", "v5", + "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", "v24", + "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [s01] "r" (s01), [s2] "r" (s2), + [L_SHA3_blocksx3_power8_rot] "r" (L_SHA3_blocksx3_power8_rot_c), + [L_SHA3_blocksx3_power8_r] "r" (L_SHA3_blocksx3_power8_r_c) + : "memory", "cc", "0", "5", "6", "7", "8", "9", "10", "11", "12", "14", + "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", + "26", "27", "28", "29", "30", "31", "v0", "v1", "v2", "v3", "v4", + "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", + "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* (WOLFSSL_HAVE_MLKEM || + * HAVE_DILITHIUM) && WOLFSSL_SHA3_PPC64_BLOCKS_N */ +#endif /* WOLFSSL_PPC64_ASM_POWER8 */ +#endif /* WOLFSSL_SHA3 */ +#endif /* WOLFSSL_PPC64_ASM */ + +#endif /* WOLFSSL_PPC64_ASM_INLINE */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S new file mode 100644 index 00000000000..9d15b45c368 --- /dev/null +++ b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S @@ -0,0 +1,5845 @@ +/* ppc64-sha512-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 + */ + +#include + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha2/sha512.rb ppc64 \ + * ../wolfssl/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.S + */ +#ifdef WOLFSSL_PPC64_ASM +#ifndef WOLFSSL_PPC64_ASM_INLINE +#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384) +#ifndef __APPLE__ + .text + .type L_SHA512_transform_len_k, %object + .size L_SHA512_transform_len_k, 640 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA512_transform_len_k: + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +#ifndef __APPLE__ +.text +.globl Transform_Sha512_Len +.type Transform_Sha512_Len,@function +.align 16 +Transform_Sha512_Len: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry Transform_Sha512_Len, .-Transform_Sha512_Len +#endif +#else +.section __TEXT,__text +.globl _Transform_Sha512_Len +.p2align 4 +_Transform_Sha512_Len: +#endif /* __APPLE__ */ + stdu 1, -152(1) + mflr 0 + std 0, 144(1) + std 14, 0(1) + std 15, 8(1) + std 16, 16(1) + std 17, 24(1) + std 18, 32(1) + std 19, 40(1) + std 20, 48(1) + std 21, 56(1) + std 22, 64(1) + std 23, 72(1) + std 24, 80(1) + std 25, 88(1) + std 26, 96(1) + std 27, 104(1) + std 28, 112(1) + std 29, 120(1) + std 30, 128(1) + std 31, 136(1) + srdi 5, 5, 7 + addis 6, 2, L_SHA512_transform_len_k@toc@ha + addi 6, 6, L_SHA512_transform_len_k@toc@l + # Copy digest to add in at end + ld 7, 0(3) + ld 8, 8(3) + ld 9, 16(3) + ld 10, 24(3) + ld 11, 32(3) + ld 12, 40(3) + ld 14, 48(3) + ld 15, 56(3) +#ifndef WOLFSSL_PPC64_ASM_SMALL + mtctr 5 + # Start of loop processing a block +L_SHA512_transform_len_begin: + # Load W - 128 bytes + ld 16, 0(4) + ld 17, 8(4) + ld 18, 16(4) + ld 19, 24(4) + ld 20, 32(4) + ld 21, 40(4) + ld 22, 48(4) + ld 23, 56(4) + ld 24, 64(4) + ld 25, 72(4) + ld 26, 80(4) + ld 27, 88(4) + ld 28, 96(4) + ld 29, 104(4) + ld 30, 112(4) + ld 31, 120(4) + # Start of 80 rounds + # Round 0 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotrdi 0, 17, 1 + rotrdi 5, 17, 8 + xor 0, 0, 5 + srdi 5, 17, 7 + xor 0, 0, 5 + add 16, 16, 0 + rotrdi 0, 30, 19 + rotrdi 5, 30, 61 + xor 0, 0, 5 + srdi 5, 30, 6 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 8(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotrdi 0, 18, 1 + rotrdi 5, 18, 8 + xor 0, 0, 5 + srdi 5, 18, 7 + xor 0, 0, 5 + add 17, 17, 0 + rotrdi 0, 31, 19 + rotrdi 5, 31, 61 + xor 0, 0, 5 + srdi 5, 31, 6 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 16(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotrdi 0, 19, 1 + rotrdi 5, 19, 8 + xor 0, 0, 5 + srdi 5, 19, 7 + xor 0, 0, 5 + add 18, 18, 0 + rotrdi 0, 16, 19 + rotrdi 5, 16, 61 + xor 0, 0, 5 + srdi 5, 16, 6 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 24(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotrdi 0, 20, 1 + rotrdi 5, 20, 8 + xor 0, 0, 5 + srdi 5, 20, 7 + xor 0, 0, 5 + add 19, 19, 0 + rotrdi 0, 17, 19 + rotrdi 5, 17, 61 + xor 0, 0, 5 + srdi 5, 17, 6 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 32(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotrdi 0, 21, 1 + rotrdi 5, 21, 8 + xor 0, 0, 5 + srdi 5, 21, 7 + xor 0, 0, 5 + add 20, 20, 0 + rotrdi 0, 18, 19 + rotrdi 5, 18, 61 + xor 0, 0, 5 + srdi 5, 18, 6 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 40(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotrdi 0, 22, 1 + rotrdi 5, 22, 8 + xor 0, 0, 5 + srdi 5, 22, 7 + xor 0, 0, 5 + add 21, 21, 0 + rotrdi 0, 19, 19 + rotrdi 5, 19, 61 + xor 0, 0, 5 + srdi 5, 19, 6 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 48(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotrdi 0, 23, 1 + rotrdi 5, 23, 8 + xor 0, 0, 5 + srdi 5, 23, 7 + xor 0, 0, 5 + add 22, 22, 0 + rotrdi 0, 20, 19 + rotrdi 5, 20, 61 + xor 0, 0, 5 + srdi 5, 20, 6 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 56(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotrdi 0, 24, 1 + rotrdi 5, 24, 8 + xor 0, 0, 5 + srdi 5, 24, 7 + xor 0, 0, 5 + add 23, 23, 0 + rotrdi 0, 21, 19 + rotrdi 5, 21, 61 + xor 0, 0, 5 + srdi 5, 21, 6 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 64(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotrdi 0, 25, 1 + rotrdi 5, 25, 8 + xor 0, 0, 5 + srdi 5, 25, 7 + xor 0, 0, 5 + add 24, 24, 0 + rotrdi 0, 22, 19 + rotrdi 5, 22, 61 + xor 0, 0, 5 + srdi 5, 22, 6 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 72(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotrdi 0, 26, 1 + rotrdi 5, 26, 8 + xor 0, 0, 5 + srdi 5, 26, 7 + xor 0, 0, 5 + add 25, 25, 0 + rotrdi 0, 23, 19 + rotrdi 5, 23, 61 + xor 0, 0, 5 + srdi 5, 23, 6 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 80(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotrdi 0, 27, 1 + rotrdi 5, 27, 8 + xor 0, 0, 5 + srdi 5, 27, 7 + xor 0, 0, 5 + add 26, 26, 0 + rotrdi 0, 24, 19 + rotrdi 5, 24, 61 + xor 0, 0, 5 + srdi 5, 24, 6 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 88(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotrdi 0, 28, 1 + rotrdi 5, 28, 8 + xor 0, 0, 5 + srdi 5, 28, 7 + xor 0, 0, 5 + add 27, 27, 0 + rotrdi 0, 25, 19 + rotrdi 5, 25, 61 + xor 0, 0, 5 + srdi 5, 25, 6 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 96(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotrdi 0, 29, 1 + rotrdi 5, 29, 8 + xor 0, 0, 5 + srdi 5, 29, 7 + xor 0, 0, 5 + add 28, 28, 0 + rotrdi 0, 26, 19 + rotrdi 5, 26, 61 + xor 0, 0, 5 + srdi 5, 26, 6 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 104(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotrdi 0, 30, 1 + rotrdi 5, 30, 8 + xor 0, 0, 5 + srdi 5, 30, 7 + xor 0, 0, 5 + add 29, 29, 0 + rotrdi 0, 27, 19 + rotrdi 5, 27, 61 + xor 0, 0, 5 + srdi 5, 27, 6 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 112(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotrdi 0, 31, 1 + rotrdi 5, 31, 8 + xor 0, 0, 5 + srdi 5, 31, 7 + xor 0, 0, 5 + add 30, 30, 0 + rotrdi 0, 28, 19 + rotrdi 5, 28, 61 + xor 0, 0, 5 + srdi 5, 28, 6 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 120(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotrdi 0, 16, 1 + rotrdi 5, 16, 8 + xor 0, 0, 5 + srdi 5, 16, 7 + xor 0, 0, 5 + add 31, 31, 0 + rotrdi 0, 29, 19 + rotrdi 5, 29, 61 + xor 0, 0, 5 + srdi 5, 29, 6 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x80 + # Round 0 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotrdi 0, 17, 1 + rotrdi 5, 17, 8 + xor 0, 0, 5 + srdi 5, 17, 7 + xor 0, 0, 5 + add 16, 16, 0 + rotrdi 0, 30, 19 + rotrdi 5, 30, 61 + xor 0, 0, 5 + srdi 5, 30, 6 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 8(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotrdi 0, 18, 1 + rotrdi 5, 18, 8 + xor 0, 0, 5 + srdi 5, 18, 7 + xor 0, 0, 5 + add 17, 17, 0 + rotrdi 0, 31, 19 + rotrdi 5, 31, 61 + xor 0, 0, 5 + srdi 5, 31, 6 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 16(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotrdi 0, 19, 1 + rotrdi 5, 19, 8 + xor 0, 0, 5 + srdi 5, 19, 7 + xor 0, 0, 5 + add 18, 18, 0 + rotrdi 0, 16, 19 + rotrdi 5, 16, 61 + xor 0, 0, 5 + srdi 5, 16, 6 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 24(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotrdi 0, 20, 1 + rotrdi 5, 20, 8 + xor 0, 0, 5 + srdi 5, 20, 7 + xor 0, 0, 5 + add 19, 19, 0 + rotrdi 0, 17, 19 + rotrdi 5, 17, 61 + xor 0, 0, 5 + srdi 5, 17, 6 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 32(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotrdi 0, 21, 1 + rotrdi 5, 21, 8 + xor 0, 0, 5 + srdi 5, 21, 7 + xor 0, 0, 5 + add 20, 20, 0 + rotrdi 0, 18, 19 + rotrdi 5, 18, 61 + xor 0, 0, 5 + srdi 5, 18, 6 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 40(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotrdi 0, 22, 1 + rotrdi 5, 22, 8 + xor 0, 0, 5 + srdi 5, 22, 7 + xor 0, 0, 5 + add 21, 21, 0 + rotrdi 0, 19, 19 + rotrdi 5, 19, 61 + xor 0, 0, 5 + srdi 5, 19, 6 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 48(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotrdi 0, 23, 1 + rotrdi 5, 23, 8 + xor 0, 0, 5 + srdi 5, 23, 7 + xor 0, 0, 5 + add 22, 22, 0 + rotrdi 0, 20, 19 + rotrdi 5, 20, 61 + xor 0, 0, 5 + srdi 5, 20, 6 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 56(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotrdi 0, 24, 1 + rotrdi 5, 24, 8 + xor 0, 0, 5 + srdi 5, 24, 7 + xor 0, 0, 5 + add 23, 23, 0 + rotrdi 0, 21, 19 + rotrdi 5, 21, 61 + xor 0, 0, 5 + srdi 5, 21, 6 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 64(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotrdi 0, 25, 1 + rotrdi 5, 25, 8 + xor 0, 0, 5 + srdi 5, 25, 7 + xor 0, 0, 5 + add 24, 24, 0 + rotrdi 0, 22, 19 + rotrdi 5, 22, 61 + xor 0, 0, 5 + srdi 5, 22, 6 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 72(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotrdi 0, 26, 1 + rotrdi 5, 26, 8 + xor 0, 0, 5 + srdi 5, 26, 7 + xor 0, 0, 5 + add 25, 25, 0 + rotrdi 0, 23, 19 + rotrdi 5, 23, 61 + xor 0, 0, 5 + srdi 5, 23, 6 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 80(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotrdi 0, 27, 1 + rotrdi 5, 27, 8 + xor 0, 0, 5 + srdi 5, 27, 7 + xor 0, 0, 5 + add 26, 26, 0 + rotrdi 0, 24, 19 + rotrdi 5, 24, 61 + xor 0, 0, 5 + srdi 5, 24, 6 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 88(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotrdi 0, 28, 1 + rotrdi 5, 28, 8 + xor 0, 0, 5 + srdi 5, 28, 7 + xor 0, 0, 5 + add 27, 27, 0 + rotrdi 0, 25, 19 + rotrdi 5, 25, 61 + xor 0, 0, 5 + srdi 5, 25, 6 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 96(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotrdi 0, 29, 1 + rotrdi 5, 29, 8 + xor 0, 0, 5 + srdi 5, 29, 7 + xor 0, 0, 5 + add 28, 28, 0 + rotrdi 0, 26, 19 + rotrdi 5, 26, 61 + xor 0, 0, 5 + srdi 5, 26, 6 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 104(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotrdi 0, 30, 1 + rotrdi 5, 30, 8 + xor 0, 0, 5 + srdi 5, 30, 7 + xor 0, 0, 5 + add 29, 29, 0 + rotrdi 0, 27, 19 + rotrdi 5, 27, 61 + xor 0, 0, 5 + srdi 5, 27, 6 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 112(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotrdi 0, 31, 1 + rotrdi 5, 31, 8 + xor 0, 0, 5 + srdi 5, 31, 7 + xor 0, 0, 5 + add 30, 30, 0 + rotrdi 0, 28, 19 + rotrdi 5, 28, 61 + xor 0, 0, 5 + srdi 5, 28, 6 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 120(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotrdi 0, 16, 1 + rotrdi 5, 16, 8 + xor 0, 0, 5 + srdi 5, 16, 7 + xor 0, 0, 5 + add 31, 31, 0 + rotrdi 0, 29, 19 + rotrdi 5, 29, 61 + xor 0, 0, 5 + srdi 5, 29, 6 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x80 + # Round 0 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotrdi 0, 17, 1 + rotrdi 5, 17, 8 + xor 0, 0, 5 + srdi 5, 17, 7 + xor 0, 0, 5 + add 16, 16, 0 + rotrdi 0, 30, 19 + rotrdi 5, 30, 61 + xor 0, 0, 5 + srdi 5, 30, 6 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 8(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotrdi 0, 18, 1 + rotrdi 5, 18, 8 + xor 0, 0, 5 + srdi 5, 18, 7 + xor 0, 0, 5 + add 17, 17, 0 + rotrdi 0, 31, 19 + rotrdi 5, 31, 61 + xor 0, 0, 5 + srdi 5, 31, 6 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 16(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotrdi 0, 19, 1 + rotrdi 5, 19, 8 + xor 0, 0, 5 + srdi 5, 19, 7 + xor 0, 0, 5 + add 18, 18, 0 + rotrdi 0, 16, 19 + rotrdi 5, 16, 61 + xor 0, 0, 5 + srdi 5, 16, 6 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 24(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotrdi 0, 20, 1 + rotrdi 5, 20, 8 + xor 0, 0, 5 + srdi 5, 20, 7 + xor 0, 0, 5 + add 19, 19, 0 + rotrdi 0, 17, 19 + rotrdi 5, 17, 61 + xor 0, 0, 5 + srdi 5, 17, 6 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 32(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotrdi 0, 21, 1 + rotrdi 5, 21, 8 + xor 0, 0, 5 + srdi 5, 21, 7 + xor 0, 0, 5 + add 20, 20, 0 + rotrdi 0, 18, 19 + rotrdi 5, 18, 61 + xor 0, 0, 5 + srdi 5, 18, 6 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 40(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotrdi 0, 22, 1 + rotrdi 5, 22, 8 + xor 0, 0, 5 + srdi 5, 22, 7 + xor 0, 0, 5 + add 21, 21, 0 + rotrdi 0, 19, 19 + rotrdi 5, 19, 61 + xor 0, 0, 5 + srdi 5, 19, 6 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 48(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotrdi 0, 23, 1 + rotrdi 5, 23, 8 + xor 0, 0, 5 + srdi 5, 23, 7 + xor 0, 0, 5 + add 22, 22, 0 + rotrdi 0, 20, 19 + rotrdi 5, 20, 61 + xor 0, 0, 5 + srdi 5, 20, 6 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 56(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotrdi 0, 24, 1 + rotrdi 5, 24, 8 + xor 0, 0, 5 + srdi 5, 24, 7 + xor 0, 0, 5 + add 23, 23, 0 + rotrdi 0, 21, 19 + rotrdi 5, 21, 61 + xor 0, 0, 5 + srdi 5, 21, 6 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 64(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotrdi 0, 25, 1 + rotrdi 5, 25, 8 + xor 0, 0, 5 + srdi 5, 25, 7 + xor 0, 0, 5 + add 24, 24, 0 + rotrdi 0, 22, 19 + rotrdi 5, 22, 61 + xor 0, 0, 5 + srdi 5, 22, 6 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 72(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotrdi 0, 26, 1 + rotrdi 5, 26, 8 + xor 0, 0, 5 + srdi 5, 26, 7 + xor 0, 0, 5 + add 25, 25, 0 + rotrdi 0, 23, 19 + rotrdi 5, 23, 61 + xor 0, 0, 5 + srdi 5, 23, 6 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 80(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotrdi 0, 27, 1 + rotrdi 5, 27, 8 + xor 0, 0, 5 + srdi 5, 27, 7 + xor 0, 0, 5 + add 26, 26, 0 + rotrdi 0, 24, 19 + rotrdi 5, 24, 61 + xor 0, 0, 5 + srdi 5, 24, 6 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 88(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotrdi 0, 28, 1 + rotrdi 5, 28, 8 + xor 0, 0, 5 + srdi 5, 28, 7 + xor 0, 0, 5 + add 27, 27, 0 + rotrdi 0, 25, 19 + rotrdi 5, 25, 61 + xor 0, 0, 5 + srdi 5, 25, 6 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 96(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotrdi 0, 29, 1 + rotrdi 5, 29, 8 + xor 0, 0, 5 + srdi 5, 29, 7 + xor 0, 0, 5 + add 28, 28, 0 + rotrdi 0, 26, 19 + rotrdi 5, 26, 61 + xor 0, 0, 5 + srdi 5, 26, 6 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 104(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotrdi 0, 30, 1 + rotrdi 5, 30, 8 + xor 0, 0, 5 + srdi 5, 30, 7 + xor 0, 0, 5 + add 29, 29, 0 + rotrdi 0, 27, 19 + rotrdi 5, 27, 61 + xor 0, 0, 5 + srdi 5, 27, 6 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 112(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotrdi 0, 31, 1 + rotrdi 5, 31, 8 + xor 0, 0, 5 + srdi 5, 31, 7 + xor 0, 0, 5 + add 30, 30, 0 + rotrdi 0, 28, 19 + rotrdi 5, 28, 61 + xor 0, 0, 5 + srdi 5, 28, 6 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 120(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotrdi 0, 16, 1 + rotrdi 5, 16, 8 + xor 0, 0, 5 + srdi 5, 16, 7 + xor 0, 0, 5 + add 31, 31, 0 + rotrdi 0, 29, 19 + rotrdi 5, 29, 61 + xor 0, 0, 5 + srdi 5, 29, 6 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x80 + # Round 0 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[0] + rotrdi 0, 17, 1 + rotrdi 5, 17, 8 + xor 0, 0, 5 + srdi 5, 17, 7 + xor 0, 0, 5 + add 16, 16, 0 + rotrdi 0, 30, 19 + rotrdi 5, 30, 61 + xor 0, 0, 5 + srdi 5, 30, 6 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 + # Round 1 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 8(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[1] + rotrdi 0, 18, 1 + rotrdi 5, 18, 8 + xor 0, 0, 5 + srdi 5, 18, 7 + xor 0, 0, 5 + add 17, 17, 0 + rotrdi 0, 31, 19 + rotrdi 5, 31, 61 + xor 0, 0, 5 + srdi 5, 31, 6 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 + # Round 2 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 16(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[2] + rotrdi 0, 19, 1 + rotrdi 5, 19, 8 + xor 0, 0, 5 + srdi 5, 19, 7 + xor 0, 0, 5 + add 18, 18, 0 + rotrdi 0, 16, 19 + rotrdi 5, 16, 61 + xor 0, 0, 5 + srdi 5, 16, 6 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 + # Round 3 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 24(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[3] + rotrdi 0, 20, 1 + rotrdi 5, 20, 8 + xor 0, 0, 5 + srdi 5, 20, 7 + xor 0, 0, 5 + add 19, 19, 0 + rotrdi 0, 17, 19 + rotrdi 5, 17, 61 + xor 0, 0, 5 + srdi 5, 17, 6 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 + # Round 4 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 32(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[4] + rotrdi 0, 21, 1 + rotrdi 5, 21, 8 + xor 0, 0, 5 + srdi 5, 21, 7 + xor 0, 0, 5 + add 20, 20, 0 + rotrdi 0, 18, 19 + rotrdi 5, 18, 61 + xor 0, 0, 5 + srdi 5, 18, 6 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 + # Round 5 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 40(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[5] + rotrdi 0, 22, 1 + rotrdi 5, 22, 8 + xor 0, 0, 5 + srdi 5, 22, 7 + xor 0, 0, 5 + add 21, 21, 0 + rotrdi 0, 19, 19 + rotrdi 5, 19, 61 + xor 0, 0, 5 + srdi 5, 19, 6 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 + # Round 6 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 48(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[6] + rotrdi 0, 23, 1 + rotrdi 5, 23, 8 + xor 0, 0, 5 + srdi 5, 23, 7 + xor 0, 0, 5 + add 22, 22, 0 + rotrdi 0, 20, 19 + rotrdi 5, 20, 61 + xor 0, 0, 5 + srdi 5, 20, 6 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 + # Round 7 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 56(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[7] + rotrdi 0, 24, 1 + rotrdi 5, 24, 8 + xor 0, 0, 5 + srdi 5, 24, 7 + xor 0, 0, 5 + add 23, 23, 0 + rotrdi 0, 21, 19 + rotrdi 5, 21, 61 + xor 0, 0, 5 + srdi 5, 21, 6 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 + # Round 8 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 64(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Calc new W[8] + rotrdi 0, 25, 1 + rotrdi 5, 25, 8 + xor 0, 0, 5 + srdi 5, 25, 7 + xor 0, 0, 5 + add 24, 24, 0 + rotrdi 0, 22, 19 + rotrdi 5, 22, 61 + xor 0, 0, 5 + srdi 5, 22, 6 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 + # Round 9 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 72(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Calc new W[9] + rotrdi 0, 26, 1 + rotrdi 5, 26, 8 + xor 0, 0, 5 + srdi 5, 26, 7 + xor 0, 0, 5 + add 25, 25, 0 + rotrdi 0, 23, 19 + rotrdi 5, 23, 61 + xor 0, 0, 5 + srdi 5, 23, 6 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 + # Round 10 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 80(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Calc new W[10] + rotrdi 0, 27, 1 + rotrdi 5, 27, 8 + xor 0, 0, 5 + srdi 5, 27, 7 + xor 0, 0, 5 + add 26, 26, 0 + rotrdi 0, 24, 19 + rotrdi 5, 24, 61 + xor 0, 0, 5 + srdi 5, 24, 6 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 + # Round 11 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 88(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Calc new W[11] + rotrdi 0, 28, 1 + rotrdi 5, 28, 8 + xor 0, 0, 5 + srdi 5, 28, 7 + xor 0, 0, 5 + add 27, 27, 0 + rotrdi 0, 25, 19 + rotrdi 5, 25, 61 + xor 0, 0, 5 + srdi 5, 25, 6 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 + # Round 12 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 96(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Calc new W[12] + rotrdi 0, 29, 1 + rotrdi 5, 29, 8 + xor 0, 0, 5 + srdi 5, 29, 7 + xor 0, 0, 5 + add 28, 28, 0 + rotrdi 0, 26, 19 + rotrdi 5, 26, 61 + xor 0, 0, 5 + srdi 5, 26, 6 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 + # Round 13 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 104(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Calc new W[13] + rotrdi 0, 30, 1 + rotrdi 5, 30, 8 + xor 0, 0, 5 + srdi 5, 30, 7 + xor 0, 0, 5 + add 29, 29, 0 + rotrdi 0, 27, 19 + rotrdi 5, 27, 61 + xor 0, 0, 5 + srdi 5, 27, 6 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 + # Round 14 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 112(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Calc new W[14] + rotrdi 0, 31, 1 + rotrdi 5, 31, 8 + xor 0, 0, 5 + srdi 5, 31, 7 + xor 0, 0, 5 + add 30, 30, 0 + rotrdi 0, 28, 19 + rotrdi 5, 28, 61 + xor 0, 0, 5 + srdi 5, 28, 6 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 + # Round 15 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 120(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Calc new W[15] + rotrdi 0, 16, 1 + rotrdi 5, 16, 8 + xor 0, 0, 5 + srdi 5, 16, 7 + xor 0, 0, 5 + add 31, 31, 0 + rotrdi 0, 29, 19 + rotrdi 5, 29, 61 + xor 0, 0, 5 + srdi 5, 29, 6 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 + addi 6, 6, 0x80 + # Round 0 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Round 1 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 8(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Round 2 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 16(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Round 3 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 24(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Round 4 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 32(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Round 5 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 40(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Round 6 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 48(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Round 7 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 56(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + # Round 8 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 64(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + # Round 9 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 72(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + # Round 10 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 80(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + # Round 11 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 88(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + # Round 12 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 96(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + # Round 13 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 104(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + # Round 14 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 112(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + # Round 15 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 120(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + subi 6, 6, 0x200 + # Add in digest from start + ld 0, 0(3) + ld 5, 8(3) + add 7, 7, 0 + add 8, 8, 5 + ld 0, 16(3) + ld 5, 24(3) + add 9, 9, 0 + add 10, 10, 5 + ld 0, 32(3) + ld 5, 40(3) + add 11, 11, 0 + add 12, 12, 5 + ld 0, 48(3) + ld 5, 56(3) + add 14, 14, 0 + add 15, 15, 5 + std 7, 0(3) + std 8, 8(3) + std 9, 16(3) + std 10, 24(3) + std 11, 32(3) + std 12, 40(3) + std 14, 48(3) + std 15, 56(3) + addi 4, 4, 0x80 + bdnz L_SHA512_transform_len_begin +#else + subi 1, 1, 16 + stw 5, 0(1) + # Start of loop processing a block +L_SHA512_transform_len_begin: + # Load W - 128 bytes + ld 16, 0(4) + ld 17, 8(4) + ld 18, 16(4) + ld 19, 24(4) + ld 20, 32(4) + ld 21, 40(4) + ld 22, 48(4) + ld 23, 56(4) + ld 24, 64(4) + ld 25, 72(4) + ld 26, 80(4) + ld 27, 88(4) + ld 28, 96(4) + ld 29, 104(4) + ld 30, 112(4) + ld 31, 120(4) + li 0, 5 + mtctr 0 + # Start of 80 rounds +L_SHA512_transform_len_start: + # Round 0 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 0(6) + add 15, 15, 16 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_0 + # Calc new W[0] + rotrdi 0, 17, 1 + rotrdi 5, 17, 8 + xor 0, 0, 5 + srdi 5, 17, 7 + xor 0, 0, 5 + add 16, 16, 0 + rotrdi 0, 30, 19 + rotrdi 5, 30, 61 + xor 0, 0, 5 + srdi 5, 30, 6 + xor 0, 0, 5 + add 16, 16, 0 + add 16, 16, 25 +L_SHA512_transform_len_after_blk_0: + # Round 1 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 8(6) + add 14, 14, 17 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_1 + # Calc new W[1] + rotrdi 0, 18, 1 + rotrdi 5, 18, 8 + xor 0, 0, 5 + srdi 5, 18, 7 + xor 0, 0, 5 + add 17, 17, 0 + rotrdi 0, 31, 19 + rotrdi 5, 31, 61 + xor 0, 0, 5 + srdi 5, 31, 6 + xor 0, 0, 5 + add 17, 17, 0 + add 17, 17, 26 +L_SHA512_transform_len_after_blk_1: + # Round 2 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 16(6) + add 12, 12, 18 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_2 + # Calc new W[2] + rotrdi 0, 19, 1 + rotrdi 5, 19, 8 + xor 0, 0, 5 + srdi 5, 19, 7 + xor 0, 0, 5 + add 18, 18, 0 + rotrdi 0, 16, 19 + rotrdi 5, 16, 61 + xor 0, 0, 5 + srdi 5, 16, 6 + xor 0, 0, 5 + add 18, 18, 0 + add 18, 18, 27 +L_SHA512_transform_len_after_blk_2: + # Round 3 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 24(6) + add 11, 11, 19 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_3 + # Calc new W[3] + rotrdi 0, 20, 1 + rotrdi 5, 20, 8 + xor 0, 0, 5 + srdi 5, 20, 7 + xor 0, 0, 5 + add 19, 19, 0 + rotrdi 0, 17, 19 + rotrdi 5, 17, 61 + xor 0, 0, 5 + srdi 5, 17, 6 + xor 0, 0, 5 + add 19, 19, 0 + add 19, 19, 28 +L_SHA512_transform_len_after_blk_3: + # Round 4 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 32(6) + add 10, 10, 20 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_4 + # Calc new W[4] + rotrdi 0, 21, 1 + rotrdi 5, 21, 8 + xor 0, 0, 5 + srdi 5, 21, 7 + xor 0, 0, 5 + add 20, 20, 0 + rotrdi 0, 18, 19 + rotrdi 5, 18, 61 + xor 0, 0, 5 + srdi 5, 18, 6 + xor 0, 0, 5 + add 20, 20, 0 + add 20, 20, 29 +L_SHA512_transform_len_after_blk_4: + # Round 5 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 40(6) + add 9, 9, 21 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_5 + # Calc new W[5] + rotrdi 0, 22, 1 + rotrdi 5, 22, 8 + xor 0, 0, 5 + srdi 5, 22, 7 + xor 0, 0, 5 + add 21, 21, 0 + rotrdi 0, 19, 19 + rotrdi 5, 19, 61 + xor 0, 0, 5 + srdi 5, 19, 6 + xor 0, 0, 5 + add 21, 21, 0 + add 21, 21, 30 +L_SHA512_transform_len_after_blk_5: + # Round 6 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 48(6) + add 8, 8, 22 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_6 + # Calc new W[6] + rotrdi 0, 23, 1 + rotrdi 5, 23, 8 + xor 0, 0, 5 + srdi 5, 23, 7 + xor 0, 0, 5 + add 22, 22, 0 + rotrdi 0, 20, 19 + rotrdi 5, 20, 61 + xor 0, 0, 5 + srdi 5, 20, 6 + xor 0, 0, 5 + add 22, 22, 0 + add 22, 22, 31 +L_SHA512_transform_len_after_blk_6: + # Round 7 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 56(6) + add 7, 7, 23 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_7 + # Calc new W[7] + rotrdi 0, 24, 1 + rotrdi 5, 24, 8 + xor 0, 0, 5 + srdi 5, 24, 7 + xor 0, 0, 5 + add 23, 23, 0 + rotrdi 0, 21, 19 + rotrdi 5, 21, 61 + xor 0, 0, 5 + srdi 5, 21, 6 + xor 0, 0, 5 + add 23, 23, 0 + add 23, 23, 16 +L_SHA512_transform_len_after_blk_7: + # Round 8 + rotrdi 0, 11, 14 + rotrdi 5, 11, 18 + xor 0, 0, 5 + rotrdi 5, 11, 41 + xor 0, 0, 5 + add 15, 15, 0 + xor 0, 12, 14 + and 0, 0, 11 + xor 0, 0, 14 + add 15, 15, 0 + ld 0, 64(6) + add 15, 15, 24 + add 15, 15, 0 + add 10, 10, 15 + rotrdi 0, 7, 28 + rotrdi 5, 7, 34 + xor 0, 0, 5 + rotrdi 5, 7, 39 + xor 0, 0, 5 + add 15, 15, 0 + xor 5, 7, 8 + xor 0, 8, 9 + and 0, 0, 5 + xor 0, 0, 8 + add 15, 15, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_8 + # Calc new W[8] + rotrdi 0, 25, 1 + rotrdi 5, 25, 8 + xor 0, 0, 5 + srdi 5, 25, 7 + xor 0, 0, 5 + add 24, 24, 0 + rotrdi 0, 22, 19 + rotrdi 5, 22, 61 + xor 0, 0, 5 + srdi 5, 22, 6 + xor 0, 0, 5 + add 24, 24, 0 + add 24, 24, 17 +L_SHA512_transform_len_after_blk_8: + # Round 9 + rotrdi 0, 10, 14 + rotrdi 5, 10, 18 + xor 0, 0, 5 + rotrdi 5, 10, 41 + xor 0, 0, 5 + add 14, 14, 0 + xor 0, 11, 12 + and 0, 0, 10 + xor 0, 0, 12 + add 14, 14, 0 + ld 0, 72(6) + add 14, 14, 25 + add 14, 14, 0 + add 9, 9, 14 + rotrdi 0, 15, 28 + rotrdi 5, 15, 34 + xor 0, 0, 5 + rotrdi 5, 15, 39 + xor 0, 0, 5 + add 14, 14, 0 + xor 5, 15, 7 + xor 0, 7, 8 + and 0, 0, 5 + xor 0, 0, 7 + add 14, 14, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_9 + # Calc new W[9] + rotrdi 0, 26, 1 + rotrdi 5, 26, 8 + xor 0, 0, 5 + srdi 5, 26, 7 + xor 0, 0, 5 + add 25, 25, 0 + rotrdi 0, 23, 19 + rotrdi 5, 23, 61 + xor 0, 0, 5 + srdi 5, 23, 6 + xor 0, 0, 5 + add 25, 25, 0 + add 25, 25, 18 +L_SHA512_transform_len_after_blk_9: + # Round 10 + rotrdi 0, 9, 14 + rotrdi 5, 9, 18 + xor 0, 0, 5 + rotrdi 5, 9, 41 + xor 0, 0, 5 + add 12, 12, 0 + xor 0, 10, 11 + and 0, 0, 9 + xor 0, 0, 11 + add 12, 12, 0 + ld 0, 80(6) + add 12, 12, 26 + add 12, 12, 0 + add 8, 8, 12 + rotrdi 0, 14, 28 + rotrdi 5, 14, 34 + xor 0, 0, 5 + rotrdi 5, 14, 39 + xor 0, 0, 5 + add 12, 12, 0 + xor 5, 14, 15 + xor 0, 15, 7 + and 0, 0, 5 + xor 0, 0, 15 + add 12, 12, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_10 + # Calc new W[10] + rotrdi 0, 27, 1 + rotrdi 5, 27, 8 + xor 0, 0, 5 + srdi 5, 27, 7 + xor 0, 0, 5 + add 26, 26, 0 + rotrdi 0, 24, 19 + rotrdi 5, 24, 61 + xor 0, 0, 5 + srdi 5, 24, 6 + xor 0, 0, 5 + add 26, 26, 0 + add 26, 26, 19 +L_SHA512_transform_len_after_blk_10: + # Round 11 + rotrdi 0, 8, 14 + rotrdi 5, 8, 18 + xor 0, 0, 5 + rotrdi 5, 8, 41 + xor 0, 0, 5 + add 11, 11, 0 + xor 0, 9, 10 + and 0, 0, 8 + xor 0, 0, 10 + add 11, 11, 0 + ld 0, 88(6) + add 11, 11, 27 + add 11, 11, 0 + add 7, 7, 11 + rotrdi 0, 12, 28 + rotrdi 5, 12, 34 + xor 0, 0, 5 + rotrdi 5, 12, 39 + xor 0, 0, 5 + add 11, 11, 0 + xor 5, 12, 14 + xor 0, 14, 15 + and 0, 0, 5 + xor 0, 0, 14 + add 11, 11, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_11 + # Calc new W[11] + rotrdi 0, 28, 1 + rotrdi 5, 28, 8 + xor 0, 0, 5 + srdi 5, 28, 7 + xor 0, 0, 5 + add 27, 27, 0 + rotrdi 0, 25, 19 + rotrdi 5, 25, 61 + xor 0, 0, 5 + srdi 5, 25, 6 + xor 0, 0, 5 + add 27, 27, 0 + add 27, 27, 20 +L_SHA512_transform_len_after_blk_11: + # Round 12 + rotrdi 0, 7, 14 + rotrdi 5, 7, 18 + xor 0, 0, 5 + rotrdi 5, 7, 41 + xor 0, 0, 5 + add 10, 10, 0 + xor 0, 8, 9 + and 0, 0, 7 + xor 0, 0, 9 + add 10, 10, 0 + ld 0, 96(6) + add 10, 10, 28 + add 10, 10, 0 + add 15, 15, 10 + rotrdi 0, 11, 28 + rotrdi 5, 11, 34 + xor 0, 0, 5 + rotrdi 5, 11, 39 + xor 0, 0, 5 + add 10, 10, 0 + xor 5, 11, 12 + xor 0, 12, 14 + and 0, 0, 5 + xor 0, 0, 12 + add 10, 10, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_12 + # Calc new W[12] + rotrdi 0, 29, 1 + rotrdi 5, 29, 8 + xor 0, 0, 5 + srdi 5, 29, 7 + xor 0, 0, 5 + add 28, 28, 0 + rotrdi 0, 26, 19 + rotrdi 5, 26, 61 + xor 0, 0, 5 + srdi 5, 26, 6 + xor 0, 0, 5 + add 28, 28, 0 + add 28, 28, 21 +L_SHA512_transform_len_after_blk_12: + # Round 13 + rotrdi 0, 15, 14 + rotrdi 5, 15, 18 + xor 0, 0, 5 + rotrdi 5, 15, 41 + xor 0, 0, 5 + add 9, 9, 0 + xor 0, 7, 8 + and 0, 0, 15 + xor 0, 0, 8 + add 9, 9, 0 + ld 0, 104(6) + add 9, 9, 29 + add 9, 9, 0 + add 14, 14, 9 + rotrdi 0, 10, 28 + rotrdi 5, 10, 34 + xor 0, 0, 5 + rotrdi 5, 10, 39 + xor 0, 0, 5 + add 9, 9, 0 + xor 5, 10, 11 + xor 0, 11, 12 + and 0, 0, 5 + xor 0, 0, 11 + add 9, 9, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_13 + # Calc new W[13] + rotrdi 0, 30, 1 + rotrdi 5, 30, 8 + xor 0, 0, 5 + srdi 5, 30, 7 + xor 0, 0, 5 + add 29, 29, 0 + rotrdi 0, 27, 19 + rotrdi 5, 27, 61 + xor 0, 0, 5 + srdi 5, 27, 6 + xor 0, 0, 5 + add 29, 29, 0 + add 29, 29, 22 +L_SHA512_transform_len_after_blk_13: + # Round 14 + rotrdi 0, 14, 14 + rotrdi 5, 14, 18 + xor 0, 0, 5 + rotrdi 5, 14, 41 + xor 0, 0, 5 + add 8, 8, 0 + xor 0, 15, 7 + and 0, 0, 14 + xor 0, 0, 7 + add 8, 8, 0 + ld 0, 112(6) + add 8, 8, 30 + add 8, 8, 0 + add 12, 12, 8 + rotrdi 0, 9, 28 + rotrdi 5, 9, 34 + xor 0, 0, 5 + rotrdi 5, 9, 39 + xor 0, 0, 5 + add 8, 8, 0 + xor 5, 9, 10 + xor 0, 10, 11 + and 0, 0, 5 + xor 0, 0, 10 + add 8, 8, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_14 + # Calc new W[14] + rotrdi 0, 31, 1 + rotrdi 5, 31, 8 + xor 0, 0, 5 + srdi 5, 31, 7 + xor 0, 0, 5 + add 30, 30, 0 + rotrdi 0, 28, 19 + rotrdi 5, 28, 61 + xor 0, 0, 5 + srdi 5, 28, 6 + xor 0, 0, 5 + add 30, 30, 0 + add 30, 30, 23 +L_SHA512_transform_len_after_blk_14: + # Round 15 + rotrdi 0, 12, 14 + rotrdi 5, 12, 18 + xor 0, 0, 5 + rotrdi 5, 12, 41 + xor 0, 0, 5 + add 7, 7, 0 + xor 0, 14, 15 + and 0, 0, 12 + xor 0, 0, 15 + add 7, 7, 0 + ld 0, 120(6) + add 7, 7, 31 + add 7, 7, 0 + add 11, 11, 7 + rotrdi 0, 8, 28 + rotrdi 5, 8, 34 + xor 0, 0, 5 + rotrdi 5, 8, 39 + xor 0, 0, 5 + add 7, 7, 0 + xor 5, 8, 9 + xor 0, 9, 10 + and 0, 0, 5 + xor 0, 0, 9 + add 7, 7, 0 + mfctr 5 + cmpwi 0, 5, 1 + beq 0, L_SHA512_transform_len_after_blk_15 + # Calc new W[15] + rotrdi 0, 16, 1 + rotrdi 5, 16, 8 + xor 0, 0, 5 + srdi 5, 16, 7 + xor 0, 0, 5 + add 31, 31, 0 + rotrdi 0, 29, 19 + rotrdi 5, 29, 61 + xor 0, 0, 5 + srdi 5, 29, 6 + xor 0, 0, 5 + add 31, 31, 0 + add 31, 31, 24 +L_SHA512_transform_len_after_blk_15: + addi 6, 6, 0x80 + bdnz L_SHA512_transform_len_start + subi 6, 6, 0x280 + # Add in digest from start + ld 0, 0(3) + ld 5, 8(3) + add 7, 7, 0 + add 8, 8, 5 + ld 0, 16(3) + ld 5, 24(3) + add 9, 9, 0 + add 10, 10, 5 + ld 0, 32(3) + ld 5, 40(3) + add 11, 11, 0 + add 12, 12, 5 + ld 0, 48(3) + ld 5, 56(3) + add 14, 14, 0 + add 15, 15, 5 + std 7, 0(3) + std 8, 8(3) + std 9, 16(3) + std 10, 24(3) + std 11, 32(3) + std 12, 40(3) + std 14, 48(3) + std 15, 56(3) + lwz 5, 0(1) + mtctr 5 + subi 5, 5, 1 + addi 4, 4, 0x80 + stw 5, 0(1) + bdnz L_SHA512_transform_len_begin + addi 1, 1, 16 +#endif /* WOLFSSL_PPC64_ASM_SMALL */ + ld 0, 144(1) + mtlr 0 + ld 14, 0(1) + ld 15, 8(1) + ld 16, 16(1) + ld 17, 24(1) + ld 18, 32(1) + ld 19, 40(1) + ld 20, 48(1) + ld 21, 56(1) + ld 22, 64(1) + ld 23, 72(1) + ld 24, 80(1) + ld 25, 88(1) + ld 26, 96(1) + ld 27, 104(1) + ld 28, 112(1) + ld 29, 120(1) + ld 30, 128(1) + ld 31, 136(1) + addi 1, 1, 0x98 + blr +#ifndef __APPLE__ + .size Transform_Sha512_Len,.-Transform_Sha512_Len +#endif /* __APPLE__ */ +#ifdef WOLFSSL_PPC64_ASM_CRYPTO +#ifndef __APPLE__ + .text + .type L_SHA512_crypto_k, %object + .size L_SHA512_crypto_k, 656 +#else + .section __DATA,__data +#endif /* __APPLE__ */ + # 16-byte aligned, 128-bit aligned +#ifndef __APPLE__ + .align 4 +#else + .p2align 4 +#endif /* __APPLE__ */ +L_SHA512_crypto_k: + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + .quad 0x0000000000000000,0x0000000000000000 + .machine "push" + .machine "power8" +#ifndef __APPLE__ +.text +.globl Transform_Sha512_Len_crypto +.type Transform_Sha512_Len_crypto,@function +.align 16 +Transform_Sha512_Len_crypto: +#if defined(_CALL_ELF) && _CALL_ELF == 2 +0: addis 2, 12, .TOC.-0b@ha + addi 2, 2, .TOC.-0b@l + .localentry Transform_Sha512_Len_crypto, .-Transform_Sha512_Len_crypto +#endif +#else +.section __TEXT,__text +.globl _Transform_Sha512_Len_crypto +.p2align 4 +_Transform_Sha512_Len_crypto: +#endif /* __APPLE__ */ + subi 1, 1, 0xc0 + li 0, 0 + stxvd2x 52, 1, 0 + li 0, 16 + stxvd2x 53, 1, 0 + li 0, 32 + stxvd2x 54, 1, 0 + li 0, 48 + stxvd2x 55, 1, 0 + li 0, 0x40 + stxvd2x 56, 1, 0 + li 0, 0x50 + stxvd2x 57, 1, 0 + li 0, 0x60 + stxvd2x 58, 1, 0 + li 0, 0x70 + stxvd2x 59, 1, 0 + li 0, 0x80 + stxvd2x 60, 1, 0 + li 0, 0x90 + stxvd2x 61, 1, 0 + li 0, 0xa0 + stxvd2x 62, 1, 0 + li 0, 0xb0 + stxvd2x 63, 1, 0 + stdu 1, -8(1) + mflr 0 + std 0, 0(1) + srdi 5, 5, 7 + mtctr 5 + li 8, 16 + li 9, 32 + li 10, 48 + addis 6, 2, L_SHA512_crypto_k@toc@ha + addi 6, 6, L_SHA512_crypto_k@toc@l + # Start of loop processing a block +L_SHA512_crypto_begin: + # Load state, one doubleword per vector register + lxvd2x 32, 0, 3 + lxvd2x 34, 8, 3 + lxvd2x 36, 9, 3 + lxvd2x 38, 10, 3 + vsldoi 1, 0, 0, 8 + vsldoi 3, 2, 2, 8 + vsldoi 5, 4, 4, 8 + vsldoi 7, 6, 6, 8 + # Load message, one doubleword per vector register + lxvd2x 48, 0, 4 + addi 4, 4, 16 + vsldoi 17, 16, 16, 8 + lxvd2x 50, 0, 4 + addi 4, 4, 16 + vsldoi 19, 18, 18, 8 + lxvd2x 52, 0, 4 + addi 4, 4, 16 + vsldoi 21, 20, 20, 8 + lxvd2x 54, 0, 4 + addi 4, 4, 16 + vsldoi 23, 22, 22, 8 + lxvd2x 56, 0, 4 + addi 4, 4, 16 + vsldoi 25, 24, 24, 8 + lxvd2x 58, 0, 4 + addi 4, 4, 16 + vsldoi 27, 26, 26, 8 + lxvd2x 60, 0, 4 + addi 4, 4, 16 + vsldoi 29, 28, 28, 8 + lxvd2x 62, 0, 4 + addi 4, 4, 16 + vsldoi 31, 30, 30, 8 + # Preload first key + lxvd2x 40, 0, 6 + li 7, 8 + # 80 rounds + vaddudm 10, 8, 16 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vaddudm 10, 8, 17 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vaddudm 10, 8, 18 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vaddudm 10, 8, 19 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vaddudm 10, 8, 20 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vaddudm 10, 8, 21 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vaddudm 10, 8, 22 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vaddudm 10, 8, 23 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vaddudm 10, 8, 24 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vaddudm 10, 8, 25 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vaddudm 10, 8, 26 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vaddudm 10, 8, 27 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vaddudm 10, 8, 28 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vaddudm 10, 8, 29 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vaddudm 10, 8, 30 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vaddudm 10, 8, 31 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 30, 0, 15 + vshasigmad 14, 17, 0, 0 + vaddudm 16, 16, 15 + vaddudm 16, 16, 14 + vaddudm 16, 16, 25 + vaddudm 10, 8, 16 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 31, 0, 15 + vshasigmad 14, 18, 0, 0 + vaddudm 17, 17, 15 + vaddudm 17, 17, 14 + vaddudm 17, 17, 26 + vaddudm 10, 8, 17 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 16, 0, 15 + vshasigmad 14, 19, 0, 0 + vaddudm 18, 18, 15 + vaddudm 18, 18, 14 + vaddudm 18, 18, 27 + vaddudm 10, 8, 18 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 17, 0, 15 + vshasigmad 14, 20, 0, 0 + vaddudm 19, 19, 15 + vaddudm 19, 19, 14 + vaddudm 19, 19, 28 + vaddudm 10, 8, 19 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 18, 0, 15 + vshasigmad 14, 21, 0, 0 + vaddudm 20, 20, 15 + vaddudm 20, 20, 14 + vaddudm 20, 20, 29 + vaddudm 10, 8, 20 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 19, 0, 15 + vshasigmad 14, 22, 0, 0 + vaddudm 21, 21, 15 + vaddudm 21, 21, 14 + vaddudm 21, 21, 30 + vaddudm 10, 8, 21 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 20, 0, 15 + vshasigmad 14, 23, 0, 0 + vaddudm 22, 22, 15 + vaddudm 22, 22, 14 + vaddudm 22, 22, 31 + vaddudm 10, 8, 22 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 21, 0, 15 + vshasigmad 14, 24, 0, 0 + vaddudm 23, 23, 15 + vaddudm 23, 23, 14 + vaddudm 23, 23, 16 + vaddudm 10, 8, 23 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 22, 0, 15 + vshasigmad 14, 25, 0, 0 + vaddudm 24, 24, 15 + vaddudm 24, 24, 14 + vaddudm 24, 24, 17 + vaddudm 10, 8, 24 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 23, 0, 15 + vshasigmad 14, 26, 0, 0 + vaddudm 25, 25, 15 + vaddudm 25, 25, 14 + vaddudm 25, 25, 18 + vaddudm 10, 8, 25 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 24, 0, 15 + vshasigmad 14, 27, 0, 0 + vaddudm 26, 26, 15 + vaddudm 26, 26, 14 + vaddudm 26, 26, 19 + vaddudm 10, 8, 26 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 25, 0, 15 + vshasigmad 14, 28, 0, 0 + vaddudm 27, 27, 15 + vaddudm 27, 27, 14 + vaddudm 27, 27, 20 + vaddudm 10, 8, 27 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 26, 0, 15 + vshasigmad 14, 29, 0, 0 + vaddudm 28, 28, 15 + vaddudm 28, 28, 14 + vaddudm 28, 28, 21 + vaddudm 10, 8, 28 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 27, 0, 15 + vshasigmad 14, 30, 0, 0 + vaddudm 29, 29, 15 + vaddudm 29, 29, 14 + vaddudm 29, 29, 22 + vaddudm 10, 8, 29 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 28, 0, 15 + vshasigmad 14, 31, 0, 0 + vaddudm 30, 30, 15 + vaddudm 30, 30, 14 + vaddudm 30, 30, 23 + vaddudm 10, 8, 30 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 29, 0, 15 + vshasigmad 14, 16, 0, 0 + vaddudm 31, 31, 15 + vaddudm 31, 31, 14 + vaddudm 31, 31, 24 + vaddudm 10, 8, 31 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 30, 0, 15 + vshasigmad 14, 17, 0, 0 + vaddudm 16, 16, 15 + vaddudm 16, 16, 14 + vaddudm 16, 16, 25 + vaddudm 10, 8, 16 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 31, 0, 15 + vshasigmad 14, 18, 0, 0 + vaddudm 17, 17, 15 + vaddudm 17, 17, 14 + vaddudm 17, 17, 26 + vaddudm 10, 8, 17 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 16, 0, 15 + vshasigmad 14, 19, 0, 0 + vaddudm 18, 18, 15 + vaddudm 18, 18, 14 + vaddudm 18, 18, 27 + vaddudm 10, 8, 18 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 17, 0, 15 + vshasigmad 14, 20, 0, 0 + vaddudm 19, 19, 15 + vaddudm 19, 19, 14 + vaddudm 19, 19, 28 + vaddudm 10, 8, 19 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 18, 0, 15 + vshasigmad 14, 21, 0, 0 + vaddudm 20, 20, 15 + vaddudm 20, 20, 14 + vaddudm 20, 20, 29 + vaddudm 10, 8, 20 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 19, 0, 15 + vshasigmad 14, 22, 0, 0 + vaddudm 21, 21, 15 + vaddudm 21, 21, 14 + vaddudm 21, 21, 30 + vaddudm 10, 8, 21 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 20, 0, 15 + vshasigmad 14, 23, 0, 0 + vaddudm 22, 22, 15 + vaddudm 22, 22, 14 + vaddudm 22, 22, 31 + vaddudm 10, 8, 22 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 21, 0, 15 + vshasigmad 14, 24, 0, 0 + vaddudm 23, 23, 15 + vaddudm 23, 23, 14 + vaddudm 23, 23, 16 + vaddudm 10, 8, 23 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 22, 0, 15 + vshasigmad 14, 25, 0, 0 + vaddudm 24, 24, 15 + vaddudm 24, 24, 14 + vaddudm 24, 24, 17 + vaddudm 10, 8, 24 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 23, 0, 15 + vshasigmad 14, 26, 0, 0 + vaddudm 25, 25, 15 + vaddudm 25, 25, 14 + vaddudm 25, 25, 18 + vaddudm 10, 8, 25 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 24, 0, 15 + vshasigmad 14, 27, 0, 0 + vaddudm 26, 26, 15 + vaddudm 26, 26, 14 + vaddudm 26, 26, 19 + vaddudm 10, 8, 26 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 25, 0, 15 + vshasigmad 14, 28, 0, 0 + vaddudm 27, 27, 15 + vaddudm 27, 27, 14 + vaddudm 27, 27, 20 + vaddudm 10, 8, 27 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 26, 0, 15 + vshasigmad 14, 29, 0, 0 + vaddudm 28, 28, 15 + vaddudm 28, 28, 14 + vaddudm 28, 28, 21 + vaddudm 10, 8, 28 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 27, 0, 15 + vshasigmad 14, 30, 0, 0 + vaddudm 29, 29, 15 + vaddudm 29, 29, 14 + vaddudm 29, 29, 22 + vaddudm 10, 8, 29 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 28, 0, 15 + vshasigmad 14, 31, 0, 0 + vaddudm 30, 30, 15 + vaddudm 30, 30, 14 + vaddudm 30, 30, 23 + vaddudm 10, 8, 30 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 29, 0, 15 + vshasigmad 14, 16, 0, 0 + vaddudm 31, 31, 15 + vaddudm 31, 31, 14 + vaddudm 31, 31, 24 + vaddudm 10, 8, 31 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 30, 0, 15 + vshasigmad 14, 17, 0, 0 + vaddudm 16, 16, 15 + vaddudm 16, 16, 14 + vaddudm 16, 16, 25 + vaddudm 10, 8, 16 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 31, 0, 15 + vshasigmad 14, 18, 0, 0 + vaddudm 17, 17, 15 + vaddudm 17, 17, 14 + vaddudm 17, 17, 26 + vaddudm 10, 8, 17 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 16, 0, 15 + vshasigmad 14, 19, 0, 0 + vaddudm 18, 18, 15 + vaddudm 18, 18, 14 + vaddudm 18, 18, 27 + vaddudm 10, 8, 18 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 17, 0, 15 + vshasigmad 14, 20, 0, 0 + vaddudm 19, 19, 15 + vaddudm 19, 19, 14 + vaddudm 19, 19, 28 + vaddudm 10, 8, 19 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 18, 0, 15 + vshasigmad 14, 21, 0, 0 + vaddudm 20, 20, 15 + vaddudm 20, 20, 14 + vaddudm 20, 20, 29 + vaddudm 10, 8, 20 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 19, 0, 15 + vshasigmad 14, 22, 0, 0 + vaddudm 21, 21, 15 + vaddudm 21, 21, 14 + vaddudm 21, 21, 30 + vaddudm 10, 8, 21 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 20, 0, 15 + vshasigmad 14, 23, 0, 0 + vaddudm 22, 22, 15 + vaddudm 22, 22, 14 + vaddudm 22, 22, 31 + vaddudm 10, 8, 22 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 21, 0, 15 + vshasigmad 14, 24, 0, 0 + vaddudm 23, 23, 15 + vaddudm 23, 23, 14 + vaddudm 23, 23, 16 + vaddudm 10, 8, 23 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 22, 0, 15 + vshasigmad 14, 25, 0, 0 + vaddudm 24, 24, 15 + vaddudm 24, 24, 14 + vaddudm 24, 24, 17 + vaddudm 10, 8, 24 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 23, 0, 15 + vshasigmad 14, 26, 0, 0 + vaddudm 25, 25, 15 + vaddudm 25, 25, 14 + vaddudm 25, 25, 18 + vaddudm 10, 8, 25 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 24, 0, 15 + vshasigmad 14, 27, 0, 0 + vaddudm 26, 26, 15 + vaddudm 26, 26, 14 + vaddudm 26, 26, 19 + vaddudm 10, 8, 26 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 25, 0, 15 + vshasigmad 14, 28, 0, 0 + vaddudm 27, 27, 15 + vaddudm 27, 27, 14 + vaddudm 27, 27, 20 + vaddudm 10, 8, 27 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 26, 0, 15 + vshasigmad 14, 29, 0, 0 + vaddudm 28, 28, 15 + vaddudm 28, 28, 14 + vaddudm 28, 28, 21 + vaddudm 10, 8, 28 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 27, 0, 15 + vshasigmad 14, 30, 0, 0 + vaddudm 29, 29, 15 + vaddudm 29, 29, 14 + vaddudm 29, 29, 22 + vaddudm 10, 8, 29 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 28, 0, 15 + vshasigmad 14, 31, 0, 0 + vaddudm 30, 30, 15 + vaddudm 30, 30, 14 + vaddudm 30, 30, 23 + vaddudm 10, 8, 30 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 29, 0, 15 + vshasigmad 14, 16, 0, 0 + vaddudm 31, 31, 15 + vaddudm 31, 31, 14 + vaddudm 31, 31, 24 + vaddudm 10, 8, 31 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 30, 0, 15 + vshasigmad 14, 17, 0, 0 + vaddudm 16, 16, 15 + vaddudm 16, 16, 14 + vaddudm 16, 16, 25 + vaddudm 10, 8, 16 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 31, 0, 15 + vshasigmad 14, 18, 0, 0 + vaddudm 17, 17, 15 + vaddudm 17, 17, 14 + vaddudm 17, 17, 26 + vaddudm 10, 8, 17 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 16, 0, 15 + vshasigmad 14, 19, 0, 0 + vaddudm 18, 18, 15 + vaddudm 18, 18, 14 + vaddudm 18, 18, 27 + vaddudm 10, 8, 18 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 17, 0, 15 + vshasigmad 14, 20, 0, 0 + vaddudm 19, 19, 15 + vaddudm 19, 19, 14 + vaddudm 19, 19, 28 + vaddudm 10, 8, 19 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 18, 0, 15 + vshasigmad 14, 21, 0, 0 + vaddudm 20, 20, 15 + vaddudm 20, 20, 14 + vaddudm 20, 20, 29 + vaddudm 10, 8, 20 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 19, 0, 15 + vshasigmad 14, 22, 0, 0 + vaddudm 21, 21, 15 + vaddudm 21, 21, 14 + vaddudm 21, 21, 30 + vaddudm 10, 8, 21 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 20, 0, 15 + vshasigmad 14, 23, 0, 0 + vaddudm 22, 22, 15 + vaddudm 22, 22, 14 + vaddudm 22, 22, 31 + vaddudm 10, 8, 22 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 21, 0, 15 + vshasigmad 14, 24, 0, 0 + vaddudm 23, 23, 15 + vaddudm 23, 23, 14 + vaddudm 23, 23, 16 + vaddudm 10, 8, 23 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + vshasigmad 15, 22, 0, 15 + vshasigmad 14, 25, 0, 0 + vaddudm 24, 24, 15 + vaddudm 24, 24, 14 + vaddudm 24, 24, 17 + vaddudm 10, 8, 24 + vaddudm 13, 7, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 3, 7 + vaddudm 11, 11, 10 + vshasigmad 15, 4, 1, 15 + vshasigmad 14, 0, 1, 0 + vxor 12, 1, 2 + vsel 9, 6, 5, 4 + vsel 12, 2, 0, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 7, 15, 14 + vaddudm 3, 9, 15 + vaddudm 7, 7, 12 + vshasigmad 15, 23, 0, 15 + vshasigmad 14, 26, 0, 0 + vaddudm 25, 25, 15 + vaddudm 25, 25, 14 + vaddudm 25, 25, 18 + vaddudm 10, 8, 25 + vaddudm 13, 6, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 2, 6 + vaddudm 11, 11, 10 + vshasigmad 15, 3, 1, 15 + vshasigmad 14, 7, 1, 0 + vxor 12, 0, 1 + vsel 9, 5, 4, 3 + vsel 12, 1, 7, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 6, 15, 14 + vaddudm 2, 9, 15 + vaddudm 6, 6, 12 + vshasigmad 15, 24, 0, 15 + vshasigmad 14, 27, 0, 0 + vaddudm 26, 26, 15 + vaddudm 26, 26, 14 + vaddudm 26, 26, 19 + vaddudm 10, 8, 26 + vaddudm 13, 5, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 1, 5 + vaddudm 11, 11, 10 + vshasigmad 15, 2, 1, 15 + vshasigmad 14, 6, 1, 0 + vxor 12, 7, 0 + vsel 9, 4, 3, 2 + vsel 12, 0, 6, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 5, 15, 14 + vaddudm 1, 9, 15 + vaddudm 5, 5, 12 + vshasigmad 15, 25, 0, 15 + vshasigmad 14, 28, 0, 0 + vaddudm 27, 27, 15 + vaddudm 27, 27, 14 + vaddudm 27, 27, 20 + vaddudm 10, 8, 27 + vaddudm 13, 4, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 0, 4 + vaddudm 11, 11, 10 + vshasigmad 15, 1, 1, 15 + vshasigmad 14, 5, 1, 0 + vxor 12, 6, 7 + vsel 9, 3, 2, 1 + vsel 12, 7, 5, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 4, 15, 14 + vaddudm 0, 9, 15 + vaddudm 4, 4, 12 + vshasigmad 15, 26, 0, 15 + vshasigmad 14, 29, 0, 0 + vaddudm 28, 28, 15 + vaddudm 28, 28, 14 + vaddudm 28, 28, 21 + vaddudm 10, 8, 28 + vaddudm 13, 3, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 7, 3 + vaddudm 11, 11, 10 + vshasigmad 15, 0, 1, 15 + vshasigmad 14, 4, 1, 0 + vxor 12, 5, 6 + vsel 9, 2, 1, 0 + vsel 12, 6, 4, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 3, 15, 14 + vaddudm 7, 9, 15 + vaddudm 3, 3, 12 + vshasigmad 15, 27, 0, 15 + vshasigmad 14, 30, 0, 0 + vaddudm 29, 29, 15 + vaddudm 29, 29, 14 + vaddudm 29, 29, 22 + vaddudm 10, 8, 29 + vaddudm 13, 2, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 6, 2 + vaddudm 11, 11, 10 + vshasigmad 15, 7, 1, 15 + vshasigmad 14, 3, 1, 0 + vxor 12, 4, 5 + vsel 9, 1, 0, 7 + vsel 12, 5, 3, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 2, 15, 14 + vaddudm 6, 9, 15 + vaddudm 2, 2, 12 + vshasigmad 15, 28, 0, 15 + vshasigmad 14, 31, 0, 0 + vaddudm 30, 30, 15 + vaddudm 30, 30, 14 + vaddudm 30, 30, 23 + vaddudm 10, 8, 30 + vaddudm 13, 1, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 5, 1 + vaddudm 11, 11, 10 + vshasigmad 15, 6, 1, 15 + vshasigmad 14, 2, 1, 0 + vxor 12, 3, 4 + vsel 9, 0, 7, 6 + vsel 12, 4, 2, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 1, 15, 14 + vaddudm 5, 9, 15 + vaddudm 1, 1, 12 + vshasigmad 15, 29, 0, 15 + vshasigmad 14, 16, 0, 0 + vaddudm 31, 31, 15 + vaddudm 31, 31, 14 + vaddudm 31, 31, 24 + vaddudm 10, 8, 31 + vaddudm 13, 0, 10 + lxvd2x 40, 7, 6 + addi 7, 7, 8 + vaddudm 11, 4, 0 + vaddudm 11, 11, 10 + vshasigmad 15, 5, 1, 15 + vshasigmad 14, 1, 1, 0 + vxor 12, 2, 3 + vsel 9, 7, 6, 5 + vsel 12, 3, 1, 12 + vaddudm 13, 13, 9 + vaddudm 12, 12, 13 + vaddudm 9, 9, 11 + vaddudm 0, 15, 14 + vaddudm 4, 9, 15 + vaddudm 0, 0, 12 + # Repack state, add original digest and store + xxmrghd 32, 32, 33 + xxmrghd 34, 34, 35 + xxmrghd 36, 36, 37 + xxmrghd 38, 38, 39 + lxvd2x 41, 0, 3 + lxvd2x 42, 8, 3 + lxvd2x 43, 9, 3 + lxvd2x 44, 10, 3 + vaddudm 0, 0, 9 + vaddudm 2, 2, 10 + vaddudm 4, 4, 11 + vaddudm 6, 6, 12 + stxvd2x 32, 0, 3 + stxvd2x 34, 8, 3 + stxvd2x 36, 9, 3 + stxvd2x 38, 10, 3 + bdnz L_SHA512_crypto_begin + ld 0, 0(1) + mtlr 0 + addi 1, 1, 8 + li 0, 0 + lxvd2x 52, 1, 0 + li 0, 16 + lxvd2x 53, 1, 0 + li 0, 32 + lxvd2x 54, 1, 0 + li 0, 48 + lxvd2x 55, 1, 0 + li 0, 0x40 + lxvd2x 56, 1, 0 + li 0, 0x50 + lxvd2x 57, 1, 0 + li 0, 0x60 + lxvd2x 58, 1, 0 + li 0, 0x70 + lxvd2x 59, 1, 0 + li 0, 0x80 + lxvd2x 60, 1, 0 + li 0, 0x90 + lxvd2x 61, 1, 0 + li 0, 0xa0 + lxvd2x 62, 1, 0 + li 0, 0xb0 + lxvd2x 63, 1, 0 + addi 1, 1, 0xc0 + blr +#ifndef __APPLE__ + .size Transform_Sha512_Len_crypto,.-Transform_Sha512_Len_crypto +#endif /* __APPLE__ */ + .machine "pop" +#endif /* WOLFSSL_PPC64_ASM_CRYPTO */ +#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */ +#endif /* WOLFSSL_PPC64_ASM */ + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif +#endif /* !WOLFSSL_PPC64_ASM_INLINE */ diff --git a/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c new file mode 100644 index 00000000000..e29ecf1697c --- /dev/null +++ b/wolfcrypt/src/port/ppc64/ppc64-sha512-asm_c.c @@ -0,0 +1,5794 @@ +/* ppc64-sha512-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 + */ + +#include +#include + +/* Generated using (from wolfssl): + * cd ../scripts + * ruby ./sha2/sha512.rb ppc64 \ + * ../wolfssl/wolfcrypt/src/port/ppc64/ppc64-sha512-asm.c + */ +#ifdef WOLFSSL_PPC64_ASM +#include +#include +#ifdef WOLFSSL_PPC64_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__ */ +#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384) +#include + +static const word64 L_SHA512_transform_len_k[] = { + 0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, + 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, + 0x3956c25bf348b538UL, 0x59f111f1b605d019UL, + 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, + 0xd807aa98a3030242UL, 0x12835b0145706fbeUL, + 0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, + 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, + 0x9bdc06a725c71235UL, 0xc19bf174cf692694UL, + 0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL, + 0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL, + 0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL, + 0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL, + 0x983e5152ee66dfabUL, 0xa831c66d2db43210UL, + 0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL, + 0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL, + 0x06ca6351e003826fUL, 0x142929670a0e6e70UL, + 0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL, + 0x4d2c6dfc5ac42aedUL, 0x53380d139d95b3dfUL, + 0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL, + 0x81c2c92e47edaee6UL, 0x92722c851482353bUL, + 0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL, + 0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL, + 0xd192e819d6ef5218UL, 0xd69906245565a910UL, + 0xf40e35855771202aUL, 0x106aa07032bbd1b8UL, + 0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL, + 0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL, + 0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL, + 0x5b9cca4f7763e373UL, 0x682e6ff3d6b2b8a3UL, + 0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL, + 0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL, + 0x90befffa23631e28UL, 0xa4506cebde82bde9UL, + 0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL, + 0xca273eceea26619cUL, 0xd186b8c721c0c207UL, + 0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL, + 0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL, + 0x113f9804bef90daeUL, 0x1b710b35131c471bUL, + 0x28db77f523047d84UL, 0x32caab7b40c72493UL, + 0x3c9ebe0a15c9bebcUL, 0x431d67c49c100d4cUL, + 0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL, + 0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL, +}; + +void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void Transform_Sha512_Len(wc_Sha512* sha512_p, const byte* data_p, word32 len_p) +#else +void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register wc_Sha512* sha512 asm ("3") = (wc_Sha512*)sha512_p; + register const byte* data asm ("4") = (const byte*)data_p; + register word32 len asm ("5") = (word32)len_p; + register word64* L_SHA512_transform_len_k_c asm ("6") = + (word64*)&L_SHA512_transform_len_k; +#else + register word64* L_SHA512_transform_len_k_c = + (word64*)&L_SHA512_transform_len_k; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "srdi %[len], %[len], 7\n\t" + "mr 6, %[L_SHA512_transform_len_k]\n\t" + /* Copy digest to add in at end */ + "ld 7, 0(%[sha512])\n\t" + "ld 8, 8(%[sha512])\n\t" + "ld 9, 16(%[sha512])\n\t" + "ld 10, 24(%[sha512])\n\t" + "ld 11, 32(%[sha512])\n\t" + "ld 12, 40(%[sha512])\n\t" + "ld 14, 48(%[sha512])\n\t" + "ld 15, 56(%[sha512])\n\t" +#ifndef WOLFSSL_PPC64_ASM_SMALL + "mtctr %[len]\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA512_transform_len_begin_%=: \n\t" + /* Load W - 128 bytes */ + "ld 16, 0(%[data])\n\t" + "ld 17, 8(%[data])\n\t" + "ld 18, 16(%[data])\n\t" + "ld 19, 24(%[data])\n\t" + "ld 20, 32(%[data])\n\t" + "ld 21, 40(%[data])\n\t" + "ld 22, 48(%[data])\n\t" + "ld 23, 56(%[data])\n\t" + "ld 24, 64(%[data])\n\t" + "ld 25, 72(%[data])\n\t" + "ld 26, 80(%[data])\n\t" + "ld 27, 88(%[data])\n\t" + "ld 28, 96(%[data])\n\t" + "ld 29, 104(%[data])\n\t" + "ld 30, 112(%[data])\n\t" + "ld 31, 120(%[data])\n\t" + /* Start of 80 rounds */ + /* Round 0 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotrdi 0, 17, 1\n\t" + "rotrdi %[len], 17, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotrdi 0, 30, 19\n\t" + "rotrdi %[len], 30, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 8(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotrdi 0, 18, 1\n\t" + "rotrdi %[len], 18, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotrdi 0, 31, 19\n\t" + "rotrdi %[len], 31, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 16(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotrdi 0, 19, 1\n\t" + "rotrdi %[len], 19, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotrdi 0, 16, 19\n\t" + "rotrdi %[len], 16, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 24(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotrdi 0, 20, 1\n\t" + "rotrdi %[len], 20, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotrdi 0, 17, 19\n\t" + "rotrdi %[len], 17, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 32(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotrdi 0, 21, 1\n\t" + "rotrdi %[len], 21, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotrdi 0, 18, 19\n\t" + "rotrdi %[len], 18, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 40(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotrdi 0, 22, 1\n\t" + "rotrdi %[len], 22, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotrdi 0, 19, 19\n\t" + "rotrdi %[len], 19, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 48(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotrdi 0, 23, 1\n\t" + "rotrdi %[len], 23, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotrdi 0, 20, 19\n\t" + "rotrdi %[len], 20, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 56(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotrdi 0, 24, 1\n\t" + "rotrdi %[len], 24, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotrdi 0, 21, 19\n\t" + "rotrdi %[len], 21, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 64(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotrdi 0, 25, 1\n\t" + "rotrdi %[len], 25, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotrdi 0, 22, 19\n\t" + "rotrdi %[len], 22, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 72(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotrdi 0, 26, 1\n\t" + "rotrdi %[len], 26, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotrdi 0, 23, 19\n\t" + "rotrdi %[len], 23, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 80(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotrdi 0, 27, 1\n\t" + "rotrdi %[len], 27, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotrdi 0, 24, 19\n\t" + "rotrdi %[len], 24, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 88(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotrdi 0, 28, 1\n\t" + "rotrdi %[len], 28, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotrdi 0, 25, 19\n\t" + "rotrdi %[len], 25, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 96(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotrdi 0, 29, 1\n\t" + "rotrdi %[len], 29, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotrdi 0, 26, 19\n\t" + "rotrdi %[len], 26, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 104(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotrdi 0, 30, 1\n\t" + "rotrdi %[len], 30, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotrdi 0, 27, 19\n\t" + "rotrdi %[len], 27, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 112(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotrdi 0, 31, 1\n\t" + "rotrdi %[len], 31, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotrdi 0, 28, 19\n\t" + "rotrdi %[len], 28, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 120(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotrdi 0, 16, 1\n\t" + "rotrdi %[len], 16, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotrdi 0, 29, 19\n\t" + "rotrdi %[len], 29, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x80\n\t" + /* Round 0 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotrdi 0, 17, 1\n\t" + "rotrdi %[len], 17, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotrdi 0, 30, 19\n\t" + "rotrdi %[len], 30, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 8(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotrdi 0, 18, 1\n\t" + "rotrdi %[len], 18, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotrdi 0, 31, 19\n\t" + "rotrdi %[len], 31, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 16(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotrdi 0, 19, 1\n\t" + "rotrdi %[len], 19, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotrdi 0, 16, 19\n\t" + "rotrdi %[len], 16, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 24(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotrdi 0, 20, 1\n\t" + "rotrdi %[len], 20, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotrdi 0, 17, 19\n\t" + "rotrdi %[len], 17, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 32(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotrdi 0, 21, 1\n\t" + "rotrdi %[len], 21, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotrdi 0, 18, 19\n\t" + "rotrdi %[len], 18, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 40(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotrdi 0, 22, 1\n\t" + "rotrdi %[len], 22, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotrdi 0, 19, 19\n\t" + "rotrdi %[len], 19, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 48(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotrdi 0, 23, 1\n\t" + "rotrdi %[len], 23, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotrdi 0, 20, 19\n\t" + "rotrdi %[len], 20, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 56(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotrdi 0, 24, 1\n\t" + "rotrdi %[len], 24, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotrdi 0, 21, 19\n\t" + "rotrdi %[len], 21, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 64(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotrdi 0, 25, 1\n\t" + "rotrdi %[len], 25, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotrdi 0, 22, 19\n\t" + "rotrdi %[len], 22, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 72(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotrdi 0, 26, 1\n\t" + "rotrdi %[len], 26, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotrdi 0, 23, 19\n\t" + "rotrdi %[len], 23, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 80(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotrdi 0, 27, 1\n\t" + "rotrdi %[len], 27, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotrdi 0, 24, 19\n\t" + "rotrdi %[len], 24, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 88(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotrdi 0, 28, 1\n\t" + "rotrdi %[len], 28, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotrdi 0, 25, 19\n\t" + "rotrdi %[len], 25, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 96(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotrdi 0, 29, 1\n\t" + "rotrdi %[len], 29, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotrdi 0, 26, 19\n\t" + "rotrdi %[len], 26, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 104(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotrdi 0, 30, 1\n\t" + "rotrdi %[len], 30, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotrdi 0, 27, 19\n\t" + "rotrdi %[len], 27, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 112(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotrdi 0, 31, 1\n\t" + "rotrdi %[len], 31, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotrdi 0, 28, 19\n\t" + "rotrdi %[len], 28, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 120(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotrdi 0, 16, 1\n\t" + "rotrdi %[len], 16, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotrdi 0, 29, 19\n\t" + "rotrdi %[len], 29, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x80\n\t" + /* Round 0 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotrdi 0, 17, 1\n\t" + "rotrdi %[len], 17, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotrdi 0, 30, 19\n\t" + "rotrdi %[len], 30, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 8(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotrdi 0, 18, 1\n\t" + "rotrdi %[len], 18, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotrdi 0, 31, 19\n\t" + "rotrdi %[len], 31, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 16(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotrdi 0, 19, 1\n\t" + "rotrdi %[len], 19, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotrdi 0, 16, 19\n\t" + "rotrdi %[len], 16, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 24(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotrdi 0, 20, 1\n\t" + "rotrdi %[len], 20, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotrdi 0, 17, 19\n\t" + "rotrdi %[len], 17, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 32(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotrdi 0, 21, 1\n\t" + "rotrdi %[len], 21, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotrdi 0, 18, 19\n\t" + "rotrdi %[len], 18, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 40(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotrdi 0, 22, 1\n\t" + "rotrdi %[len], 22, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotrdi 0, 19, 19\n\t" + "rotrdi %[len], 19, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 48(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotrdi 0, 23, 1\n\t" + "rotrdi %[len], 23, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotrdi 0, 20, 19\n\t" + "rotrdi %[len], 20, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 56(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotrdi 0, 24, 1\n\t" + "rotrdi %[len], 24, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotrdi 0, 21, 19\n\t" + "rotrdi %[len], 21, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 64(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotrdi 0, 25, 1\n\t" + "rotrdi %[len], 25, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotrdi 0, 22, 19\n\t" + "rotrdi %[len], 22, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 72(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotrdi 0, 26, 1\n\t" + "rotrdi %[len], 26, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotrdi 0, 23, 19\n\t" + "rotrdi %[len], 23, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 80(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotrdi 0, 27, 1\n\t" + "rotrdi %[len], 27, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotrdi 0, 24, 19\n\t" + "rotrdi %[len], 24, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 88(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotrdi 0, 28, 1\n\t" + "rotrdi %[len], 28, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotrdi 0, 25, 19\n\t" + "rotrdi %[len], 25, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 96(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotrdi 0, 29, 1\n\t" + "rotrdi %[len], 29, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotrdi 0, 26, 19\n\t" + "rotrdi %[len], 26, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 104(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotrdi 0, 30, 1\n\t" + "rotrdi %[len], 30, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotrdi 0, 27, 19\n\t" + "rotrdi %[len], 27, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 112(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotrdi 0, 31, 1\n\t" + "rotrdi %[len], 31, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotrdi 0, 28, 19\n\t" + "rotrdi %[len], 28, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 120(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotrdi 0, 16, 1\n\t" + "rotrdi %[len], 16, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotrdi 0, 29, 19\n\t" + "rotrdi %[len], 29, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x80\n\t" + /* Round 0 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[0] */ + "rotrdi 0, 17, 1\n\t" + "rotrdi %[len], 17, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotrdi 0, 30, 19\n\t" + "rotrdi %[len], 30, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + /* Round 1 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 8(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[1] */ + "rotrdi 0, 18, 1\n\t" + "rotrdi %[len], 18, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotrdi 0, 31, 19\n\t" + "rotrdi %[len], 31, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + /* Round 2 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 16(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[2] */ + "rotrdi 0, 19, 1\n\t" + "rotrdi %[len], 19, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotrdi 0, 16, 19\n\t" + "rotrdi %[len], 16, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + /* Round 3 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 24(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[3] */ + "rotrdi 0, 20, 1\n\t" + "rotrdi %[len], 20, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotrdi 0, 17, 19\n\t" + "rotrdi %[len], 17, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + /* Round 4 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 32(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[4] */ + "rotrdi 0, 21, 1\n\t" + "rotrdi %[len], 21, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotrdi 0, 18, 19\n\t" + "rotrdi %[len], 18, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + /* Round 5 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 40(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[5] */ + "rotrdi 0, 22, 1\n\t" + "rotrdi %[len], 22, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotrdi 0, 19, 19\n\t" + "rotrdi %[len], 19, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + /* Round 6 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 48(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[6] */ + "rotrdi 0, 23, 1\n\t" + "rotrdi %[len], 23, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotrdi 0, 20, 19\n\t" + "rotrdi %[len], 20, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + /* Round 7 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 56(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[7] */ + "rotrdi 0, 24, 1\n\t" + "rotrdi %[len], 24, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotrdi 0, 21, 19\n\t" + "rotrdi %[len], 21, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + /* Round 8 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 64(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Calc new W[8] */ + "rotrdi 0, 25, 1\n\t" + "rotrdi %[len], 25, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotrdi 0, 22, 19\n\t" + "rotrdi %[len], 22, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + /* Round 9 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 72(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Calc new W[9] */ + "rotrdi 0, 26, 1\n\t" + "rotrdi %[len], 26, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotrdi 0, 23, 19\n\t" + "rotrdi %[len], 23, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + /* Round 10 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 80(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Calc new W[10] */ + "rotrdi 0, 27, 1\n\t" + "rotrdi %[len], 27, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotrdi 0, 24, 19\n\t" + "rotrdi %[len], 24, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + /* Round 11 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 88(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Calc new W[11] */ + "rotrdi 0, 28, 1\n\t" + "rotrdi %[len], 28, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotrdi 0, 25, 19\n\t" + "rotrdi %[len], 25, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + /* Round 12 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 96(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Calc new W[12] */ + "rotrdi 0, 29, 1\n\t" + "rotrdi %[len], 29, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotrdi 0, 26, 19\n\t" + "rotrdi %[len], 26, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + /* Round 13 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 104(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Calc new W[13] */ + "rotrdi 0, 30, 1\n\t" + "rotrdi %[len], 30, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotrdi 0, 27, 19\n\t" + "rotrdi %[len], 27, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + /* Round 14 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 112(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Calc new W[14] */ + "rotrdi 0, 31, 1\n\t" + "rotrdi %[len], 31, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotrdi 0, 28, 19\n\t" + "rotrdi %[len], 28, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + /* Round 15 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 120(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Calc new W[15] */ + "rotrdi 0, 16, 1\n\t" + "rotrdi %[len], 16, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotrdi 0, 29, 19\n\t" + "rotrdi %[len], 29, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "addi 6, 6, 0x80\n\t" + /* Round 0 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Round 1 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 8(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Round 2 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 16(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Round 3 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 24(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Round 4 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 32(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Round 5 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 40(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Round 6 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 48(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Round 7 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 56(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + /* Round 8 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 64(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + /* Round 9 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 72(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + /* Round 10 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 80(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + /* Round 11 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 88(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + /* Round 12 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 96(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + /* Round 13 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 104(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + /* Round 14 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 112(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + /* Round 15 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 120(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + "subi 6, 6, 0x200\n\t" + /* Add in digest from start */ + "ld 0, 0(%[sha512])\n\t" + "ld %[len], 8(%[sha512])\n\t" + "add 7, 7, 0\n\t" + "add 8, 8, %[len]\n\t" + "ld 0, 16(%[sha512])\n\t" + "ld %[len], 24(%[sha512])\n\t" + "add 9, 9, 0\n\t" + "add 10, 10, %[len]\n\t" + "ld 0, 32(%[sha512])\n\t" + "ld %[len], 40(%[sha512])\n\t" + "add 11, 11, 0\n\t" + "add 12, 12, %[len]\n\t" + "ld 0, 48(%[sha512])\n\t" + "ld %[len], 56(%[sha512])\n\t" + "add 14, 14, 0\n\t" + "add 15, 15, %[len]\n\t" + "std 7, 0(%[sha512])\n\t" + "std 8, 8(%[sha512])\n\t" + "std 9, 16(%[sha512])\n\t" + "std 10, 24(%[sha512])\n\t" + "std 11, 32(%[sha512])\n\t" + "std 12, 40(%[sha512])\n\t" + "std 14, 48(%[sha512])\n\t" + "std 15, 56(%[sha512])\n\t" + "addi %[data], %[data], 0x80\n\t" + "bdnz L_SHA512_transform_len_begin_%=\n\t" +#else + "subi 1, 1, 16\n\t" + "stw %[len], 0(1)\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA512_transform_len_begin_%=: \n\t" + /* Load W - 128 bytes */ + "ld 16, 0(%[data])\n\t" + "ld 17, 8(%[data])\n\t" + "ld 18, 16(%[data])\n\t" + "ld 19, 24(%[data])\n\t" + "ld 20, 32(%[data])\n\t" + "ld 21, 40(%[data])\n\t" + "ld 22, 48(%[data])\n\t" + "ld 23, 56(%[data])\n\t" + "ld 24, 64(%[data])\n\t" + "ld 25, 72(%[data])\n\t" + "ld 26, 80(%[data])\n\t" + "ld 27, 88(%[data])\n\t" + "ld 28, 96(%[data])\n\t" + "ld 29, 104(%[data])\n\t" + "ld 30, 112(%[data])\n\t" + "ld 31, 120(%[data])\n\t" + "li 0, 5\n\t" + "mtctr 0\n\t" + /* Start of 80 rounds */ + "\n" + "L_SHA512_transform_len_start_%=: \n\t" + /* Round 0 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 0(6)\n\t" + "add 15, 15, 16\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_0_%=\n\t" + /* Calc new W[0] */ + "rotrdi 0, 17, 1\n\t" + "rotrdi %[len], 17, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "rotrdi 0, 30, 19\n\t" + "rotrdi %[len], 30, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 16, 16, 0\n\t" + "add 16, 16, 25\n\t" + "\n" + "L_SHA512_transform_len_after_blk_0_%=: \n\t" + /* Round 1 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 8(6)\n\t" + "add 14, 14, 17\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_1_%=\n\t" + /* Calc new W[1] */ + "rotrdi 0, 18, 1\n\t" + "rotrdi %[len], 18, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "rotrdi 0, 31, 19\n\t" + "rotrdi %[len], 31, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 17, 17, 0\n\t" + "add 17, 17, 26\n\t" + "\n" + "L_SHA512_transform_len_after_blk_1_%=: \n\t" + /* Round 2 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 16(6)\n\t" + "add 12, 12, 18\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_2_%=\n\t" + /* Calc new W[2] */ + "rotrdi 0, 19, 1\n\t" + "rotrdi %[len], 19, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "rotrdi 0, 16, 19\n\t" + "rotrdi %[len], 16, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 18, 18, 0\n\t" + "add 18, 18, 27\n\t" + "\n" + "L_SHA512_transform_len_after_blk_2_%=: \n\t" + /* Round 3 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 24(6)\n\t" + "add 11, 11, 19\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_3_%=\n\t" + /* Calc new W[3] */ + "rotrdi 0, 20, 1\n\t" + "rotrdi %[len], 20, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "rotrdi 0, 17, 19\n\t" + "rotrdi %[len], 17, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 17, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 19, 19, 0\n\t" + "add 19, 19, 28\n\t" + "\n" + "L_SHA512_transform_len_after_blk_3_%=: \n\t" + /* Round 4 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 32(6)\n\t" + "add 10, 10, 20\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_4_%=\n\t" + /* Calc new W[4] */ + "rotrdi 0, 21, 1\n\t" + "rotrdi %[len], 21, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "rotrdi 0, 18, 19\n\t" + "rotrdi %[len], 18, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 18, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 20, 20, 0\n\t" + "add 20, 20, 29\n\t" + "\n" + "L_SHA512_transform_len_after_blk_4_%=: \n\t" + /* Round 5 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 40(6)\n\t" + "add 9, 9, 21\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_5_%=\n\t" + /* Calc new W[5] */ + "rotrdi 0, 22, 1\n\t" + "rotrdi %[len], 22, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "rotrdi 0, 19, 19\n\t" + "rotrdi %[len], 19, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 19, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 21, 21, 0\n\t" + "add 21, 21, 30\n\t" + "\n" + "L_SHA512_transform_len_after_blk_5_%=: \n\t" + /* Round 6 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 48(6)\n\t" + "add 8, 8, 22\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_6_%=\n\t" + /* Calc new W[6] */ + "rotrdi 0, 23, 1\n\t" + "rotrdi %[len], 23, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "rotrdi 0, 20, 19\n\t" + "rotrdi %[len], 20, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 20, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 22, 22, 0\n\t" + "add 22, 22, 31\n\t" + "\n" + "L_SHA512_transform_len_after_blk_6_%=: \n\t" + /* Round 7 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 56(6)\n\t" + "add 7, 7, 23\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_7_%=\n\t" + /* Calc new W[7] */ + "rotrdi 0, 24, 1\n\t" + "rotrdi %[len], 24, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "rotrdi 0, 21, 19\n\t" + "rotrdi %[len], 21, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 21, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 23, 23, 0\n\t" + "add 23, 23, 16\n\t" + "\n" + "L_SHA512_transform_len_after_blk_7_%=: \n\t" + /* Round 8 */ + "rotrdi 0, 11, 14\n\t" + "rotrdi %[len], 11, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, 11\n\t" + "xor 0, 0, 14\n\t" + "add 15, 15, 0\n\t" + "ld 0, 64(6)\n\t" + "add 15, 15, 24\n\t" + "add 15, 15, 0\n\t" + "add 10, 10, 15\n\t" + "rotrdi 0, 7, 28\n\t" + "rotrdi %[len], 7, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 15, 15, 0\n\t" + "xor %[len], 7, 8\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 8\n\t" + "add 15, 15, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_8_%=\n\t" + /* Calc new W[8] */ + "rotrdi 0, 25, 1\n\t" + "rotrdi %[len], 25, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "rotrdi 0, 22, 19\n\t" + "rotrdi %[len], 22, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 22, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 24, 24, 0\n\t" + "add 24, 24, 17\n\t" + "\n" + "L_SHA512_transform_len_after_blk_8_%=: \n\t" + /* Round 9 */ + "rotrdi 0, 10, 14\n\t" + "rotrdi %[len], 10, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, 10\n\t" + "xor 0, 0, 12\n\t" + "add 14, 14, 0\n\t" + "ld 0, 72(6)\n\t" + "add 14, 14, 25\n\t" + "add 14, 14, 0\n\t" + "add 9, 9, 14\n\t" + "rotrdi 0, 15, 28\n\t" + "rotrdi %[len], 15, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 14, 14, 0\n\t" + "xor %[len], 15, 7\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 7\n\t" + "add 14, 14, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_9_%=\n\t" + /* Calc new W[9] */ + "rotrdi 0, 26, 1\n\t" + "rotrdi %[len], 26, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "rotrdi 0, 23, 19\n\t" + "rotrdi %[len], 23, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 23, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 25, 25, 0\n\t" + "add 25, 25, 18\n\t" + "\n" + "L_SHA512_transform_len_after_blk_9_%=: \n\t" + /* Round 10 */ + "rotrdi 0, 9, 14\n\t" + "rotrdi %[len], 9, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, 9\n\t" + "xor 0, 0, 11\n\t" + "add 12, 12, 0\n\t" + "ld 0, 80(6)\n\t" + "add 12, 12, 26\n\t" + "add 12, 12, 0\n\t" + "add 8, 8, 12\n\t" + "rotrdi 0, 14, 28\n\t" + "rotrdi %[len], 14, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 12, 12, 0\n\t" + "xor %[len], 14, 15\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 15\n\t" + "add 12, 12, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_10_%=\n\t" + /* Calc new W[10] */ + "rotrdi 0, 27, 1\n\t" + "rotrdi %[len], 27, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "rotrdi 0, 24, 19\n\t" + "rotrdi %[len], 24, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 24, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 26, 26, 0\n\t" + "add 26, 26, 19\n\t" + "\n" + "L_SHA512_transform_len_after_blk_10_%=: \n\t" + /* Round 11 */ + "rotrdi 0, 8, 14\n\t" + "rotrdi %[len], 8, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, 8\n\t" + "xor 0, 0, 10\n\t" + "add 11, 11, 0\n\t" + "ld 0, 88(6)\n\t" + "add 11, 11, 27\n\t" + "add 11, 11, 0\n\t" + "add 7, 7, 11\n\t" + "rotrdi 0, 12, 28\n\t" + "rotrdi %[len], 12, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 11, 11, 0\n\t" + "xor %[len], 12, 14\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 14\n\t" + "add 11, 11, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_11_%=\n\t" + /* Calc new W[11] */ + "rotrdi 0, 28, 1\n\t" + "rotrdi %[len], 28, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "rotrdi 0, 25, 19\n\t" + "rotrdi %[len], 25, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 25, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 27, 27, 0\n\t" + "add 27, 27, 20\n\t" + "\n" + "L_SHA512_transform_len_after_blk_11_%=: \n\t" + /* Round 12 */ + "rotrdi 0, 7, 14\n\t" + "rotrdi %[len], 7, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 7, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor 0, 8, 9\n\t" + "and 0, 0, 7\n\t" + "xor 0, 0, 9\n\t" + "add 10, 10, 0\n\t" + "ld 0, 96(6)\n\t" + "add 10, 10, 28\n\t" + "add 10, 10, 0\n\t" + "add 15, 15, 10\n\t" + "rotrdi 0, 11, 28\n\t" + "rotrdi %[len], 11, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 11, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 10, 10, 0\n\t" + "xor %[len], 11, 12\n\t" + "xor 0, 12, 14\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 12\n\t" + "add 10, 10, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_12_%=\n\t" + /* Calc new W[12] */ + "rotrdi 0, 29, 1\n\t" + "rotrdi %[len], 29, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "rotrdi 0, 26, 19\n\t" + "rotrdi %[len], 26, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 26, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 28, 28, 0\n\t" + "add 28, 28, 21\n\t" + "\n" + "L_SHA512_transform_len_after_blk_12_%=: \n\t" + /* Round 13 */ + "rotrdi 0, 15, 14\n\t" + "rotrdi %[len], 15, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 15, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor 0, 7, 8\n\t" + "and 0, 0, 15\n\t" + "xor 0, 0, 8\n\t" + "add 9, 9, 0\n\t" + "ld 0, 104(6)\n\t" + "add 9, 9, 29\n\t" + "add 9, 9, 0\n\t" + "add 14, 14, 9\n\t" + "rotrdi 0, 10, 28\n\t" + "rotrdi %[len], 10, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 10, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 9, 9, 0\n\t" + "xor %[len], 10, 11\n\t" + "xor 0, 11, 12\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 11\n\t" + "add 9, 9, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_13_%=\n\t" + /* Calc new W[13] */ + "rotrdi 0, 30, 1\n\t" + "rotrdi %[len], 30, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 30, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "rotrdi 0, 27, 19\n\t" + "rotrdi %[len], 27, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 27, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 29, 29, 0\n\t" + "add 29, 29, 22\n\t" + "\n" + "L_SHA512_transform_len_after_blk_13_%=: \n\t" + /* Round 14 */ + "rotrdi 0, 14, 14\n\t" + "rotrdi %[len], 14, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 14, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor 0, 15, 7\n\t" + "and 0, 0, 14\n\t" + "xor 0, 0, 7\n\t" + "add 8, 8, 0\n\t" + "ld 0, 112(6)\n\t" + "add 8, 8, 30\n\t" + "add 8, 8, 0\n\t" + "add 12, 12, 8\n\t" + "rotrdi 0, 9, 28\n\t" + "rotrdi %[len], 9, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 9, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 8, 8, 0\n\t" + "xor %[len], 9, 10\n\t" + "xor 0, 10, 11\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 10\n\t" + "add 8, 8, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_14_%=\n\t" + /* Calc new W[14] */ + "rotrdi 0, 31, 1\n\t" + "rotrdi %[len], 31, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 31, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "rotrdi 0, 28, 19\n\t" + "rotrdi %[len], 28, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 28, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 30, 30, 0\n\t" + "add 30, 30, 23\n\t" + "\n" + "L_SHA512_transform_len_after_blk_14_%=: \n\t" + /* Round 15 */ + "rotrdi 0, 12, 14\n\t" + "rotrdi %[len], 12, 18\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 12, 41\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor 0, 14, 15\n\t" + "and 0, 0, 12\n\t" + "xor 0, 0, 15\n\t" + "add 7, 7, 0\n\t" + "ld 0, 120(6)\n\t" + "add 7, 7, 31\n\t" + "add 7, 7, 0\n\t" + "add 11, 11, 7\n\t" + "rotrdi 0, 8, 28\n\t" + "rotrdi %[len], 8, 34\n\t" + "xor 0, 0, %[len]\n\t" + "rotrdi %[len], 8, 39\n\t" + "xor 0, 0, %[len]\n\t" + "add 7, 7, 0\n\t" + "xor %[len], 8, 9\n\t" + "xor 0, 9, 10\n\t" + "and 0, 0, %[len]\n\t" + "xor 0, 0, 9\n\t" + "add 7, 7, 0\n\t" + "mfctr %[len]\n\t" + "cmpwi 0, %[len], 1\n\t" + "beq 0, L_SHA512_transform_len_after_blk_15_%=\n\t" + /* Calc new W[15] */ + "rotrdi 0, 16, 1\n\t" + "rotrdi %[len], 16, 8\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 16, 7\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "rotrdi 0, 29, 19\n\t" + "rotrdi %[len], 29, 61\n\t" + "xor 0, 0, %[len]\n\t" + "srdi %[len], 29, 6\n\t" + "xor 0, 0, %[len]\n\t" + "add 31, 31, 0\n\t" + "add 31, 31, 24\n\t" + "\n" + "L_SHA512_transform_len_after_blk_15_%=: \n\t" + "addi 6, 6, 0x80\n\t" + "bdnz L_SHA512_transform_len_start_%=\n\t" + "subi 6, 6, 0x280\n\t" + /* Add in digest from start */ + "ld 0, 0(%[sha512])\n\t" + "ld %[len], 8(%[sha512])\n\t" + "add 7, 7, 0\n\t" + "add 8, 8, %[len]\n\t" + "ld 0, 16(%[sha512])\n\t" + "ld %[len], 24(%[sha512])\n\t" + "add 9, 9, 0\n\t" + "add 10, 10, %[len]\n\t" + "ld 0, 32(%[sha512])\n\t" + "ld %[len], 40(%[sha512])\n\t" + "add 11, 11, 0\n\t" + "add 12, 12, %[len]\n\t" + "ld 0, 48(%[sha512])\n\t" + "ld %[len], 56(%[sha512])\n\t" + "add 14, 14, 0\n\t" + "add 15, 15, %[len]\n\t" + "std 7, 0(%[sha512])\n\t" + "std 8, 8(%[sha512])\n\t" + "std 9, 16(%[sha512])\n\t" + "std 10, 24(%[sha512])\n\t" + "std 11, 32(%[sha512])\n\t" + "std 12, 40(%[sha512])\n\t" + "std 14, 48(%[sha512])\n\t" + "std 15, 56(%[sha512])\n\t" + "lwz %[len], 0(1)\n\t" + "mtctr %[len]\n\t" + "subi %[len], %[len], 1\n\t" + "addi %[data], %[data], 0x80\n\t" + "stw %[len], 0(1)\n\t" + "bdnz L_SHA512_transform_len_begin_%=\n\t" + "addi 1, 1, 16\n\t" +#endif /* WOLFSSL_PPC64_ASM_SMALL */ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len), + [L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c) + : + : "memory", "cc", "0", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30", "31" +#else + : + : [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len), + [L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k_c) + : "memory", "cc", "0", "6", "7", "8", "9", "10", "11", "12", "14", "15", + "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", + "27", "28", "29", "30", "31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#ifdef WOLFSSL_PPC64_ASM_CRYPTO +static const word64 L_SHA512_crypto_k[] = { + 0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, + 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, + 0x3956c25bf348b538UL, 0x59f111f1b605d019UL, + 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, + 0xd807aa98a3030242UL, 0x12835b0145706fbeUL, + 0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, + 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, + 0x9bdc06a725c71235UL, 0xc19bf174cf692694UL, + 0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL, + 0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL, + 0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL, + 0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL, + 0x983e5152ee66dfabUL, 0xa831c66d2db43210UL, + 0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL, + 0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL, + 0x06ca6351e003826fUL, 0x142929670a0e6e70UL, + 0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL, + 0x4d2c6dfc5ac42aedUL, 0x53380d139d95b3dfUL, + 0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL, + 0x81c2c92e47edaee6UL, 0x92722c851482353bUL, + 0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL, + 0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL, + 0xd192e819d6ef5218UL, 0xd69906245565a910UL, + 0xf40e35855771202aUL, 0x106aa07032bbd1b8UL, + 0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL, + 0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL, + 0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL, + 0x5b9cca4f7763e373UL, 0x682e6ff3d6b2b8a3UL, + 0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL, + 0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL, + 0x90befffa23631e28UL, 0xa4506cebde82bde9UL, + 0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL, + 0xca273eceea26619cUL, 0xd186b8c721c0c207UL, + 0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL, + 0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL, + 0x113f9804bef90daeUL, 0x1b710b35131c471bUL, + 0x28db77f523047d84UL, 0x32caab7b40c72493UL, + 0x3c9ebe0a15c9bebcUL, 0x431d67c49c100d4cUL, + 0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL, + 0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL, + 0x0000000000000000UL, 0x0000000000000000UL, +}; + +__attribute__((target("cpu=power8"))) +void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data, + word32 len); +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG +void Transform_Sha512_Len_crypto(wc_Sha512* sha512_p, const byte* data_p, + word32 len_p) +#else +void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data, + word32 len) +#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */ +{ +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + register wc_Sha512* sha512 asm ("3") = (wc_Sha512*)sha512_p; + register const byte* data asm ("4") = (const byte*)data_p; + register word32 len asm ("5") = (word32)len_p; + register word64* L_SHA512_crypto_k_c asm ("6") = + (word64*)&L_SHA512_crypto_k; +#else + register word64* L_SHA512_crypto_k_c = (word64*)&L_SHA512_crypto_k; +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + + __asm__ __volatile__ ( + "srdi %[len], %[len], 7\n\t" + "mtctr %[len]\n\t" + "li 8, 16\n\t" + "li 9, 32\n\t" + "li 10, 48\n\t" + "mr 6, %[L_SHA512_crypto_k]\n\t" + /* Start of loop processing a block */ + "\n" + "L_SHA512_crypto_begin_%=: \n\t" + /* Load state, one doubleword per vector register */ + "lxvd2x 32, 0, %[sha512]\n\t" + "lxvd2x 34, 8, %[sha512]\n\t" + "lxvd2x 36, 9, %[sha512]\n\t" + "lxvd2x 38, 10, %[sha512]\n\t" + "vsldoi 1, 0, 0, 8\n\t" + "vsldoi 3, 2, 2, 8\n\t" + "vsldoi 5, 4, 4, 8\n\t" + "vsldoi 7, 6, 6, 8\n\t" + /* Load message, one doubleword per vector register */ + "lxvd2x 48, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 17, 16, 16, 8\n\t" + "lxvd2x 50, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 19, 18, 18, 8\n\t" + "lxvd2x 52, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 21, 20, 20, 8\n\t" + "lxvd2x 54, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 23, 22, 22, 8\n\t" + "lxvd2x 56, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 25, 24, 24, 8\n\t" + "lxvd2x 58, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 27, 26, 26, 8\n\t" + "lxvd2x 60, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 29, 28, 28, 8\n\t" + "lxvd2x 62, 0, %[data]\n\t" + "addi %[data], %[data], 16\n\t" + "vsldoi 31, 30, 30, 8\n\t" + /* Preload first key */ + "lxvd2x 40, 0, 6\n\t" + "li 7, 8\n\t" + /* 80 rounds */ + "vaddudm 10, 8, 16\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vaddudm 10, 8, 17\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vaddudm 10, 8, 18\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vaddudm 10, 8, 19\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vaddudm 10, 8, 20\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vaddudm 10, 8, 21\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vaddudm 10, 8, 22\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vaddudm 10, 8, 23\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vaddudm 10, 8, 24\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vaddudm 10, 8, 25\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vaddudm 10, 8, 26\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vaddudm 10, 8, 27\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vaddudm 10, 8, 28\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vaddudm 10, 8, 29\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vaddudm 10, 8, 30\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vaddudm 10, 8, 31\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 30, 0, 15\n\t" + "vshasigmad 14, 17, 0, 0\n\t" + "vaddudm 16, 16, 15\n\t" + "vaddudm 16, 16, 14\n\t" + "vaddudm 16, 16, 25\n\t" + "vaddudm 10, 8, 16\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 31, 0, 15\n\t" + "vshasigmad 14, 18, 0, 0\n\t" + "vaddudm 17, 17, 15\n\t" + "vaddudm 17, 17, 14\n\t" + "vaddudm 17, 17, 26\n\t" + "vaddudm 10, 8, 17\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 16, 0, 15\n\t" + "vshasigmad 14, 19, 0, 0\n\t" + "vaddudm 18, 18, 15\n\t" + "vaddudm 18, 18, 14\n\t" + "vaddudm 18, 18, 27\n\t" + "vaddudm 10, 8, 18\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 17, 0, 15\n\t" + "vshasigmad 14, 20, 0, 0\n\t" + "vaddudm 19, 19, 15\n\t" + "vaddudm 19, 19, 14\n\t" + "vaddudm 19, 19, 28\n\t" + "vaddudm 10, 8, 19\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 18, 0, 15\n\t" + "vshasigmad 14, 21, 0, 0\n\t" + "vaddudm 20, 20, 15\n\t" + "vaddudm 20, 20, 14\n\t" + "vaddudm 20, 20, 29\n\t" + "vaddudm 10, 8, 20\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 19, 0, 15\n\t" + "vshasigmad 14, 22, 0, 0\n\t" + "vaddudm 21, 21, 15\n\t" + "vaddudm 21, 21, 14\n\t" + "vaddudm 21, 21, 30\n\t" + "vaddudm 10, 8, 21\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 20, 0, 15\n\t" + "vshasigmad 14, 23, 0, 0\n\t" + "vaddudm 22, 22, 15\n\t" + "vaddudm 22, 22, 14\n\t" + "vaddudm 22, 22, 31\n\t" + "vaddudm 10, 8, 22\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 21, 0, 15\n\t" + "vshasigmad 14, 24, 0, 0\n\t" + "vaddudm 23, 23, 15\n\t" + "vaddudm 23, 23, 14\n\t" + "vaddudm 23, 23, 16\n\t" + "vaddudm 10, 8, 23\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 22, 0, 15\n\t" + "vshasigmad 14, 25, 0, 0\n\t" + "vaddudm 24, 24, 15\n\t" + "vaddudm 24, 24, 14\n\t" + "vaddudm 24, 24, 17\n\t" + "vaddudm 10, 8, 24\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 23, 0, 15\n\t" + "vshasigmad 14, 26, 0, 0\n\t" + "vaddudm 25, 25, 15\n\t" + "vaddudm 25, 25, 14\n\t" + "vaddudm 25, 25, 18\n\t" + "vaddudm 10, 8, 25\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 24, 0, 15\n\t" + "vshasigmad 14, 27, 0, 0\n\t" + "vaddudm 26, 26, 15\n\t" + "vaddudm 26, 26, 14\n\t" + "vaddudm 26, 26, 19\n\t" + "vaddudm 10, 8, 26\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 25, 0, 15\n\t" + "vshasigmad 14, 28, 0, 0\n\t" + "vaddudm 27, 27, 15\n\t" + "vaddudm 27, 27, 14\n\t" + "vaddudm 27, 27, 20\n\t" + "vaddudm 10, 8, 27\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 26, 0, 15\n\t" + "vshasigmad 14, 29, 0, 0\n\t" + "vaddudm 28, 28, 15\n\t" + "vaddudm 28, 28, 14\n\t" + "vaddudm 28, 28, 21\n\t" + "vaddudm 10, 8, 28\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 27, 0, 15\n\t" + "vshasigmad 14, 30, 0, 0\n\t" + "vaddudm 29, 29, 15\n\t" + "vaddudm 29, 29, 14\n\t" + "vaddudm 29, 29, 22\n\t" + "vaddudm 10, 8, 29\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 28, 0, 15\n\t" + "vshasigmad 14, 31, 0, 0\n\t" + "vaddudm 30, 30, 15\n\t" + "vaddudm 30, 30, 14\n\t" + "vaddudm 30, 30, 23\n\t" + "vaddudm 10, 8, 30\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 29, 0, 15\n\t" + "vshasigmad 14, 16, 0, 0\n\t" + "vaddudm 31, 31, 15\n\t" + "vaddudm 31, 31, 14\n\t" + "vaddudm 31, 31, 24\n\t" + "vaddudm 10, 8, 31\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 30, 0, 15\n\t" + "vshasigmad 14, 17, 0, 0\n\t" + "vaddudm 16, 16, 15\n\t" + "vaddudm 16, 16, 14\n\t" + "vaddudm 16, 16, 25\n\t" + "vaddudm 10, 8, 16\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 31, 0, 15\n\t" + "vshasigmad 14, 18, 0, 0\n\t" + "vaddudm 17, 17, 15\n\t" + "vaddudm 17, 17, 14\n\t" + "vaddudm 17, 17, 26\n\t" + "vaddudm 10, 8, 17\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 16, 0, 15\n\t" + "vshasigmad 14, 19, 0, 0\n\t" + "vaddudm 18, 18, 15\n\t" + "vaddudm 18, 18, 14\n\t" + "vaddudm 18, 18, 27\n\t" + "vaddudm 10, 8, 18\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 17, 0, 15\n\t" + "vshasigmad 14, 20, 0, 0\n\t" + "vaddudm 19, 19, 15\n\t" + "vaddudm 19, 19, 14\n\t" + "vaddudm 19, 19, 28\n\t" + "vaddudm 10, 8, 19\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 18, 0, 15\n\t" + "vshasigmad 14, 21, 0, 0\n\t" + "vaddudm 20, 20, 15\n\t" + "vaddudm 20, 20, 14\n\t" + "vaddudm 20, 20, 29\n\t" + "vaddudm 10, 8, 20\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 19, 0, 15\n\t" + "vshasigmad 14, 22, 0, 0\n\t" + "vaddudm 21, 21, 15\n\t" + "vaddudm 21, 21, 14\n\t" + "vaddudm 21, 21, 30\n\t" + "vaddudm 10, 8, 21\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 20, 0, 15\n\t" + "vshasigmad 14, 23, 0, 0\n\t" + "vaddudm 22, 22, 15\n\t" + "vaddudm 22, 22, 14\n\t" + "vaddudm 22, 22, 31\n\t" + "vaddudm 10, 8, 22\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 21, 0, 15\n\t" + "vshasigmad 14, 24, 0, 0\n\t" + "vaddudm 23, 23, 15\n\t" + "vaddudm 23, 23, 14\n\t" + "vaddudm 23, 23, 16\n\t" + "vaddudm 10, 8, 23\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 22, 0, 15\n\t" + "vshasigmad 14, 25, 0, 0\n\t" + "vaddudm 24, 24, 15\n\t" + "vaddudm 24, 24, 14\n\t" + "vaddudm 24, 24, 17\n\t" + "vaddudm 10, 8, 24\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 23, 0, 15\n\t" + "vshasigmad 14, 26, 0, 0\n\t" + "vaddudm 25, 25, 15\n\t" + "vaddudm 25, 25, 14\n\t" + "vaddudm 25, 25, 18\n\t" + "vaddudm 10, 8, 25\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 24, 0, 15\n\t" + "vshasigmad 14, 27, 0, 0\n\t" + "vaddudm 26, 26, 15\n\t" + "vaddudm 26, 26, 14\n\t" + "vaddudm 26, 26, 19\n\t" + "vaddudm 10, 8, 26\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 25, 0, 15\n\t" + "vshasigmad 14, 28, 0, 0\n\t" + "vaddudm 27, 27, 15\n\t" + "vaddudm 27, 27, 14\n\t" + "vaddudm 27, 27, 20\n\t" + "vaddudm 10, 8, 27\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 26, 0, 15\n\t" + "vshasigmad 14, 29, 0, 0\n\t" + "vaddudm 28, 28, 15\n\t" + "vaddudm 28, 28, 14\n\t" + "vaddudm 28, 28, 21\n\t" + "vaddudm 10, 8, 28\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 27, 0, 15\n\t" + "vshasigmad 14, 30, 0, 0\n\t" + "vaddudm 29, 29, 15\n\t" + "vaddudm 29, 29, 14\n\t" + "vaddudm 29, 29, 22\n\t" + "vaddudm 10, 8, 29\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 28, 0, 15\n\t" + "vshasigmad 14, 31, 0, 0\n\t" + "vaddudm 30, 30, 15\n\t" + "vaddudm 30, 30, 14\n\t" + "vaddudm 30, 30, 23\n\t" + "vaddudm 10, 8, 30\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 29, 0, 15\n\t" + "vshasigmad 14, 16, 0, 0\n\t" + "vaddudm 31, 31, 15\n\t" + "vaddudm 31, 31, 14\n\t" + "vaddudm 31, 31, 24\n\t" + "vaddudm 10, 8, 31\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 30, 0, 15\n\t" + "vshasigmad 14, 17, 0, 0\n\t" + "vaddudm 16, 16, 15\n\t" + "vaddudm 16, 16, 14\n\t" + "vaddudm 16, 16, 25\n\t" + "vaddudm 10, 8, 16\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 31, 0, 15\n\t" + "vshasigmad 14, 18, 0, 0\n\t" + "vaddudm 17, 17, 15\n\t" + "vaddudm 17, 17, 14\n\t" + "vaddudm 17, 17, 26\n\t" + "vaddudm 10, 8, 17\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 16, 0, 15\n\t" + "vshasigmad 14, 19, 0, 0\n\t" + "vaddudm 18, 18, 15\n\t" + "vaddudm 18, 18, 14\n\t" + "vaddudm 18, 18, 27\n\t" + "vaddudm 10, 8, 18\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 17, 0, 15\n\t" + "vshasigmad 14, 20, 0, 0\n\t" + "vaddudm 19, 19, 15\n\t" + "vaddudm 19, 19, 14\n\t" + "vaddudm 19, 19, 28\n\t" + "vaddudm 10, 8, 19\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 18, 0, 15\n\t" + "vshasigmad 14, 21, 0, 0\n\t" + "vaddudm 20, 20, 15\n\t" + "vaddudm 20, 20, 14\n\t" + "vaddudm 20, 20, 29\n\t" + "vaddudm 10, 8, 20\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 19, 0, 15\n\t" + "vshasigmad 14, 22, 0, 0\n\t" + "vaddudm 21, 21, 15\n\t" + "vaddudm 21, 21, 14\n\t" + "vaddudm 21, 21, 30\n\t" + "vaddudm 10, 8, 21\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 20, 0, 15\n\t" + "vshasigmad 14, 23, 0, 0\n\t" + "vaddudm 22, 22, 15\n\t" + "vaddudm 22, 22, 14\n\t" + "vaddudm 22, 22, 31\n\t" + "vaddudm 10, 8, 22\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 21, 0, 15\n\t" + "vshasigmad 14, 24, 0, 0\n\t" + "vaddudm 23, 23, 15\n\t" + "vaddudm 23, 23, 14\n\t" + "vaddudm 23, 23, 16\n\t" + "vaddudm 10, 8, 23\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 22, 0, 15\n\t" + "vshasigmad 14, 25, 0, 0\n\t" + "vaddudm 24, 24, 15\n\t" + "vaddudm 24, 24, 14\n\t" + "vaddudm 24, 24, 17\n\t" + "vaddudm 10, 8, 24\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 23, 0, 15\n\t" + "vshasigmad 14, 26, 0, 0\n\t" + "vaddudm 25, 25, 15\n\t" + "vaddudm 25, 25, 14\n\t" + "vaddudm 25, 25, 18\n\t" + "vaddudm 10, 8, 25\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 24, 0, 15\n\t" + "vshasigmad 14, 27, 0, 0\n\t" + "vaddudm 26, 26, 15\n\t" + "vaddudm 26, 26, 14\n\t" + "vaddudm 26, 26, 19\n\t" + "vaddudm 10, 8, 26\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 25, 0, 15\n\t" + "vshasigmad 14, 28, 0, 0\n\t" + "vaddudm 27, 27, 15\n\t" + "vaddudm 27, 27, 14\n\t" + "vaddudm 27, 27, 20\n\t" + "vaddudm 10, 8, 27\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 26, 0, 15\n\t" + "vshasigmad 14, 29, 0, 0\n\t" + "vaddudm 28, 28, 15\n\t" + "vaddudm 28, 28, 14\n\t" + "vaddudm 28, 28, 21\n\t" + "vaddudm 10, 8, 28\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 27, 0, 15\n\t" + "vshasigmad 14, 30, 0, 0\n\t" + "vaddudm 29, 29, 15\n\t" + "vaddudm 29, 29, 14\n\t" + "vaddudm 29, 29, 22\n\t" + "vaddudm 10, 8, 29\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 28, 0, 15\n\t" + "vshasigmad 14, 31, 0, 0\n\t" + "vaddudm 30, 30, 15\n\t" + "vaddudm 30, 30, 14\n\t" + "vaddudm 30, 30, 23\n\t" + "vaddudm 10, 8, 30\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 29, 0, 15\n\t" + "vshasigmad 14, 16, 0, 0\n\t" + "vaddudm 31, 31, 15\n\t" + "vaddudm 31, 31, 14\n\t" + "vaddudm 31, 31, 24\n\t" + "vaddudm 10, 8, 31\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 30, 0, 15\n\t" + "vshasigmad 14, 17, 0, 0\n\t" + "vaddudm 16, 16, 15\n\t" + "vaddudm 16, 16, 14\n\t" + "vaddudm 16, 16, 25\n\t" + "vaddudm 10, 8, 16\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 31, 0, 15\n\t" + "vshasigmad 14, 18, 0, 0\n\t" + "vaddudm 17, 17, 15\n\t" + "vaddudm 17, 17, 14\n\t" + "vaddudm 17, 17, 26\n\t" + "vaddudm 10, 8, 17\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 16, 0, 15\n\t" + "vshasigmad 14, 19, 0, 0\n\t" + "vaddudm 18, 18, 15\n\t" + "vaddudm 18, 18, 14\n\t" + "vaddudm 18, 18, 27\n\t" + "vaddudm 10, 8, 18\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 17, 0, 15\n\t" + "vshasigmad 14, 20, 0, 0\n\t" + "vaddudm 19, 19, 15\n\t" + "vaddudm 19, 19, 14\n\t" + "vaddudm 19, 19, 28\n\t" + "vaddudm 10, 8, 19\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 18, 0, 15\n\t" + "vshasigmad 14, 21, 0, 0\n\t" + "vaddudm 20, 20, 15\n\t" + "vaddudm 20, 20, 14\n\t" + "vaddudm 20, 20, 29\n\t" + "vaddudm 10, 8, 20\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 19, 0, 15\n\t" + "vshasigmad 14, 22, 0, 0\n\t" + "vaddudm 21, 21, 15\n\t" + "vaddudm 21, 21, 14\n\t" + "vaddudm 21, 21, 30\n\t" + "vaddudm 10, 8, 21\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 20, 0, 15\n\t" + "vshasigmad 14, 23, 0, 0\n\t" + "vaddudm 22, 22, 15\n\t" + "vaddudm 22, 22, 14\n\t" + "vaddudm 22, 22, 31\n\t" + "vaddudm 10, 8, 22\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 21, 0, 15\n\t" + "vshasigmad 14, 24, 0, 0\n\t" + "vaddudm 23, 23, 15\n\t" + "vaddudm 23, 23, 14\n\t" + "vaddudm 23, 23, 16\n\t" + "vaddudm 10, 8, 23\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + "vshasigmad 15, 22, 0, 15\n\t" + "vshasigmad 14, 25, 0, 0\n\t" + "vaddudm 24, 24, 15\n\t" + "vaddudm 24, 24, 14\n\t" + "vaddudm 24, 24, 17\n\t" + "vaddudm 10, 8, 24\n\t" + "vaddudm 13, 7, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 3, 7\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 4, 1, 15\n\t" + "vshasigmad 14, 0, 1, 0\n\t" + "vxor 12, 1, 2\n\t" + "vsel 9, 6, 5, 4\n\t" + "vsel 12, 2, 0, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 7, 15, 14\n\t" + "vaddudm 3, 9, 15\n\t" + "vaddudm 7, 7, 12\n\t" + "vshasigmad 15, 23, 0, 15\n\t" + "vshasigmad 14, 26, 0, 0\n\t" + "vaddudm 25, 25, 15\n\t" + "vaddudm 25, 25, 14\n\t" + "vaddudm 25, 25, 18\n\t" + "vaddudm 10, 8, 25\n\t" + "vaddudm 13, 6, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 2, 6\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 3, 1, 15\n\t" + "vshasigmad 14, 7, 1, 0\n\t" + "vxor 12, 0, 1\n\t" + "vsel 9, 5, 4, 3\n\t" + "vsel 12, 1, 7, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 6, 15, 14\n\t" + "vaddudm 2, 9, 15\n\t" + "vaddudm 6, 6, 12\n\t" + "vshasigmad 15, 24, 0, 15\n\t" + "vshasigmad 14, 27, 0, 0\n\t" + "vaddudm 26, 26, 15\n\t" + "vaddudm 26, 26, 14\n\t" + "vaddudm 26, 26, 19\n\t" + "vaddudm 10, 8, 26\n\t" + "vaddudm 13, 5, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 1, 5\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 2, 1, 15\n\t" + "vshasigmad 14, 6, 1, 0\n\t" + "vxor 12, 7, 0\n\t" + "vsel 9, 4, 3, 2\n\t" + "vsel 12, 0, 6, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 5, 15, 14\n\t" + "vaddudm 1, 9, 15\n\t" + "vaddudm 5, 5, 12\n\t" + "vshasigmad 15, 25, 0, 15\n\t" + "vshasigmad 14, 28, 0, 0\n\t" + "vaddudm 27, 27, 15\n\t" + "vaddudm 27, 27, 14\n\t" + "vaddudm 27, 27, 20\n\t" + "vaddudm 10, 8, 27\n\t" + "vaddudm 13, 4, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 0, 4\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 1, 1, 15\n\t" + "vshasigmad 14, 5, 1, 0\n\t" + "vxor 12, 6, 7\n\t" + "vsel 9, 3, 2, 1\n\t" + "vsel 12, 7, 5, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 4, 15, 14\n\t" + "vaddudm 0, 9, 15\n\t" + "vaddudm 4, 4, 12\n\t" + "vshasigmad 15, 26, 0, 15\n\t" + "vshasigmad 14, 29, 0, 0\n\t" + "vaddudm 28, 28, 15\n\t" + "vaddudm 28, 28, 14\n\t" + "vaddudm 28, 28, 21\n\t" + "vaddudm 10, 8, 28\n\t" + "vaddudm 13, 3, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 7, 3\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 0, 1, 15\n\t" + "vshasigmad 14, 4, 1, 0\n\t" + "vxor 12, 5, 6\n\t" + "vsel 9, 2, 1, 0\n\t" + "vsel 12, 6, 4, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 3, 15, 14\n\t" + "vaddudm 7, 9, 15\n\t" + "vaddudm 3, 3, 12\n\t" + "vshasigmad 15, 27, 0, 15\n\t" + "vshasigmad 14, 30, 0, 0\n\t" + "vaddudm 29, 29, 15\n\t" + "vaddudm 29, 29, 14\n\t" + "vaddudm 29, 29, 22\n\t" + "vaddudm 10, 8, 29\n\t" + "vaddudm 13, 2, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 6, 2\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 7, 1, 15\n\t" + "vshasigmad 14, 3, 1, 0\n\t" + "vxor 12, 4, 5\n\t" + "vsel 9, 1, 0, 7\n\t" + "vsel 12, 5, 3, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 2, 15, 14\n\t" + "vaddudm 6, 9, 15\n\t" + "vaddudm 2, 2, 12\n\t" + "vshasigmad 15, 28, 0, 15\n\t" + "vshasigmad 14, 31, 0, 0\n\t" + "vaddudm 30, 30, 15\n\t" + "vaddudm 30, 30, 14\n\t" + "vaddudm 30, 30, 23\n\t" + "vaddudm 10, 8, 30\n\t" + "vaddudm 13, 1, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 5, 1\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 6, 1, 15\n\t" + "vshasigmad 14, 2, 1, 0\n\t" + "vxor 12, 3, 4\n\t" + "vsel 9, 0, 7, 6\n\t" + "vsel 12, 4, 2, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 1, 15, 14\n\t" + "vaddudm 5, 9, 15\n\t" + "vaddudm 1, 1, 12\n\t" + "vshasigmad 15, 29, 0, 15\n\t" + "vshasigmad 14, 16, 0, 0\n\t" + "vaddudm 31, 31, 15\n\t" + "vaddudm 31, 31, 14\n\t" + "vaddudm 31, 31, 24\n\t" + "vaddudm 10, 8, 31\n\t" + "vaddudm 13, 0, 10\n\t" + "lxvd2x 40, 7, 6\n\t" + "addi 7, 7, 8\n\t" + "vaddudm 11, 4, 0\n\t" + "vaddudm 11, 11, 10\n\t" + "vshasigmad 15, 5, 1, 15\n\t" + "vshasigmad 14, 1, 1, 0\n\t" + "vxor 12, 2, 3\n\t" + "vsel 9, 7, 6, 5\n\t" + "vsel 12, 3, 1, 12\n\t" + "vaddudm 13, 13, 9\n\t" + "vaddudm 12, 12, 13\n\t" + "vaddudm 9, 9, 11\n\t" + "vaddudm 0, 15, 14\n\t" + "vaddudm 4, 9, 15\n\t" + "vaddudm 0, 0, 12\n\t" + /* Repack state, add original digest and store */ + "xxmrghd 32, 32, 33\n\t" + "xxmrghd 34, 34, 35\n\t" + "xxmrghd 36, 36, 37\n\t" + "xxmrghd 38, 38, 39\n\t" + "lxvd2x 41, 0, %[sha512]\n\t" + "lxvd2x 42, 8, %[sha512]\n\t" + "lxvd2x 43, 9, %[sha512]\n\t" + "lxvd2x 44, 10, %[sha512]\n\t" + "vaddudm 0, 0, 9\n\t" + "vaddudm 2, 2, 10\n\t" + "vaddudm 4, 4, 11\n\t" + "vaddudm 6, 6, 12\n\t" + "stxvd2x 32, 0, %[sha512]\n\t" + "stxvd2x 34, 8, %[sha512]\n\t" + "stxvd2x 36, 9, %[sha512]\n\t" + "stxvd2x 38, 10, %[sha512]\n\t" + "bdnz L_SHA512_crypto_begin_%=\n\t" +#ifndef WOLFSSL_NO_VAR_ASSIGN_REG + : [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len), + [L_SHA512_crypto_k] "+r" (L_SHA512_crypto_k_c) + : + : "memory", "cc", "0", "7", "8", "9", "10", "v0", "v1", "v2", "v3", + "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", + "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", + "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#else + : + : [sha512] "r" (sha512), [data] "r" (data), [len] "r" (len), + [L_SHA512_crypto_k] "r" (L_SHA512_crypto_k_c) + : "memory", "cc", "0", "6", "7", "8", "9", "10", "v0", "v1", "v2", "v3", + "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", + "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", + "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" +#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */ + ); +} + +#endif /* WOLFSSL_PPC64_ASM_CRYPTO */ +#endif /* WOLFSSL_SHA512 || WOLFSSL_SHA384 */ +#endif /* WOLFSSL_PPC64_ASM */ + +#endif /* WOLFSSL_PPC64_ASM_INLINE */ diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c index 047c57dade8..de1ad3c640c 100644 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -126,6 +126,7 @@ on the specific device platform. (defined(WOLFSSL_HAVE_PSA) && !defined(WOLFSSL_PSA_NO_HASH)) || \ defined(WOLFSSL_RENESAS_RX64_HASH) || \ defined(WOLFSSL_PPC32_ASM) || \ + defined(WOLFSSL_PPC64_ASM) || \ defined(WOLFSSL_ARMASM) || \ (defined(WOLFSSL_X86_64_BUILD) && defined(USE_INTEL_SPEEDUP) && \ (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))) @@ -242,6 +243,8 @@ on the specific device platform. #define SHA256_UPDATE_REV_BYTES(ctx) 0 /* reverse not needed on update */ #elif defined(WOLFSSL_PPC32_ASM) #define SHA256_UPDATE_REV_BYTES(ctx) 0 +#elif defined(WOLFSSL_PPC64_ASM) + #define SHA256_UPDATE_REV_BYTES(ctx) 0 #elif defined(WOLFSSL_ARMASM) #define SHA256_UPDATE_REV_BYTES(ctx) 0 #else @@ -1121,11 +1124,47 @@ static int InitSha256(wc_Sha256* sha256) #elif defined(WOLFSSL_RENESAS_RX64_HASH) /* implemented in wolfcrypt/src/port/Renesas/renesas_rx64_hw_sha.c */ -#elif defined(WOLFSSL_PPC32_ASM) && !defined(WOLF_CRYPTO_CB_ONLY_SHA256) +#elif (defined(WOLFSSL_PPC32_ASM) || defined(WOLFSSL_PPC64_ASM)) && \ + !defined(WOLF_CRYPTO_CB_ONLY_SHA256) extern void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len); +#if defined(WOLFSSL_PPC64_ASM) && defined(WOLFSSL_PPC64_ASM_CRYPTO) +/* POWER8+ has a vector SHA-256 sigma instruction (vshasigmaw). When built + * in, select that implementation at run time if the CPU supports it. + * + * A run-time flag with direct calls is used rather than a function pointer: + * an indirect call would require an ELFv1 function descriptor, whereas direct + * calls work under both the ELFv1 and ELFv2 ABIs. */ +extern void Transform_Sha256_Len_crypto(wc_Sha256* sha256, const byte* data, + word32 len); + +/* -1 = not yet determined, 0 = base, 1 = vector-crypto */ +static int sha256_use_crypto = -1; + +/* Detect CPU support via the central cpuid module. Idempotent - safe to call + * from multiple threads as all callers compute the same value. */ +static void Sha256_SetTransform(void) +{ + if (sha256_use_crypto < 0) { + sha256_use_crypto = IS_PPC64_VEC_CRYPTO(cpuid_get_flags()) != 0; + } +} + +static WC_INLINE void SHA256_TRANSFORM_LEN(wc_Sha256* sha256, const byte* data, + word32 len) +{ + if (sha256_use_crypto) + Transform_Sha256_Len_crypto(sha256, data, len); + else + Transform_Sha256_Len(sha256, data, len); +} +#else +#define Sha256_SetTransform() WC_DO_NOTHING +#define SHA256_TRANSFORM_LEN(s, d, l) Transform_Sha256_Len((s), (d), (l)) +#endif + int wc_InitSha256_ex(wc_Sha256* sha256, void* heap, int devId) { int ret = 0; @@ -1136,20 +1175,31 @@ int wc_InitSha256_ex(wc_Sha256* sha256, void* heap, int devId) if (ret != 0) return ret; + Sha256_SetTransform(); + sha256->heap = heap; +#ifdef WOLF_CRYPTO_CB + sha256->devId = devId; + sha256->devCtx = NULL; +#else (void)devId; +#endif + +#ifdef WOLFSSL_SMALL_STACK_CACHE + sha256->W = NULL; +#endif return ret; } static int Transform_Sha256(wc_Sha256* sha256, const byte* data) { - Transform_Sha256_Len(sha256, data, WC_SHA256_BLOCK_SIZE); + SHA256_TRANSFORM_LEN(sha256, data, WC_SHA256_BLOCK_SIZE); return 0; } #define XTRANSFORM Transform_Sha256 -#define XTRANSFORM_LEN Transform_Sha256_Len +#define XTRANSFORM_LEN(s, d, l) SHA256_TRANSFORM_LEN((s), (d), (l)) #elif defined(WOLFSSL_ARMASM) && !defined(WOLF_CRYPTO_CB_ONLY_SHA256) @@ -2254,6 +2304,11 @@ static WC_INLINE int Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, Sha256_SetTransform(); #endif #endif + #if defined(WOLFSSL_PPC64_ASM) && defined(WOLFSSL_PPC64_ASM_CRYPTO) + /* SHA-224 shares the SHA-256 transform; select the base/vector-crypto + * implementation at run time (sets sha256_use_crypto). */ + Sha256_SetTransform(); + #endif #ifdef WOLFSSL_HASH_FLAGS sha224->flags = 0; #endif diff --git a/wolfcrypt/src/sha3.c b/wolfcrypt/src/sha3.c index 33d06928834..b0ef9f09512 100644 --- a/wolfcrypt/src/sha3.c +++ b/wolfcrypt/src/sha3.c @@ -121,7 +121,8 @@ #endif #endif -#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_RISCV_ASM) +#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_RISCV_ASM) && \ + !defined(WOLFSSL_PPC64_ASM) && !defined(WOLFSSL_PPC32_ASM) #ifdef WOLFSSL_SHA3_SMALL /* Rotate a 64-bit value left. @@ -601,7 +602,52 @@ void BlockSha3(word64* s) } #endif /* WC_SHA3_SW_KECCAK */ #endif /* !WOLFSSL_SHA3_SMALL */ -#endif /* !WOLFSSL_ARMASM && !WOLFSSL_RISCV_ASM */ +#endif /* !WOLFSSL_ARMASM && !WOLFSSL_RISCV_ASM && !WOLFSSL_PPC64_ASM && + * !WOLFSSL_PPC32_ASM */ + +#if defined(WOLFSSL_PPC64_ASM) +#if defined(WOLFSSL_PPC64_ASM_POWER8) +/* PowerPC64 provides two Keccak-f[1600] implementations: the scalar + * BlockSha3_base and a POWER8 (PowerISA 2.07) VSX BlockSha3_power8 (which uses + * vrld/mtvsrd). Select the POWER8 one at run time when the CPU is POWER8 or + * later. + * + * A run-time flag with direct calls is used rather than a function pointer: an + * indirect call would require an ELFv1 function descriptor, whereas direct + * calls work under both the ELFv1 and ELFv2 ABIs. */ +#include + +/* -1 = not yet determined, 0 = base, 1 = POWER8 */ +static int sha3_use_power8 = -1; + +void BlockSha3(word64* s) +{ + if (sha3_use_power8 < 0) { + word32 f = cpuid_get_flags(); + /* The VSX permutation is only worthwhile where the scalar issue width + * does not already win. POWER9 (PowerISA 3.0 but not 3.1) has enough + * scalar throughput that BlockSha3_base is faster, so use the VSX path + * only on POWER8 and on POWER10 (3.1) or later. */ + sha3_use_power8 = IS_PPC64_ARCH_2_07(f) && + (!IS_PPC64_ARCH_3_00(f) || IS_PPC64_ARCH_3_1(f)); + } + + if (sha3_use_power8) + BlockSha3_power8(s); + else + BlockSha3_base(s); +} +#else +/* Only the scalar implementation is built; call it directly (no run-time + * dispatch, no function pointer). */ +void BlockSha3(word64* s) +{ + BlockSha3_base(s); +} +#endif +#endif +/* Scalar PowerPC32 assembly provides BlockSha3 directly (see + * wolfcrypt/src/port/ppc32/ppc32-sha3-asm.S), so nothing is needed here. */ #ifdef WC_SHA3_SW_KECCAK #if defined(BIG_ENDIAN_ORDER) diff --git a/wolfcrypt/src/sha512.c b/wolfcrypt/src/sha512.c index b2f57b13b86..514d4f7cb73 100644 --- a/wolfcrypt/src/sha512.c +++ b/wolfcrypt/src/sha512.c @@ -1501,11 +1501,71 @@ static void Sha512_SetTransform(void) transform_check = 1; } +#elif defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) + +/* Scalar (base instruction) SHA-512 transform for big-endian PowerPC (32- and + * 64-bit). The asm loads the message words directly, so no byte reversal is + * needed and the (sha512, data, len) form is used just like the ARM assembly. */ +extern void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, + word32 len); + +#if defined(WOLFSSL_PPC64_ASM) && defined(WOLFSSL_PPC64_ASM_CRYPTO) +/* POWER8+ has a vector SHA-512 sigma instruction (vshasigmad). When built + * in, select that implementation at run time if the CPU supports it. + * + * A run-time flag with direct calls is used rather than a function pointer: + * an indirect call would require an ELFv1 function descriptor, whereas direct + * calls work under both the ELFv1 and ELFv2 ABIs. */ +extern void Transform_Sha512_Len_crypto(wc_Sha512* sha512, const byte* data, + word32 len); + +/* -1 = not yet determined, 0 = base, 1 = vector-crypto */ +static int sha512_use_crypto = -1; + +/* Detect CPU support via the central cpuid module on first use. Idempotent - + * safe to call from multiple threads as all callers compute the same value. */ +static WC_INLINE void SHA512_TRANSFORM_LEN(wc_Sha512* sha512, const byte* data, + word32 len) +{ + if (sha512_use_crypto < 0) + sha512_use_crypto = IS_PPC64_VEC_CRYPTO(cpuid_get_flags()) != 0; + + if (sha512_use_crypto) + Transform_Sha512_Len_crypto(sha512, data, len); + else + Transform_Sha512_Len(sha512, data, len); +} +/* SHA512_TRANSFORM_LEN is a function here, not a macro, so signal that a + * dispatcher is provided - otherwise the generic fallback below sees + * !defined(SHA512_TRANSFORM_LEN) and shadows it with a base-only macro. */ +#define SHA512_HAVE_TRANSFORM_LEN +#else +#define SHA512_TRANSFORM_LEN(s, d, l) Transform_Sha512_Len((s), (d), (l)) +#define SHA512_HAVE_TRANSFORM_LEN +#endif + +static WC_INLINE int Transform_Sha512(wc_Sha512* sha512, const byte* data) +{ + SHA512_TRANSFORM_LEN(sha512, data, WC_SHA512_BLOCK_SIZE); + return 0; +} + +#define Sha512_SetTransform() WC_DO_NOTHING + #else #define Transform_Sha512(sha512) _Transform_Sha512(sha512) #endif +/* For platforms that share the (sha512, data, len) block-loop call below but + * don't provide their own dispatcher (e.g. ARM), call the length transform + * directly. */ +#if (defined(WOLFSSL_ARMASM) || defined(WOLFSSL_PPC64_ASM) || \ + defined(WOLFSSL_PPC32_ASM)) && \ + !defined(SHA512_TRANSFORM_LEN) && !defined(SHA512_HAVE_TRANSFORM_LEN) +#define SHA512_TRANSFORM_LEN(s, d, l) Transform_Sha512_Len((s), (d), (l)) +#endif + #ifdef WOLFSSL_SHA512 static int InitSha512_Family(wc_Sha512* sha512, void* heap, int devId, @@ -1611,7 +1671,7 @@ int wc_InitSha512_256_ex(wc_Sha512* sha512, void* heap, int devId) #endif /* WOLFSSL_SHA512 */ -#ifndef WOLFSSL_ARMASM +#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) && !defined(WOLFSSL_PPC32_ASM) static const word64 K512[80] = { W64LIT(0x428a2f98d728ae22), W64LIT(0x7137449123ef65cd), @@ -1803,7 +1863,7 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le #endif } #endif - #ifdef WOLFSSL_ARMASM + #if defined(WOLFSSL_ARMASM) || defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) Transform_Sha512(sha512, (const byte*)sha512->buffer); #elif !defined(WOLFSSL_ESP32_CRYPT) || \ defined(NO_WOLFSSL_ESP32_CRYPT_HASH) || \ @@ -1829,11 +1889,11 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le } } -#if defined(WOLFSSL_ARMASM) +#if defined(WOLFSSL_ARMASM) || defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) if (len >= WC_SHA512_BLOCK_SIZE) { word32 blocksLen = len & ~((word32)WC_SHA512_BLOCK_SIZE-1); - Transform_Sha512_Len(sha512, data, blocksLen); + SHA512_TRANSFORM_LEN(sha512, data, blocksLen); data += blocksLen; len -= blocksLen; } @@ -1993,7 +2053,7 @@ int wc_Sha512Update(wc_Sha512* sha512, const byte* data, word32 len) static WC_INLINE int Sha512Final(wc_Sha512* sha512) { -#ifndef WOLFSSL_ARMASM +#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_PPC64_ASM) && !defined(WOLFSSL_PPC32_ASM) int ret; #endif byte* local; @@ -2041,7 +2101,7 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512) } #endif /* LITTLE_ENDIAN_ORDER */ -#ifdef WOLFSSL_ARMASM +#if defined(WOLFSSL_ARMASM) || defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) Transform_Sha512(sha512, (const byte*)sha512->buffer); #else #if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW) && \ @@ -2122,7 +2182,7 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512) } #endif -#ifdef WOLFSSL_ARMASM +#if defined(WOLFSSL_ARMASM) || defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) Transform_Sha512(sha512, (const byte*)sha512->buffer); #else #if !defined(WOLFSSL_ESP32_CRYPT) || \ @@ -2389,6 +2449,11 @@ int wc_Sha512Transform(wc_Sha512* sha, const unsigned char* data) ByteReverseWords64(buffer, (word64*)data, WC_SHA512_BLOCK_SIZE); Transform_Sha512(sha, (const byte*)buffer); ret = 0; +#elif defined(WOLFSSL_PPC64_ASM) || defined(WOLFSSL_PPC32_ASM) + /* PPC assembly uses the (sha, data) form and reads the block directly + * (big-endian native - any little-endian reversal was done above). */ + (void)buffer; + ret = Transform_Sha512(sha, data); #else XMEMCPY(buffer, sha->buffer, WC_SHA512_BLOCK_SIZE); XMEMCPY(sha->buffer, data, WC_SHA512_BLOCK_SIZE); diff --git a/wolfssl/wolfcrypt/aes.h b/wolfssl/wolfcrypt/aes.h index e3d7637470d..1152addb481 100644 --- a/wolfssl/wolfcrypt/aes.h +++ b/wolfssl/wolfcrypt/aes.h @@ -1159,6 +1159,28 @@ WOLFSSL_LOCAL void AES_XTS_decrypt(const byte* in, byte* out, word32 sz, #endif #endif /* WOLFSSL_PPC64_ASM */ +#if defined(WOLFSSL_PPC32_ASM) +WOLFSSL_LOCAL void AES_set_encrypt_key(const unsigned char* key, word32 len, + unsigned char* ks); +WOLFSSL_LOCAL void AES_invert_key(unsigned char* ks, word32 rounds); +WOLFSSL_LOCAL void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr); +WOLFSSL_LOCAL void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr); +WOLFSSL_LOCAL void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* iv); +WOLFSSL_LOCAL void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* iv); +WOLFSSL_LOCAL void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr); +#if defined(GCM_TABLE) || defined(GCM_TABLE_4BIT) +WOLFSSL_LOCAL void GCM_gmult_len(byte* x, const byte** m, + const unsigned char* data, unsigned long len); +#endif +WOLFSSL_LOCAL void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, + unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr); +#endif /* WOLFSSL_PPC32_ASM */ + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/wolfssl/wolfcrypt/cpuid.h b/wolfssl/wolfcrypt/cpuid.h index bb7e68436b4..0c004f6d962 100644 --- a/wolfssl/wolfcrypt/cpuid.h +++ b/wolfssl/wolfcrypt/cpuid.h @@ -43,6 +43,10 @@ #define HAVE_CPUID #define HAVE_CPUID_AARCH64 #endif +#if defined(WOLFSSL_PPC64_ASM) && !defined(WOLFSSL_NO_ASM) + #define HAVE_CPUID + #define HAVE_CPUID_PPC64 +#endif #define WC_CPUID_INITIALIZER 0xffffffffU typedef word32 cpuid_flags_t; @@ -101,6 +105,29 @@ typedef word32 cpuid_flags_t; #define IS_AARCH64_SM4(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_SM4) #define IS_AARCH64_SB(f) (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_SB) +#elif defined(HAVE_CPUID_PPC64) + + #define CPUID_ALTIVEC 0x0001 /* VMX / AltiVec */ + #define CPUID_VSX 0x0002 /* Vector-Scalar Extension */ + #define CPUID_ARCH_2_07 0x0004 /* POWER8 / PowerISA 2.07 */ + #define CPUID_VEC_CRYPTO 0x0008 /* Vector crypto: vshasigmaw, vcipher, + * vpmsumd, ... */ + #define CPUID_ARCH_3_00 0x0010 /* POWER9 / PowerISA 3.0 */ + #define CPUID_ARCH_3_1 0x0020 /* POWER10 / PowerISA 3.1 */ + + #define IS_PPC64_ALTIVEC(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_ALTIVEC) + #define IS_PPC64_VSX(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_VSX) + #define IS_PPC64_ARCH_2_07(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_ARCH_2_07) + #define IS_PPC64_VEC_CRYPTO(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_VEC_CRYPTO) + #define IS_PPC64_ARCH_3_00(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_ARCH_3_00) + #define IS_PPC64_ARCH_3_1(f) \ + (WOLFSSL_ATOMIC_COERCE_UINT(f) & CPUID_ARCH_3_1) + #endif #ifdef HAVE_CPUID diff --git a/wolfssl/wolfcrypt/sha3.h b/wolfssl/wolfcrypt/sha3.h index cfa699146b0..a9d8f42c97f 100644 --- a/wolfssl/wolfcrypt/sha3.h +++ b/wolfssl/wolfcrypt/sha3.h @@ -267,6 +267,11 @@ WOLFSSL_LOCAL void BlockSha3(word64 *s); WOLFSSL_LOCAL void BlockSha3_crypto(word64 *s); #endif WOLFSSL_LOCAL void BlockSha3_base(word64 *s); +#elif defined(WOLFSSL_PPC64_ASM) + #ifdef WOLFSSL_PPC64_ASM_POWER8 + WOLFSSL_LOCAL void BlockSha3_power8(word64 *s); + #endif + WOLFSSL_LOCAL void BlockSha3_base(word64 *s); #endif #ifdef __cplusplus