aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Kubaj <pkubaj@FreeBSD.org>2021-11-22 02:28:46 +0000
committerPiotr Kubaj <pkubaj@FreeBSD.org>2021-12-29 13:45:29 +0000
commitce35a3bc852d25cb989bc1f3dc4ddb723d7d5117 (patch)
treec8b1a34bb036e3c854069a754d690acc3518ee79
parenta7e7700fa741d64a31e9d7596175fc0461687b86 (diff)
downloadsrc-ce35a3bc852.tar.gz
src-ce35a3bc852.zip
Add assembly optimized code for OpenSSL on powerpc, powerpc64 and powerpc64le
Summary: 1. https://github.com/openssl/openssl/commit/34ab13b7d8e3e723adb60be8142e38b7c9cd382a needs to be merged for ELFv2 support on big-endian. 2. crypto/openssl/crypto/ppccap.c needs to be patched. Same reason as in https://github.com/openssl/openssl/pull/17082. Approved by: jkim, jhibbits, alfredo (MFC to stable/13) MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D33076 (cherry picked from commit 3a60869237b8b315fe66497cf5299ec08b688533)
-rwxr-xr-xcrypto/openssl/crypto/perlasm/ppc-xlate.pl8
-rw-r--r--crypto/openssl/crypto/ppccap.c12
-rw-r--r--secure/lib/libcrypto/Makefile50
-rw-r--r--secure/lib/libcrypto/Makefile.asm189
-rw-r--r--secure/lib/libcrypto/Makefile.inc35
-rw-r--r--sys/crypto/openssl/powerpc/aes-ppc.S1562
-rw-r--r--sys/crypto/openssl/powerpc/aesp8-ppc.S3643
-rw-r--r--sys/crypto/openssl/powerpc/chacha-ppc.S1493
-rw-r--r--sys/crypto/openssl/powerpc/ghashp8-ppc.S570
-rw-r--r--sys/crypto/openssl/powerpc/poly1305-ppc.S313
-rw-r--r--sys/crypto/openssl/powerpc/poly1305-ppcfp.S587
-rw-r--r--sys/crypto/openssl/powerpc/ppc-mont.S1788
-rw-r--r--sys/crypto/openssl/powerpc/ppc.S1856
-rw-r--r--sys/crypto/openssl/powerpc/ppccpuid.S357
-rw-r--r--sys/crypto/openssl/powerpc/sha1-ppc.S1119
-rw-r--r--sys/crypto/openssl/powerpc/sha256-ppc.S1322
-rw-r--r--sys/crypto/openssl/powerpc/sha256p8-ppc.S736
-rw-r--r--sys/crypto/openssl/powerpc/sha512-ppc.S3072
-rw-r--r--sys/crypto/openssl/powerpc/sha512p8-ppc.S834
-rw-r--r--sys/crypto/openssl/powerpc/vpaes-ppc.S1469
-rw-r--r--sys/crypto/openssl/powerpc64/aes-ppc.S1534
-rw-r--r--sys/crypto/openssl/powerpc64/aesp8-ppc.S3660
-rw-r--r--sys/crypto/openssl/powerpc64/chacha-ppc.S1500
-rw-r--r--sys/crypto/openssl/powerpc64/ecp_nistz256-ppc64.S4855
-rw-r--r--sys/crypto/openssl/powerpc64/ghashp8-ppc.S577
-rw-r--r--sys/crypto/openssl/powerpc64/keccak1600-ppc64.S671
-rw-r--r--sys/crypto/openssl/powerpc64/poly1305-ppc.S186
-rw-r--r--sys/crypto/openssl/powerpc64/poly1305-ppcfp.S597
-rw-r--r--sys/crypto/openssl/powerpc64/ppc-mont.S1791
-rw-r--r--sys/crypto/openssl/powerpc64/ppc.S1877
-rw-r--r--sys/crypto/openssl/powerpc64/ppccpuid.S388
-rw-r--r--sys/crypto/openssl/powerpc64/sha1-ppc.S1122
-rw-r--r--sys/crypto/openssl/powerpc64/sha256-ppc.S1325
-rw-r--r--sys/crypto/openssl/powerpc64/sha256p8-ppc.S739
-rw-r--r--sys/crypto/openssl/powerpc64/sha512-ppc.S1421
-rw-r--r--sys/crypto/openssl/powerpc64/sha512p8-ppc.S837
-rw-r--r--sys/crypto/openssl/powerpc64/vpaes-ppc.S1480
-rw-r--r--sys/crypto/openssl/powerpc64/x25519-ppc64.S350
-rw-r--r--sys/crypto/openssl/powerpc64le/aes-ppc.S1582
-rw-r--r--sys/crypto/openssl/powerpc64le/aesp8-ppc.S3660
-rw-r--r--sys/crypto/openssl/powerpc64le/chacha-ppc.S1372
-rw-r--r--sys/crypto/openssl/powerpc64le/ecp_nistz256-ppc64.S4855
-rw-r--r--sys/crypto/openssl/powerpc64le/ghashp8-ppc.S577
-rw-r--r--sys/crypto/openssl/powerpc64le/keccak1600-ppc64.S671
-rw-r--r--sys/crypto/openssl/powerpc64le/poly1305-ppc.S163
-rw-r--r--sys/crypto/openssl/powerpc64le/poly1305-ppcfp.S592
-rw-r--r--sys/crypto/openssl/powerpc64le/ppc-mont.S1791
-rw-r--r--sys/crypto/openssl/powerpc64le/ppc.S1877
-rw-r--r--sys/crypto/openssl/powerpc64le/ppccpuid.S388
-rw-r--r--sys/crypto/openssl/powerpc64le/sha1-ppc.S1170
-rw-r--r--sys/crypto/openssl/powerpc64le/sha256-ppc.S1373
-rw-r--r--sys/crypto/openssl/powerpc64le/sha256p8-ppc.S747
-rw-r--r--sys/crypto/openssl/powerpc64le/sha512-ppc.S1517
-rw-r--r--sys/crypto/openssl/powerpc64le/sha512p8-ppc.S849
-rw-r--r--sys/crypto/openssl/powerpc64le/vpaes-ppc.S1480
-rw-r--r--sys/crypto/openssl/powerpc64le/x25519-ppc64.S350
56 files changed, 70929 insertions, 10 deletions
diff --git a/crypto/openssl/crypto/perlasm/ppc-xlate.pl b/crypto/openssl/crypto/perlasm/ppc-xlate.pl
index 08668b295bf6..f1a7fa835fc2 100755
--- a/crypto/openssl/crypto/perlasm/ppc-xlate.pl
+++ b/crypto/openssl/crypto/perlasm/ppc-xlate.pl
@@ -49,7 +49,7 @@ my $globl = sub {
/osx/ && do { $name = "_$name";
last;
};
- /linux.*(32|64le)/
+ /linux.*(32|64(le|v2))/
&& do { $ret .= ".globl $name";
if (!$$type) {
$ret .= "\n.type $name,\@function";
@@ -80,7 +80,7 @@ my $globl = sub {
};
my $text = sub {
my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text";
- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/);
+ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/);
$ret;
};
my $machine = sub {
@@ -186,7 +186,7 @@ my $vmr = sub {
# Some ABIs specify vrsave, special-purpose register #256, as reserved
# for system use.
-my $no_vrsave = ($flavour =~ /aix|linux64le/);
+my $no_vrsave = ($flavour =~ /aix|linux64(le|v2)/);
my $mtspr = sub {
my ($f,$idx,$ra) = @_;
if ($idx == 256 && $no_vrsave) {
@@ -318,7 +318,7 @@ while($line=<>) {
if ($label) {
my $xlated = ($GLOBALS{$label} or $label);
print "$xlated:";
- if ($flavour =~ /linux.*64le/) {
+ if ($flavour =~ /linux.*64(le|v2)/) {
if ($TYPES{$label} =~ /function/) {
printf "\n.localentry %s,0\n",$xlated;
}
diff --git a/crypto/openssl/crypto/ppccap.c b/crypto/openssl/crypto/ppccap.c
index eeaa47cc6b41..23bcf1f46e2e 100644
--- a/crypto/openssl/crypto/ppccap.c
+++ b/crypto/openssl/crypto/ppccap.c
@@ -239,14 +239,18 @@ static unsigned long getauxval(unsigned long key)
#endif
/* I wish <sys/auxv.h> was universally available */
-#define HWCAP 16 /* AT_HWCAP */
+#ifndef AT_HWCAP
+# define AT_HWCAP 16 /* AT_HWCAP */
+#endif
#define HWCAP_PPC64 (1U << 30)
#define HWCAP_ALTIVEC (1U << 28)
#define HWCAP_FPU (1U << 27)
#define HWCAP_POWER6_EXT (1U << 9)
#define HWCAP_VSX (1U << 7)
-#define HWCAP2 26 /* AT_HWCAP2 */
+#ifndef AT_HWCAP2
+# define AT_HWCAP2 26 /* AT_HWCAP2 */
+#endif
#define HWCAP_VEC_CRYPTO (1U << 25)
#define HWCAP_ARCH_3_00 (1U << 23)
@@ -337,8 +341,8 @@ void OPENSSL_cpuid_setup(void)
#ifdef OSSL_IMPLEMENT_GETAUXVAL
{
- unsigned long hwcap = getauxval(HWCAP);
- unsigned long hwcap2 = getauxval(HWCAP2);
+ unsigned long hwcap = getauxval(AT_HWCAP);
+ unsigned long hwcap2 = getauxval(AT_HWCAP2);
if (hwcap & HWCAP_FPU) {
OPENSSL_ppccap_P |= PPC_FPU;
diff --git a/secure/lib/libcrypto/Makefile b/secure/lib/libcrypto/Makefile
index ff9303c9edae..cf9259a19e16 100644
--- a/secure/lib/libcrypto/Makefile
+++ b/secure/lib/libcrypto/Makefile
@@ -28,6 +28,12 @@ SRCS+= x86_64cpuid.S
SRCS+= armv4cpuid.S armcap.c
.elif defined(ASM_i386)
SRCS+= x86cpuid.S
+.elif defined(ASM_powerpc)
+SRCS+= ppccpuid.S ppccap.c
+.elif defined(ASM_powerpc64)
+SRCS+= ppccpuid.S ppccap.c
+.elif defined(ASM_powerpc64le)
+SRCS+= ppccpuid.S ppccap.c
.else
SRCS+= mem_clr.c
.endif
@@ -44,6 +50,12 @@ SRCS+= aesni-x86_64.S vpaes-x86_64.S
SRCS+= aes-armv4.S aesv8-armx.S bsaes-armv7.S
.elif defined(ASM_i386)
SRCS+= aes_core.c aesni-x86.S vpaes-x86.S
+.elif defined(ASM_powerpc)
+SRCS+= aes_core.c aes-ppc.S vpaes-ppc.S aesp8-ppc.S
+.elif defined(ASM_powerpc64)
+SRCS+= aes_core.c aes-ppc.S vpaes-ppc.S aesp8-ppc.S
+.elif defined(ASM_powerpc64le)
+SRCS+= aes_core.c aes-ppc.S vpaes-ppc.S aesp8-ppc.S
.else
SRCS+= aes_core.c
.endif
@@ -99,6 +111,12 @@ SRCS+= x86_64-mont.S x86_64-mont5.S
SRCS+= armv4-gf2m.S armv4-mont.S bn_asm.c
.elif defined(ASM_i386)
SRCS+= bn-586.S co-586.S x86-gf2m.S x86-mont.S
+.elif defined(ASM_powerpc)
+SRCS+= ppc.S ppc-mont.S
+.elif defined(ASM_powerpc64)
+SRCS+= ppc.S ppc-mont.S
+.elif defined(ASM_powerpc64le)
+SRCS+= ppc.S ppc-mont.S
.else
SRCS+= bn_asm.c
.endif
@@ -128,6 +146,12 @@ SRCS+= chacha-x86_64.S
SRCS+= chacha-armv4.S
.elif defined(ASM_i386)
SRCS+= chacha-x86.S
+.elif defined(ASM_powerpc)
+SRCS+= chacha-ppc.S
+.elif defined(ASM_powerpc64)
+SRCS+= chacha-ppc.S
+.elif defined(ASM_powerpc64le)
+SRCS+= chacha-ppc.S
.else
SRCS+= chacha_enc.c
.endif
@@ -189,6 +213,10 @@ SRCS+= ecp_nistz256-x86_64.S ecp_nistz256.c x25519-x86_64.S
SRCS+= ecp_nistz256-armv4.S ecp_nistz256.c
.elif defined(ASM_i386)
SRCS+= ecp_nistz256-x86.S ecp_nistz256.c
+.elif defined(ASM_powerpc64)
+SRCS+= ecp_nistz256-ppc64.S ecp_nistz256.c x25519-ppc64.S
+.elif defined(ASM_powerpc64le)
+SRCS+= ecp_nistz256-ppc64.S ecp_nistz256.c x25519-ppc64.S
.endif
# engine
@@ -250,6 +278,12 @@ SRCS+= aesni-gcm-x86_64.S ghash-x86_64.S
SRCS+= ghash-armv4.S ghashv8-armx.S
.elif defined(ASM_i386)
SRCS+= ghash-x86.S
+.elif defined(ASM_powerpc)
+SRCS+= ghashp8-ppc.S
+.elif defined(ASM_powerpc64)
+SRCS+= ghashp8-ppc.S
+.elif defined(ASM_powerpc64le)
+SRCS+= ghashp8-ppc.S
.endif
# objects
@@ -282,6 +316,12 @@ SRCS+= poly1305-x86_64.S
SRCS+= poly1305-armv4.S
.elif defined(ASM_i386)
SRCS+= poly1305-x86.S
+.elif defined(ASM_powerpc)
+SRCS+= poly1305-ppc.S poly1305-ppcfp.S
+.elif defined(ASM_powerpc64)
+SRCS+= poly1305-ppc.S poly1305-ppcfp.S
+.elif defined(ASM_powerpc64le)
+SRCS+= poly1305-ppc.S poly1305-ppcfp.S
.endif
# rand
@@ -333,6 +373,12 @@ SRCS+= sha256-mb-x86_64.S sha256-x86_64.S sha512-x86_64.S
SRCS+= keccak1600-armv4.S sha1-armv4-large.S sha256-armv4.S sha512-armv4.S
.elif defined(ASM_i386)
SRCS+= keccak1600.c sha1-586.S sha256-586.S sha512-586.S
+.elif defined(ASM_powerpc)
+SRCS+= keccak1600.c sha1-ppc.S sha256-ppc.S sha512-ppc.S sha256p8-ppc.S sha512p8-ppc.S
+.elif defined(ASM_powerpc64)
+SRCS+= keccak1600-ppc64.S sha1-ppc.S sha256-ppc.S sha512-ppc.S sha256p8-ppc.S sha512p8-ppc.S
+.elif defined(ASM_powerpc64le)
+SRCS+= keccak1600-ppc64.S sha1-ppc.S sha256-ppc.S sha512-ppc.S sha256p8-ppc.S sha512p8-ppc.S
.else
SRCS+= keccak1600.c
.endif
@@ -430,7 +476,7 @@ SRCS+= buildinf.h
CLEANDIRS= openssl
CLEANFILES= buildinf.h opensslconf.h opensslconf.h.tmp
-.if defined(ASM_${MACHINE_CPUARCH})
+.if defined(ASM_${MACHINE_CPUARCH}) || defined(ASM_${MACHINE_ARCH})
_cmd1=/%%NO_ASM%%/d
.else
_cmd1=s/%%NO_ASM%%//
@@ -471,6 +517,8 @@ PICFLAG+= -DOPENSSL_PIC
.if defined(ASM_amd64)
.PATH: ${LCRYPTO_SRC}/crypto/bn/asm
.endif
+.elif defined(ASM_${MACHINE_ARCH})
+.PATH: ${SRCTOP}/sys/crypto/openssl/${MACHINE_ARCH}
.endif
.PATH: ${LCRYPTO_SRC}/crypto \
diff --git a/secure/lib/libcrypto/Makefile.asm b/secure/lib/libcrypto/Makefile.asm
index 9480c3a59833..5e44285de0d9 100644
--- a/secure/lib/libcrypto/Makefile.asm
+++ b/secure/lib/libcrypto/Makefile.asm
@@ -295,6 +295,195 @@ CLEANFILES= ${ASM} ${SRCS:R:S/$/.s/}
env CC=cc perl ${PERLPATH} ${.IMPSRC} elf ${CFLAGS} ${.IMPSRC:R:S/$/.s/} ;\
cat ${.IMPSRC:R:S/$/.s/} ;\
echo '#endif' ) > ${.TARGET}
+
+.elif defined(ASM_powerpc)
+
+.PATH: ${LCRYPTO_SRC}/crypto \
+ ${LCRYPTO_SRC}/crypto/aes/asm \
+ ${LCRYPTO_SRC}/crypto/bn/asm \
+ ${LCRYPTO_SRC}/crypto/chacha/asm \
+ ${LCRYPTO_SRC}/crypto/modes/asm \
+ ${LCRYPTO_SRC}/crypto/poly1305/asm \
+ ${LCRYPTO_SRC}/crypto/sha/asm
+
+PERLPATH= -I${LCRYPTO_SRC}/crypto/perlasm
+
+#cpuid
+SRCS= ppccpuid.pl
+
+#bn
+SRCS+= ppc.pl ppc-mont.pl
+
+#aes
+SRCS+= aes-ppc.pl vpaes-ppc.pl aesp8-ppc.pl
+
+#sha1
+SRCS+= sha1-ppc.pl sha512-ppc.pl sha512p8-ppc.pl
+
+#modes
+SRCS+= ghashp8-ppc.pl
+
+#chacha
+SRCS+= chacha-ppc.pl
+
+#poly1305
+SRCS+= poly1305-ppc.pl poly1305-ppcfp.pl
+
+ASM= ${SRCS:R:S/$/.S/} sha256-ppc.S sha256p8-ppc.S
+
+all: ${ASM}
+
+CLEANFILES= ${ASM}
+.SUFFIXES: .pl
+
+sha256-ppc.S: sha512-ppc.pl
+ env CC=cc perl ${.ALLSRC} linux32 ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+sha256p8-ppc.S: sha512p8-ppc.pl
+ env CC=cc perl ${.ALLSRC} linux32 ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+.pl.S:
+ env CC=cc perl ${.IMPSRC} linux32 ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+.elif defined(ASM_powerpc64)
+
+.PATH: ${LCRYPTO_SRC}/crypto \
+ ${LCRYPTO_SRC}/crypto/aes/asm \
+ ${LCRYPTO_SRC}/crypto/bn/asm \
+ ${LCRYPTO_SRC}/crypto/chacha/asm \
+ ${LCRYPTO_SRC}/crypto/ec/asm \
+ ${LCRYPTO_SRC}/crypto/modes/asm \
+ ${LCRYPTO_SRC}/crypto/poly1305/asm \
+ ${LCRYPTO_SRC}/crypto/sha/asm
+
+PERLPATH= -I${LCRYPTO_SRC}/crypto/perlasm
+
+#cpuid
+SRCS= ppccpuid.pl
+
+#bn
+SRCS+= ppc.pl ppc-mont.pl
+
+#aes
+SRCS+= aes-ppc.pl vpaes-ppc.pl aesp8-ppc.pl
+
+#sha1
+SRCS+= sha1-ppc.pl sha512-ppc.pl sha512p8-ppc.pl
+
+#modes
+SRCS+= ghashp8-ppc.pl
+
+#chacha
+SRCS+= chacha-ppc.pl
+
+#poly1305
+SRCS+= poly1305-ppc.pl poly1305-ppcfp.pl
+
+#ec
+SRCS+= ecp_nistz256-ppc64.pl x25519-ppc64.pl
+
+#keccak1600
+SRCS+= keccak1600-ppc64.pl
+
+ASM= ${SRCS:R:S/$/.S/} sha256-ppc.S sha256p8-ppc.S
+
+all: ${ASM}
+
+CLEANFILES= ${ASM}
+.SUFFIXES: .pl
+
+sha256-ppc.S: sha512-ppc.pl
+ env CC=cc perl ${.ALLSRC} linux64v2 ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+sha256p8-ppc.S: sha512p8-ppc.pl
+ env CC=cc perl ${.ALLSRC} linux64v2 ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+.pl.S:
+ env CC=cc perl ${.IMPSRC} linux64v2 ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+.elif defined(ASM_powerpc64le)
+
+.PATH: ${LCRYPTO_SRC}/crypto \
+ ${LCRYPTO_SRC}/crypto/aes/asm \
+ ${LCRYPTO_SRC}/crypto/bn/asm \
+ ${LCRYPTO_SRC}/crypto/chacha/asm \
+ ${LCRYPTO_SRC}/crypto/ec/asm \
+ ${LCRYPTO_SRC}/crypto/modes/asm \
+ ${LCRYPTO_SRC}/crypto/poly1305/asm \
+ ${LCRYPTO_SRC}/crypto/sha/asm
+
+PERLPATH= -I${LCRYPTO_SRC}/crypto/perlasm
+
+#cpuid
+SRCS= ppccpuid.pl
+
+#bn
+SRCS+= ppc.pl ppc-mont.pl
+
+#aes
+SRCS+= aes-ppc.pl vpaes-ppc.pl aesp8-ppc.pl
+
+#sha1
+SRCS+= sha1-ppc.pl sha512-ppc.pl sha512p8-ppc.pl
+
+#modes
+SRCS+= ghashp8-ppc.pl
+
+#chacha
+SRCS+= chacha-ppc.pl
+
+#poly1305
+SRCS+= poly1305-ppc.pl poly1305-ppcfp.pl
+
+#ec
+SRCS+= ecp_nistz256-ppc64.pl x25519-ppc64.pl
+
+#keccak1600
+SRCS+= keccak1600-ppc64.pl
+
+ASM= ${SRCS:R:S/$/.S/} sha256-ppc.S sha256p8-ppc.S
+
+all: ${ASM}
+
+CLEANFILES= ${ASM}
+.SUFFIXES: .pl
+
+sha256-ppc.S: sha512-ppc.pl
+ env CC=cc perl ${.ALLSRC} linux64le ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+sha256p8-ppc.S: sha512p8-ppc.pl
+ env CC=cc perl ${.ALLSRC} linux64le ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
+.pl.S:
+ env CC=cc perl ${.IMPSRC} linux64le ${.TARGET:R:S/$/.s/}
+ ( echo '/* $$'FreeBSD'$$ */' ;\
+ echo '/* Do not modify. This file is auto-generated from ${.ALLSRC:T:R:S/$/.pl/}. */' ;\
+ cat ${.TARGET:R:S/$/.s/}) > ${.TARGET}
+
.endif
.include <bsd.prog.mk>
diff --git a/secure/lib/libcrypto/Makefile.inc b/secure/lib/libcrypto/Makefile.inc
index 19bdf834dcad..c944e3242caa 100644
--- a/secure/lib/libcrypto/Makefile.inc
+++ b/secure/lib/libcrypto/Makefile.inc
@@ -23,9 +23,12 @@ CFLAGS+= -DB_ENDIAN
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "i386"
ASM_${MACHINE_CPUARCH}=
+.elif ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" || \
+ ${MACHINE_ARCH} == "powerpc64le"
+ASM_${MACHINE_ARCH}=
.endif
-.if defined(ASM_${MACHINE_CPUARCH})
+.if defined(ASM_${MACHINE_CPUARCH}) || defined(ASM_${MACHINE_ARCH})
CFLAGS+= -DOPENSSL_CPUID_OBJ
.if defined(ASM_aarch64)
CFLAGS+= -DOPENSSL_BN_ASM_MONT
@@ -69,6 +72,36 @@ CFLAGS+= -DGHASH_ASM
CFLAGS+= -DECP_NISTZ256_ASM
CFLAGS+= -DPADLOCK_ASM
CFLAGS+= -DPOLY1305_ASM
+.elif defined(ASM_powerpc)
+CFLAGS+= -DOPENSSL_BN_ASM_MONT
+CFLAGS+= -DAES_ASM
+CFLAGS+= -DVPAES_ASM
+CFLAGS+= -DSHA1_ASM
+CFLAGS+= -DSHA256_ASM
+CFLAGS+= -DSHA512_ASM
+CFLAGS+= -DPOLY1305_ASM
+.elif defined(ASM_powerpc64)
+CFLAGS+= -DOPENSSL_BN_ASM_MONT
+CFLAGS+= -DAES_ASM
+CFLAGS+= -DVPAES_ASM
+CFLAGS+= -DSHA1_ASM
+CFLAGS+= -DSHA256_ASM
+CFLAGS+= -DSHA512_ASM
+CFLAGS+= -DPOLY1305_ASM
+CFLAGS+= -DECP_NISTZ256_ASM
+CFLAGS+= -DX25519_ASM
+CFLAGS+= -DKECCAK1600_ASM
+.elif defined(ASM_powerpc64le)
+CFLAGS+= -DOPENSSL_BN_ASM_MONT
+CFLAGS+= -DAES_ASM
+CFLAGS+= -DVPAES_ASM
+CFLAGS+= -DSHA1_ASM
+CFLAGS+= -DSHA256_ASM
+CFLAGS+= -DSHA512_ASM
+CFLAGS+= -DPOLY1305_ASM
+CFLAGS+= -DECP_NISTZ256_ASM
+CFLAGS+= -DX25519_ASM
+CFLAGS+= -DKECCAK1600_ASM
.endif
.endif
diff --git a/sys/crypto/openssl/powerpc/aes-ppc.S b/sys/crypto/openssl/powerpc/aes-ppc.S
new file mode 100644
index 000000000000..75eef3eb51f3
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/aes-ppc.S
@@ -0,0 +1,1562 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from aes-ppc.pl. */
+.machine "any"
+.text
+
+.align 7
+.LAES_Te:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 3
+ addi 3,3,120
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.LAES_Td:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 3
+ addi 3,3,2360
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.long 0xc66363a5,0xc66363a5
+.long 0xf87c7c84,0xf87c7c84
+.long 0xee777799,0xee777799
+.long 0xf67b7b8d,0xf67b7b8d
+.long 0xfff2f20d,0xfff2f20d
+.long 0xd66b6bbd,0xd66b6bbd
+.long 0xde6f6fb1,0xde6f6fb1
+.long 0x91c5c554,0x91c5c554
+.long 0x60303050,0x60303050
+.long 0x02010103,0x02010103
+.long 0xce6767a9,0xce6767a9
+.long 0x562b2b7d,0x562b2b7d
+.long 0xe7fefe19,0xe7fefe19
+.long 0xb5d7d762,0xb5d7d762
+.long 0x4dababe6,0x4dababe6
+.long 0xec76769a,0xec76769a
+.long 0x8fcaca45,0x8fcaca45
+.long 0x1f82829d,0x1f82829d
+.long 0x89c9c940,0x89c9c940
+.long 0xfa7d7d87,0xfa7d7d87
+.long 0xeffafa15,0xeffafa15
+.long 0xb25959eb,0xb25959eb
+.long 0x8e4747c9,0x8e4747c9
+.long 0xfbf0f00b,0xfbf0f00b
+.long 0x41adadec,0x41adadec
+.long 0xb3d4d467,0xb3d4d467
+.long 0x5fa2a2fd,0x5fa2a2fd
+.long 0x45afafea,0x45afafea
+.long 0x239c9cbf,0x239c9cbf
+.long 0x53a4a4f7,0x53a4a4f7
+.long 0xe4727296,0xe4727296
+.long 0x9bc0c05b,0x9bc0c05b
+.long 0x75b7b7c2,0x75b7b7c2
+.long 0xe1fdfd1c,0xe1fdfd1c
+.long 0x3d9393ae,0x3d9393ae
+.long 0x4c26266a,0x4c26266a
+.long 0x6c36365a,0x6c36365a
+.long 0x7e3f3f41,0x7e3f3f41
+.long 0xf5f7f702,0xf5f7f702
+.long 0x83cccc4f,0x83cccc4f
+.long 0x6834345c,0x6834345c
+.long 0x51a5a5f4,0x51a5a5f4
+.long 0xd1e5e534,0xd1e5e534
+.long 0xf9f1f108,0xf9f1f108
+.long 0xe2717193,0xe2717193
+.long 0xabd8d873,0xabd8d873
+.long 0x62313153,0x62313153
+.long 0x2a15153f,0x2a15153f
+.long 0x0804040c,0x0804040c
+.long 0x95c7c752,0x95c7c752
+.long 0x46232365,0x46232365
+.long 0x9dc3c35e,0x9dc3c35e
+.long 0x30181828,0x30181828
+.long 0x379696a1,0x379696a1
+.long 0x0a05050f,0x0a05050f
+.long 0x2f9a9ab5,0x2f9a9ab5
+.long 0x0e070709,0x0e070709
+.long 0x24121236,0x24121236
+.long 0x1b80809b,0x1b80809b
+.long 0xdfe2e23d,0xdfe2e23d
+.long 0xcdebeb26,0xcdebeb26
+.long 0x4e272769,0x4e272769
+.long 0x7fb2b2cd,0x7fb2b2cd
+.long 0xea75759f,0xea75759f
+.long 0x1209091b,0x1209091b
+.long 0x1d83839e,0x1d83839e
+.long 0x582c2c74,0x582c2c74
+.long 0x341a1a2e,0x341a1a2e
+.long 0x361b1b2d,0x361b1b2d
+.long 0xdc6e6eb2,0xdc6e6eb2
+.long 0xb45a5aee,0xb45a5aee
+.long 0x5ba0a0fb,0x5ba0a0fb
+.long 0xa45252f6,0xa45252f6
+.long 0x763b3b4d,0x763b3b4d
+.long 0xb7d6d661,0xb7d6d661
+.long 0x7db3b3ce,0x7db3b3ce
+.long 0x5229297b,0x5229297b
+.long 0xdde3e33e,0xdde3e33e
+.long 0x5e2f2f71,0x5e2f2f71
+.long 0x13848497,0x13848497
+.long 0xa65353f5,0xa65353f5
+.long 0xb9d1d168,0xb9d1d168
+.long 0x00000000,0x00000000
+.long 0xc1eded2c,0xc1eded2c
+.long 0x40202060,0x40202060
+.long 0xe3fcfc1f,0xe3fcfc1f
+.long 0x79b1b1c8,0x79b1b1c8
+.long 0xb65b5bed,0xb65b5bed
+.long 0xd46a6abe,0xd46a6abe
+.long 0x8dcbcb46,0x8dcbcb46
+.long 0x67bebed9,0x67bebed9
+.long 0x7239394b,0x7239394b
+.long 0x944a4ade,0x944a4ade
+.long 0x984c4cd4,0x984c4cd4
+.long 0xb05858e8,0xb05858e8
+.long 0x85cfcf4a,0x85cfcf4a
+.long 0xbbd0d06b,0xbbd0d06b
+.long 0xc5efef2a,0xc5efef2a
+.long 0x4faaaae5,0x4faaaae5
+.long 0xedfbfb16,0xedfbfb16
+.long 0x864343c5,0x864343c5
+.long 0x9a4d4dd7,0x9a4d4dd7
+.long 0x66333355,0x66333355
+.long 0x11858594,0x11858594
+.long 0x8a4545cf,0x8a4545cf
+.long 0xe9f9f910,0xe9f9f910
+.long 0x04020206,0x04020206
+.long 0xfe7f7f81,0xfe7f7f81
+.long 0xa05050f0,0xa05050f0
+.long 0x783c3c44,0x783c3c44
+.long 0x259f9fba,0x259f9fba
+.long 0x4ba8a8e3,0x4ba8a8e3
+.long 0xa25151f3,0xa25151f3
+.long 0x5da3a3fe,0x5da3a3fe
+.long 0x804040c0,0x804040c0
+.long 0x058f8f8a,0x058f8f8a
+.long 0x3f9292ad,0x3f9292ad
+.long 0x219d9dbc,0x219d9dbc
+.long 0x70383848,0x70383848
+.long 0xf1f5f504,0xf1f5f504
+.long 0x63bcbcdf,0x63bcbcdf
+.long 0x77b6b6c1,0x77b6b6c1
+.long 0xafdada75,0xafdada75
+.long 0x42212163,0x42212163
+.long 0x20101030,0x20101030
+.long 0xe5ffff1a,0xe5ffff1a
+.long 0xfdf3f30e,0xfdf3f30e
+.long 0xbfd2d26d,0xbfd2d26d
+.long 0x81cdcd4c,0x81cdcd4c
+.long 0x180c0c14,0x180c0c14
+.long 0x26131335,0x26131335
+.long 0xc3ecec2f,0xc3ecec2f
+.long 0xbe5f5fe1,0xbe5f5fe1
+.long 0x359797a2,0x359797a2
+.long 0x884444cc,0x884444cc
+.long 0x2e171739,0x2e171739
+.long 0x93c4c457,0x93c4c457
+.long 0x55a7a7f2,0x55a7a7f2
+.long 0xfc7e7e82,0xfc7e7e82
+.long 0x7a3d3d47,0x7a3d3d47
+.long 0xc86464ac,0xc86464ac
+.long 0xba5d5de7,0xba5d5de7
+.long 0x3219192b,0x3219192b
+.long 0xe6737395,0xe6737395
+.long 0xc06060a0,0xc06060a0
+.long 0x19818198,0x19818198
+.long 0x9e4f4fd1,0x9e4f4fd1
+.long 0xa3dcdc7f,0xa3dcdc7f
+.long 0x44222266,0x44222266
+.long 0x542a2a7e,0x542a2a7e
+.long 0x3b9090ab,0x3b9090ab
+.long 0x0b888883,0x0b888883
+.long 0x8c4646ca,0x8c4646ca
+.long 0xc7eeee29,0xc7eeee29
+.long 0x6bb8b8d3,0x6bb8b8d3
+.long 0x2814143c,0x2814143c
+.long 0xa7dede79,0xa7dede79
+.long 0xbc5e5ee2,0xbc5e5ee2
+.long 0x160b0b1d,0x160b0b1d
+.long 0xaddbdb76,0xaddbdb76
+.long 0xdbe0e03b,0xdbe0e03b
+.long 0x64323256,0x64323256
+.long 0x743a3a4e,0x743a3a4e
+.long 0x140a0a1e,0x140a0a1e
+.long 0x924949db,0x924949db
+.long 0x0c06060a,0x0c06060a
+.long 0x4824246c,0x4824246c
+.long 0xb85c5ce4,0xb85c5ce4
+.long 0x9fc2c25d,0x9fc2c25d
+.long 0xbdd3d36e,0xbdd3d36e
+.long 0x43acacef,0x43acacef
+.long 0xc46262a6,0xc46262a6
+.long 0x399191a8,0x399191a8
+.long 0x319595a4,0x319595a4
+.long 0xd3e4e437,0xd3e4e437
+.long 0xf279798b,0xf279798b
+.long 0xd5e7e732,0xd5e7e732
+.long 0x8bc8c843,0x8bc8c843
+.long 0x6e373759,0x6e373759
+.long 0xda6d6db7,0xda6d6db7
+.long 0x018d8d8c,0x018d8d8c
+.long 0xb1d5d564,0xb1d5d564
+.long 0x9c4e4ed2,0x9c4e4ed2
+.long 0x49a9a9e0,0x49a9a9e0
+.long 0xd86c6cb4,0xd86c6cb4
+.long 0xac5656fa,0xac5656fa
+.long 0xf3f4f407,0xf3f4f407
+.long 0xcfeaea25,0xcfeaea25
+.long 0xca6565af,0xca6565af
+.long 0xf47a7a8e,0xf47a7a8e
+.long 0x47aeaee9,0x47aeaee9
+.long 0x10080818,0x10080818
+.long 0x6fbabad5,0x6fbabad5
+.long 0xf0787888,0xf0787888
+.long 0x4a25256f,0x4a25256f
+.long 0x5c2e2e72,0x5c2e2e72
+.long 0x381c1c24,0x381c1c24
+.long 0x57a6a6f1,0x57a6a6f1
+.long 0x73b4b4c7,0x73b4b4c7
+.long 0x97c6c651,0x97c6c651
+.long 0xcbe8e823,0xcbe8e823
+.long 0xa1dddd7c,0xa1dddd7c
+.long 0xe874749c,0xe874749c
+.long 0x3e1f1f21,0x3e1f1f21
+.long 0x964b4bdd,0x964b4bdd
+.long 0x61bdbddc,0x61bdbddc
+.long 0x0d8b8b86,0x0d8b8b86
+.long 0x0f8a8a85,0x0f8a8a85
+.long 0xe0707090,0xe0707090
+.long 0x7c3e3e42,0x7c3e3e42
+.long 0x71b5b5c4,0x71b5b5c4
+.long 0xcc6666aa,0xcc6666aa
+.long 0x904848d8,0x904848d8
+.long 0x06030305,0x06030305
+.long 0xf7f6f601,0xf7f6f601
+.long 0x1c0e0e12,0x1c0e0e12
+.long 0xc26161a3,0xc26161a3
+.long 0x6a35355f,0x6a35355f
+.long 0xae5757f9,0xae5757f9
+.long 0x69b9b9d0,0x69b9b9d0
+.long 0x17868691,0x17868691
+.long 0x99c1c158,0x99c1c158
+.long 0x3a1d1d27,0x3a1d1d27
+.long 0x279e9eb9,0x279e9eb9
+.long 0xd9e1e138,0xd9e1e138
+.long 0xebf8f813,0xebf8f813
+.long 0x2b9898b3,0x2b9898b3
+.long 0x22111133,0x22111133
+.long 0xd26969bb,0xd26969bb
+.long 0xa9d9d970,0xa9d9d970
+.long 0x078e8e89,0x078e8e89
+.long 0x339494a7,0x339494a7
+.long 0x2d9b9bb6,0x2d9b9bb6
+.long 0x3c1e1e22,0x3c1e1e22
+.long 0x15878792,0x15878792
+.long 0xc9e9e920,0xc9e9e920
+.long 0x87cece49,0x87cece49
+.long 0xaa5555ff,0xaa5555ff
+.long 0x50282878,0x50282878
+.long 0xa5dfdf7a,0xa5dfdf7a
+.long 0x038c8c8f,0x038c8c8f
+.long 0x59a1a1f8,0x59a1a1f8
+.long 0x09898980,0x09898980
+.long 0x1a0d0d17,0x1a0d0d17
+.long 0x65bfbfda,0x65bfbfda
+.long 0xd7e6e631,0xd7e6e631
+.long 0x844242c6,0x844242c6
+.long 0xd06868b8,0xd06868b8
+.long 0x824141c3,0x824141c3
+.long 0x299999b0,0x299999b0
+.long 0x5a2d2d77,0x5a2d2d77
+.long 0x1e0f0f11,0x1e0f0f11
+.long 0x7bb0b0cb,0x7bb0b0cb
+.long 0xa85454fc,0xa85454fc
+.long 0x6dbbbbd6,0x6dbbbbd6
+.long 0x2c16163a,0x2c16163a
+.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
+.long 0x51f4a750,0x51f4a750
+.long 0x7e416553,0x7e416553
+.long 0x1a17a4c3,0x1a17a4c3
+.long 0x3a275e96,0x3a275e96
+.long 0x3bab6bcb,0x3bab6bcb
+.long 0x1f9d45f1,0x1f9d45f1
+.long 0xacfa58ab,0xacfa58ab
+.long 0x4be30393,0x4be30393
+.long 0x2030fa55,0x2030fa55
+.long 0xad766df6,0xad766df6
+.long 0x88cc7691,0x88cc7691
+.long 0xf5024c25,0xf5024c25
+.long 0x4fe5d7fc,0x4fe5d7fc
+.long 0xc52acbd7,0xc52acbd7
+.long 0x26354480,0x26354480
+.long 0xb562a38f,0xb562a38f
+.long 0xdeb15a49,0xdeb15a49
+.long 0x25ba1b67,0x25ba1b67
+.long 0x45ea0e98,0x45ea0e98
+.long 0x5dfec0e1,0x5dfec0e1
+.long 0xc32f7502,0xc32f7502
+.long 0x814cf012,0x814cf012
+.long 0x8d4697a3,0x8d4697a3
+.long 0x6bd3f9c6,0x6bd3f9c6
+.long 0x038f5fe7,0x038f5fe7
+.long 0x15929c95,0x15929c95
+.long 0xbf6d7aeb,0xbf6d7aeb
+.long 0x955259da,0x955259da
+.long 0xd4be832d,0xd4be832d
+.long 0x587421d3,0x587421d3
+.long 0x49e06929,0x49e06929
+.long 0x8ec9c844,0x8ec9c844
+.long 0x75c2896a,0x75c2896a
+.long 0xf48e7978,0xf48e7978
+.long 0x99583e6b,0x99583e6b
+.long 0x27b971dd,0x27b971dd
+.long 0xbee14fb6,0xbee14fb6
+.long 0xf088ad17,0xf088ad17
+.long 0xc920ac66,0xc920ac66
+.long 0x7dce3ab4,0x7dce3ab4
+.long 0x63df4a18,0x63df4a18
+.long 0xe51a3182,0xe51a3182
+.long 0x97513360,0x97513360
+.long 0x62537f45,0x62537f45
+.long 0xb16477e0,0xb16477e0
+.long 0xbb6bae84,0xbb6bae84
+.long 0xfe81a01c,0xfe81a01c
+.long 0xf9082b94,0xf9082b94
+.long 0x70486858,0x70486858
+.long 0x8f45fd19,0x8f45fd19
+.long 0x94de6c87,0x94de6c87
+.long 0x527bf8b7,0x527bf8b7
+.long 0xab73d323,0xab73d323
+.long 0x724b02e2,0x724b02e2
+.long 0xe31f8f57,0xe31f8f57
+.long 0x6655ab2a,0x6655ab2a
+.long 0xb2eb2807,0xb2eb2807
+.long 0x2fb5c203,0x2fb5c203
+.long 0x86c57b9a,0x86c57b9a
+.long 0xd33708a5,0xd33708a5
+.long 0x302887f2,0x302887f2
+.long 0x23bfa5b2,0x23bfa5b2
+.long 0x02036aba,0x02036aba
+.long 0xed16825c,0xed16825c
+.long 0x8acf1c2b,0x8acf1c2b
+.long 0xa779b492,0xa779b492
+.long 0xf307f2f0,0xf307f2f0
+.long 0x4e69e2a1,0x4e69e2a1
+.long 0x65daf4cd,0x65daf4cd
+.long 0x0605bed5,0x0605bed5
+.long 0xd134621f,0xd134621f
+.long 0xc4a6fe8a,0xc4a6fe8a
+.long 0x342e539d,0x342e539d
+.long 0xa2f355a0,0xa2f355a0
+.long 0x058ae132,0x058ae132
+.long 0xa4f6eb75,0xa4f6eb75
+.long 0x0b83ec39,0x0b83ec39
+.long 0x4060efaa,0x4060efaa
+.long 0x5e719f06,0x5e719f06
+.long 0xbd6e1051,0xbd6e1051
+.long 0x3e218af9,0x3e218af9
+.long 0x96dd063d,0x96dd063d
+.long 0xdd3e05ae,0xdd3e05ae
+.long 0x4de6bd46,0x4de6bd46
+.long 0x91548db5,0x91548db5
+.long 0x71c45d05,0x71c45d05
+.long 0x0406d46f,0x0406d46f
+.long 0x605015ff,0x605015ff
+.long 0x1998fb24,0x1998fb24
+.long 0xd6bde997,0xd6bde997
+.long 0x894043cc,0x894043cc
+.long 0x67d99e77,0x67d99e77
+.long 0xb0e842bd,0xb0e842bd
+.long 0x07898b88,0x07898b88
+.long 0xe7195b38,0xe7195b38
+.long 0x79c8eedb,0x79c8eedb
+.long 0xa17c0a47,0xa17c0a47
+.long 0x7c420fe9,0x7c420fe9
+.long 0xf8841ec9,0xf8841ec9
+.long 0x00000000,0x00000000
+.long 0x09808683,0x09808683
+.long 0x322bed48,0x322bed48
+.long 0x1e1170ac,0x1e1170ac
+.long 0x6c5a724e,0x6c5a724e
+.long 0xfd0efffb,0xfd0efffb
+.long 0x0f853856,0x0f853856
+.long 0x3daed51e,0x3daed51e
+.long 0x362d3927,0x362d3927
+.long 0x0a0fd964,0x0a0fd964
+.long 0x685ca621,0x685ca621
+.long 0x9b5b54d1,0x9b5b54d1
+.long 0x24362e3a,0x24362e3a
+.long 0x0c0a67b1,0x0c0a67b1
+.long 0x9357e70f,0x9357e70f
+.long 0xb4ee96d2,0xb4ee96d2
+.long 0x1b9b919e,0x1b9b919e
+.long 0x80c0c54f,0x80c0c54f
+.long 0x61dc20a2,0x61dc20a2
+.long 0x5a774b69,0x5a774b69
+.long 0x1c121a16,0x1c121a16
+.long 0xe293ba0a,0xe293ba0a
+.long 0xc0a02ae5,0xc0a02ae5
+.long 0x3c22e043,0x3c22e043
+.long 0x121b171d,0x121b171d
+.long 0x0e090d0b,0x0e090d0b
+.long 0xf28bc7ad,0xf28bc7ad
+.long 0x2db6a8b9,0x2db6a8b9
+.long 0x141ea9c8,0x141ea9c8
+.long 0x57f11985,0x57f11985
+.long 0xaf75074c,0xaf75074c
+.long 0xee99ddbb,0xee99ddbb
+.long 0xa37f60fd,0xa37f60fd
+.long 0xf701269f,0xf701269f
+.long 0x5c72f5bc,0x5c72f5bc
+.long 0x44663bc5,0x44663bc5
+.long 0x5bfb7e34,0x5bfb7e34
+.long 0x8b432976,0x8b432976
+.long 0xcb23c6dc,0xcb23c6dc
+.long 0xb6edfc68,0xb6edfc68
+.long 0xb8e4f163,0xb8e4f163
+.long 0xd731dcca,0xd731dcca
+.long 0x42638510,0x42638510
+.long 0x13972240,0x13972240
+.long 0x84c61120,0x84c61120
+.long 0x854a247d,0x854a247d
+.long 0xd2bb3df8,0xd2bb3df8
+.long 0xaef93211,0xaef93211
+.long 0xc729a16d,0xc729a16d
+.long 0x1d9e2f4b,0x1d9e2f4b
+.long 0xdcb230f3,0xdcb230f3
+.long 0x0d8652ec,0x0d8652ec
+.long 0x77c1e3d0,0x77c1e3d0
+.long 0x2bb3166c,0x2bb3166c
+.long 0xa970b999,0xa970b999
+.long 0x119448fa,0x119448fa
+.long 0x47e96422,0x47e96422
+.long 0xa8fc8cc4,0xa8fc8cc4
+.long 0xa0f03f1a,0xa0f03f1a
+.long 0x567d2cd8,0x567d2cd8
+.long 0x223390ef,0x223390ef
+.long 0x87494ec7,0x87494ec7
+.long 0xd938d1c1,0xd938d1c1
+.long 0x8ccaa2fe,0x8ccaa2fe
+.long 0x98d40b36,0x98d40b36
+.long 0xa6f581cf,0xa6f581cf
+.long 0xa57ade28,0xa57ade28
+.long 0xdab78e26,0xdab78e26
+.long 0x3fadbfa4,0x3fadbfa4
+.long 0x2c3a9de4,0x2c3a9de4
+.long 0x5078920d,0x5078920d
+.long 0x6a5fcc9b,0x6a5fcc9b
+.long 0x547e4662,0x547e4662
+.long 0xf68d13c2,0xf68d13c2
+.long 0x90d8b8e8,0x90d8b8e8
+.long 0x2e39f75e,0x2e39f75e
+.long 0x82c3aff5,0x82c3aff5
+.long 0x9f5d80be,0x9f5d80be
+.long 0x69d0937c,0x69d0937c
+.long 0x6fd52da9,0x6fd52da9
+.long 0xcf2512b3,0xcf2512b3
+.long 0xc8ac993b,0xc8ac993b
+.long 0x10187da7,0x10187da7
+.long 0xe89c636e,0xe89c636e
+.long 0xdb3bbb7b,0xdb3bbb7b
+.long 0xcd267809,0xcd267809
+.long 0x6e5918f4,0x6e5918f4
+.long 0xec9ab701,0xec9ab701
+.long 0x834f9aa8,0x834f9aa8
+.long 0xe6956e65,0xe6956e65
+.long 0xaaffe67e,0xaaffe67e
+.long 0x21bccf08,0x21bccf08
+.long 0xef15e8e6,0xef15e8e6
+.long 0xbae79bd9,0xbae79bd9
+.long 0x4a6f36ce,0x4a6f36ce
+.long 0xea9f09d4,0xea9f09d4
+.long 0x29b07cd6,0x29b07cd6
+.long 0x31a4b2af,0x31a4b2af
+.long 0x2a3f2331,0x2a3f2331
+.long 0xc6a59430,0xc6a59430
+.long 0x35a266c0,0x35a266c0
+.long 0x744ebc37,0x744ebc37
+.long 0xfc82caa6,0xfc82caa6
+.long 0xe090d0b0,0xe090d0b0
+.long 0x33a7d815,0x33a7d815
+.long 0xf104984a,0xf104984a
+.long 0x41ecdaf7,0x41ecdaf7
+.long 0x7fcd500e,0x7fcd500e
+.long 0x1791f62f,0x1791f62f
+.long 0x764dd68d,0x764dd68d
+.long 0x43efb04d,0x43efb04d
+.long 0xccaa4d54,0xccaa4d54
+.long 0xe49604df,0xe49604df
+.long 0x9ed1b5e3,0x9ed1b5e3
+.long 0x4c6a881b,0x4c6a881b
+.long 0xc12c1fb8,0xc12c1fb8
+.long 0x4665517f,0x4665517f
+.long 0x9d5eea04,0x9d5eea04
+.long 0x018c355d,0x018c355d
+.long 0xfa877473,0xfa877473
+.long 0xfb0b412e,0xfb0b412e
+.long 0xb3671d5a,0xb3671d5a
+.long 0x92dbd252,0x92dbd252
+.long 0xe9105633,0xe9105633
+.long 0x6dd64713,0x6dd64713
+.long 0x9ad7618c,0x9ad7618c
+.long 0x37a10c7a,0x37a10c7a
+.long 0x59f8148e,0x59f8148e
+.long 0xeb133c89,0xeb133c89
+.long 0xcea927ee,0xcea927ee
+.long 0xb761c935,0xb761c935
+.long 0xe11ce5ed,0xe11ce5ed
+.long 0x7a47b13c,0x7a47b13c
+.long 0x9cd2df59,0x9cd2df59
+.long 0x55f2733f,0x55f2733f
+.long 0x1814ce79,0x1814ce79
+.long 0x73c737bf,0x73c737bf
+.long 0x53f7cdea,0x53f7cdea
+.long 0x5ffdaa5b,0x5ffdaa5b
+.long 0xdf3d6f14,0xdf3d6f14
+.long 0x7844db86,0x7844db86
+.long 0xcaaff381,0xcaaff381
+.long 0xb968c43e,0xb968c43e
+.long 0x3824342c,0x3824342c
+.long 0xc2a3405f,0xc2a3405f
+.long 0x161dc372,0x161dc372
+.long 0xbce2250c,0xbce2250c
+.long 0x283c498b,0x283c498b
+.long 0xff0d9541,0xff0d9541
+.long 0x39a80171,0x39a80171
+.long 0x080cb3de,0x080cb3de
+.long 0xd8b4e49c,0xd8b4e49c
+.long 0x6456c190,0x6456c190
+.long 0x7bcb8461,0x7bcb8461
+.long 0xd532b670,0xd532b670
+.long 0x486c5c74,0x486c5c74
+.long 0xd0b85742,0xd0b85742
+.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
+
+
+.globl AES_encrypt
+.type AES_encrypt,@function
+.align 7
+AES_encrypt:
+ stwu 1,-128(1)
+ mflr 0
+
+ stw 4,52(1)
+ stw 14,56(1)
+ stw 15,60(1)
+ stw 16,64(1)
+ stw 17,68(1)
+ stw 18,72(1)
+ stw 19,76(1)
+ stw 20,80(1)
+ stw 21,84(1)
+ stw 22,88(1)
+ stw 23,92(1)
+ stw 24,96(1)
+ stw 25,100(1)
+ stw 26,104(1)
+ stw 27,108(1)
+ stw 28,112(1)
+ stw 29,116(1)
+ stw 30,120(1)
+ stw 31,124(1)
+ stw 0,132(1)
+
+ andi. 12,3,3
+ andi. 0,4,3
+ or. 12,12,0
+ bne .Lenc_unaligned
+
+.Lenc_unaligned_ok:
+ lwz 8,0(3)
+ lwz 9,4(3)
+ lwz 10,8(3)
+ lwz 11,12(3)
+ bl .LAES_Te
+ bl .Lppc_AES_encrypt_compact
+ lwz 4,52(1)
+ stw 8,0(4)
+ stw 9,4(4)
+ stw 10,8(4)
+ stw 11,12(4)
+ b .Lenc_done
+
+.Lenc_unaligned:
+ subfic 12,3,4096
+ subfic 0,4,4096
+ andi. 12,12,4096-16
+ beq .Lenc_xpage
+ andi. 0,0,4096-16
+ bne .Lenc_unaligned_ok
+
+.Lenc_xpage:
+ lbz 16,0(3)
+ lbz 17,1(3)
+ lbz 18,2(3)
+ lbz 8,3(3)
+ lbz 20,4(3)
+ lbz 21,5(3)
+ lbz 22,6(3)
+ lbz 9,7(3)
+ lbz 24,8(3)
+ lbz 25,9(3)
+ lbz 26,10(3)
+ insrwi 8,16,8,0
+ lbz 10,11(3)
+ insrwi 9,20,8,0
+ lbz 28,12(3)
+ insrwi 8,17,8,8
+ lbz 29,13(3)
+ insrwi 9,21,8,8
+ lbz 30,14(3)
+ insrwi 8,18,8,16
+ lbz 11,15(3)
+ insrwi 9,22,8,16
+ insrwi 10,24,8,0
+ insrwi 11,28,8,0
+ insrwi 10,25,8,8
+ insrwi 11,29,8,8
+ insrwi 10,26,8,16
+ insrwi 11,30,8,16
+
+ bl .LAES_Te
+ bl .Lppc_AES_encrypt_compact
+ lwz 4,52(1)
+
+ extrwi 16,8,8,0
+ extrwi 17,8,8,8
+ stb 16,0(4)
+ extrwi 18,8,8,16
+ stb 17,1(4)
+ stb 18,2(4)
+ extrwi 20,9,8,0
+ stb 8,3(4)
+ extrwi 21,9,8,8
+ stb 20,4(4)
+ extrwi 22,9,8,16
+ stb 21,5(4)
+ stb 22,6(4)
+ extrwi 24,10,8,0
+ stb 9,7(4)
+ extrwi 25,10,8,8
+ stb 24,8(4)
+ extrwi 26,10,8,16
+ stb 25,9(4)
+ stb 26,10(4)
+ extrwi 28,11,8,0
+ stb 10,11(4)
+ extrwi 29,11,8,8
+ stb 28,12(4)
+ extrwi 30,11,8,16
+ stb 29,13(4)
+ stb 30,14(4)
+ stb 11,15(4)
+
+.Lenc_done:
+ lwz 0,132(1)
+ lwz 14,56(1)
+ lwz 15,60(1)
+ lwz 16,64(1)
+ lwz 17,68(1)
+ lwz 18,72(1)
+ lwz 19,76(1)
+ lwz 20,80(1)
+ lwz 21,84(1)
+ lwz 22,88(1)
+ lwz 23,92(1)
+ lwz 24,96(1)
+ lwz 25,100(1)
+ lwz 26,104(1)
+ lwz 27,108(1)
+ lwz 28,112(1)
+ lwz 29,116(1)
+ lwz 30,120(1)
+ lwz 31,124(1)
+ mtlr 0
+ addi 1,1,128
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+
+.align 5
+.Lppc_AES_encrypt:
+ lwz 16,240(5)
+ addi 6,3,3
+ lwz 12,0(5)
+ addi 7,3,2
+ lwz 0,4(5)
+ addi 4,3,1
+ lwz 14,8(5)
+ addi 16,16,-1
+ lwz 15,12(5)
+ addi 5,5,16
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ mtctr 16
+.align 4
+.Lenc_loop:
+ rlwinm 16,8,11,21,28
+ rlwinm 17,9,11,21,28
+ rlwinm 18,10,11,21,28
+ rlwinm 19,11,11,21,28
+ lwz 12,0(5)
+ rlwinm 20,9,19,21,28
+ lwz 0,4(5)
+ rlwinm 21,10,19,21,28
+ lwz 14,8(5)
+ rlwinm 22,11,19,21,28
+ lwz 15,12(5)
+ rlwinm 23,8,19,21,28
+ lwzx 16,3,16
+ rlwinm 24,10,27,21,28
+ lwzx 17,3,17
+ rlwinm 25,11,27,21,28
+ lwzx 18,3,18
+ rlwinm 26,8,27,21,28
+ lwzx 19,3,19
+ rlwinm 27,9,27,21,28
+ lwzx 20,6,20
+ rlwinm 28,11,3,21,28
+ lwzx 21,6,21
+ rlwinm 29,8,3,21,28
+ lwzx 22,6,22
+ rlwinm 30,9,3,21,28
+ lwzx 23,6,23
+ rlwinm 31,10,3,21,28
+ lwzx 24,7,24
+ xor 12,12,16
+ lwzx 25,7,25
+ xor 0,0,17
+ lwzx 26,7,26
+ xor 14,14,18
+ lwzx 27,7,27
+ xor 15,15,19
+ lwzx 28,4,28
+ xor 12,12,20
+ lwzx 29,4,29
+ xor 0,0,21
+ lwzx 30,4,30
+ xor 14,14,22
+ lwzx 31,4,31
+ xor 15,15,23
+ xor 12,12,24
+ xor 0,0,25
+ xor 14,14,26
+ xor 15,15,27
+ xor 8,12,28
+ xor 9,0,29
+ xor 10,14,30
+ xor 11,15,31
+ addi 5,5,16
+ bdnz .Lenc_loop
+
+ addi 7,3,2048
+ nop
+ lwz 12,0(5)
+ rlwinm 16,8,8,24,31
+ lwz 0,4(5)
+ rlwinm 17,9,8,24,31
+ lwz 14,8(5)
+ rlwinm 18,10,8,24,31
+ lwz 15,12(5)
+ rlwinm 19,11,8,24,31
+ lwz 24,2048(3)
+ rlwinm 20,9,16,24,31
+ lwz 25,2080(3)
+ rlwinm 21,10,16,24,31
+ lwz 26,2112(3)
+ rlwinm 22,11,16,24,31
+ lwz 27,2144(3)
+ rlwinm 23,8,16,24,31
+ lwz 28,2176(3)
+ rlwinm 24,10,24,24,31
+ lwz 29,2208(3)
+ rlwinm 25,11,24,24,31
+ lwz 30,2240(3)
+ rlwinm 26,8,24,24,31
+ lwz 31,2272(3)
+ rlwinm 27,9,24,24,31
+ lbzx 16,7,16
+ rlwinm 28,11,0,24,31
+ lbzx 17,7,17
+ rlwinm 29,8,0,24,31
+ lbzx 18,7,18
+ rlwinm 30,9,0,24,31
+ lbzx 19,7,19
+ rlwinm 31,10,0,24,31
+ lbzx 20,7,20
+ rlwinm 8,16,24,0,7
+ lbzx 21,7,21
+ rlwinm 9,17,24,0,7
+ lbzx 22,7,22
+ rlwinm 10,18,24,0,7
+ lbzx 23,7,23
+ rlwinm 11,19,24,0,7
+ lbzx 24,7,24
+ rlwimi 8,20,16,8,15
+ lbzx 25,7,25
+ rlwimi 9,21,16,8,15
+ lbzx 26,7,26
+ rlwimi 10,22,16,8,15
+ lbzx 27,7,27
+ rlwimi 11,23,16,8,15
+ lbzx 28,7,28
+ rlwimi 8,24,8,16,23
+ lbzx 29,7,29
+ rlwimi 9,25,8,16,23
+ lbzx 30,7,30
+ rlwimi 10,26,8,16,23
+ lbzx 31,7,31
+ rlwimi 11,27,8,16,23
+ or 8,8,28
+ or 9,9,29
+ or 10,10,30
+ or 11,11,31
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 4
+.Lppc_AES_encrypt_compact:
+ lwz 16,240(5)
+ addi 6,3,2048
+ lwz 12,0(5)
+ lis 7,0x8080
+ lwz 0,4(5)
+ lis 4,0x1b1b
+ lwz 14,8(5)
+ ori 7,7,0x8080
+ lwz 15,12(5)
+ ori 4,4,0x1b1b
+ addi 5,5,16
+ mtctr 16
+.align 4
+.Lenc_compact_loop:
+ xor 8,8,12
+ xor 9,9,0
+ rlwinm 16,8,8,24,31
+ xor 10,10,14
+ rlwinm 17,9,8,24,31
+ xor 11,11,15
+ rlwinm 18,10,8,24,31
+ rlwinm 19,11,8,24,31
+ rlwinm 20,9,16,24,31
+ rlwinm 21,10,16,24,31
+ rlwinm 22,11,16,24,31
+ rlwinm 23,8,16,24,31
+ lbzx 16,6,16
+ rlwinm 24,10,24,24,31
+ lbzx 17,6,17
+ rlwinm 25,11,24,24,31
+ lbzx 18,6,18
+ rlwinm 26,8,24,24,31
+ lbzx 19,6,19
+ rlwinm 27,9,24,24,31
+ lbzx 20,6,20
+ rlwinm 28,11,0,24,31
+ lbzx 21,6,21
+ rlwinm 29,8,0,24,31
+ lbzx 22,6,22
+ rlwinm 30,9,0,24,31
+ lbzx 23,6,23
+ rlwinm 31,10,0,24,31
+ lbzx 24,6,24
+ rlwinm 8,16,24,0,7
+ lbzx 25,6,25
+ rlwinm 9,17,24,0,7
+ lbzx 26,6,26
+ rlwinm 10,18,24,0,7
+ lbzx 27,6,27
+ rlwinm 11,19,24,0,7
+ lbzx 28,6,28
+ rlwimi 8,20,16,8,15
+ lbzx 29,6,29
+ rlwimi 9,21,16,8,15
+ lbzx 30,6,30
+ rlwimi 10,22,16,8,15
+ lbzx 31,6,31
+ rlwimi 11,23,16,8,15
+ rlwimi 8,24,8,16,23
+ rlwimi 9,25,8,16,23
+ rlwimi 10,26,8,16,23
+ rlwimi 11,27,8,16,23
+ lwz 12,0(5)
+ or 8,8,28
+ lwz 0,4(5)
+ or 9,9,29
+ lwz 14,8(5)
+ or 10,10,30
+ lwz 15,12(5)
+ or 11,11,31
+
+ addi 5,5,16
+ bdz .Lenc_compact_done
+
+ and 16,8,7
+ and 17,9,7
+ and 18,10,7
+ and 19,11,7
+ srwi 20,16,7
+ andc 24,8,7
+ srwi 21,17,7
+ andc 25,9,7
+ srwi 22,18,7
+ andc 26,10,7
+ srwi 23,19,7
+ andc 27,11,7
+ sub 16,16,20
+ sub 17,17,21
+ sub 18,18,22
+ sub 19,19,23
+ add 24,24,24
+ add 25,25,25
+ add 26,26,26
+ add 27,27,27
+ and 16,16,4
+ and 17,17,4
+ and 18,18,4
+ and 19,19,4
+ xor 16,16,24
+ xor 17,17,25
+ rotlwi 28,8,16
+ xor 18,18,26
+ rotlwi 29,9,16
+ xor 19,19,27
+ rotlwi 30,10,16
+
+ xor 8,8,16
+ rotlwi 31,11,16
+ xor 9,9,17
+ rotrwi 8,8,24
+ xor 10,10,18
+ rotrwi 9,9,24
+ xor 11,11,19
+ rotrwi 10,10,24
+ xor 8,8,16
+ rotrwi 11,11,24
+ xor 9,9,17
+ xor 10,10,18
+ xor 11,11,19
+ rotlwi 24,28,8
+ xor 8,8,28
+ rotlwi 25,29,8
+ xor 9,9,29
+ rotlwi 26,30,8
+ xor 10,10,30
+ rotlwi 27,31,8
+ xor 11,11,31
+ xor 8,8,24
+ xor 9,9,25
+ xor 10,10,26
+ xor 11,11,27
+
+ b .Lenc_compact_loop
+.align 4
+.Lenc_compact_done:
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size AES_encrypt,.-AES_encrypt
+
+.globl AES_decrypt
+.type AES_decrypt,@function
+.align 7
+AES_decrypt:
+ stwu 1,-128(1)
+ mflr 0
+
+ stw 4,52(1)
+ stw 14,56(1)
+ stw 15,60(1)
+ stw 16,64(1)
+ stw 17,68(1)
+ stw 18,72(1)
+ stw 19,76(1)
+ stw 20,80(1)
+ stw 21,84(1)
+ stw 22,88(1)
+ stw 23,92(1)
+ stw 24,96(1)
+ stw 25,100(1)
+ stw 26,104(1)
+ stw 27,108(1)
+ stw 28,112(1)
+ stw 29,116(1)
+ stw 30,120(1)
+ stw 31,124(1)
+ stw 0,132(1)
+
+ andi. 12,3,3
+ andi. 0,4,3
+ or. 12,12,0
+ bne .Ldec_unaligned
+
+.Ldec_unaligned_ok:
+ lwz 8,0(3)
+ lwz 9,4(3)
+ lwz 10,8(3)
+ lwz 11,12(3)
+ bl .LAES_Td
+ bl .Lppc_AES_decrypt_compact
+ lwz 4,52(1)
+ stw 8,0(4)
+ stw 9,4(4)
+ stw 10,8(4)
+ stw 11,12(4)
+ b .Ldec_done
+
+.Ldec_unaligned:
+ subfic 12,3,4096
+ subfic 0,4,4096
+ andi. 12,12,4096-16
+ beq .Ldec_xpage
+ andi. 0,0,4096-16
+ bne .Ldec_unaligned_ok
+
+.Ldec_xpage:
+ lbz 16,0(3)
+ lbz 17,1(3)
+ lbz 18,2(3)
+ lbz 8,3(3)
+ lbz 20,4(3)
+ lbz 21,5(3)
+ lbz 22,6(3)
+ lbz 9,7(3)
+ lbz 24,8(3)
+ lbz 25,9(3)
+ lbz 26,10(3)
+ insrwi 8,16,8,0
+ lbz 10,11(3)
+ insrwi 9,20,8,0
+ lbz 28,12(3)
+ insrwi 8,17,8,8
+ lbz 29,13(3)
+ insrwi 9,21,8,8
+ lbz 30,14(3)
+ insrwi 8,18,8,16
+ lbz 11,15(3)
+ insrwi 9,22,8,16
+ insrwi 10,24,8,0
+ insrwi 11,28,8,0
+ insrwi 10,25,8,8
+ insrwi 11,29,8,8
+ insrwi 10,26,8,16
+ insrwi 11,30,8,16
+
+ bl .LAES_Td
+ bl .Lppc_AES_decrypt_compact
+ lwz 4,52(1)
+
+ extrwi 16,8,8,0
+ extrwi 17,8,8,8
+ stb 16,0(4)
+ extrwi 18,8,8,16
+ stb 17,1(4)
+ stb 18,2(4)
+ extrwi 20,9,8,0
+ stb 8,3(4)
+ extrwi 21,9,8,8
+ stb 20,4(4)
+ extrwi 22,9,8,16
+ stb 21,5(4)
+ stb 22,6(4)
+ extrwi 24,10,8,0
+ stb 9,7(4)
+ extrwi 25,10,8,8
+ stb 24,8(4)
+ extrwi 26,10,8,16
+ stb 25,9(4)
+ stb 26,10(4)
+ extrwi 28,11,8,0
+ stb 10,11(4)
+ extrwi 29,11,8,8
+ stb 28,12(4)
+ extrwi 30,11,8,16
+ stb 29,13(4)
+ stb 30,14(4)
+ stb 11,15(4)
+
+.Ldec_done:
+ lwz 0,132(1)
+ lwz 14,56(1)
+ lwz 15,60(1)
+ lwz 16,64(1)
+ lwz 17,68(1)
+ lwz 18,72(1)
+ lwz 19,76(1)
+ lwz 20,80(1)
+ lwz 21,84(1)
+ lwz 22,88(1)
+ lwz 23,92(1)
+ lwz 24,96(1)
+ lwz 25,100(1)
+ lwz 26,104(1)
+ lwz 27,108(1)
+ lwz 28,112(1)
+ lwz 29,116(1)
+ lwz 30,120(1)
+ lwz 31,124(1)
+ mtlr 0
+ addi 1,1,128
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+
+.align 5
+.Lppc_AES_decrypt:
+ lwz 16,240(5)
+ addi 6,3,3
+ lwz 12,0(5)
+ addi 7,3,2
+ lwz 0,4(5)
+ addi 4,3,1
+ lwz 14,8(5)
+ addi 16,16,-1
+ lwz 15,12(5)
+ addi 5,5,16
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ mtctr 16
+.align 4
+.Ldec_loop:
+ rlwinm 16,8,11,21,28
+ rlwinm 17,9,11,21,28
+ rlwinm 18,10,11,21,28
+ rlwinm 19,11,11,21,28
+ lwz 12,0(5)
+ rlwinm 20,11,19,21,28
+ lwz 0,4(5)
+ rlwinm 21,8,19,21,28
+ lwz 14,8(5)
+ rlwinm 22,9,19,21,28
+ lwz 15,12(5)
+ rlwinm 23,10,19,21,28
+ lwzx 16,3,16
+ rlwinm 24,10,27,21,28
+ lwzx 17,3,17
+ rlwinm 25,11,27,21,28
+ lwzx 18,3,18
+ rlwinm 26,8,27,21,28
+ lwzx 19,3,19
+ rlwinm 27,9,27,21,28
+ lwzx 20,6,20
+ rlwinm 28,9,3,21,28
+ lwzx 21,6,21
+ rlwinm 29,10,3,21,28
+ lwzx 22,6,22
+ rlwinm 30,11,3,21,28
+ lwzx 23,6,23
+ rlwinm 31,8,3,21,28
+ lwzx 24,7,24
+ xor 12,12,16
+ lwzx 25,7,25
+ xor 0,0,17
+ lwzx 26,7,26
+ xor 14,14,18
+ lwzx 27,7,27
+ xor 15,15,19
+ lwzx 28,4,28
+ xor 12,12,20
+ lwzx 29,4,29
+ xor 0,0,21
+ lwzx 30,4,30
+ xor 14,14,22
+ lwzx 31,4,31
+ xor 15,15,23
+ xor 12,12,24
+ xor 0,0,25
+ xor 14,14,26
+ xor 15,15,27
+ xor 8,12,28
+ xor 9,0,29
+ xor 10,14,30
+ xor 11,15,31
+ addi 5,5,16
+ bdnz .Ldec_loop
+
+ addi 7,3,2048
+ nop
+ lwz 12,0(5)
+ rlwinm 16,8,8,24,31
+ lwz 0,4(5)
+ rlwinm 17,9,8,24,31
+ lwz 14,8(5)
+ rlwinm 18,10,8,24,31
+ lwz 15,12(5)
+ rlwinm 19,11,8,24,31
+ lwz 24,2048(3)
+ rlwinm 20,11,16,24,31
+ lwz 25,2080(3)
+ rlwinm 21,8,16,24,31
+ lwz 26,2112(3)
+ lbzx 16,7,16
+ lwz 27,2144(3)
+ lbzx 17,7,17
+ lwz 28,2176(3)
+ rlwinm 22,9,16,24,31
+ lwz 29,2208(3)
+ rlwinm 23,10,16,24,31
+ lwz 30,2240(3)
+ rlwinm 24,10,24,24,31
+ lwz 31,2272(3)
+ rlwinm 25,11,24,24,31
+ lbzx 18,7,18
+ rlwinm 26,8,24,24,31
+ lbzx 19,7,19
+ rlwinm 27,9,24,24,31
+ lbzx 20,7,20
+ rlwinm 28,9,0,24,31
+ lbzx 21,7,21
+ rlwinm 29,10,0,24,31
+ lbzx 22,7,22
+ rlwinm 30,11,0,24,31
+ lbzx 23,7,23
+ rlwinm 31,8,0,24,31
+ lbzx 24,7,24
+ rlwinm 8,16,24,0,7
+ lbzx 25,7,25
+ rlwinm 9,17,24,0,7
+ lbzx 26,7,26
+ rlwinm 10,18,24,0,7
+ lbzx 27,7,27
+ rlwinm 11,19,24,0,7
+ lbzx 28,7,28
+ rlwimi 8,20,16,8,15
+ lbzx 29,7,29
+ rlwimi 9,21,16,8,15
+ lbzx 30,7,30
+ rlwimi 10,22,16,8,15
+ lbzx 31,7,31
+ rlwimi 11,23,16,8,15
+ rlwimi 8,24,8,16,23
+ rlwimi 9,25,8,16,23
+ rlwimi 10,26,8,16,23
+ rlwimi 11,27,8,16,23
+ or 8,8,28
+ or 9,9,29
+ or 10,10,30
+ or 11,11,31
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 4
+.Lppc_AES_decrypt_compact:
+ lwz 16,240(5)
+ addi 6,3,2048
+ lwz 12,0(5)
+ lis 7,0x8080
+ lwz 0,4(5)
+ lis 4,0x1b1b
+ lwz 14,8(5)
+ ori 7,7,0x8080
+ lwz 15,12(5)
+ ori 4,4,0x1b1b
+ addi 5,5,16
+ mtctr 16
+.align 4
+.Ldec_compact_loop:
+ xor 8,8,12
+ xor 9,9,0
+ rlwinm 16,8,8,24,31
+ xor 10,10,14
+ rlwinm 17,9,8,24,31
+ xor 11,11,15
+ rlwinm 18,10,8,24,31
+ rlwinm 19,11,8,24,31
+ rlwinm 20,11,16,24,31
+ rlwinm 21,8,16,24,31
+ rlwinm 22,9,16,24,31
+ rlwinm 23,10,16,24,31
+ lbzx 16,6,16
+ rlwinm 24,10,24,24,31
+ lbzx 17,6,17
+ rlwinm 25,11,24,24,31
+ lbzx 18,6,18
+ rlwinm 26,8,24,24,31
+ lbzx 19,6,19
+ rlwinm 27,9,24,24,31
+ lbzx 20,6,20
+ rlwinm 28,9,0,24,31
+ lbzx 21,6,21
+ rlwinm 29,10,0,24,31
+ lbzx 22,6,22
+ rlwinm 30,11,0,24,31
+ lbzx 23,6,23
+ rlwinm 31,8,0,24,31
+ lbzx 24,6,24
+ rlwinm 8,16,24,0,7
+ lbzx 25,6,25
+ rlwinm 9,17,24,0,7
+ lbzx 26,6,26
+ rlwinm 10,18,24,0,7
+ lbzx 27,6,27
+ rlwinm 11,19,24,0,7
+ lbzx 28,6,28
+ rlwimi 8,20,16,8,15
+ lbzx 29,6,29
+ rlwimi 9,21,16,8,15
+ lbzx 30,6,30
+ rlwimi 10,22,16,8,15
+ lbzx 31,6,31
+ rlwimi 11,23,16,8,15
+ rlwimi 8,24,8,16,23
+ rlwimi 9,25,8,16,23
+ rlwimi 10,26,8,16,23
+ rlwimi 11,27,8,16,23
+ lwz 12,0(5)
+ or 8,8,28
+ lwz 0,4(5)
+ or 9,9,29
+ lwz 14,8(5)
+ or 10,10,30
+ lwz 15,12(5)
+ or 11,11,31
+
+ addi 5,5,16
+ bdz .Ldec_compact_done
+ and 16,8,7
+ and 17,9,7
+ and 18,10,7
+ and 19,11,7
+ srwi 20,16,7
+ andc 24,8,7
+ srwi 21,17,7
+ andc 25,9,7
+ srwi 22,18,7
+ andc 26,10,7
+ srwi 23,19,7
+ andc 27,11,7
+ sub 16,16,20
+ sub 17,17,21
+ sub 18,18,22
+ sub 19,19,23
+ add 24,24,24
+ add 25,25,25
+ add 26,26,26
+ add 27,27,27
+ and 16,16,4
+ and 17,17,4
+ and 18,18,4
+ and 19,19,4
+ xor 16,16,24
+ xor 17,17,25
+ xor 18,18,26
+ xor 19,19,27
+
+ and 20,16,7
+ and 21,17,7
+ and 22,18,7
+ and 23,19,7
+ srwi 24,20,7
+ andc 28,16,7
+ srwi 25,21,7
+ andc 29,17,7
+ srwi 26,22,7
+ andc 30,18,7
+ srwi 27,23,7
+ andc 31,19,7
+ sub 20,20,24
+ sub 21,21,25
+ sub 22,22,26
+ sub 23,23,27
+ add 28,28,28
+ add 29,29,29
+ add 30,30,30
+ add 31,31,31
+ and 20,20,4
+ and 21,21,4
+ and 22,22,4
+ and 23,23,4
+ xor 20,20,28
+ xor 21,21,29
+ xor 22,22,30
+ xor 23,23,31
+
+ and 24,20,7
+ and 25,21,7
+ srwi 28,24,7
+ and 26,22,7
+ srwi 29,25,7
+ and 27,23,7
+ srwi 30,26,7
+ sub 24,24,28
+ srwi 31,27,7
+ sub 25,25,29
+ sub 26,26,30
+ sub 27,27,31
+ andc 28,20,7
+ andc 29,21,7
+ andc 30,22,7
+ andc 31,23,7
+ add 28,28,28
+ add 29,29,29
+ add 30,30,30
+ add 31,31,31
+ and 24,24,4
+ and 25,25,4
+ and 26,26,4
+ and 27,27,4
+ xor 24,24,28
+ xor 25,25,29
+ xor 26,26,30
+ xor 27,27,31
+
+ xor 16,16,8
+ xor 17,17,9
+ xor 18,18,10
+ xor 19,19,11
+ xor 20,20,8
+ xor 21,21,9
+ xor 22,22,10
+ xor 23,23,11
+ rotrwi 8,8,8
+ rotrwi 9,9,8
+ xor 8,8,16
+ rotrwi 10,10,8
+ xor 9,9,17
+ rotrwi 11,11,8
+ xor 10,10,18
+ xor 11,11,19
+ xor 16,16,24
+ xor 17,17,25
+ xor 18,18,26
+ xor 19,19,27
+ xor 8,8,20
+ rotrwi 16,16,24
+ xor 9,9,21
+ rotrwi 17,17,24
+ xor 10,10,22
+ rotrwi 18,18,24
+ xor 11,11,23
+ rotrwi 19,19,24
+ xor 20,20,24
+ xor 21,21,25
+ xor 22,22,26
+ xor 23,23,27
+ xor 8,8,24
+ rotrwi 20,20,16
+ xor 9,9,25
+ rotrwi 21,21,16
+ xor 10,10,26
+ rotrwi 22,22,16
+ xor 11,11,27
+ rotrwi 23,23,16
+ xor 8,8,16
+ rotrwi 24,24,8
+ xor 9,9,17
+ rotrwi 25,25,8
+ xor 10,10,18
+ rotrwi 26,26,8
+ xor 11,11,19
+ rotrwi 27,27,8
+ xor 8,8,20
+ xor 9,9,21
+ xor 10,10,22
+ xor 11,11,23
+ xor 8,8,24
+ xor 9,9,25
+ xor 10,10,26
+ xor 11,11,27
+
+ b .Ldec_compact_loop
+.align 4
+.Ldec_compact_done:
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size AES_decrypt,.-AES_decrypt
+
+.byte 65,69,83,32,102,111,114,32,80,80,67,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 7
diff --git a/sys/crypto/openssl/powerpc/aesp8-ppc.S b/sys/crypto/openssl/powerpc/aesp8-ppc.S
new file mode 100644
index 000000000000..e29b45aa3d2a
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/aesp8-ppc.S
@@ -0,0 +1,3643 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from aesp8-ppc.pl. */
+.machine "any"
+
+.text
+
+.align 7
+rcon:
+.byte 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00
+.byte 0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00
+.byte 0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c
+.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+.Lconsts:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 6
+ addi 6,6,-0x48
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.byte 65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+
+.globl aes_p8_set_encrypt_key
+.type aes_p8_set_encrypt_key,@function
+.align 5
+aes_p8_set_encrypt_key:
+.Lset_encrypt_key:
+ mflr 11
+ stw 11,4(1)
+
+ li 6,-1
+ cmplwi 3,0
+ beq- .Lenc_key_abort
+ cmplwi 5,0
+ beq- .Lenc_key_abort
+ li 6,-2
+ cmpwi 4,128
+ blt- .Lenc_key_abort
+ cmpwi 4,256
+ bgt- .Lenc_key_abort
+ andi. 0,4,0x3f
+ bne- .Lenc_key_abort
+
+ lis 0,0xfff0
+ mfspr 12,256
+ mtspr 256,0
+
+ bl .Lconsts
+ mtlr 11
+
+ neg 9,3
+ lvx 1,0,3
+ addi 3,3,15
+ lvsr 3,0,9
+ li 8,0x20
+ cmpwi 4,192
+ lvx 2,0,3
+
+ lvx 4,0,6
+
+ lvx 5,8,6
+ addi 6,6,0x10
+ vperm 1,1,2,3
+ li 7,8
+ vxor 0,0,0
+ mtctr 7
+
+ lvsr 8,0,5
+ vspltisb 9,-1
+ lvx 10,0,5
+ vperm 9,0,9,8
+
+ blt .Loop128
+ addi 3,3,8
+ beq .L192
+ addi 3,3,8
+ b .L256
+
+.align 4
+.Loop128:
+ vperm 3,1,1,5
+ vsldoi 6,0,1,12
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vadduwm 4,4,4
+ vxor 1,1,3
+ bdnz .Loop128
+
+ lvx 4,0,6
+
+ vperm 3,1,1,5
+ vsldoi 6,0,1,12
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vadduwm 4,4,4
+ vxor 1,1,3
+
+ vperm 3,1,1,5
+ vsldoi 6,0,1,12
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vxor 1,1,3
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+
+ addi 3,5,15
+ addi 5,5,0x50
+
+ li 8,10
+ b .Ldone
+
+.align 4
+.L192:
+ lvx 6,0,3
+ li 7,4
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 5,5,16
+ vperm 2,2,6,3
+ vspltisb 3,8
+ mtctr 7
+ vsububm 5,5,3
+
+.Loop192:
+ vperm 3,2,2,5
+ vsldoi 6,0,1,12
+ .long 0x10632509
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+
+ vsldoi 7,0,2,8
+ vspltw 6,1,3
+ vxor 6,6,2
+ vsldoi 2,0,2,12
+ vadduwm 4,4,4
+ vxor 2,2,6
+ vxor 1,1,3
+ vxor 2,2,3
+ vsldoi 7,7,1,8
+
+ vperm 3,2,2,5
+ vsldoi 6,0,1,12
+ vperm 11,7,7,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vsldoi 7,1,2,8
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vperm 11,7,7,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ stvx 7,0,5
+ addi 5,5,16
+
+ vspltw 6,1,3
+ vxor 6,6,2
+ vsldoi 2,0,2,12
+ vadduwm 4,4,4
+ vxor 2,2,6
+ vxor 1,1,3
+ vxor 2,2,3
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 3,5,15
+ addi 5,5,16
+ bdnz .Loop192
+
+ li 8,12
+ addi 5,5,0x20
+ b .Ldone
+
+.align 4
+.L256:
+ lvx 6,0,3
+ li 7,7
+ li 8,14
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 5,5,16
+ vperm 2,2,6,3
+ mtctr 7
+
+.Loop256:
+ vperm 3,2,2,5
+ vsldoi 6,0,1,12
+ vperm 11,2,2,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vadduwm 4,4,4
+ vxor 1,1,3
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 3,5,15
+ addi 5,5,16
+ bdz .Ldone
+
+ vspltw 3,1,3
+ vsldoi 6,0,2,12
+ .long 0x106305C8
+
+ vxor 2,2,6
+ vsldoi 6,0,6,12
+ vxor 2,2,6
+ vsldoi 6,0,6,12
+ vxor 2,2,6
+
+ vxor 2,2,3
+ b .Loop256
+
+.align 4
+.Ldone:
+ lvx 2,0,3
+ vsel 2,10,2,9
+ stvx 2,0,3
+ li 6,0
+ mtspr 256,12
+ stw 8,0(5)
+
+.Lenc_key_abort:
+ mr 3,6
+ blr
+.long 0
+.byte 0,12,0x14,1,0,0,3,0
+.long 0
+.size aes_p8_set_encrypt_key,.-aes_p8_set_encrypt_key
+
+.globl aes_p8_set_decrypt_key
+.type aes_p8_set_decrypt_key,@function
+.align 5
+aes_p8_set_decrypt_key:
+ stwu 1,-32(1)
+ mflr 10
+ stw 10,32+4(1)
+ bl .Lset_encrypt_key
+ mtlr 10
+
+ cmpwi 3,0
+ bne- .Ldec_key_abort
+
+ slwi 7,8,4
+ subi 3,5,240
+ srwi 8,8,1
+ add 5,3,7
+ mtctr 8
+
+.Ldeckey:
+ lwz 0, 0(3)
+ lwz 6, 4(3)
+ lwz 7, 8(3)
+ lwz 8, 12(3)
+ addi 3,3,16
+ lwz 9, 0(5)
+ lwz 10,4(5)
+ lwz 11,8(5)
+ lwz 12,12(5)
+ stw 0, 0(5)
+ stw 6, 4(5)
+ stw 7, 8(5)
+ stw 8, 12(5)
+ subi 5,5,16
+ stw 9, -16(3)
+ stw 10,-12(3)
+ stw 11,-8(3)
+ stw 12,-4(3)
+ bdnz .Ldeckey
+
+ xor 3,3,3
+.Ldec_key_abort:
+ addi 1,1,32
+ blr
+.long 0
+.byte 0,12,4,1,0x80,0,3,0
+.long 0
+.size aes_p8_set_decrypt_key,.-aes_p8_set_decrypt_key
+.globl aes_p8_encrypt
+.type aes_p8_encrypt,@function
+.align 5
+aes_p8_encrypt:
+ lwz 6,240(5)
+ lis 0,0xfc00
+ mfspr 12,256
+ li 7,15
+ mtspr 256,0
+
+ lvx 0,0,3
+ neg 11,4
+ lvx 1,7,3
+ lvsl 2,0,3
+
+ lvsl 3,0,11
+
+ li 7,16
+ vperm 0,0,1,2
+ lvx 1,0,5
+ lvsl 5,0,5
+ srwi 6,6,1
+ lvx 2,7,5
+ addi 7,7,16
+ subi 6,6,1
+ vperm 1,1,2,5
+
+ vxor 0,0,1
+ lvx 1,7,5
+ addi 7,7,16
+ mtctr 6
+
+.Loop_enc:
+ vperm 2,2,1,5
+ .long 0x10001508
+ lvx 2,7,5
+ addi 7,7,16
+ vperm 1,1,2,5
+ .long 0x10000D08
+ lvx 1,7,5
+ addi 7,7,16
+ bdnz .Loop_enc
+
+ vperm 2,2,1,5
+ .long 0x10001508
+ lvx 2,7,5
+ vperm 1,1,2,5
+ .long 0x10000D09
+
+ vspltisb 2,-1
+ vxor 1,1,1
+ li 7,15
+ vperm 2,1,2,3
+
+ lvx 1,0,4
+ vperm 0,0,0,3
+ vsel 1,1,0,2
+ lvx 4,7,4
+ stvx 1,0,4
+ vsel 0,0,4,2
+ stvx 0,7,4
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size aes_p8_encrypt,.-aes_p8_encrypt
+.globl aes_p8_decrypt
+.type aes_p8_decrypt,@function
+.align 5
+aes_p8_decrypt:
+ lwz 6,240(5)
+ lis 0,0xfc00
+ mfspr 12,256
+ li 7,15
+ mtspr 256,0
+
+ lvx 0,0,3
+ neg 11,4
+ lvx 1,7,3
+ lvsl 2,0,3
+
+ lvsl 3,0,11
+
+ li 7,16
+ vperm 0,0,1,2
+ lvx 1,0,5
+ lvsl 5,0,5
+ srwi 6,6,1
+ lvx 2,7,5
+ addi 7,7,16
+ subi 6,6,1
+ vperm 1,1,2,5
+
+ vxor 0,0,1
+ lvx 1,7,5
+ addi 7,7,16
+ mtctr 6
+
+.Loop_dec:
+ vperm 2,2,1,5
+ .long 0x10001548
+ lvx 2,7,5
+ addi 7,7,16
+ vperm 1,1,2,5
+ .long 0x10000D48
+ lvx 1,7,5
+ addi 7,7,16
+ bdnz .Loop_dec
+
+ vperm 2,2,1,5
+ .long 0x10001548
+ lvx 2,7,5
+ vperm 1,1,2,5
+ .long 0x10000D49
+
+ vspltisb 2,-1
+ vxor 1,1,1
+ li 7,15
+ vperm 2,1,2,3
+
+ lvx 1,0,4
+ vperm 0,0,0,3
+ vsel 1,1,0,2
+ lvx 4,7,4
+ stvx 1,0,4
+ vsel 0,0,4,2
+ stvx 0,7,4
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size aes_p8_decrypt,.-aes_p8_decrypt
+.globl aes_p8_cbc_encrypt
+.type aes_p8_cbc_encrypt,@function
+.align 5
+aes_p8_cbc_encrypt:
+ cmplwi 5,16
+ .long 0x4dc00020
+
+ cmpwi 8,0
+ lis 0,0xffe0
+ mfspr 12,256
+ mtspr 256,0
+
+ li 10,15
+ vxor 0,0,0
+
+
+ lvx 4,0,7
+ lvsl 6,0,7
+ lvx 5,10,7
+
+ vperm 4,4,5,6
+
+ neg 11,3
+ lvsl 10,0,6
+ lwz 9,240(6)
+
+ lvsr 6,0,11
+ lvx 5,0,3
+ addi 3,3,15
+
+
+ lvsr 8,0,4
+ vspltisb 9,-1
+ lvx 7,0,4
+ vperm 9,0,9,8
+
+
+ srwi 9,9,1
+ li 10,16
+ subi 9,9,1
+ beq .Lcbc_dec
+
+.Lcbc_enc:
+ vor 2,5,5
+ lvx 5,0,3
+ addi 3,3,16
+ mtctr 9
+ subi 5,5,16
+
+ lvx 0,0,6
+ vperm 2,2,5,6
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ vxor 2,2,0
+ lvx 0,10,6
+ addi 10,10,16
+ vxor 2,2,4
+
+.Loop_cbc_enc:
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ .long 0x10420508
+ lvx 0,10,6
+ addi 10,10,16
+ bdnz .Loop_cbc_enc
+
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ li 10,16
+ vperm 0,0,1,10
+ .long 0x10820509
+ cmplwi 5,16
+
+ vperm 3,4,4,8
+ vsel 2,7,3,9
+ vor 7,3,3
+ stvx 2,0,4
+ addi 4,4,16
+ bge .Lcbc_enc
+
+ b .Lcbc_done
+
+.align 4
+.Lcbc_dec:
+ cmplwi 5,128
+ bge _aesp8_cbc_decrypt8x
+ vor 3,5,5
+ lvx 5,0,3
+ addi 3,3,16
+ mtctr 9
+ subi 5,5,16
+
+ lvx 0,0,6
+ vperm 3,3,5,6
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ vxor 2,3,0
+ lvx 0,10,6
+ addi 10,10,16
+
+.Loop_cbc_dec:
+ vperm 1,1,0,10
+ .long 0x10420D48
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ .long 0x10420548
+ lvx 0,10,6
+ addi 10,10,16
+ bdnz .Loop_cbc_dec
+
+ vperm 1,1,0,10
+ .long 0x10420D48
+ lvx 1,10,6
+ li 10,16
+ vperm 0,0,1,10
+ .long 0x10420549
+ cmplwi 5,16
+
+ vxor 2,2,4
+ vor 4,3,3
+ vperm 3,2,2,8
+ vsel 2,7,3,9
+ vor 7,3,3
+ stvx 2,0,4
+ addi 4,4,16
+ bge .Lcbc_dec
+
+.Lcbc_done:
+ addi 4,4,-1
+ lvx 2,0,4
+ vsel 2,7,2,9
+ stvx 2,0,4
+
+ neg 8,7
+ li 10,15
+ vxor 0,0,0
+ vspltisb 9,-1
+
+ lvsl 8,0,8
+ vperm 9,0,9,8
+
+ lvx 7,0,7
+ vperm 4,4,4,8
+ vsel 2,7,4,9
+ lvx 5,10,7
+ stvx 2,0,7
+ vsel 2,4,5,9
+ stvx 2,10,7
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,6,0
+.long 0
+.align 5
+_aesp8_cbc_decrypt8x:
+ stwu 1,-392(1)
+ li 10,175
+ li 11,191
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ li 0,-1
+ stw 12,364(1)
+ li 8,0x10
+ stw 26,368(1)
+ li 26,0x20
+ stw 27,372(1)
+ li 27,0x30
+ stw 28,376(1)
+ li 28,0x40
+ stw 29,380(1)
+ li 29,0x50
+ stw 30,384(1)
+ li 30,0x60
+ stw 31,388(1)
+ li 31,0x70
+ mtspr 256,0
+
+ subi 9,9,3
+ subi 5,5,128
+
+ lvx 23,0,6
+ lvx 30,8,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,10
+ addi 11,1,32+15
+ mtctr 9
+
+.Load_cbc_dec_key:
+ vperm 24,30,31,10
+ lvx 30,8,6
+ addi 6,6,0x20
+ stvx 24,0,11
+ vperm 25,31,30,10
+ lvx 31,0,6
+ stvx 25,8,11
+ addi 11,11,0x20
+ bdnz .Load_cbc_dec_key
+
+ lvx 26,8,6
+ vperm 24,30,31,10
+ lvx 27,26,6
+ stvx 24,0,11
+ vperm 25,31,26,10
+ lvx 28,27,6
+ stvx 25,8,11
+ addi 11,1,32+15
+ vperm 26,26,27,10
+ lvx 29,28,6
+ vperm 27,27,28,10
+ lvx 30,29,6
+ vperm 28,28,29,10
+ lvx 31,30,6
+ vperm 29,29,30,10
+ lvx 14,31,6
+ vperm 30,30,31,10
+ lvx 24,0,11
+ vperm 31,31,14,10
+ lvx 25,8,11
+
+
+
+ subi 3,3,15
+
+
+ .long 0x7C001E99
+
+
+ .long 0x7C281E99
+
+ .long 0x7C5A1E99
+
+ .long 0x7C7B1E99
+
+ .long 0x7D5C1E99
+
+ vxor 14,0,23
+ .long 0x7D7D1E99
+
+ vxor 15,1,23
+ .long 0x7D9E1E99
+
+ vxor 16,2,23
+ .long 0x7DBF1E99
+ addi 3,3,0x80
+
+ vxor 17,3,23
+
+ vxor 18,10,23
+
+ vxor 19,11,23
+ vxor 20,12,23
+ vxor 21,13,23
+
+ mtctr 9
+ b .Loop_cbc_dec8x
+.align 5
+.Loop_cbc_dec8x:
+ .long 0x11CEC548
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+ lvx 24,26,11
+ addi 11,11,0x20
+
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+ lvx 25,8,11
+ bdnz .Loop_cbc_dec8x
+
+ subic 5,5,128
+ .long 0x11CEC548
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+
+ subfe. 0,0,0
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+
+ and 0,0,5
+ .long 0x11CED548
+ .long 0x11EFD548
+ .long 0x1210D548
+ .long 0x1231D548
+ .long 0x1252D548
+ .long 0x1273D548
+ .long 0x1294D548
+ .long 0x12B5D548
+
+ add 3,3,0
+
+
+
+ .long 0x11CEDD48
+ .long 0x11EFDD48
+ .long 0x1210DD48
+ .long 0x1231DD48
+ .long 0x1252DD48
+ .long 0x1273DD48
+ .long 0x1294DD48
+ .long 0x12B5DD48
+
+ addi 11,1,32+15
+ .long 0x11CEE548
+ .long 0x11EFE548
+ .long 0x1210E548
+ .long 0x1231E548
+ .long 0x1252E548
+ .long 0x1273E548
+ .long 0x1294E548
+ .long 0x12B5E548
+ lvx 24,0,11
+
+ .long 0x11CEED48
+ .long 0x11EFED48
+ .long 0x1210ED48
+ .long 0x1231ED48
+ .long 0x1252ED48
+ .long 0x1273ED48
+ .long 0x1294ED48
+ .long 0x12B5ED48
+ lvx 25,8,11
+
+ .long 0x11CEF548
+ vxor 4,4,31
+ .long 0x11EFF548
+ vxor 0,0,31
+ .long 0x1210F548
+ vxor 1,1,31
+ .long 0x1231F548
+ vxor 2,2,31
+ .long 0x1252F548
+ vxor 3,3,31
+ .long 0x1273F548
+ vxor 10,10,31
+ .long 0x1294F548
+ vxor 11,11,31
+ .long 0x12B5F548
+ vxor 12,12,31
+
+ .long 0x11CE2549
+ .long 0x11EF0549
+ .long 0x7C001E99
+ .long 0x12100D49
+ .long 0x7C281E99
+ .long 0x12311549
+
+ .long 0x7C5A1E99
+ .long 0x12521D49
+
+ .long 0x7C7B1E99
+ .long 0x12735549
+
+ .long 0x7D5C1E99
+ .long 0x12945D49
+
+ .long 0x7D7D1E99
+ .long 0x12B56549
+
+ .long 0x7D9E1E99
+ vor 4,13,13
+
+ .long 0x7DBF1E99
+ addi 3,3,0x80
+
+
+
+ .long 0x7DC02799
+
+ vxor 14,0,23
+
+ .long 0x7DE82799
+
+ vxor 15,1,23
+
+ .long 0x7E1A2799
+ vxor 16,2,23
+
+ .long 0x7E3B2799
+ vxor 17,3,23
+
+ .long 0x7E5C2799
+ vxor 18,10,23
+
+ .long 0x7E7D2799
+ vxor 19,11,23
+
+ .long 0x7E9E2799
+ vxor 20,12,23
+ .long 0x7EBF2799
+ addi 4,4,0x80
+ vxor 21,13,23
+
+ mtctr 9
+ beq .Loop_cbc_dec8x
+
+ addic. 5,5,128
+ beq .Lcbc_dec8x_done
+ nop
+ nop
+
+.Loop_cbc_dec8x_tail:
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+ lvx 24,26,11
+ addi 11,11,0x20
+
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+ lvx 25,8,11
+ bdnz .Loop_cbc_dec8x_tail
+
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+
+ .long 0x11EFD548
+ .long 0x1210D548
+ .long 0x1231D548
+ .long 0x1252D548
+ .long 0x1273D548
+ .long 0x1294D548
+ .long 0x12B5D548
+
+ .long 0x11EFDD48
+ .long 0x1210DD48
+ .long 0x1231DD48
+ .long 0x1252DD48
+ .long 0x1273DD48
+ .long 0x1294DD48
+ .long 0x12B5DD48
+
+ .long 0x11EFE548
+ .long 0x1210E548
+ .long 0x1231E548
+ .long 0x1252E548
+ .long 0x1273E548
+ .long 0x1294E548
+ .long 0x12B5E548
+
+ .long 0x11EFED48
+ .long 0x1210ED48
+ .long 0x1231ED48
+ .long 0x1252ED48
+ .long 0x1273ED48
+ .long 0x1294ED48
+ .long 0x12B5ED48
+
+ .long 0x11EFF548
+ vxor 4,4,31
+ .long 0x1210F548
+ vxor 1,1,31
+ .long 0x1231F548
+ vxor 2,2,31
+ .long 0x1252F548
+ vxor 3,3,31
+ .long 0x1273F548
+ vxor 10,10,31
+ .long 0x1294F548
+ vxor 11,11,31
+ .long 0x12B5F548
+ vxor 12,12,31
+
+ cmplwi 5,32
+ blt .Lcbc_dec8x_one
+ nop
+ beq .Lcbc_dec8x_two
+ cmplwi 5,64
+ blt .Lcbc_dec8x_three
+ nop
+ beq .Lcbc_dec8x_four
+ cmplwi 5,96
+ blt .Lcbc_dec8x_five
+ nop
+ beq .Lcbc_dec8x_six
+
+.Lcbc_dec8x_seven:
+ .long 0x11EF2549
+ .long 0x12100D49
+ .long 0x12311549
+ .long 0x12521D49
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+
+ .long 0x7E9D2799
+ .long 0x7EBE2799
+ addi 4,4,0x70
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_six:
+ .long 0x12102549
+ .long 0x12311549
+ .long 0x12521D49
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E002799
+
+ .long 0x7E282799
+
+ .long 0x7E5A2799
+
+ .long 0x7E7B2799
+
+ .long 0x7E9C2799
+ .long 0x7EBD2799
+ addi 4,4,0x60
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_five:
+ .long 0x12312549
+ .long 0x12521D49
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E202799
+
+ .long 0x7E482799
+
+ .long 0x7E7A2799
+
+ .long 0x7E9B2799
+ .long 0x7EBC2799
+ addi 4,4,0x50
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_four:
+ .long 0x12522549
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E402799
+
+ .long 0x7E682799
+
+ .long 0x7E9A2799
+ .long 0x7EBB2799
+ addi 4,4,0x40
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_three:
+ .long 0x12732549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E602799
+
+ .long 0x7E882799
+ .long 0x7EBA2799
+ addi 4,4,0x30
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_two:
+ .long 0x12942549
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E802799
+ .long 0x7EA82799
+ addi 4,4,0x20
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_one:
+ .long 0x12B52549
+ vor 4,13,13
+
+
+ .long 0x7EA02799
+ addi 4,4,0x10
+
+.Lcbc_dec8x_done:
+
+ .long 0x7C803F99
+
+ li 10,47
+ li 11,63
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+
+ mtspr 256,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ lwz 26,368(1)
+ lwz 27,372(1)
+ lwz 28,376(1)
+ lwz 29,380(1)
+ lwz 30,384(1)
+ lwz 31,388(1)
+ addi 1,1,392
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_cbc_encrypt,.-aes_p8_cbc_encrypt
+.globl aes_p8_ctr32_encrypt_blocks
+.type aes_p8_ctr32_encrypt_blocks,@function
+.align 5
+aes_p8_ctr32_encrypt_blocks:
+ cmplwi 5,1
+ .long 0x4dc00020
+
+ lis 0,0xfff0
+ mfspr 12,256
+ mtspr 256,0
+
+ li 10,15
+ vxor 0,0,0
+
+
+ lvx 4,0,7
+ lvsl 6,0,7
+ lvx 5,10,7
+ vspltisb 11,1
+
+ vperm 4,4,5,6
+ vsldoi 11,0,11,1
+
+ neg 11,3
+ lvsl 10,0,6
+ lwz 9,240(6)
+
+ lvsr 6,0,11
+ lvx 5,0,3
+ addi 3,3,15
+
+
+ srwi 9,9,1
+ li 10,16
+ subi 9,9,1
+
+ cmplwi 5,8
+ bge _aesp8_ctr32_encrypt8x
+
+ lvsr 8,0,4
+ vspltisb 9,-1
+ lvx 7,0,4
+ vperm 9,0,9,8
+
+
+ lvx 0,0,6
+ mtctr 9
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ vxor 2,4,0
+ lvx 0,10,6
+ addi 10,10,16
+ b .Loop_ctr32_enc
+
+.align 5
+.Loop_ctr32_enc:
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ .long 0x10420508
+ lvx 0,10,6
+ addi 10,10,16
+ bdnz .Loop_ctr32_enc
+
+ vadduwm 4,4,11
+ vor 3,5,5
+ lvx 5,0,3
+ addi 3,3,16
+ subic. 5,5,1
+
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ vperm 3,3,5,6
+ li 10,16
+ vperm 1,0,1,10
+ lvx 0,0,6
+ vxor 3,3,1
+ .long 0x10421D09
+
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 2,2,2,8
+ vsel 3,7,2,9
+ mtctr 9
+ vperm 0,0,1,10
+ vor 7,2,2
+ vxor 2,4,0
+ lvx 0,10,6
+ addi 10,10,16
+ stvx 3,0,4
+ addi 4,4,16
+ bne .Loop_ctr32_enc
+
+ addi 4,4,-1
+ lvx 2,0,4
+ vsel 2,7,2,9
+ stvx 2,0,4
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,6,0
+.long 0
+.align 5
+_aesp8_ctr32_encrypt8x:
+ stwu 1,-392(1)
+ li 10,175
+ li 11,191
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ li 0,-1
+ stw 12,364(1)
+ li 8,0x10
+ stw 26,368(1)
+ li 26,0x20
+ stw 27,372(1)
+ li 27,0x30
+ stw 28,376(1)
+ li 28,0x40
+ stw 29,380(1)
+ li 29,0x50
+ stw 30,384(1)
+ li 30,0x60
+ stw 31,388(1)
+ li 31,0x70
+ mtspr 256,0
+
+ subi 9,9,3
+
+ lvx 23,0,6
+ lvx 30,8,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,10
+ addi 11,1,32+15
+ mtctr 9
+
+.Load_ctr32_enc_key:
+ vperm 24,30,31,10
+ lvx 30,8,6
+ addi 6,6,0x20
+ stvx 24,0,11
+ vperm 25,31,30,10
+ lvx 31,0,6
+ stvx 25,8,11
+ addi 11,11,0x20
+ bdnz .Load_ctr32_enc_key
+
+ lvx 26,8,6
+ vperm 24,30,31,10
+ lvx 27,26,6
+ stvx 24,0,11
+ vperm 25,31,26,10
+ lvx 28,27,6
+ stvx 25,8,11
+ addi 11,1,32+15
+ vperm 26,26,27,10
+ lvx 29,28,6
+ vperm 27,27,28,10
+ lvx 30,29,6
+ vperm 28,28,29,10
+ lvx 31,30,6
+ vperm 29,29,30,10
+ lvx 15,31,6
+ vperm 30,30,31,10
+ lvx 24,0,11
+ vperm 31,31,15,10
+ lvx 25,8,11
+
+ vadduwm 7,11,11
+ subi 3,3,15
+ slwi 5,5,4
+
+ vadduwm 16,4,11
+ vadduwm 17,4,7
+ vxor 15,4,23
+
+ vadduwm 18,16,7
+ vxor 16,16,23
+
+ vadduwm 19,17,7
+ vxor 17,17,23
+
+ vadduwm 20,18,7
+ vxor 18,18,23
+
+ vadduwm 21,19,7
+ vxor 19,19,23
+ vadduwm 22,20,7
+ vxor 20,20,23
+ vadduwm 4,21,7
+ vxor 21,21,23
+ vxor 22,22,23
+
+ mtctr 9
+ b .Loop_ctr32_enc8x
+.align 5
+.Loop_ctr32_enc8x:
+ .long 0x11EFC508
+ .long 0x1210C508
+ .long 0x1231C508
+ .long 0x1252C508
+ .long 0x1273C508
+ .long 0x1294C508
+ .long 0x12B5C508
+ .long 0x12D6C508
+.Loop_ctr32_enc8x_middle:
+ lvx 24,26,11
+ addi 11,11,0x20
+
+ .long 0x11EFCD08
+ .long 0x1210CD08
+ .long 0x1231CD08
+ .long 0x1252CD08
+ .long 0x1273CD08
+ .long 0x1294CD08
+ .long 0x12B5CD08
+ .long 0x12D6CD08
+ lvx 25,8,11
+ bdnz .Loop_ctr32_enc8x
+
+ subic 11,5,256
+ .long 0x11EFC508
+ .long 0x1210C508
+ .long 0x1231C508
+ .long 0x1252C508
+ .long 0x1273C508
+ .long 0x1294C508
+ .long 0x12B5C508
+ .long 0x12D6C508
+
+ subfe 0,0,0
+ .long 0x11EFCD08
+ .long 0x1210CD08
+ .long 0x1231CD08
+ .long 0x1252CD08
+ .long 0x1273CD08
+ .long 0x1294CD08
+ .long 0x12B5CD08
+ .long 0x12D6CD08
+
+ and 0,0,11
+ addi 11,1,32+15
+ .long 0x11EFD508
+ .long 0x1210D508
+ .long 0x1231D508
+ .long 0x1252D508
+ .long 0x1273D508
+ .long 0x1294D508
+ .long 0x12B5D508
+ .long 0x12D6D508
+ lvx 24,0,11
+
+ subic 5,5,129
+ .long 0x11EFDD08
+ addi 5,5,1
+ .long 0x1210DD08
+ .long 0x1231DD08
+ .long 0x1252DD08
+ .long 0x1273DD08
+ .long 0x1294DD08
+ .long 0x12B5DD08
+ .long 0x12D6DD08
+ lvx 25,8,11
+
+ .long 0x11EFE508
+ .long 0x7C001E99
+ .long 0x1210E508
+ .long 0x7C281E99
+ .long 0x1231E508
+ .long 0x7C5A1E99
+ .long 0x1252E508
+ .long 0x7C7B1E99
+ .long 0x1273E508
+ .long 0x7D5C1E99
+ .long 0x1294E508
+ .long 0x7D9D1E99
+ .long 0x12B5E508
+ .long 0x7DBE1E99
+ .long 0x12D6E508
+ .long 0x7DDF1E99
+ addi 3,3,0x80
+
+ .long 0x11EFED08
+
+ .long 0x1210ED08
+
+ .long 0x1231ED08
+
+ .long 0x1252ED08
+
+ .long 0x1273ED08
+
+ .long 0x1294ED08
+
+ .long 0x12B5ED08
+
+ .long 0x12D6ED08
+
+
+ add 3,3,0
+
+
+
+ subfe. 0,0,0
+ .long 0x11EFF508
+ vxor 0,0,31
+ .long 0x1210F508
+ vxor 1,1,31
+ .long 0x1231F508
+ vxor 2,2,31
+ .long 0x1252F508
+ vxor 3,3,31
+ .long 0x1273F508
+ vxor 10,10,31
+ .long 0x1294F508
+ vxor 12,12,31
+ .long 0x12B5F508
+ vxor 13,13,31
+ .long 0x12D6F508
+ vxor 14,14,31
+
+ bne .Lctr32_enc8x_break
+
+ .long 0x100F0509
+ .long 0x10300D09
+ vadduwm 16,4,11
+ .long 0x10511509
+ vadduwm 17,4,7
+ vxor 15,4,23
+ .long 0x10721D09
+ vadduwm 18,16,7
+ vxor 16,16,23
+ .long 0x11535509
+ vadduwm 19,17,7
+ vxor 17,17,23
+ .long 0x11946509
+ vadduwm 20,18,7
+ vxor 18,18,23
+ .long 0x11B56D09
+ vadduwm 21,19,7
+ vxor 19,19,23
+ .long 0x11D67509
+ vadduwm 22,20,7
+ vxor 20,20,23
+
+ vadduwm 4,21,7
+ vxor 21,21,23
+
+ vxor 22,22,23
+ mtctr 9
+
+ .long 0x11EFC508
+ .long 0x7C002799
+
+ .long 0x1210C508
+ .long 0x7C282799
+
+ .long 0x1231C508
+ .long 0x7C5A2799
+
+ .long 0x1252C508
+ .long 0x7C7B2799
+
+ .long 0x1273C508
+ .long 0x7D5C2799
+
+ .long 0x1294C508
+ .long 0x7D9D2799
+
+ .long 0x12B5C508
+ .long 0x7DBE2799
+ .long 0x12D6C508
+ .long 0x7DDF2799
+ addi 4,4,0x80
+
+ b .Loop_ctr32_enc8x_middle
+
+.align 5
+.Lctr32_enc8x_break:
+ cmpwi 5,-0x60
+ blt .Lctr32_enc8x_one
+ nop
+ beq .Lctr32_enc8x_two
+ cmpwi 5,-0x40
+ blt .Lctr32_enc8x_three
+ nop
+ beq .Lctr32_enc8x_four
+ cmpwi 5,-0x20
+ blt .Lctr32_enc8x_five
+ nop
+ beq .Lctr32_enc8x_six
+ cmpwi 5,0x00
+ blt .Lctr32_enc8x_seven
+
+.Lctr32_enc8x_eight:
+ .long 0x11EF0509
+ .long 0x12100D09
+ .long 0x12311509
+ .long 0x12521D09
+ .long 0x12735509
+ .long 0x12946509
+ .long 0x12B56D09
+ .long 0x12D67509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+
+ .long 0x7E9D2799
+
+ .long 0x7EBE2799
+ .long 0x7EDF2799
+ addi 4,4,0x80
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_seven:
+ .long 0x11EF0D09
+ .long 0x12101509
+ .long 0x12311D09
+ .long 0x12525509
+ .long 0x12736509
+ .long 0x12946D09
+ .long 0x12B57509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+
+ .long 0x7E9D2799
+ .long 0x7EBE2799
+ addi 4,4,0x70
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_six:
+ .long 0x11EF1509
+ .long 0x12101D09
+ .long 0x12315509
+ .long 0x12526509
+ .long 0x12736D09
+ .long 0x12947509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+ .long 0x7E9D2799
+ addi 4,4,0x60
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_five:
+ .long 0x11EF1D09
+ .long 0x12105509
+ .long 0x12316509
+ .long 0x12526D09
+ .long 0x12737509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+ .long 0x7E7C2799
+ addi 4,4,0x50
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_four:
+ .long 0x11EF5509
+ .long 0x12106509
+ .long 0x12316D09
+ .long 0x12527509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+ .long 0x7E5B2799
+ addi 4,4,0x40
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_three:
+ .long 0x11EF6509
+ .long 0x12106D09
+ .long 0x12317509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+ .long 0x7E3A2799
+ addi 4,4,0x30
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_two:
+ .long 0x11EF6D09
+ .long 0x12107509
+
+
+
+ .long 0x7DE02799
+ .long 0x7E082799
+ addi 4,4,0x20
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_one:
+ .long 0x11EF7509
+
+
+ .long 0x7DE02799
+ addi 4,4,0x10
+
+.Lctr32_enc8x_done:
+ li 10,47
+ li 11,63
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+
+ mtspr 256,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ lwz 26,368(1)
+ lwz 27,372(1)
+ lwz 28,376(1)
+ lwz 29,380(1)
+ lwz 30,384(1)
+ lwz 31,388(1)
+ addi 1,1,392
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_ctr32_encrypt_blocks,.-aes_p8_ctr32_encrypt_blocks
+.globl aes_p8_xts_encrypt
+.type aes_p8_xts_encrypt,@function
+.align 5
+aes_p8_xts_encrypt:
+ mr 10,3
+ li 3,-1
+ cmplwi 5,16
+ .long 0x4dc00020
+
+ lis 0,0xfff0
+ mfspr 12,256
+ li 11,0
+ mtspr 256,0
+
+ vspltisb 9,0x07
+
+
+
+
+ li 3,15
+ lvx 8,0,8
+ lvsl 5,0,8
+ lvx 4,3,8
+
+ vperm 8,8,4,5
+
+ neg 11,10
+ lvsr 5,0,11
+ lvx 2,0,10
+ addi 10,10,15
+
+
+ cmplwi 7,0
+ beq .Lxts_enc_no_key2
+
+ lvsl 7,0,7
+ lwz 9,240(7)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ lvx 0,0,7
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ vxor 8,8,0
+ lvx 0,3,7
+ addi 3,3,16
+ mtctr 9
+
+.Ltweak_xts_enc:
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x11080508
+ lvx 0,3,7
+ addi 3,3,16
+ bdnz .Ltweak_xts_enc
+
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ vperm 0,0,1,7
+ .long 0x11080509
+
+ li 8,0
+ b .Lxts_enc
+
+.Lxts_enc_no_key2:
+ li 3,-16
+ and 5,5,3
+
+
+.Lxts_enc:
+ lvx 4,0,10
+ addi 10,10,16
+
+ lvsl 7,0,6
+ lwz 9,240(6)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ vslb 10,9,9
+ vor 10,10,9
+ vspltisb 11,1
+ vsldoi 10,10,11,15
+
+ cmplwi 5,96
+ bge _aesp8_xts_encrypt6x
+
+ andi. 7,5,15
+ subic 0,5,32
+ subi 7,7,16
+ subfe 0,0,0
+ and 0,0,7
+ add 10,10,0
+
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+ mtctr 9
+ b .Loop_xts_enc
+
+.align 5
+.Loop_xts_enc:
+ vperm 1,1,0,7
+ .long 0x10420D08
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x10420508
+ lvx 0,3,6
+ addi 3,3,16
+ bdnz .Loop_xts_enc
+
+ vperm 1,1,0,7
+ .long 0x10420D08
+ lvx 1,3,6
+ li 3,16
+ vperm 0,0,1,7
+ vxor 0,0,8
+ .long 0x10620509
+
+
+ nop
+
+ .long 0x7C602799
+ addi 4,4,16
+
+ subic. 5,5,16
+ beq .Lxts_enc_done
+
+ vor 2,4,4
+ lvx 4,0,10
+ addi 10,10,16
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+
+ subic 0,5,32
+ subfe 0,0,0
+ and 0,0,7
+ add 10,10,0
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 3,3,0
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+
+ mtctr 9
+ cmplwi 5,16
+ bge .Loop_xts_enc
+
+ vxor 3,3,8
+ lvsr 5,0,5
+ vxor 4,4,4
+ vspltisb 11,-1
+ vperm 4,4,11,5
+ vsel 2,2,3,4
+
+ subi 11,4,17
+ subi 4,4,16
+ mtctr 5
+ li 5,16
+.Loop_xts_enc_steal:
+ lbzu 0,1(11)
+ stb 0,16(11)
+ bdnz .Loop_xts_enc_steal
+
+ mtctr 9
+ b .Loop_xts_enc
+
+.Lxts_enc_done:
+ cmplwi 8,0
+ beq .Lxts_enc_ret
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+
+ .long 0x7D004799
+
+.Lxts_enc_ret:
+ mtspr 256,12
+ li 3,0
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_xts_encrypt,.-aes_p8_xts_encrypt
+
+.globl aes_p8_xts_decrypt
+.type aes_p8_xts_decrypt,@function
+.align 5
+aes_p8_xts_decrypt:
+ mr 10,3
+ li 3,-1
+ cmplwi 5,16
+ .long 0x4dc00020
+
+ lis 0,0xfff8
+ mfspr 12,256
+ li 11,0
+ mtspr 256,0
+
+ andi. 0,5,15
+ neg 0,0
+ andi. 0,0,16
+ sub 5,5,0
+
+ vspltisb 9,0x07
+
+
+
+
+ li 3,15
+ lvx 8,0,8
+ lvsl 5,0,8
+ lvx 4,3,8
+
+ vperm 8,8,4,5
+
+ neg 11,10
+ lvsr 5,0,11
+ lvx 2,0,10
+ addi 10,10,15
+
+
+ cmplwi 7,0
+ beq .Lxts_dec_no_key2
+
+ lvsl 7,0,7
+ lwz 9,240(7)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ lvx 0,0,7
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ vxor 8,8,0
+ lvx 0,3,7
+ addi 3,3,16
+ mtctr 9
+
+.Ltweak_xts_dec:
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x11080508
+ lvx 0,3,7
+ addi 3,3,16
+ bdnz .Ltweak_xts_dec
+
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ vperm 0,0,1,7
+ .long 0x11080509
+
+ li 8,0
+ b .Lxts_dec
+
+.Lxts_dec_no_key2:
+ neg 3,5
+ andi. 3,3,15
+ add 5,5,3
+
+
+.Lxts_dec:
+ lvx 4,0,10
+ addi 10,10,16
+
+ lvsl 7,0,6
+ lwz 9,240(6)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ vslb 10,9,9
+ vor 10,10,9
+ vspltisb 11,1
+ vsldoi 10,10,11,15
+
+ cmplwi 5,96
+ bge _aesp8_xts_decrypt6x
+
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+ mtctr 9
+
+ cmplwi 5,16
+ blt .Ltail_xts_dec
+ b .Loop_xts_dec
+
+.align 5
+.Loop_xts_dec:
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x10420548
+ lvx 0,3,6
+ addi 3,3,16
+ bdnz .Loop_xts_dec
+
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ li 3,16
+ vperm 0,0,1,7
+ vxor 0,0,8
+ .long 0x10620549
+
+
+ nop
+
+ .long 0x7C602799
+ addi 4,4,16
+
+ subic. 5,5,16
+ beq .Lxts_dec_done
+
+ vor 2,4,4
+ lvx 4,0,10
+ addi 10,10,16
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+
+ mtctr 9
+ cmplwi 5,16
+ bge .Loop_xts_dec
+
+.Ltail_xts_dec:
+ vsrab 11,8,9
+ vaddubm 12,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 12,12,11
+
+ subi 10,10,16
+ add 10,10,5
+
+ vxor 2,2,8
+ vxor 2,2,12
+
+.Loop_xts_dec_short:
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x10420548
+ lvx 0,3,6
+ addi 3,3,16
+ bdnz .Loop_xts_dec_short
+
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ li 3,16
+ vperm 0,0,1,7
+ vxor 0,0,12
+ .long 0x10620549
+
+
+ nop
+
+ .long 0x7C602799
+
+ vor 2,4,4
+ lvx 4,0,10
+
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+
+ lvsr 5,0,5
+ vxor 4,4,4
+ vspltisb 11,-1
+ vperm 4,4,11,5
+ vsel 2,2,3,4
+
+ vxor 0,0,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+
+ subi 11,4,1
+ mtctr 5
+ li 5,16
+.Loop_xts_dec_steal:
+ lbzu 0,1(11)
+ stb 0,16(11)
+ bdnz .Loop_xts_dec_steal
+
+ mtctr 9
+ b .Loop_xts_dec
+
+.Lxts_dec_done:
+ cmplwi 8,0
+ beq .Lxts_dec_ret
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+
+ .long 0x7D004799
+
+.Lxts_dec_ret:
+ mtspr 256,12
+ li 3,0
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_xts_decrypt,.-aes_p8_xts_decrypt
+.align 5
+_aesp8_xts_encrypt6x:
+ stwu 1,-392(1)
+ mflr 11
+ li 7,175
+ li 3,191
+ stw 11,396(1)
+ stvx 20,7,1
+ addi 7,7,32
+ stvx 21,3,1
+ addi 3,3,32
+ stvx 22,7,1
+ addi 7,7,32
+ stvx 23,3,1
+ addi 3,3,32
+ stvx 24,7,1
+ addi 7,7,32
+ stvx 25,3,1
+ addi 3,3,32
+ stvx 26,7,1
+ addi 7,7,32
+ stvx 27,3,1
+ addi 3,3,32
+ stvx 28,7,1
+ addi 7,7,32
+ stvx 29,3,1
+ addi 3,3,32
+ stvx 30,7,1
+ stvx 31,3,1
+ li 0,-1
+ stw 12,364(1)
+ li 3,0x10
+ stw 26,368(1)
+ li 26,0x20
+ stw 27,372(1)
+ li 27,0x30
+ stw 28,376(1)
+ li 28,0x40
+ stw 29,380(1)
+ li 29,0x50
+ stw 30,384(1)
+ li 30,0x60
+ stw 31,388(1)
+ li 31,0x70
+ mtspr 256,0
+
+ subi 9,9,3
+
+ lvx 23,0,6
+ lvx 30,3,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,7
+ addi 7,1,32+15
+ mtctr 9
+
+.Load_xts_enc_key:
+ vperm 24,30,31,7
+ lvx 30,3,6
+ addi 6,6,0x20
+ stvx 24,0,7
+ vperm 25,31,30,7
+ lvx 31,0,6
+ stvx 25,3,7
+ addi 7,7,0x20
+ bdnz .Load_xts_enc_key
+
+ lvx 26,3,6
+ vperm 24,30,31,7
+ lvx 27,26,6
+ stvx 24,0,7
+ vperm 25,31,26,7
+ lvx 28,27,6
+ stvx 25,3,7
+ addi 7,1,32+15
+ vperm 26,26,27,7
+ lvx 29,28,6
+ vperm 27,27,28,7
+ lvx 30,29,6
+ vperm 28,28,29,7
+ lvx 31,30,6
+ vperm 29,29,30,7
+ lvx 22,31,6
+ vperm 30,30,31,7
+ lvx 24,0,7
+ vperm 31,31,22,7
+ lvx 25,3,7
+
+ vperm 0,2,4,5
+ subi 10,10,31
+ vxor 17,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 7,0,17
+ vxor 8,8,11
+
+ .long 0x7C235699
+ vxor 18,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 12,1,18
+ vxor 8,8,11
+
+ .long 0x7C5A5699
+ andi. 31,5,15
+ vxor 19,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 13,2,19
+ vxor 8,8,11
+
+ .long 0x7C7B5699
+ sub 5,5,31
+ vxor 20,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 14,3,20
+ vxor 8,8,11
+
+ .long 0x7C9C5699
+ subi 5,5,0x60
+ vxor 21,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 15,4,21
+ vxor 8,8,11
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+ vxor 22,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 16,5,22
+ vxor 8,8,11
+
+ vxor 31,31,23
+ mtctr 9
+ b .Loop_xts_enc6x
+
+.align 5
+.Loop_xts_enc6x:
+ .long 0x10E7C508
+ .long 0x118CC508
+ .long 0x11ADC508
+ .long 0x11CEC508
+ .long 0x11EFC508
+ .long 0x1210C508
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ .long 0x11EFCD08
+ .long 0x1210CD08
+ lvx 25,3,7
+ bdnz .Loop_xts_enc6x
+
+ subic 5,5,96
+ vxor 0,17,31
+ .long 0x10E7C508
+ .long 0x118CC508
+ vsrab 11,8,9
+ vxor 17,8,23
+ vaddubm 8,8,8
+ .long 0x11ADC508
+ .long 0x11CEC508
+ vsldoi 11,11,11,15
+ .long 0x11EFC508
+ .long 0x1210C508
+
+ subfe. 0,0,0
+ vand 11,11,10
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ vxor 8,8,11
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ vxor 1,18,31
+ vsrab 11,8,9
+ vxor 18,8,23
+ .long 0x11EFCD08
+ .long 0x1210CD08
+
+ and 0,0,5
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x10E7D508
+ .long 0x118CD508
+ vand 11,11,10
+ .long 0x11ADD508
+ .long 0x11CED508
+ vxor 8,8,11
+ .long 0x11EFD508
+ .long 0x1210D508
+
+ add 10,10,0
+
+
+
+ vxor 2,19,31
+ vsrab 11,8,9
+ vxor 19,8,23
+ vaddubm 8,8,8
+ .long 0x10E7DD08
+ .long 0x118CDD08
+ vsldoi 11,11,11,15
+ .long 0x11ADDD08
+ .long 0x11CEDD08
+ vand 11,11,10
+ .long 0x11EFDD08
+ .long 0x1210DD08
+
+ addi 7,1,32+15
+ vxor 8,8,11
+ .long 0x10E7E508
+ .long 0x118CE508
+ vxor 3,20,31
+ vsrab 11,8,9
+ vxor 20,8,23
+ .long 0x11ADE508
+ .long 0x11CEE508
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x11EFE508
+ .long 0x1210E508
+ lvx 24,0,7
+ vand 11,11,10
+
+ .long 0x10E7ED08
+ .long 0x118CED08
+ vxor 8,8,11
+ .long 0x11ADED08
+ .long 0x11CEED08
+ vxor 4,21,31
+ vsrab 11,8,9
+ vxor 21,8,23
+ .long 0x11EFED08
+ .long 0x1210ED08
+ lvx 25,3,7
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ .long 0x10E7F508
+ .long 0x118CF508
+ vand 11,11,10
+ .long 0x11ADF508
+ .long 0x11CEF508
+ vxor 8,8,11
+ .long 0x11EFF508
+ .long 0x1210F508
+ vxor 5,22,31
+ vsrab 11,8,9
+ vxor 22,8,23
+
+ .long 0x10E70509
+ .long 0x7C005699
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x118C0D09
+ .long 0x7C235699
+ .long 0x11AD1509
+
+ .long 0x7C5A5699
+ vand 11,11,10
+ .long 0x11CE1D09
+
+ .long 0x7C7B5699
+ .long 0x11EF2509
+
+ .long 0x7C9C5699
+ vxor 8,8,11
+ .long 0x11702D09
+
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+
+
+
+
+
+ .long 0x7CE02799
+ vxor 7,0,17
+
+ .long 0x7D832799
+ vxor 12,1,18
+
+ .long 0x7DBA2799
+ vxor 13,2,19
+
+ .long 0x7DDB2799
+ vxor 14,3,20
+
+ .long 0x7DFC2799
+ vxor 15,4,21
+
+ .long 0x7D7D2799
+ vxor 16,5,22
+ addi 4,4,0x60
+
+ mtctr 9
+ beq .Loop_xts_enc6x
+
+ addic. 5,5,0x60
+ beq .Lxts_enc6x_zero
+ cmpwi 5,0x20
+ blt .Lxts_enc6x_one
+ nop
+ beq .Lxts_enc6x_two
+ cmpwi 5,0x40
+ blt .Lxts_enc6x_three
+ nop
+ beq .Lxts_enc6x_four
+
+.Lxts_enc6x_five:
+ vxor 7,1,17
+ vxor 12,2,18
+ vxor 13,3,19
+ vxor 14,4,20
+ vxor 15,5,21
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,22,22
+
+ .long 0x7CE02799
+
+ .long 0x7D832799
+
+ .long 0x7DBA2799
+ vxor 11,15,22
+
+ .long 0x7DDB2799
+ .long 0x7DFC2799
+ addi 4,4,0x50
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_four:
+ vxor 7,2,17
+ vxor 12,3,18
+ vxor 13,4,19
+ vxor 14,5,20
+ vxor 15,15,15
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,21,21
+
+ .long 0x7CE02799
+
+ .long 0x7D832799
+ vxor 11,14,21
+
+ .long 0x7DBA2799
+ .long 0x7DDB2799
+ addi 4,4,0x40
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_three:
+ vxor 7,3,17
+ vxor 12,4,18
+ vxor 13,5,19
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,20,20
+
+ .long 0x7CE02799
+ vxor 11,13,20
+
+ .long 0x7D832799
+ .long 0x7DBA2799
+ addi 4,4,0x30
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_two:
+ vxor 7,4,17
+ vxor 12,5,18
+ vxor 13,13,13
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,19,19
+ vxor 11,12,19
+
+ .long 0x7CE02799
+ .long 0x7D832799
+ addi 4,4,0x20
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_one:
+ vxor 7,5,17
+ nop
+.Loop_xts_enc1x:
+ .long 0x10E7C508
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD08
+ lvx 25,3,7
+ bdnz .Loop_xts_enc1x
+
+ add 10,10,31
+ cmpwi 31,0
+ .long 0x10E7C508
+
+ subi 10,10,16
+ .long 0x10E7CD08
+
+ lvsr 5,0,31
+ .long 0x10E7D508
+
+ .long 0x7C005699
+ .long 0x10E7DD08
+
+ addi 7,1,32+15
+ .long 0x10E7E508
+ lvx 24,0,7
+
+ .long 0x10E7ED08
+ lvx 25,3,7
+ vxor 17,17,31
+
+
+ .long 0x10E7F508
+
+ vperm 0,0,0,5
+ .long 0x10E78D09
+
+ vor 17,18,18
+ vxor 11,7,18
+
+ .long 0x7CE02799
+ addi 4,4,0x10
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_zero:
+ cmpwi 31,0
+ beq .Lxts_enc6x_done
+
+ add 10,10,31
+ subi 10,10,16
+ .long 0x7C005699
+ lvsr 5,0,31
+
+ vperm 0,0,0,5
+ vxor 11,11,17
+.Lxts_enc6x_steal:
+ vxor 0,0,17
+ vxor 7,7,7
+ vspltisb 12,-1
+ vperm 7,7,12,5
+ vsel 7,0,11,7
+
+ subi 30,4,17
+ subi 4,4,16
+ mtctr 31
+.Loop_xts_enc6x_steal:
+ lbzu 0,1(30)
+ stb 0,16(30)
+ bdnz .Loop_xts_enc6x_steal
+
+ li 31,0
+ mtctr 9
+ b .Loop_xts_enc1x
+
+.align 4
+.Lxts_enc6x_done:
+ cmplwi 8,0
+ beq .Lxts_enc6x_ret
+
+ vxor 8,17,23
+
+ .long 0x7D004799
+
+.Lxts_enc6x_ret:
+ mtlr 11
+ li 10,47
+ li 11,63
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+
+ mtspr 256,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ lwz 26,368(1)
+ lwz 27,372(1)
+ lwz 28,376(1)
+ lwz 29,380(1)
+ lwz 30,384(1)
+ lwz 31,388(1)
+ addi 1,1,392
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,6,6,0
+.long 0
+
+.align 5
+_aesp8_xts_enc5x:
+ .long 0x10E7C508
+ .long 0x118CC508
+ .long 0x11ADC508
+ .long 0x11CEC508
+ .long 0x11EFC508
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ .long 0x11EFCD08
+ lvx 25,3,7
+ bdnz _aesp8_xts_enc5x
+
+ add 10,10,31
+ cmpwi 31,0
+ .long 0x10E7C508
+ .long 0x118CC508
+ .long 0x11ADC508
+ .long 0x11CEC508
+ .long 0x11EFC508
+
+ subi 10,10,16
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ .long 0x11EFCD08
+ vxor 17,17,31
+
+ .long 0x10E7D508
+ lvsr 5,0,31
+ .long 0x118CD508
+ .long 0x11ADD508
+ .long 0x11CED508
+ .long 0x11EFD508
+ vxor 1,18,31
+
+ .long 0x10E7DD08
+ .long 0x7C005699
+ .long 0x118CDD08
+ .long 0x11ADDD08
+ .long 0x11CEDD08
+ .long 0x11EFDD08
+ vxor 2,19,31
+
+ addi 7,1,32+15
+ .long 0x10E7E508
+ .long 0x118CE508
+ .long 0x11ADE508
+ .long 0x11CEE508
+ .long 0x11EFE508
+ lvx 24,0,7
+ vxor 3,20,31
+
+ .long 0x10E7ED08
+
+ .long 0x118CED08
+ .long 0x11ADED08
+ .long 0x11CEED08
+ .long 0x11EFED08
+ lvx 25,3,7
+ vxor 4,21,31
+
+ .long 0x10E7F508
+ vperm 0,0,0,5
+ .long 0x118CF508
+ .long 0x11ADF508
+ .long 0x11CEF508
+ .long 0x11EFF508
+
+ .long 0x10E78D09
+ .long 0x118C0D09
+ .long 0x11AD1509
+ .long 0x11CE1D09
+ .long 0x11EF2509
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 5
+_aesp8_xts_decrypt6x:
+ stwu 1,-392(1)
+ mflr 11
+ li 7,175
+ li 3,191
+ stw 11,396(1)
+ stvx 20,7,1
+ addi 7,7,32
+ stvx 21,3,1
+ addi 3,3,32
+ stvx 22,7,1
+ addi 7,7,32
+ stvx 23,3,1
+ addi 3,3,32
+ stvx 24,7,1
+ addi 7,7,32
+ stvx 25,3,1
+ addi 3,3,32
+ stvx 26,7,1
+ addi 7,7,32
+ stvx 27,3,1
+ addi 3,3,32
+ stvx 28,7,1
+ addi 7,7,32
+ stvx 29,3,1
+ addi 3,3,32
+ stvx 30,7,1
+ stvx 31,3,1
+ li 0,-1
+ stw 12,364(1)
+ li 3,0x10
+ stw 26,368(1)
+ li 26,0x20
+ stw 27,372(1)
+ li 27,0x30
+ stw 28,376(1)
+ li 28,0x40
+ stw 29,380(1)
+ li 29,0x50
+ stw 30,384(1)
+ li 30,0x60
+ stw 31,388(1)
+ li 31,0x70
+ mtspr 256,0
+
+ subi 9,9,3
+
+ lvx 23,0,6
+ lvx 30,3,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,7
+ addi 7,1,32+15
+ mtctr 9
+
+.Load_xts_dec_key:
+ vperm 24,30,31,7
+ lvx 30,3,6
+ addi 6,6,0x20
+ stvx 24,0,7
+ vperm 25,31,30,7
+ lvx 31,0,6
+ stvx 25,3,7
+ addi 7,7,0x20
+ bdnz .Load_xts_dec_key
+
+ lvx 26,3,6
+ vperm 24,30,31,7
+ lvx 27,26,6
+ stvx 24,0,7
+ vperm 25,31,26,7
+ lvx 28,27,6
+ stvx 25,3,7
+ addi 7,1,32+15
+ vperm 26,26,27,7
+ lvx 29,28,6
+ vperm 27,27,28,7
+ lvx 30,29,6
+ vperm 28,28,29,7
+ lvx 31,30,6
+ vperm 29,29,30,7
+ lvx 22,31,6
+ vperm 30,30,31,7
+ lvx 24,0,7
+ vperm 31,31,22,7
+ lvx 25,3,7
+
+ vperm 0,2,4,5
+ subi 10,10,31
+ vxor 17,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 7,0,17
+ vxor 8,8,11
+
+ .long 0x7C235699
+ vxor 18,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 12,1,18
+ vxor 8,8,11
+
+ .long 0x7C5A5699
+ andi. 31,5,15
+ vxor 19,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 13,2,19
+ vxor 8,8,11
+
+ .long 0x7C7B5699
+ sub 5,5,31
+ vxor 20,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 14,3,20
+ vxor 8,8,11
+
+ .long 0x7C9C5699
+ subi 5,5,0x60
+ vxor 21,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 15,4,21
+ vxor 8,8,11
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+ vxor 22,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 16,5,22
+ vxor 8,8,11
+
+ vxor 31,31,23
+ mtctr 9
+ b .Loop_xts_dec6x
+
+.align 5
+.Loop_xts_dec6x:
+ .long 0x10E7C548
+ .long 0x118CC548
+ .long 0x11ADC548
+ .long 0x11CEC548
+ .long 0x11EFC548
+ .long 0x1210C548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ lvx 25,3,7
+ bdnz .Loop_xts_dec6x
+
+ subic 5,5,96
+ vxor 0,17,31
+ .long 0x10E7C548
+ .long 0x118CC548
+ vsrab 11,8,9
+ vxor 17,8,23
+ vaddubm 8,8,8
+ .long 0x11ADC548
+ .long 0x11CEC548
+ vsldoi 11,11,11,15
+ .long 0x11EFC548
+ .long 0x1210C548
+
+ subfe. 0,0,0
+ vand 11,11,10
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ vxor 8,8,11
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ vxor 1,18,31
+ vsrab 11,8,9
+ vxor 18,8,23
+ .long 0x11EFCD48
+ .long 0x1210CD48
+
+ and 0,0,5
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x10E7D548
+ .long 0x118CD548
+ vand 11,11,10
+ .long 0x11ADD548
+ .long 0x11CED548
+ vxor 8,8,11
+ .long 0x11EFD548
+ .long 0x1210D548
+
+ add 10,10,0
+
+
+
+ vxor 2,19,31
+ vsrab 11,8,9
+ vxor 19,8,23
+ vaddubm 8,8,8
+ .long 0x10E7DD48
+ .long 0x118CDD48
+ vsldoi 11,11,11,15
+ .long 0x11ADDD48
+ .long 0x11CEDD48
+ vand 11,11,10
+ .long 0x11EFDD48
+ .long 0x1210DD48
+
+ addi 7,1,32+15
+ vxor 8,8,11
+ .long 0x10E7E548
+ .long 0x118CE548
+ vxor 3,20,31
+ vsrab 11,8,9
+ vxor 20,8,23
+ .long 0x11ADE548
+ .long 0x11CEE548
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x11EFE548
+ .long 0x1210E548
+ lvx 24,0,7
+ vand 11,11,10
+
+ .long 0x10E7ED48
+ .long 0x118CED48
+ vxor 8,8,11
+ .long 0x11ADED48
+ .long 0x11CEED48
+ vxor 4,21,31
+ vsrab 11,8,9
+ vxor 21,8,23
+ .long 0x11EFED48
+ .long 0x1210ED48
+ lvx 25,3,7
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ .long 0x10E7F548
+ .long 0x118CF548
+ vand 11,11,10
+ .long 0x11ADF548
+ .long 0x11CEF548
+ vxor 8,8,11
+ .long 0x11EFF548
+ .long 0x1210F548
+ vxor 5,22,31
+ vsrab 11,8,9
+ vxor 22,8,23
+
+ .long 0x10E70549
+ .long 0x7C005699
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x118C0D49
+ .long 0x7C235699
+ .long 0x11AD1549
+
+ .long 0x7C5A5699
+ vand 11,11,10
+ .long 0x11CE1D49
+
+ .long 0x7C7B5699
+ .long 0x11EF2549
+
+ .long 0x7C9C5699
+ vxor 8,8,11
+ .long 0x12102D49
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+
+
+
+
+
+ .long 0x7CE02799
+ vxor 7,0,17
+
+ .long 0x7D832799
+ vxor 12,1,18
+
+ .long 0x7DBA2799
+ vxor 13,2,19
+
+ .long 0x7DDB2799
+ vxor 14,3,20
+
+ .long 0x7DFC2799
+ vxor 15,4,21
+ .long 0x7E1D2799
+ vxor 16,5,22
+ addi 4,4,0x60
+
+ mtctr 9
+ beq .Loop_xts_dec6x
+
+ addic. 5,5,0x60
+ beq .Lxts_dec6x_zero
+ cmpwi 5,0x20
+ blt .Lxts_dec6x_one
+ nop
+ beq .Lxts_dec6x_two
+ cmpwi 5,0x40
+ blt .Lxts_dec6x_three
+ nop
+ beq .Lxts_dec6x_four
+
+.Lxts_dec6x_five:
+ vxor 7,1,17
+ vxor 12,2,18
+ vxor 13,3,19
+ vxor 14,4,20
+ vxor 15,5,21
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,22,22
+ vxor 18,8,23
+
+ .long 0x7CE02799
+ vxor 7,0,18
+
+ .long 0x7D832799
+
+ .long 0x7DBA2799
+
+ .long 0x7DDB2799
+ .long 0x7DFC2799
+ addi 4,4,0x50
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_four:
+ vxor 7,2,17
+ vxor 12,3,18
+ vxor 13,4,19
+ vxor 14,5,20
+ vxor 15,15,15
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,21,21
+ vor 18,22,22
+
+ .long 0x7CE02799
+ vxor 7,0,22
+
+ .long 0x7D832799
+
+ .long 0x7DBA2799
+ .long 0x7DDB2799
+ addi 4,4,0x40
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_three:
+ vxor 7,3,17
+ vxor 12,4,18
+ vxor 13,5,19
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,20,20
+ vor 18,21,21
+
+ .long 0x7CE02799
+ vxor 7,0,21
+
+ .long 0x7D832799
+ .long 0x7DBA2799
+ addi 4,4,0x30
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_two:
+ vxor 7,4,17
+ vxor 12,5,18
+ vxor 13,13,13
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,19,19
+ vor 18,20,20
+
+ .long 0x7CE02799
+ vxor 7,0,20
+ .long 0x7D832799
+ addi 4,4,0x20
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_one:
+ vxor 7,5,17
+ nop
+.Loop_xts_dec1x:
+ .long 0x10E7C548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ lvx 25,3,7
+ bdnz .Loop_xts_dec1x
+
+ subi 0,31,1
+ .long 0x10E7C548
+
+ andi. 0,0,16
+ cmpwi 31,0
+ .long 0x10E7CD48
+
+ sub 10,10,0
+ .long 0x10E7D548
+
+ .long 0x7C005699
+ .long 0x10E7DD48
+
+ addi 7,1,32+15
+ .long 0x10E7E548
+ lvx 24,0,7
+
+ .long 0x10E7ED48
+ lvx 25,3,7
+ vxor 17,17,31
+
+
+ .long 0x10E7F548
+
+ mtctr 9
+ .long 0x10E78D49
+
+ vor 17,18,18
+ vor 18,19,19
+
+ .long 0x7CE02799
+ addi 4,4,0x10
+ vxor 7,0,19
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_zero:
+ cmpwi 31,0
+ beq .Lxts_dec6x_done
+
+ .long 0x7C005699
+
+ vxor 7,0,18
+.Lxts_dec6x_steal:
+ .long 0x10E7C548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ lvx 25,3,7
+ bdnz .Lxts_dec6x_steal
+
+ add 10,10,31
+ .long 0x10E7C548
+
+ cmpwi 31,0
+ .long 0x10E7CD48
+
+ .long 0x7C005699
+ .long 0x10E7D548
+
+ lvsr 5,0,31
+ .long 0x10E7DD48
+
+ addi 7,1,32+15
+ .long 0x10E7E548
+ lvx 24,0,7
+
+ .long 0x10E7ED48
+ lvx 25,3,7
+ vxor 18,18,31
+
+
+ .long 0x10E7F548
+
+ vperm 0,0,0,5
+ .long 0x11679549
+
+
+
+ .long 0x7D602799
+
+ vxor 7,7,7
+ vspltisb 12,-1
+ vperm 7,7,12,5
+ vsel 7,0,11,7
+ vxor 7,7,17
+
+ subi 30,4,1
+ mtctr 31
+.Loop_xts_dec6x_steal:
+ lbzu 0,1(30)
+ stb 0,16(30)
+ bdnz .Loop_xts_dec6x_steal
+
+ li 31,0
+ mtctr 9
+ b .Loop_xts_dec1x
+
+.align 4
+.Lxts_dec6x_done:
+ cmplwi 8,0
+ beq .Lxts_dec6x_ret
+
+ vxor 8,17,23
+
+ .long 0x7D004799
+
+.Lxts_dec6x_ret:
+ mtlr 11
+ li 10,47
+ li 11,63
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+
+ mtspr 256,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ lwz 26,368(1)
+ lwz 27,372(1)
+ lwz 28,376(1)
+ lwz 29,380(1)
+ lwz 30,384(1)
+ lwz 31,388(1)
+ addi 1,1,392
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,6,6,0
+.long 0
+
+.align 5
+_aesp8_xts_dec5x:
+ .long 0x10E7C548
+ .long 0x118CC548
+ .long 0x11ADC548
+ .long 0x11CEC548
+ .long 0x11EFC548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ lvx 25,3,7
+ bdnz _aesp8_xts_dec5x
+
+ subi 0,31,1
+ .long 0x10E7C548
+ .long 0x118CC548
+ .long 0x11ADC548
+ .long 0x11CEC548
+ .long 0x11EFC548
+
+ andi. 0,0,16
+ cmpwi 31,0
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ vxor 17,17,31
+
+ sub 10,10,0
+ .long 0x10E7D548
+ .long 0x118CD548
+ .long 0x11ADD548
+ .long 0x11CED548
+ .long 0x11EFD548
+ vxor 1,18,31
+
+ .long 0x10E7DD48
+ .long 0x7C005699
+ .long 0x118CDD48
+ .long 0x11ADDD48
+ .long 0x11CEDD48
+ .long 0x11EFDD48
+ vxor 2,19,31
+
+ addi 7,1,32+15
+ .long 0x10E7E548
+ .long 0x118CE548
+ .long 0x11ADE548
+ .long 0x11CEE548
+ .long 0x11EFE548
+ lvx 24,0,7
+ vxor 3,20,31
+
+ .long 0x10E7ED48
+
+ .long 0x118CED48
+ .long 0x11ADED48
+ .long 0x11CEED48
+ .long 0x11EFED48
+ lvx 25,3,7
+ vxor 4,21,31
+
+ .long 0x10E7F548
+ .long 0x118CF548
+ .long 0x11ADF548
+ .long 0x11CEF548
+ .long 0x11EFF548
+
+ .long 0x10E78D49
+ .long 0x118C0D49
+ .long 0x11AD1549
+ .long 0x11CE1D49
+ .long 0x11EF2549
+ mtctr 9
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
diff --git a/sys/crypto/openssl/powerpc/chacha-ppc.S b/sys/crypto/openssl/powerpc/chacha-ppc.S
new file mode 100644
index 000000000000..fe791fd10c46
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/chacha-ppc.S
@@ -0,0 +1,1493 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from chacha-ppc.pl. */
+.machine "any"
+.text
+
+.globl ChaCha20_ctr32_int
+.type ChaCha20_ctr32_int,@function
+.align 5
+ChaCha20_ctr32_int:
+__ChaCha20_ctr32_int:
+ cmplwi 5,0
+ .long 0x4DC20020
+
+ stwu 1,-160(1)
+ mflr 0
+
+ stw 14,88(1)
+ stw 15,92(1)
+ stw 16,96(1)
+ stw 17,100(1)
+ stw 18,104(1)
+ stw 19,108(1)
+ stw 20,112(1)
+ stw 21,116(1)
+ stw 22,120(1)
+ stw 23,124(1)
+ stw 24,128(1)
+ stw 25,132(1)
+ stw 26,136(1)
+ stw 27,140(1)
+ stw 28,144(1)
+ stw 29,148(1)
+ stw 30,152(1)
+ stw 31,156(1)
+ stw 0,164(1)
+
+ lwz 11,0(7)
+ lwz 12,4(7)
+ lwz 14,8(7)
+ lwz 15,12(7)
+
+ bl __ChaCha20_1x
+
+ lwz 0,164(1)
+ lwz 14,88(1)
+ lwz 15,92(1)
+ lwz 16,96(1)
+ lwz 17,100(1)
+ lwz 18,104(1)
+ lwz 19,108(1)
+ lwz 20,112(1)
+ lwz 21,116(1)
+ lwz 22,120(1)
+ lwz 23,124(1)
+ lwz 24,128(1)
+ lwz 25,132(1)
+ lwz 26,136(1)
+ lwz 27,140(1)
+ lwz 28,144(1)
+ lwz 29,148(1)
+ lwz 30,152(1)
+ lwz 31,156(1)
+ mtlr 0
+ addi 1,1,160
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,5,0
+.long 0
+.size ChaCha20_ctr32_int,.-ChaCha20_ctr32_int
+
+.align 5
+__ChaCha20_1x:
+.Loop_outer:
+ lis 16,0x6170
+ lis 17,0x3320
+ lis 18,0x7962
+ lis 19,0x6b20
+ ori 16,16,0x7865
+ ori 17,17,0x646e
+ ori 18,18,0x2d32
+ ori 19,19,0x6574
+
+ li 0,10
+ lwz 20,0(6)
+ lwz 21,4(6)
+ lwz 22,8(6)
+ lwz 23,12(6)
+ lwz 24,16(6)
+ mr 28,11
+ lwz 25,20(6)
+ mr 29,12
+ lwz 26,24(6)
+ mr 30,14
+ lwz 27,28(6)
+ mr 31,15
+
+ mr 7,20
+ mr 8,21
+ mr 9,22
+ mr 10,23
+
+ mtctr 0
+.Loop:
+ add 16,16,20
+ add 17,17,21
+ add 18,18,22
+ add 19,19,23
+ xor 28,28,16
+ xor 29,29,17
+ xor 30,30,18
+ xor 31,31,19
+ rotlwi 28,28,16
+ rotlwi 29,29,16
+ rotlwi 30,30,16
+ rotlwi 31,31,16
+ add 24,24,28
+ add 25,25,29
+ add 26,26,30
+ add 27,27,31
+ xor 20,20,24
+ xor 21,21,25
+ xor 22,22,26
+ xor 23,23,27
+ rotlwi 20,20,12
+ rotlwi 21,21,12
+ rotlwi 22,22,12
+ rotlwi 23,23,12
+ add 16,16,20
+ add 17,17,21
+ add 18,18,22
+ add 19,19,23
+ xor 28,28,16
+ xor 29,29,17
+ xor 30,30,18
+ xor 31,31,19
+ rotlwi 28,28,8
+ rotlwi 29,29,8
+ rotlwi 30,30,8
+ rotlwi 31,31,8
+ add 24,24,28
+ add 25,25,29
+ add 26,26,30
+ add 27,27,31
+ xor 20,20,24
+ xor 21,21,25
+ xor 22,22,26
+ xor 23,23,27
+ rotlwi 20,20,7
+ rotlwi 21,21,7
+ rotlwi 22,22,7
+ rotlwi 23,23,7
+ add 16,16,21
+ add 17,17,22
+ add 18,18,23
+ add 19,19,20
+ xor 31,31,16
+ xor 28,28,17
+ xor 29,29,18
+ xor 30,30,19
+ rotlwi 31,31,16
+ rotlwi 28,28,16
+ rotlwi 29,29,16
+ rotlwi 30,30,16
+ add 26,26,31
+ add 27,27,28
+ add 24,24,29
+ add 25,25,30
+ xor 21,21,26
+ xor 22,22,27
+ xor 23,23,24
+ xor 20,20,25
+ rotlwi 21,21,12
+ rotlwi 22,22,12
+ rotlwi 23,23,12
+ rotlwi 20,20,12
+ add 16,16,21
+ add 17,17,22
+ add 18,18,23
+ add 19,19,20
+ xor 31,31,16
+ xor 28,28,17
+ xor 29,29,18
+ xor 30,30,19
+ rotlwi 31,31,8
+ rotlwi 28,28,8
+ rotlwi 29,29,8
+ rotlwi 30,30,8
+ add 26,26,31
+ add 27,27,28
+ add 24,24,29
+ add 25,25,30
+ xor 21,21,26
+ xor 22,22,27
+ xor 23,23,24
+ xor 20,20,25
+ rotlwi 21,21,7
+ rotlwi 22,22,7
+ rotlwi 23,23,7
+ rotlwi 20,20,7
+ bdnz .Loop
+
+ subic 5,5,64
+ addi 16,16,0x7865
+ addi 17,17,0x646e
+ addi 18,18,0x2d32
+ addi 19,19,0x6574
+ addis 16,16,0x6170
+ addis 17,17,0x3320
+ addis 18,18,0x7962
+ addis 19,19,0x6b20
+
+ subfe. 0,0,0
+ add 20,20,7
+ lwz 7,16(6)
+ add 21,21,8
+ lwz 8,20(6)
+ add 22,22,9
+ lwz 9,24(6)
+ add 23,23,10
+ lwz 10,28(6)
+ add 24,24,7
+ add 25,25,8
+ add 26,26,9
+ add 27,27,10
+
+ add 28,28,11
+ add 29,29,12
+ add 30,30,14
+ add 31,31,15
+ addi 11,11,1
+ mr 7,16
+ rotlwi 16,16,8
+ rlwimi 16,7,24,0,7
+ rlwimi 16,7,24,16,23
+ mr 8,17
+ rotlwi 17,17,8
+ rlwimi 17,8,24,0,7
+ rlwimi 17,8,24,16,23
+ mr 9,18
+ rotlwi 18,18,8
+ rlwimi 18,9,24,0,7
+ rlwimi 18,9,24,16,23
+ mr 10,19
+ rotlwi 19,19,8
+ rlwimi 19,10,24,0,7
+ rlwimi 19,10,24,16,23
+ mr 7,20
+ rotlwi 20,20,8
+ rlwimi 20,7,24,0,7
+ rlwimi 20,7,24,16,23
+ mr 8,21
+ rotlwi 21,21,8
+ rlwimi 21,8,24,0,7
+ rlwimi 21,8,24,16,23
+ mr 9,22
+ rotlwi 22,22,8
+ rlwimi 22,9,24,0,7
+ rlwimi 22,9,24,16,23
+ mr 10,23
+ rotlwi 23,23,8
+ rlwimi 23,10,24,0,7
+ rlwimi 23,10,24,16,23
+ mr 7,24
+ rotlwi 24,24,8
+ rlwimi 24,7,24,0,7
+ rlwimi 24,7,24,16,23
+ mr 8,25
+ rotlwi 25,25,8
+ rlwimi 25,8,24,0,7
+ rlwimi 25,8,24,16,23
+ mr 9,26
+ rotlwi 26,26,8
+ rlwimi 26,9,24,0,7
+ rlwimi 26,9,24,16,23
+ mr 10,27
+ rotlwi 27,27,8
+ rlwimi 27,10,24,0,7
+ rlwimi 27,10,24,16,23
+ mr 7,28
+ rotlwi 28,28,8
+ rlwimi 28,7,24,0,7
+ rlwimi 28,7,24,16,23
+ mr 8,29
+ rotlwi 29,29,8
+ rlwimi 29,8,24,0,7
+ rlwimi 29,8,24,16,23
+ mr 9,30
+ rotlwi 30,30,8
+ rlwimi 30,9,24,0,7
+ rlwimi 30,9,24,16,23
+ mr 10,31
+ rotlwi 31,31,8
+ rlwimi 31,10,24,0,7
+ rlwimi 31,10,24,16,23
+ bne .Ltail
+
+ lwz 7,0(4)
+ lwz 8,4(4)
+ cmplwi 5,0
+ lwz 9,8(4)
+ lwz 10,12(4)
+ xor 16,16,7
+ lwz 7,16(4)
+ xor 17,17,8
+ lwz 8,20(4)
+ xor 18,18,9
+ lwz 9,24(4)
+ xor 19,19,10
+ lwz 10,28(4)
+ xor 20,20,7
+ lwz 7,32(4)
+ xor 21,21,8
+ lwz 8,36(4)
+ xor 22,22,9
+ lwz 9,40(4)
+ xor 23,23,10
+ lwz 10,44(4)
+ xor 24,24,7
+ lwz 7,48(4)
+ xor 25,25,8
+ lwz 8,52(4)
+ xor 26,26,9
+ lwz 9,56(4)
+ xor 27,27,10
+ lwz 10,60(4)
+ xor 28,28,7
+ stw 16,0(3)
+ xor 29,29,8
+ stw 17,4(3)
+ xor 30,30,9
+ stw 18,8(3)
+ xor 31,31,10
+ stw 19,12(3)
+ stw 20,16(3)
+ stw 21,20(3)
+ stw 22,24(3)
+ stw 23,28(3)
+ stw 24,32(3)
+ stw 25,36(3)
+ stw 26,40(3)
+ stw 27,44(3)
+ stw 28,48(3)
+ stw 29,52(3)
+ stw 30,56(3)
+ addi 4,4,64
+ stw 31,60(3)
+ addi 3,3,64
+
+ bne .Loop_outer
+
+ blr
+
+.align 4
+.Ltail:
+ addi 5,5,64
+ subi 4,4,1
+ subi 3,3,1
+ addi 7,1,24-1
+ mtctr 5
+
+ stw 16,24(1)
+ stw 17,28(1)
+ stw 18,32(1)
+ stw 19,36(1)
+ stw 20,40(1)
+ stw 21,44(1)
+ stw 22,48(1)
+ stw 23,52(1)
+ stw 24,56(1)
+ stw 25,60(1)
+ stw 26,64(1)
+ stw 27,68(1)
+ stw 28,72(1)
+ stw 29,76(1)
+ stw 30,80(1)
+ stw 31,84(1)
+
+.Loop_tail:
+ lbzu 11,1(4)
+ lbzu 16,1(7)
+ xor 12,11,16
+ stbu 12,1(3)
+ bdnz .Loop_tail
+
+ stw 1,24(1)
+ stw 1,28(1)
+ stw 1,32(1)
+ stw 1,36(1)
+ stw 1,40(1)
+ stw 1,44(1)
+ stw 1,48(1)
+ stw 1,52(1)
+ stw 1,56(1)
+ stw 1,60(1)
+ stw 1,64(1)
+ stw 1,68(1)
+ stw 1,72(1)
+ stw 1,76(1)
+ stw 1,80(1)
+ stw 1,84(1)
+
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.globl ChaCha20_ctr32_vmx
+.type ChaCha20_ctr32_vmx,@function
+.align 5
+ChaCha20_ctr32_vmx:
+ cmplwi 5,256
+ blt __ChaCha20_ctr32_int
+
+ stwu 1,-320(1)
+ mflr 0
+ li 10,103
+ li 11,119
+ mfspr 12,256
+ stvx 23,10,1
+ addi 10,10,32
+ stvx 24,11,1
+ addi 11,11,32
+ stvx 25,10,1
+ addi 10,10,32
+ stvx 26,11,1
+ addi 11,11,32
+ stvx 27,10,1
+ addi 10,10,32
+ stvx 28,11,1
+ addi 11,11,32
+ stvx 29,10,1
+ addi 10,10,32
+ stvx 30,11,1
+ stvx 31,10,1
+ stw 12,244(1)
+ stw 14,248(1)
+ stw 15,252(1)
+ stw 16,256(1)
+ stw 17,260(1)
+ stw 18,264(1)
+ stw 19,268(1)
+ stw 20,272(1)
+ stw 21,276(1)
+ stw 22,280(1)
+ stw 23,284(1)
+ stw 24,288(1)
+ stw 25,292(1)
+ stw 26,296(1)
+ stw 27,300(1)
+ stw 28,304(1)
+ stw 29,308(1)
+ stw 30,312(1)
+ stw 31,316(1)
+ li 12,-4096+511
+ stw 0, 324(1)
+ mtspr 256,12
+
+ bl .Lconsts
+ li 16,16
+ li 17,32
+ li 18,48
+ li 19,64
+ li 20,31
+ li 21,15
+
+ lvx 13,0,6
+ lvsl 29,0,6
+ lvx 14,16,6
+ lvx 27,20,6
+
+ lvx 15,0,7
+ lvsl 30,0,7
+ lvx 28,21,7
+
+ lvx 12,0,12
+ lvx 17,16,12
+ lvx 18,17,12
+ lvx 19,18,12
+ lvx 23,19,12
+
+ vperm 13,13,14,29
+ vperm 14,14,27,29
+ vperm 15,15,28,30
+
+ lwz 11,0(7)
+ lwz 12,4(7)
+ vadduwm 15,15,17
+ lwz 14,8(7)
+ vadduwm 16,15,17
+ lwz 15,12(7)
+ vadduwm 17,16,17
+
+ vxor 29,29,29
+ vspltisw 26,-1
+ lvsl 24,0,4
+ lvsr 25,0,3
+ vperm 26,29,26,25
+
+ lvsl 29,0,16
+ vspltisb 30,3
+ vxor 29,29,30
+ vxor 25,25,30
+ vperm 24,24,24,29
+
+ li 0,10
+ b .Loop_outer_vmx
+
+.align 4
+.Loop_outer_vmx:
+ lis 16,0x6170
+ lis 17,0x3320
+ vor 0,12,12
+ lis 18,0x7962
+ lis 19,0x6b20
+ vor 4,12,12
+ ori 16,16,0x7865
+ ori 17,17,0x646e
+ vor 8,12,12
+ ori 18,18,0x2d32
+ ori 19,19,0x6574
+ vor 1,13,13
+
+ lwz 20,0(6)
+ vor 5,13,13
+ lwz 21,4(6)
+ vor 9,13,13
+ lwz 22,8(6)
+ vor 2,14,14
+ lwz 23,12(6)
+ vor 6,14,14
+ lwz 24,16(6)
+ vor 10,14,14
+ mr 28,11
+ lwz 25,20(6)
+ vor 3,15,15
+ mr 29,12
+ lwz 26,24(6)
+ vor 7,16,16
+ mr 30,14
+ lwz 27,28(6)
+ vor 11,17,17
+ mr 31,15
+
+ mr 7,20
+ mr 8,21
+ mr 9,22
+ mr 10,23
+
+ vspltisw 27,12
+ vspltisw 28,7
+
+ mtctr 0
+ nop
+.Loop_vmx:
+ vadduwm 0,0,1
+ vadduwm 4,4,5
+ vadduwm 8,8,9
+ add 16,16,20
+ add 17,17,21
+ add 18,18,22
+ vxor 3,3,0
+ vxor 7,7,4
+ vxor 11,11,8
+ add 19,19,23
+ xor 28,28,16
+ xor 29,29,17
+ vperm 3,3,3,19
+ vperm 7,7,7,19
+ vperm 11,11,11,19
+ xor 30,30,18
+ xor 31,31,19
+ rotlwi 28,28,16
+ vadduwm 2,2,3
+ vadduwm 6,6,7
+ vadduwm 10,10,11
+ rotlwi 29,29,16
+ rotlwi 30,30,16
+ rotlwi 31,31,16
+ vxor 1,1,2
+ vxor 5,5,6
+ vxor 9,9,10
+ add 24,24,28
+ add 25,25,29
+ add 26,26,30
+ vrlw 1,1,27
+ vrlw 5,5,27
+ vrlw 9,9,27
+ add 27,27,31
+ xor 20,20,24
+ xor 21,21,25
+ vadduwm 0,0,1
+ vadduwm 4,4,5
+ vadduwm 8,8,9
+ xor 22,22,26
+ xor 23,23,27
+ rotlwi 20,20,12
+ vxor 3,3,0
+ vxor 7,7,4
+ vxor 11,11,8
+ rotlwi 21,21,12
+ rotlwi 22,22,12
+ rotlwi 23,23,12
+ vperm 3,3,3,23
+ vperm 7,7,7,23
+ vperm 11,11,11,23
+ add 16,16,20
+ add 17,17,21
+ add 18,18,22
+ vadduwm 2,2,3
+ vadduwm 6,6,7
+ vadduwm 10,10,11
+ add 19,19,23
+ xor 28,28,16
+ xor 29,29,17
+ vxor 1,1,2
+ vxor 5,5,6
+ vxor 9,9,10
+ xor 30,30,18
+ xor 31,31,19
+ rotlwi 28,28,8
+ vrlw 1,1,28
+ vrlw 5,5,28
+ vrlw 9,9,28
+ rotlwi 29,29,8
+ rotlwi 30,30,8
+ rotlwi 31,31,8
+ vsldoi 2,2,2, 16-8
+ vsldoi 6,6,6, 16-8
+ vsldoi 10,10,10, 16-8
+ add 24,24,28
+ add 25,25,29
+ add 26,26,30
+ vsldoi 1,1,1, 16-12
+ vsldoi 5,5,5, 16-12
+ vsldoi 9,9,9, 16-12
+ add 27,27,31
+ xor 20,20,24
+ xor 21,21,25
+ vsldoi 3,3,3, 16-4
+ vsldoi 7,7,7, 16-4
+ vsldoi 11,11,11, 16-4
+ xor 22,22,26
+ xor 23,23,27
+ rotlwi 20,20,7
+ rotlwi 21,21,7
+ rotlwi 22,22,7
+ rotlwi 23,23,7
+ vadduwm 0,0,1
+ vadduwm 4,4,5
+ vadduwm 8,8,9
+ add 16,16,21
+ add 17,17,22
+ add 18,18,23
+ vxor 3,3,0
+ vxor 7,7,4
+ vxor 11,11,8
+ add 19,19,20
+ xor 31,31,16
+ xor 28,28,17
+ vperm 3,3,3,19
+ vperm 7,7,7,19
+ vperm 11,11,11,19
+ xor 29,29,18
+ xor 30,30,19
+ rotlwi 31,31,16
+ vadduwm 2,2,3
+ vadduwm 6,6,7
+ vadduwm 10,10,11
+ rotlwi 28,28,16
+ rotlwi 29,29,16
+ rotlwi 30,30,16
+ vxor 1,1,2
+ vxor 5,5,6
+ vxor 9,9,10
+ add 26,26,31
+ add 27,27,28
+ add 24,24,29
+ vrlw 1,1,27
+ vrlw 5,5,27
+ vrlw 9,9,27
+ add 25,25,30
+ xor 21,21,26
+ xor 22,22,27
+ vadduwm 0,0,1
+ vadduwm 4,4,5
+ vadduwm 8,8,9
+ xor 23,23,24
+ xor 20,20,25
+ rotlwi 21,21,12
+ vxor 3,3,0
+ vxor 7,7,4
+ vxor 11,11,8
+ rotlwi 22,22,12
+ rotlwi 23,23,12
+ rotlwi 20,20,12
+ vperm 3,3,3,23
+ vperm 7,7,7,23
+ vperm 11,11,11,23
+ add 16,16,21
+ add 17,17,22
+ add 18,18,23
+ vadduwm 2,2,3
+ vadduwm 6,6,7
+ vadduwm 10,10,11
+ add 19,19,20
+ xor 31,31,16
+ xor 28,28,17
+ vxor 1,1,2
+ vxor 5,5,6
+ vxor 9,9,10
+ xor 29,29,18
+ xor 30,30,19
+ rotlwi 31,31,8
+ vrlw 1,1,28
+ vrlw 5,5,28
+ vrlw 9,9,28
+ rotlwi 28,28,8
+ rotlwi 29,29,8
+ rotlwi 30,30,8
+ vsldoi 2,2,2, 16-8
+ vsldoi 6,6,6, 16-8
+ vsldoi 10,10,10, 16-8
+ add 26,26,31
+ add 27,27,28
+ add 24,24,29
+ vsldoi 1,1,1, 16-4
+ vsldoi 5,5,5, 16-4
+ vsldoi 9,9,9, 16-4
+ add 25,25,30
+ xor 21,21,26
+ xor 22,22,27
+ vsldoi 3,3,3, 16-12
+ vsldoi 7,7,7, 16-12
+ vsldoi 11,11,11, 16-12
+ xor 23,23,24
+ xor 20,20,25
+ rotlwi 21,21,7
+ rotlwi 22,22,7
+ rotlwi 23,23,7
+ rotlwi 20,20,7
+ bdnz .Loop_vmx
+
+ subi 5,5,256
+ addi 16,16,0x7865
+ addi 17,17,0x646e
+ addi 18,18,0x2d32
+ addi 19,19,0x6574
+ addis 16,16,0x6170
+ addis 17,17,0x3320
+ addis 18,18,0x7962
+ addis 19,19,0x6b20
+ add 20,20,7
+ lwz 7,16(6)
+ add 21,21,8
+ lwz 8,20(6)
+ add 22,22,9
+ lwz 9,24(6)
+ add 23,23,10
+ lwz 10,28(6)
+ add 24,24,7
+ add 25,25,8
+ add 26,26,9
+ add 27,27,10
+ add 28,28,11
+ add 29,29,12
+ add 30,30,14
+ add 31,31,15
+
+ vadduwm 0,0,12
+ vadduwm 4,4,12
+ vadduwm 8,8,12
+ vadduwm 1,1,13
+ vadduwm 5,5,13
+ vadduwm 9,9,13
+ vadduwm 2,2,14
+ vadduwm 6,6,14
+ vadduwm 10,10,14
+ vadduwm 3,3,15
+ vadduwm 7,7,16
+ vadduwm 11,11,17
+
+ addi 11,11,4
+ vadduwm 15,15,18
+ vadduwm 16,16,18
+ vadduwm 17,17,18
+
+ mr 7,16
+ rotlwi 16,16,8
+ rlwimi 16,7,24,0,7
+ rlwimi 16,7,24,16,23
+ mr 8,17
+ rotlwi 17,17,8
+ rlwimi 17,8,24,0,7
+ rlwimi 17,8,24,16,23
+ mr 9,18
+ rotlwi 18,18,8
+ rlwimi 18,9,24,0,7
+ rlwimi 18,9,24,16,23
+ mr 10,19
+ rotlwi 19,19,8
+ rlwimi 19,10,24,0,7
+ rlwimi 19,10,24,16,23
+ mr 7,20
+ rotlwi 20,20,8
+ rlwimi 20,7,24,0,7
+ rlwimi 20,7,24,16,23
+ mr 8,21
+ rotlwi 21,21,8
+ rlwimi 21,8,24,0,7
+ rlwimi 21,8,24,16,23
+ mr 9,22
+ rotlwi 22,22,8
+ rlwimi 22,9,24,0,7
+ rlwimi 22,9,24,16,23
+ mr 10,23
+ rotlwi 23,23,8
+ rlwimi 23,10,24,0,7
+ rlwimi 23,10,24,16,23
+ mr 7,24
+ rotlwi 24,24,8
+ rlwimi 24,7,24,0,7
+ rlwimi 24,7,24,16,23
+ mr 8,25
+ rotlwi 25,25,8
+ rlwimi 25,8,24,0,7
+ rlwimi 25,8,24,16,23
+ mr 9,26
+ rotlwi 26,26,8
+ rlwimi 26,9,24,0,7
+ rlwimi 26,9,24,16,23
+ mr 10,27
+ rotlwi 27,27,8
+ rlwimi 27,10,24,0,7
+ rlwimi 27,10,24,16,23
+ mr 7,28
+ rotlwi 28,28,8
+ rlwimi 28,7,24,0,7
+ rlwimi 28,7,24,16,23
+ mr 8,29
+ rotlwi 29,29,8
+ rlwimi 29,8,24,0,7
+ rlwimi 29,8,24,16,23
+ mr 9,30
+ rotlwi 30,30,8
+ rlwimi 30,9,24,0,7
+ rlwimi 30,9,24,16,23
+ mr 10,31
+ rotlwi 31,31,8
+ rlwimi 31,10,24,0,7
+ rlwimi 31,10,24,16,23
+ lwz 7,0(4)
+ lwz 8,4(4)
+ lwz 9,8(4)
+ lwz 10,12(4)
+ xor 16,16,7
+ lwz 7,16(4)
+ xor 17,17,8
+ lwz 8,20(4)
+ xor 18,18,9
+ lwz 9,24(4)
+ xor 19,19,10
+ lwz 10,28(4)
+ xor 20,20,7
+ lwz 7,32(4)
+ xor 21,21,8
+ lwz 8,36(4)
+ xor 22,22,9
+ lwz 9,40(4)
+ xor 23,23,10
+ lwz 10,44(4)
+ xor 24,24,7
+ lwz 7,48(4)
+ xor 25,25,8
+ lwz 8,52(4)
+ xor 26,26,9
+ lwz 9,56(4)
+ xor 27,27,10
+ lwz 10,60(4)
+ xor 28,28,7
+ stw 16,0(3)
+ xor 29,29,8
+ stw 17,4(3)
+ xor 30,30,9
+ stw 18,8(3)
+ xor 31,31,10
+ stw 19,12(3)
+ addi 4,4,64
+ stw 20,16(3)
+ li 7,16
+ stw 21,20(3)
+ li 8,32
+ stw 22,24(3)
+ li 9,48
+ stw 23,28(3)
+ li 10,64
+ stw 24,32(3)
+ stw 25,36(3)
+ stw 26,40(3)
+ stw 27,44(3)
+ stw 28,48(3)
+ stw 29,52(3)
+ stw 30,56(3)
+ stw 31,60(3)
+ addi 3,3,64
+
+ lvx 27,0,4
+ lvx 28,7,4
+ lvx 29,8,4
+ lvx 30,9,4
+ lvx 31,10,4
+ addi 4,4,64
+
+ vperm 27,27,28,24
+ vperm 28,28,29,24
+ vperm 29,29,30,24
+ vperm 30,30,31,24
+ vxor 0,0,27
+ vxor 1,1,28
+ lvx 28,7,4
+ vxor 2,2,29
+ lvx 29,8,4
+ vxor 3,3,30
+ lvx 30,9,4
+ lvx 27,10,4
+ addi 4,4,64
+ li 10,63
+ vperm 0,0,0,25
+ vperm 1,1,1,25
+ vperm 2,2,2,25
+ vperm 3,3,3,25
+
+ vperm 31,31,28,24
+ vperm 28,28,29,24
+ vperm 29,29,30,24
+ vperm 30,30,27,24
+ vxor 4,4,31
+ vxor 5,5,28
+ lvx 28,7,4
+ vxor 6,6,29
+ lvx 29,8,4
+ vxor 7,7,30
+ lvx 30,9,4
+ lvx 31,10,4
+ addi 4,4,64
+ vperm 4,4,4,25
+ vperm 5,5,5,25
+ vperm 6,6,6,25
+ vperm 7,7,7,25
+
+ vperm 27,27,28,24
+ vperm 28,28,29,24
+ vperm 29,29,30,24
+ vperm 30,30,31,24
+ vxor 8,8,27
+ vxor 9,9,28
+ vxor 10,10,29
+ vxor 11,11,30
+ vperm 8,8,8,25
+ vperm 9,9,9,25
+ vperm 10,10,10,25
+ vperm 11,11,11,25
+
+ andi. 17,3,15
+ mr 16,3
+
+ vsel 27,0,1,26
+ vsel 28,1,2,26
+ vsel 29,2,3,26
+ vsel 30,3,4,26
+ vsel 1,4,5,26
+ vsel 2,5,6,26
+ vsel 3,6,7,26
+ vsel 4,7,8,26
+ vsel 5,8,9,26
+ vsel 6,9,10,26
+ vsel 7,10,11,26
+
+
+ stvx 27,7,3
+ stvx 28,8,3
+ stvx 29,9,3
+ addi 3,3,64
+ stvx 30,0,3
+ stvx 1,7,3
+ stvx 2,8,3
+ stvx 3,9,3
+ addi 3,3,64
+ stvx 4,0,3
+ stvx 5,7,3
+ stvx 6,8,3
+ stvx 7,9,3
+ addi 3,3,64
+
+ beq .Laligned_vmx
+
+ sub 18,3,17
+ li 19,0
+.Lunaligned_tail_vmx:
+ stvebx 11,19,18
+ addi 19,19,1
+ cmpw 19,17
+ bne .Lunaligned_tail_vmx
+
+ sub 18,16,17
+.Lunaligned_head_vmx:
+ stvebx 0,17,18
+ cmpwi 17,15
+ addi 17,17,1
+ bne .Lunaligned_head_vmx
+
+ cmplwi 5,255
+ bgt .Loop_outer_vmx
+
+ b .Ldone_vmx
+
+.align 4
+.Laligned_vmx:
+ stvx 0,0,16
+
+ cmplwi 5,255
+ bgt .Loop_outer_vmx
+ nop
+
+.Ldone_vmx:
+ cmplwi 5,0
+ bnel __ChaCha20_1x
+
+ lwz 12,244(1)
+ li 10,103
+ li 11,119
+ mtspr 256,12
+ lvx 23,10,1
+ addi 10,10,32
+ lvx 24,11,1
+ addi 11,11,32
+ lvx 25,10,1
+ addi 10,10,32
+ lvx 26,11,1
+ addi 11,11,32
+ lvx 27,10,1
+ addi 10,10,32
+ lvx 28,11,1
+ addi 11,11,32
+ lvx 29,10,1
+ addi 10,10,32
+ lvx 30,11,1
+ lvx 31,10,1
+ lwz 0, 324(1)
+ lwz 14,248(1)
+ lwz 15,252(1)
+ lwz 16,256(1)
+ lwz 17,260(1)
+ lwz 18,264(1)
+ lwz 19,268(1)
+ lwz 20,272(1)
+ lwz 21,276(1)
+ lwz 22,280(1)
+ lwz 23,284(1)
+ lwz 24,288(1)
+ lwz 25,292(1)
+ lwz 26,296(1)
+ lwz 27,300(1)
+ lwz 28,304(1)
+ lwz 29,308(1)
+ lwz 30,312(1)
+ lwz 31,316(1)
+ mtlr 0
+ addi 1,1,320
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,18,5,0
+.long 0
+.size ChaCha20_ctr32_vmx,.-ChaCha20_ctr32_vmx
+
+.globl ChaCha20_ctr32_vsx
+.type ChaCha20_ctr32_vsx,@function
+.align 5
+ChaCha20_ctr32_vsx:
+ stwu 1,-200(1)
+ mflr 0
+ li 10,103
+ li 11,119
+ mfspr 12,256
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ stw 12,196(1)
+ li 12,-4096+63
+ stw 0, 204(1)
+ mtspr 256,12
+
+ bl .Lconsts
+ .long 0x7E006619
+ addi 12,12,0x50
+ li 8,16
+ li 9,32
+ li 10,48
+ li 11,64
+
+ .long 0x7E203619
+ .long 0x7E483619
+ .long 0x7E603E19
+
+ vxor 27,27,27
+ .long 0x7F8B6619
+ vspltw 26,19,0
+ vsldoi 19,19,27,4
+ vsldoi 19,27,19,12
+ vadduwm 26,26,28
+
+ lvsl 31,0,8
+ vspltisb 27,3
+ vxor 31,31,27
+
+ li 0,10
+ mtctr 0
+ b .Loop_outer_vsx
+
+.align 5
+.Loop_outer_vsx:
+ lvx 0,0,12
+ lvx 1,8,12
+ lvx 2,9,12
+ lvx 3,10,12
+
+ vspltw 4,17,0
+ vspltw 5,17,1
+ vspltw 6,17,2
+ vspltw 7,17,3
+
+ vspltw 8,18,0
+ vspltw 9,18,1
+ vspltw 10,18,2
+ vspltw 11,18,3
+
+ vor 12,26,26
+ vspltw 13,19,1
+ vspltw 14,19,2
+ vspltw 15,19,3
+
+ vspltisw 27,-16
+ vspltisw 28,12
+ vspltisw 29,8
+ vspltisw 30,7
+
+.Loop_vsx:
+ vadduwm 0,0,4
+ vadduwm 1,1,5
+ vadduwm 2,2,6
+ vadduwm 3,3,7
+ vxor 12,12,0
+ vxor 13,13,1
+ vxor 14,14,2
+ vxor 15,15,3
+ vrlw 12,12,27
+ vrlw 13,13,27
+ vrlw 14,14,27
+ vrlw 15,15,27
+ vadduwm 8,8,12
+ vadduwm 9,9,13
+ vadduwm 10,10,14
+ vadduwm 11,11,15
+ vxor 4,4,8
+ vxor 5,5,9
+ vxor 6,6,10
+ vxor 7,7,11
+ vrlw 4,4,28
+ vrlw 5,5,28
+ vrlw 6,6,28
+ vrlw 7,7,28
+ vadduwm 0,0,4
+ vadduwm 1,1,5
+ vadduwm 2,2,6
+ vadduwm 3,3,7
+ vxor 12,12,0
+ vxor 13,13,1
+ vxor 14,14,2
+ vxor 15,15,3
+ vrlw 12,12,29
+ vrlw 13,13,29
+ vrlw 14,14,29
+ vrlw 15,15,29
+ vadduwm 8,8,12
+ vadduwm 9,9,13
+ vadduwm 10,10,14
+ vadduwm 11,11,15
+ vxor 4,4,8
+ vxor 5,5,9
+ vxor 6,6,10
+ vxor 7,7,11
+ vrlw 4,4,30
+ vrlw 5,5,30
+ vrlw 6,6,30
+ vrlw 7,7,30
+ vadduwm 0,0,5
+ vadduwm 1,1,6
+ vadduwm 2,2,7
+ vadduwm 3,3,4
+ vxor 15,15,0
+ vxor 12,12,1
+ vxor 13,13,2
+ vxor 14,14,3
+ vrlw 15,15,27
+ vrlw 12,12,27
+ vrlw 13,13,27
+ vrlw 14,14,27
+ vadduwm 10,10,15
+ vadduwm 11,11,12
+ vadduwm 8,8,13
+ vadduwm 9,9,14
+ vxor 5,5,10
+ vxor 6,6,11
+ vxor 7,7,8
+ vxor 4,4,9
+ vrlw 5,5,28
+ vrlw 6,6,28
+ vrlw 7,7,28
+ vrlw 4,4,28
+ vadduwm 0,0,5
+ vadduwm 1,1,6
+ vadduwm 2,2,7
+ vadduwm 3,3,4
+ vxor 15,15,0
+ vxor 12,12,1
+ vxor 13,13,2
+ vxor 14,14,3
+ vrlw 15,15,29
+ vrlw 12,12,29
+ vrlw 13,13,29
+ vrlw 14,14,29
+ vadduwm 10,10,15
+ vadduwm 11,11,12
+ vadduwm 8,8,13
+ vadduwm 9,9,14
+ vxor 5,5,10
+ vxor 6,6,11
+ vxor 7,7,8
+ vxor 4,4,9
+ vrlw 5,5,30
+ vrlw 6,6,30
+ vrlw 7,7,30
+ vrlw 4,4,30
+ bdnz .Loop_vsx
+
+ vadduwm 12,12,26
+
+ .long 0x13600F8C
+ .long 0x13821F8C
+ .long 0x10000E8C
+ .long 0x10421E8C
+ .long 0x13A42F8C
+ .long 0x13C63F8C
+ .long 0xF0201057
+ .long 0xF0601357
+ .long 0xF01BE057
+ .long 0xF05BE357
+
+ .long 0x10842E8C
+ .long 0x10C63E8C
+ .long 0x13684F8C
+ .long 0x138A5F8C
+ .long 0xF0A43057
+ .long 0xF0E43357
+ .long 0xF09DF057
+ .long 0xF0DDF357
+
+ .long 0x11084E8C
+ .long 0x114A5E8C
+ .long 0x13AC6F8C
+ .long 0x13CE7F8C
+ .long 0xF1285057
+ .long 0xF1685357
+ .long 0xF11BE057
+ .long 0xF15BE357
+
+ .long 0x118C6E8C
+ .long 0x11CE7E8C
+ vspltisw 27,4
+ vadduwm 26,26,27
+ .long 0xF1AC7057
+ .long 0xF1EC7357
+ .long 0xF19DF057
+ .long 0xF1DDF357
+
+ vadduwm 0,0,16
+ vadduwm 4,4,17
+ vadduwm 8,8,18
+ vadduwm 12,12,19
+
+ vperm 0,0,0,31
+ vperm 4,4,4,31
+ vperm 8,8,8,31
+ vperm 12,12,12,31
+
+ cmplwi 5,0x40
+ blt .Ltail_vsx
+
+ .long 0x7F602619
+ .long 0x7F882619
+ .long 0x7FA92619
+ .long 0x7FCA2619
+
+ vxor 27,27,0
+ vxor 28,28,4
+ vxor 29,29,8
+ vxor 30,30,12
+
+ .long 0x7F601F19
+ .long 0x7F881F19
+ addi 4,4,0x40
+ .long 0x7FA91F19
+ subi 5,5,0x40
+ .long 0x7FCA1F19
+ addi 3,3,0x40
+ beq .Ldone_vsx
+
+ vadduwm 0,1,16
+ vadduwm 4,5,17
+ vadduwm 8,9,18
+ vadduwm 12,13,19
+
+ vperm 0,0,0,31
+ vperm 4,4,4,31
+ vperm 8,8,8,31
+ vperm 12,12,12,31
+
+ cmplwi 5,0x40
+ blt .Ltail_vsx
+
+ .long 0x7F602619
+ .long 0x7F882619
+ .long 0x7FA92619
+ .long 0x7FCA2619
+
+ vxor 27,27,0
+ vxor 28,28,4
+ vxor 29,29,8
+ vxor 30,30,12
+
+ .long 0x7F601F19
+ .long 0x7F881F19
+ addi 4,4,0x40
+ .long 0x7FA91F19
+ subi 5,5,0x40
+ .long 0x7FCA1F19
+ addi 3,3,0x40
+ beq .Ldone_vsx
+
+ vadduwm 0,2,16
+ vadduwm 4,6,17
+ vadduwm 8,10,18
+ vadduwm 12,14,19
+
+ vperm 0,0,0,31
+ vperm 4,4,4,31
+ vperm 8,8,8,31
+ vperm 12,12,12,31
+
+ cmplwi 5,0x40
+ blt .Ltail_vsx
+
+ .long 0x7F602619
+ .long 0x7F882619
+ .long 0x7FA92619
+ .long 0x7FCA2619
+
+ vxor 27,27,0
+ vxor 28,28,4
+ vxor 29,29,8
+ vxor 30,30,12
+
+ .long 0x7F601F19
+ .long 0x7F881F19
+ addi 4,4,0x40
+ .long 0x7FA91F19
+ subi 5,5,0x40
+ .long 0x7FCA1F19
+ addi 3,3,0x40
+ beq .Ldone_vsx
+
+ vadduwm 0,3,16
+ vadduwm 4,7,17
+ vadduwm 8,11,18
+ vadduwm 12,15,19
+
+ vperm 0,0,0,31
+ vperm 4,4,4,31
+ vperm 8,8,8,31
+ vperm 12,12,12,31
+
+ cmplwi 5,0x40
+ blt .Ltail_vsx
+
+ .long 0x7F602619
+ .long 0x7F882619
+ .long 0x7FA92619
+ .long 0x7FCA2619
+
+ vxor 27,27,0
+ vxor 28,28,4
+ vxor 29,29,8
+ vxor 30,30,12
+
+ .long 0x7F601F19
+ .long 0x7F881F19
+ addi 4,4,0x40
+ .long 0x7FA91F19
+ subi 5,5,0x40
+ .long 0x7FCA1F19
+ addi 3,3,0x40
+ mtctr 0
+ bne .Loop_outer_vsx
+
+.Ldone_vsx:
+ lwz 12,196(1)
+ li 10,103
+ li 11,119
+ lwz 0, 204(1)
+ mtspr 256,12
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ mtlr 0
+ addi 1,1,200
+ blr
+
+.align 4
+.Ltail_vsx:
+ addi 11,1,24
+ mtctr 5
+ .long 0x7C005F19
+ .long 0x7C885F19
+ .long 0x7D095F19
+ .long 0x7D8A5F19
+ subi 12,11,1
+ subi 4,4,1
+ subi 3,3,1
+
+.Loop_tail_vsx:
+ lbzu 6,1(12)
+ lbzu 7,1(4)
+ xor 6,6,7
+ stbu 6,1(3)
+ bdnz .Loop_tail_vsx
+
+ .long 0x7E005F19
+ .long 0x7E085F19
+ .long 0x7E095F19
+ .long 0x7E0A5F19
+
+ b .Ldone_vsx
+.long 0
+.byte 0,12,0x04,1,0x80,0,5,0
+.long 0
+.size ChaCha20_ctr32_vsx,.-ChaCha20_ctr32_vsx
+.align 5
+.Lconsts:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 12
+ addi 12,12,56
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.Lsigma:
+.long 0x61707865,0x3320646e,0x79622d32,0x6b206574
+.long 1,0,0,0
+.long 4,0,0,0
+.long 0x02030001,0x06070405,0x0a0b0809,0x0e0f0c0d
+.long 0x01020300,0x05060704,0x090a0b08,0x0d0e0f0c
+.long 0x61707865,0x61707865,0x61707865,0x61707865
+.long 0x3320646e,0x3320646e,0x3320646e,0x3320646e
+.long 0x79622d32,0x79622d32,0x79622d32,0x79622d32
+.long 0x6b206574,0x6b206574,0x6b206574,0x6b206574
+.long 0,1,2,3
+.byte 67,104,97,67,104,97,50,48,32,102,111,114,32,80,111,119,101,114,80,67,47,65,108,116,105,86,101,99,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 2
diff --git a/sys/crypto/openssl/powerpc/ghashp8-ppc.S b/sys/crypto/openssl/powerpc/ghashp8-ppc.S
new file mode 100644
index 000000000000..0faf60451c71
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/ghashp8-ppc.S
@@ -0,0 +1,570 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from ghashp8-ppc.pl. */
+.machine "any"
+
+.text
+
+.globl gcm_init_p8
+.type gcm_init_p8,@function
+.align 5
+gcm_init_p8:
+ li 0,-4096
+ li 8,0x10
+ mfspr 12,256
+ li 9,0x20
+ mtspr 256,0
+ li 10,0x30
+ .long 0x7D202699
+
+ vspltisb 8,-16
+ vspltisb 5,1
+ vaddubm 8,8,8
+ vxor 4,4,4
+ vor 8,8,5
+ vsldoi 8,8,4,15
+ vsldoi 6,4,5,1
+ vaddubm 8,8,8
+ vspltisb 7,7
+ vor 8,8,6
+ vspltb 6,9,0
+ vsl 9,9,5
+ vsrab 6,6,7
+ vand 6,6,8
+ vxor 3,9,6
+
+ vsldoi 9,3,3,8
+ vsldoi 8,4,8,8
+ vsldoi 11,4,9,8
+ vsldoi 10,9,4,8
+
+ .long 0x7D001F99
+ .long 0x7D681F99
+ li 8,0x40
+ .long 0x7D291F99
+ li 9,0x50
+ .long 0x7D4A1F99
+ li 10,0x60
+
+ .long 0x10035CC8
+ .long 0x10234CC8
+ .long 0x104354C8
+
+ .long 0x10E044C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vxor 0,0,5
+ vxor 2,2,6
+
+ vsldoi 0,0,0,8
+ vxor 0,0,7
+
+ vsldoi 6,0,0,8
+ .long 0x100044C8
+ vxor 6,6,2
+ vxor 16,0,6
+
+ vsldoi 17,16,16,8
+ vsldoi 19,4,17,8
+ vsldoi 18,17,4,8
+
+ .long 0x7E681F99
+ li 8,0x70
+ .long 0x7E291F99
+ li 9,0x80
+ .long 0x7E4A1F99
+ li 10,0x90
+ .long 0x10039CC8
+ .long 0x11B09CC8
+ .long 0x10238CC8
+ .long 0x11D08CC8
+ .long 0x104394C8
+ .long 0x11F094C8
+
+ .long 0x10E044C8
+ .long 0x114D44C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vsldoi 11,14,4,8
+ vsldoi 9,4,14,8
+ vxor 0,0,5
+ vxor 2,2,6
+ vxor 13,13,11
+ vxor 15,15,9
+
+ vsldoi 0,0,0,8
+ vsldoi 13,13,13,8
+ vxor 0,0,7
+ vxor 13,13,10
+
+ vsldoi 6,0,0,8
+ vsldoi 9,13,13,8
+ .long 0x100044C8
+ .long 0x11AD44C8
+ vxor 6,6,2
+ vxor 9,9,15
+ vxor 0,0,6
+ vxor 13,13,9
+
+ vsldoi 9,0,0,8
+ vsldoi 17,13,13,8
+ vsldoi 11,4,9,8
+ vsldoi 10,9,4,8
+ vsldoi 19,4,17,8
+ vsldoi 18,17,4,8
+
+ .long 0x7D681F99
+ li 8,0xa0
+ .long 0x7D291F99
+ li 9,0xb0
+ .long 0x7D4A1F99
+ li 10,0xc0
+ .long 0x7E681F99
+ .long 0x7E291F99
+ .long 0x7E4A1F99
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size gcm_init_p8,.-gcm_init_p8
+.globl gcm_gmult_p8
+.type gcm_gmult_p8,@function
+.align 5
+gcm_gmult_p8:
+ lis 0,0xfff8
+ li 8,0x10
+ mfspr 12,256
+ li 9,0x20
+ mtspr 256,0
+ li 10,0x30
+ .long 0x7C601E99
+
+ .long 0x7D682699
+
+ .long 0x7D292699
+
+ .long 0x7D4A2699
+
+ .long 0x7D002699
+
+ vxor 4,4,4
+
+ .long 0x10035CC8
+ .long 0x10234CC8
+ .long 0x104354C8
+
+ .long 0x10E044C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vxor 0,0,5
+ vxor 2,2,6
+
+ vsldoi 0,0,0,8
+ vxor 0,0,7
+
+ vsldoi 6,0,0,8
+ .long 0x100044C8
+ vxor 6,6,2
+ vxor 0,0,6
+
+
+ .long 0x7C001F99
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size gcm_gmult_p8,.-gcm_gmult_p8
+
+.globl gcm_ghash_p8
+.type gcm_ghash_p8,@function
+.align 5
+gcm_ghash_p8:
+ li 0,-4096
+ li 8,0x10
+ mfspr 12,256
+ li 9,0x20
+ mtspr 256,0
+ li 10,0x30
+ .long 0x7C001E99
+
+ .long 0x7D682699
+ li 8,0x40
+
+ .long 0x7D292699
+ li 9,0x50
+
+ .long 0x7D4A2699
+ li 10,0x60
+
+ .long 0x7D002699
+
+ vxor 4,4,4
+
+ cmplwi 6,64
+ bge .Lgcm_ghash_p8_4x
+
+ .long 0x7C602E99
+ addi 5,5,16
+ subic. 6,6,16
+
+ vxor 3,3,0
+ beq .Lshort
+
+ .long 0x7E682699
+ li 8,16
+ .long 0x7E292699
+ add 9,5,6
+ .long 0x7E4A2699
+ b .Loop_2x
+
+.align 5
+.Loop_2x:
+ .long 0x7E002E99
+
+
+ subic 6,6,32
+ .long 0x10039CC8
+ .long 0x11B05CC8
+ subfe 0,0,0
+ .long 0x10238CC8
+ .long 0x11D04CC8
+ and 0,0,6
+ .long 0x104394C8
+ .long 0x11F054C8
+ add 5,5,0
+
+ vxor 0,0,13
+ vxor 1,1,14
+
+ .long 0x10E044C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vxor 2,2,15
+ vxor 0,0,5
+ vxor 2,2,6
+
+ vsldoi 0,0,0,8
+ vxor 0,0,7
+ .long 0x7C682E99
+ addi 5,5,32
+
+ vsldoi 6,0,0,8
+ .long 0x100044C8
+
+ vxor 6,6,2
+ vxor 3,3,6
+ vxor 3,3,0
+ .long 0x7c092840
+ bgt .Loop_2x
+
+ cmplwi 6,0
+ bne .Leven
+
+.Lshort:
+ .long 0x10035CC8
+ .long 0x10234CC8
+ .long 0x104354C8
+
+ .long 0x10E044C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vxor 0,0,5
+ vxor 2,2,6
+
+ vsldoi 0,0,0,8
+ vxor 0,0,7
+
+ vsldoi 6,0,0,8
+ .long 0x100044C8
+ vxor 6,6,2
+
+.Leven:
+ vxor 0,0,6
+
+ .long 0x7C001F99
+
+ mtspr 256,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,4,0
+.long 0
+.align 5
+.gcm_ghash_p8_4x:
+.Lgcm_ghash_p8_4x:
+ stwu 1,-232(1)
+ li 10,39
+ li 11,55
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ li 10,0x60
+ stvx 31,11,1
+ li 0,-1
+ stw 12,228(1)
+ mtspr 256,0
+
+ lvsl 5,0,8
+
+ li 8,0x70
+ .long 0x7E292699
+ li 9,0x80
+ vspltisb 6,8
+
+ li 10,0x90
+ .long 0x7EE82699
+ li 8,0xa0
+ .long 0x7F092699
+ li 9,0xb0
+ .long 0x7F2A2699
+ li 10,0xc0
+ .long 0x7FA82699
+ li 8,0x10
+ .long 0x7FC92699
+ li 9,0x20
+ .long 0x7FEA2699
+ li 10,0x30
+
+ vsldoi 7,4,6,8
+ vaddubm 18,5,7
+ vaddubm 19,6,18
+
+ srwi 6,6,4
+
+ .long 0x7C602E99
+ .long 0x7E082E99
+ subic. 6,6,8
+ .long 0x7EC92E99
+ .long 0x7F8A2E99
+ addi 5,5,0x40
+
+
+
+
+
+ vxor 2,3,0
+
+ .long 0x11B0BCC8
+ .long 0x11D0C4C8
+ .long 0x11F0CCC8
+
+ vperm 11,17,9,18
+ vperm 5,22,28,19
+ vperm 10,17,9,19
+ vperm 6,22,28,18
+ .long 0x12B68CC8
+ .long 0x12855CC8
+ .long 0x137C4CC8
+ .long 0x134654C8
+
+ vxor 21,21,14
+ vxor 20,20,13
+ vxor 27,27,21
+ vxor 26,26,15
+
+ blt .Ltail_4x
+
+.Loop_4x:
+ .long 0x7C602E99
+ .long 0x7E082E99
+ subic. 6,6,4
+ .long 0x7EC92E99
+ .long 0x7F8A2E99
+ addi 5,5,0x40
+
+
+
+
+
+ .long 0x1002ECC8
+ .long 0x1022F4C8
+ .long 0x1042FCC8
+ .long 0x11B0BCC8
+ .long 0x11D0C4C8
+ .long 0x11F0CCC8
+
+ vxor 0,0,20
+ vxor 1,1,27
+ vxor 2,2,26
+ vperm 5,22,28,19
+ vperm 6,22,28,18
+
+ .long 0x10E044C8
+ .long 0x12855CC8
+ .long 0x134654C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vxor 0,0,5
+ vxor 2,2,6
+
+ vsldoi 0,0,0,8
+ vxor 0,0,7
+
+ vsldoi 6,0,0,8
+ .long 0x12B68CC8
+ .long 0x137C4CC8
+ .long 0x100044C8
+
+ vxor 20,20,13
+ vxor 26,26,15
+ vxor 2,2,3
+ vxor 21,21,14
+ vxor 2,2,6
+ vxor 27,27,21
+ vxor 2,2,0
+ bge .Loop_4x
+
+.Ltail_4x:
+ .long 0x1002ECC8
+ .long 0x1022F4C8
+ .long 0x1042FCC8
+
+ vxor 0,0,20
+ vxor 1,1,27
+
+ .long 0x10E044C8
+
+ vsldoi 5,1,4,8
+ vsldoi 6,4,1,8
+ vxor 2,2,26
+ vxor 0,0,5
+ vxor 2,2,6
+
+ vsldoi 0,0,0,8
+ vxor 0,0,7
+
+ vsldoi 6,0,0,8
+ .long 0x100044C8
+ vxor 6,6,2
+ vxor 0,0,6
+
+ addic. 6,6,4
+ beq .Ldone_4x
+
+ .long 0x7C602E99
+ cmplwi 6,2
+ li 6,-4
+ blt .Lone
+ .long 0x7E082E99
+ beq .Ltwo
+
+.Lthree:
+ .long 0x7EC92E99
+
+
+
+
+ vxor 2,3,0
+ vor 29,23,23
+ vor 30,24,24
+ vor 31,25,25
+
+ vperm 5,16,22,19
+ vperm 6,16,22,18
+ .long 0x12B08CC8
+ .long 0x13764CC8
+ .long 0x12855CC8
+ .long 0x134654C8
+
+ vxor 27,27,21
+ b .Ltail_4x
+
+.align 4
+.Ltwo:
+
+
+
+ vxor 2,3,0
+ vperm 5,4,16,19
+ vperm 6,4,16,18
+
+ vsldoi 29,4,17,8
+ vor 30,17,17
+ vsldoi 31,17,4,8
+
+ .long 0x12855CC8
+ .long 0x13704CC8
+ .long 0x134654C8
+
+ b .Ltail_4x
+
+.align 4
+.Lone:
+
+
+ vsldoi 29,4,9,8
+ vor 30,9,9
+ vsldoi 31,9,4,8
+
+ vxor 2,3,0
+ vxor 20,20,20
+ vxor 27,27,27
+ vxor 26,26,26
+
+ b .Ltail_4x
+
+.Ldone_4x:
+
+ .long 0x7C001F99
+
+ li 10,39
+ li 11,55
+ mtspr 256,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ addi 1,1,232
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,0,4,0
+.long 0
+.size gcm_ghash_p8,.-gcm_ghash_p8
+
+.byte 71,72,65,83,72,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 2
diff --git a/sys/crypto/openssl/powerpc/poly1305-ppc.S b/sys/crypto/openssl/powerpc/poly1305-ppc.S
new file mode 100644
index 000000000000..54aff7b38172
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/poly1305-ppc.S
@@ -0,0 +1,313 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from poly1305-ppc.pl. */
+.machine "any"
+.text
+.globl poly1305_init_int
+.type poly1305_init_int,@function
+.align 4
+poly1305_init_int:
+ xor 0,0,0
+ stw 0,0(3)
+ stw 0,4(3)
+ stw 0,8(3)
+ stw 0,12(3)
+ stw 0,16(3)
+
+ .long 0x7c040040
+ beq- .Lno_key
+ li 8,4
+ lwbrx 7,0,4
+ li 9,8
+ lwbrx 8,8,4
+ li 10,12
+ lwbrx 9,9,4
+ lwbrx 10,10,4
+ lis 0,0xf000
+ li 12,-4
+ andc 12,12,0
+
+ andc 7,7,0
+ and 8,8,12
+ and 9,9,12
+ and 10,10,12
+
+ stw 7,32(3)
+ stw 8,36(3)
+ stw 9,40(3)
+ stw 10,44(3)
+
+.Lno_key:
+ xor 3,3,3
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.size poly1305_init_int,.-poly1305_init_int
+
+.globl poly1305_blocks
+.type poly1305_blocks,@function
+.align 4
+poly1305_blocks:
+ srwi. 5,5,4
+ beq- .Labort
+
+ stwu 1,-96(1)
+ mflr 0
+ stw 14,24(1)
+ stw 15,28(1)
+ stw 16,32(1)
+ stw 17,36(1)
+ stw 18,40(1)
+ stw 19,44(1)
+ stw 20,48(1)
+ stw 21,52(1)
+ stw 22,56(1)
+ stw 23,60(1)
+ stw 24,64(1)
+ stw 25,68(1)
+ stw 26,72(1)
+ stw 27,76(1)
+ stw 28,80(1)
+ stw 29,84(1)
+ stw 30,88(1)
+ stw 31,92(1)
+ stw 0,100(1)
+
+ lwz 12,32(3)
+ lwz 14,36(3)
+ lwz 15,40(3)
+ lwz 16,44(3)
+
+ lwz 7,0(3)
+ lwz 8,4(3)
+ lwz 9,8(3)
+ lwz 10,12(3)
+ lwz 11,16(3)
+
+ srwi 17,14,2
+ srwi 18,15,2
+ srwi 19,16,2
+ add 17,17,14
+ add 18,18,15
+ add 19,19,16
+ mtctr 5
+ li 0,3
+ b .Loop
+
+.align 4
+.Loop:
+ li 29,4
+ lwbrx 28,0,4
+ li 30,8
+ lwbrx 29,29,4
+ li 31,12
+ lwbrx 30,30,4
+ lwbrx 31,31,4
+ addi 4,4,16
+
+ addc 7,7,28
+ adde 8,8,29
+ adde 9,9,30
+
+ mullw 28,7,12
+ mulhwu 24,7,12
+
+ mullw 29,7,14
+ mulhwu 25,7,14
+
+ mullw 30,7,15
+ mulhwu 26,7,15
+
+ adde 10,10,31
+ adde 11,11,6
+
+ mullw 31,7,16
+ mulhwu 27,7,16
+
+ mullw 20,8,19
+ mulhwu 21,8,19
+
+ mullw 22,8,12
+ mulhwu 23,8,12
+ addc 28,28,20
+ adde 24,24,21
+
+ mullw 20,8,14
+ mulhwu 21,8,14
+ addc 29,29,22
+ adde 25,25,23
+
+ mullw 22,8,15
+ mulhwu 23,8,15
+ addc 30,30,20
+ adde 26,26,21
+
+ mullw 20,9,18
+ mulhwu 21,9,18
+ addc 31,31,22
+ adde 27,27,23
+
+ mullw 22,9,19
+ mulhwu 23,9,19
+ addc 28,28,20
+ adde 24,24,21
+
+ mullw 20,9,12
+ mulhwu 21,9,12
+ addc 29,29,22
+ adde 25,25,23
+
+ mullw 22,9,14
+ mulhwu 23,9,14
+ addc 30,30,20
+ adde 26,26,21
+
+ mullw 20,10,17
+ mulhwu 21,10,17
+ addc 31,31,22
+ adde 27,27,23
+
+ mullw 22,10,18
+ mulhwu 23,10,18
+ addc 28,28,20
+ adde 24,24,21
+
+ mullw 20,10,19
+ mulhwu 21,10,19
+ addc 29,29,22
+ adde 25,25,23
+
+ mullw 22,10,12
+ mulhwu 23,10,12
+ addc 30,30,20
+ adde 26,26,21
+
+ mullw 20,11,17
+ addc 31,31,22
+ adde 27,27,23
+ addc 29,29,20
+
+ mullw 21,11,18
+ addze 25,25
+ addc 30,30,21
+ addze 26,26
+
+ mullw 22,11,19
+ addc 31,31,22
+ addze 27,27
+
+ mullw 11,11,12
+
+ addc 8,29,24
+ adde 9,30,25
+ adde 10,31,26
+ adde 11,11,27
+
+ andc 24,11,0
+ and 11,11,0
+ srwi 25,24,2
+ add 24,24,25
+ addc 7,28,24
+ addze 8,8
+ addze 9,9
+ addze 10,10
+ addze 11,11
+
+ bdnz .Loop
+
+ stw 7,0(3)
+ stw 8,4(3)
+ stw 9,8(3)
+ stw 10,12(3)
+ stw 11,16(3)
+
+ lwz 14,24(1)
+ lwz 15,28(1)
+ lwz 16,32(1)
+ lwz 17,36(1)
+ lwz 18,40(1)
+ lwz 19,44(1)
+ lwz 20,48(1)
+ lwz 21,52(1)
+ lwz 22,56(1)
+ lwz 23,60(1)
+ lwz 24,64(1)
+ lwz 25,68(1)
+ lwz 26,72(1)
+ lwz 27,76(1)
+ lwz 28,80(1)
+ lwz 29,84(1)
+ lwz 30,88(1)
+ lwz 31,92(1)
+ addi 1,1,96
+.Labort:
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,4,0
+.size poly1305_blocks,.-poly1305_blocks
+
+.globl poly1305_emit
+.type poly1305_emit,@function
+.align 4
+poly1305_emit:
+ stwu 1,-96(1)
+ mflr 0
+ stw 28,80(1)
+ stw 29,84(1)
+ stw 30,88(1)
+ stw 31,92(1)
+ stw 0,100(1)
+
+ lwz 7,0(3)
+ lwz 8,4(3)
+ lwz 9,8(3)
+ lwz 10,12(3)
+ lwz 11,16(3)
+
+ addic 28,7,5
+ addze 29,8
+ addze 30,9
+ addze 31,10
+ addze 0,11
+
+ srwi 0,0,2
+ neg 0,0
+
+ andc 7,7,0
+ and 28,28,0
+ andc 8,8,0
+ and 29,29,0
+ or 7,7,28
+ lwz 28,0(5)
+ andc 9,9,0
+ and 30,30,0
+ or 8,8,29
+ lwz 29,4(5)
+ andc 10,10,0
+ and 31,31,0
+ or 9,9,30
+ lwz 30,8(5)
+ or 10,10,31
+ lwz 31,12(5)
+
+ addc 7,7,28
+ adde 8,8,29
+ adde 9,9,30
+ adde 10,10,31
+ li 29,4
+ stwbrx 7,0,4
+ li 30,8
+ stwbrx 8,29,4
+ li 31,12
+ stwbrx 9,30,4
+ stwbrx 10,31,4
+ lwz 28,80(1)
+ lwz 29,84(1)
+ lwz 30,88(1)
+ lwz 31,92(1)
+ addi 1,1,96
+ blr
+.long 0
+.byte 0,12,4,1,0x80,4,3,0
+.size poly1305_emit,.-poly1305_emit
+.byte 80,111,108,121,49,51,48,53,32,102,111,114,32,80,80,67,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
diff --git a/sys/crypto/openssl/powerpc/poly1305-ppcfp.S b/sys/crypto/openssl/powerpc/poly1305-ppcfp.S
new file mode 100644
index 000000000000..403526444f2c
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/poly1305-ppcfp.S
@@ -0,0 +1,587 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from poly1305-ppcfp.pl. */
+.machine "any"
+.text
+
+.globl poly1305_init_fpu
+.type poly1305_init_fpu,@function
+.align 6
+poly1305_init_fpu:
+ stwu 1,-24(1)
+ mflr 6
+ stw 6,28(1)
+
+ bl .LPICmeup
+
+ xor 0,0,0
+ mtlr 6
+
+ lfd 8,8*0(5)
+ lfd 9,8*1(5)
+ lfd 10,8*2(5)
+ lfd 11,8*3(5)
+ lfd 12,8*4(5)
+ lfd 13,8*5(5)
+
+ stfd 8,8*0(3)
+ stfd 9,8*1(3)
+ stfd 10,8*2(3)
+ stfd 11,8*3(3)
+
+ .long 0x7c040040
+ beq- .Lno_key
+
+ lfd 6,8*13(5)
+ mffs 7
+
+ stfd 8,8*4(3)
+ stfd 9,8*5(3)
+ stfd 10,8*6(3)
+ stfd 11,8*7(3)
+
+ li 8,4
+ li 9,8
+ li 10,12
+ lwbrx 7,0,4
+ lwbrx 8,8,4
+ lwbrx 9,9,4
+ lwbrx 10,10,4
+
+ lis 11,0xf000
+ ori 12,11,3
+ andc 7,7,11
+ andc 8,8,12
+ andc 9,9,12
+ andc 10,10,12
+
+ stw 7,36(3)
+ stw 8,44(3)
+ stw 9,52(3)
+ stw 10,60(3)
+
+ mtfsf 255,6
+ stfd 8,8*18(3)
+ stfd 9,8*19(3)
+ stfd 10,8*20(3)
+ stfd 11,8*21(3)
+ stfd 12,8*22(3)
+ stfd 13,8*23(3)
+
+ lfd 0,8*4(3)
+ lfd 2,8*5(3)
+ lfd 4,8*6(3)
+ lfd 6,8*7(3)
+
+ fsub 0,0,8
+ fsub 2,2,9
+ fsub 4,4,10
+ fsub 6,6,11
+
+ lfd 8,8*6(5)
+ lfd 9,8*7(5)
+ lfd 10,8*8(5)
+ lfd 11,8*9(5)
+
+ fmul 3,2,13
+ fmul 5,4,13
+ stfd 7,8*15(3)
+ fmul 7,6,13
+
+ fadd 1,0,8
+ stfd 3,8*12(3)
+ fadd 3,2,9
+ stfd 5,8*13(3)
+ fadd 5,4,10
+ stfd 7,8*14(3)
+ fadd 7,6,11
+
+ fsub 1,1,8
+ fsub 3,3,9
+ fsub 5,5,10
+ fsub 7,7,11
+
+ lfd 8,8*10(5)
+ lfd 9,8*11(5)
+ lfd 10,8*12(5)
+
+ fsub 0,0,1
+ fsub 2,2,3
+ fsub 4,4,5
+ fsub 6,6,7
+
+ stfd 1,8*5(3)
+ stfd 3,8*7(3)
+ stfd 5,8*9(3)
+ stfd 7,8*11(3)
+
+ stfd 0,8*4(3)
+ stfd 2,8*6(3)
+ stfd 4,8*8(3)
+ stfd 6,8*10(3)
+
+ lfd 2,8*12(3)
+ lfd 4,8*13(3)
+ lfd 6,8*14(3)
+ lfd 0,8*15(3)
+
+ fadd 3,2,8
+ fadd 5,4,9
+ fadd 7,6,10
+
+ fsub 3,3,8
+ fsub 5,5,9
+ fsub 7,7,10
+
+ fsub 2,2,3
+ fsub 4,4,5
+ fsub 6,6,7
+
+ stfd 3,8*13(3)
+ stfd 5,8*15(3)
+ stfd 7,8*17(3)
+
+ stfd 2,8*12(3)
+ stfd 4,8*14(3)
+ stfd 6,8*16(3)
+
+ mtfsf 255,0
+.Lno_key:
+ xor 3,3,3
+ addi 1,1,24
+ blr
+.long 0
+.byte 0,12,4,1,0x80,0,2,0
+.size poly1305_init_fpu,.-poly1305_init_fpu
+
+.globl poly1305_blocks_fpu
+.type poly1305_blocks_fpu,@function
+.align 4
+poly1305_blocks_fpu:
+ srwi. 5,5,4
+ beq- .Labort
+
+ stwu 1,-216(1)
+ mflr 0
+ stfd 14,72(1)
+ stfd 15,80(1)
+ stfd 16,88(1)
+ stfd 17,96(1)
+ stfd 18,104(1)
+ stfd 19,112(1)
+ stfd 20,120(1)
+ stfd 21,128(1)
+ stfd 22,136(1)
+ stfd 23,144(1)
+ stfd 24,152(1)
+ stfd 25,160(1)
+ stfd 26,168(1)
+ stfd 27,176(1)
+ stfd 28,184(1)
+ stfd 29,192(1)
+ stfd 30,200(1)
+ stfd 31,208(1)
+ stw 0,220(1)
+
+ xor 0,0,0
+ li 10,1
+ mtctr 5
+ neg 5,5
+ stw 0,56(1)
+ stw 10,60(1)
+
+ lfd 8,8*18(3)
+ lfd 9,8*19(3)
+ lfd 10,8*20(3)
+ lfd 11,8*21(3)
+ lfd 12,8*22(3)
+ lfd 13,8*23(3)
+
+ lfd 0,8*0(3)
+ lfd 2,8*1(3)
+ lfd 4,8*2(3)
+ lfd 6,8*3(3)
+
+ stfd 8,24(1)
+ oris 10,6,18736
+ stfd 9,32(1)
+ stfd 10,40(1)
+ stw 10,48(1)
+
+ li 11,4
+ li 12,8
+ li 6,12
+ lwbrx 7,0,4
+ lwbrx 8,11,4
+ lwbrx 9,12,4
+ lwbrx 10,6,4
+ addi 4,4,16
+
+ stw 7,28(1)
+ stw 8,36(1)
+ stw 9,44(1)
+ stw 10,52(1)
+
+ mffs 28
+ lfd 29,56(1)
+ lfd 14,8*4(3)
+ lfd 15,8*5(3)
+ lfd 16,8*6(3)
+ lfd 17,8*7(3)
+ lfd 18,8*8(3)
+ lfd 19,8*9(3)
+ lfd 24,8*10(3)
+ lfd 25,8*11(3)
+ lfd 26,8*12(3)
+ lfd 27,8*13(3)
+ lfd 20,8*14(3)
+ lfd 21,8*15(3)
+ lfd 22,8*16(3)
+ lfd 23,8*17(3)
+
+ stfd 28,56(1)
+ mtfsf 255,29
+
+ addic 5,5,1
+ addze 0,0
+ slwi. 0,0,4
+ sub 4,4,0
+
+ lfd 28,24(1)
+ lfd 29,32(1)
+ lfd 30,40(1)
+ lfd 31,48(1)
+
+ fsub 0,0,8
+ lwbrx 7,0,4
+ fsub 2,2,9
+ lwbrx 8,11,4
+ fsub 4,4,10
+ lwbrx 9,12,4
+ fsub 6,6,11
+ lwbrx 10,6,4
+
+ fsub 28,28,8
+ addi 4,4,16
+ fsub 29,29,9
+ fsub 30,30,10
+ fsub 31,31,11
+
+ fadd 28,28,0
+ stw 7,28(1)
+ fadd 29,29,2
+ stw 8,36(1)
+ fadd 30,30,4
+ stw 9,44(1)
+ fadd 31,31,6
+ stw 10,52(1)
+
+ b .Lentry
+
+.align 4
+.Loop:
+ fsub 30,30,8
+ addic 5,5,1
+ fsub 31,31,9
+ addze 0,0
+ fsub 26,26,10
+ slwi. 0,0,4
+ fsub 27,27,11
+ sub 4,4,0
+
+ fadd 0,0,30
+ fadd 1,1,31
+ fadd 4,4,26
+ fadd 5,5,27
+
+
+ fadd 26,2,10
+ lwbrx 7,0,4
+ fadd 27,3,10
+ lwbrx 8,11,4
+ fadd 30,6,12
+ lwbrx 9,12,4
+ fadd 31,7,12
+ lwbrx 10,6,4
+ fadd 24,0,9
+ addi 4,4,16
+ fadd 25,1,9
+ fadd 28,4,11
+ fadd 29,5,11
+
+ fsub 26,26,10
+ stw 7,28(1)
+ fsub 27,27,10
+ stw 8,36(1)
+ fsub 30,30,12
+ stw 9,44(1)
+ fsub 31,31,12
+ stw 10,52(1)
+ fsub 24,24,9
+ fsub 25,25,9
+ fsub 28,28,11
+ fsub 29,29,11
+
+ fsub 2,2,26
+ fsub 3,3,27
+ fsub 6,6,30
+ fsub 7,7,31
+ fsub 4,4,28
+ fsub 5,5,29
+ fsub 0,0,24
+ fsub 1,1,25
+
+ fadd 2,2,24
+ fadd 3,3,25
+ fadd 6,6,28
+ fadd 7,7,29
+ fadd 4,4,26
+ fadd 5,5,27
+ fmadd 0,30,13,0
+ fmadd 1,31,13,1
+
+ fadd 29,2,3
+ lfd 26,8*12(3)
+ fadd 31,6,7
+ lfd 27,8*13(3)
+ fadd 30,4,5
+ lfd 24,8*10(3)
+ fadd 28,0,1
+ lfd 25,8*11(3)
+.Lentry:
+ fmul 0,22,29
+ fmul 1,23,29
+ fmul 4,16,29
+ fmul 5,17,29
+ fmul 2,14,29
+ fmul 3,15,29
+ fmul 6,18,29
+ fmul 7,19,29
+
+ fmadd 0,26,31,0
+ fmadd 1,27,31,1
+ fmadd 4,22,31,4
+ fmadd 5,23,31,5
+ fmadd 2,20,31,2
+ fmadd 3,21,31,3
+ fmadd 6,14,31,6
+ fmadd 7,15,31,7
+
+ fmadd 0,20,30,0
+ fmadd 1,21,30,1
+ fmadd 4,14,30,4
+ fmadd 5,15,30,5
+ fmadd 2,22,30,2
+ fmadd 3,23,30,3
+ fmadd 6,16,30,6
+ fmadd 7,17,30,7
+
+ fmadd 0,14,28,0
+ lfd 30,24(1)
+ fmadd 1,15,28,1
+ lfd 31,32(1)
+ fmadd 4,18,28,4
+ lfd 26,40(1)
+ fmadd 5,19,28,5
+ lfd 27,48(1)
+ fmadd 2,16,28,2
+ fmadd 3,17,28,3
+ fmadd 6,24,28,6
+ fmadd 7,25,28,7
+
+ bdnz .Loop
+
+
+ fadd 24,0,9
+ fadd 25,1,9
+ fadd 28,4,11
+ fadd 29,5,11
+ fadd 26,2,10
+ fadd 27,3,10
+ fadd 30,6,12
+ fadd 31,7,12
+
+ fsub 24,24,9
+ fsub 25,25,9
+ fsub 28,28,11
+ fsub 29,29,11
+ fsub 26,26,10
+ fsub 27,27,10
+ fsub 30,30,12
+ fsub 31,31,12
+
+ fsub 2,2,26
+ fsub 3,3,27
+ fsub 6,6,30
+ fsub 7,7,31
+ fsub 4,4,28
+ fsub 5,5,29
+ fsub 0,0,24
+ fsub 1,1,25
+
+ fadd 2,2,24
+ fadd 3,3,25
+ fadd 6,6,28
+ fadd 7,7,29
+ fadd 4,4,26
+ fadd 5,5,27
+ fmadd 0,30,13,0
+ fmadd 1,31,13,1
+
+ fadd 29,2,3
+ fadd 31,6,7
+ fadd 30,4,5
+ fadd 28,0,1
+
+ lfd 0,56(1)
+ fadd 29,29,9
+ fadd 31,31,11
+ fadd 30,30,10
+ fadd 28,28,8
+
+ stfd 29,8*1(3)
+ stfd 31,8*3(3)
+ stfd 30,8*2(3)
+ stfd 28,8*0(3)
+
+ mtfsf 255,0
+ lfd 14,72(1)
+ lfd 15,80(1)
+ lfd 16,88(1)
+ lfd 17,96(1)
+ lfd 18,104(1)
+ lfd 19,112(1)
+ lfd 20,120(1)
+ lfd 21,128(1)
+ lfd 22,136(1)
+ lfd 23,144(1)
+ lfd 24,152(1)
+ lfd 25,160(1)
+ lfd 26,168(1)
+ lfd 27,176(1)
+ lfd 28,184(1)
+ lfd 29,192(1)
+ lfd 30,200(1)
+ lfd 31,208(1)
+ addi 1,1,216
+.Labort:
+ blr
+.long 0
+.byte 0,12,4,1,0x80,0,4,0
+.size poly1305_blocks_fpu,.-poly1305_blocks_fpu
+.globl poly1305_emit_fpu
+.type poly1305_emit_fpu,@function
+.align 4
+poly1305_emit_fpu:
+ stwu 1,-40(1)
+ mflr 0
+ stw 28,24(1)
+ stw 29,28(1)
+ stw 30,32(1)
+ stw 31,36(1)
+ stw 0,44(1)
+
+ lwz 28,0(3)
+ lwz 7,4(3)
+ lwz 29,8(3)
+ lwz 8,12(3)
+ lwz 30,16(3)
+ lwz 9,20(3)
+ lwz 31,24(3)
+ lwz 10,28(3)
+
+ lis 0,0xfff0
+ andc 28,28,0
+ andc 29,29,0
+ andc 30,30,0
+ andc 31,31,0
+ li 0,3
+
+ srwi 6,31,2
+ and 11,31,0
+ andc 31,31,0
+ add 31,31,6
+ addc 7,7,31
+ adde 8,8,28
+ adde 9,9,29
+ adde 10,10,30
+ addze 11,11
+
+ addic 28,7,5
+ addze 29,8
+ addze 30,9
+ addze 31,10
+ addze 0,11
+
+ srwi 0,0,2
+ neg 0,0
+ srawi 0,0,31
+
+ andc 7,7,0
+ and 28,28,0
+ andc 8,8,0
+ and 29,29,0
+ or 7,7,28
+ lwz 28,0(5)
+ andc 9,9,0
+ and 30,30,0
+ or 8,8,29
+ lwz 29,4(5)
+ andc 10,10,0
+ and 31,31,0
+ or 9,9,30
+ lwz 30,8(5)
+ or 10,10,31
+ lwz 31,12(5)
+
+ addc 7,7,28
+ adde 8,8,29
+ adde 9,9,30
+ adde 10,10,31
+ li 29,4
+ stwbrx 7,0,4
+ li 30,8
+ stwbrx 8,29,4
+ li 31,12
+ stwbrx 9,30,4
+ stwbrx 10,31,4
+ lwz 28,24(1)
+ lwz 29,28(1)
+ lwz 30,32(1)
+ lwz 31,36(1)
+ addi 1,1,40
+ blr
+.long 0
+.byte 0,12,4,1,0x80,4,3,0
+.size poly1305_emit_fpu,.-poly1305_emit_fpu
+.align 6
+.LPICmeup:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 5
+ addi 5,5,56
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+
+.long 0x43300000,0x00000000
+.long 0x45300000,0x00000000
+.long 0x47300000,0x00000000
+.long 0x49300000,0x00000000
+.long 0x4b500000,0x00000000
+
+.long 0x37f40000,0x00000000
+
+.long 0x44300000,0x00000000
+.long 0x46300000,0x00000000
+.long 0x48300000,0x00000000
+.long 0x4a300000,0x00000000
+.long 0x3e300000,0x00000000
+.long 0x40300000,0x00000000
+.long 0x42300000,0x00000000
+
+.long 0x00000000,0x00000001
+.byte 80,111,108,121,49,51,48,53,32,102,111,114,32,80,80,67,32,70,80,85,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 4
diff --git a/sys/crypto/openssl/powerpc/ppc-mont.S b/sys/crypto/openssl/powerpc/ppc-mont.S
new file mode 100644
index 000000000000..e530f694458d
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/ppc-mont.S
@@ -0,0 +1,1788 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from ppc-mont.pl. */
+.machine "any"
+.text
+
+.globl bn_mul_mont_int
+.type bn_mul_mont_int,@function
+.align 5
+bn_mul_mont_int:
+ mr 9,3
+ li 3,0
+ cmpwi 8,32
+ bgelr
+ slwi 8,8,2
+ li 12,-4096
+ addi 3,8,256
+ subf 3,3,1
+ and 3,3,12
+ subf 3,1,3
+ mr 12,1
+ srwi 8,8,2
+ stwux 1,1,3
+
+ stw 20,-48(12)
+ stw 21,-44(12)
+ stw 22,-40(12)
+ stw 23,-36(12)
+ stw 24,-32(12)
+ stw 25,-28(12)
+ stw 26,-24(12)
+ stw 27,-20(12)
+ stw 28,-16(12)
+ stw 29,-12(12)
+ stw 30,-8(12)
+ stw 31,-4(12)
+
+ lwz 7,0(7)
+ addi 8,8,-2
+
+ lwz 23,0(5)
+ lwz 10,0(4)
+ addi 22,1,32
+ mullw 25,10,23
+ mulhwu 26,10,23
+
+ lwz 10,4(4)
+ lwz 11,0(6)
+
+ mullw 24,25,7
+
+ mullw 29,10,23
+ mulhwu 30,10,23
+
+ mullw 27,11,24
+ mulhwu 28,11,24
+ lwz 11,4(6)
+ addc 27,27,25
+ addze 28,28
+
+ mullw 31,11,24
+ mulhwu 0,11,24
+
+ mtctr 8
+ li 21,8
+.align 4
+.L1st:
+ lwzx 10,4,21
+ addc 25,29,26
+ lwzx 11,6,21
+ addze 26,30
+ mullw 29,10,23
+ addc 27,31,28
+ mulhwu 30,10,23
+ addze 28,0
+ mullw 31,11,24
+ addc 27,27,25
+ mulhwu 0,11,24
+ addze 28,28
+ stw 27,0(22)
+
+ addi 21,21,4
+ addi 22,22,4
+ bdnz .L1st
+
+ addc 25,29,26
+ addze 26,30
+
+ addc 27,31,28
+ addze 28,0
+ addc 27,27,25
+ addze 28,28
+ stw 27,0(22)
+
+ li 3,0
+ addc 28,28,26
+ addze 3,3
+ stw 28,4(22)
+
+ li 20,4
+.align 4
+.Louter:
+ lwzx 23,5,20
+ lwz 10,0(4)
+ addi 22,1,32
+ lwz 12,32(1)
+ mullw 25,10,23
+ mulhwu 26,10,23
+ lwz 10,4(4)
+ lwz 11,0(6)
+ addc 25,25,12
+ mullw 29,10,23
+ addze 26,26
+ mullw 24,25,7
+ mulhwu 30,10,23
+ mullw 27,11,24
+ mulhwu 28,11,24
+ lwz 11,4(6)
+ addc 27,27,25
+ mullw 31,11,24
+ addze 28,28
+ mulhwu 0,11,24
+
+ mtctr 8
+ li 21,8
+.align 4
+.Linner:
+ lwzx 10,4,21
+ addc 25,29,26
+ lwz 12,4(22)
+ addze 26,30
+ lwzx 11,6,21
+ addc 27,31,28
+ mullw 29,10,23
+ addze 28,0
+ mulhwu 30,10,23
+ addc 25,25,12
+ mullw 31,11,24
+ addze 26,26
+ mulhwu 0,11,24
+ addc 27,27,25
+ addi 21,21,4
+ addze 28,28
+ stw 27,0(22)
+ addi 22,22,4
+ bdnz .Linner
+
+ lwz 12,4(22)
+ addc 25,29,26
+ addze 26,30
+ addc 25,25,12
+ addze 26,26
+
+ addc 27,31,28
+ addze 28,0
+ addc 27,27,25
+ addze 28,28
+ stw 27,0(22)
+
+ addic 3,3,-1
+ li 3,0
+ adde 28,28,26
+ addze 3,3
+ stw 28,4(22)
+
+ slwi 12,8,2
+ .long 0x7c146040
+ addi 20,20,4
+ ble .Louter
+
+ addi 8,8,2
+ subfc 21,21,21
+ addi 22,1,32
+ mtctr 8
+
+.align 4
+.Lsub: lwzx 12,22,21
+ lwzx 11,6,21
+ subfe 10,11,12
+ stwx 10,9,21
+ addi 21,21,4
+ bdnz .Lsub
+
+ li 21,0
+ mtctr 8
+ subfe 3,21,3
+
+.align 4
+.Lcopy:
+ lwzx 12,22,21
+ lwzx 10,9,21
+ and 12,12,3
+ andc 10,10,3
+ stwx 21,22,21
+ or 10,10,12
+ stwx 10,9,21
+ addi 21,21,4
+ bdnz .Lcopy
+
+ lwz 12,0(1)
+ li 3,1
+ lwz 20,-48(12)
+ lwz 21,-44(12)
+ lwz 22,-40(12)
+ lwz 23,-36(12)
+ lwz 24,-32(12)
+ lwz 25,-28(12)
+ lwz 26,-24(12)
+ lwz 27,-20(12)
+ lwz 28,-16(12)
+ lwz 29,-12(12)
+ lwz 30,-8(12)
+ lwz 31,-4(12)
+ mr 1,12
+ blr
+.long 0
+.byte 0,12,4,0,0x80,12,6,0
+.long 0
+.size bn_mul_mont_int,.-bn_mul_mont_int
+.globl bn_mul4x_mont_int
+.type bn_mul4x_mont_int,@function
+.align 5
+bn_mul4x_mont_int:
+ andi. 0,8,7
+ bne .Lmul4x_do
+ .long 0x7c042840
+ bne .Lmul4x_do
+ b .Lsqr8x_do
+.Lmul4x_do:
+ slwi 8,8,2
+ mr 9,1
+ li 10,-32*4
+ sub 10,10,8
+ stwux 1,1,10
+
+ stw 14,-4*18(9)
+ stw 15,-4*17(9)
+ stw 16,-4*16(9)
+ stw 17,-4*15(9)
+ stw 18,-4*14(9)
+ stw 19,-4*13(9)
+ stw 20,-4*12(9)
+ stw 21,-4*11(9)
+ stw 22,-4*10(9)
+ stw 23,-4*9(9)
+ stw 24,-4*8(9)
+ stw 25,-4*7(9)
+ stw 26,-4*6(9)
+ stw 27,-4*5(9)
+ stw 28,-4*4(9)
+ stw 29,-4*3(9)
+ stw 30,-4*2(9)
+ stw 31,-4*1(9)
+
+ subi 4,4,4
+ subi 6,6,4
+ subi 3,3,4
+ lwz 7,0(7)
+
+ add 14,5,8
+ add 30,4,8
+ subi 14,14,4*4
+
+ lwz 27,4*0(5)
+ li 22,0
+ lwz 9,4*1(4)
+ li 23,0
+ lwz 10,4*2(4)
+ li 24,0
+ lwz 11,4*3(4)
+ li 25,0
+ lwzu 12,4*4(4)
+ lwz 18,4*1(6)
+ lwz 19,4*2(6)
+ lwz 20,4*3(6)
+ lwzu 21,4*4(6)
+
+ stw 3,4*6(1)
+ stw 14,4*7(1)
+ li 3,0
+ addic 29,1,4*7
+ li 31,0
+ li 0,0
+ b .Loop_mul4x_1st_reduction
+
+.align 5
+.Loop_mul4x_1st_reduction:
+ mullw 14,9,27
+ addze 3,3
+ mullw 15,10,27
+ addi 31,31,4
+ mullw 16,11,27
+ andi. 31,31,4*4-1
+ mullw 17,12,27
+ addc 22,22,14
+ mulhwu 14,9,27
+ adde 23,23,15
+ mulhwu 15,10,27
+ adde 24,24,16
+ mullw 28,22,7
+ adde 25,25,17
+ mulhwu 16,11,27
+ addze 26,0
+ mulhwu 17,12,27
+ lwzx 27,5,31
+ addc 23,23,14
+
+ stwu 28,4(29)
+ adde 24,24,15
+ mullw 15,19,28
+ adde 25,25,16
+ mullw 16,20,28
+ adde 26,26,17
+ mullw 17,21,28
+
+
+
+
+
+
+
+
+
+
+ addic 22,22,-1
+ mulhwu 14,18,28
+ adde 22,23,15
+ mulhwu 15,19,28
+ adde 23,24,16
+ mulhwu 16,20,28
+ adde 24,25,17
+ mulhwu 17,21,28
+ adde 25,26,3
+ addze 3,0
+ addc 22,22,14
+ adde 23,23,15
+ adde 24,24,16
+ adde 25,25,17
+
+ bne .Loop_mul4x_1st_reduction
+
+ .long 0x7c1e2040
+ beq .Lmul4x4_post_condition
+
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ lwz 11,4*3(4)
+ lwzu 12,4*4(4)
+ lwz 28,4*8(1)
+ lwz 18,4*1(6)
+ lwz 19,4*2(6)
+ lwz 20,4*3(6)
+ lwzu 21,4*4(6)
+ b .Loop_mul4x_1st_tail
+
+.align 5
+.Loop_mul4x_1st_tail:
+ mullw 14,9,27
+ addze 3,3
+ mullw 15,10,27
+ addi 31,31,4
+ mullw 16,11,27
+ andi. 31,31,4*4-1
+ mullw 17,12,27
+ addc 22,22,14
+ mulhwu 14,9,27
+ adde 23,23,15
+ mulhwu 15,10,27
+ adde 24,24,16
+ mulhwu 16,11,27
+ adde 25,25,17
+ mulhwu 17,12,27
+ addze 26,0
+ lwzx 27,5,31
+ addc 23,23,14
+ mullw 14,18,28
+ adde 24,24,15
+ mullw 15,19,28
+ adde 25,25,16
+ mullw 16,20,28
+ adde 26,26,17
+ mullw 17,21,28
+ addc 22,22,14
+ mulhwu 14,18,28
+ adde 23,23,15
+ mulhwu 15,19,28
+ adde 24,24,16
+ mulhwu 16,20,28
+ adde 25,25,17
+ adde 26,26,3
+ mulhwu 17,21,28
+ addze 3,0
+ addi 28,1,4*8
+ lwzx 28,28,31
+ stwu 22,4(29)
+ addc 22,23,14
+ adde 23,24,15
+ adde 24,25,16
+ adde 25,26,17
+
+ bne .Loop_mul4x_1st_tail
+
+ sub 15,30,8
+ .long 0x7c1e2040
+ beq .Lmul4x_proceed
+
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ lwz 11,4*3(4)
+ lwzu 12,4*4(4)
+ lwz 18,4*1(6)
+ lwz 19,4*2(6)
+ lwz 20,4*3(6)
+ lwzu 21,4*4(6)
+ b .Loop_mul4x_1st_tail
+
+.align 5
+.Lmul4x_proceed:
+ lwzu 27,4*4(5)
+ addze 3,3
+ lwz 9,4*1(15)
+ lwz 10,4*2(15)
+ lwz 11,4*3(15)
+ lwz 12,4*4(15)
+ addi 4,15,4*4
+ sub 6,6,8
+
+ stw 22,4*1(29)
+ stw 23,4*2(29)
+ stw 24,4*3(29)
+ stw 25,4*4(29)
+ stw 3,4*5(29)
+ lwz 22,4*12(1)
+ lwz 23,4*13(1)
+ lwz 24,4*14(1)
+ lwz 25,4*15(1)
+
+ lwz 18,4*1(6)
+ lwz 19,4*2(6)
+ lwz 20,4*3(6)
+ lwzu 21,4*4(6)
+ addic 29,1,4*7
+ li 3,0
+ b .Loop_mul4x_reduction
+
+.align 5
+.Loop_mul4x_reduction:
+ mullw 14,9,27
+ addze 3,3
+ mullw 15,10,27
+ addi 31,31,4
+ mullw 16,11,27
+ andi. 31,31,4*4-1
+ mullw 17,12,27
+ addc 22,22,14
+ mulhwu 14,9,27
+ adde 23,23,15
+ mulhwu 15,10,27
+ adde 24,24,16
+ mullw 28,22,7
+ adde 25,25,17
+ mulhwu 16,11,27
+ addze 26,0
+ mulhwu 17,12,27
+ lwzx 27,5,31
+ addc 23,23,14
+
+ stwu 28,4(29)
+ adde 24,24,15
+ mullw 15,19,28
+ adde 25,25,16
+ mullw 16,20,28
+ adde 26,26,17
+ mullw 17,21,28
+
+ addic 22,22,-1
+ mulhwu 14,18,28
+ adde 22,23,15
+ mulhwu 15,19,28
+ adde 23,24,16
+ mulhwu 16,20,28
+ adde 24,25,17
+ mulhwu 17,21,28
+ adde 25,26,3
+ addze 3,0
+ addc 22,22,14
+ adde 23,23,15
+ adde 24,24,16
+ adde 25,25,17
+
+ bne .Loop_mul4x_reduction
+
+ lwz 14,4*5(29)
+ addze 3,3
+ lwz 15,4*6(29)
+ lwz 16,4*7(29)
+ lwz 17,4*8(29)
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ lwz 11,4*3(4)
+ lwzu 12,4*4(4)
+ addc 22,22,14
+ adde 23,23,15
+ adde 24,24,16
+ adde 25,25,17
+
+
+ lwz 28,4*8(1)
+ lwz 18,4*1(6)
+ lwz 19,4*2(6)
+ lwz 20,4*3(6)
+ lwzu 21,4*4(6)
+ b .Loop_mul4x_tail
+
+.align 5
+.Loop_mul4x_tail:
+ mullw 14,9,27
+ addze 3,3
+ mullw 15,10,27
+ addi 31,31,4
+ mullw 16,11,27
+ andi. 31,31,4*4-1
+ mullw 17,12,27
+ addc 22,22,14
+ mulhwu 14,9,27
+ adde 23,23,15
+ mulhwu 15,10,27
+ adde 24,24,16
+ mulhwu 16,11,27
+ adde 25,25,17
+ mulhwu 17,12,27
+ addze 26,0
+ lwzx 27,5,31
+ addc 23,23,14
+ mullw 14,18,28
+ adde 24,24,15
+ mullw 15,19,28
+ adde 25,25,16
+ mullw 16,20,28
+ adde 26,26,17
+ mullw 17,21,28
+ addc 22,22,14
+ mulhwu 14,18,28
+ adde 23,23,15
+ mulhwu 15,19,28
+ adde 24,24,16
+ mulhwu 16,20,28
+ adde 25,25,17
+ mulhwu 17,21,28
+ adde 26,26,3
+ addi 28,1,4*8
+ lwzx 28,28,31
+ addze 3,0
+ stwu 22,4(29)
+ addc 22,23,14
+ adde 23,24,15
+ adde 24,25,16
+ adde 25,26,17
+
+ bne .Loop_mul4x_tail
+
+ lwz 14,4*5(29)
+ sub 15,6,8
+ addze 3,3
+ .long 0x7c1e2040
+ beq .Loop_mul4x_break
+
+ lwz 15,4*6(29)
+ lwz 16,4*7(29)
+ lwz 17,4*8(29)
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ lwz 11,4*3(4)
+ lwzu 12,4*4(4)
+ addc 22,22,14
+ adde 23,23,15
+ adde 24,24,16
+ adde 25,25,17
+
+
+ lwz 18,4*1(6)
+ lwz 19,4*2(6)
+ lwz 20,4*3(6)
+ lwzu 21,4*4(6)
+ b .Loop_mul4x_tail
+
+.align 5
+.Loop_mul4x_break:
+ lwz 16,4*6(1)
+ lwz 17,4*7(1)
+ addc 9,22,14
+ lwz 22,4*12(1)
+ addze 10,23
+ lwz 23,4*13(1)
+ addze 11,24
+ lwz 24,4*14(1)
+ addze 12,25
+ lwz 25,4*15(1)
+ addze 3,3
+ stw 9,4*1(29)
+ sub 4,30,8
+ stw 10,4*2(29)
+ stw 11,4*3(29)
+ stw 12,4*4(29)
+ stw 3,4*5(29)
+
+ lwz 18,4*1(15)
+ lwz 19,4*2(15)
+ lwz 20,4*3(15)
+ lwz 21,4*4(15)
+ addi 6,15,4*4
+ .long 0x7c058840
+ beq .Lmul4x_post
+
+ lwzu 27,4*4(5)
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ lwz 11,4*3(4)
+ lwzu 12,4*4(4)
+ li 3,0
+ addic 29,1,4*7
+ b .Loop_mul4x_reduction
+
+.align 5
+.Lmul4x_post:
+
+
+
+
+ srwi 31,8,4
+ mr 5,16
+ subi 31,31,1
+ mr 30,16
+ subfc 14,18,22
+ addi 29,1,4*15
+ subfe 15,19,23
+
+ mtctr 31
+.Lmul4x_sub:
+ lwz 18,4*1(6)
+ lwz 22,4*1(29)
+ subfe 16,20,24
+ lwz 19,4*2(6)
+ lwz 23,4*2(29)
+ subfe 17,21,25
+ lwz 20,4*3(6)
+ lwz 24,4*3(29)
+ lwzu 21,4*4(6)
+ lwzu 25,4*4(29)
+ stw 14,4*1(5)
+ stw 15,4*2(5)
+ subfe 14,18,22
+ stw 16,4*3(5)
+ stwu 17,4*4(5)
+ subfe 15,19,23
+ bdnz .Lmul4x_sub
+
+ lwz 9,4*1(30)
+ stw 14,4*1(5)
+ lwz 14,4*12(1)
+ subfe 16,20,24
+ lwz 10,4*2(30)
+ stw 15,4*2(5)
+ lwz 15,4*13(1)
+ subfe 17,21,25
+ subfe 3,0,3
+ addi 29,1,4*12
+ lwz 11,4*3(30)
+ stw 16,4*3(5)
+ lwz 16,4*14(1)
+ lwz 12,4*4(30)
+ stw 17,4*4(5)
+ lwz 17,4*15(1)
+
+ mtctr 31
+.Lmul4x_cond_copy:
+ and 14,14,3
+ andc 9,9,3
+ stw 0,4*0(29)
+ and 15,15,3
+ andc 10,10,3
+ stw 0,4*1(29)
+ and 16,16,3
+ andc 11,11,3
+ stw 0,4*2(29)
+ and 17,17,3
+ andc 12,12,3
+ stw 0,4*3(29)
+ or 22,14,9
+ lwz 9,4*5(30)
+ lwz 14,4*4(29)
+ or 23,15,10
+ lwz 10,4*6(30)
+ lwz 15,4*5(29)
+ or 24,16,11
+ lwz 11,4*7(30)
+ lwz 16,4*6(29)
+ or 25,17,12
+ lwz 12,4*8(30)
+ lwz 17,4*7(29)
+ addi 29,29,4*4
+ stw 22,4*1(30)
+ stw 23,4*2(30)
+ stw 24,4*3(30)
+ stwu 25,4*4(30)
+ bdnz .Lmul4x_cond_copy
+
+ lwz 5,0(1)
+ and 14,14,3
+ andc 9,9,3
+ stw 0,4*0(29)
+ and 15,15,3
+ andc 10,10,3
+ stw 0,4*1(29)
+ and 16,16,3
+ andc 11,11,3
+ stw 0,4*2(29)
+ and 17,17,3
+ andc 12,12,3
+ stw 0,4*3(29)
+ or 22,14,9
+ or 23,15,10
+ stw 0,4*4(29)
+ or 24,16,11
+ or 25,17,12
+ stw 22,4*1(30)
+ stw 23,4*2(30)
+ stw 24,4*3(30)
+ stw 25,4*4(30)
+
+ b .Lmul4x_done
+
+.align 4
+.Lmul4x4_post_condition:
+ lwz 4,4*6(1)
+ lwz 5,0(1)
+ addze 3,3
+
+ subfc 9,18,22
+ subfe 10,19,23
+ subfe 11,20,24
+ subfe 12,21,25
+ subfe 3,0,3
+
+ and 18,18,3
+ and 19,19,3
+ addc 9,9,18
+ and 20,20,3
+ adde 10,10,19
+ and 21,21,3
+ adde 11,11,20
+ adde 12,12,21
+
+ stw 9,4*1(4)
+ stw 10,4*2(4)
+ stw 11,4*3(4)
+ stw 12,4*4(4)
+
+.Lmul4x_done:
+ stw 0,4*8(1)
+ stw 0,4*9(1)
+ stw 0,4*10(1)
+ stw 0,4*11(1)
+ li 3,1
+ lwz 14,-4*18(5)
+ lwz 15,-4*17(5)
+ lwz 16,-4*16(5)
+ lwz 17,-4*15(5)
+ lwz 18,-4*14(5)
+ lwz 19,-4*13(5)
+ lwz 20,-4*12(5)
+ lwz 21,-4*11(5)
+ lwz 22,-4*10(5)
+ lwz 23,-4*9(5)
+ lwz 24,-4*8(5)
+ lwz 25,-4*7(5)
+ lwz 26,-4*6(5)
+ lwz 27,-4*5(5)
+ lwz 28,-4*4(5)
+ lwz 29,-4*3(5)
+ lwz 30,-4*2(5)
+ lwz 31,-4*1(5)
+ mr 1,5
+ blr
+.long 0
+.byte 0,12,4,0x20,0x80,18,6,0
+.long 0
+.size bn_mul4x_mont_int,.-bn_mul4x_mont_int
+.align 5
+__bn_sqr8x_mont:
+.Lsqr8x_do:
+ mr 9,1
+ slwi 10,8,3
+ li 11,-32*4
+ sub 10,11,10
+ slwi 8,8,2
+ stwux 1,1,10
+
+ stw 14,-4*18(9)
+ stw 15,-4*17(9)
+ stw 16,-4*16(9)
+ stw 17,-4*15(9)
+ stw 18,-4*14(9)
+ stw 19,-4*13(9)
+ stw 20,-4*12(9)
+ stw 21,-4*11(9)
+ stw 22,-4*10(9)
+ stw 23,-4*9(9)
+ stw 24,-4*8(9)
+ stw 25,-4*7(9)
+ stw 26,-4*6(9)
+ stw 27,-4*5(9)
+ stw 28,-4*4(9)
+ stw 29,-4*3(9)
+ stw 30,-4*2(9)
+ stw 31,-4*1(9)
+
+ subi 4,4,4
+ subi 18,6,4
+ subi 3,3,4
+ lwz 7,0(7)
+ li 0,0
+
+ add 6,4,8
+ lwz 9,4*1(4)
+
+ lwz 10,4*2(4)
+ li 23,0
+ lwz 11,4*3(4)
+ li 24,0
+ lwz 12,4*4(4)
+ li 25,0
+ lwz 14,4*5(4)
+ li 26,0
+ lwz 15,4*6(4)
+ li 27,0
+ lwz 16,4*7(4)
+ li 28,0
+ lwzu 17,4*8(4)
+ li 29,0
+
+ addi 5,1,4*11
+ subic. 30,8,4*8
+ b .Lsqr8x_zero_start
+
+.align 5
+.Lsqr8x_zero:
+ subic. 30,30,4*8
+ stw 0,4*1(5)
+ stw 0,4*2(5)
+ stw 0,4*3(5)
+ stw 0,4*4(5)
+ stw 0,4*5(5)
+ stw 0,4*6(5)
+ stw 0,4*7(5)
+ stw 0,4*8(5)
+.Lsqr8x_zero_start:
+ stw 0,4*9(5)
+ stw 0,4*10(5)
+ stw 0,4*11(5)
+ stw 0,4*12(5)
+ stw 0,4*13(5)
+ stw 0,4*14(5)
+ stw 0,4*15(5)
+ stwu 0,4*16(5)
+ bne .Lsqr8x_zero
+
+ stw 3,4*6(1)
+ stw 18,4*7(1)
+ stw 7,4*8(1)
+ stw 5,4*9(1)
+ stw 0,4*10(1)
+ addi 5,1,4*11
+
+
+.align 5
+.Lsqr8x_outer_loop:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mullw 18,10,9
+ mullw 19,11,9
+ mullw 20,12,9
+ mullw 21,14,9
+ addc 23,23,18
+ mullw 18,15,9
+ adde 24,24,19
+ mullw 19,16,9
+ adde 25,25,20
+ mullw 20,17,9
+ adde 26,26,21
+ mulhwu 21,10,9
+ adde 27,27,18
+ mulhwu 18,11,9
+ adde 28,28,19
+ mulhwu 19,12,9
+ adde 29,29,20
+ mulhwu 20,14,9
+ stw 22,4*1(5)
+ addze 22,0
+ stw 23,4*2(5)
+ addc 24,24,21
+ mulhwu 21,15,9
+ adde 25,25,18
+ mulhwu 18,16,9
+ adde 26,26,19
+ mulhwu 19,17,9
+ adde 27,27,20
+ mullw 20,11,10
+ adde 28,28,21
+ mullw 21,12,10
+ adde 29,29,18
+ mullw 18,14,10
+ adde 22,22,19
+
+ mullw 19,15,10
+ addc 25,25,20
+ mullw 20,16,10
+ adde 26,26,21
+ mullw 21,17,10
+ adde 27,27,18
+ mulhwu 18,11,10
+ adde 28,28,19
+ mulhwu 19,12,10
+ adde 29,29,20
+ mulhwu 20,14,10
+ adde 22,22,21
+ mulhwu 21,15,10
+ stw 24,4*3(5)
+ addze 23,0
+ stw 25,4*4(5)
+ addc 26,26,18
+ mulhwu 18,16,10
+ adde 27,27,19
+ mulhwu 19,17,10
+ adde 28,28,20
+ mullw 20,12,11
+ adde 29,29,21
+ mullw 21,14,11
+ adde 22,22,18
+ mullw 18,15,11
+ adde 23,23,19
+
+ mullw 19,16,11
+ addc 27,27,20
+ mullw 20,17,11
+ adde 28,28,21
+ mulhwu 21,12,11
+ adde 29,29,18
+ mulhwu 18,14,11
+ adde 22,22,19
+ mulhwu 19,15,11
+ adde 23,23,20
+ mulhwu 20,16,11
+ stw 26,4*5(5)
+ addze 24,0
+ stw 27,4*6(5)
+ addc 28,28,21
+ mulhwu 21,17,11
+ adde 29,29,18
+ mullw 18,14,12
+ adde 22,22,19
+ mullw 19,15,12
+ adde 23,23,20
+ mullw 20,16,12
+ adde 24,24,21
+
+ mullw 21,17,12
+ addc 29,29,18
+ mulhwu 18,14,12
+ adde 22,22,19
+ mulhwu 19,15,12
+ adde 23,23,20
+ mulhwu 20,16,12
+ adde 24,24,21
+ mulhwu 21,17,12
+ stw 28,4*7(5)
+ addze 25,0
+ stwu 29,4*8(5)
+ addc 22,22,18
+ mullw 18,15,14
+ adde 23,23,19
+ mullw 19,16,14
+ adde 24,24,20
+ mullw 20,17,14
+ adde 25,25,21
+
+ mulhwu 21,15,14
+ addc 23,23,18
+ mulhwu 18,16,14
+ adde 24,24,19
+ mulhwu 19,17,14
+ adde 25,25,20
+ mullw 20,16,15
+ addze 26,0
+ addc 24,24,21
+ mullw 21,17,15
+ adde 25,25,18
+ mulhwu 18,16,15
+ adde 26,26,19
+
+ mulhwu 19,17,15
+ addc 25,25,20
+ mullw 20,17,16
+ adde 26,26,21
+ mulhwu 21,17,16
+ addze 27,0
+ addc 26,26,18
+ .long 0x7c062040
+ adde 27,27,19
+
+ addc 27,27,20
+ sub 18,6,8
+ addze 28,0
+ add 28,28,21
+
+ beq .Lsqr8x_outer_break
+
+ mr 7,9
+ lwz 9,4*1(5)
+ lwz 10,4*2(5)
+ lwz 11,4*3(5)
+ lwz 12,4*4(5)
+ lwz 14,4*5(5)
+ lwz 15,4*6(5)
+ lwz 16,4*7(5)
+ lwz 17,4*8(5)
+ addc 22,22,9
+ lwz 9,4*1(4)
+ adde 23,23,10
+ lwz 10,4*2(4)
+ adde 24,24,11
+ lwz 11,4*3(4)
+ adde 25,25,12
+ lwz 12,4*4(4)
+ adde 26,26,14
+ lwz 14,4*5(4)
+ adde 27,27,15
+ lwz 15,4*6(4)
+ adde 28,28,16
+ lwz 16,4*7(4)
+ subi 3,4,4*7
+ addze 29,17
+ lwzu 17,4*8(4)
+
+ li 30,0
+ b .Lsqr8x_mul
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.align 5
+.Lsqr8x_mul:
+ mullw 18,9,7
+ addze 31,0
+ mullw 19,10,7
+ addi 30,30,4
+ mullw 20,11,7
+ andi. 30,30,4*8-1
+ mullw 21,12,7
+ addc 22,22,18
+ mullw 18,14,7
+ adde 23,23,19
+ mullw 19,15,7
+ adde 24,24,20
+ mullw 20,16,7
+ adde 25,25,21
+ mullw 21,17,7
+ adde 26,26,18
+ mulhwu 18,9,7
+ adde 27,27,19
+ mulhwu 19,10,7
+ adde 28,28,20
+ mulhwu 20,11,7
+ adde 29,29,21
+ mulhwu 21,12,7
+ addze 31,31
+ stwu 22,4(5)
+ addc 22,23,18
+ mulhwu 18,14,7
+ adde 23,24,19
+ mulhwu 19,15,7
+ adde 24,25,20
+ mulhwu 20,16,7
+ adde 25,26,21
+ mulhwu 21,17,7
+ lwzx 7,3,30
+ adde 26,27,18
+ adde 27,28,19
+ adde 28,29,20
+ adde 29,31,21
+
+ bne .Lsqr8x_mul
+
+
+ .long 0x7c043040
+ beq .Lsqr8x_break
+
+ lwz 9,4*1(5)
+ lwz 10,4*2(5)
+ lwz 11,4*3(5)
+ lwz 12,4*4(5)
+ lwz 14,4*5(5)
+ lwz 15,4*6(5)
+ lwz 16,4*7(5)
+ lwz 17,4*8(5)
+ addc 22,22,9
+ lwz 9,4*1(4)
+ adde 23,23,10
+ lwz 10,4*2(4)
+ adde 24,24,11
+ lwz 11,4*3(4)
+ adde 25,25,12
+ lwz 12,4*4(4)
+ adde 26,26,14
+ lwz 14,4*5(4)
+ adde 27,27,15
+ lwz 15,4*6(4)
+ adde 28,28,16
+ lwz 16,4*7(4)
+ adde 29,29,17
+ lwzu 17,4*8(4)
+
+ b .Lsqr8x_mul
+
+.align 5
+.Lsqr8x_break:
+ lwz 9,4*8(3)
+ addi 4,3,4*15
+ lwz 10,4*9(3)
+ sub. 18,6,4
+ lwz 11,4*10(3)
+ sub 19,5,18
+ lwz 12,4*11(3)
+ lwz 14,4*12(3)
+ lwz 15,4*13(3)
+ lwz 16,4*14(3)
+ lwz 17,4*15(3)
+ beq .Lsqr8x_outer_loop
+
+ stw 22,4*1(5)
+ lwz 22,4*1(19)
+ stw 23,4*2(5)
+ lwz 23,4*2(19)
+ stw 24,4*3(5)
+ lwz 24,4*3(19)
+ stw 25,4*4(5)
+ lwz 25,4*4(19)
+ stw 26,4*5(5)
+ lwz 26,4*5(19)
+ stw 27,4*6(5)
+ lwz 27,4*6(19)
+ stw 28,4*7(5)
+ lwz 28,4*7(19)
+ stw 29,4*8(5)
+ lwz 29,4*8(19)
+ mr 5,19
+ b .Lsqr8x_outer_loop
+
+.align 5
+.Lsqr8x_outer_break:
+
+
+ lwz 10,4*1(18)
+ lwz 12,4*2(18)
+ lwz 15,4*3(18)
+ lwz 17,4*4(18)
+ addi 4,18,4*4
+
+ lwz 19,4*13(1)
+ lwz 20,4*14(1)
+ lwz 21,4*15(1)
+ lwz 18,4*16(1)
+
+ stw 22,4*1(5)
+ srwi 30,8,4
+ stw 23,4*2(5)
+ subi 30,30,1
+ stw 24,4*3(5)
+ stw 25,4*4(5)
+ stw 26,4*5(5)
+ stw 27,4*6(5)
+ stw 28,4*7(5)
+
+ addi 5,1,4*11
+ mullw 22,10,10
+ mulhwu 10,10,10
+ add 23,19,19
+ srwi 19,19,32-1
+ mullw 11,12,12
+ mulhwu 12,12,12
+ addc 23,23,10
+ add 24,20,20
+ srwi 20,20,32-1
+ add 25,21,21
+ srwi 21,21,32-1
+ or 24,24,19
+
+ mtctr 30
+.Lsqr4x_shift_n_add:
+ mullw 14,15,15
+ mulhwu 15,15,15
+ lwz 19,4*6(5)
+ lwz 10,4*1(4)
+ adde 24,24,11
+ add 26,18,18
+ srwi 18,18,32-1
+ or 25,25,20
+ lwz 20,4*7(5)
+ adde 25,25,12
+ lwz 12,4*2(4)
+ add 27,19,19
+ srwi 19,19,32-1
+ or 26,26,21
+ lwz 21,4*8(5)
+ mullw 16,17,17
+ mulhwu 17,17,17
+ adde 26,26,14
+ add 28,20,20
+ srwi 20,20,32-1
+ or 27,27,18
+ lwz 18,4*9(5)
+ adde 27,27,15
+ lwz 15,4*3(4)
+ add 29,21,21
+ srwi 21,21,32-1
+ or 28,28,19
+ lwz 19,4*10(5)
+ mullw 9,10,10
+ mulhwu 10,10,10
+ adde 28,28,16
+ stw 22,4*1(5)
+ add 22,18,18
+ srwi 18,18,32-1
+ or 29,29,20
+ lwz 20,4*11(5)
+ adde 29,29,17
+ lwzu 17,4*4(4)
+ stw 23,4*2(5)
+ add 23,19,19
+ srwi 19,19,32-1
+ or 22,22,21
+ lwz 21,4*12(5)
+ mullw 11,12,12
+ mulhwu 12,12,12
+ adde 22,22,9
+ stw 24,4*3(5)
+ add 24,20,20
+ srwi 20,20,32-1
+ or 23,23,18
+ lwz 18,4*13(5)
+ adde 23,23,10
+ stw 25,4*4(5)
+ stw 26,4*5(5)
+ stw 27,4*6(5)
+ stw 28,4*7(5)
+ stwu 29,4*8(5)
+ add 25,21,21
+ srwi 21,21,32-1
+ or 24,24,19
+ bdnz .Lsqr4x_shift_n_add
+ lwz 4,4*7(1)
+ lwz 7,4*8(1)
+
+ mullw 14,15,15
+ mulhwu 15,15,15
+ stw 22,4*1(5)
+ lwz 22,4*12(1)
+ lwz 19,4*6(5)
+ adde 24,24,11
+ add 26,18,18
+ srwi 18,18,32-1
+ or 25,25,20
+ lwz 20,4*7(5)
+ adde 25,25,12
+ add 27,19,19
+ srwi 19,19,32-1
+ or 26,26,21
+ mullw 16,17,17
+ mulhwu 17,17,17
+ adde 26,26,14
+ add 28,20,20
+ srwi 20,20,32-1
+ or 27,27,18
+ stw 23,4*2(5)
+ lwz 23,4*13(1)
+ adde 27,27,15
+ or 28,28,19
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ adde 28,28,16
+ lwz 11,4*3(4)
+ lwz 12,4*4(4)
+ adde 29,17,20
+ lwz 14,4*5(4)
+ lwz 15,4*6(4)
+
+
+
+ mullw 31,7,22
+ li 30,8
+ lwz 16,4*7(4)
+ add 6,4,8
+ lwzu 17,4*8(4)
+ stw 24,4*3(5)
+ lwz 24,4*14(1)
+ stw 25,4*4(5)
+ lwz 25,4*15(1)
+ stw 26,4*5(5)
+ lwz 26,4*16(1)
+ stw 27,4*6(5)
+ lwz 27,4*17(1)
+ stw 28,4*7(5)
+ lwz 28,4*18(1)
+ stw 29,4*8(5)
+ lwz 29,4*19(1)
+ addi 5,1,4*11
+ mtctr 30
+ b .Lsqr8x_reduction
+
+.align 5
+.Lsqr8x_reduction:
+
+ mullw 19,10,31
+ mullw 20,11,31
+ stwu 31,4(5)
+ mullw 21,12,31
+
+ addic 22,22,-1
+ mullw 18,14,31
+ adde 22,23,19
+ mullw 19,15,31
+ adde 23,24,20
+ mullw 20,16,31
+ adde 24,25,21
+ mullw 21,17,31
+ adde 25,26,18
+ mulhwu 18,9,31
+ adde 26,27,19
+ mulhwu 19,10,31
+ adde 27,28,20
+ mulhwu 20,11,31
+ adde 28,29,21
+ mulhwu 21,12,31
+ addze 29,0
+ addc 22,22,18
+ mulhwu 18,14,31
+ adde 23,23,19
+ mulhwu 19,15,31
+ adde 24,24,20
+ mulhwu 20,16,31
+ adde 25,25,21
+ mulhwu 21,17,31
+ mullw 31,7,22
+ adde 26,26,18
+ adde 27,27,19
+ adde 28,28,20
+ adde 29,29,21
+ bdnz .Lsqr8x_reduction
+
+ lwz 18,4*1(5)
+ lwz 19,4*2(5)
+ lwz 20,4*3(5)
+ lwz 21,4*4(5)
+ subi 3,5,4*7
+ .long 0x7c062040
+ addc 22,22,18
+ lwz 18,4*5(5)
+ adde 23,23,19
+ lwz 19,4*6(5)
+ adde 24,24,20
+ lwz 20,4*7(5)
+ adde 25,25,21
+ lwz 21,4*8(5)
+ adde 26,26,18
+ adde 27,27,19
+ adde 28,28,20
+ adde 29,29,21
+
+ beq .Lsqr8x8_post_condition
+
+ lwz 7,4*0(3)
+ lwz 9,4*1(4)
+ lwz 10,4*2(4)
+ lwz 11,4*3(4)
+ lwz 12,4*4(4)
+ lwz 14,4*5(4)
+ lwz 15,4*6(4)
+ lwz 16,4*7(4)
+ lwzu 17,4*8(4)
+ li 30,0
+
+.align 5
+.Lsqr8x_tail:
+ mullw 18,9,7
+ addze 31,0
+ mullw 19,10,7
+ addi 30,30,4
+ mullw 20,11,7
+ andi. 30,30,4*8-1
+ mullw 21,12,7
+ addc 22,22,18
+ mullw 18,14,7
+ adde 23,23,19
+ mullw 19,15,7
+ adde 24,24,20
+ mullw 20,16,7
+ adde 25,25,21
+ mullw 21,17,7
+ adde 26,26,18
+ mulhwu 18,9,7
+ adde 27,27,19
+ mulhwu 19,10,7
+ adde 28,28,20
+ mulhwu 20,11,7
+ adde 29,29,21
+ mulhwu 21,12,7
+ addze 31,31
+ stwu 22,4(5)
+ addc 22,23,18
+ mulhwu 18,14,7
+ adde 23,24,19
+ mulhwu 19,15,7
+ adde 24,25,20
+ mulhwu 20,16,7
+ adde 25,26,21
+ mulhwu 21,17,7
+ lwzx 7,3,30
+ adde 26,27,18
+ adde 27,28,19
+ adde 28,29,20
+ adde 29,31,21
+
+ bne .Lsqr8x_tail
+
+
+ lwz 9,4*1(5)
+ lwz 31,4*10(1)
+ .long 0x7c062040
+ lwz 10,4*2(5)
+ sub 20,6,8
+ lwz 11,4*3(5)
+ lwz 12,4*4(5)
+ lwz 14,4*5(5)
+ lwz 15,4*6(5)
+ lwz 16,4*7(5)
+ lwz 17,4*8(5)
+ beq .Lsqr8x_tail_break
+
+ addc 22,22,9
+ lwz 9,4*1(4)
+ adde 23,23,10
+ lwz 10,4*2(4)
+ adde 24,24,11
+ lwz 11,4*3(4)
+ adde 25,25,12
+ lwz 12,4*4(4)
+ adde 26,26,14
+ lwz 14,4*5(4)
+ adde 27,27,15
+ lwz 15,4*6(4)
+ adde 28,28,16
+ lwz 16,4*7(4)
+ adde 29,29,17
+ lwzu 17,4*8(4)
+
+ b .Lsqr8x_tail
+
+.align 5
+.Lsqr8x_tail_break:
+ lwz 7,4*8(1)
+ lwz 21,4*9(1)
+ addi 30,5,4*8
+
+ addic 31,31,-1
+ adde 18,22,9
+ lwz 22,4*8(3)
+ lwz 9,4*1(20)
+ adde 19,23,10
+ lwz 23,4*9(3)
+ lwz 10,4*2(20)
+ adde 24,24,11
+ lwz 11,4*3(20)
+ adde 25,25,12
+ lwz 12,4*4(20)
+ adde 26,26,14
+ lwz 14,4*5(20)
+ adde 27,27,15
+ lwz 15,4*6(20)
+ adde 28,28,16
+ lwz 16,4*7(20)
+ adde 29,29,17
+ lwz 17,4*8(20)
+ addi 4,20,4*8
+ addze 20,0
+ mullw 31,7,22
+ stw 18,4*1(5)
+ .long 0x7c1ea840
+ stw 19,4*2(5)
+ li 30,8
+ stw 24,4*3(5)
+ lwz 24,4*10(3)
+ stw 25,4*4(5)
+ lwz 25,4*11(3)
+ stw 26,4*5(5)
+ lwz 26,4*12(3)
+ stw 27,4*6(5)
+ lwz 27,4*13(3)
+ stw 28,4*7(5)
+ lwz 28,4*14(3)
+ stw 29,4*8(5)
+ lwz 29,4*15(3)
+ stw 20,4*10(1)
+ addi 5,3,4*7
+ mtctr 30
+ bne .Lsqr8x_reduction
+
+
+
+
+
+
+ lwz 3,4*6(1)
+ srwi 30,8,5
+ mr 7,5
+ addi 5,5,4*8
+ subi 30,30,1
+ subfc 18,9,22
+ subfe 19,10,23
+ mr 31,20
+ mr 6,3
+
+ mtctr 30
+ b .Lsqr8x_sub
+
+.align 5
+.Lsqr8x_sub:
+ lwz 9,4*1(4)
+ lwz 22,4*1(5)
+ lwz 10,4*2(4)
+ lwz 23,4*2(5)
+ subfe 20,11,24
+ lwz 11,4*3(4)
+ lwz 24,4*3(5)
+ subfe 21,12,25
+ lwz 12,4*4(4)
+ lwz 25,4*4(5)
+ stw 18,4*1(3)
+ subfe 18,14,26
+ lwz 14,4*5(4)
+ lwz 26,4*5(5)
+ stw 19,4*2(3)
+ subfe 19,15,27
+ lwz 15,4*6(4)
+ lwz 27,4*6(5)
+ stw 20,4*3(3)
+ subfe 20,16,28
+ lwz 16,4*7(4)
+ lwz 28,4*7(5)
+ stw 21,4*4(3)
+ subfe 21,17,29
+ lwzu 17,4*8(4)
+ lwzu 29,4*8(5)
+ stw 18,4*5(3)
+ subfe 18,9,22
+ stw 19,4*6(3)
+ subfe 19,10,23
+ stw 20,4*7(3)
+ stwu 21,4*8(3)
+ bdnz .Lsqr8x_sub
+
+ srwi 30,8,4
+ lwz 9,4*1(6)
+ lwz 22,4*1(7)
+ subi 30,30,1
+ lwz 10,4*2(6)
+ lwz 23,4*2(7)
+ subfe 20,11,24
+ lwz 11,4*3(6)
+ lwz 24,4*3(7)
+ subfe 21,12,25
+ lwz 12,4*4(6)
+ lwzu 25,4*4(7)
+ stw 18,4*1(3)
+ subfe 18,14,26
+ stw 19,4*2(3)
+ subfe 19,15,27
+ stw 20,4*3(3)
+ subfe 20,16,28
+ stw 21,4*4(3)
+ subfe 21,17,29
+ stw 18,4*5(3)
+ subfe 31,0,31
+ stw 19,4*6(3)
+ stw 20,4*7(3)
+ stw 21,4*8(3)
+
+ addi 5,1,4*11
+ mtctr 30
+
+.Lsqr4x_cond_copy:
+ andc 9,9,31
+ stw 0,-4*3(7)
+ and 22,22,31
+ stw 0,-4*2(7)
+ andc 10,10,31
+ stw 0,-4*1(7)
+ and 23,23,31
+ stw 0,-4*0(7)
+ andc 11,11,31
+ stw 0,4*1(5)
+ and 24,24,31
+ stw 0,4*2(5)
+ andc 12,12,31
+ stw 0,4*3(5)
+ and 25,25,31
+ stwu 0,4*4(5)
+ or 18,9,22
+ lwz 9,4*5(6)
+ lwz 22,4*1(7)
+ or 19,10,23
+ lwz 10,4*6(6)
+ lwz 23,4*2(7)
+ or 20,11,24
+ lwz 11,4*7(6)
+ lwz 24,4*3(7)
+ or 21,12,25
+ lwz 12,4*8(6)
+ lwzu 25,4*4(7)
+ stw 18,4*1(6)
+ stw 19,4*2(6)
+ stw 20,4*3(6)
+ stwu 21,4*4(6)
+ bdnz .Lsqr4x_cond_copy
+
+ lwz 4,0(1)
+ andc 9,9,31
+ and 22,22,31
+ andc 10,10,31
+ and 23,23,31
+ andc 11,11,31
+ and 24,24,31
+ andc 12,12,31
+ and 25,25,31
+ or 18,9,22
+ or 19,10,23
+ or 20,11,24
+ or 21,12,25
+ stw 18,4*1(6)
+ stw 19,4*2(6)
+ stw 20,4*3(6)
+ stw 21,4*4(6)
+
+ b .Lsqr8x_done
+
+.align 5
+.Lsqr8x8_post_condition:
+ lwz 3,4*6(1)
+ lwz 4,0(1)
+ addze 31,0
+
+
+ subfc 22,9,22
+ subfe 23,10,23
+ stw 0,4*12(1)
+ stw 0,4*13(1)
+ subfe 24,11,24
+ stw 0,4*14(1)
+ stw 0,4*15(1)
+ subfe 25,12,25
+ stw 0,4*16(1)
+ stw 0,4*17(1)
+ subfe 26,14,26
+ stw 0,4*18(1)
+ stw 0,4*19(1)
+ subfe 27,15,27
+ stw 0,4*20(1)
+ stw 0,4*21(1)
+ subfe 28,16,28
+ stw 0,4*22(1)
+ stw 0,4*23(1)
+ subfe 29,17,29
+ stw 0,4*24(1)
+ stw 0,4*25(1)
+ subfe 31,0,31
+ stw 0,4*26(1)
+ stw 0,4*27(1)
+
+ and 9,9,31
+ and 10,10,31
+ addc 22,22,9
+ and 11,11,31
+ adde 23,23,10
+ and 12,12,31
+ adde 24,24,11
+ and 14,14,31
+ adde 25,25,12
+ and 15,15,31
+ adde 26,26,14
+ and 16,16,31
+ adde 27,27,15
+ and 17,17,31
+ adde 28,28,16
+ adde 29,29,17
+ stw 22,4*1(3)
+ stw 23,4*2(3)
+ stw 24,4*3(3)
+ stw 25,4*4(3)
+ stw 26,4*5(3)
+ stw 27,4*6(3)
+ stw 28,4*7(3)
+ stw 29,4*8(3)
+
+.Lsqr8x_done:
+ stw 0,4*8(1)
+ stw 0,4*10(1)
+
+ lwz 14,-4*18(4)
+ li 3,1
+ lwz 15,-4*17(4)
+ lwz 16,-4*16(4)
+ lwz 17,-4*15(4)
+ lwz 18,-4*14(4)
+ lwz 19,-4*13(4)
+ lwz 20,-4*12(4)
+ lwz 21,-4*11(4)
+ lwz 22,-4*10(4)
+ lwz 23,-4*9(4)
+ lwz 24,-4*8(4)
+ lwz 25,-4*7(4)
+ lwz 26,-4*6(4)
+ lwz 27,-4*5(4)
+ lwz 28,-4*4(4)
+ lwz 29,-4*3(4)
+ lwz 30,-4*2(4)
+ lwz 31,-4*1(4)
+ mr 1,4
+ blr
+.long 0
+.byte 0,12,4,0x20,0x80,18,6,0
+.long 0
+.size __bn_sqr8x_mont,.-__bn_sqr8x_mont
+.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,80,80,67,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
diff --git a/sys/crypto/openssl/powerpc/ppc.S b/sys/crypto/openssl/powerpc/ppc.S
new file mode 100644
index 000000000000..23c1c684ef4a
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/ppc.S
@@ -0,0 +1,1856 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from ppc.pl. */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.globl bn_sqr_comba4
+.type bn_sqr_comba4,@function
+.globl bn_sqr_comba8
+.type bn_sqr_comba8,@function
+.globl bn_mul_comba4
+.type bn_mul_comba4,@function
+.globl bn_mul_comba8
+.type bn_mul_comba8,@function
+.globl bn_sub_words
+.type bn_sub_words,@function
+.globl bn_add_words
+.type bn_add_words,@function
+.globl bn_div_words
+.type bn_div_words,@function
+.globl bn_sqr_words
+.type bn_sqr_words,@function
+.globl bn_mul_words
+.type bn_mul_words,@function
+.globl bn_mul_add_words
+.type bn_mul_add_words,@function
+
+
+
+.machine "any"
+.text
+
+
+
+
+
+
+
+
+.align 4
+bn_sqr_comba4:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+
+
+
+ lwz 5,0(4)
+ mullw 9,5,5
+ mulhwu 10,5,5
+
+
+
+
+ stw 9,0(3)
+
+ lwz 6,4(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 7,7,7
+ adde 8,8,8
+ addze 9,0
+
+
+ addc 10,7,10
+ addze 11,8
+ addze 9,9
+
+ stw 10,4(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,0
+
+ lwz 6,8(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 7,7,7
+ adde 8,8,8
+ addze 10,10
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ stw 11,8(3)
+
+ lwz 6,12(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 7,7,7
+ adde 8,8,8
+ addze 11,0
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ lwz 5,4(4)
+ lwz 6,8(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 7,7,7
+ adde 8,8,8
+ addze 11,11
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ stw 9,12(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,0
+
+ lwz 6,12(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 7,7,7
+ adde 8,8,8
+ addze 9,9
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ stw 10,16(3)
+
+ lwz 5,8(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 7,7,7
+ adde 8,8,8
+ addze 10,0
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ stw 11,20(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 9,7,9
+ adde 10,8,10
+
+ stw 9,24(3)
+ stw 10,28(3)
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size bn_sqr_comba4,.-bn_sqr_comba4
+
+
+
+
+
+
+
+
+.align 4
+bn_sqr_comba8:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+
+
+
+ lwz 5,0(4)
+ mullw 9,5,5
+ mulhwu 10,5,5
+ stw 9,0(3)
+
+ lwz 6,4(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 10,7,10
+ adde 11,8,0
+ addze 9,0
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ stw 10,4(3)
+
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,0
+
+ lwz 6,8(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ stw 11,8(3)
+
+ lwz 6,12(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,0
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ lwz 5,4(4)
+ lwz 6,8(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ stw 9,12(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,0
+
+ lwz 6,12(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ lwz 5,0(4)
+ lwz 6,16(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ stw 10,16(3)
+
+ lwz 6,20(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,0
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ lwz 5,4(4)
+ lwz 6,16(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ lwz 5,8(4)
+ lwz 6,12(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ stw 11,20(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,0
+
+ lwz 6,16(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ lwz 5,4(4)
+ lwz 6,20(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ lwz 5,0(4)
+ lwz 6,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ stw 9,24(3)
+
+ lwz 6,28(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,0
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ lwz 5,4(4)
+ lwz 6,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ lwz 5,8(4)
+ lwz 6,20(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ lwz 5,12(4)
+ lwz 6,16(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ stw 10,28(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,0
+
+ lwz 6,20(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ lwz 5,8(4)
+ lwz 6,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ lwz 5,4(4)
+ lwz 6,28(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ stw 11,32(3)
+
+ lwz 5,8(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,0
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ lwz 5,12(4)
+ lwz 6,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+
+ lwz 5,16(4)
+ lwz 6,20(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ stw 9,36(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,0
+
+ lwz 6,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+
+ lwz 5,12(4)
+ lwz 6,28(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ stw 10,40(3)
+
+ lwz 5,16(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,0
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+
+ lwz 5,20(4)
+ lwz 6,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ addc 11,7,11
+ adde 9,8,9
+ addze 10,10
+ stw 11,44(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,0
+
+ lwz 6,28(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ addc 9,7,9
+ adde 10,8,10
+ addze 11,11
+ stw 9,48(3)
+
+
+ lwz 5,24(4)
+ mullw 7,5,6
+ mulhwu 8,5,6
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,0
+ addc 10,7,10
+ adde 11,8,11
+ addze 9,9
+ stw 10,52(3)
+
+ mullw 7,6,6
+ mulhwu 8,6,6
+ addc 11,7,11
+ adde 9,8,9
+ stw 11,56(3)
+ stw 9, 60(3)
+
+
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size bn_sqr_comba8,.-bn_sqr_comba8
+
+
+
+
+
+
+
+
+.align 4
+bn_mul_comba4:
+
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+
+ lwz 6,0(4)
+ lwz 7,0(5)
+ mullw 10,6,7
+ mulhwu 11,6,7
+ stw 10,0(3)
+
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,8,11
+ adde 12,9,0
+ addze 10,0
+
+ lwz 6, 4(4)
+ lwz 7, 0(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,8,11
+ adde 12,9,12
+ addze 10,10
+ stw 11,4(3)
+
+ lwz 6,8(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,8,12
+ adde 10,9,10
+ addze 11,0
+
+ lwz 6,4(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,8,12
+ adde 10,9,10
+ addze 11,11
+
+ lwz 6,0(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,8,12
+ adde 10,9,10
+ addze 11,11
+ stw 12,8(3)
+
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,8,10
+ adde 11,9,11
+ addze 12,0
+
+ lwz 6,4(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,8,10
+ adde 11,9,11
+ addze 12,12
+
+ lwz 6,8(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,8,10
+ adde 11,9,11
+ addze 12,12
+
+ lwz 6,12(4)
+ lwz 7,0(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,8,10
+ adde 11,9,11
+ addze 12,12
+ stw 10,12(3)
+
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,8,11
+ adde 12,9,12
+ addze 10,0
+
+ lwz 6,8(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,8,11
+ adde 12,9,12
+ addze 10,10
+
+ lwz 6,4(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,8,11
+ adde 12,9,12
+ addze 10,10
+ stw 11,16(3)
+
+ lwz 6,8(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,8,12
+ adde 10,9,10
+ addze 11,0
+
+ lwz 6,12(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,8,12
+ adde 10,9,10
+ addze 11,11
+ stw 12,20(3)
+
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,8,10
+ adde 11,9,11
+
+ stw 10,24(3)
+ stw 11,28(3)
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size bn_mul_comba4,.-bn_mul_comba4
+
+
+
+
+
+
+
+
+.align 4
+bn_mul_comba8:
+
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+
+
+ lwz 6,0(4)
+ lwz 7,0(5)
+ mullw 10,6,7
+ mulhwu 11,6,7
+ stw 10,0(3)
+
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ addze 12,9
+ addze 10,0
+
+ lwz 6,4(4)
+ lwz 7,0(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+ stw 11,4(3)
+
+ lwz 6,8(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,0
+
+ lwz 6,4(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,0(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+ stw 12,8(3)
+
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,0
+
+ lwz 6,4(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+
+ lwz 6,8(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,12(4)
+ lwz 7,0(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+ stw 10,12(3)
+
+ lwz 6,16(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,0
+
+ lwz 6,12(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,8(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,4(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,0(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+ stw 11,16(3)
+
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,0
+
+ lwz 6,4(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,8(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,12(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,16(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,20(4)
+ lwz 7,0(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+ stw 12,20(3)
+
+ lwz 6,24(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,0
+
+ lwz 6,20(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,16(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,12(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,8(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,4(4)
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,0(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+ stw 10,24(3)
+
+ lwz 7,28(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,0
+
+ lwz 6,4(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,8(4)
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,12(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,16(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,20(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,24(4)
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,28(4)
+ lwz 7,0(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+ stw 11,28(3)
+
+ lwz 7,4(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,0
+
+ lwz 6,24(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,20(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,16(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,12(4)
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,8(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,4(4)
+ lwz 7,28(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+ stw 12,32(3)
+
+ lwz 6,8(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,0
+
+ lwz 6,12(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,16(4)
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,20(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,24(4)
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,28(4)
+ lwz 7,8(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+ stw 10,36(3)
+
+ lwz 7,12(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,0
+
+ lwz 6,24(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,20(4)
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,16(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+
+ lwz 6,12(4)
+ lwz 7,28(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+ stw 11,40(3)
+
+ lwz 6,16(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,0
+
+ lwz 6,20(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,24(4)
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+
+ lwz 6,28(4)
+ lwz 7,16(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ addze 11,11
+ stw 12,44(3)
+
+ lwz 7,20(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,0
+
+ lwz 6,24(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+
+ lwz 6,20(4)
+ lwz 7,28(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 10,10,8
+ adde 11,11,9
+ addze 12,12
+ stw 10,48(3)
+
+ lwz 6,24(4)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,0
+
+ lwz 6,28(4)
+ lwz 7,24(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 11,11,8
+ adde 12,12,9
+ addze 10,10
+ stw 11,52(3)
+
+ lwz 7,28(5)
+ mullw 8,6,7
+ mulhwu 9,6,7
+ addc 12,12,8
+ adde 10,10,9
+ stw 12,56(3)
+ stw 10,60(3)
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size bn_mul_comba8,.-bn_mul_comba8
+
+
+
+
+
+
+
+
+.align 4
+bn_sub_words:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+
+
+
+ subfc. 7,0,6
+
+
+ beq .Lppcasm_sub_adios
+ addi 4,4,-4
+ addi 3,3,-4
+ addi 5,5,-4
+ mtctr 6
+.Lppcasm_sub_mainloop:
+ lwzu 7,4(4)
+ lwzu 8,4(5)
+ subfe 6,8,7
+
+
+ stwu 6,4(3)
+ bdnz .Lppcasm_sub_mainloop
+.Lppcasm_sub_adios:
+ subfze 3,0
+ andi. 3,3,1
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,4,0
+.long 0
+.size bn_sub_words,.-bn_sub_words
+
+
+
+
+
+
+
+
+.align 4
+bn_add_words:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+
+
+
+ addic. 6,6,0
+ beq .Lppcasm_add_adios
+ addi 4,4,-4
+ addi 3,3,-4
+ addi 5,5,-4
+ mtctr 6
+.Lppcasm_add_mainloop:
+ lwzu 7,4(4)
+ lwzu 8,4(5)
+ adde 8,7,8
+ stwu 8,4(3)
+ bdnz .Lppcasm_add_mainloop
+.Lppcasm_add_adios:
+ addze 3,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,4,0
+.long 0
+.size bn_add_words,.-bn_add_words
+
+
+
+
+
+
+
+
+.align 4
+bn_div_words:
+
+
+
+
+
+
+
+
+
+
+
+ cmplwi 0,5,0
+ bne .Lppcasm_div1
+ li 3,-1
+ blr
+.Lppcasm_div1:
+ xor 0,0,0
+ li 8,32
+ cntlzw. 7,5
+ beq .Lppcasm_div2
+ subf 8,7,8
+ srw. 9,3,8
+ tw 16,9,0
+.Lppcasm_div2:
+ .long 0x7c032840
+ blt .Lppcasm_div3
+ subf 3,5,3
+.Lppcasm_div3:
+ cmpi 0,0,7,0
+ beq .Lppcasm_div4
+ slw 3,3,7
+ srw 8,4,8
+ slw 5,5,7
+ or 3,3,8
+ slw 4,4,7
+.Lppcasm_div4:
+ srwi 9,5,16
+
+
+ li 6,2
+ mtctr 6
+.Lppcasm_divouterloop:
+ srwi 8,3,16
+ srwi 11,4,16
+
+ .long 0x7c084840
+ bne .Lppcasm_div5
+
+ li 8,-1
+ clrlwi 8,8,16
+ b .Lppcasm_div6
+.Lppcasm_div5:
+ divwu 8,3,9
+.Lppcasm_div6:
+ mullw 12,9,8
+ clrlwi 10,5,16
+ mullw 6,8,10
+
+.Lppcasm_divinnerloop:
+ subf 10,12,3
+ srwi 7,10,16
+ addic. 7,7,0
+
+
+
+ slwi 7,10,16
+ or 7,7,11
+ .long 0x7c863840
+ bne .Lppcasm_divinnerexit
+ ble 1,.Lppcasm_divinnerexit
+ addi 8,8,-1
+ subf 12,9,12
+ clrlwi 10,5,16
+ subf 6,10,6
+ b .Lppcasm_divinnerloop
+.Lppcasm_divinnerexit:
+ srwi 10,6,16
+ slwi 11,6,16
+ .long 0x7c845840
+ add 12,12,10
+ bge 1,.Lppcasm_div7
+ addi 12,12,1
+.Lppcasm_div7:
+ subf 11,11,4
+ .long 0x7c836040
+ bge 1,.Lppcasm_div8
+ addi 8,8,-1
+ add 3,5,3
+.Lppcasm_div8:
+ subf 12,12,3
+ slwi 4,11,16
+
+
+
+ insrwi 11,12,16,16
+ rotlwi 3,11,16
+ bdz .Lppcasm_div9
+ slwi 0,8,16
+ b .Lppcasm_divouterloop
+.Lppcasm_div9:
+ or 3,8,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size bn_div_words,.-bn_div_words
+
+
+
+
+
+
+
+.align 4
+bn_sqr_words:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ addic. 5,5,0
+ beq .Lppcasm_sqr_adios
+ addi 4,4,-4
+ addi 3,3,-4
+ mtctr 5
+.Lppcasm_sqr_mainloop:
+
+ lwzu 6,4(4)
+ mullw 7,6,6
+ mulhwu 8,6,6
+ stwu 7,4(3)
+ stwu 8,4(3)
+ bdnz .Lppcasm_sqr_mainloop
+.Lppcasm_sqr_adios:
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size bn_sqr_words,.-bn_sqr_words
+
+
+
+
+
+
+
+
+.align 4
+bn_mul_words:
+
+
+
+
+
+
+
+ xor 0,0,0
+ xor 12,12,12
+ rlwinm. 7,5,30,2,31
+ beq .Lppcasm_mw_REM
+ mtctr 7
+.Lppcasm_mw_LOOP:
+
+ lwz 8,0(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ addc 9,9,12
+
+
+
+
+ stw 9,0(3)
+
+ lwz 8,4(4)
+ mullw 11,6,8
+ mulhwu 12,6,8
+ adde 11,11,10
+
+ stw 11,4(3)
+
+ lwz 8,8(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ adde 9,9,12
+
+ stw 9,8(3)
+
+ lwz 8,12(4)
+ mullw 11,6,8
+ mulhwu 12,6,8
+ adde 11,11,10
+ addze 12,12
+
+ stw 11,12(3)
+
+ addi 3,3,16
+ addi 4,4,16
+ bdnz .Lppcasm_mw_LOOP
+
+.Lppcasm_mw_REM:
+ andi. 5,5,0x3
+ beq .Lppcasm_mw_OVER
+
+ lwz 8,0(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ addc 9,9,12
+ addze 10,10
+ stw 9,0(3)
+ addi 12,10,0
+
+ addi 5,5,-1
+ cmpli 0,0,5,0
+ beq .Lppcasm_mw_OVER
+
+
+
+ lwz 8,4(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ addc 9,9,12
+ addze 10,10
+ stw 9,4(3)
+ addi 12,10,0
+
+ addi 5,5,-1
+ cmpli 0,0,5,0
+ beq .Lppcasm_mw_OVER
+
+
+ lwz 8,8(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ addc 9,9,12
+ addze 10,10
+ stw 9,8(3)
+ addi 12,10,0
+
+.Lppcasm_mw_OVER:
+ addi 3,12,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,4,0
+.long 0
+.size bn_mul_words,.-bn_mul_words
+
+
+
+
+
+
+
+
+.align 4
+bn_mul_add_words:
+
+
+
+
+
+
+
+
+
+
+ xor 0,0,0
+ xor 12,12,12
+ rlwinm. 7,5,30,2,31
+ beq .Lppcasm_maw_leftover
+ mtctr 7
+.Lppcasm_maw_mainloop:
+
+ lwz 8,0(4)
+ lwz 11,0(3)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ addc 9,9,12
+ addze 10,10
+ addc 9,9,11
+
+
+
+
+
+
+ stw 9,0(3)
+
+
+ lwz 8,4(4)
+ lwz 9,4(3)
+ mullw 11,6,8
+ mulhwu 12,6,8
+ adde 11,11,10
+ addze 12,12
+ addc 11,11,9
+
+ stw 11,4(3)
+
+
+ lwz 8,8(4)
+ mullw 9,6,8
+ lwz 11,8(3)
+ mulhwu 10,6,8
+ adde 9,9,12
+ addze 10,10
+ addc 9,9,11
+
+ stw 9,8(3)
+
+
+ lwz 8,12(4)
+ mullw 11,6,8
+ lwz 9,12(3)
+ mulhwu 12,6,8
+ adde 11,11,10
+ addze 12,12
+ addc 11,11,9
+ addze 12,12
+ stw 11,12(3)
+ addi 3,3,16
+ addi 4,4,16
+ bdnz .Lppcasm_maw_mainloop
+
+.Lppcasm_maw_leftover:
+ andi. 5,5,0x3
+ beq .Lppcasm_maw_adios
+ addi 3,3,-4
+ addi 4,4,-4
+
+ mtctr 5
+ lwzu 8,4(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ lwzu 11,4(3)
+ addc 9,9,11
+ addze 10,10
+ addc 9,9,12
+ addze 12,10
+ stw 9,0(3)
+
+ bdz .Lppcasm_maw_adios
+
+ lwzu 8,4(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ lwzu 11,4(3)
+ addc 9,9,11
+ addze 10,10
+ addc 9,9,12
+ addze 12,10
+ stw 9,0(3)
+
+ bdz .Lppcasm_maw_adios
+
+ lwzu 8,4(4)
+ mullw 9,6,8
+ mulhwu 10,6,8
+ lwzu 11,4(3)
+ addc 9,9,11
+ addze 10,10
+ addc 9,9,12
+ addze 12,10
+ stw 9,0(3)
+
+.Lppcasm_maw_adios:
+ addi 3,12,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,4,0
+.long 0
+.size bn_mul_add_words,.-bn_mul_add_words
+.align 4
diff --git a/sys/crypto/openssl/powerpc/ppccpuid.S b/sys/crypto/openssl/powerpc/ppccpuid.S
new file mode 100644
index 000000000000..a810519d3ff9
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/ppccpuid.S
@@ -0,0 +1,357 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from ppccpuid.pl. */
+.machine "any"
+.text
+
+.globl OPENSSL_fpu_probe
+.type OPENSSL_fpu_probe,@function
+.align 4
+OPENSSL_fpu_probe:
+ fmr 0,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_fpu_probe,.-OPENSSL_fpu_probe
+.globl OPENSSL_ppc64_probe
+.type OPENSSL_ppc64_probe,@function
+.align 4
+OPENSSL_ppc64_probe:
+ fcfid 1,1
+ rldicl 0,0,32,32
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_ppc64_probe,.-OPENSSL_ppc64_probe
+
+.globl OPENSSL_altivec_probe
+.type OPENSSL_altivec_probe,@function
+.align 4
+OPENSSL_altivec_probe:
+.long 0x10000484
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_altivec_probe,.-OPENSSL_altivec_probe
+
+.globl OPENSSL_crypto207_probe
+.type OPENSSL_crypto207_probe,@function
+.align 4
+OPENSSL_crypto207_probe:
+ .long 0x7C000E99
+ .long 0x10000508
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_crypto207_probe,.-OPENSSL_crypto207_probe
+
+.globl OPENSSL_madd300_probe
+.type OPENSSL_madd300_probe,@function
+.align 4
+OPENSSL_madd300_probe:
+ xor 0,0,0
+ .long 0x10600033
+ .long 0x10600031
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.globl OPENSSL_wipe_cpu
+.type OPENSSL_wipe_cpu,@function
+.align 4
+OPENSSL_wipe_cpu:
+ xor 0,0,0
+ fmr 0,31
+ fmr 1,31
+ fmr 2,31
+ mr 3,1
+ fmr 3,31
+ xor 4,4,4
+ fmr 4,31
+ xor 5,5,5
+ fmr 5,31
+ xor 6,6,6
+ fmr 6,31
+ xor 7,7,7
+ fmr 7,31
+ xor 8,8,8
+ fmr 8,31
+ xor 9,9,9
+ fmr 9,31
+ xor 10,10,10
+ fmr 10,31
+ xor 11,11,11
+ fmr 11,31
+ xor 12,12,12
+ fmr 12,31
+ fmr 13,31
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
+
+.globl OPENSSL_atomic_add
+.type OPENSSL_atomic_add,@function
+.align 4
+OPENSSL_atomic_add:
+.Ladd: lwarx 5,0,3
+ add 0,4,5
+ stwcx. 0,0,3
+ bne- .Ladd
+ mr 3,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size OPENSSL_atomic_add,.-OPENSSL_atomic_add
+
+.globl OPENSSL_rdtsc_mftb
+.type OPENSSL_rdtsc_mftb,@function
+.align 4
+OPENSSL_rdtsc_mftb:
+ mftb 3
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_rdtsc_mftb,.-OPENSSL_rdtsc_mftb
+
+.globl OPENSSL_rdtsc_mfspr268
+.type OPENSSL_rdtsc_mfspr268,@function
+.align 4
+OPENSSL_rdtsc_mfspr268:
+ mfspr 3,268
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size OPENSSL_rdtsc_mfspr268,.-OPENSSL_rdtsc_mfspr268
+
+.globl OPENSSL_cleanse
+.type OPENSSL_cleanse,@function
+.align 4
+OPENSSL_cleanse:
+ cmplwi 4,7
+ li 0,0
+ bge .Lot
+ cmplwi 4,0
+ .long 0x4DC20020
+.Little: mtctr 4
+ stb 0,0(3)
+ addi 3,3,1
+ bdnz $-8
+ blr
+.Lot: andi. 5,3,3
+ beq .Laligned
+ stb 0,0(3)
+ subi 4,4,1
+ addi 3,3,1
+ b .Lot
+.Laligned:
+ srwi 5,4,2
+ mtctr 5
+ stw 0,0(3)
+ addi 3,3,4
+ bdnz $-8
+ andi. 4,4,3
+ bne .Little
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size OPENSSL_cleanse,.-OPENSSL_cleanse
+
+.globl CRYPTO_memcmp
+.type CRYPTO_memcmp,@function
+.align 4
+CRYPTO_memcmp:
+ cmplwi 5,0
+ li 0,0
+ beq .Lno_data
+ mtctr 5
+.Loop_cmp:
+ lbz 6,0(3)
+ addi 3,3,1
+ lbz 7,0(4)
+ addi 4,4,1
+ xor 6,6,7
+ or 0,0,6
+ bdnz .Loop_cmp
+
+.Lno_data:
+ li 3,0
+ sub 3,3,0
+ extrwi 3,3,1,0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size CRYPTO_memcmp,.-CRYPTO_memcmp
+.globl OPENSSL_instrument_bus_mftb
+.type OPENSSL_instrument_bus_mftb,@function
+.align 4
+OPENSSL_instrument_bus_mftb:
+ mtctr 4
+
+ mftb 7
+ li 8,0
+
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+
+.Loop: mftb 6
+ sub 8,6,7
+ mr 7,6
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+ addi 3,3,4
+ bdnz .Loop
+
+ mr 3,4
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size OPENSSL_instrument_bus_mftb,.-OPENSSL_instrument_bus_mftb
+
+.globl OPENSSL_instrument_bus2_mftb
+.type OPENSSL_instrument_bus2_mftb,@function
+.align 4
+OPENSSL_instrument_bus2_mftb:
+ mr 0,4
+ slwi 4,4,2
+
+ mftb 7
+ li 8,0
+
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+
+ mftb 6
+ sub 8,6,7
+ mr 7,6
+ mr 9,8
+.Loop2:
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+
+ addic. 5,5,-1
+ beq .Ldone2
+
+ mftb 6
+ sub 8,6,7
+ mr 7,6
+ .long 0x7f884840
+ mr 9,8
+
+ mfcr 6
+ not 6,6
+ rlwinm 6,6,1,29,29
+
+ sub. 4,4,6
+ add 3,3,6
+ bne .Loop2
+
+.Ldone2:
+ srwi 4,4,2
+ sub 3,0,4
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size OPENSSL_instrument_bus2_mftb,.-OPENSSL_instrument_bus2_mftb
+
+.globl OPENSSL_instrument_bus_mfspr268
+.type OPENSSL_instrument_bus_mfspr268,@function
+.align 4
+OPENSSL_instrument_bus_mfspr268:
+ mtctr 4
+
+ mfspr 7,268
+ li 8,0
+
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+
+.Loop3: mfspr 6,268
+ sub 8,6,7
+ mr 7,6
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+ addi 3,3,4
+ bdnz .Loop3
+
+ mr 3,4
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,2,0
+.long 0
+.size OPENSSL_instrument_bus_mfspr268,.-OPENSSL_instrument_bus_mfspr268
+
+.globl OPENSSL_instrument_bus2_mfspr268
+.type OPENSSL_instrument_bus2_mfspr268,@function
+.align 4
+OPENSSL_instrument_bus2_mfspr268:
+ mr 0,4
+ slwi 4,4,2
+
+ mfspr 7,268
+ li 8,0
+
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+
+ mfspr 6,268
+ sub 8,6,7
+ mr 7,6
+ mr 9,8
+.Loop4:
+ dcbf 0,3
+ lwarx 6,0,3
+ add 6,6,8
+ stwcx. 6,0,3
+ stwx 6,0,3
+
+ addic. 5,5,-1
+ beq .Ldone4
+
+ mfspr 6,268
+ sub 8,6,7
+ mr 7,6
+ .long 0x7f884840
+ mr 9,8
+
+ mfcr 6
+ not 6,6
+ rlwinm 6,6,1,29,29
+
+ sub. 4,4,6
+ add 3,3,6
+ bne .Loop4
+
+.Ldone4:
+ srwi 4,4,2
+ sub 3,0,4
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size OPENSSL_instrument_bus2_mfspr268,.-OPENSSL_instrument_bus2_mfspr268
diff --git a/sys/crypto/openssl/powerpc/sha1-ppc.S b/sys/crypto/openssl/powerpc/sha1-ppc.S
new file mode 100644
index 000000000000..e576ad1f73e8
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/sha1-ppc.S
@@ -0,0 +1,1119 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from sha1-ppc.pl. */
+.machine "any"
+.text
+
+.globl sha1_block_data_order
+.type sha1_block_data_order,@function
+.align 4
+sha1_block_data_order:
+ stwu 1,-160(1)
+ mflr 0
+ stw 15,92(1)
+ stw 16,96(1)
+ stw 17,100(1)
+ stw 18,104(1)
+ stw 19,108(1)
+ stw 20,112(1)
+ stw 21,116(1)
+ stw 22,120(1)
+ stw 23,124(1)
+ stw 24,128(1)
+ stw 25,132(1)
+ stw 26,136(1)
+ stw 27,140(1)
+ stw 28,144(1)
+ stw 29,148(1)
+ stw 30,152(1)
+ stw 31,156(1)
+ stw 0,164(1)
+ lwz 7,0(3)
+ lwz 8,4(3)
+ lwz 9,8(3)
+ lwz 10,12(3)
+ lwz 11,16(3)
+ andi. 0,4,3
+ bne .Lunaligned
+.Laligned:
+ mtctr 5
+ bl .Lsha1_block_private
+ b .Ldone
+
+
+
+
+
+
+
+.align 4
+.Lunaligned:
+ subfic 6,4,4096
+ andi. 6,6,4095
+ srwi. 6,6,6
+ beq .Lcross_page
+ .long 0x7c053040
+ ble .Laligned
+ mtctr 6
+ subfc 5,6,5
+ bl .Lsha1_block_private
+.Lcross_page:
+ li 6,16
+ mtctr 6
+ addi 20,1,24
+.Lmemcpy:
+ lbz 16,0(4)
+ lbz 17,1(4)
+ lbz 18,2(4)
+ lbz 19,3(4)
+ addi 4,4,4
+ stb 16,0(20)
+ stb 17,1(20)
+ stb 18,2(20)
+ stb 19,3(20)
+ addi 20,20,4
+ bdnz .Lmemcpy
+
+ stw 4,88(1)
+ li 6,1
+ addi 4,1,24
+ mtctr 6
+ bl .Lsha1_block_private
+ lwz 4,88(1)
+ addic. 5,5,-1
+ bne .Lunaligned
+
+.Ldone:
+ lwz 0,164(1)
+ lwz 15,92(1)
+ lwz 16,96(1)
+ lwz 17,100(1)
+ lwz 18,104(1)
+ lwz 19,108(1)
+ lwz 20,112(1)
+ lwz 21,116(1)
+ lwz 22,120(1)
+ lwz 23,124(1)
+ lwz 24,128(1)
+ lwz 25,132(1)
+ lwz 26,136(1)
+ lwz 27,140(1)
+ lwz 28,144(1)
+ lwz 29,148(1)
+ lwz 30,152(1)
+ lwz 31,156(1)
+ mtlr 0
+ addi 1,1,160
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+.align 4
+.Lsha1_block_private:
+ lis 0,0x5a82
+ ori 0,0,0x7999
+ lwz 16,0(4)
+ lwz 17,4(4)
+ add 12,0,11
+ rotlwi 11,7,5
+ add 12,12,16
+ and 15,9,8
+ add 12,12,11
+ andc 6,10,8
+ rotlwi 8,8,30
+ or 15,15,6
+ add 12,12,15
+ lwz 18,8(4)
+ add 11,0,10
+ rotlwi 10,12,5
+ add 11,11,17
+ and 15,8,7
+ add 11,11,10
+ andc 6,9,7
+ rotlwi 7,7,30
+ or 15,15,6
+ add 11,11,15
+ lwz 19,12(4)
+ add 10,0,9
+ rotlwi 9,11,5
+ add 10,10,18
+ and 15,7,12
+ add 10,10,9
+ andc 6,8,12
+ rotlwi 12,12,30
+ or 15,15,6
+ add 10,10,15
+ lwz 20,16(4)
+ add 9,0,8
+ rotlwi 8,10,5
+ add 9,9,19
+ and 15,12,11
+ add 9,9,8
+ andc 6,7,11
+ rotlwi 11,11,30
+ or 15,15,6
+ add 9,9,15
+ lwz 21,20(4)
+ add 8,0,7
+ rotlwi 7,9,5
+ add 8,8,20
+ and 15,11,10
+ add 8,8,7
+ andc 6,12,10
+ rotlwi 10,10,30
+ or 15,15,6
+ add 8,8,15
+ lwz 22,24(4)
+ add 7,0,12
+ rotlwi 12,8,5
+ add 7,7,21
+ and 15,10,9
+ add 7,7,12
+ andc 6,11,9
+ rotlwi 9,9,30
+ or 15,15,6
+ add 7,7,15
+ lwz 23,28(4)
+ add 12,0,11
+ rotlwi 11,7,5
+ add 12,12,22
+ and 15,9,8
+ add 12,12,11
+ andc 6,10,8
+ rotlwi 8,8,30
+ or 15,15,6
+ add 12,12,15
+ lwz 24,32(4)
+ add 11,0,10
+ rotlwi 10,12,5
+ add 11,11,23
+ and 15,8,7
+ add 11,11,10
+ andc 6,9,7
+ rotlwi 7,7,30
+ or 15,15,6
+ add 11,11,15
+ lwz 25,36(4)
+ add 10,0,9
+ rotlwi 9,11,5
+ add 10,10,24
+ and 15,7,12
+ add 10,10,9
+ andc 6,8,12
+ rotlwi 12,12,30
+ or 15,15,6
+ add 10,10,15
+ lwz 26,40(4)
+ add 9,0,8
+ rotlwi 8,10,5
+ add 9,9,25
+ and 15,12,11
+ add 9,9,8
+ andc 6,7,11
+ rotlwi 11,11,30
+ or 15,15,6
+ add 9,9,15
+ lwz 27,44(4)
+ add 8,0,7
+ rotlwi 7,9,5
+ add 8,8,26
+ and 15,11,10
+ add 8,8,7
+ andc 6,12,10
+ rotlwi 10,10,30
+ or 15,15,6
+ add 8,8,15
+ lwz 28,48(4)
+ add 7,0,12
+ rotlwi 12,8,5
+ add 7,7,27
+ and 15,10,9
+ add 7,7,12
+ andc 6,11,9
+ rotlwi 9,9,30
+ or 15,15,6
+ add 7,7,15
+ lwz 29,52(4)
+ add 12,0,11
+ rotlwi 11,7,5
+ add 12,12,28
+ and 15,9,8
+ add 12,12,11
+ andc 6,10,8
+ rotlwi 8,8,30
+ or 15,15,6
+ add 12,12,15
+ lwz 30,56(4)
+ add 11,0,10
+ rotlwi 10,12,5
+ add 11,11,29
+ and 15,8,7
+ add 11,11,10
+ andc 6,9,7
+ rotlwi 7,7,30
+ or 15,15,6
+ add 11,11,15
+ lwz 31,60(4)
+ add 10,0,9
+ rotlwi 9,11,5
+ add 10,10,30
+ and 15,7,12
+ add 10,10,9
+ andc 6,8,12
+ rotlwi 12,12,30
+ or 15,15,6
+ add 10,10,15
+ add 9,0,8
+ rotlwi 8,10,5
+ xor 16,16,18
+ add 9,9,31
+ and 15,12,11
+ xor 16,16,24
+ add 9,9,8
+ andc 6,7,11
+ rotlwi 11,11,30
+ or 15,15,6
+ xor 16,16,29
+ add 9,9,15
+ rotlwi 16,16,1
+ add 8,0,7
+ rotlwi 7,9,5
+ xor 17,17,19
+ add 8,8,16
+ and 15,11,10
+ xor 17,17,25
+ add 8,8,7
+ andc 6,12,10
+ rotlwi 10,10,30
+ or 15,15,6
+ xor 17,17,30
+ add 8,8,15
+ rotlwi 17,17,1
+ add 7,0,12
+ rotlwi 12,8,5
+ xor 18,18,20
+ add 7,7,17
+ and 15,10,9
+ xor 18,18,26
+ add 7,7,12
+ andc 6,11,9
+ rotlwi 9,9,30
+ or 15,15,6
+ xor 18,18,31
+ add 7,7,15
+ rotlwi 18,18,1
+ add 12,0,11
+ rotlwi 11,7,5
+ xor 19,19,21
+ add 12,12,18
+ and 15,9,8
+ xor 19,19,27
+ add 12,12,11
+ andc 6,10,8
+ rotlwi 8,8,30
+ or 15,15,6
+ xor 19,19,16
+ add 12,12,15
+ rotlwi 19,19,1
+ add 11,0,10
+ rotlwi 10,12,5
+ xor 20,20,22
+ add 11,11,19
+ and 15,8,7
+ xor 20,20,28
+ add 11,11,10
+ andc 6,9,7
+ rotlwi 7,7,30
+ or 15,15,6
+ xor 20,20,17
+ add 11,11,15
+ rotlwi 20,20,1
+ lis 0,0x6ed9
+ ori 0,0,0xeba1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 21,21,23
+ add 10,10,20
+ xor 15,15,7
+ xor 21,21,29
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 21,21,18
+ add 10,10,9
+ rotlwi 21,21,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 22,22,24
+ add 9,9,21
+ xor 15,15,12
+ xor 22,22,30
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 22,22,19
+ add 9,9,8
+ rotlwi 22,22,1
+ add 8,0,7
+ xor 15,10,12
+ rotlwi 7,9,5
+ xor 23,23,25
+ add 8,8,22
+ xor 15,15,11
+ xor 23,23,31
+ add 8,8,15
+ rotlwi 10,10,30
+ xor 23,23,20
+ add 8,8,7
+ rotlwi 23,23,1
+ add 7,0,12
+ xor 15,9,11
+ rotlwi 12,8,5
+ xor 24,24,26
+ add 7,7,23
+ xor 15,15,10
+ xor 24,24,16
+ add 7,7,15
+ rotlwi 9,9,30
+ xor 24,24,21
+ add 7,7,12
+ rotlwi 24,24,1
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 25,25,27
+ add 12,12,24
+ xor 15,15,9
+ xor 25,25,17
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 25,25,22
+ add 12,12,11
+ rotlwi 25,25,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ xor 26,26,28
+ add 11,11,25
+ xor 15,15,8
+ xor 26,26,18
+ add 11,11,15
+ rotlwi 7,7,30
+ xor 26,26,23
+ add 11,11,10
+ rotlwi 26,26,1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 27,27,29
+ add 10,10,26
+ xor 15,15,7
+ xor 27,27,19
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 27,27,24
+ add 10,10,9
+ rotlwi 27,27,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 28,28,30
+ add 9,9,27
+ xor 15,15,12
+ xor 28,28,20
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 28,28,25
+ add 9,9,8
+ rotlwi 28,28,1
+ add 8,0,7
+ xor 15,10,12
+ rotlwi 7,9,5
+ xor 29,29,31
+ add 8,8,28
+ xor 15,15,11
+ xor 29,29,21
+ add 8,8,15
+ rotlwi 10,10,30
+ xor 29,29,26
+ add 8,8,7
+ rotlwi 29,29,1
+ add 7,0,12
+ xor 15,9,11
+ rotlwi 12,8,5
+ xor 30,30,16
+ add 7,7,29
+ xor 15,15,10
+ xor 30,30,22
+ add 7,7,15
+ rotlwi 9,9,30
+ xor 30,30,27
+ add 7,7,12
+ rotlwi 30,30,1
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 31,31,17
+ add 12,12,30
+ xor 15,15,9
+ xor 31,31,23
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 31,31,28
+ add 12,12,11
+ rotlwi 31,31,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ xor 16,16,18
+ add 11,11,31
+ xor 15,15,8
+ xor 16,16,24
+ add 11,11,15
+ rotlwi 7,7,30
+ xor 16,16,29
+ add 11,11,10
+ rotlwi 16,16,1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 17,17,19
+ add 10,10,16
+ xor 15,15,7
+ xor 17,17,25
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 17,17,30
+ add 10,10,9
+ rotlwi 17,17,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 18,18,20
+ add 9,9,17
+ xor 15,15,12
+ xor 18,18,26
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 18,18,31
+ add 9,9,8
+ rotlwi 18,18,1
+ add 8,0,7
+ xor 15,10,12
+ rotlwi 7,9,5
+ xor 19,19,21
+ add 8,8,18
+ xor 15,15,11
+ xor 19,19,27
+ add 8,8,15
+ rotlwi 10,10,30
+ xor 19,19,16
+ add 8,8,7
+ rotlwi 19,19,1
+ add 7,0,12
+ xor 15,9,11
+ rotlwi 12,8,5
+ xor 20,20,22
+ add 7,7,19
+ xor 15,15,10
+ xor 20,20,28
+ add 7,7,15
+ rotlwi 9,9,30
+ xor 20,20,17
+ add 7,7,12
+ rotlwi 20,20,1
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 21,21,23
+ add 12,12,20
+ xor 15,15,9
+ xor 21,21,29
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 21,21,18
+ add 12,12,11
+ rotlwi 21,21,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ xor 22,22,24
+ add 11,11,21
+ xor 15,15,8
+ xor 22,22,30
+ add 11,11,15
+ rotlwi 7,7,30
+ xor 22,22,19
+ add 11,11,10
+ rotlwi 22,22,1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 23,23,25
+ add 10,10,22
+ xor 15,15,7
+ xor 23,23,31
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 23,23,20
+ add 10,10,9
+ rotlwi 23,23,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 24,24,26
+ add 9,9,23
+ xor 15,15,12
+ xor 24,24,16
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 24,24,21
+ add 9,9,8
+ rotlwi 24,24,1
+ lis 0,0x8f1b
+ ori 0,0,0xbcdc
+ add 8,0,7
+ rotlwi 7,9,5
+ xor 25,25,27
+ add 8,8,24
+ and 15,10,11
+ xor 25,25,17
+ add 8,8,7
+ or 6,10,11
+ rotlwi 10,10,30
+ xor 25,25,22
+ and 6,6,12
+ or 15,15,6
+ rotlwi 25,25,1
+ add 8,8,15
+ add 7,0,12
+ rotlwi 12,8,5
+ xor 26,26,28
+ add 7,7,25
+ and 15,9,10
+ xor 26,26,18
+ add 7,7,12
+ or 6,9,10
+ rotlwi 9,9,30
+ xor 26,26,23
+ and 6,6,11
+ or 15,15,6
+ rotlwi 26,26,1
+ add 7,7,15
+ add 12,0,11
+ rotlwi 11,7,5
+ xor 27,27,29
+ add 12,12,26
+ and 15,8,9
+ xor 27,27,19
+ add 12,12,11
+ or 6,8,9
+ rotlwi 8,8,30
+ xor 27,27,24
+ and 6,6,10
+ or 15,15,6
+ rotlwi 27,27,1
+ add 12,12,15
+ add 11,0,10
+ rotlwi 10,12,5
+ xor 28,28,30
+ add 11,11,27
+ and 15,7,8
+ xor 28,28,20
+ add 11,11,10
+ or 6,7,8
+ rotlwi 7,7,30
+ xor 28,28,25
+ and 6,6,9
+ or 15,15,6
+ rotlwi 28,28,1
+ add 11,11,15
+ add 10,0,9
+ rotlwi 9,11,5
+ xor 29,29,31
+ add 10,10,28
+ and 15,12,7
+ xor 29,29,21
+ add 10,10,9
+ or 6,12,7
+ rotlwi 12,12,30
+ xor 29,29,26
+ and 6,6,8
+ or 15,15,6
+ rotlwi 29,29,1
+ add 10,10,15
+ add 9,0,8
+ rotlwi 8,10,5
+ xor 30,30,16
+ add 9,9,29
+ and 15,11,12
+ xor 30,30,22
+ add 9,9,8
+ or 6,11,12
+ rotlwi 11,11,30
+ xor 30,30,27
+ and 6,6,7
+ or 15,15,6
+ rotlwi 30,30,1
+ add 9,9,15
+ add 8,0,7
+ rotlwi 7,9,5
+ xor 31,31,17
+ add 8,8,30
+ and 15,10,11
+ xor 31,31,23
+ add 8,8,7
+ or 6,10,11
+ rotlwi 10,10,30
+ xor 31,31,28
+ and 6,6,12
+ or 15,15,6
+ rotlwi 31,31,1
+ add 8,8,15
+ add 7,0,12
+ rotlwi 12,8,5
+ xor 16,16,18
+ add 7,7,31
+ and 15,9,10
+ xor 16,16,24
+ add 7,7,12
+ or 6,9,10
+ rotlwi 9,9,30
+ xor 16,16,29
+ and 6,6,11
+ or 15,15,6
+ rotlwi 16,16,1
+ add 7,7,15
+ add 12,0,11
+ rotlwi 11,7,5
+ xor 17,17,19
+ add 12,12,16
+ and 15,8,9
+ xor 17,17,25
+ add 12,12,11
+ or 6,8,9
+ rotlwi 8,8,30
+ xor 17,17,30
+ and 6,6,10
+ or 15,15,6
+ rotlwi 17,17,1
+ add 12,12,15
+ add 11,0,10
+ rotlwi 10,12,5
+ xor 18,18,20
+ add 11,11,17
+ and 15,7,8
+ xor 18,18,26
+ add 11,11,10
+ or 6,7,8
+ rotlwi 7,7,30
+ xor 18,18,31
+ and 6,6,9
+ or 15,15,6
+ rotlwi 18,18,1
+ add 11,11,15
+ add 10,0,9
+ rotlwi 9,11,5
+ xor 19,19,21
+ add 10,10,18
+ and 15,12,7
+ xor 19,19,27
+ add 10,10,9
+ or 6,12,7
+ rotlwi 12,12,30
+ xor 19,19,16
+ and 6,6,8
+ or 15,15,6
+ rotlwi 19,19,1
+ add 10,10,15
+ add 9,0,8
+ rotlwi 8,10,5
+ xor 20,20,22
+ add 9,9,19
+ and 15,11,12
+ xor 20,20,28
+ add 9,9,8
+ or 6,11,12
+ rotlwi 11,11,30
+ xor 20,20,17
+ and 6,6,7
+ or 15,15,6
+ rotlwi 20,20,1
+ add 9,9,15
+ add 8,0,7
+ rotlwi 7,9,5
+ xor 21,21,23
+ add 8,8,20
+ and 15,10,11
+ xor 21,21,29
+ add 8,8,7
+ or 6,10,11
+ rotlwi 10,10,30
+ xor 21,21,18
+ and 6,6,12
+ or 15,15,6
+ rotlwi 21,21,1
+ add 8,8,15
+ add 7,0,12
+ rotlwi 12,8,5
+ xor 22,22,24
+ add 7,7,21
+ and 15,9,10
+ xor 22,22,30
+ add 7,7,12
+ or 6,9,10
+ rotlwi 9,9,30
+ xor 22,22,19
+ and 6,6,11
+ or 15,15,6
+ rotlwi 22,22,1
+ add 7,7,15
+ add 12,0,11
+ rotlwi 11,7,5
+ xor 23,23,25
+ add 12,12,22
+ and 15,8,9
+ xor 23,23,31
+ add 12,12,11
+ or 6,8,9
+ rotlwi 8,8,30
+ xor 23,23,20
+ and 6,6,10
+ or 15,15,6
+ rotlwi 23,23,1
+ add 12,12,15
+ add 11,0,10
+ rotlwi 10,12,5
+ xor 24,24,26
+ add 11,11,23
+ and 15,7,8
+ xor 24,24,16
+ add 11,11,10
+ or 6,7,8
+ rotlwi 7,7,30
+ xor 24,24,21
+ and 6,6,9
+ or 15,15,6
+ rotlwi 24,24,1
+ add 11,11,15
+ add 10,0,9
+ rotlwi 9,11,5
+ xor 25,25,27
+ add 10,10,24
+ and 15,12,7
+ xor 25,25,17
+ add 10,10,9
+ or 6,12,7
+ rotlwi 12,12,30
+ xor 25,25,22
+ and 6,6,8
+ or 15,15,6
+ rotlwi 25,25,1
+ add 10,10,15
+ add 9,0,8
+ rotlwi 8,10,5
+ xor 26,26,28
+ add 9,9,25
+ and 15,11,12
+ xor 26,26,18
+ add 9,9,8
+ or 6,11,12
+ rotlwi 11,11,30
+ xor 26,26,23
+ and 6,6,7
+ or 15,15,6
+ rotlwi 26,26,1
+ add 9,9,15
+ add 8,0,7
+ rotlwi 7,9,5
+ xor 27,27,29
+ add 8,8,26
+ and 15,10,11
+ xor 27,27,19
+ add 8,8,7
+ or 6,10,11
+ rotlwi 10,10,30
+ xor 27,27,24
+ and 6,6,12
+ or 15,15,6
+ rotlwi 27,27,1
+ add 8,8,15
+ add 7,0,12
+ rotlwi 12,8,5
+ xor 28,28,30
+ add 7,7,27
+ and 15,9,10
+ xor 28,28,20
+ add 7,7,12
+ or 6,9,10
+ rotlwi 9,9,30
+ xor 28,28,25
+ and 6,6,11
+ or 15,15,6
+ rotlwi 28,28,1
+ add 7,7,15
+ lis 0,0xca62
+ ori 0,0,0xc1d6
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 29,29,31
+ add 12,12,28
+ xor 15,15,9
+ xor 29,29,21
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 29,29,26
+ add 12,12,11
+ rotlwi 29,29,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ xor 30,30,16
+ add 11,11,29
+ xor 15,15,8
+ xor 30,30,22
+ add 11,11,15
+ rotlwi 7,7,30
+ xor 30,30,27
+ add 11,11,10
+ rotlwi 30,30,1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 31,31,17
+ add 10,10,30
+ xor 15,15,7
+ xor 31,31,23
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 31,31,28
+ add 10,10,9
+ rotlwi 31,31,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 16,16,18
+ add 9,9,31
+ xor 15,15,12
+ xor 16,16,24
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 16,16,29
+ add 9,9,8
+ rotlwi 16,16,1
+ add 8,0,7
+ xor 15,10,12
+ rotlwi 7,9,5
+ xor 17,17,19
+ add 8,8,16
+ xor 15,15,11
+ xor 17,17,25
+ add 8,8,15
+ rotlwi 10,10,30
+ xor 17,17,30
+ add 8,8,7
+ rotlwi 17,17,1
+ add 7,0,12
+ xor 15,9,11
+ rotlwi 12,8,5
+ xor 18,18,20
+ add 7,7,17
+ xor 15,15,10
+ xor 18,18,26
+ add 7,7,15
+ rotlwi 9,9,30
+ xor 18,18,31
+ add 7,7,12
+ rotlwi 18,18,1
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 19,19,21
+ add 12,12,18
+ xor 15,15,9
+ xor 19,19,27
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 19,19,16
+ add 12,12,11
+ rotlwi 19,19,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ xor 20,20,22
+ add 11,11,19
+ xor 15,15,8
+ xor 20,20,28
+ add 11,11,15
+ rotlwi 7,7,30
+ xor 20,20,17
+ add 11,11,10
+ rotlwi 20,20,1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 21,21,23
+ add 10,10,20
+ xor 15,15,7
+ xor 21,21,29
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 21,21,18
+ add 10,10,9
+ rotlwi 21,21,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 22,22,24
+ add 9,9,21
+ xor 15,15,12
+ xor 22,22,30
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 22,22,19
+ add 9,9,8
+ rotlwi 22,22,1
+ add 8,0,7
+ xor 15,10,12
+ rotlwi 7,9,5
+ xor 23,23,25
+ add 8,8,22
+ xor 15,15,11
+ xor 23,23,31
+ add 8,8,15
+ rotlwi 10,10,30
+ xor 23,23,20
+ add 8,8,7
+ rotlwi 23,23,1
+ add 7,0,12
+ xor 15,9,11
+ rotlwi 12,8,5
+ xor 24,24,26
+ add 7,7,23
+ xor 15,15,10
+ xor 24,24,16
+ add 7,7,15
+ rotlwi 9,9,30
+ xor 24,24,21
+ add 7,7,12
+ rotlwi 24,24,1
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 25,25,27
+ add 12,12,24
+ xor 15,15,9
+ xor 25,25,17
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 25,25,22
+ add 12,12,11
+ rotlwi 25,25,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ xor 26,26,28
+ add 11,11,25
+ xor 15,15,8
+ xor 26,26,18
+ add 11,11,15
+ rotlwi 7,7,30
+ xor 26,26,23
+ add 11,11,10
+ rotlwi 26,26,1
+ add 10,0,9
+ xor 15,12,8
+ rotlwi 9,11,5
+ xor 27,27,29
+ add 10,10,26
+ xor 15,15,7
+ xor 27,27,19
+ add 10,10,15
+ rotlwi 12,12,30
+ xor 27,27,24
+ add 10,10,9
+ rotlwi 27,27,1
+ add 9,0,8
+ xor 15,11,7
+ rotlwi 8,10,5
+ xor 28,28,30
+ add 9,9,27
+ xor 15,15,12
+ xor 28,28,20
+ add 9,9,15
+ rotlwi 11,11,30
+ xor 28,28,25
+ add 9,9,8
+ rotlwi 28,28,1
+ add 8,0,7
+ xor 15,10,12
+ rotlwi 7,9,5
+ xor 29,29,31
+ add 8,8,28
+ xor 15,15,11
+ xor 29,29,21
+ add 8,8,15
+ rotlwi 10,10,30
+ xor 29,29,26
+ add 8,8,7
+ rotlwi 29,29,1
+ add 7,0,12
+ xor 15,9,11
+ rotlwi 12,8,5
+ xor 30,30,16
+ add 7,7,29
+ xor 15,15,10
+ xor 30,30,22
+ add 7,7,15
+ rotlwi 9,9,30
+ xor 30,30,27
+ add 7,7,12
+ rotlwi 30,30,1
+ add 12,0,11
+ xor 15,8,10
+ rotlwi 11,7,5
+ xor 31,31,17
+ add 12,12,30
+ xor 15,15,9
+ xor 31,31,23
+ add 12,12,15
+ rotlwi 8,8,30
+ xor 31,31,28
+ add 12,12,11
+ rotlwi 31,31,1
+ add 11,0,10
+ xor 15,7,9
+ rotlwi 10,12,5
+ lwz 16,0(3)
+ add 11,11,31
+ xor 15,15,8
+ lwz 17,4(3)
+ add 11,11,15
+ rotlwi 7,7,30
+ lwz 18,8(3)
+ lwz 19,12(3)
+ add 11,11,10
+ lwz 20,16(3)
+ add 16,16,11
+ add 17,17,12
+ add 18,18,7
+ add 19,19,8
+ add 20,20,9
+ stw 16,0(3)
+ mr 7,16
+ stw 17,4(3)
+ mr 8,17
+ stw 18,8(3)
+ mr 9,18
+ stw 19,12(3)
+ mr 10,19
+ stw 20,16(3)
+ mr 11,20
+ addi 4,4,64
+ bdnz .Lsha1_block_private
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size sha1_block_data_order,.-sha1_block_data_order
+.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,80,80,67,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,102,121,46,99,104,97,108,109,101,114,115,46,115,101,62,0
+.align 2
diff --git a/sys/crypto/openssl/powerpc/sha256-ppc.S b/sys/crypto/openssl/powerpc/sha256-ppc.S
new file mode 100644
index 000000000000..8f39584266ad
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/sha256-ppc.S
@@ -0,0 +1,1322 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from sha512-ppc.pl. */
+.machine "any"
+.text
+
+.globl sha256_block_ppc
+.type sha256_block_ppc,@function
+.align 6
+sha256_block_ppc:
+ stwu 1,-192(1)
+ mflr 0
+ slwi 5,5,6
+
+ stw 3,104(1)
+
+ stw 14,120(1)
+ stw 15,124(1)
+ stw 16,128(1)
+ stw 17,132(1)
+ stw 18,136(1)
+ stw 19,140(1)
+ stw 20,144(1)
+ stw 21,148(1)
+ stw 22,152(1)
+ stw 23,156(1)
+ stw 24,160(1)
+ stw 25,164(1)
+ stw 26,168(1)
+ stw 27,172(1)
+ stw 28,176(1)
+ stw 29,180(1)
+ stw 30,184(1)
+ stw 31,188(1)
+ stw 0,196(1)
+ lwz 8,0(3)
+ mr 31,4
+ lwz 9,4(3)
+ lwz 10,8(3)
+ lwz 11,12(3)
+ lwz 12,16(3)
+ lwz 6,20(3)
+ lwz 14,24(3)
+ lwz 15,28(3)
+ bl .LPICmeup
+.LPICedup:
+ andi. 0,31,3
+ bne .Lunaligned
+.Laligned:
+ add 5,31,5
+ stw 5,96(1)
+ stw 31,100(1)
+ bl .Lsha2_block_private
+ b .Ldone
+
+
+
+
+
+
+
+.align 4
+.Lunaligned:
+ subfic 0,31,4096
+ andi. 0,0,4032
+ beq .Lcross_page
+ .long 0x7c050040
+ ble .Laligned
+ subfc 5,0,5
+ add 0,31,0
+ stw 5,92(1)
+ stw 0,96(1)
+ stw 31,100(1)
+ bl .Lsha2_block_private
+
+ lwz 5,92(1)
+.Lcross_page:
+ li 0,16
+ mtctr 0
+ addi 20,1,24
+.Lmemcpy:
+ lbz 16,0(31)
+ lbz 17,1(31)
+ lbz 18,2(31)
+ lbz 19,3(31)
+ addi 31,31,4
+ stb 16,0(20)
+ stb 17,1(20)
+ stb 18,2(20)
+ stb 19,3(20)
+ addi 20,20,4
+ bdnz .Lmemcpy
+ stw 31,88(1)
+ addi 0,1,88
+ addi 31,1,24
+ stw 5,92(1)
+ stw 0,96(1)
+ stw 31,100(1)
+ bl .Lsha2_block_private
+ lwz 31,88(1)
+ lwz 5,92(1)
+ addic. 5,5,-64
+ bne .Lunaligned
+
+.Ldone:
+ lwz 0,196(1)
+ lwz 14,120(1)
+ lwz 15,124(1)
+ lwz 16,128(1)
+ lwz 17,132(1)
+ lwz 18,136(1)
+ lwz 19,140(1)
+ lwz 20,144(1)
+ lwz 21,148(1)
+ lwz 22,152(1)
+ lwz 23,156(1)
+ lwz 24,160(1)
+ lwz 25,164(1)
+ lwz 26,168(1)
+ lwz 27,172(1)
+ lwz 28,176(1)
+ lwz 29,180(1)
+ lwz 30,184(1)
+ lwz 31,188(1)
+ mtlr 0
+ addi 1,1,192
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+.align 4
+.Lsha2_block_private:
+ lwz 0,0(7)
+ lwz 16,0(31)
+ rotrwi 3,12,6
+ rotrwi 4,12,11
+ and 5,6,12
+ xor 3,3,4
+ add 15,15,0
+ andc 0,14,12
+ rotrwi 4,4,14
+ or 5,5,0
+ add 15,15,16
+ xor 3,3,4
+ add 15,15,5
+ add 15,15,3
+
+ rotrwi 3,8,2
+ rotrwi 4,8,13
+ and 5,8,9
+ and 0,8,10
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,9,10
+ xor 3,3,4
+ add 11,11,15
+ xor 5,5,0
+ lwz 0,4(7)
+ add 15,15,3
+ add 15,15,5
+
+ lwz 17,4(31)
+ rotrwi 3,11,6
+ rotrwi 4,11,11
+ and 5,12,11
+ xor 3,3,4
+ add 14,14,0
+ andc 0,6,11
+ rotrwi 4,4,14
+ or 5,5,0
+ add 14,14,17
+ xor 3,3,4
+ add 14,14,5
+ add 14,14,3
+
+ rotrwi 3,15,2
+ rotrwi 4,15,13
+ and 5,15,8
+ and 0,15,9
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,8,9
+ xor 3,3,4
+ add 10,10,14
+ xor 5,5,0
+ lwz 0,8(7)
+ add 14,14,3
+ add 14,14,5
+
+ lwz 18,8(31)
+ rotrwi 3,10,6
+ rotrwi 4,10,11
+ and 5,11,10
+ xor 3,3,4
+ add 6,6,0
+ andc 0,12,10
+ rotrwi 4,4,14
+ or 5,5,0
+ add 6,6,18
+ xor 3,3,4
+ add 6,6,5
+ add 6,6,3
+
+ rotrwi 3,14,2
+ rotrwi 4,14,13
+ and 5,14,15
+ and 0,14,8
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,15,8
+ xor 3,3,4
+ add 9,9,6
+ xor 5,5,0
+ lwz 0,12(7)
+ add 6,6,3
+ add 6,6,5
+
+ lwz 19,12(31)
+ rotrwi 3,9,6
+ rotrwi 4,9,11
+ and 5,10,9
+ xor 3,3,4
+ add 12,12,0
+ andc 0,11,9
+ rotrwi 4,4,14
+ or 5,5,0
+ add 12,12,19
+ xor 3,3,4
+ add 12,12,5
+ add 12,12,3
+
+ rotrwi 3,6,2
+ rotrwi 4,6,13
+ and 5,6,14
+ and 0,6,15
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,14,15
+ xor 3,3,4
+ add 8,8,12
+ xor 5,5,0
+ lwz 0,16(7)
+ add 12,12,3
+ add 12,12,5
+
+ lwz 20,16(31)
+ rotrwi 3,8,6
+ rotrwi 4,8,11
+ and 5,9,8
+ xor 3,3,4
+ add 11,11,0
+ andc 0,10,8
+ rotrwi 4,4,14
+ or 5,5,0
+ add 11,11,20
+ xor 3,3,4
+ add 11,11,5
+ add 11,11,3
+
+ rotrwi 3,12,2
+ rotrwi 4,12,13
+ and 5,12,6
+ and 0,12,14
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,6,14
+ xor 3,3,4
+ add 15,15,11
+ xor 5,5,0
+ lwz 0,20(7)
+ add 11,11,3
+ add 11,11,5
+
+ lwz 21,20(31)
+ rotrwi 3,15,6
+ rotrwi 4,15,11
+ and 5,8,15
+ xor 3,3,4
+ add 10,10,0
+ andc 0,9,15
+ rotrwi 4,4,14
+ or 5,5,0
+ add 10,10,21
+ xor 3,3,4
+ add 10,10,5
+ add 10,10,3
+
+ rotrwi 3,11,2
+ rotrwi 4,11,13
+ and 5,11,12
+ and 0,11,6
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,12,6
+ xor 3,3,4
+ add 14,14,10
+ xor 5,5,0
+ lwz 0,24(7)
+ add 10,10,3
+ add 10,10,5
+
+ lwz 22,24(31)
+ rotrwi 3,14,6
+ rotrwi 4,14,11
+ and 5,15,14
+ xor 3,3,4
+ add 9,9,0
+ andc 0,8,14
+ rotrwi 4,4,14
+ or 5,5,0
+ add 9,9,22
+ xor 3,3,4
+ add 9,9,5
+ add 9,9,3
+
+ rotrwi 3,10,2
+ rotrwi 4,10,13
+ and 5,10,11
+ and 0,10,12
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,11,12
+ xor 3,3,4
+ add 6,6,9
+ xor 5,5,0
+ lwz 0,28(7)
+ add 9,9,3
+ add 9,9,5
+
+ lwz 23,28(31)
+ rotrwi 3,6,6
+ rotrwi 4,6,11
+ and 5,14,6
+ xor 3,3,4
+ add 8,8,0
+ andc 0,15,6
+ rotrwi 4,4,14
+ or 5,5,0
+ add 8,8,23
+ xor 3,3,4
+ add 8,8,5
+ add 8,8,3
+
+ rotrwi 3,9,2
+ rotrwi 4,9,13
+ and 5,9,10
+ and 0,9,11
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,10,11
+ xor 3,3,4
+ add 12,12,8
+ xor 5,5,0
+ lwz 0,32(7)
+ add 8,8,3
+ add 8,8,5
+
+ lwz 24,32(31)
+ rotrwi 3,12,6
+ rotrwi 4,12,11
+ and 5,6,12
+ xor 3,3,4
+ add 15,15,0
+ andc 0,14,12
+ rotrwi 4,4,14
+ or 5,5,0
+ add 15,15,24
+ xor 3,3,4
+ add 15,15,5
+ add 15,15,3
+
+ rotrwi 3,8,2
+ rotrwi 4,8,13
+ and 5,8,9
+ and 0,8,10
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,9,10
+ xor 3,3,4
+ add 11,11,15
+ xor 5,5,0
+ lwz 0,36(7)
+ add 15,15,3
+ add 15,15,5
+
+ lwz 25,36(31)
+ rotrwi 3,11,6
+ rotrwi 4,11,11
+ and 5,12,11
+ xor 3,3,4
+ add 14,14,0
+ andc 0,6,11
+ rotrwi 4,4,14
+ or 5,5,0
+ add 14,14,25
+ xor 3,3,4
+ add 14,14,5
+ add 14,14,3
+
+ rotrwi 3,15,2
+ rotrwi 4,15,13
+ and 5,15,8
+ and 0,15,9
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,8,9
+ xor 3,3,4
+ add 10,10,14
+ xor 5,5,0
+ lwz 0,40(7)
+ add 14,14,3
+ add 14,14,5
+
+ lwz 26,40(31)
+ rotrwi 3,10,6
+ rotrwi 4,10,11
+ and 5,11,10
+ xor 3,3,4
+ add 6,6,0
+ andc 0,12,10
+ rotrwi 4,4,14
+ or 5,5,0
+ add 6,6,26
+ xor 3,3,4
+ add 6,6,5
+ add 6,6,3
+
+ rotrwi 3,14,2
+ rotrwi 4,14,13
+ and 5,14,15
+ and 0,14,8
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,15,8
+ xor 3,3,4
+ add 9,9,6
+ xor 5,5,0
+ lwz 0,44(7)
+ add 6,6,3
+ add 6,6,5
+
+ lwz 27,44(31)
+ rotrwi 3,9,6
+ rotrwi 4,9,11
+ and 5,10,9
+ xor 3,3,4
+ add 12,12,0
+ andc 0,11,9
+ rotrwi 4,4,14
+ or 5,5,0
+ add 12,12,27
+ xor 3,3,4
+ add 12,12,5
+ add 12,12,3
+
+ rotrwi 3,6,2
+ rotrwi 4,6,13
+ and 5,6,14
+ and 0,6,15
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,14,15
+ xor 3,3,4
+ add 8,8,12
+ xor 5,5,0
+ lwz 0,48(7)
+ add 12,12,3
+ add 12,12,5
+
+ lwz 28,48(31)
+ rotrwi 3,8,6
+ rotrwi 4,8,11
+ and 5,9,8
+ xor 3,3,4
+ add 11,11,0
+ andc 0,10,8
+ rotrwi 4,4,14
+ or 5,5,0
+ add 11,11,28
+ xor 3,3,4
+ add 11,11,5
+ add 11,11,3
+
+ rotrwi 3,12,2
+ rotrwi 4,12,13
+ and 5,12,6
+ and 0,12,14
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,6,14
+ xor 3,3,4
+ add 15,15,11
+ xor 5,5,0
+ lwz 0,52(7)
+ add 11,11,3
+ add 11,11,5
+
+ lwz 29,52(31)
+ rotrwi 3,15,6
+ rotrwi 4,15,11
+ and 5,8,15
+ xor 3,3,4
+ add 10,10,0
+ andc 0,9,15
+ rotrwi 4,4,14
+ or 5,5,0
+ add 10,10,29
+ xor 3,3,4
+ add 10,10,5
+ add 10,10,3
+
+ rotrwi 3,11,2
+ rotrwi 4,11,13
+ and 5,11,12
+ and 0,11,6
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,12,6
+ xor 3,3,4
+ add 14,14,10
+ xor 5,5,0
+ lwz 0,56(7)
+ add 10,10,3
+ add 10,10,5
+
+ lwz 30,56(31)
+ rotrwi 3,14,6
+ rotrwi 4,14,11
+ and 5,15,14
+ xor 3,3,4
+ add 9,9,0
+ andc 0,8,14
+ rotrwi 4,4,14
+ or 5,5,0
+ add 9,9,30
+ xor 3,3,4
+ add 9,9,5
+ add 9,9,3
+
+ rotrwi 3,10,2
+ rotrwi 4,10,13
+ and 5,10,11
+ and 0,10,12
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,11,12
+ xor 3,3,4
+ add 6,6,9
+ xor 5,5,0
+ lwz 0,60(7)
+ add 9,9,3
+ add 9,9,5
+
+ lwz 31,60(31)
+ rotrwi 3,6,6
+ rotrwi 4,6,11
+ and 5,14,6
+ xor 3,3,4
+ add 8,8,0
+ andc 0,15,6
+ rotrwi 4,4,14
+ or 5,5,0
+ add 8,8,31
+ xor 3,3,4
+ add 8,8,5
+ add 8,8,3
+
+ rotrwi 3,9,2
+ rotrwi 4,9,13
+ and 5,9,10
+ and 0,9,11
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,10,11
+ xor 3,3,4
+ add 12,12,8
+ xor 5,5,0
+ add 8,8,3
+ add 8,8,5
+
+ li 5,3
+ mtctr 5
+.align 4
+.Lrounds:
+ addi 7,7,64
+ rotrwi 3,17,7
+ rotrwi 4,17,18
+ rotrwi 5,30,17
+ rotrwi 0,30,19
+ xor 3,3,4
+ srwi 4,17,3
+ xor 5,5,0
+ srwi 0,30,10
+ add 16,16,25
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,0(7)
+ add 16,16,3
+ add 16,16,5
+ rotrwi 3,12,6
+ rotrwi 4,12,11
+ and 5,6,12
+ xor 3,3,4
+ add 15,15,0
+ andc 0,14,12
+ rotrwi 4,4,14
+ or 5,5,0
+ add 15,15,16
+ xor 3,3,4
+ add 15,15,5
+ add 15,15,3
+
+ rotrwi 3,8,2
+ rotrwi 4,8,13
+ and 5,8,9
+ and 0,8,10
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,9,10
+ xor 3,3,4
+ add 11,11,15
+ xor 5,5,0
+ add 15,15,3
+ add 15,15,5
+
+ rotrwi 3,18,7
+ rotrwi 4,18,18
+ rotrwi 5,31,17
+ rotrwi 0,31,19
+ xor 3,3,4
+ srwi 4,18,3
+ xor 5,5,0
+ srwi 0,31,10
+ add 17,17,26
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,4(7)
+ add 17,17,3
+ add 17,17,5
+ rotrwi 3,11,6
+ rotrwi 4,11,11
+ and 5,12,11
+ xor 3,3,4
+ add 14,14,0
+ andc 0,6,11
+ rotrwi 4,4,14
+ or 5,5,0
+ add 14,14,17
+ xor 3,3,4
+ add 14,14,5
+ add 14,14,3
+
+ rotrwi 3,15,2
+ rotrwi 4,15,13
+ and 5,15,8
+ and 0,15,9
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,8,9
+ xor 3,3,4
+ add 10,10,14
+ xor 5,5,0
+ add 14,14,3
+ add 14,14,5
+
+ rotrwi 3,19,7
+ rotrwi 4,19,18
+ rotrwi 5,16,17
+ rotrwi 0,16,19
+ xor 3,3,4
+ srwi 4,19,3
+ xor 5,5,0
+ srwi 0,16,10
+ add 18,18,27
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,8(7)
+ add 18,18,3
+ add 18,18,5
+ rotrwi 3,10,6
+ rotrwi 4,10,11
+ and 5,11,10
+ xor 3,3,4
+ add 6,6,0
+ andc 0,12,10
+ rotrwi 4,4,14
+ or 5,5,0
+ add 6,6,18
+ xor 3,3,4
+ add 6,6,5
+ add 6,6,3
+
+ rotrwi 3,14,2
+ rotrwi 4,14,13
+ and 5,14,15
+ and 0,14,8
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,15,8
+ xor 3,3,4
+ add 9,9,6
+ xor 5,5,0
+ add 6,6,3
+ add 6,6,5
+
+ rotrwi 3,20,7
+ rotrwi 4,20,18
+ rotrwi 5,17,17
+ rotrwi 0,17,19
+ xor 3,3,4
+ srwi 4,20,3
+ xor 5,5,0
+ srwi 0,17,10
+ add 19,19,28
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,12(7)
+ add 19,19,3
+ add 19,19,5
+ rotrwi 3,9,6
+ rotrwi 4,9,11
+ and 5,10,9
+ xor 3,3,4
+ add 12,12,0
+ andc 0,11,9
+ rotrwi 4,4,14
+ or 5,5,0
+ add 12,12,19
+ xor 3,3,4
+ add 12,12,5
+ add 12,12,3
+
+ rotrwi 3,6,2
+ rotrwi 4,6,13
+ and 5,6,14
+ and 0,6,15
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,14,15
+ xor 3,3,4
+ add 8,8,12
+ xor 5,5,0
+ add 12,12,3
+ add 12,12,5
+
+ rotrwi 3,21,7
+ rotrwi 4,21,18
+ rotrwi 5,18,17
+ rotrwi 0,18,19
+ xor 3,3,4
+ srwi 4,21,3
+ xor 5,5,0
+ srwi 0,18,10
+ add 20,20,29
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,16(7)
+ add 20,20,3
+ add 20,20,5
+ rotrwi 3,8,6
+ rotrwi 4,8,11
+ and 5,9,8
+ xor 3,3,4
+ add 11,11,0
+ andc 0,10,8
+ rotrwi 4,4,14
+ or 5,5,0
+ add 11,11,20
+ xor 3,3,4
+ add 11,11,5
+ add 11,11,3
+
+ rotrwi 3,12,2
+ rotrwi 4,12,13
+ and 5,12,6
+ and 0,12,14
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,6,14
+ xor 3,3,4
+ add 15,15,11
+ xor 5,5,0
+ add 11,11,3
+ add 11,11,5
+
+ rotrwi 3,22,7
+ rotrwi 4,22,18
+ rotrwi 5,19,17
+ rotrwi 0,19,19
+ xor 3,3,4
+ srwi 4,22,3
+ xor 5,5,0
+ srwi 0,19,10
+ add 21,21,30
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,20(7)
+ add 21,21,3
+ add 21,21,5
+ rotrwi 3,15,6
+ rotrwi 4,15,11
+ and 5,8,15
+ xor 3,3,4
+ add 10,10,0
+ andc 0,9,15
+ rotrwi 4,4,14
+ or 5,5,0
+ add 10,10,21
+ xor 3,3,4
+ add 10,10,5
+ add 10,10,3
+
+ rotrwi 3,11,2
+ rotrwi 4,11,13
+ and 5,11,12
+ and 0,11,6
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,12,6
+ xor 3,3,4
+ add 14,14,10
+ xor 5,5,0
+ add 10,10,3
+ add 10,10,5
+
+ rotrwi 3,23,7
+ rotrwi 4,23,18
+ rotrwi 5,20,17
+ rotrwi 0,20,19
+ xor 3,3,4
+ srwi 4,23,3
+ xor 5,5,0
+ srwi 0,20,10
+ add 22,22,31
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,24(7)
+ add 22,22,3
+ add 22,22,5
+ rotrwi 3,14,6
+ rotrwi 4,14,11
+ and 5,15,14
+ xor 3,3,4
+ add 9,9,0
+ andc 0,8,14
+ rotrwi 4,4,14
+ or 5,5,0
+ add 9,9,22
+ xor 3,3,4
+ add 9,9,5
+ add 9,9,3
+
+ rotrwi 3,10,2
+ rotrwi 4,10,13
+ and 5,10,11
+ and 0,10,12
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,11,12
+ xor 3,3,4
+ add 6,6,9
+ xor 5,5,0
+ add 9,9,3
+ add 9,9,5
+
+ rotrwi 3,24,7
+ rotrwi 4,24,18
+ rotrwi 5,21,17
+ rotrwi 0,21,19
+ xor 3,3,4
+ srwi 4,24,3
+ xor 5,5,0
+ srwi 0,21,10
+ add 23,23,16
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,28(7)
+ add 23,23,3
+ add 23,23,5
+ rotrwi 3,6,6
+ rotrwi 4,6,11
+ and 5,14,6
+ xor 3,3,4
+ add 8,8,0
+ andc 0,15,6
+ rotrwi 4,4,14
+ or 5,5,0
+ add 8,8,23
+ xor 3,3,4
+ add 8,8,5
+ add 8,8,3
+
+ rotrwi 3,9,2
+ rotrwi 4,9,13
+ and 5,9,10
+ and 0,9,11
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,10,11
+ xor 3,3,4
+ add 12,12,8
+ xor 5,5,0
+ add 8,8,3
+ add 8,8,5
+
+ rotrwi 3,25,7
+ rotrwi 4,25,18
+ rotrwi 5,22,17
+ rotrwi 0,22,19
+ xor 3,3,4
+ srwi 4,25,3
+ xor 5,5,0
+ srwi 0,22,10
+ add 24,24,17
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,32(7)
+ add 24,24,3
+ add 24,24,5
+ rotrwi 3,12,6
+ rotrwi 4,12,11
+ and 5,6,12
+ xor 3,3,4
+ add 15,15,0
+ andc 0,14,12
+ rotrwi 4,4,14
+ or 5,5,0
+ add 15,15,24
+ xor 3,3,4
+ add 15,15,5
+ add 15,15,3
+
+ rotrwi 3,8,2
+ rotrwi 4,8,13
+ and 5,8,9
+ and 0,8,10
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,9,10
+ xor 3,3,4
+ add 11,11,15
+ xor 5,5,0
+ add 15,15,3
+ add 15,15,5
+
+ rotrwi 3,26,7
+ rotrwi 4,26,18
+ rotrwi 5,23,17
+ rotrwi 0,23,19
+ xor 3,3,4
+ srwi 4,26,3
+ xor 5,5,0
+ srwi 0,23,10
+ add 25,25,18
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,36(7)
+ add 25,25,3
+ add 25,25,5
+ rotrwi 3,11,6
+ rotrwi 4,11,11
+ and 5,12,11
+ xor 3,3,4
+ add 14,14,0
+ andc 0,6,11
+ rotrwi 4,4,14
+ or 5,5,0
+ add 14,14,25
+ xor 3,3,4
+ add 14,14,5
+ add 14,14,3
+
+ rotrwi 3,15,2
+ rotrwi 4,15,13
+ and 5,15,8
+ and 0,15,9
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,8,9
+ xor 3,3,4
+ add 10,10,14
+ xor 5,5,0
+ add 14,14,3
+ add 14,14,5
+
+ rotrwi 3,27,7
+ rotrwi 4,27,18
+ rotrwi 5,24,17
+ rotrwi 0,24,19
+ xor 3,3,4
+ srwi 4,27,3
+ xor 5,5,0
+ srwi 0,24,10
+ add 26,26,19
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,40(7)
+ add 26,26,3
+ add 26,26,5
+ rotrwi 3,10,6
+ rotrwi 4,10,11
+ and 5,11,10
+ xor 3,3,4
+ add 6,6,0
+ andc 0,12,10
+ rotrwi 4,4,14
+ or 5,5,0
+ add 6,6,26
+ xor 3,3,4
+ add 6,6,5
+ add 6,6,3
+
+ rotrwi 3,14,2
+ rotrwi 4,14,13
+ and 5,14,15
+ and 0,14,8
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,15,8
+ xor 3,3,4
+ add 9,9,6
+ xor 5,5,0
+ add 6,6,3
+ add 6,6,5
+
+ rotrwi 3,28,7
+ rotrwi 4,28,18
+ rotrwi 5,25,17
+ rotrwi 0,25,19
+ xor 3,3,4
+ srwi 4,28,3
+ xor 5,5,0
+ srwi 0,25,10
+ add 27,27,20
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,44(7)
+ add 27,27,3
+ add 27,27,5
+ rotrwi 3,9,6
+ rotrwi 4,9,11
+ and 5,10,9
+ xor 3,3,4
+ add 12,12,0
+ andc 0,11,9
+ rotrwi 4,4,14
+ or 5,5,0
+ add 12,12,27
+ xor 3,3,4
+ add 12,12,5
+ add 12,12,3
+
+ rotrwi 3,6,2
+ rotrwi 4,6,13
+ and 5,6,14
+ and 0,6,15
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,14,15
+ xor 3,3,4
+ add 8,8,12
+ xor 5,5,0
+ add 12,12,3
+ add 12,12,5
+
+ rotrwi 3,29,7
+ rotrwi 4,29,18
+ rotrwi 5,26,17
+ rotrwi 0,26,19
+ xor 3,3,4
+ srwi 4,29,3
+ xor 5,5,0
+ srwi 0,26,10
+ add 28,28,21
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,48(7)
+ add 28,28,3
+ add 28,28,5
+ rotrwi 3,8,6
+ rotrwi 4,8,11
+ and 5,9,8
+ xor 3,3,4
+ add 11,11,0
+ andc 0,10,8
+ rotrwi 4,4,14
+ or 5,5,0
+ add 11,11,28
+ xor 3,3,4
+ add 11,11,5
+ add 11,11,3
+
+ rotrwi 3,12,2
+ rotrwi 4,12,13
+ and 5,12,6
+ and 0,12,14
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,6,14
+ xor 3,3,4
+ add 15,15,11
+ xor 5,5,0
+ add 11,11,3
+ add 11,11,5
+
+ rotrwi 3,30,7
+ rotrwi 4,30,18
+ rotrwi 5,27,17
+ rotrwi 0,27,19
+ xor 3,3,4
+ srwi 4,30,3
+ xor 5,5,0
+ srwi 0,27,10
+ add 29,29,22
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,52(7)
+ add 29,29,3
+ add 29,29,5
+ rotrwi 3,15,6
+ rotrwi 4,15,11
+ and 5,8,15
+ xor 3,3,4
+ add 10,10,0
+ andc 0,9,15
+ rotrwi 4,4,14
+ or 5,5,0
+ add 10,10,29
+ xor 3,3,4
+ add 10,10,5
+ add 10,10,3
+
+ rotrwi 3,11,2
+ rotrwi 4,11,13
+ and 5,11,12
+ and 0,11,6
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,12,6
+ xor 3,3,4
+ add 14,14,10
+ xor 5,5,0
+ add 10,10,3
+ add 10,10,5
+
+ rotrwi 3,31,7
+ rotrwi 4,31,18
+ rotrwi 5,28,17
+ rotrwi 0,28,19
+ xor 3,3,4
+ srwi 4,31,3
+ xor 5,5,0
+ srwi 0,28,10
+ add 30,30,23
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,56(7)
+ add 30,30,3
+ add 30,30,5
+ rotrwi 3,14,6
+ rotrwi 4,14,11
+ and 5,15,14
+ xor 3,3,4
+ add 9,9,0
+ andc 0,8,14
+ rotrwi 4,4,14
+ or 5,5,0
+ add 9,9,30
+ xor 3,3,4
+ add 9,9,5
+ add 9,9,3
+
+ rotrwi 3,10,2
+ rotrwi 4,10,13
+ and 5,10,11
+ and 0,10,12
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,11,12
+ xor 3,3,4
+ add 6,6,9
+ xor 5,5,0
+ add 9,9,3
+ add 9,9,5
+
+ rotrwi 3,16,7
+ rotrwi 4,16,18
+ rotrwi 5,29,17
+ rotrwi 0,29,19
+ xor 3,3,4
+ srwi 4,16,3
+ xor 5,5,0
+ srwi 0,29,10
+ add 31,31,24
+ xor 3,3,4
+ xor 5,5,0
+ lwz 0,60(7)
+ add 31,31,3
+ add 31,31,5
+ rotrwi 3,6,6
+ rotrwi 4,6,11
+ and 5,14,6
+ xor 3,3,4
+ add 8,8,0
+ andc 0,15,6
+ rotrwi 4,4,14
+ or 5,5,0
+ add 8,8,31
+ xor 3,3,4
+ add 8,8,5
+ add 8,8,3
+
+ rotrwi 3,9,2
+ rotrwi 4,9,13
+ and 5,9,10
+ and 0,9,11
+ xor 3,3,4
+ rotrwi 4,4,9
+ xor 5,5,0
+ and 0,10,11
+ xor 3,3,4
+ add 12,12,8
+ xor 5,5,0
+ add 8,8,3
+ add 8,8,5
+
+ bdnz .Lrounds
+
+ lwz 3,104(1)
+ lwz 31,100(1)
+ lwz 5,96(1)
+ subi 7,7,192
+
+ lwz 16,0(3)
+ lwz 17,4(3)
+ lwz 18,8(3)
+ lwz 19,12(3)
+ lwz 20,16(3)
+ lwz 21,20(3)
+ lwz 22,24(3)
+ addi 31,31,64
+ lwz 23,28(3)
+ add 8,8,16
+ add 9,9,17
+ stw 31,100(1)
+ add 10,10,18
+ stw 8,0(3)
+ add 11,11,19
+ stw 9,4(3)
+ add 12,12,20
+ stw 10,8(3)
+ add 6,6,21
+ stw 11,12(3)
+ add 14,14,22
+ stw 12,16(3)
+ add 15,15,23
+ stw 6,20(3)
+ stw 14,24(3)
+ .long 0x7c1f2840
+ stw 15,28(3)
+ bne .Lsha2_block_private
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size sha256_block_ppc,.-sha256_block_ppc
+.align 6
+.LPICmeup:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 7
+ addi 7,7,56
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.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
diff --git a/sys/crypto/openssl/powerpc/sha256p8-ppc.S b/sys/crypto/openssl/powerpc/sha256p8-ppc.S
new file mode 100644
index 000000000000..092f2090f02f
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/sha256p8-ppc.S
@@ -0,0 +1,736 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from sha512p8-ppc.pl. */
+.machine "any"
+.text
+
+.globl sha256_block_p8
+.type sha256_block_p8,@function
+.align 6
+sha256_block_p8:
+ stwu 1,-328(1)
+ mflr 8
+ li 10,175
+ li 11,191
+ stvx 24,10,1
+ addi 10,10,32
+ mfspr 12,256
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ li 11,-4096+255
+ stw 12,300(1)
+ li 10,0x10
+ stw 26,304(1)
+ li 26,0x20
+ stw 27,308(1)
+ li 27,0x30
+ stw 28,312(1)
+ li 28,0x40
+ stw 29,316(1)
+ li 29,0x50
+ stw 30,320(1)
+ li 30,0x60
+ stw 31,324(1)
+ li 31,0x70
+ stw 8,332(1)
+ mtspr 256,11
+
+ bl .LPICmeup
+ addi 11,1,47
+ .long 0x7C001E19
+ .long 0x7C8A1E19
+ 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
+ li 0,3
+ b .Loop
+.align 5
+.Loop:
+ lvx 28,0,6
+ .long 0x7D002699
+ addi 4,4,16
+ mr 7,6
+ stvx 0,0,11
+ stvx 1,10,11
+ stvx 2,26,11
+ stvx 3,27,11
+ stvx 4,28,11
+ stvx 5,29,11
+ stvx 6,30,11
+ stvx 7,31,11
+ vadduwm 7,7,28
+ lvx 28,10,6
+ vadduwm 7,7,8
+ vsel 29,6,5,4
+ vadduwm 6,6,28
+ vadduwm 7,7,29
+ .long 0x13C4FE82
+ vadduwm 7,7,30
+ vxor 29,0,1
+ vsel 29,1,2,29
+ vadduwm 3,3,7
+ .long 0x13C08682
+ vadduwm 30,30,29
+ vadduwm 7,7,30
+ lvx 28,26,7
+ vsldoi 9,8,8,4
+ vadduwm 6,6,9
+ vsel 29,5,4,3
+ vadduwm 5,5,28
+ vadduwm 6,6,29
+ .long 0x13C3FE82
+ vadduwm 6,6,30
+ vxor 29,7,0
+ vsel 29,0,1,29
+ vadduwm 2,2,6
+ .long 0x13C78682
+ vadduwm 30,30,29
+ vadduwm 6,6,30
+ lvx 28,27,7
+ vsldoi 10,9,9,4
+ vadduwm 5,5,10
+ vsel 29,4,3,2
+ vadduwm 4,4,28
+ vadduwm 5,5,29
+ .long 0x13C2FE82
+ vadduwm 5,5,30
+ vxor 29,6,7
+ vsel 29,7,0,29
+ vadduwm 1,1,5
+ .long 0x13C68682
+ vadduwm 30,30,29
+ vadduwm 5,5,30
+ lvx 28,28,7
+ .long 0x7D802699
+ addi 4,4,16
+ vsldoi 11,10,10,4
+ vadduwm 4,4,11
+ vsel 29,3,2,1
+ vadduwm 3,3,28
+ vadduwm 4,4,29
+ .long 0x13C1FE82
+ vadduwm 4,4,30
+ vxor 29,5,6
+ vsel 29,6,7,29
+ vadduwm 0,0,4
+ .long 0x13C58682
+ vadduwm 30,30,29
+ vadduwm 4,4,30
+ lvx 28,29,7
+ vadduwm 3,3,12
+ vsel 29,2,1,0
+ vadduwm 2,2,28
+ vadduwm 3,3,29
+ .long 0x13C0FE82
+ vadduwm 3,3,30
+ vxor 29,4,5
+ vsel 29,5,6,29
+ vadduwm 7,7,3
+ .long 0x13C48682
+ vadduwm 30,30,29
+ vadduwm 3,3,30
+ lvx 28,30,7
+ vsldoi 13,12,12,4
+ vadduwm 2,2,13
+ vsel 29,1,0,7
+ vadduwm 1,1,28
+ vadduwm 2,2,29
+ .long 0x13C7FE82
+ vadduwm 2,2,30
+ vxor 29,3,4
+ vsel 29,4,5,29
+ vadduwm 6,6,2
+ .long 0x13C38682
+ vadduwm 30,30,29
+ vadduwm 2,2,30
+ lvx 28,31,7
+ addi 7,7,0x80
+ vsldoi 14,13,13,4
+ vadduwm 1,1,14
+ vsel 29,0,7,6
+ vadduwm 0,0,28
+ vadduwm 1,1,29
+ .long 0x13C6FE82
+ vadduwm 1,1,30
+ vxor 29,2,3
+ vsel 29,3,4,29
+ vadduwm 5,5,1
+ .long 0x13C28682
+ vadduwm 30,30,29
+ vadduwm 1,1,30
+ lvx 28,0,7
+ .long 0x7E002699
+ addi 4,4,16
+ vsldoi 15,14,14,4
+ vadduwm 0,0,15
+ vsel 29,7,6,5
+ vadduwm 7,7,28
+ vadduwm 0,0,29
+ .long 0x13C5FE82
+ vadduwm 0,0,30
+ vxor 29,1,2
+ vsel 29,2,3,29
+ vadduwm 4,4,0
+ .long 0x13C18682
+ vadduwm 30,30,29
+ vadduwm 0,0,30
+ lvx 28,10,7
+ vadduwm 7,7,16
+ vsel 29,6,5,4
+ vadduwm 6,6,28
+ vadduwm 7,7,29
+ .long 0x13C4FE82
+ vadduwm 7,7,30
+ vxor 29,0,1
+ vsel 29,1,2,29
+ vadduwm 3,3,7
+ .long 0x13C08682
+ vadduwm 30,30,29
+ vadduwm 7,7,30
+ lvx 28,26,7
+ vsldoi 17,16,16,4
+ vadduwm 6,6,17
+ vsel 29,5,4,3
+ vadduwm 5,5,28
+ vadduwm 6,6,29
+ .long 0x13C3FE82
+ vadduwm 6,6,30
+ vxor 29,7,0
+ vsel 29,0,1,29
+ vadduwm 2,2,6
+ .long 0x13C78682
+ vadduwm 30,30,29
+ vadduwm 6,6,30
+ lvx 28,27,7
+ vsldoi 18,17,17,4
+ vadduwm 5,5,18
+ vsel 29,4,3,2
+ vadduwm 4,4,28
+ vadduwm 5,5,29
+ .long 0x13C2FE82
+ vadduwm 5,5,30
+ vxor 29,6,7
+ vsel 29,7,0,29
+ vadduwm 1,1,5
+ .long 0x13C68682
+ vadduwm 30,30,29
+ vadduwm 5,5,30
+ lvx 28,28,7
+ .long 0x7F002699
+ addi 4,4,16
+ vsldoi 19,18,18,4
+ vadduwm 4,4,19
+ vsel 29,3,2,1
+ vadduwm 3,3,28
+ vadduwm 4,4,29
+ .long 0x13C1FE82
+ vadduwm 4,4,30
+ vxor 29,5,6
+ vsel 29,6,7,29
+ vadduwm 0,0,4
+ .long 0x13C58682
+ vadduwm 30,30,29
+ vadduwm 4,4,30
+ lvx 28,29,7
+ vadduwm 3,3,24
+ vsel 29,2,1,0
+ vadduwm 2,2,28
+ vadduwm 3,3,29
+ .long 0x13C0FE82
+ vadduwm 3,3,30
+ vxor 29,4,5
+ vsel 29,5,6,29
+ vadduwm 7,7,3
+ .long 0x13C48682
+ vadduwm 30,30,29
+ vadduwm 3,3,30
+ lvx 28,30,7
+ vsldoi 25,24,24,4
+ vadduwm 2,2,25
+ vsel 29,1,0,7
+ vadduwm 1,1,28
+ vadduwm 2,2,29
+ .long 0x13C7FE82
+ vadduwm 2,2,30
+ vxor 29,3,4
+ vsel 29,4,5,29
+ vadduwm 6,6,2
+ .long 0x13C38682
+ vadduwm 30,30,29
+ vadduwm 2,2,30
+ lvx 28,31,7
+ addi 7,7,0x80
+ vsldoi 26,25,25,4
+ vadduwm 1,1,26
+ vsel 29,0,7,6
+ vadduwm 0,0,28
+ vadduwm 1,1,29
+ .long 0x13C6FE82
+ vadduwm 1,1,30
+ vxor 29,2,3
+ vsel 29,3,4,29
+ vadduwm 5,5,1
+ .long 0x13C28682
+ vadduwm 30,30,29
+ vadduwm 1,1,30
+ lvx 28,0,7
+ vsldoi 27,26,26,4
+ .long 0x13C90682
+ vadduwm 8,8,30
+ .long 0x13DA7E82
+ vadduwm 8,8,30
+ vadduwm 8,8,17
+ vadduwm 0,0,27
+ vsel 29,7,6,5
+ vadduwm 7,7,28
+ vadduwm 0,0,29
+ .long 0x13C5FE82
+ vadduwm 0,0,30
+ vxor 29,1,2
+ vsel 29,2,3,29
+ vadduwm 4,4,0
+ .long 0x13C18682
+ vadduwm 30,30,29
+ vadduwm 0,0,30
+ lvx 28,10,7
+ mtctr 0
+ b .L16_xx
+.align 5
+.L16_xx:
+ .long 0x13CA0682
+ vadduwm 9,9,30
+ .long 0x13DB7E82
+ vadduwm 9,9,30
+ vadduwm 9,9,18
+ vadduwm 7,7,8
+ vsel 29,6,5,4
+ vadduwm 6,6,28
+ vadduwm 7,7,29
+ .long 0x13C4FE82
+ vadduwm 7,7,30
+ vxor 29,0,1
+ vsel 29,1,2,29
+ vadduwm 3,3,7
+ .long 0x13C08682
+ vadduwm 30,30,29
+ vadduwm 7,7,30
+ lvx 28,26,7
+ .long 0x13CB0682
+ vadduwm 10,10,30
+ .long 0x13C87E82
+ vadduwm 10,10,30
+ vadduwm 10,10,19
+ vadduwm 6,6,9
+ vsel 29,5,4,3
+ vadduwm 5,5,28
+ vadduwm 6,6,29
+ .long 0x13C3FE82
+ vadduwm 6,6,30
+ vxor 29,7,0
+ vsel 29,0,1,29
+ vadduwm 2,2,6
+ .long 0x13C78682
+ vadduwm 30,30,29
+ vadduwm 6,6,30
+ lvx 28,27,7
+ .long 0x13CC0682
+ vadduwm 11,11,30
+ .long 0x13C97E82
+ vadduwm 11,11,30
+ vadduwm 11,11,24
+ vadduwm 5,5,10
+ vsel 29,4,3,2
+ vadduwm 4,4,28
+ vadduwm 5,5,29
+ .long 0x13C2FE82
+ vadduwm 5,5,30
+ vxor 29,6,7
+ vsel 29,7,0,29
+ vadduwm 1,1,5
+ .long 0x13C68682
+ vadduwm 30,30,29
+ vadduwm 5,5,30
+ lvx 28,28,7
+ .long 0x13CD0682
+ vadduwm 12,12,30
+ .long 0x13CA7E82
+ vadduwm 12,12,30
+ vadduwm 12,12,25
+ vadduwm 4,4,11
+ vsel 29,3,2,1
+ vadduwm 3,3,28
+ vadduwm 4,4,29
+ .long 0x13C1FE82
+ vadduwm 4,4,30
+ vxor 29,5,6
+ vsel 29,6,7,29
+ vadduwm 0,0,4
+ .long 0x13C58682
+ vadduwm 30,30,29
+ vadduwm 4,4,30
+ lvx 28,29,7
+ .long 0x13CE0682
+ vadduwm 13,13,30
+ .long 0x13CB7E82
+ vadduwm 13,13,30
+ vadduwm 13,13,26
+ vadduwm 3,3,12
+ vsel 29,2,1,0
+ vadduwm 2,2,28
+ vadduwm 3,3,29
+ .long 0x13C0FE82
+ vadduwm 3,3,30
+ vxor 29,4,5
+ vsel 29,5,6,29
+ vadduwm 7,7,3
+ .long 0x13C48682
+ vadduwm 30,30,29
+ vadduwm 3,3,30
+ lvx 28,30,7
+ .long 0x13CF0682
+ vadduwm 14,14,30
+ .long 0x13CC7E82
+ vadduwm 14,14,30
+ vadduwm 14,14,27
+ vadduwm 2,2,13
+ vsel 29,1,0,7
+ vadduwm 1,1,28
+ vadduwm 2,2,29
+ .long 0x13C7FE82
+ vadduwm 2,2,30
+ vxor 29,3,4
+ vsel 29,4,5,29
+ vadduwm 6,6,2
+ .long 0x13C38682
+ vadduwm 30,30,29
+ vadduwm 2,2,30
+ lvx 28,31,7
+ addi 7,7,0x80
+ .long 0x13D00682
+ vadduwm 15,15,30
+ .long 0x13CD7E82
+ vadduwm 15,15,30
+ vadduwm 15,15,8
+ vadduwm 1,1,14
+ vsel 29,0,7,6
+ vadduwm 0,0,28
+ vadduwm 1,1,29
+ .long 0x13C6FE82
+ vadduwm 1,1,30
+ vxor 29,2,3
+ vsel 29,3,4,29
+ vadduwm 5,5,1
+ .long 0x13C28682
+ vadduwm 30,30,29
+ vadduwm 1,1,30
+ lvx 28,0,7
+ .long 0x13D10682
+ vadduwm 16,16,30
+ .long 0x13CE7E82
+ vadduwm 16,16,30
+ vadduwm 16,16,9
+ vadduwm 0,0,15
+ vsel 29,7,6,5
+ vadduwm 7,7,28
+ vadduwm 0,0,29
+ .long 0x13C5FE82
+ vadduwm 0,0,30
+ vxor 29,1,2
+ vsel 29,2,3,29
+ vadduwm 4,4,0
+ .long 0x13C18682
+ vadduwm 30,30,29
+ vadduwm 0,0,30
+ lvx 28,10,7
+ .long 0x13D20682
+ vadduwm 17,17,30
+ .long 0x13CF7E82
+ vadduwm 17,17,30
+ vadduwm 17,17,10
+ vadduwm 7,7,16
+ vsel 29,6,5,4
+ vadduwm 6,6,28
+ vadduwm 7,7,29
+ .long 0x13C4FE82
+ vadduwm 7,7,30
+ vxor 29,0,1
+ vsel 29,1,2,29
+ vadduwm 3,3,7
+ .long 0x13C08682
+ vadduwm 30,30,29
+ vadduwm 7,7,30
+ lvx 28,26,7
+ .long 0x13D30682
+ vadduwm 18,18,30
+ .long 0x13D07E82
+ vadduwm 18,18,30
+ vadduwm 18,18,11
+ vadduwm 6,6,17
+ vsel 29,5,4,3
+ vadduwm 5,5,28
+ vadduwm 6,6,29
+ .long 0x13C3FE82
+ vadduwm 6,6,30
+ vxor 29,7,0
+ vsel 29,0,1,29
+ vadduwm 2,2,6
+ .long 0x13C78682
+ vadduwm 30,30,29
+ vadduwm 6,6,30
+ lvx 28,27,7
+ .long 0x13D80682
+ vadduwm 19,19,30
+ .long 0x13D17E82
+ vadduwm 19,19,30
+ vadduwm 19,19,12
+ vadduwm 5,5,18
+ vsel 29,4,3,2
+ vadduwm 4,4,28
+ vadduwm 5,5,29
+ .long 0x13C2FE82
+ vadduwm 5,5,30
+ vxor 29,6,7
+ vsel 29,7,0,29
+ vadduwm 1,1,5
+ .long 0x13C68682
+ vadduwm 30,30,29
+ vadduwm 5,5,30
+ lvx 28,28,7
+ .long 0x13D90682
+ vadduwm 24,24,30
+ .long 0x13D27E82
+ vadduwm 24,24,30
+ vadduwm 24,24,13
+ vadduwm 4,4,19
+ vsel 29,3,2,1
+ vadduwm 3,3,28
+ vadduwm 4,4,29
+ .long 0x13C1FE82
+ vadduwm 4,4,30
+ vxor 29,5,6
+ vsel 29,6,7,29
+ vadduwm 0,0,4
+ .long 0x13C58682
+ vadduwm 30,30,29
+ vadduwm 4,4,30
+ lvx 28,29,7
+ .long 0x13DA0682
+ vadduwm 25,25,30
+ .long 0x13D37E82
+ vadduwm 25,25,30
+ vadduwm 25,25,14
+ vadduwm 3,3,24
+ vsel 29,2,1,0
+ vadduwm 2,2,28
+ vadduwm 3,3,29
+ .long 0x13C0FE82
+ vadduwm 3,3,30
+ vxor 29,4,5
+ vsel 29,5,6,29
+ vadduwm 7,7,3
+ .long 0x13C48682
+ vadduwm 30,30,29
+ vadduwm 3,3,30
+ lvx 28,30,7
+ .long 0x13DB0682
+ vadduwm 26,26,30
+ .long 0x13D87E82
+ vadduwm 26,26,30
+ vadduwm 26,26,15
+ vadduwm 2,2,25
+ vsel 29,1,0,7
+ vadduwm 1,1,28
+ vadduwm 2,2,29
+ .long 0x13C7FE82
+ vadduwm 2,2,30
+ vxor 29,3,4
+ vsel 29,4,5,29
+ vadduwm 6,6,2
+ .long 0x13C38682
+ vadduwm 30,30,29
+ vadduwm 2,2,30
+ lvx 28,31,7
+ addi 7,7,0x80
+ .long 0x13C80682
+ vadduwm 27,27,30
+ .long 0x13D97E82
+ vadduwm 27,27,30
+ vadduwm 27,27,16
+ vadduwm 1,1,26
+ vsel 29,0,7,6
+ vadduwm 0,0,28
+ vadduwm 1,1,29
+ .long 0x13C6FE82
+ vadduwm 1,1,30
+ vxor 29,2,3
+ vsel 29,3,4,29
+ vadduwm 5,5,1
+ .long 0x13C28682
+ vadduwm 30,30,29
+ vadduwm 1,1,30
+ lvx 28,0,7
+ .long 0x13C90682
+ vadduwm 8,8,30
+ .long 0x13DA7E82
+ vadduwm 8,8,30
+ vadduwm 8,8,17
+ vadduwm 0,0,27
+ vsel 29,7,6,5
+ vadduwm 7,7,28
+ vadduwm 0,0,29
+ .long 0x13C5FE82
+ vadduwm 0,0,30
+ vxor 29,1,2
+ vsel 29,2,3,29
+ vadduwm 4,4,0
+ .long 0x13C18682
+ vadduwm 30,30,29
+ vadduwm 0,0,30
+ lvx 28,10,7
+ bdnz .L16_xx
+
+ lvx 10,0,11
+ subic. 5,5,1
+ lvx 11,10,11
+ vadduwm 0,0,10
+ lvx 12,26,11
+ vadduwm 1,1,11
+ lvx 13,27,11
+ vadduwm 2,2,12
+ lvx 14,28,11
+ vadduwm 3,3,13
+ lvx 15,29,11
+ vadduwm 4,4,14
+ lvx 16,30,11
+ vadduwm 5,5,15
+ lvx 17,31,11
+ vadduwm 6,6,16
+ vadduwm 7,7,17
+ bne .Loop
+ lvx 8,26,7
+ vperm 0,0,1,28
+ lvx 9,27,7
+ vperm 4,4,5,28
+ vperm 0,0,2,8
+ vperm 4,4,6,8
+ vperm 0,0,3,9
+ vperm 4,4,7,9
+ .long 0x7C001F19
+ .long 0x7C8A1F19
+ addi 11,1,175
+ mtlr 8
+ mtspr 256,12
+ lvx 24,0,11
+ lvx 25,10,11
+ lvx 26,26,11
+ lvx 27,27,11
+ lvx 28,28,11
+ lvx 29,29,11
+ lvx 30,30,11
+ lvx 31,31,11
+ lwz 26,304(1)
+ lwz 27,308(1)
+ lwz 28,312(1)
+ lwz 29,316(1)
+ lwz 30,320(1)
+ lwz 31,324(1)
+ addi 1,1,328
+ blr
+.long 0
+.byte 0,12,4,1,0x80,6,3,0
+.long 0
+.size sha256_block_p8,.-sha256_block_p8
+.align 6
+.LPICmeup:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 6
+ addi 6,6,56
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.long 0x428a2f98,0x428a2f98,0x428a2f98,0x428a2f98
+.long 0x71374491,0x71374491,0x71374491,0x71374491
+.long 0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf
+.long 0xe9b5dba5,0xe9b5dba5,0xe9b5dba5,0xe9b5dba5
+.long 0x3956c25b,0x3956c25b,0x3956c25b,0x3956c25b
+.long 0x59f111f1,0x59f111f1,0x59f111f1,0x59f111f1
+.long 0x923f82a4,0x923f82a4,0x923f82a4,0x923f82a4
+.long 0xab1c5ed5,0xab1c5ed5,0xab1c5ed5,0xab1c5ed5
+.long 0xd807aa98,0xd807aa98,0xd807aa98,0xd807aa98
+.long 0x12835b01,0x12835b01,0x12835b01,0x12835b01
+.long 0x243185be,0x243185be,0x243185be,0x243185be
+.long 0x550c7dc3,0x550c7dc3,0x550c7dc3,0x550c7dc3
+.long 0x72be5d74,0x72be5d74,0x72be5d74,0x72be5d74
+.long 0x80deb1fe,0x80deb1fe,0x80deb1fe,0x80deb1fe
+.long 0x9bdc06a7,0x9bdc06a7,0x9bdc06a7,0x9bdc06a7
+.long 0xc19bf174,0xc19bf174,0xc19bf174,0xc19bf174
+.long 0xe49b69c1,0xe49b69c1,0xe49b69c1,0xe49b69c1
+.long 0xefbe4786,0xefbe4786,0xefbe4786,0xefbe4786
+.long 0x0fc19dc6,0x0fc19dc6,0x0fc19dc6,0x0fc19dc6
+.long 0x240ca1cc,0x240ca1cc,0x240ca1cc,0x240ca1cc
+.long 0x2de92c6f,0x2de92c6f,0x2de92c6f,0x2de92c6f
+.long 0x4a7484aa,0x4a7484aa,0x4a7484aa,0x4a7484aa
+.long 0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc
+.long 0x76f988da,0x76f988da,0x76f988da,0x76f988da
+.long 0x983e5152,0x983e5152,0x983e5152,0x983e5152
+.long 0xa831c66d,0xa831c66d,0xa831c66d,0xa831c66d
+.long 0xb00327c8,0xb00327c8,0xb00327c8,0xb00327c8
+.long 0xbf597fc7,0xbf597fc7,0xbf597fc7,0xbf597fc7
+.long 0xc6e00bf3,0xc6e00bf3,0xc6e00bf3,0xc6e00bf3
+.long 0xd5a79147,0xd5a79147,0xd5a79147,0xd5a79147
+.long 0x06ca6351,0x06ca6351,0x06ca6351,0x06ca6351
+.long 0x14292967,0x14292967,0x14292967,0x14292967
+.long 0x27b70a85,0x27b70a85,0x27b70a85,0x27b70a85
+.long 0x2e1b2138,0x2e1b2138,0x2e1b2138,0x2e1b2138
+.long 0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc
+.long 0x53380d13,0x53380d13,0x53380d13,0x53380d13
+.long 0x650a7354,0x650a7354,0x650a7354,0x650a7354
+.long 0x766a0abb,0x766a0abb,0x766a0abb,0x766a0abb
+.long 0x81c2c92e,0x81c2c92e,0x81c2c92e,0x81c2c92e
+.long 0x92722c85,0x92722c85,0x92722c85,0x92722c85
+.long 0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1
+.long 0xa81a664b,0xa81a664b,0xa81a664b,0xa81a664b
+.long 0xc24b8b70,0xc24b8b70,0xc24b8b70,0xc24b8b70
+.long 0xc76c51a3,0xc76c51a3,0xc76c51a3,0xc76c51a3
+.long 0xd192e819,0xd192e819,0xd192e819,0xd192e819
+.long 0xd6990624,0xd6990624,0xd6990624,0xd6990624
+.long 0xf40e3585,0xf40e3585,0xf40e3585,0xf40e3585
+.long 0x106aa070,0x106aa070,0x106aa070,0x106aa070
+.long 0x19a4c116,0x19a4c116,0x19a4c116,0x19a4c116
+.long 0x1e376c08,0x1e376c08,0x1e376c08,0x1e376c08
+.long 0x2748774c,0x2748774c,0x2748774c,0x2748774c
+.long 0x34b0bcb5,0x34b0bcb5,0x34b0bcb5,0x34b0bcb5
+.long 0x391c0cb3,0x391c0cb3,0x391c0cb3,0x391c0cb3
+.long 0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a
+.long 0x5b9cca4f,0x5b9cca4f,0x5b9cca4f,0x5b9cca4f
+.long 0x682e6ff3,0x682e6ff3,0x682e6ff3,0x682e6ff3
+.long 0x748f82ee,0x748f82ee,0x748f82ee,0x748f82ee
+.long 0x78a5636f,0x78a5636f,0x78a5636f,0x78a5636f
+.long 0x84c87814,0x84c87814,0x84c87814,0x84c87814
+.long 0x8cc70208,0x8cc70208,0x8cc70208,0x8cc70208
+.long 0x90befffa,0x90befffa,0x90befffa,0x90befffa
+.long 0xa4506ceb,0xa4506ceb,0xa4506ceb,0xa4506ceb
+.long 0xbef9a3f7,0xbef9a3f7,0xbef9a3f7,0xbef9a3f7
+.long 0xc67178f2,0xc67178f2,0xc67178f2,0xc67178f2
+.long 0,0,0,0
+.long 0x00010203,0x10111213,0x10111213,0x10111213
+.long 0x00010203,0x04050607,0x10111213,0x10111213
+.long 0x00010203,0x04050607,0x08090a0b,0x10111213
+.byte 83,72,65,50,53,54,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 2
diff --git a/sys/crypto/openssl/powerpc/sha512-ppc.S b/sys/crypto/openssl/powerpc/sha512-ppc.S
new file mode 100644
index 000000000000..b6c3109c997c
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/sha512-ppc.S
@@ -0,0 +1,3072 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from sha512-ppc.pl. */
+.machine "any"
+.text
+
+.globl sha512_block_ppc
+.type sha512_block_ppc,@function
+.align 6
+sha512_block_ppc:
+ stwu 1,-256(1)
+ mflr 0
+ slwi 5,5,7
+
+ stw 3,168(1)
+
+ stw 14,184(1)
+ stw 15,188(1)
+ stw 16,192(1)
+ stw 17,196(1)
+ stw 18,200(1)
+ stw 19,204(1)
+ stw 20,208(1)
+ stw 21,212(1)
+ stw 22,216(1)
+ stw 23,220(1)
+ stw 24,224(1)
+ stw 25,228(1)
+ stw 26,232(1)
+ stw 27,236(1)
+ stw 28,240(1)
+ stw 29,244(1)
+ stw 30,248(1)
+ stw 31,252(1)
+ stw 0,260(1)
+ lwz 16,0(3)
+ lwz 17,4(3)
+ lwz 18,8(3)
+ lwz 19,12(3)
+ lwz 20,16(3)
+ lwz 21,20(3)
+ lwz 22,24(3)
+ lwz 23,28(3)
+ lwz 24,32(3)
+ lwz 25,36(3)
+ lwz 26,40(3)
+ lwz 27,44(3)
+ lwz 28,48(3)
+ lwz 29,52(3)
+ lwz 30,56(3)
+ lwz 31,60(3)
+ bl .LPICmeup
+.LPICedup:
+ andi. 0,4,3
+ bne .Lunaligned
+.Laligned:
+ add 5,4,5
+ stw 5,160(1)
+ stw 4,164(1)
+ bl .Lsha2_block_private
+ b .Ldone
+
+
+
+
+
+
+
+.align 4
+.Lunaligned:
+ subfic 0,4,4096
+ andi. 0,0,3968
+ beq .Lcross_page
+ .long 0x7c050040
+ ble .Laligned
+ subfc 5,0,5
+ add 0,4,0
+ stw 5,156(1)
+ stw 0,160(1)
+ stw 4,164(1)
+ bl .Lsha2_block_private
+
+ lwz 5,156(1)
+.Lcross_page:
+ li 0,32
+ mtctr 0
+ addi 12,1,24
+.Lmemcpy:
+ lbz 8,0(4)
+ lbz 9,1(4)
+ lbz 10,2(4)
+ lbz 11,3(4)
+ addi 4,4,4
+ stb 8,0(12)
+ stb 9,1(12)
+ stb 10,2(12)
+ stb 11,3(12)
+ addi 12,12,4
+ bdnz .Lmemcpy
+ stw 4,152(1)
+ addi 0,1,152
+ addi 4,1,24
+ stw 5,156(1)
+ stw 0,160(1)
+ stw 4,164(1)
+ bl .Lsha2_block_private
+ lwz 4,152(1)
+ lwz 5,156(1)
+ addic. 5,5,-128
+ bne .Lunaligned
+
+.Ldone:
+ lwz 0,260(1)
+ lwz 14,184(1)
+ lwz 15,188(1)
+ lwz 16,192(1)
+ lwz 17,196(1)
+ lwz 18,200(1)
+ lwz 19,204(1)
+ lwz 20,208(1)
+ lwz 21,212(1)
+ lwz 22,216(1)
+ lwz 23,220(1)
+ lwz 24,224(1)
+ lwz 25,228(1)
+ lwz 26,232(1)
+ lwz 27,236(1)
+ lwz 28,240(1)
+ lwz 29,244(1)
+ lwz 30,248(1)
+ lwz 31,252(1)
+ mtlr 0
+ addi 1,1,256
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+.align 4
+.Lsha2_block_private:
+ lwz 8,0(4)
+ xor 14,19,21
+ lwz 6,4(4)
+ xor 15,18,20
+ lwz 9,4(7)
+ xor 11,27,29
+ lwz 10,0(7)
+ xor 12,26,28
+ addc 31,31,6
+ stw 6,24(1)
+
+ srwi 0,25,14
+ srwi 5,24,14
+ and 11,11,25
+ adde 30,30,8
+ and 12,12,24
+ stw 8,28(1)
+ srwi 6,25,18
+ srwi 8,24,18
+ addc 31,31,9
+ insrwi 0,24,14,0
+ insrwi 5,25,14,0
+ xor 11,11,29
+ adde 30,30,10
+ xor 12,12,28
+ insrwi 6,24,18,0
+ insrwi 8,25,18,0
+ addc 31,31,11
+ srwi 9,24,41-32
+ srwi 10,25,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,25,41-32,0
+ insrwi 10,24,41-32,0
+ xor 11,17,19
+ adde 30,30,12
+ xor 12,16,18
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,17,28
+ and 14,14,11
+ addc 31,31,0
+ and 15,15,12
+ srwi 8,16,28
+ srwi 0,16,34-32
+ adde 30,30,5
+ srwi 5,17,34-32
+ insrwi 6,16,28,0
+ insrwi 8,17,28,0
+ xor 14,14,19
+ addc 23,23,31
+ xor 15,15,18
+ insrwi 0,17,34-32,0
+ insrwi 5,16,34-32,0
+ adde 22,22,30
+ srwi 9,16,39-32
+ srwi 10,17,39-32
+ xor 0,0,6
+ addc 31,31,14
+ xor 5,5,8
+ insrwi 9,17,39-32,0
+ insrwi 10,16,39-32,0
+ adde 30,30,15
+ lwz 8,8(4)
+ lwz 6,12(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 31,31,0
+ adde 30,30,5
+ lwz 9,12(7)
+ xor 14,25,27
+ lwz 10,8(7)
+ xor 15,24,26
+ addc 29,29,6
+ stw 6,32(1)
+
+ srwi 0,23,14
+ srwi 5,22,14
+ and 14,14,23
+ adde 28,28,8
+ and 15,15,22
+ stw 8,36(1)
+ srwi 6,23,18
+ srwi 8,22,18
+ addc 29,29,9
+ insrwi 0,22,14,0
+ insrwi 5,23,14,0
+ xor 14,14,27
+ adde 28,28,10
+ xor 15,15,26
+ insrwi 6,22,18,0
+ insrwi 8,23,18,0
+ addc 29,29,14
+ srwi 9,22,41-32
+ srwi 10,23,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,23,41-32,0
+ insrwi 10,22,41-32,0
+ xor 14,31,17
+ adde 28,28,15
+ xor 15,30,16
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,31,28
+ and 11,11,14
+ addc 29,29,0
+ and 12,12,15
+ srwi 8,30,28
+ srwi 0,30,34-32
+ adde 28,28,5
+ srwi 5,31,34-32
+ insrwi 6,30,28,0
+ insrwi 8,31,28,0
+ xor 11,11,17
+ addc 21,21,29
+ xor 12,12,16
+ insrwi 0,31,34-32,0
+ insrwi 5,30,34-32,0
+ adde 20,20,28
+ srwi 9,30,39-32
+ srwi 10,31,39-32
+ xor 0,0,6
+ addc 29,29,11
+ xor 5,5,8
+ insrwi 9,31,39-32,0
+ insrwi 10,30,39-32,0
+ adde 28,28,12
+ lwz 8,16(4)
+ lwz 6,20(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 29,29,0
+ adde 28,28,5
+ lwz 9,20(7)
+ xor 11,23,25
+ lwz 10,16(7)
+ xor 12,22,24
+ addc 27,27,6
+ stw 6,40(1)
+
+ srwi 0,21,14
+ srwi 5,20,14
+ and 11,11,21
+ adde 26,26,8
+ and 12,12,20
+ stw 8,44(1)
+ srwi 6,21,18
+ srwi 8,20,18
+ addc 27,27,9
+ insrwi 0,20,14,0
+ insrwi 5,21,14,0
+ xor 11,11,25
+ adde 26,26,10
+ xor 12,12,24
+ insrwi 6,20,18,0
+ insrwi 8,21,18,0
+ addc 27,27,11
+ srwi 9,20,41-32
+ srwi 10,21,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,21,41-32,0
+ insrwi 10,20,41-32,0
+ xor 11,29,31
+ adde 26,26,12
+ xor 12,28,30
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,29,28
+ and 14,14,11
+ addc 27,27,0
+ and 15,15,12
+ srwi 8,28,28
+ srwi 0,28,34-32
+ adde 26,26,5
+ srwi 5,29,34-32
+ insrwi 6,28,28,0
+ insrwi 8,29,28,0
+ xor 14,14,31
+ addc 19,19,27
+ xor 15,15,30
+ insrwi 0,29,34-32,0
+ insrwi 5,28,34-32,0
+ adde 18,18,26
+ srwi 9,28,39-32
+ srwi 10,29,39-32
+ xor 0,0,6
+ addc 27,27,14
+ xor 5,5,8
+ insrwi 9,29,39-32,0
+ insrwi 10,28,39-32,0
+ adde 26,26,15
+ lwz 8,24(4)
+ lwz 6,28(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 27,27,0
+ adde 26,26,5
+ lwz 9,28(7)
+ xor 14,21,23
+ lwz 10,24(7)
+ xor 15,20,22
+ addc 25,25,6
+ stw 6,48(1)
+
+ srwi 0,19,14
+ srwi 5,18,14
+ and 14,14,19
+ adde 24,24,8
+ and 15,15,18
+ stw 8,52(1)
+ srwi 6,19,18
+ srwi 8,18,18
+ addc 25,25,9
+ insrwi 0,18,14,0
+ insrwi 5,19,14,0
+ xor 14,14,23
+ adde 24,24,10
+ xor 15,15,22
+ insrwi 6,18,18,0
+ insrwi 8,19,18,0
+ addc 25,25,14
+ srwi 9,18,41-32
+ srwi 10,19,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,19,41-32,0
+ insrwi 10,18,41-32,0
+ xor 14,27,29
+ adde 24,24,15
+ xor 15,26,28
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,27,28
+ and 11,11,14
+ addc 25,25,0
+ and 12,12,15
+ srwi 8,26,28
+ srwi 0,26,34-32
+ adde 24,24,5
+ srwi 5,27,34-32
+ insrwi 6,26,28,0
+ insrwi 8,27,28,0
+ xor 11,11,29
+ addc 17,17,25
+ xor 12,12,28
+ insrwi 0,27,34-32,0
+ insrwi 5,26,34-32,0
+ adde 16,16,24
+ srwi 9,26,39-32
+ srwi 10,27,39-32
+ xor 0,0,6
+ addc 25,25,11
+ xor 5,5,8
+ insrwi 9,27,39-32,0
+ insrwi 10,26,39-32,0
+ adde 24,24,12
+ lwz 8,32(4)
+ lwz 6,36(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 25,25,0
+ adde 24,24,5
+ lwz 9,36(7)
+ xor 11,19,21
+ lwz 10,32(7)
+ xor 12,18,20
+ addc 23,23,6
+ stw 6,56(1)
+
+ srwi 0,17,14
+ srwi 5,16,14
+ and 11,11,17
+ adde 22,22,8
+ and 12,12,16
+ stw 8,60(1)
+ srwi 6,17,18
+ srwi 8,16,18
+ addc 23,23,9
+ insrwi 0,16,14,0
+ insrwi 5,17,14,0
+ xor 11,11,21
+ adde 22,22,10
+ xor 12,12,20
+ insrwi 6,16,18,0
+ insrwi 8,17,18,0
+ addc 23,23,11
+ srwi 9,16,41-32
+ srwi 10,17,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,17,41-32,0
+ insrwi 10,16,41-32,0
+ xor 11,25,27
+ adde 22,22,12
+ xor 12,24,26
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,25,28
+ and 14,14,11
+ addc 23,23,0
+ and 15,15,12
+ srwi 8,24,28
+ srwi 0,24,34-32
+ adde 22,22,5
+ srwi 5,25,34-32
+ insrwi 6,24,28,0
+ insrwi 8,25,28,0
+ xor 14,14,27
+ addc 31,31,23
+ xor 15,15,26
+ insrwi 0,25,34-32,0
+ insrwi 5,24,34-32,0
+ adde 30,30,22
+ srwi 9,24,39-32
+ srwi 10,25,39-32
+ xor 0,0,6
+ addc 23,23,14
+ xor 5,5,8
+ insrwi 9,25,39-32,0
+ insrwi 10,24,39-32,0
+ adde 22,22,15
+ lwz 8,40(4)
+ lwz 6,44(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 23,23,0
+ adde 22,22,5
+ lwz 9,44(7)
+ xor 14,17,19
+ lwz 10,40(7)
+ xor 15,16,18
+ addc 21,21,6
+ stw 6,64(1)
+
+ srwi 0,31,14
+ srwi 5,30,14
+ and 14,14,31
+ adde 20,20,8
+ and 15,15,30
+ stw 8,68(1)
+ srwi 6,31,18
+ srwi 8,30,18
+ addc 21,21,9
+ insrwi 0,30,14,0
+ insrwi 5,31,14,0
+ xor 14,14,19
+ adde 20,20,10
+ xor 15,15,18
+ insrwi 6,30,18,0
+ insrwi 8,31,18,0
+ addc 21,21,14
+ srwi 9,30,41-32
+ srwi 10,31,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,31,41-32,0
+ insrwi 10,30,41-32,0
+ xor 14,23,25
+ adde 20,20,15
+ xor 15,22,24
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,23,28
+ and 11,11,14
+ addc 21,21,0
+ and 12,12,15
+ srwi 8,22,28
+ srwi 0,22,34-32
+ adde 20,20,5
+ srwi 5,23,34-32
+ insrwi 6,22,28,0
+ insrwi 8,23,28,0
+ xor 11,11,25
+ addc 29,29,21
+ xor 12,12,24
+ insrwi 0,23,34-32,0
+ insrwi 5,22,34-32,0
+ adde 28,28,20
+ srwi 9,22,39-32
+ srwi 10,23,39-32
+ xor 0,0,6
+ addc 21,21,11
+ xor 5,5,8
+ insrwi 9,23,39-32,0
+ insrwi 10,22,39-32,0
+ adde 20,20,12
+ lwz 8,48(4)
+ lwz 6,52(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 21,21,0
+ adde 20,20,5
+ lwz 9,52(7)
+ xor 11,31,17
+ lwz 10,48(7)
+ xor 12,30,16
+ addc 19,19,6
+ stw 6,72(1)
+
+ srwi 0,29,14
+ srwi 5,28,14
+ and 11,11,29
+ adde 18,18,8
+ and 12,12,28
+ stw 8,76(1)
+ srwi 6,29,18
+ srwi 8,28,18
+ addc 19,19,9
+ insrwi 0,28,14,0
+ insrwi 5,29,14,0
+ xor 11,11,17
+ adde 18,18,10
+ xor 12,12,16
+ insrwi 6,28,18,0
+ insrwi 8,29,18,0
+ addc 19,19,11
+ srwi 9,28,41-32
+ srwi 10,29,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,29,41-32,0
+ insrwi 10,28,41-32,0
+ xor 11,21,23
+ adde 18,18,12
+ xor 12,20,22
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,21,28
+ and 14,14,11
+ addc 19,19,0
+ and 15,15,12
+ srwi 8,20,28
+ srwi 0,20,34-32
+ adde 18,18,5
+ srwi 5,21,34-32
+ insrwi 6,20,28,0
+ insrwi 8,21,28,0
+ xor 14,14,23
+ addc 27,27,19
+ xor 15,15,22
+ insrwi 0,21,34-32,0
+ insrwi 5,20,34-32,0
+ adde 26,26,18
+ srwi 9,20,39-32
+ srwi 10,21,39-32
+ xor 0,0,6
+ addc 19,19,14
+ xor 5,5,8
+ insrwi 9,21,39-32,0
+ insrwi 10,20,39-32,0
+ adde 18,18,15
+ lwz 8,56(4)
+ lwz 6,60(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 19,19,0
+ adde 18,18,5
+ lwz 9,60(7)
+ xor 14,29,31
+ lwz 10,56(7)
+ xor 15,28,30
+ addc 17,17,6
+ stw 6,80(1)
+
+ srwi 0,27,14
+ srwi 5,26,14
+ and 14,14,27
+ adde 16,16,8
+ and 15,15,26
+ stw 8,84(1)
+ srwi 6,27,18
+ srwi 8,26,18
+ addc 17,17,9
+ insrwi 0,26,14,0
+ insrwi 5,27,14,0
+ xor 14,14,31
+ adde 16,16,10
+ xor 15,15,30
+ insrwi 6,26,18,0
+ insrwi 8,27,18,0
+ addc 17,17,14
+ srwi 9,26,41-32
+ srwi 10,27,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,27,41-32,0
+ insrwi 10,26,41-32,0
+ xor 14,19,21
+ adde 16,16,15
+ xor 15,18,20
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,19,28
+ and 11,11,14
+ addc 17,17,0
+ and 12,12,15
+ srwi 8,18,28
+ srwi 0,18,34-32
+ adde 16,16,5
+ srwi 5,19,34-32
+ insrwi 6,18,28,0
+ insrwi 8,19,28,0
+ xor 11,11,21
+ addc 25,25,17
+ xor 12,12,20
+ insrwi 0,19,34-32,0
+ insrwi 5,18,34-32,0
+ adde 24,24,16
+ srwi 9,18,39-32
+ srwi 10,19,39-32
+ xor 0,0,6
+ addc 17,17,11
+ xor 5,5,8
+ insrwi 9,19,39-32,0
+ insrwi 10,18,39-32,0
+ adde 16,16,12
+ lwz 8,64(4)
+ lwz 6,68(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 17,17,0
+ adde 16,16,5
+ lwz 9,68(7)
+ xor 11,27,29
+ lwz 10,64(7)
+ xor 12,26,28
+ addc 31,31,6
+ stw 6,88(1)
+
+ srwi 0,25,14
+ srwi 5,24,14
+ and 11,11,25
+ adde 30,30,8
+ and 12,12,24
+ stw 8,92(1)
+ srwi 6,25,18
+ srwi 8,24,18
+ addc 31,31,9
+ insrwi 0,24,14,0
+ insrwi 5,25,14,0
+ xor 11,11,29
+ adde 30,30,10
+ xor 12,12,28
+ insrwi 6,24,18,0
+ insrwi 8,25,18,0
+ addc 31,31,11
+ srwi 9,24,41-32
+ srwi 10,25,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,25,41-32,0
+ insrwi 10,24,41-32,0
+ xor 11,17,19
+ adde 30,30,12
+ xor 12,16,18
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,17,28
+ and 14,14,11
+ addc 31,31,0
+ and 15,15,12
+ srwi 8,16,28
+ srwi 0,16,34-32
+ adde 30,30,5
+ srwi 5,17,34-32
+ insrwi 6,16,28,0
+ insrwi 8,17,28,0
+ xor 14,14,19
+ addc 23,23,31
+ xor 15,15,18
+ insrwi 0,17,34-32,0
+ insrwi 5,16,34-32,0
+ adde 22,22,30
+ srwi 9,16,39-32
+ srwi 10,17,39-32
+ xor 0,0,6
+ addc 31,31,14
+ xor 5,5,8
+ insrwi 9,17,39-32,0
+ insrwi 10,16,39-32,0
+ adde 30,30,15
+ lwz 8,72(4)
+ lwz 6,76(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 31,31,0
+ adde 30,30,5
+ lwz 9,76(7)
+ xor 14,25,27
+ lwz 10,72(7)
+ xor 15,24,26
+ addc 29,29,6
+ stw 6,96(1)
+
+ srwi 0,23,14
+ srwi 5,22,14
+ and 14,14,23
+ adde 28,28,8
+ and 15,15,22
+ stw 8,100(1)
+ srwi 6,23,18
+ srwi 8,22,18
+ addc 29,29,9
+ insrwi 0,22,14,0
+ insrwi 5,23,14,0
+ xor 14,14,27
+ adde 28,28,10
+ xor 15,15,26
+ insrwi 6,22,18,0
+ insrwi 8,23,18,0
+ addc 29,29,14
+ srwi 9,22,41-32
+ srwi 10,23,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,23,41-32,0
+ insrwi 10,22,41-32,0
+ xor 14,31,17
+ adde 28,28,15
+ xor 15,30,16
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,31,28
+ and 11,11,14
+ addc 29,29,0
+ and 12,12,15
+ srwi 8,30,28
+ srwi 0,30,34-32
+ adde 28,28,5
+ srwi 5,31,34-32
+ insrwi 6,30,28,0
+ insrwi 8,31,28,0
+ xor 11,11,17
+ addc 21,21,29
+ xor 12,12,16
+ insrwi 0,31,34-32,0
+ insrwi 5,30,34-32,0
+ adde 20,20,28
+ srwi 9,30,39-32
+ srwi 10,31,39-32
+ xor 0,0,6
+ addc 29,29,11
+ xor 5,5,8
+ insrwi 9,31,39-32,0
+ insrwi 10,30,39-32,0
+ adde 28,28,12
+ lwz 8,80(4)
+ lwz 6,84(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 29,29,0
+ adde 28,28,5
+ lwz 9,84(7)
+ xor 11,23,25
+ lwz 10,80(7)
+ xor 12,22,24
+ addc 27,27,6
+ stw 6,104(1)
+
+ srwi 0,21,14
+ srwi 5,20,14
+ and 11,11,21
+ adde 26,26,8
+ and 12,12,20
+ stw 8,108(1)
+ srwi 6,21,18
+ srwi 8,20,18
+ addc 27,27,9
+ insrwi 0,20,14,0
+ insrwi 5,21,14,0
+ xor 11,11,25
+ adde 26,26,10
+ xor 12,12,24
+ insrwi 6,20,18,0
+ insrwi 8,21,18,0
+ addc 27,27,11
+ srwi 9,20,41-32
+ srwi 10,21,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,21,41-32,0
+ insrwi 10,20,41-32,0
+ xor 11,29,31
+ adde 26,26,12
+ xor 12,28,30
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,29,28
+ and 14,14,11
+ addc 27,27,0
+ and 15,15,12
+ srwi 8,28,28
+ srwi 0,28,34-32
+ adde 26,26,5
+ srwi 5,29,34-32
+ insrwi 6,28,28,0
+ insrwi 8,29,28,0
+ xor 14,14,31
+ addc 19,19,27
+ xor 15,15,30
+ insrwi 0,29,34-32,0
+ insrwi 5,28,34-32,0
+ adde 18,18,26
+ srwi 9,28,39-32
+ srwi 10,29,39-32
+ xor 0,0,6
+ addc 27,27,14
+ xor 5,5,8
+ insrwi 9,29,39-32,0
+ insrwi 10,28,39-32,0
+ adde 26,26,15
+ lwz 8,88(4)
+ lwz 6,92(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 27,27,0
+ adde 26,26,5
+ lwz 9,92(7)
+ xor 14,21,23
+ lwz 10,88(7)
+ xor 15,20,22
+ addc 25,25,6
+ stw 6,112(1)
+
+ srwi 0,19,14
+ srwi 5,18,14
+ and 14,14,19
+ adde 24,24,8
+ and 15,15,18
+ stw 8,116(1)
+ srwi 6,19,18
+ srwi 8,18,18
+ addc 25,25,9
+ insrwi 0,18,14,0
+ insrwi 5,19,14,0
+ xor 14,14,23
+ adde 24,24,10
+ xor 15,15,22
+ insrwi 6,18,18,0
+ insrwi 8,19,18,0
+ addc 25,25,14
+ srwi 9,18,41-32
+ srwi 10,19,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,19,41-32,0
+ insrwi 10,18,41-32,0
+ xor 14,27,29
+ adde 24,24,15
+ xor 15,26,28
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,27,28
+ and 11,11,14
+ addc 25,25,0
+ and 12,12,15
+ srwi 8,26,28
+ srwi 0,26,34-32
+ adde 24,24,5
+ srwi 5,27,34-32
+ insrwi 6,26,28,0
+ insrwi 8,27,28,0
+ xor 11,11,29
+ addc 17,17,25
+ xor 12,12,28
+ insrwi 0,27,34-32,0
+ insrwi 5,26,34-32,0
+ adde 16,16,24
+ srwi 9,26,39-32
+ srwi 10,27,39-32
+ xor 0,0,6
+ addc 25,25,11
+ xor 5,5,8
+ insrwi 9,27,39-32,0
+ insrwi 10,26,39-32,0
+ adde 24,24,12
+ lwz 8,96(4)
+ lwz 6,100(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 25,25,0
+ adde 24,24,5
+ lwz 9,100(7)
+ xor 11,19,21
+ lwz 10,96(7)
+ xor 12,18,20
+ addc 23,23,6
+ stw 6,120(1)
+
+ srwi 0,17,14
+ srwi 5,16,14
+ and 11,11,17
+ adde 22,22,8
+ and 12,12,16
+ stw 8,124(1)
+ srwi 6,17,18
+ srwi 8,16,18
+ addc 23,23,9
+ insrwi 0,16,14,0
+ insrwi 5,17,14,0
+ xor 11,11,21
+ adde 22,22,10
+ xor 12,12,20
+ insrwi 6,16,18,0
+ insrwi 8,17,18,0
+ addc 23,23,11
+ srwi 9,16,41-32
+ srwi 10,17,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,17,41-32,0
+ insrwi 10,16,41-32,0
+ xor 11,25,27
+ adde 22,22,12
+ xor 12,24,26
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,25,28
+ and 14,14,11
+ addc 23,23,0
+ and 15,15,12
+ srwi 8,24,28
+ srwi 0,24,34-32
+ adde 22,22,5
+ srwi 5,25,34-32
+ insrwi 6,24,28,0
+ insrwi 8,25,28,0
+ xor 14,14,27
+ addc 31,31,23
+ xor 15,15,26
+ insrwi 0,25,34-32,0
+ insrwi 5,24,34-32,0
+ adde 30,30,22
+ srwi 9,24,39-32
+ srwi 10,25,39-32
+ xor 0,0,6
+ addc 23,23,14
+ xor 5,5,8
+ insrwi 9,25,39-32,0
+ insrwi 10,24,39-32,0
+ adde 22,22,15
+ lwz 8,104(4)
+ lwz 6,108(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 23,23,0
+ adde 22,22,5
+ lwz 9,108(7)
+ xor 14,17,19
+ lwz 10,104(7)
+ xor 15,16,18
+ addc 21,21,6
+ stw 6,128(1)
+
+ srwi 0,31,14
+ srwi 5,30,14
+ and 14,14,31
+ adde 20,20,8
+ and 15,15,30
+ stw 8,132(1)
+ srwi 6,31,18
+ srwi 8,30,18
+ addc 21,21,9
+ insrwi 0,30,14,0
+ insrwi 5,31,14,0
+ xor 14,14,19
+ adde 20,20,10
+ xor 15,15,18
+ insrwi 6,30,18,0
+ insrwi 8,31,18,0
+ addc 21,21,14
+ srwi 9,30,41-32
+ srwi 10,31,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,31,41-32,0
+ insrwi 10,30,41-32,0
+ xor 14,23,25
+ adde 20,20,15
+ xor 15,22,24
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,23,28
+ and 11,11,14
+ addc 21,21,0
+ and 12,12,15
+ srwi 8,22,28
+ srwi 0,22,34-32
+ adde 20,20,5
+ srwi 5,23,34-32
+ insrwi 6,22,28,0
+ insrwi 8,23,28,0
+ xor 11,11,25
+ addc 29,29,21
+ xor 12,12,24
+ insrwi 0,23,34-32,0
+ insrwi 5,22,34-32,0
+ adde 28,28,20
+ srwi 9,22,39-32
+ srwi 10,23,39-32
+ xor 0,0,6
+ addc 21,21,11
+ xor 5,5,8
+ insrwi 9,23,39-32,0
+ insrwi 10,22,39-32,0
+ adde 20,20,12
+ lwz 8,112(4)
+ lwz 6,116(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 21,21,0
+ adde 20,20,5
+ lwz 9,116(7)
+ xor 11,31,17
+ lwz 10,112(7)
+ xor 12,30,16
+ addc 19,19,6
+ stw 6,136(1)
+
+ srwi 0,29,14
+ srwi 5,28,14
+ and 11,11,29
+ adde 18,18,8
+ and 12,12,28
+ stw 8,140(1)
+ srwi 6,29,18
+ srwi 8,28,18
+ addc 19,19,9
+ insrwi 0,28,14,0
+ insrwi 5,29,14,0
+ xor 11,11,17
+ adde 18,18,10
+ xor 12,12,16
+ insrwi 6,28,18,0
+ insrwi 8,29,18,0
+ addc 19,19,11
+ srwi 9,28,41-32
+ srwi 10,29,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,29,41-32,0
+ insrwi 10,28,41-32,0
+ xor 11,21,23
+ adde 18,18,12
+ xor 12,20,22
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,21,28
+ and 14,14,11
+ addc 19,19,0
+ and 15,15,12
+ srwi 8,20,28
+ srwi 0,20,34-32
+ adde 18,18,5
+ srwi 5,21,34-32
+ insrwi 6,20,28,0
+ insrwi 8,21,28,0
+ xor 14,14,23
+ addc 27,27,19
+ xor 15,15,22
+ insrwi 0,21,34-32,0
+ insrwi 5,20,34-32,0
+ adde 26,26,18
+ srwi 9,20,39-32
+ srwi 10,21,39-32
+ xor 0,0,6
+ addc 19,19,14
+ xor 5,5,8
+ insrwi 9,21,39-32,0
+ insrwi 10,20,39-32,0
+ adde 18,18,15
+ lwz 8,120(4)
+ lwz 6,124(4)
+ xor 0,0,9
+ xor 5,5,10
+ addc 19,19,0
+ adde 18,18,5
+ lwz 9,124(7)
+ xor 14,29,31
+ lwz 10,120(7)
+ xor 15,28,30
+ addc 17,17,6
+ stw 6,144(1)
+
+ srwi 0,27,14
+ srwi 5,26,14
+ and 14,14,27
+ adde 16,16,8
+ and 15,15,26
+ stw 8,148(1)
+ srwi 6,27,18
+ srwi 8,26,18
+ addc 17,17,9
+ insrwi 0,26,14,0
+ insrwi 5,27,14,0
+ xor 14,14,31
+ adde 16,16,10
+ xor 15,15,30
+ insrwi 6,26,18,0
+ insrwi 8,27,18,0
+ addc 17,17,14
+ srwi 9,26,41-32
+ srwi 10,27,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,27,41-32,0
+ insrwi 10,26,41-32,0
+ xor 14,19,21
+ adde 16,16,15
+ xor 15,18,20
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,19,28
+ and 11,11,14
+ addc 17,17,0
+ and 12,12,15
+ srwi 8,18,28
+ srwi 0,18,34-32
+ adde 16,16,5
+ srwi 5,19,34-32
+ insrwi 6,18,28,0
+ insrwi 8,19,28,0
+ xor 11,11,21
+ addc 25,25,17
+ xor 12,12,20
+ insrwi 0,19,34-32,0
+ insrwi 5,18,34-32,0
+ adde 24,24,16
+ srwi 9,18,39-32
+ srwi 10,19,39-32
+ xor 0,0,6
+ addc 17,17,11
+ xor 5,5,8
+ insrwi 9,19,39-32,0
+ insrwi 10,18,39-32,0
+ adde 16,16,12
+ lwz 6,32(1)
+ lwz 8,36(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 17,17,0
+ adde 16,16,5
+ lwz 3,24(1)
+ lwz 4,28(1)
+ li 11,4
+ mtctr 11
+.align 4
+.Lrounds:
+ addi 7,7,128
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,136(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,140(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,96(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,100(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,4(7)
+ xor 11,27,29
+ lwz 10,0(7)
+ xor 12,26,28
+ addc 31,31,3
+ stw 3,24(1)
+
+ srwi 0,25,14
+ srwi 5,24,14
+ and 11,11,25
+ adde 30,30,4
+ and 12,12,24
+ stw 4,28(1)
+ srwi 3,25,18
+ srwi 4,24,18
+ addc 31,31,9
+ insrwi 0,24,14,0
+ insrwi 5,25,14,0
+ xor 11,11,29
+ adde 30,30,10
+ xor 12,12,28
+ insrwi 3,24,18,0
+ insrwi 4,25,18,0
+ addc 31,31,11
+ srwi 9,24,41-32
+ srwi 10,25,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,25,41-32,0
+ insrwi 10,24,41-32,0
+ xor 11,17,19
+ adde 30,30,12
+ xor 12,16,18
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,17,28
+ and 14,14,11
+ addc 31,31,0
+ and 15,15,12
+ srwi 4,16,28
+ srwi 0,16,34-32
+ adde 30,30,5
+ srwi 5,17,34-32
+ insrwi 3,16,28,0
+ insrwi 4,17,28,0
+ xor 14,14,19
+ addc 23,23,31
+ xor 15,15,18
+ insrwi 0,17,34-32,0
+ insrwi 5,16,34-32,0
+ adde 22,22,30
+ srwi 9,16,39-32
+ srwi 10,17,39-32
+ xor 0,0,3
+ addc 31,31,14
+ xor 5,5,4
+ insrwi 9,17,39-32,0
+ insrwi 10,16,39-32,0
+ adde 30,30,15
+ lwz 3,40(1)
+ lwz 4,44(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 31,31,0
+ adde 30,30,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,144(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,148(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,104(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,108(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,12(7)
+ xor 14,25,27
+ lwz 10,8(7)
+ xor 15,24,26
+ addc 29,29,6
+ stw 6,32(1)
+
+ srwi 0,23,14
+ srwi 5,22,14
+ and 14,14,23
+ adde 28,28,8
+ and 15,15,22
+ stw 8,36(1)
+ srwi 6,23,18
+ srwi 8,22,18
+ addc 29,29,9
+ insrwi 0,22,14,0
+ insrwi 5,23,14,0
+ xor 14,14,27
+ adde 28,28,10
+ xor 15,15,26
+ insrwi 6,22,18,0
+ insrwi 8,23,18,0
+ addc 29,29,14
+ srwi 9,22,41-32
+ srwi 10,23,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,23,41-32,0
+ insrwi 10,22,41-32,0
+ xor 14,31,17
+ adde 28,28,15
+ xor 15,30,16
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,31,28
+ and 11,11,14
+ addc 29,29,0
+ and 12,12,15
+ srwi 8,30,28
+ srwi 0,30,34-32
+ adde 28,28,5
+ srwi 5,31,34-32
+ insrwi 6,30,28,0
+ insrwi 8,31,28,0
+ xor 11,11,17
+ addc 21,21,29
+ xor 12,12,16
+ insrwi 0,31,34-32,0
+ insrwi 5,30,34-32,0
+ adde 20,20,28
+ srwi 9,30,39-32
+ srwi 10,31,39-32
+ xor 0,0,6
+ addc 29,29,11
+ xor 5,5,8
+ insrwi 9,31,39-32,0
+ insrwi 10,30,39-32,0
+ adde 28,28,12
+ lwz 6,48(1)
+ lwz 8,52(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 29,29,0
+ adde 28,28,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,24(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,28(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,112(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,116(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,20(7)
+ xor 11,23,25
+ lwz 10,16(7)
+ xor 12,22,24
+ addc 27,27,3
+ stw 3,40(1)
+
+ srwi 0,21,14
+ srwi 5,20,14
+ and 11,11,21
+ adde 26,26,4
+ and 12,12,20
+ stw 4,44(1)
+ srwi 3,21,18
+ srwi 4,20,18
+ addc 27,27,9
+ insrwi 0,20,14,0
+ insrwi 5,21,14,0
+ xor 11,11,25
+ adde 26,26,10
+ xor 12,12,24
+ insrwi 3,20,18,0
+ insrwi 4,21,18,0
+ addc 27,27,11
+ srwi 9,20,41-32
+ srwi 10,21,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,21,41-32,0
+ insrwi 10,20,41-32,0
+ xor 11,29,31
+ adde 26,26,12
+ xor 12,28,30
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,29,28
+ and 14,14,11
+ addc 27,27,0
+ and 15,15,12
+ srwi 4,28,28
+ srwi 0,28,34-32
+ adde 26,26,5
+ srwi 5,29,34-32
+ insrwi 3,28,28,0
+ insrwi 4,29,28,0
+ xor 14,14,31
+ addc 19,19,27
+ xor 15,15,30
+ insrwi 0,29,34-32,0
+ insrwi 5,28,34-32,0
+ adde 18,18,26
+ srwi 9,28,39-32
+ srwi 10,29,39-32
+ xor 0,0,3
+ addc 27,27,14
+ xor 5,5,4
+ insrwi 9,29,39-32,0
+ insrwi 10,28,39-32,0
+ adde 26,26,15
+ lwz 3,56(1)
+ lwz 4,60(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 27,27,0
+ adde 26,26,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,32(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,36(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,120(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,124(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,28(7)
+ xor 14,21,23
+ lwz 10,24(7)
+ xor 15,20,22
+ addc 25,25,6
+ stw 6,48(1)
+
+ srwi 0,19,14
+ srwi 5,18,14
+ and 14,14,19
+ adde 24,24,8
+ and 15,15,18
+ stw 8,52(1)
+ srwi 6,19,18
+ srwi 8,18,18
+ addc 25,25,9
+ insrwi 0,18,14,0
+ insrwi 5,19,14,0
+ xor 14,14,23
+ adde 24,24,10
+ xor 15,15,22
+ insrwi 6,18,18,0
+ insrwi 8,19,18,0
+ addc 25,25,14
+ srwi 9,18,41-32
+ srwi 10,19,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,19,41-32,0
+ insrwi 10,18,41-32,0
+ xor 14,27,29
+ adde 24,24,15
+ xor 15,26,28
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,27,28
+ and 11,11,14
+ addc 25,25,0
+ and 12,12,15
+ srwi 8,26,28
+ srwi 0,26,34-32
+ adde 24,24,5
+ srwi 5,27,34-32
+ insrwi 6,26,28,0
+ insrwi 8,27,28,0
+ xor 11,11,29
+ addc 17,17,25
+ xor 12,12,28
+ insrwi 0,27,34-32,0
+ insrwi 5,26,34-32,0
+ adde 16,16,24
+ srwi 9,26,39-32
+ srwi 10,27,39-32
+ xor 0,0,6
+ addc 25,25,11
+ xor 5,5,8
+ insrwi 9,27,39-32,0
+ insrwi 10,26,39-32,0
+ adde 24,24,12
+ lwz 6,64(1)
+ lwz 8,68(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 25,25,0
+ adde 24,24,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,40(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,44(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,128(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,132(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,36(7)
+ xor 11,19,21
+ lwz 10,32(7)
+ xor 12,18,20
+ addc 23,23,3
+ stw 3,56(1)
+
+ srwi 0,17,14
+ srwi 5,16,14
+ and 11,11,17
+ adde 22,22,4
+ and 12,12,16
+ stw 4,60(1)
+ srwi 3,17,18
+ srwi 4,16,18
+ addc 23,23,9
+ insrwi 0,16,14,0
+ insrwi 5,17,14,0
+ xor 11,11,21
+ adde 22,22,10
+ xor 12,12,20
+ insrwi 3,16,18,0
+ insrwi 4,17,18,0
+ addc 23,23,11
+ srwi 9,16,41-32
+ srwi 10,17,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,17,41-32,0
+ insrwi 10,16,41-32,0
+ xor 11,25,27
+ adde 22,22,12
+ xor 12,24,26
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,25,28
+ and 14,14,11
+ addc 23,23,0
+ and 15,15,12
+ srwi 4,24,28
+ srwi 0,24,34-32
+ adde 22,22,5
+ srwi 5,25,34-32
+ insrwi 3,24,28,0
+ insrwi 4,25,28,0
+ xor 14,14,27
+ addc 31,31,23
+ xor 15,15,26
+ insrwi 0,25,34-32,0
+ insrwi 5,24,34-32,0
+ adde 30,30,22
+ srwi 9,24,39-32
+ srwi 10,25,39-32
+ xor 0,0,3
+ addc 23,23,14
+ xor 5,5,4
+ insrwi 9,25,39-32,0
+ insrwi 10,24,39-32,0
+ adde 22,22,15
+ lwz 3,72(1)
+ lwz 4,76(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 23,23,0
+ adde 22,22,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,48(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,52(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,136(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,140(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,44(7)
+ xor 14,17,19
+ lwz 10,40(7)
+ xor 15,16,18
+ addc 21,21,6
+ stw 6,64(1)
+
+ srwi 0,31,14
+ srwi 5,30,14
+ and 14,14,31
+ adde 20,20,8
+ and 15,15,30
+ stw 8,68(1)
+ srwi 6,31,18
+ srwi 8,30,18
+ addc 21,21,9
+ insrwi 0,30,14,0
+ insrwi 5,31,14,0
+ xor 14,14,19
+ adde 20,20,10
+ xor 15,15,18
+ insrwi 6,30,18,0
+ insrwi 8,31,18,0
+ addc 21,21,14
+ srwi 9,30,41-32
+ srwi 10,31,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,31,41-32,0
+ insrwi 10,30,41-32,0
+ xor 14,23,25
+ adde 20,20,15
+ xor 15,22,24
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,23,28
+ and 11,11,14
+ addc 21,21,0
+ and 12,12,15
+ srwi 8,22,28
+ srwi 0,22,34-32
+ adde 20,20,5
+ srwi 5,23,34-32
+ insrwi 6,22,28,0
+ insrwi 8,23,28,0
+ xor 11,11,25
+ addc 29,29,21
+ xor 12,12,24
+ insrwi 0,23,34-32,0
+ insrwi 5,22,34-32,0
+ adde 28,28,20
+ srwi 9,22,39-32
+ srwi 10,23,39-32
+ xor 0,0,6
+ addc 21,21,11
+ xor 5,5,8
+ insrwi 9,23,39-32,0
+ insrwi 10,22,39-32,0
+ adde 20,20,12
+ lwz 6,80(1)
+ lwz 8,84(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 21,21,0
+ adde 20,20,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,56(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,60(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,144(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,148(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,52(7)
+ xor 11,31,17
+ lwz 10,48(7)
+ xor 12,30,16
+ addc 19,19,3
+ stw 3,72(1)
+
+ srwi 0,29,14
+ srwi 5,28,14
+ and 11,11,29
+ adde 18,18,4
+ and 12,12,28
+ stw 4,76(1)
+ srwi 3,29,18
+ srwi 4,28,18
+ addc 19,19,9
+ insrwi 0,28,14,0
+ insrwi 5,29,14,0
+ xor 11,11,17
+ adde 18,18,10
+ xor 12,12,16
+ insrwi 3,28,18,0
+ insrwi 4,29,18,0
+ addc 19,19,11
+ srwi 9,28,41-32
+ srwi 10,29,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,29,41-32,0
+ insrwi 10,28,41-32,0
+ xor 11,21,23
+ adde 18,18,12
+ xor 12,20,22
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,21,28
+ and 14,14,11
+ addc 19,19,0
+ and 15,15,12
+ srwi 4,20,28
+ srwi 0,20,34-32
+ adde 18,18,5
+ srwi 5,21,34-32
+ insrwi 3,20,28,0
+ insrwi 4,21,28,0
+ xor 14,14,23
+ addc 27,27,19
+ xor 15,15,22
+ insrwi 0,21,34-32,0
+ insrwi 5,20,34-32,0
+ adde 26,26,18
+ srwi 9,20,39-32
+ srwi 10,21,39-32
+ xor 0,0,3
+ addc 19,19,14
+ xor 5,5,4
+ insrwi 9,21,39-32,0
+ insrwi 10,20,39-32,0
+ adde 18,18,15
+ lwz 3,88(1)
+ lwz 4,92(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 19,19,0
+ adde 18,18,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,64(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,68(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,24(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,28(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,60(7)
+ xor 14,29,31
+ lwz 10,56(7)
+ xor 15,28,30
+ addc 17,17,6
+ stw 6,80(1)
+
+ srwi 0,27,14
+ srwi 5,26,14
+ and 14,14,27
+ adde 16,16,8
+ and 15,15,26
+ stw 8,84(1)
+ srwi 6,27,18
+ srwi 8,26,18
+ addc 17,17,9
+ insrwi 0,26,14,0
+ insrwi 5,27,14,0
+ xor 14,14,31
+ adde 16,16,10
+ xor 15,15,30
+ insrwi 6,26,18,0
+ insrwi 8,27,18,0
+ addc 17,17,14
+ srwi 9,26,41-32
+ srwi 10,27,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,27,41-32,0
+ insrwi 10,26,41-32,0
+ xor 14,19,21
+ adde 16,16,15
+ xor 15,18,20
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,19,28
+ and 11,11,14
+ addc 17,17,0
+ and 12,12,15
+ srwi 8,18,28
+ srwi 0,18,34-32
+ adde 16,16,5
+ srwi 5,19,34-32
+ insrwi 6,18,28,0
+ insrwi 8,19,28,0
+ xor 11,11,21
+ addc 25,25,17
+ xor 12,12,20
+ insrwi 0,19,34-32,0
+ insrwi 5,18,34-32,0
+ adde 24,24,16
+ srwi 9,18,39-32
+ srwi 10,19,39-32
+ xor 0,0,6
+ addc 17,17,11
+ xor 5,5,8
+ insrwi 9,19,39-32,0
+ insrwi 10,18,39-32,0
+ adde 16,16,12
+ lwz 6,96(1)
+ lwz 8,100(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 17,17,0
+ adde 16,16,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,72(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,76(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,32(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,36(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,68(7)
+ xor 11,27,29
+ lwz 10,64(7)
+ xor 12,26,28
+ addc 31,31,3
+ stw 3,88(1)
+
+ srwi 0,25,14
+ srwi 5,24,14
+ and 11,11,25
+ adde 30,30,4
+ and 12,12,24
+ stw 4,92(1)
+ srwi 3,25,18
+ srwi 4,24,18
+ addc 31,31,9
+ insrwi 0,24,14,0
+ insrwi 5,25,14,0
+ xor 11,11,29
+ adde 30,30,10
+ xor 12,12,28
+ insrwi 3,24,18,0
+ insrwi 4,25,18,0
+ addc 31,31,11
+ srwi 9,24,41-32
+ srwi 10,25,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,25,41-32,0
+ insrwi 10,24,41-32,0
+ xor 11,17,19
+ adde 30,30,12
+ xor 12,16,18
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,17,28
+ and 14,14,11
+ addc 31,31,0
+ and 15,15,12
+ srwi 4,16,28
+ srwi 0,16,34-32
+ adde 30,30,5
+ srwi 5,17,34-32
+ insrwi 3,16,28,0
+ insrwi 4,17,28,0
+ xor 14,14,19
+ addc 23,23,31
+ xor 15,15,18
+ insrwi 0,17,34-32,0
+ insrwi 5,16,34-32,0
+ adde 22,22,30
+ srwi 9,16,39-32
+ srwi 10,17,39-32
+ xor 0,0,3
+ addc 31,31,14
+ xor 5,5,4
+ insrwi 9,17,39-32,0
+ insrwi 10,16,39-32,0
+ adde 30,30,15
+ lwz 3,104(1)
+ lwz 4,108(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 31,31,0
+ adde 30,30,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,80(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,84(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,40(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,44(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,76(7)
+ xor 14,25,27
+ lwz 10,72(7)
+ xor 15,24,26
+ addc 29,29,6
+ stw 6,96(1)
+
+ srwi 0,23,14
+ srwi 5,22,14
+ and 14,14,23
+ adde 28,28,8
+ and 15,15,22
+ stw 8,100(1)
+ srwi 6,23,18
+ srwi 8,22,18
+ addc 29,29,9
+ insrwi 0,22,14,0
+ insrwi 5,23,14,0
+ xor 14,14,27
+ adde 28,28,10
+ xor 15,15,26
+ insrwi 6,22,18,0
+ insrwi 8,23,18,0
+ addc 29,29,14
+ srwi 9,22,41-32
+ srwi 10,23,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,23,41-32,0
+ insrwi 10,22,41-32,0
+ xor 14,31,17
+ adde 28,28,15
+ xor 15,30,16
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,31,28
+ and 11,11,14
+ addc 29,29,0
+ and 12,12,15
+ srwi 8,30,28
+ srwi 0,30,34-32
+ adde 28,28,5
+ srwi 5,31,34-32
+ insrwi 6,30,28,0
+ insrwi 8,31,28,0
+ xor 11,11,17
+ addc 21,21,29
+ xor 12,12,16
+ insrwi 0,31,34-32,0
+ insrwi 5,30,34-32,0
+ adde 20,20,28
+ srwi 9,30,39-32
+ srwi 10,31,39-32
+ xor 0,0,6
+ addc 29,29,11
+ xor 5,5,8
+ insrwi 9,31,39-32,0
+ insrwi 10,30,39-32,0
+ adde 28,28,12
+ lwz 6,112(1)
+ lwz 8,116(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 29,29,0
+ adde 28,28,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,88(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,92(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,48(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,52(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,84(7)
+ xor 11,23,25
+ lwz 10,80(7)
+ xor 12,22,24
+ addc 27,27,3
+ stw 3,104(1)
+
+ srwi 0,21,14
+ srwi 5,20,14
+ and 11,11,21
+ adde 26,26,4
+ and 12,12,20
+ stw 4,108(1)
+ srwi 3,21,18
+ srwi 4,20,18
+ addc 27,27,9
+ insrwi 0,20,14,0
+ insrwi 5,21,14,0
+ xor 11,11,25
+ adde 26,26,10
+ xor 12,12,24
+ insrwi 3,20,18,0
+ insrwi 4,21,18,0
+ addc 27,27,11
+ srwi 9,20,41-32
+ srwi 10,21,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,21,41-32,0
+ insrwi 10,20,41-32,0
+ xor 11,29,31
+ adde 26,26,12
+ xor 12,28,30
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,29,28
+ and 14,14,11
+ addc 27,27,0
+ and 15,15,12
+ srwi 4,28,28
+ srwi 0,28,34-32
+ adde 26,26,5
+ srwi 5,29,34-32
+ insrwi 3,28,28,0
+ insrwi 4,29,28,0
+ xor 14,14,31
+ addc 19,19,27
+ xor 15,15,30
+ insrwi 0,29,34-32,0
+ insrwi 5,28,34-32,0
+ adde 18,18,26
+ srwi 9,28,39-32
+ srwi 10,29,39-32
+ xor 0,0,3
+ addc 27,27,14
+ xor 5,5,4
+ insrwi 9,29,39-32,0
+ insrwi 10,28,39-32,0
+ adde 26,26,15
+ lwz 3,120(1)
+ lwz 4,124(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 27,27,0
+ adde 26,26,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,96(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,100(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,56(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,60(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,92(7)
+ xor 14,21,23
+ lwz 10,88(7)
+ xor 15,20,22
+ addc 25,25,6
+ stw 6,112(1)
+
+ srwi 0,19,14
+ srwi 5,18,14
+ and 14,14,19
+ adde 24,24,8
+ and 15,15,18
+ stw 8,116(1)
+ srwi 6,19,18
+ srwi 8,18,18
+ addc 25,25,9
+ insrwi 0,18,14,0
+ insrwi 5,19,14,0
+ xor 14,14,23
+ adde 24,24,10
+ xor 15,15,22
+ insrwi 6,18,18,0
+ insrwi 8,19,18,0
+ addc 25,25,14
+ srwi 9,18,41-32
+ srwi 10,19,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,19,41-32,0
+ insrwi 10,18,41-32,0
+ xor 14,27,29
+ adde 24,24,15
+ xor 15,26,28
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,27,28
+ and 11,11,14
+ addc 25,25,0
+ and 12,12,15
+ srwi 8,26,28
+ srwi 0,26,34-32
+ adde 24,24,5
+ srwi 5,27,34-32
+ insrwi 6,26,28,0
+ insrwi 8,27,28,0
+ xor 11,11,29
+ addc 17,17,25
+ xor 12,12,28
+ insrwi 0,27,34-32,0
+ insrwi 5,26,34-32,0
+ adde 16,16,24
+ srwi 9,26,39-32
+ srwi 10,27,39-32
+ xor 0,0,6
+ addc 25,25,11
+ xor 5,5,8
+ insrwi 9,27,39-32,0
+ insrwi 10,26,39-32,0
+ adde 24,24,12
+ lwz 6,128(1)
+ lwz 8,132(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 25,25,0
+ adde 24,24,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,104(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,108(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,64(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,68(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,100(7)
+ xor 11,19,21
+ lwz 10,96(7)
+ xor 12,18,20
+ addc 23,23,3
+ stw 3,120(1)
+
+ srwi 0,17,14
+ srwi 5,16,14
+ and 11,11,17
+ adde 22,22,4
+ and 12,12,16
+ stw 4,124(1)
+ srwi 3,17,18
+ srwi 4,16,18
+ addc 23,23,9
+ insrwi 0,16,14,0
+ insrwi 5,17,14,0
+ xor 11,11,21
+ adde 22,22,10
+ xor 12,12,20
+ insrwi 3,16,18,0
+ insrwi 4,17,18,0
+ addc 23,23,11
+ srwi 9,16,41-32
+ srwi 10,17,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,17,41-32,0
+ insrwi 10,16,41-32,0
+ xor 11,25,27
+ adde 22,22,12
+ xor 12,24,26
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,25,28
+ and 14,14,11
+ addc 23,23,0
+ and 15,15,12
+ srwi 4,24,28
+ srwi 0,24,34-32
+ adde 22,22,5
+ srwi 5,25,34-32
+ insrwi 3,24,28,0
+ insrwi 4,25,28,0
+ xor 14,14,27
+ addc 31,31,23
+ xor 15,15,26
+ insrwi 0,25,34-32,0
+ insrwi 5,24,34-32,0
+ adde 30,30,22
+ srwi 9,24,39-32
+ srwi 10,25,39-32
+ xor 0,0,3
+ addc 23,23,14
+ xor 5,5,4
+ insrwi 9,25,39-32,0
+ insrwi 10,24,39-32,0
+ adde 22,22,15
+ lwz 3,136(1)
+ lwz 4,140(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 23,23,0
+ adde 22,22,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,112(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,116(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,72(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,76(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,108(7)
+ xor 14,17,19
+ lwz 10,104(7)
+ xor 15,16,18
+ addc 21,21,6
+ stw 6,128(1)
+
+ srwi 0,31,14
+ srwi 5,30,14
+ and 14,14,31
+ adde 20,20,8
+ and 15,15,30
+ stw 8,132(1)
+ srwi 6,31,18
+ srwi 8,30,18
+ addc 21,21,9
+ insrwi 0,30,14,0
+ insrwi 5,31,14,0
+ xor 14,14,19
+ adde 20,20,10
+ xor 15,15,18
+ insrwi 6,30,18,0
+ insrwi 8,31,18,0
+ addc 21,21,14
+ srwi 9,30,41-32
+ srwi 10,31,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,31,41-32,0
+ insrwi 10,30,41-32,0
+ xor 14,23,25
+ adde 20,20,15
+ xor 15,22,24
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,23,28
+ and 11,11,14
+ addc 21,21,0
+ and 12,12,15
+ srwi 8,22,28
+ srwi 0,22,34-32
+ adde 20,20,5
+ srwi 5,23,34-32
+ insrwi 6,22,28,0
+ insrwi 8,23,28,0
+ xor 11,11,25
+ addc 29,29,21
+ xor 12,12,24
+ insrwi 0,23,34-32,0
+ insrwi 5,22,34-32,0
+ adde 28,28,20
+ srwi 9,22,39-32
+ srwi 10,23,39-32
+ xor 0,0,6
+ addc 21,21,11
+ xor 5,5,8
+ insrwi 9,23,39-32,0
+ insrwi 10,22,39-32,0
+ adde 20,20,12
+ lwz 6,144(1)
+ lwz 8,148(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 21,21,0
+ adde 20,20,5
+ srwi 0,6,1
+ srwi 5,8,1
+ srwi 9,6,8
+ srwi 10,8,8
+ insrwi 0,8,1,0
+ insrwi 5,6,1,0
+ srwi 11,6,7
+ insrwi 9,8,8,0
+ insrwi 10,6,8,0
+ insrwi 11,8,7,0
+ xor 0,0,9
+ lwz 9,120(1)
+ srwi 12,8,7
+ xor 5,5,10
+ lwz 10,124(1)
+ xor 11,11,0
+ srwi 0,9,19
+ xor 12,12,5
+ srwi 5,10,19
+ addc 3,3,11
+ srwi 11,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 4,4,12
+ srwi 12,9,61-32
+
+ insrwi 11,9,61-32,0
+ srwi 9,9,6
+ insrwi 12,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,11
+ lwz 11,80(1)
+ srwi 10,10,6
+ xor 5,5,12
+ lwz 12,84(1)
+ xor 0,0,9
+ addc 3,3,11
+ xor 5,5,10
+ adde 4,4,12
+ addc 3,3,0
+ adde 4,4,5
+ lwz 9,116(7)
+ xor 11,31,17
+ lwz 10,112(7)
+ xor 12,30,16
+ addc 19,19,3
+ stw 3,136(1)
+
+ srwi 0,29,14
+ srwi 5,28,14
+ and 11,11,29
+ adde 18,18,4
+ and 12,12,28
+ stw 4,140(1)
+ srwi 3,29,18
+ srwi 4,28,18
+ addc 19,19,9
+ insrwi 0,28,14,0
+ insrwi 5,29,14,0
+ xor 11,11,17
+ adde 18,18,10
+ xor 12,12,16
+ insrwi 3,28,18,0
+ insrwi 4,29,18,0
+ addc 19,19,11
+ srwi 9,28,41-32
+ srwi 10,29,41-32
+ xor 0,0,3
+ xor 5,5,4
+ insrwi 9,29,41-32,0
+ insrwi 10,28,41-32,0
+ xor 11,21,23
+ adde 18,18,12
+ xor 12,20,22
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 3,21,28
+ and 14,14,11
+ addc 19,19,0
+ and 15,15,12
+ srwi 4,20,28
+ srwi 0,20,34-32
+ adde 18,18,5
+ srwi 5,21,34-32
+ insrwi 3,20,28,0
+ insrwi 4,21,28,0
+ xor 14,14,23
+ addc 27,27,19
+ xor 15,15,22
+ insrwi 0,21,34-32,0
+ insrwi 5,20,34-32,0
+ adde 26,26,18
+ srwi 9,20,39-32
+ srwi 10,21,39-32
+ xor 0,0,3
+ addc 19,19,14
+ xor 5,5,4
+ insrwi 9,21,39-32,0
+ insrwi 10,20,39-32,0
+ adde 18,18,15
+ lwz 3,24(1)
+ lwz 4,28(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 19,19,0
+ adde 18,18,5
+ srwi 0,3,1
+ srwi 5,4,1
+ srwi 9,3,8
+ srwi 10,4,8
+ insrwi 0,4,1,0
+ insrwi 5,3,1,0
+ srwi 14,3,7
+ insrwi 9,4,8,0
+ insrwi 10,3,8,0
+ insrwi 14,4,7,0
+ xor 0,0,9
+ lwz 9,128(1)
+ srwi 15,4,7
+ xor 5,5,10
+ lwz 10,132(1)
+ xor 14,14,0
+ srwi 0,9,19
+ xor 15,15,5
+ srwi 5,10,19
+ addc 6,6,14
+ srwi 14,10,61-32
+ insrwi 0,10,19,0
+ insrwi 5,9,19,0
+ adde 8,8,15
+ srwi 15,9,61-32
+
+ insrwi 14,9,61-32,0
+ srwi 9,9,6
+ insrwi 15,10,61-32,0
+ insrwi 9,10,6,0
+ xor 0,0,14
+ lwz 14,88(1)
+ srwi 10,10,6
+ xor 5,5,15
+ lwz 15,92(1)
+ xor 0,0,9
+ addc 6,6,14
+ xor 5,5,10
+ adde 8,8,15
+ addc 6,6,0
+ adde 8,8,5
+ lwz 9,124(7)
+ xor 14,29,31
+ lwz 10,120(7)
+ xor 15,28,30
+ addc 17,17,6
+ stw 6,144(1)
+
+ srwi 0,27,14
+ srwi 5,26,14
+ and 14,14,27
+ adde 16,16,8
+ and 15,15,26
+ stw 8,148(1)
+ srwi 6,27,18
+ srwi 8,26,18
+ addc 17,17,9
+ insrwi 0,26,14,0
+ insrwi 5,27,14,0
+ xor 14,14,31
+ adde 16,16,10
+ xor 15,15,30
+ insrwi 6,26,18,0
+ insrwi 8,27,18,0
+ addc 17,17,14
+ srwi 9,26,41-32
+ srwi 10,27,41-32
+ xor 0,0,6
+ xor 5,5,8
+ insrwi 9,27,41-32,0
+ insrwi 10,26,41-32,0
+ xor 14,19,21
+ adde 16,16,15
+ xor 15,18,20
+ xor 0,0,9
+ xor 5,5,10
+
+ srwi 6,19,28
+ and 11,11,14
+ addc 17,17,0
+ and 12,12,15
+ srwi 8,18,28
+ srwi 0,18,34-32
+ adde 16,16,5
+ srwi 5,19,34-32
+ insrwi 6,18,28,0
+ insrwi 8,19,28,0
+ xor 11,11,21
+ addc 25,25,17
+ xor 12,12,20
+ insrwi 0,19,34-32,0
+ insrwi 5,18,34-32,0
+ adde 24,24,16
+ srwi 9,18,39-32
+ srwi 10,19,39-32
+ xor 0,0,6
+ addc 17,17,11
+ xor 5,5,8
+ insrwi 9,19,39-32,0
+ insrwi 10,18,39-32,0
+ adde 16,16,12
+ lwz 6,32(1)
+ lwz 8,36(1)
+ xor 0,0,9
+ xor 5,5,10
+ addc 17,17,0
+ adde 16,16,5
+ bdnz .Lrounds
+
+ lwz 3,168(1)
+ lwz 4,164(1)
+ lwz 5,160(1)
+ subi 7,7,512
+
+ lwz 6,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)
+ addc 17,17,8
+ lwz 15,28(3)
+ adde 16,16,6
+ lwz 6,32(3)
+ addc 19,19,10
+ lwz 8,36(3)
+ adde 18,18,9
+ lwz 9,40(3)
+ addc 21,21,12
+ lwz 10,44(3)
+ adde 20,20,11
+ lwz 11,48(3)
+ addc 23,23,15
+ lwz 12,52(3)
+ adde 22,22,14
+ lwz 14,56(3)
+ addc 25,25,8
+ lwz 15,60(3)
+ adde 24,24,6
+ stw 16,0(3)
+ stw 17,4(3)
+ addc 27,27,10
+ stw 18,8(3)
+ stw 19,12(3)
+ adde 26,26,9
+ stw 20,16(3)
+ stw 21,20(3)
+ addc 29,29,12
+ stw 22,24(3)
+ stw 23,28(3)
+ adde 28,28,11
+ stw 24,32(3)
+ stw 25,36(3)
+ addc 31,31,15
+ stw 26,40(3)
+ stw 27,44(3)
+ adde 30,30,14
+ stw 28,48(3)
+ stw 29,52(3)
+ stw 30,56(3)
+ stw 31,60(3)
+
+ addi 4,4,128
+ stw 4,164(1)
+ .long 0x7c042840
+ bne .Lsha2_block_private
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size sha512_block_ppc,.-sha512_block_ppc
+.align 6
+.LPICmeup:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 7
+ addi 7,7,56
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.long 0x428a2f98,0xd728ae22
+.long 0x71374491,0x23ef65cd
+.long 0xb5c0fbcf,0xec4d3b2f
+.long 0xe9b5dba5,0x8189dbbc
+.long 0x3956c25b,0xf348b538
+.long 0x59f111f1,0xb605d019
+.long 0x923f82a4,0xaf194f9b
+.long 0xab1c5ed5,0xda6d8118
+.long 0xd807aa98,0xa3030242
+.long 0x12835b01,0x45706fbe
+.long 0x243185be,0x4ee4b28c
+.long 0x550c7dc3,0xd5ffb4e2
+.long 0x72be5d74,0xf27b896f
+.long 0x80deb1fe,0x3b1696b1
+.long 0x9bdc06a7,0x25c71235
+.long 0xc19bf174,0xcf692694
+.long 0xe49b69c1,0x9ef14ad2
+.long 0xefbe4786,0x384f25e3
+.long 0x0fc19dc6,0x8b8cd5b5
+.long 0x240ca1cc,0x77ac9c65
+.long 0x2de92c6f,0x592b0275
+.long 0x4a7484aa,0x6ea6e483
+.long 0x5cb0a9dc,0xbd41fbd4
+.long 0x76f988da,0x831153b5
+.long 0x983e5152,0xee66dfab
+.long 0xa831c66d,0x2db43210
+.long 0xb00327c8,0x98fb213f
+.long 0xbf597fc7,0xbeef0ee4
+.long 0xc6e00bf3,0x3da88fc2
+.long 0xd5a79147,0x930aa725
+.long 0x06ca6351,0xe003826f
+.long 0x14292967,0x0a0e6e70
+.long 0x27b70a85,0x46d22ffc
+.long 0x2e1b2138,0x5c26c926
+.long 0x4d2c6dfc,0x5ac42aed
+.long 0x53380d13,0x9d95b3df
+.long 0x650a7354,0x8baf63de
+.long 0x766a0abb,0x3c77b2a8
+.long 0x81c2c92e,0x47edaee6
+.long 0x92722c85,0x1482353b
+.long 0xa2bfe8a1,0x4cf10364
+.long 0xa81a664b,0xbc423001
+.long 0xc24b8b70,0xd0f89791
+.long 0xc76c51a3,0x0654be30
+.long 0xd192e819,0xd6ef5218
+.long 0xd6990624,0x5565a910
+.long 0xf40e3585,0x5771202a
+.long 0x106aa070,0x32bbd1b8
+.long 0x19a4c116,0xb8d2d0c8
+.long 0x1e376c08,0x5141ab53
+.long 0x2748774c,0xdf8eeb99
+.long 0x34b0bcb5,0xe19b48a8
+.long 0x391c0cb3,0xc5c95a63
+.long 0x4ed8aa4a,0xe3418acb
+.long 0x5b9cca4f,0x7763e373
+.long 0x682e6ff3,0xd6b2b8a3
+.long 0x748f82ee,0x5defb2fc
+.long 0x78a5636f,0x43172f60
+.long 0x84c87814,0xa1f0ab72
+.long 0x8cc70208,0x1a6439ec
+.long 0x90befffa,0x23631e28
+.long 0xa4506ceb,0xde82bde9
+.long 0xbef9a3f7,0xb2c67915
+.long 0xc67178f2,0xe372532b
+.long 0xca273ece,0xea26619c
+.long 0xd186b8c7,0x21c0c207
+.long 0xeada7dd6,0xcde0eb1e
+.long 0xf57d4f7f,0xee6ed178
+.long 0x06f067aa,0x72176fba
+.long 0x0a637dc5,0xa2c898a6
+.long 0x113f9804,0xbef90dae
+.long 0x1b710b35,0x131c471b
+.long 0x28db77f5,0x23047d84
+.long 0x32caab7b,0x40c72493
+.long 0x3c9ebe0a,0x15c9bebc
+.long 0x431d67c4,0x9c100d4c
+.long 0x4cc5d4be,0xcb3e42b6
+.long 0x597f299c,0xfc657e2a
+.long 0x5fcb6fab,0x3ad6faec
+.long 0x6c44198c,0x4a475817
diff --git a/sys/crypto/openssl/powerpc/sha512p8-ppc.S b/sys/crypto/openssl/powerpc/sha512p8-ppc.S
new file mode 100644
index 000000000000..846e3e8eb781
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/sha512p8-ppc.S
@@ -0,0 +1,834 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from sha512p8-ppc.pl. */
+.machine "any"
+.text
+
+.globl sha512_block_p8
+.type sha512_block_p8,@function
+.align 6
+sha512_block_p8:
+ stwu 1,-328(1)
+ mflr 8
+ li 10,175
+ li 11,191
+ stvx 24,10,1
+ addi 10,10,32
+ mfspr 12,256
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ li 11,-4096+255
+ stw 12,300(1)
+ li 10,0x10
+ stw 26,304(1)
+ li 26,0x20
+ stw 27,308(1)
+ li 27,0x30
+ stw 28,312(1)
+ li 28,0x40
+ stw 29,316(1)
+ li 29,0x50
+ stw 30,320(1)
+ li 30,0x60
+ stw 31,324(1)
+ li 31,0x70
+ stw 8,332(1)
+ mtspr 256,11
+
+ bl .LPICmeup
+ addi 11,1,47
+ .long 0x7C001E99
+ .long 0x7C4A1E99
+ .long 0x7C9A1E99
+ vsldoi 1,0,0,8
+ .long 0x7CDB1E99
+ vsldoi 3,2,2,8
+ vsldoi 5,4,4,8
+ vsldoi 7,6,6,8
+ li 0,4
+ b .Loop
+.align 5
+.Loop:
+ lvx 28,0,6
+ .long 0x7D002699
+ addi 4,4,16
+ mr 7,6
+ stvx 0,0,11
+ stvx 1,10,11
+ stvx 2,26,11
+ stvx 3,27,11
+ stvx 4,28,11
+ stvx 5,29,11
+ stvx 6,30,11
+ stvx 7,31,11
+ .long 0x10E7E0C0
+ lvx 28,10,6
+ .long 0x10E740C0
+ vsel 29,6,5,4
+ .long 0x10C6E0C0
+ .long 0x10E7E8C0
+ .long 0x13C4FEC2
+ .long 0x10E7F0C0
+ vxor 29,0,1
+ vsel 29,1,2,29
+ .long 0x106338C0
+ .long 0x13C086C2
+ .long 0x13DEE8C0
+ .long 0x10E7F0C0
+ lvx 28,26,7
+ .long 0x7D402699
+ addi 4,4,16
+ vsldoi 9,8,8,8
+ .long 0x10C648C0
+ vsel 29,5,4,3
+ .long 0x10A5E0C0
+ .long 0x10C6E8C0
+ .long 0x13C3FEC2
+ .long 0x10C6F0C0
+ vxor 29,7,0
+ vsel 29,0,1,29
+ .long 0x104230C0
+ .long 0x13C786C2
+ .long 0x13DEE8C0
+ .long 0x10C6F0C0
+ lvx 28,27,7
+ .long 0x10A550C0
+ vsel 29,4,3,2
+ .long 0x1084E0C0
+ .long 0x10A5E8C0
+ .long 0x13C2FEC2
+ .long 0x10A5F0C0
+ vxor 29,6,7
+ vsel 29,7,0,29
+ .long 0x102128C0
+ .long 0x13C686C2
+ .long 0x13DEE8C0
+ .long 0x10A5F0C0
+ lvx 28,28,7
+ .long 0x7D802699
+ addi 4,4,16
+ vsldoi 11,10,10,8
+ .long 0x108458C0
+ vsel 29,3,2,1
+ .long 0x1063E0C0
+ .long 0x1084E8C0
+ .long 0x13C1FEC2
+ .long 0x1084F0C0
+ vxor 29,5,6
+ vsel 29,6,7,29
+ .long 0x100020C0
+ .long 0x13C586C2
+ .long 0x13DEE8C0
+ .long 0x1084F0C0
+ lvx 28,29,7
+ .long 0x106360C0
+ vsel 29,2,1,0
+ .long 0x1042E0C0
+ .long 0x1063E8C0
+ .long 0x13C0FEC2
+ .long 0x1063F0C0
+ vxor 29,4,5
+ vsel 29,5,6,29
+ .long 0x10E718C0
+ .long 0x13C486C2
+ .long 0x13DEE8C0
+ .long 0x1063F0C0
+ lvx 28,30,7
+ .long 0x7DC02699
+ addi 4,4,16
+ vsldoi 13,12,12,8
+ .long 0x104268C0
+ vsel 29,1,0,7
+ .long 0x1021E0C0
+ .long 0x1042E8C0
+ .long 0x13C7FEC2
+ .long 0x1042F0C0
+ vxor 29,3,4
+ vsel 29,4,5,29
+ .long 0x10C610C0
+ .long 0x13C386C2
+ .long 0x13DEE8C0
+ .long 0x1042F0C0
+ lvx 28,31,7
+ addi 7,7,0x80
+ .long 0x102170C0
+ vsel 29,0,7,6
+ .long 0x1000E0C0
+ .long 0x1021E8C0
+ .long 0x13C6FEC2
+ .long 0x1021F0C0
+ vxor 29,2,3
+ vsel 29,3,4,29
+ .long 0x10A508C0
+ .long 0x13C286C2
+ .long 0x13DEE8C0
+ .long 0x1021F0C0
+ lvx 28,0,7
+ .long 0x7E002699
+ addi 4,4,16
+ vsldoi 15,14,14,8
+ .long 0x100078C0
+ vsel 29,7,6,5
+ .long 0x10E7E0C0
+ .long 0x1000E8C0
+ .long 0x13C5FEC2
+ .long 0x1000F0C0
+ vxor 29,1,2
+ vsel 29,2,3,29
+ .long 0x108400C0
+ .long 0x13C186C2
+ .long 0x13DEE8C0
+ .long 0x1000F0C0
+ lvx 28,10,7
+ .long 0x10E780C0
+ vsel 29,6,5,4
+ .long 0x10C6E0C0
+ .long 0x10E7E8C0
+ .long 0x13C4FEC2
+ .long 0x10E7F0C0
+ vxor 29,0,1
+ vsel 29,1,2,29
+ .long 0x106338C0
+ .long 0x13C086C2
+ .long 0x13DEE8C0
+ .long 0x10E7F0C0
+ lvx 28,26,7
+ .long 0x7E402699
+ addi 4,4,16
+ vsldoi 17,16,16,8
+ .long 0x10C688C0
+ vsel 29,5,4,3
+ .long 0x10A5E0C0
+ .long 0x10C6E8C0
+ .long 0x13C3FEC2
+ .long 0x10C6F0C0
+ vxor 29,7,0
+ vsel 29,0,1,29
+ .long 0x104230C0
+ .long 0x13C786C2
+ .long 0x13DEE8C0
+ .long 0x10C6F0C0
+ lvx 28,27,7
+ .long 0x10A590C0
+ vsel 29,4,3,2
+ .long 0x1084E0C0
+ .long 0x10A5E8C0
+ .long 0x13C2FEC2
+ .long 0x10A5F0C0
+ vxor 29,6,7
+ vsel 29,7,0,29
+ .long 0x102128C0
+ .long 0x13C686C2
+ .long 0x13DEE8C0
+ .long 0x10A5F0C0
+ lvx 28,28,7
+ .long 0x7F002699
+ addi 4,4,16
+ vsldoi 19,18,18,8
+ .long 0x108498C0
+ vsel 29,3,2,1
+ .long 0x1063E0C0
+ .long 0x1084E8C0
+ .long 0x13C1FEC2
+ .long 0x1084F0C0
+ vxor 29,5,6
+ vsel 29,6,7,29
+ .long 0x100020C0
+ .long 0x13C586C2
+ .long 0x13DEE8C0
+ .long 0x1084F0C0
+ lvx 28,29,7
+ .long 0x1063C0C0
+ vsel 29,2,1,0
+ .long 0x1042E0C0
+ .long 0x1063E8C0
+ .long 0x13C0FEC2
+ .long 0x1063F0C0
+ vxor 29,4,5
+ vsel 29,5,6,29
+ .long 0x10E718C0
+ .long 0x13C486C2
+ .long 0x13DEE8C0
+ .long 0x1063F0C0
+ lvx 28,30,7
+ .long 0x7F402699
+ addi 4,4,16
+ vsldoi 25,24,24,8
+ .long 0x1042C8C0
+ vsel 29,1,0,7
+ .long 0x1021E0C0
+ .long 0x1042E8C0
+ .long 0x13C7FEC2
+ .long 0x1042F0C0
+ vxor 29,3,4
+ vsel 29,4,5,29
+ .long 0x10C610C0
+ .long 0x13C386C2
+ .long 0x13DEE8C0
+ .long 0x1042F0C0
+ lvx 28,31,7
+ addi 7,7,0x80
+ .long 0x1021D0C0
+ vsel 29,0,7,6
+ .long 0x1000E0C0
+ .long 0x1021E8C0
+ .long 0x13C6FEC2
+ .long 0x1021F0C0
+ vxor 29,2,3
+ vsel 29,3,4,29
+ .long 0x10A508C0
+ .long 0x13C286C2
+ .long 0x13DEE8C0
+ .long 0x1021F0C0
+ lvx 28,0,7
+ vsldoi 27,26,26,8
+ .long 0x13C906C2
+ .long 0x1108F0C0
+ .long 0x13DA7EC2
+ .long 0x1108F0C0
+ .long 0x110888C0
+ .long 0x1000D8C0
+ vsel 29,7,6,5
+ .long 0x10E7E0C0
+ .long 0x1000E8C0
+ .long 0x13C5FEC2
+ .long 0x1000F0C0
+ vxor 29,1,2
+ vsel 29,2,3,29
+ .long 0x108400C0
+ .long 0x13C186C2
+ .long 0x13DEE8C0
+ .long 0x1000F0C0
+ lvx 28,10,7
+ mtctr 0
+ b .L16_xx
+.align 5
+.L16_xx:
+ .long 0x13CA06C2
+ .long 0x1129F0C0
+ .long 0x13DB7EC2
+ .long 0x1129F0C0
+ .long 0x112990C0
+ .long 0x10E740C0
+ vsel 29,6,5,4
+ .long 0x10C6E0C0
+ .long 0x10E7E8C0
+ .long 0x13C4FEC2
+ .long 0x10E7F0C0
+ vxor 29,0,1
+ vsel 29,1,2,29
+ .long 0x106338C0
+ .long 0x13C086C2
+ .long 0x13DEE8C0
+ .long 0x10E7F0C0
+ lvx 28,26,7
+ .long 0x13CB06C2
+ .long 0x114AF0C0
+ .long 0x13C87EC2
+ .long 0x114AF0C0
+ .long 0x114A98C0
+ .long 0x10C648C0
+ vsel 29,5,4,3
+ .long 0x10A5E0C0
+ .long 0x10C6E8C0
+ .long 0x13C3FEC2
+ .long 0x10C6F0C0
+ vxor 29,7,0
+ vsel 29,0,1,29
+ .long 0x104230C0
+ .long 0x13C786C2
+ .long 0x13DEE8C0
+ .long 0x10C6F0C0
+ lvx 28,27,7
+ .long 0x13CC06C2
+ .long 0x116BF0C0
+ .long 0x13C97EC2
+ .long 0x116BF0C0
+ .long 0x116BC0C0
+ .long 0x10A550C0
+ vsel 29,4,3,2
+ .long 0x1084E0C0
+ .long 0x10A5E8C0
+ .long 0x13C2FEC2
+ .long 0x10A5F0C0
+ vxor 29,6,7
+ vsel 29,7,0,29
+ .long 0x102128C0
+ .long 0x13C686C2
+ .long 0x13DEE8C0
+ .long 0x10A5F0C0
+ lvx 28,28,7
+ .long 0x13CD06C2
+ .long 0x118CF0C0
+ .long 0x13CA7EC2
+ .long 0x118CF0C0
+ .long 0x118CC8C0
+ .long 0x108458C0
+ vsel 29,3,2,1
+ .long 0x1063E0C0
+ .long 0x1084E8C0
+ .long 0x13C1FEC2
+ .long 0x1084F0C0
+ vxor 29,5,6
+ vsel 29,6,7,29
+ .long 0x100020C0
+ .long 0x13C586C2
+ .long 0x13DEE8C0
+ .long 0x1084F0C0
+ lvx 28,29,7
+ .long 0x13CE06C2
+ .long 0x11ADF0C0
+ .long 0x13CB7EC2
+ .long 0x11ADF0C0
+ .long 0x11ADD0C0
+ .long 0x106360C0
+ vsel 29,2,1,0
+ .long 0x1042E0C0
+ .long 0x1063E8C0
+ .long 0x13C0FEC2
+ .long 0x1063F0C0
+ vxor 29,4,5
+ vsel 29,5,6,29
+ .long 0x10E718C0
+ .long 0x13C486C2
+ .long 0x13DEE8C0
+ .long 0x1063F0C0
+ lvx 28,30,7
+ .long 0x13CF06C2
+ .long 0x11CEF0C0
+ .long 0x13CC7EC2
+ .long 0x11CEF0C0
+ .long 0x11CED8C0
+ .long 0x104268C0
+ vsel 29,1,0,7
+ .long 0x1021E0C0
+ .long 0x1042E8C0
+ .long 0x13C7FEC2
+ .long 0x1042F0C0
+ vxor 29,3,4
+ vsel 29,4,5,29
+ .long 0x10C610C0
+ .long 0x13C386C2
+ .long 0x13DEE8C0
+ .long 0x1042F0C0
+ lvx 28,31,7
+ addi 7,7,0x80
+ .long 0x13D006C2
+ .long 0x11EFF0C0
+ .long 0x13CD7EC2
+ .long 0x11EFF0C0
+ .long 0x11EF40C0
+ .long 0x102170C0
+ vsel 29,0,7,6
+ .long 0x1000E0C0
+ .long 0x1021E8C0
+ .long 0x13C6FEC2
+ .long 0x1021F0C0
+ vxor 29,2,3
+ vsel 29,3,4,29
+ .long 0x10A508C0
+ .long 0x13C286C2
+ .long 0x13DEE8C0
+ .long 0x1021F0C0
+ lvx 28,0,7
+ .long 0x13D106C2
+ .long 0x1210F0C0
+ .long 0x13CE7EC2
+ .long 0x1210F0C0
+ .long 0x121048C0
+ .long 0x100078C0
+ vsel 29,7,6,5
+ .long 0x10E7E0C0
+ .long 0x1000E8C0
+ .long 0x13C5FEC2
+ .long 0x1000F0C0
+ vxor 29,1,2
+ vsel 29,2,3,29
+ .long 0x108400C0
+ .long 0x13C186C2
+ .long 0x13DEE8C0
+ .long 0x1000F0C0
+ lvx 28,10,7
+ .long 0x13D206C2
+ .long 0x1231F0C0
+ .long 0x13CF7EC2
+ .long 0x1231F0C0
+ .long 0x123150C0
+ .long 0x10E780C0
+ vsel 29,6,5,4
+ .long 0x10C6E0C0
+ .long 0x10E7E8C0
+ .long 0x13C4FEC2
+ .long 0x10E7F0C0
+ vxor 29,0,1
+ vsel 29,1,2,29
+ .long 0x106338C0
+ .long 0x13C086C2
+ .long 0x13DEE8C0
+ .long 0x10E7F0C0
+ lvx 28,26,7
+ .long 0x13D306C2
+ .long 0x1252F0C0
+ .long 0x13D07EC2
+ .long 0x1252F0C0
+ .long 0x125258C0
+ .long 0x10C688C0
+ vsel 29,5,4,3
+ .long 0x10A5E0C0
+ .long 0x10C6E8C0
+ .long 0x13C3FEC2
+ .long 0x10C6F0C0
+ vxor 29,7,0
+ vsel 29,0,1,29
+ .long 0x104230C0
+ .long 0x13C786C2
+ .long 0x13DEE8C0
+ .long 0x10C6F0C0
+ lvx 28,27,7
+ .long 0x13D806C2
+ .long 0x1273F0C0
+ .long 0x13D17EC2
+ .long 0x1273F0C0
+ .long 0x127360C0
+ .long 0x10A590C0
+ vsel 29,4,3,2
+ .long 0x1084E0C0
+ .long 0x10A5E8C0
+ .long 0x13C2FEC2
+ .long 0x10A5F0C0
+ vxor 29,6,7
+ vsel 29,7,0,29
+ .long 0x102128C0
+ .long 0x13C686C2
+ .long 0x13DEE8C0
+ .long 0x10A5F0C0
+ lvx 28,28,7
+ .long 0x13D906C2
+ .long 0x1318F0C0
+ .long 0x13D27EC2
+ .long 0x1318F0C0
+ .long 0x131868C0
+ .long 0x108498C0
+ vsel 29,3,2,1
+ .long 0x1063E0C0
+ .long 0x1084E8C0
+ .long 0x13C1FEC2
+ .long 0x1084F0C0
+ vxor 29,5,6
+ vsel 29,6,7,29
+ .long 0x100020C0
+ .long 0x13C586C2
+ .long 0x13DEE8C0
+ .long 0x1084F0C0
+ lvx 28,29,7
+ .long 0x13DA06C2
+ .long 0x1339F0C0
+ .long 0x13D37EC2
+ .long 0x1339F0C0
+ .long 0x133970C0
+ .long 0x1063C0C0
+ vsel 29,2,1,0
+ .long 0x1042E0C0
+ .long 0x1063E8C0
+ .long 0x13C0FEC2
+ .long 0x1063F0C0
+ vxor 29,4,5
+ vsel 29,5,6,29
+ .long 0x10E718C0
+ .long 0x13C486C2
+ .long 0x13DEE8C0
+ .long 0x1063F0C0
+ lvx 28,30,7
+ .long 0x13DB06C2
+ .long 0x135AF0C0
+ .long 0x13D87EC2
+ .long 0x135AF0C0
+ .long 0x135A78C0
+ .long 0x1042C8C0
+ vsel 29,1,0,7
+ .long 0x1021E0C0
+ .long 0x1042E8C0
+ .long 0x13C7FEC2
+ .long 0x1042F0C0
+ vxor 29,3,4
+ vsel 29,4,5,29
+ .long 0x10C610C0
+ .long 0x13C386C2
+ .long 0x13DEE8C0
+ .long 0x1042F0C0
+ lvx 28,31,7
+ addi 7,7,0x80
+ .long 0x13C806C2
+ .long 0x137BF0C0
+ .long 0x13D97EC2
+ .long 0x137BF0C0
+ .long 0x137B80C0
+ .long 0x1021D0C0
+ vsel 29,0,7,6
+ .long 0x1000E0C0
+ .long 0x1021E8C0
+ .long 0x13C6FEC2
+ .long 0x1021F0C0
+ vxor 29,2,3
+ vsel 29,3,4,29
+ .long 0x10A508C0
+ .long 0x13C286C2
+ .long 0x13DEE8C0
+ .long 0x1021F0C0
+ lvx 28,0,7
+ .long 0x13C906C2
+ .long 0x1108F0C0
+ .long 0x13DA7EC2
+ .long 0x1108F0C0
+ .long 0x110888C0
+ .long 0x1000D8C0
+ vsel 29,7,6,5
+ .long 0x10E7E0C0
+ .long 0x1000E8C0
+ .long 0x13C5FEC2
+ .long 0x1000F0C0
+ vxor 29,1,2
+ vsel 29,2,3,29
+ .long 0x108400C0
+ .long 0x13C186C2
+ .long 0x13DEE8C0
+ .long 0x1000F0C0
+ lvx 28,10,7
+ bdnz .L16_xx
+
+ lvx 10,0,11
+ subic. 5,5,1
+ lvx 11,10,11
+ .long 0x100050C0
+ lvx 12,26,11
+ .long 0x102158C0
+ lvx 13,27,11
+ .long 0x104260C0
+ lvx 14,28,11
+ .long 0x106368C0
+ lvx 15,29,11
+ .long 0x108470C0
+ lvx 16,30,11
+ .long 0x10A578C0
+ lvx 17,31,11
+ .long 0x10C680C0
+ .long 0x10E788C0
+ bne .Loop
+ vperm 0,0,1,28
+ vperm 2,2,3,28
+ vperm 4,4,5,28
+ vperm 6,6,7,28
+ .long 0x7C001F99
+ .long 0x7C4A1F99
+ .long 0x7C9A1F99
+ .long 0x7CDB1F99
+ addi 11,1,175
+ mtlr 8
+ mtspr 256,12
+ lvx 24,0,11
+ lvx 25,10,11
+ lvx 26,26,11
+ lvx 27,27,11
+ lvx 28,28,11
+ lvx 29,29,11
+ lvx 30,30,11
+ lvx 31,31,11
+ lwz 26,304(1)
+ lwz 27,308(1)
+ lwz 28,312(1)
+ lwz 29,316(1)
+ lwz 30,320(1)
+ lwz 31,324(1)
+ addi 1,1,328
+ blr
+.long 0
+.byte 0,12,4,1,0x80,6,3,0
+.long 0
+.size sha512_block_p8,.-sha512_block_p8
+.align 6
+.LPICmeup:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 6
+ addi 6,6,56
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.long 0x428a2f98,0xd728ae22
+.long 0x428a2f98,0xd728ae22
+.long 0x71374491,0x23ef65cd
+.long 0x71374491,0x23ef65cd
+.long 0xb5c0fbcf,0xec4d3b2f
+.long 0xb5c0fbcf,0xec4d3b2f
+.long 0xe9b5dba5,0x8189dbbc
+.long 0xe9b5dba5,0x8189dbbc
+.long 0x3956c25b,0xf348b538
+.long 0x3956c25b,0xf348b538
+.long 0x59f111f1,0xb605d019
+.long 0x59f111f1,0xb605d019
+.long 0x923f82a4,0xaf194f9b
+.long 0x923f82a4,0xaf194f9b
+.long 0xab1c5ed5,0xda6d8118
+.long 0xab1c5ed5,0xda6d8118
+.long 0xd807aa98,0xa3030242
+.long 0xd807aa98,0xa3030242
+.long 0x12835b01,0x45706fbe
+.long 0x12835b01,0x45706fbe
+.long 0x243185be,0x4ee4b28c
+.long 0x243185be,0x4ee4b28c
+.long 0x550c7dc3,0xd5ffb4e2
+.long 0x550c7dc3,0xd5ffb4e2
+.long 0x72be5d74,0xf27b896f
+.long 0x72be5d74,0xf27b896f
+.long 0x80deb1fe,0x3b1696b1
+.long 0x80deb1fe,0x3b1696b1
+.long 0x9bdc06a7,0x25c71235
+.long 0x9bdc06a7,0x25c71235
+.long 0xc19bf174,0xcf692694
+.long 0xc19bf174,0xcf692694
+.long 0xe49b69c1,0x9ef14ad2
+.long 0xe49b69c1,0x9ef14ad2
+.long 0xefbe4786,0x384f25e3
+.long 0xefbe4786,0x384f25e3
+.long 0x0fc19dc6,0x8b8cd5b5
+.long 0x0fc19dc6,0x8b8cd5b5
+.long 0x240ca1cc,0x77ac9c65
+.long 0x240ca1cc,0x77ac9c65
+.long 0x2de92c6f,0x592b0275
+.long 0x2de92c6f,0x592b0275
+.long 0x4a7484aa,0x6ea6e483
+.long 0x4a7484aa,0x6ea6e483
+.long 0x5cb0a9dc,0xbd41fbd4
+.long 0x5cb0a9dc,0xbd41fbd4
+.long 0x76f988da,0x831153b5
+.long 0x76f988da,0x831153b5
+.long 0x983e5152,0xee66dfab
+.long 0x983e5152,0xee66dfab
+.long 0xa831c66d,0x2db43210
+.long 0xa831c66d,0x2db43210
+.long 0xb00327c8,0x98fb213f
+.long 0xb00327c8,0x98fb213f
+.long 0xbf597fc7,0xbeef0ee4
+.long 0xbf597fc7,0xbeef0ee4
+.long 0xc6e00bf3,0x3da88fc2
+.long 0xc6e00bf3,0x3da88fc2
+.long 0xd5a79147,0x930aa725
+.long 0xd5a79147,0x930aa725
+.long 0x06ca6351,0xe003826f
+.long 0x06ca6351,0xe003826f
+.long 0x14292967,0x0a0e6e70
+.long 0x14292967,0x0a0e6e70
+.long 0x27b70a85,0x46d22ffc
+.long 0x27b70a85,0x46d22ffc
+.long 0x2e1b2138,0x5c26c926
+.long 0x2e1b2138,0x5c26c926
+.long 0x4d2c6dfc,0x5ac42aed
+.long 0x4d2c6dfc,0x5ac42aed
+.long 0x53380d13,0x9d95b3df
+.long 0x53380d13,0x9d95b3df
+.long 0x650a7354,0x8baf63de
+.long 0x650a7354,0x8baf63de
+.long 0x766a0abb,0x3c77b2a8
+.long 0x766a0abb,0x3c77b2a8
+.long 0x81c2c92e,0x47edaee6
+.long 0x81c2c92e,0x47edaee6
+.long 0x92722c85,0x1482353b
+.long 0x92722c85,0x1482353b
+.long 0xa2bfe8a1,0x4cf10364
+.long 0xa2bfe8a1,0x4cf10364
+.long 0xa81a664b,0xbc423001
+.long 0xa81a664b,0xbc423001
+.long 0xc24b8b70,0xd0f89791
+.long 0xc24b8b70,0xd0f89791
+.long 0xc76c51a3,0x0654be30
+.long 0xc76c51a3,0x0654be30
+.long 0xd192e819,0xd6ef5218
+.long 0xd192e819,0xd6ef5218
+.long 0xd6990624,0x5565a910
+.long 0xd6990624,0x5565a910
+.long 0xf40e3585,0x5771202a
+.long 0xf40e3585,0x5771202a
+.long 0x106aa070,0x32bbd1b8
+.long 0x106aa070,0x32bbd1b8
+.long 0x19a4c116,0xb8d2d0c8
+.long 0x19a4c116,0xb8d2d0c8
+.long 0x1e376c08,0x5141ab53
+.long 0x1e376c08,0x5141ab53
+.long 0x2748774c,0xdf8eeb99
+.long 0x2748774c,0xdf8eeb99
+.long 0x34b0bcb5,0xe19b48a8
+.long 0x34b0bcb5,0xe19b48a8
+.long 0x391c0cb3,0xc5c95a63
+.long 0x391c0cb3,0xc5c95a63
+.long 0x4ed8aa4a,0xe3418acb
+.long 0x4ed8aa4a,0xe3418acb
+.long 0x5b9cca4f,0x7763e373
+.long 0x5b9cca4f,0x7763e373
+.long 0x682e6ff3,0xd6b2b8a3
+.long 0x682e6ff3,0xd6b2b8a3
+.long 0x748f82ee,0x5defb2fc
+.long 0x748f82ee,0x5defb2fc
+.long 0x78a5636f,0x43172f60
+.long 0x78a5636f,0x43172f60
+.long 0x84c87814,0xa1f0ab72
+.long 0x84c87814,0xa1f0ab72
+.long 0x8cc70208,0x1a6439ec
+.long 0x8cc70208,0x1a6439ec
+.long 0x90befffa,0x23631e28
+.long 0x90befffa,0x23631e28
+.long 0xa4506ceb,0xde82bde9
+.long 0xa4506ceb,0xde82bde9
+.long 0xbef9a3f7,0xb2c67915
+.long 0xbef9a3f7,0xb2c67915
+.long 0xc67178f2,0xe372532b
+.long 0xc67178f2,0xe372532b
+.long 0xca273ece,0xea26619c
+.long 0xca273ece,0xea26619c
+.long 0xd186b8c7,0x21c0c207
+.long 0xd186b8c7,0x21c0c207
+.long 0xeada7dd6,0xcde0eb1e
+.long 0xeada7dd6,0xcde0eb1e
+.long 0xf57d4f7f,0xee6ed178
+.long 0xf57d4f7f,0xee6ed178
+.long 0x06f067aa,0x72176fba
+.long 0x06f067aa,0x72176fba
+.long 0x0a637dc5,0xa2c898a6
+.long 0x0a637dc5,0xa2c898a6
+.long 0x113f9804,0xbef90dae
+.long 0x113f9804,0xbef90dae
+.long 0x1b710b35,0x131c471b
+.long 0x1b710b35,0x131c471b
+.long 0x28db77f5,0x23047d84
+.long 0x28db77f5,0x23047d84
+.long 0x32caab7b,0x40c72493
+.long 0x32caab7b,0x40c72493
+.long 0x3c9ebe0a,0x15c9bebc
+.long 0x3c9ebe0a,0x15c9bebc
+.long 0x431d67c4,0x9c100d4c
+.long 0x431d67c4,0x9c100d4c
+.long 0x4cc5d4be,0xcb3e42b6
+.long 0x4cc5d4be,0xcb3e42b6
+.long 0x597f299c,0xfc657e2a
+.long 0x597f299c,0xfc657e2a
+.long 0x5fcb6fab,0x3ad6faec
+.long 0x5fcb6fab,0x3ad6faec
+.long 0x6c44198c,0x4a475817
+.long 0x6c44198c,0x4a475817
+.long 0,0
+.long 0,0
+.long 0x00010203,0x04050607
+.long 0x10111213,0x14151617
+.byte 83,72,65,53,49,50,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 2
diff --git a/sys/crypto/openssl/powerpc/vpaes-ppc.S b/sys/crypto/openssl/powerpc/vpaes-ppc.S
new file mode 100644
index 000000000000..bafb4de1f786
--- /dev/null
+++ b/sys/crypto/openssl/powerpc/vpaes-ppc.S
@@ -0,0 +1,1469 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from vpaes-ppc.pl. */
+.machine "any"
+
+.text
+
+.align 7
+_vpaes_consts:
+.Lk_mc_forward:
+.byte 0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c
+.byte 0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00
+.byte 0x09,0x0a,0x0b,0x08,0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04
+.byte 0x0d,0x0e,0x0f,0x0c,0x01,0x02,0x03,0x00,0x05,0x06,0x07,0x04,0x09,0x0a,0x0b,0x08
+.Lk_mc_backward:
+.byte 0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e
+.byte 0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a
+.byte 0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02,0x07,0x04,0x05,0x06
+.byte 0x07,0x04,0x05,0x06,0x0b,0x08,0x09,0x0a,0x0f,0x0c,0x0d,0x0e,0x03,0x00,0x01,0x02
+.Lk_sr:
+.byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
+.byte 0x00,0x05,0x0a,0x0f,0x04,0x09,0x0e,0x03,0x08,0x0d,0x02,0x07,0x0c,0x01,0x06,0x0b
+.byte 0x00,0x09,0x02,0x0b,0x04,0x0d,0x06,0x0f,0x08,0x01,0x0a,0x03,0x0c,0x05,0x0e,0x07
+.byte 0x00,0x0d,0x0a,0x07,0x04,0x01,0x0e,0x0b,0x08,0x05,0x02,0x0f,0x0c,0x09,0x06,0x03
+
+
+
+
+.Lk_inv:
+.byte 0xf0,0x01,0x08,0x0d,0x0f,0x06,0x05,0x0e,0x02,0x0c,0x0b,0x0a,0x09,0x03,0x07,0x04
+.byte 0xf0,0x07,0x0b,0x0f,0x06,0x0a,0x04,0x01,0x09,0x08,0x05,0x02,0x0c,0x0e,0x0d,0x03
+.Lk_ipt:
+.byte 0x00,0x70,0x2a,0x5a,0x98,0xe8,0xb2,0xc2,0x08,0x78,0x22,0x52,0x90,0xe0,0xba,0xca
+.byte 0x00,0x4d,0x7c,0x31,0x7d,0x30,0x01,0x4c,0x81,0xcc,0xfd,0xb0,0xfc,0xb1,0x80,0xcd
+.Lk_sbo:
+.byte 0x00,0xc7,0xbd,0x6f,0x17,0x6d,0xd2,0xd0,0x78,0xa8,0x02,0xc5,0x7a,0xbf,0xaa,0x15
+.byte 0x00,0x6a,0xbb,0x5f,0xa5,0x74,0xe4,0xcf,0xfa,0x35,0x2b,0x41,0xd1,0x90,0x1e,0x8e
+.Lk_sb1:
+.byte 0x00,0x23,0xe2,0xfa,0x15,0xd4,0x18,0x36,0xef,0xd9,0x2e,0x0d,0xc1,0xcc,0xf7,0x3b
+.byte 0x00,0x3e,0x50,0xcb,0x8f,0xe1,0x9b,0xb1,0x44,0xf5,0x2a,0x14,0x6e,0x7a,0xdf,0xa5
+.Lk_sb2:
+.byte 0x00,0x29,0xe1,0x0a,0x40,0x88,0xeb,0x69,0x4a,0x23,0x82,0xab,0xc8,0x63,0xa1,0xc2
+.byte 0x00,0x24,0x71,0x0b,0xc6,0x93,0x7a,0xe2,0xcd,0x2f,0x98,0xbc,0x55,0xe9,0xb7,0x5e
+
+
+
+
+.Lk_dipt:
+.byte 0x00,0x5f,0x54,0x0b,0x04,0x5b,0x50,0x0f,0x1a,0x45,0x4e,0x11,0x1e,0x41,0x4a,0x15
+.byte 0x00,0x65,0x05,0x60,0xe6,0x83,0xe3,0x86,0x94,0xf1,0x91,0xf4,0x72,0x17,0x77,0x12
+.Lk_dsbo:
+.byte 0x00,0x40,0xf9,0x7e,0x53,0xea,0x87,0x13,0x2d,0x3e,0x94,0xd4,0xb9,0x6d,0xaa,0xc7
+.byte 0x00,0x1d,0x44,0x93,0x0f,0x56,0xd7,0x12,0x9c,0x8e,0xc5,0xd8,0x59,0x81,0x4b,0xca
+.Lk_dsb9:
+.byte 0x00,0xd6,0x86,0x9a,0x53,0x03,0x1c,0x85,0xc9,0x4c,0x99,0x4f,0x50,0x1f,0xd5,0xca
+.byte 0x00,0x49,0xd7,0xec,0x89,0x17,0x3b,0xc0,0x65,0xa5,0xfb,0xb2,0x9e,0x2c,0x5e,0x72
+.Lk_dsbd:
+.byte 0x00,0xa2,0xb1,0xe6,0xdf,0xcc,0x57,0x7d,0x39,0x44,0x2a,0x88,0x13,0x9b,0x6e,0xf5
+.byte 0x00,0xcb,0xc6,0x24,0xf7,0xfa,0xe2,0x3c,0xd3,0xef,0xde,0x15,0x0d,0x18,0x31,0x29
+.Lk_dsbb:
+.byte 0x00,0x42,0xb4,0x96,0x92,0x64,0x22,0xd0,0x04,0xd4,0xf2,0xb0,0xf6,0x46,0x26,0x60
+.byte 0x00,0x67,0x59,0xcd,0xa6,0x98,0x94,0xc1,0x6b,0xaa,0x55,0x32,0x3e,0x0c,0xff,0xf3
+.Lk_dsbe:
+.byte 0x00,0xd0,0xd4,0x26,0x96,0x92,0xf2,0x46,0xb0,0xf6,0xb4,0x64,0x04,0x60,0x42,0x22
+.byte 0x00,0xc1,0xaa,0xff,0xcd,0xa6,0x55,0x0c,0x32,0x3e,0x59,0x98,0x6b,0xf3,0x67,0x94
+
+
+
+
+.Lk_dksd:
+.byte 0x00,0x47,0xe4,0xa3,0x5d,0x1a,0xb9,0xfe,0xf9,0xbe,0x1d,0x5a,0xa4,0xe3,0x40,0x07
+.byte 0x00,0x83,0x36,0xb5,0xf4,0x77,0xc2,0x41,0x1e,0x9d,0x28,0xab,0xea,0x69,0xdc,0x5f
+.Lk_dksb:
+.byte 0x00,0xd5,0x50,0x85,0x1f,0xca,0x4f,0x9a,0x99,0x4c,0xc9,0x1c,0x86,0x53,0xd6,0x03
+.byte 0x00,0x4a,0xfc,0xb6,0xa7,0xed,0x5b,0x11,0xc8,0x82,0x34,0x7e,0x6f,0x25,0x93,0xd9
+.Lk_dkse:
+.byte 0x00,0xd6,0xc9,0x1f,0xca,0x1c,0x03,0xd5,0x86,0x50,0x4f,0x99,0x4c,0x9a,0x85,0x53
+.byte 0xe8,0x7b,0xdc,0x4f,0x05,0x96,0x31,0xa2,0x87,0x14,0xb3,0x20,0x6a,0xf9,0x5e,0xcd
+.Lk_dks9:
+.byte 0x00,0xa7,0xd9,0x7e,0xc8,0x6f,0x11,0xb6,0xfc,0x5b,0x25,0x82,0x34,0x93,0xed,0x4a
+.byte 0x00,0x33,0x14,0x27,0x62,0x51,0x76,0x45,0xce,0xfd,0xda,0xe9,0xac,0x9f,0xb8,0x8b
+
+.Lk_rcon:
+.byte 0xb6,0xee,0x9d,0xaf,0xb9,0x91,0x83,0x1f,0x81,0x7d,0x7c,0x4d,0x08,0x98,0x2a,0x70
+.Lk_s63:
+.byte 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b
+
+.Lk_opt:
+.byte 0x00,0x60,0xb6,0xd6,0x29,0x49,0x9f,0xff,0x08,0x68,0xbe,0xde,0x21,0x41,0x97,0xf7
+.byte 0x00,0xec,0xbc,0x50,0x51,0xbd,0xed,0x01,0xe0,0x0c,0x5c,0xb0,0xb1,0x5d,0x0d,0xe1
+.Lk_deskew:
+.byte 0x00,0xe3,0xa4,0x47,0x40,0xa3,0xe4,0x07,0x1a,0xf9,0xbe,0x5d,0x5a,0xb9,0xfe,0x1d
+.byte 0x00,0x69,0xea,0x83,0xdc,0xb5,0x36,0x5f,0x77,0x1e,0x9d,0xf4,0xab,0xc2,0x41,0x28
+.align 5
+.Lconsts:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 12
+ addi 12,12,-0x308
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105,111,110,32,65,69,83,32,102,111,114,32,65,108,116,105,86,101,99,44,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0
+.align 2
+.align 6
+
+
+
+
+
+
+.align 4
+_vpaes_encrypt_preheat:
+ mflr 8
+ bl .Lconsts
+ mtlr 8
+ li 11, 0xc0
+ li 10, 0xd0
+ li 9, 0xe0
+ li 8, 0xf0
+ vxor 7, 7, 7
+ vspltisb 8,4
+ vspltisb 9,0x0f
+ lvx 10, 12, 11
+ li 11, 0x100
+ lvx 11, 12, 10
+ li 10, 0x110
+ lvx 12, 12, 9
+ li 9, 0x120
+ lvx 13, 12, 8
+ li 8, 0x130
+ lvx 14, 12, 11
+ li 11, 0x140
+ lvx 15, 12, 10
+ li 10, 0x150
+ lvx 16, 12, 9
+ lvx 17, 12, 8
+ lvx 18, 12, 11
+ lvx 19, 12, 10
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.align 5
+_vpaes_encrypt_core:
+ lwz 8, 240(5)
+ li 9, 16
+ lvx 5, 0, 5
+ li 11, 0x10
+ lvx 6, 9, 5
+ addi 9, 9, 16
+ vperm 5, 5, 6, 31
+ addi 10, 11, 0x40
+ vsrb 1, 0, 8
+ vperm 0, 12, 12, 0
+ vperm 1, 13, 13, 1
+ vxor 0, 0, 5
+ vxor 0, 0, 1
+ mtctr 8
+ b .Lenc_entry
+
+.align 4
+.Lenc_loop:
+
+ vperm 4, 17, 7, 2
+ lvx 1, 12, 11
+ addi 11, 11, 16
+ vperm 0, 16, 7, 3
+ vxor 4, 4, 5
+ andi. 11, 11, 0x30
+ vperm 5, 19, 7, 2
+ vxor 0, 0, 4
+ vperm 2, 18, 7, 3
+ lvx 4, 12, 10
+ addi 10, 11, 0x40
+ vperm 3, 0, 7, 1
+ vxor 2, 2, 5
+ vperm 0, 0, 7, 4
+ vxor 3, 3, 2
+ vperm 4, 3, 7, 1
+ vxor 0, 0, 3
+ vxor 0, 0, 4
+
+.Lenc_entry:
+
+ vsrb 1, 0, 8
+ vperm 5, 11, 11, 0
+ vxor 0, 0, 1
+ vperm 3, 10, 10, 1
+ vperm 4, 10, 10, 0
+ vand 0, 0, 9
+ vxor 3, 3, 5
+ vxor 4, 4, 5
+ vperm 2, 10, 7, 3
+ vor 5,6,6
+ lvx 6, 9, 5
+ vperm 3, 10, 7, 4
+ addi 9, 9, 16
+ vxor 2, 2, 0
+ vperm 5, 5, 6, 31
+ vxor 3, 3, 1
+ bdnz .Lenc_loop
+
+
+ addi 10, 11, 0x80
+
+
+ vperm 4, 14, 7, 2
+ lvx 1, 12, 10
+ vperm 0, 15, 7, 3
+ vxor 4, 4, 5
+ vxor 0, 0, 4
+ vperm 0, 0, 7, 1
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.globl vpaes_encrypt
+.type vpaes_encrypt,@function
+.align 5
+vpaes_encrypt:
+ stwu 1,-232(1)
+ li 10,39
+ li 11,55
+ mflr 6
+ mfspr 7,256
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ stw 7,228(1)
+ li 0, -1
+ stw 6,236(1)
+ mtspr 256,0
+
+ bl _vpaes_encrypt_preheat
+
+ lvsl 27, 0, 3
+ lvx 0, 0, 3
+ addi 3, 3, 15
+ lvsr 29, 0, 4
+ lvsl 31, 0, 5
+ lvx 26, 0, 3
+ vperm 0, 0, 26, 27
+
+ bl _vpaes_encrypt_core
+
+ andi. 8, 4, 15
+ li 9, 16
+ beq .Lenc_out_aligned
+
+ vperm 0, 0, 0, 29
+ mtctr 9
+.Lenc_out_unaligned:
+ stvebx 0, 0, 4
+ addi 4, 4, 1
+ bdnz .Lenc_out_unaligned
+ b .Lenc_done
+
+.align 4
+.Lenc_out_aligned:
+ stvx 0, 0, 4
+.Lenc_done:
+
+ li 10,39
+ li 11,55
+ mtlr 6
+ mtspr 256,7
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ addi 1,1,232
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,0,3,0
+.long 0
+.size vpaes_encrypt,.-vpaes_encrypt
+
+.align 4
+_vpaes_decrypt_preheat:
+ mflr 8
+ bl .Lconsts
+ mtlr 8
+ li 11, 0xc0
+ li 10, 0xd0
+ li 9, 0x160
+ li 8, 0x170
+ vxor 7, 7, 7
+ vspltisb 8,4
+ vspltisb 9,0x0f
+ lvx 10, 12, 11
+ li 11, 0x180
+ lvx 11, 12, 10
+ li 10, 0x190
+ lvx 12, 12, 9
+ li 9, 0x1a0
+ lvx 13, 12, 8
+ li 8, 0x1b0
+ lvx 14, 12, 11
+ li 11, 0x1c0
+ lvx 15, 12, 10
+ li 10, 0x1d0
+ lvx 16, 12, 9
+ li 9, 0x1e0
+ lvx 17, 12, 8
+ li 8, 0x1f0
+ lvx 18, 12, 11
+ li 11, 0x200
+ lvx 19, 12, 10
+ li 10, 0x210
+ lvx 20, 12, 9
+ lvx 21, 12, 8
+ lvx 22, 12, 11
+ lvx 23, 12, 10
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+
+
+
+
+
+.align 4
+_vpaes_decrypt_core:
+ lwz 8, 240(5)
+ li 9, 16
+ lvx 5, 0, 5
+ li 11, 0x30
+ lvx 6, 9, 5
+ addi 9, 9, 16
+ vperm 5, 5, 6, 31
+ vsrb 1, 0, 8
+ vperm 0, 12, 12, 0
+ vperm 1, 13, 13, 1
+ vxor 0, 0, 5
+ vxor 0, 0, 1
+ mtctr 8
+ b .Ldec_entry
+
+.align 4
+.Ldec_loop:
+
+
+
+ lvx 0, 12, 11
+
+
+ vperm 4, 16, 7, 2
+ subi 11, 11, 16
+ vperm 1, 17, 7, 3
+ andi. 11, 11, 0x30
+ vxor 5, 5, 4
+
+ vxor 5, 5, 1
+
+
+ vperm 4, 18, 7, 2
+ vperm 5, 5, 7, 0
+ vperm 1, 19, 7, 3
+ vxor 5, 5, 4
+
+ vxor 5, 5, 1
+
+
+ vperm 4, 20, 7, 2
+ vperm 5, 5, 7, 0
+ vperm 1, 21, 7, 3
+ vxor 5, 5, 4
+
+ vxor 5, 5, 1
+
+
+ vperm 4, 22, 7, 2
+ vperm 5, 5, 7, 0
+ vperm 1, 23, 7, 3
+ vxor 0, 5, 4
+ vxor 0, 0, 1
+
+.Ldec_entry:
+
+ vsrb 1, 0, 8
+ vperm 2, 11, 11, 0
+ vxor 0, 0, 1
+ vperm 3, 10, 10, 1
+ vperm 4, 10, 10, 0
+ vand 0, 0, 9
+ vxor 3, 3, 2
+ vxor 4, 4, 2
+ vperm 2, 10, 7, 3
+ vor 5,6,6
+ lvx 6, 9, 5
+ vperm 3, 10, 7, 4
+ addi 9, 9, 16
+ vxor 2, 2, 0
+ vperm 5, 5, 6, 31
+ vxor 3, 3, 1
+ bdnz .Ldec_loop
+
+
+ addi 10, 11, 0x80
+
+ vperm 4, 14, 7, 2
+
+ lvx 2, 12, 10
+ vperm 1, 15, 7, 3
+ vxor 4, 4, 5
+ vxor 0, 1, 4
+ vperm 0, 0, 7, 2
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.globl vpaes_decrypt
+.type vpaes_decrypt,@function
+.align 5
+vpaes_decrypt:
+ stwu 1,-232(1)
+ li 10,39
+ li 11,55
+ mflr 6
+ mfspr 7,256
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ stw 7,228(1)
+ li 0, -1
+ stw 6,236(1)
+ mtspr 256,0
+
+ bl _vpaes_decrypt_preheat
+
+ lvsl 27, 0, 3
+ lvx 0, 0, 3
+ addi 3, 3, 15
+ lvsr 29, 0, 4
+ lvsl 31, 0, 5
+ lvx 26, 0, 3
+ vperm 0, 0, 26, 27
+
+ bl _vpaes_decrypt_core
+
+ andi. 8, 4, 15
+ li 9, 16
+ beq .Ldec_out_aligned
+
+ vperm 0, 0, 0, 29
+ mtctr 9
+.Ldec_out_unaligned:
+ stvebx 0, 0, 4
+ addi 4, 4, 1
+ bdnz .Ldec_out_unaligned
+ b .Ldec_done
+
+.align 4
+.Ldec_out_aligned:
+ stvx 0, 0, 4
+.Ldec_done:
+
+ li 10,39
+ li 11,55
+ mtlr 6
+ mtspr 256,7
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ addi 1,1,232
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,0,3,0
+.long 0
+.size vpaes_decrypt,.-vpaes_decrypt
+
+.globl vpaes_cbc_encrypt
+.type vpaes_cbc_encrypt,@function
+.align 5
+vpaes_cbc_encrypt:
+ cmplwi 5,16
+ .long 0x4dc00020
+
+ stwu 1,-240(1)
+ mflr 0
+ li 10,39
+ li 11,55
+ mfspr 12,256
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ stw 12,228(1)
+ stw 30,232(1)
+ stw 31,236(1)
+ li 9, -16
+ stw 0, 244(1)
+
+ and 30, 5, 9
+ andi. 9, 4, 15
+ mr 5, 6
+ mr 31, 7
+ li 6, -1
+ mcrf 1, 0
+ mr 7, 12
+ mtspr 256,6
+
+ lvx 24, 0, 31
+ li 9, 15
+ lvsl 27, 0, 31
+ lvx 25, 9, 31
+ vperm 24, 24, 25, 27
+
+ cmpwi 8, 0
+ neg 8, 3
+ vxor 7, 7, 7
+ lvsl 31, 0, 5
+ lvsr 29, 0, 4
+ lvsr 27, 0, 8
+ vnor 30, 7, 7
+ lvx 26, 0, 3
+ vperm 30, 7, 30, 29
+ addi 3, 3, 15
+
+ beq .Lcbc_decrypt
+
+ bl _vpaes_encrypt_preheat
+ li 0, 16
+
+ beq 1, .Lcbc_enc_loop
+
+ vor 0,26,26
+ lvx 26, 0, 3
+ addi 3, 3, 16
+ vperm 0, 0, 26, 27
+ vxor 0, 0, 24
+
+ bl _vpaes_encrypt_core
+
+ andi. 8, 4, 15
+ vor 24,0,0
+ sub 9, 4, 8
+ vperm 28, 0, 0, 29
+
+.Lcbc_enc_head:
+ stvebx 28, 8, 9
+ cmpwi 8, 15
+ addi 8, 8, 1
+ bne .Lcbc_enc_head
+
+ sub. 30, 30, 0
+ addi 4, 4, 16
+ beq .Lcbc_unaligned_done
+
+.Lcbc_enc_loop:
+ vor 0,26,26
+ lvx 26, 0, 3
+ addi 3, 3, 16
+ vperm 0, 0, 26, 27
+ vxor 0, 0, 24
+
+ bl _vpaes_encrypt_core
+
+ vor 24,0,0
+ sub. 30, 30, 0
+ vperm 0, 0, 0, 29
+ vsel 1, 28, 0, 30
+ vor 28,0,0
+ stvx 1, 0, 4
+ addi 4, 4, 16
+ bne .Lcbc_enc_loop
+
+ b .Lcbc_done
+
+.align 5
+.Lcbc_decrypt:
+ bl _vpaes_decrypt_preheat
+ li 0, 16
+
+ beq 1, .Lcbc_dec_loop
+
+ vor 0,26,26
+ lvx 26, 0, 3
+ addi 3, 3, 16
+ vperm 0, 0, 26, 27
+ vor 25,0,0
+
+ bl _vpaes_decrypt_core
+
+ andi. 8, 4, 15
+ vxor 0, 0, 24
+ vor 24,25,25
+ sub 9, 4, 8
+ vperm 28, 0, 0, 29
+
+.Lcbc_dec_head:
+ stvebx 28, 8, 9
+ cmpwi 8, 15
+ addi 8, 8, 1
+ bne .Lcbc_dec_head
+
+ sub. 30, 30, 0
+ addi 4, 4, 16
+ beq .Lcbc_unaligned_done
+
+.Lcbc_dec_loop:
+ vor 0,26,26
+ lvx 26, 0, 3
+ addi 3, 3, 16
+ vperm 0, 0, 26, 27
+ vor 25,0,0
+
+ bl _vpaes_decrypt_core
+
+ vxor 0, 0, 24
+ vor 24,25,25
+ sub. 30, 30, 0
+ vperm 0, 0, 0, 29
+ vsel 1, 28, 0, 30
+ vor 28,0,0
+ stvx 1, 0, 4
+ addi 4, 4, 16
+ bne .Lcbc_dec_loop
+
+.Lcbc_done:
+ beq 1, .Lcbc_write_iv
+
+.Lcbc_unaligned_done:
+ andi. 8, 4, 15
+ sub 4, 4, 8
+ li 9, 0
+.Lcbc_tail:
+ stvebx 28, 9, 4
+ addi 9, 9, 1
+ cmpw 9, 8
+ bne .Lcbc_tail
+
+.Lcbc_write_iv:
+ neg 8, 31
+ li 10, 4
+ lvsl 29, 0, 8
+ li 11, 8
+ li 12, 12
+ vperm 24, 24, 24, 29
+ stvewx 24, 0, 31
+ stvewx 24, 10, 31
+ stvewx 24, 11, 31
+ stvewx 24, 12, 31
+
+ mtspr 256,7
+ li 10,39
+ li 11,55
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+.Lcbc_abort:
+ lwz 0, 244(1)
+ lwz 30,232(1)
+ lwz 31,236(1)
+ mtlr 0
+ addi 1,1,240
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,2,6,0
+.long 0
+.size vpaes_cbc_encrypt,.-vpaes_cbc_encrypt
+
+
+
+
+
+.align 4
+_vpaes_key_preheat:
+ mflr 8
+ bl .Lconsts
+ mtlr 8
+ li 11, 0xc0
+ li 10, 0xd0
+ li 9, 0xe0
+ li 8, 0xf0
+
+ vspltisb 8,4
+ vxor 9,9,9
+ lvx 10, 12, 11
+ li 11, 0x120
+ lvx 11, 12, 10
+ li 10, 0x130
+ lvx 12, 12, 9
+ li 9, 0x220
+ lvx 13, 12, 8
+ li 8, 0x230
+
+ lvx 14, 12, 11
+ li 11, 0x240
+ lvx 15, 12, 10
+ li 10, 0x250
+
+ lvx 16, 12, 9
+ li 9, 0x260
+ lvx 17, 12, 8
+ li 8, 0x270
+ lvx 18, 12, 11
+ li 11, 0x280
+ lvx 19, 12, 10
+ li 10, 0x290
+ lvx 20, 12, 9
+ li 9, 0x2a0
+ lvx 21, 12, 8
+ li 8, 0x2b0
+ lvx 22, 12, 11
+ lvx 23, 12, 10
+
+ lvx 24, 12, 9
+ lvx 25, 0, 12
+ lvx 26, 12, 8
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 4
+_vpaes_schedule_core:
+ mflr 7
+
+ bl _vpaes_key_preheat
+
+
+ neg 8, 3
+ lvx 0, 0, 3
+ addi 3, 3, 15
+ lvsr 27, 0, 8
+ lvx 6, 0, 3
+ addi 3, 3, 8
+ vperm 0, 0, 6, 27
+
+
+ vor 3,0,0
+ bl _vpaes_schedule_transform
+ vor 7,0,0
+
+ bne 1, .Lschedule_am_decrypting
+
+
+ li 8, 0x30
+ li 9, 4
+ li 10, 8
+ li 11, 12
+
+ lvsr 29, 0, 5
+ vnor 30, 9, 9
+ vperm 30, 9, 30, 29
+
+
+ vperm 28, 0, 0, 29
+ stvewx 28, 0, 5
+ stvewx 28, 9, 5
+ stvewx 28, 10, 5
+ addi 10, 12, 0x80
+ stvewx 28, 11, 5
+ b .Lschedule_go
+
+.Lschedule_am_decrypting:
+ srwi 8, 4, 1
+ andi. 8, 8, 32
+ xori 8, 8, 32
+ addi 10, 12, 0x80
+
+ lvx 1, 8, 10
+ li 9, 4
+ li 10, 8
+ li 11, 12
+ vperm 4, 3, 3, 1
+
+ neg 0, 5
+ lvsl 29, 0, 0
+ vnor 30, 9, 9
+ vperm 30, 30, 9, 29
+
+
+ vperm 28, 4, 4, 29
+ stvewx 28, 0, 5
+ stvewx 28, 9, 5
+ stvewx 28, 10, 5
+ addi 10, 12, 0x80
+ stvewx 28, 11, 5
+ addi 5, 5, 15
+ xori 8, 8, 0x30
+
+.Lschedule_go:
+ cmplwi 4, 192
+ bgt .Lschedule_256
+ beq .Lschedule_192
+
+
+
+
+
+
+
+
+
+
+.Lschedule_128:
+ li 0, 10
+ mtctr 0
+
+.Loop_schedule_128:
+ bl _vpaes_schedule_round
+ bdz .Lschedule_mangle_last
+ bl _vpaes_schedule_mangle
+ b .Loop_schedule_128
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.align 4
+.Lschedule_192:
+ li 0, 4
+ lvx 0, 0, 3
+ vperm 0, 6, 0, 27
+ vsldoi 0, 3, 0, 8
+ bl _vpaes_schedule_transform
+ vsldoi 6, 0, 9, 8
+ vsldoi 6, 9, 6, 8
+ mtctr 0
+
+.Loop_schedule_192:
+ bl _vpaes_schedule_round
+ vsldoi 0, 6, 0, 8
+ bl _vpaes_schedule_mangle
+ bl _vpaes_schedule_192_smear
+ bl _vpaes_schedule_mangle
+ bl _vpaes_schedule_round
+ bdz .Lschedule_mangle_last
+ bl _vpaes_schedule_mangle
+ bl _vpaes_schedule_192_smear
+ b .Loop_schedule_192
+
+
+
+
+
+
+
+
+
+
+
+.align 4
+.Lschedule_256:
+ li 0, 7
+ addi 3, 3, 8
+ lvx 0, 0, 3
+ vperm 0, 6, 0, 27
+ bl _vpaes_schedule_transform
+ mtctr 0
+
+.Loop_schedule_256:
+ bl _vpaes_schedule_mangle
+ vor 6,0,0
+
+
+ bl _vpaes_schedule_round
+ bdz .Lschedule_mangle_last
+ bl _vpaes_schedule_mangle
+
+
+ vspltw 0, 0, 3
+ vor 5,7,7
+ vor 7,6,6
+ bl _vpaes_schedule_low_round
+ vor 7,5,5
+
+ b .Loop_schedule_256
+
+
+
+
+
+
+
+
+
+
+.align 4
+.Lschedule_mangle_last:
+
+ li 11, 0x2e0
+ li 9, 0x2f0
+ bne 1, .Lschedule_mangle_last_dec
+
+
+ lvx 1, 8, 10
+ li 11, 0x2c0
+ li 9, 0x2d0
+ vperm 0, 0, 0, 1
+
+ lvx 12, 11, 12
+ lvx 13, 9, 12
+ addi 5, 5, 16
+ vxor 0, 0, 26
+ bl _vpaes_schedule_transform
+
+
+ vperm 0, 0, 0, 29
+ li 10, 4
+ vsel 2, 28, 0, 30
+ li 11, 8
+ stvx 2, 0, 5
+ li 12, 12
+ stvewx 0, 0, 5
+ stvewx 0, 10, 5
+ stvewx 0, 11, 5
+ stvewx 0, 12, 5
+ b .Lschedule_mangle_done
+
+.align 4
+.Lschedule_mangle_last_dec:
+ lvx 12, 11, 12
+ lvx 13, 9, 12
+ addi 5, 5, -16
+ vxor 0, 0, 26
+ bl _vpaes_schedule_transform
+
+
+ addi 9, 5, -15
+ vperm 0, 0, 0, 29
+ li 10, 4
+ vsel 2, 28, 0, 30
+ li 11, 8
+ stvx 2, 0, 5
+ li 12, 12
+ stvewx 0, 0, 9
+ stvewx 0, 10, 9
+ stvewx 0, 11, 9
+ stvewx 0, 12, 9
+
+
+.Lschedule_mangle_done:
+ mtlr 7
+
+ vxor 0, 0, 0
+ vxor 1, 1, 1
+ vxor 2, 2, 2
+ vxor 3, 3, 3
+ vxor 4, 4, 4
+ vxor 5, 5, 5
+ vxor 6, 6, 6
+ vxor 7, 7, 7
+
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.align 4
+_vpaes_schedule_192_smear:
+ vspltw 0, 7, 3
+ vsldoi 1, 9, 6, 12
+ vsldoi 0, 7, 0, 8
+ vxor 6, 6, 1
+ vxor 6, 6, 0
+ vor 0,6,6
+ vsldoi 6, 6, 9, 8
+ vsldoi 6, 9, 6, 8
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.align 4
+_vpaes_schedule_round:
+
+
+ vsldoi 1, 24, 9, 15
+ vsldoi 24, 24, 24, 15
+ vxor 7, 7, 1
+
+
+ vspltw 0, 0, 3
+ vsldoi 0, 0, 0, 1
+
+
+
+
+_vpaes_schedule_low_round:
+
+ vsldoi 1, 9, 7, 12
+ vxor 7, 7, 1
+ vspltisb 1, 0x0f
+ vsldoi 4, 9, 7, 8
+
+
+ vand 1, 1, 0
+ vsrb 0, 0, 8
+ vxor 7, 7, 4
+ vperm 2, 11, 9, 1
+ vxor 1, 1, 0
+ vperm 3, 10, 9, 0
+ vxor 3, 3, 2
+ vperm 4, 10, 9, 1
+ vxor 7, 7, 26
+ vperm 3, 10, 9, 3
+ vxor 4, 4, 2
+ vperm 2, 10, 9, 4
+ vxor 3, 3, 1
+ vxor 2, 2, 0
+ vperm 4, 15, 9, 3
+ vperm 1, 14, 9, 2
+ vxor 1, 1, 4
+
+
+ vxor 0, 1, 7
+ vxor 7, 1, 7
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+
+
+
+
+
+
+
+
+
+.align 4
+_vpaes_schedule_transform:
+
+ vsrb 2, 0, 8
+
+ vperm 0, 12, 12, 0
+
+ vperm 2, 13, 13, 2
+ vxor 0, 0, 2
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.align 4
+_vpaes_schedule_mangle:
+
+
+ bne 1, .Lschedule_mangle_dec
+
+
+ vxor 4, 0, 26
+ addi 5, 5, 16
+ vperm 4, 4, 4, 25
+ vperm 1, 4, 4, 25
+ vperm 3, 1, 1, 25
+ vxor 4, 4, 1
+ lvx 1, 8, 10
+ vxor 3, 3, 4
+
+ vperm 3, 3, 3, 1
+ addi 8, 8, -16
+ andi. 8, 8, 0x30
+
+
+ vperm 1, 3, 3, 29
+ vsel 2, 28, 1, 30
+ vor 28,1,1
+ stvx 2, 0, 5
+ blr
+
+.align 4
+.Lschedule_mangle_dec:
+
+
+ vsrb 1, 0, 8
+
+
+
+ vperm 2, 16, 16, 0
+
+ vperm 3, 17, 17, 1
+ vxor 3, 3, 2
+ vperm 3, 3, 9, 25
+
+
+ vperm 2, 18, 18, 0
+ vxor 2, 2, 3
+
+ vperm 3, 19, 19, 1
+ vxor 3, 3, 2
+ vperm 3, 3, 9, 25
+
+
+ vperm 2, 20, 20, 0
+ vxor 2, 2, 3
+
+ vperm 3, 21, 21, 1
+ vxor 3, 3, 2
+
+
+ vperm 2, 22, 22, 0
+ vperm 3, 3, 9, 25
+
+ vperm 4, 23, 23, 1
+ lvx 1, 8, 10
+ vxor 2, 2, 3
+ vxor 3, 4, 2
+
+ addi 5, 5, -16
+
+ vperm 3, 3, 3, 1
+ addi 8, 8, -16
+ andi. 8, 8, 0x30
+
+
+ vperm 1, 3, 3, 29
+ vsel 2, 28, 1, 30
+ vor 28,1,1
+ stvx 2, 0, 5
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.globl vpaes_set_encrypt_key
+.type vpaes_set_encrypt_key,@function
+.align 5
+vpaes_set_encrypt_key:
+ stwu 1,-232(1)
+ li 10,39
+ li 11,55
+ mflr 0
+ mfspr 6,256
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ stw 6,228(1)
+ li 7, -1
+ stw 0, 236(1)
+ mtspr 256,7
+
+ srwi 9, 4, 5
+ addi 9, 9, 6
+ stw 9, 240(5)
+
+ .long 0x7c842040
+ li 8, 0x30
+ bl _vpaes_schedule_core
+
+ lwz 0, 236(1)
+ li 10,39
+ li 11,55
+ mtspr 256,6
+ mtlr 0
+ xor 3, 3, 3
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ addi 1,1,232
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,0,3,0
+.long 0
+.size vpaes_set_encrypt_key,.-vpaes_set_encrypt_key
+
+.globl vpaes_set_decrypt_key
+.type vpaes_set_decrypt_key,@function
+.align 4
+vpaes_set_decrypt_key:
+ stwu 1,-232(1)
+ li 10,39
+ li 11,55
+ mflr 0
+ mfspr 6,256
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ stw 6,228(1)
+ li 7, -1
+ stw 0, 236(1)
+ mtspr 256,7
+
+ srwi 9, 4, 5
+ addi 9, 9, 6
+ stw 9, 240(5)
+
+ slwi 9, 9, 4
+ add 5, 5, 9
+
+ cmplwi 1, 4, 0
+ srwi 8, 4, 1
+ andi. 8, 8, 32
+ xori 8, 8, 32
+ bl _vpaes_schedule_core
+
+ lwz 0, 236(1)
+ li 10,39
+ li 11,55
+ mtspr 256,6
+ mtlr 0
+ xor 3, 3, 3
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ addi 1,1,232
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,0,3,0
+.long 0
+.size vpaes_set_decrypt_key,.-vpaes_set_decrypt_key
diff --git a/sys/crypto/openssl/powerpc64/aes-ppc.S b/sys/crypto/openssl/powerpc64/aes-ppc.S
new file mode 100644
index 000000000000..6532b46191a7
--- /dev/null
+++ b/sys/crypto/openssl/powerpc64/aes-ppc.S
@@ -0,0 +1,1534 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from aes-ppc.pl. */
+.machine "any"
+.abiversion 2
+.text
+
+.align 7
+.LAES_Te:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 3
+ addi 3,3,120
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.LAES_Td:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 3
+ addi 3,3,2360
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.space 28
+.long 0xc66363a5,0xc66363a5
+.long 0xf87c7c84,0xf87c7c84
+.long 0xee777799,0xee777799
+.long 0xf67b7b8d,0xf67b7b8d
+.long 0xfff2f20d,0xfff2f20d
+.long 0xd66b6bbd,0xd66b6bbd
+.long 0xde6f6fb1,0xde6f6fb1
+.long 0x91c5c554,0x91c5c554
+.long 0x60303050,0x60303050
+.long 0x02010103,0x02010103
+.long 0xce6767a9,0xce6767a9
+.long 0x562b2b7d,0x562b2b7d
+.long 0xe7fefe19,0xe7fefe19
+.long 0xb5d7d762,0xb5d7d762
+.long 0x4dababe6,0x4dababe6
+.long 0xec76769a,0xec76769a
+.long 0x8fcaca45,0x8fcaca45
+.long 0x1f82829d,0x1f82829d
+.long 0x89c9c940,0x89c9c940
+.long 0xfa7d7d87,0xfa7d7d87
+.long 0xeffafa15,0xeffafa15
+.long 0xb25959eb,0xb25959eb
+.long 0x8e4747c9,0x8e4747c9
+.long 0xfbf0f00b,0xfbf0f00b
+.long 0x41adadec,0x41adadec
+.long 0xb3d4d467,0xb3d4d467
+.long 0x5fa2a2fd,0x5fa2a2fd
+.long 0x45afafea,0x45afafea
+.long 0x239c9cbf,0x239c9cbf
+.long 0x53a4a4f7,0x53a4a4f7
+.long 0xe4727296,0xe4727296
+.long 0x9bc0c05b,0x9bc0c05b
+.long 0x75b7b7c2,0x75b7b7c2
+.long 0xe1fdfd1c,0xe1fdfd1c
+.long 0x3d9393ae,0x3d9393ae
+.long 0x4c26266a,0x4c26266a
+.long 0x6c36365a,0x6c36365a
+.long 0x7e3f3f41,0x7e3f3f41
+.long 0xf5f7f702,0xf5f7f702
+.long 0x83cccc4f,0x83cccc4f
+.long 0x6834345c,0x6834345c
+.long 0x51a5a5f4,0x51a5a5f4
+.long 0xd1e5e534,0xd1e5e534
+.long 0xf9f1f108,0xf9f1f108
+.long 0xe2717193,0xe2717193
+.long 0xabd8d873,0xabd8d873
+.long 0x62313153,0x62313153
+.long 0x2a15153f,0x2a15153f
+.long 0x0804040c,0x0804040c
+.long 0x95c7c752,0x95c7c752
+.long 0x46232365,0x46232365
+.long 0x9dc3c35e,0x9dc3c35e
+.long 0x30181828,0x30181828
+.long 0x379696a1,0x379696a1
+.long 0x0a05050f,0x0a05050f
+.long 0x2f9a9ab5,0x2f9a9ab5
+.long 0x0e070709,0x0e070709
+.long 0x24121236,0x24121236
+.long 0x1b80809b,0x1b80809b
+.long 0xdfe2e23d,0xdfe2e23d
+.long 0xcdebeb26,0xcdebeb26
+.long 0x4e272769,0x4e272769
+.long 0x7fb2b2cd,0x7fb2b2cd
+.long 0xea75759f,0xea75759f
+.long 0x1209091b,0x1209091b
+.long 0x1d83839e,0x1d83839e
+.long 0x582c2c74,0x582c2c74
+.long 0x341a1a2e,0x341a1a2e
+.long 0x361b1b2d,0x361b1b2d
+.long 0xdc6e6eb2,0xdc6e6eb2
+.long 0xb45a5aee,0xb45a5aee
+.long 0x5ba0a0fb,0x5ba0a0fb
+.long 0xa45252f6,0xa45252f6
+.long 0x763b3b4d,0x763b3b4d
+.long 0xb7d6d661,0xb7d6d661
+.long 0x7db3b3ce,0x7db3b3ce
+.long 0x5229297b,0x5229297b
+.long 0xdde3e33e,0xdde3e33e
+.long 0x5e2f2f71,0x5e2f2f71
+.long 0x13848497,0x13848497
+.long 0xa65353f5,0xa65353f5
+.long 0xb9d1d168,0xb9d1d168
+.long 0x00000000,0x00000000
+.long 0xc1eded2c,0xc1eded2c
+.long 0x40202060,0x40202060
+.long 0xe3fcfc1f,0xe3fcfc1f
+.long 0x79b1b1c8,0x79b1b1c8
+.long 0xb65b5bed,0xb65b5bed
+.long 0xd46a6abe,0xd46a6abe
+.long 0x8dcbcb46,0x8dcbcb46
+.long 0x67bebed9,0x67bebed9
+.long 0x7239394b,0x7239394b
+.long 0x944a4ade,0x944a4ade
+.long 0x984c4cd4,0x984c4cd4
+.long 0xb05858e8,0xb05858e8
+.long 0x85cfcf4a,0x85cfcf4a
+.long 0xbbd0d06b,0xbbd0d06b
+.long 0xc5efef2a,0xc5efef2a
+.long 0x4faaaae5,0x4faaaae5
+.long 0xedfbfb16,0xedfbfb16
+.long 0x864343c5,0x864343c5
+.long 0x9a4d4dd7,0x9a4d4dd7
+.long 0x66333355,0x66333355
+.long 0x11858594,0x11858594
+.long 0x8a4545cf,0x8a4545cf
+.long 0xe9f9f910,0xe9f9f910
+.long 0x04020206,0x04020206
+.long 0xfe7f7f81,0xfe7f7f81
+.long 0xa05050f0,0xa05050f0
+.long 0x783c3c44,0x783c3c44
+.long 0x259f9fba,0x259f9fba
+.long 0x4ba8a8e3,0x4ba8a8e3
+.long 0xa25151f3,0xa25151f3
+.long 0x5da3a3fe,0x5da3a3fe
+.long 0x804040c0,0x804040c0
+.long 0x058f8f8a,0x058f8f8a
+.long 0x3f9292ad,0x3f9292ad
+.long 0x219d9dbc,0x219d9dbc
+.long 0x70383848,0x70383848
+.long 0xf1f5f504,0xf1f5f504
+.long 0x63bcbcdf,0x63bcbcdf
+.long 0x77b6b6c1,0x77b6b6c1
+.long 0xafdada75,0xafdada75
+.long 0x42212163,0x42212163
+.long 0x20101030,0x20101030
+.long 0xe5ffff1a,0xe5ffff1a
+.long 0xfdf3f30e,0xfdf3f30e
+.long 0xbfd2d26d,0xbfd2d26d
+.long 0x81cdcd4c,0x81cdcd4c
+.long 0x180c0c14,0x180c0c14
+.long 0x26131335,0x26131335
+.long 0xc3ecec2f,0xc3ecec2f
+.long 0xbe5f5fe1,0xbe5f5fe1
+.long 0x359797a2,0x359797a2
+.long 0x884444cc,0x884444cc
+.long 0x2e171739,0x2e171739
+.long 0x93c4c457,0x93c4c457
+.long 0x55a7a7f2,0x55a7a7f2
+.long 0xfc7e7e82,0xfc7e7e82
+.long 0x7a3d3d47,0x7a3d3d47
+.long 0xc86464ac,0xc86464ac
+.long 0xba5d5de7,0xba5d5de7
+.long 0x3219192b,0x3219192b
+.long 0xe6737395,0xe6737395
+.long 0xc06060a0,0xc06060a0
+.long 0x19818198,0x19818198
+.long 0x9e4f4fd1,0x9e4f4fd1
+.long 0xa3dcdc7f,0xa3dcdc7f
+.long 0x44222266,0x44222266
+.long 0x542a2a7e,0x542a2a7e
+.long 0x3b9090ab,0x3b9090ab
+.long 0x0b888883,0x0b888883
+.long 0x8c4646ca,0x8c4646ca
+.long 0xc7eeee29,0xc7eeee29
+.long 0x6bb8b8d3,0x6bb8b8d3
+.long 0x2814143c,0x2814143c
+.long 0xa7dede79,0xa7dede79
+.long 0xbc5e5ee2,0xbc5e5ee2
+.long 0x160b0b1d,0x160b0b1d
+.long 0xaddbdb76,0xaddbdb76
+.long 0xdbe0e03b,0xdbe0e03b
+.long 0x64323256,0x64323256
+.long 0x743a3a4e,0x743a3a4e
+.long 0x140a0a1e,0x140a0a1e
+.long 0x924949db,0x924949db
+.long 0x0c06060a,0x0c06060a
+.long 0x4824246c,0x4824246c
+.long 0xb85c5ce4,0xb85c5ce4
+.long 0x9fc2c25d,0x9fc2c25d
+.long 0xbdd3d36e,0xbdd3d36e
+.long 0x43acacef,0x43acacef
+.long 0xc46262a6,0xc46262a6
+.long 0x399191a8,0x399191a8
+.long 0x319595a4,0x319595a4
+.long 0xd3e4e437,0xd3e4e437
+.long 0xf279798b,0xf279798b
+.long 0xd5e7e732,0xd5e7e732
+.long 0x8bc8c843,0x8bc8c843
+.long 0x6e373759,0x6e373759
+.long 0xda6d6db7,0xda6d6db7
+.long 0x018d8d8c,0x018d8d8c
+.long 0xb1d5d564,0xb1d5d564
+.long 0x9c4e4ed2,0x9c4e4ed2
+.long 0x49a9a9e0,0x49a9a9e0
+.long 0xd86c6cb4,0xd86c6cb4
+.long 0xac5656fa,0xac5656fa
+.long 0xf3f4f407,0xf3f4f407
+.long 0xcfeaea25,0xcfeaea25
+.long 0xca6565af,0xca6565af
+.long 0xf47a7a8e,0xf47a7a8e
+.long 0x47aeaee9,0x47aeaee9
+.long 0x10080818,0x10080818
+.long 0x6fbabad5,0x6fbabad5
+.long 0xf0787888,0xf0787888
+.long 0x4a25256f,0x4a25256f
+.long 0x5c2e2e72,0x5c2e2e72
+.long 0x381c1c24,0x381c1c24
+.long 0x57a6a6f1,0x57a6a6f1
+.long 0x73b4b4c7,0x73b4b4c7
+.long 0x97c6c651,0x97c6c651
+.long 0xcbe8e823,0xcbe8e823
+.long 0xa1dddd7c,0xa1dddd7c
+.long 0xe874749c,0xe874749c
+.long 0x3e1f1f21,0x3e1f1f21
+.long 0x964b4bdd,0x964b4bdd
+.long 0x61bdbddc,0x61bdbddc
+.long 0x0d8b8b86,0x0d8b8b86
+.long 0x0f8a8a85,0x0f8a8a85
+.long 0xe0707090,0xe0707090
+.long 0x7c3e3e42,0x7c3e3e42
+.long 0x71b5b5c4,0x71b5b5c4
+.long 0xcc6666aa,0xcc6666aa
+.long 0x904848d8,0x904848d8
+.long 0x06030305,0x06030305
+.long 0xf7f6f601,0xf7f6f601
+.long 0x1c0e0e12,0x1c0e0e12
+.long 0xc26161a3,0xc26161a3
+.long 0x6a35355f,0x6a35355f
+.long 0xae5757f9,0xae5757f9
+.long 0x69b9b9d0,0x69b9b9d0
+.long 0x17868691,0x17868691
+.long 0x99c1c158,0x99c1c158
+.long 0x3a1d1d27,0x3a1d1d27
+.long 0x279e9eb9,0x279e9eb9
+.long 0xd9e1e138,0xd9e1e138
+.long 0xebf8f813,0xebf8f813
+.long 0x2b9898b3,0x2b9898b3
+.long 0x22111133,0x22111133
+.long 0xd26969bb,0xd26969bb
+.long 0xa9d9d970,0xa9d9d970
+.long 0x078e8e89,0x078e8e89
+.long 0x339494a7,0x339494a7
+.long 0x2d9b9bb6,0x2d9b9bb6
+.long 0x3c1e1e22,0x3c1e1e22
+.long 0x15878792,0x15878792
+.long 0xc9e9e920,0xc9e9e920
+.long 0x87cece49,0x87cece49
+.long 0xaa5555ff,0xaa5555ff
+.long 0x50282878,0x50282878
+.long 0xa5dfdf7a,0xa5dfdf7a
+.long 0x038c8c8f,0x038c8c8f
+.long 0x59a1a1f8,0x59a1a1f8
+.long 0x09898980,0x09898980
+.long 0x1a0d0d17,0x1a0d0d17
+.long 0x65bfbfda,0x65bfbfda
+.long 0xd7e6e631,0xd7e6e631
+.long 0x844242c6,0x844242c6
+.long 0xd06868b8,0xd06868b8
+.long 0x824141c3,0x824141c3
+.long 0x299999b0,0x299999b0
+.long 0x5a2d2d77,0x5a2d2d77
+.long 0x1e0f0f11,0x1e0f0f11
+.long 0x7bb0b0cb,0x7bb0b0cb
+.long 0xa85454fc,0xa85454fc
+.long 0x6dbbbbd6,0x6dbbbbd6
+.long 0x2c16163a,0x2c16163a
+.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
+.long 0x51f4a750,0x51f4a750
+.long 0x7e416553,0x7e416553
+.long 0x1a17a4c3,0x1a17a4c3
+.long 0x3a275e96,0x3a275e96
+.long 0x3bab6bcb,0x3bab6bcb
+.long 0x1f9d45f1,0x1f9d45f1
+.long 0xacfa58ab,0xacfa58ab
+.long 0x4be30393,0x4be30393
+.long 0x2030fa55,0x2030fa55
+.long 0xad766df6,0xad766df6
+.long 0x88cc7691,0x88cc7691
+.long 0xf5024c25,0xf5024c25
+.long 0x4fe5d7fc,0x4fe5d7fc
+.long 0xc52acbd7,0xc52acbd7
+.long 0x26354480,0x26354480
+.long 0xb562a38f,0xb562a38f
+.long 0xdeb15a49,0xdeb15a49
+.long 0x25ba1b67,0x25ba1b67
+.long 0x45ea0e98,0x45ea0e98
+.long 0x5dfec0e1,0x5dfec0e1
+.long 0xc32f7502,0xc32f7502
+.long 0x814cf012,0x814cf012
+.long 0x8d4697a3,0x8d4697a3
+.long 0x6bd3f9c6,0x6bd3f9c6
+.long 0x038f5fe7,0x038f5fe7
+.long 0x15929c95,0x15929c95
+.long 0xbf6d7aeb,0xbf6d7aeb
+.long 0x955259da,0x955259da
+.long 0xd4be832d,0xd4be832d
+.long 0x587421d3,0x587421d3
+.long 0x49e06929,0x49e06929
+.long 0x8ec9c844,0x8ec9c844
+.long 0x75c2896a,0x75c2896a
+.long 0xf48e7978,0xf48e7978
+.long 0x99583e6b,0x99583e6b
+.long 0x27b971dd,0x27b971dd
+.long 0xbee14fb6,0xbee14fb6
+.long 0xf088ad17,0xf088ad17
+.long 0xc920ac66,0xc920ac66
+.long 0x7dce3ab4,0x7dce3ab4
+.long 0x63df4a18,0x63df4a18
+.long 0xe51a3182,0xe51a3182
+.long 0x97513360,0x97513360
+.long 0x62537f45,0x62537f45
+.long 0xb16477e0,0xb16477e0
+.long 0xbb6bae84,0xbb6bae84
+.long 0xfe81a01c,0xfe81a01c
+.long 0xf9082b94,0xf9082b94
+.long 0x70486858,0x70486858
+.long 0x8f45fd19,0x8f45fd19
+.long 0x94de6c87,0x94de6c87
+.long 0x527bf8b7,0x527bf8b7
+.long 0xab73d323,0xab73d323
+.long 0x724b02e2,0x724b02e2
+.long 0xe31f8f57,0xe31f8f57
+.long 0x6655ab2a,0x6655ab2a
+.long 0xb2eb2807,0xb2eb2807
+.long 0x2fb5c203,0x2fb5c203
+.long 0x86c57b9a,0x86c57b9a
+.long 0xd33708a5,0xd33708a5
+.long 0x302887f2,0x302887f2
+.long 0x23bfa5b2,0x23bfa5b2
+.long 0x02036aba,0x02036aba
+.long 0xed16825c,0xed16825c
+.long 0x8acf1c2b,0x8acf1c2b
+.long 0xa779b492,0xa779b492
+.long 0xf307f2f0,0xf307f2f0
+.long 0x4e69e2a1,0x4e69e2a1
+.long 0x65daf4cd,0x65daf4cd
+.long 0x0605bed5,0x0605bed5
+.long 0xd134621f,0xd134621f
+.long 0xc4a6fe8a,0xc4a6fe8a
+.long 0x342e539d,0x342e539d
+.long 0xa2f355a0,0xa2f355a0
+.long 0x058ae132,0x058ae132
+.long 0xa4f6eb75,0xa4f6eb75
+.long 0x0b83ec39,0x0b83ec39
+.long 0x4060efaa,0x4060efaa
+.long 0x5e719f06,0x5e719f06
+.long 0xbd6e1051,0xbd6e1051
+.long 0x3e218af9,0x3e218af9
+.long 0x96dd063d,0x96dd063d
+.long 0xdd3e05ae,0xdd3e05ae
+.long 0x4de6bd46,0x4de6bd46
+.long 0x91548db5,0x91548db5
+.long 0x71c45d05,0x71c45d05
+.long 0x0406d46f,0x0406d46f
+.long 0x605015ff,0x605015ff
+.long 0x1998fb24,0x1998fb24
+.long 0xd6bde997,0xd6bde997
+.long 0x894043cc,0x894043cc
+.long 0x67d99e77,0x67d99e77
+.long 0xb0e842bd,0xb0e842bd
+.long 0x07898b88,0x07898b88
+.long 0xe7195b38,0xe7195b38
+.long 0x79c8eedb,0x79c8eedb
+.long 0xa17c0a47,0xa17c0a47
+.long 0x7c420fe9,0x7c420fe9
+.long 0xf8841ec9,0xf8841ec9
+.long 0x00000000,0x00000000
+.long 0x09808683,0x09808683
+.long 0x322bed48,0x322bed48
+.long 0x1e1170ac,0x1e1170ac
+.long 0x6c5a724e,0x6c5a724e
+.long 0xfd0efffb,0xfd0efffb
+.long 0x0f853856,0x0f853856
+.long 0x3daed51e,0x3daed51e
+.long 0x362d3927,0x362d3927
+.long 0x0a0fd964,0x0a0fd964
+.long 0x685ca621,0x685ca621
+.long 0x9b5b54d1,0x9b5b54d1
+.long 0x24362e3a,0x24362e3a
+.long 0x0c0a67b1,0x0c0a67b1
+.long 0x9357e70f,0x9357e70f
+.long 0xb4ee96d2,0xb4ee96d2
+.long 0x1b9b919e,0x1b9b919e
+.long 0x80c0c54f,0x80c0c54f
+.long 0x61dc20a2,0x61dc20a2
+.long 0x5a774b69,0x5a774b69
+.long 0x1c121a16,0x1c121a16
+.long 0xe293ba0a,0xe293ba0a
+.long 0xc0a02ae5,0xc0a02ae5
+.long 0x3c22e043,0x3c22e043
+.long 0x121b171d,0x121b171d
+.long 0x0e090d0b,0x0e090d0b
+.long 0xf28bc7ad,0xf28bc7ad
+.long 0x2db6a8b9,0x2db6a8b9
+.long 0x141ea9c8,0x141ea9c8
+.long 0x57f11985,0x57f11985
+.long 0xaf75074c,0xaf75074c
+.long 0xee99ddbb,0xee99ddbb
+.long 0xa37f60fd,0xa37f60fd
+.long 0xf701269f,0xf701269f
+.long 0x5c72f5bc,0x5c72f5bc
+.long 0x44663bc5,0x44663bc5
+.long 0x5bfb7e34,0x5bfb7e34
+.long 0x8b432976,0x8b432976
+.long 0xcb23c6dc,0xcb23c6dc
+.long 0xb6edfc68,0xb6edfc68
+.long 0xb8e4f163,0xb8e4f163
+.long 0xd731dcca,0xd731dcca
+.long 0x42638510,0x42638510
+.long 0x13972240,0x13972240
+.long 0x84c61120,0x84c61120
+.long 0x854a247d,0x854a247d
+.long 0xd2bb3df8,0xd2bb3df8
+.long 0xaef93211,0xaef93211
+.long 0xc729a16d,0xc729a16d
+.long 0x1d9e2f4b,0x1d9e2f4b
+.long 0xdcb230f3,0xdcb230f3
+.long 0x0d8652ec,0x0d8652ec
+.long 0x77c1e3d0,0x77c1e3d0
+.long 0x2bb3166c,0x2bb3166c
+.long 0xa970b999,0xa970b999
+.long 0x119448fa,0x119448fa
+.long 0x47e96422,0x47e96422
+.long 0xa8fc8cc4,0xa8fc8cc4
+.long 0xa0f03f1a,0xa0f03f1a
+.long 0x567d2cd8,0x567d2cd8
+.long 0x223390ef,0x223390ef
+.long 0x87494ec7,0x87494ec7
+.long 0xd938d1c1,0xd938d1c1
+.long 0x8ccaa2fe,0x8ccaa2fe
+.long 0x98d40b36,0x98d40b36
+.long 0xa6f581cf,0xa6f581cf
+.long 0xa57ade28,0xa57ade28
+.long 0xdab78e26,0xdab78e26
+.long 0x3fadbfa4,0x3fadbfa4
+.long 0x2c3a9de4,0x2c3a9de4
+.long 0x5078920d,0x5078920d
+.long 0x6a5fcc9b,0x6a5fcc9b
+.long 0x547e4662,0x547e4662
+.long 0xf68d13c2,0xf68d13c2
+.long 0x90d8b8e8,0x90d8b8e8
+.long 0x2e39f75e,0x2e39f75e
+.long 0x82c3aff5,0x82c3aff5
+.long 0x9f5d80be,0x9f5d80be
+.long 0x69d0937c,0x69d0937c
+.long 0x6fd52da9,0x6fd52da9
+.long 0xcf2512b3,0xcf2512b3
+.long 0xc8ac993b,0xc8ac993b
+.long 0x10187da7,0x10187da7
+.long 0xe89c636e,0xe89c636e
+.long 0xdb3bbb7b,0xdb3bbb7b
+.long 0xcd267809,0xcd267809
+.long 0x6e5918f4,0x6e5918f4
+.long 0xec9ab701,0xec9ab701
+.long 0x834f9aa8,0x834f9aa8
+.long 0xe6956e65,0xe6956e65
+.long 0xaaffe67e,0xaaffe67e
+.long 0x21bccf08,0x21bccf08
+.long 0xef15e8e6,0xef15e8e6
+.long 0xbae79bd9,0xbae79bd9
+.long 0x4a6f36ce,0x4a6f36ce
+.long 0xea9f09d4,0xea9f09d4
+.long 0x29b07cd6,0x29b07cd6
+.long 0x31a4b2af,0x31a4b2af
+.long 0x2a3f2331,0x2a3f2331
+.long 0xc6a59430,0xc6a59430
+.long 0x35a266c0,0x35a266c0
+.long 0x744ebc37,0x744ebc37
+.long 0xfc82caa6,0xfc82caa6
+.long 0xe090d0b0,0xe090d0b0
+.long 0x33a7d815,0x33a7d815
+.long 0xf104984a,0xf104984a
+.long 0x41ecdaf7,0x41ecdaf7
+.long 0x7fcd500e,0x7fcd500e
+.long 0x1791f62f,0x1791f62f
+.long 0x764dd68d,0x764dd68d
+.long 0x43efb04d,0x43efb04d
+.long 0xccaa4d54,0xccaa4d54
+.long 0xe49604df,0xe49604df
+.long 0x9ed1b5e3,0x9ed1b5e3
+.long 0x4c6a881b,0x4c6a881b
+.long 0xc12c1fb8,0xc12c1fb8
+.long 0x4665517f,0x4665517f
+.long 0x9d5eea04,0x9d5eea04
+.long 0x018c355d,0x018c355d
+.long 0xfa877473,0xfa877473
+.long 0xfb0b412e,0xfb0b412e
+.long 0xb3671d5a,0xb3671d5a
+.long 0x92dbd252,0x92dbd252
+.long 0xe9105633,0xe9105633
+.long 0x6dd64713,0x6dd64713
+.long 0x9ad7618c,0x9ad7618c
+.long 0x37a10c7a,0x37a10c7a
+.long 0x59f8148e,0x59f8148e
+.long 0xeb133c89,0xeb133c89
+.long 0xcea927ee,0xcea927ee
+.long 0xb761c935,0xb761c935
+.long 0xe11ce5ed,0xe11ce5ed
+.long 0x7a47b13c,0x7a47b13c
+.long 0x9cd2df59,0x9cd2df59
+.long 0x55f2733f,0x55f2733f
+.long 0x1814ce79,0x1814ce79
+.long 0x73c737bf,0x73c737bf
+.long 0x53f7cdea,0x53f7cdea
+.long 0x5ffdaa5b,0x5ffdaa5b
+.long 0xdf3d6f14,0xdf3d6f14
+.long 0x7844db86,0x7844db86
+.long 0xcaaff381,0xcaaff381
+.long 0xb968c43e,0xb968c43e
+.long 0x3824342c,0x3824342c
+.long 0xc2a3405f,0xc2a3405f
+.long 0x161dc372,0x161dc372
+.long 0xbce2250c,0xbce2250c
+.long 0x283c498b,0x283c498b
+.long 0xff0d9541,0xff0d9541
+.long 0x39a80171,0x39a80171
+.long 0x080cb3de,0x080cb3de
+.long 0xd8b4e49c,0xd8b4e49c
+.long 0x6456c190,0x6456c190
+.long 0x7bcb8461,0x7bcb8461
+.long 0xd532b670,0xd532b670
+.long 0x486c5c74,0x486c5c74
+.long 0xd0b85742,0xd0b85742
+.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
+
+
+.globl AES_encrypt
+.type AES_encrypt,@function
+.align 7
+AES_encrypt:
+.localentry AES_encrypt,0
+
+ stdu 1,-256(1)
+ mflr 0
+
+ std 4,104(1)
+ std 14,112(1)
+ std 15,120(1)
+ std 16,128(1)
+ std 17,136(1)
+ std 18,144(1)
+ std 19,152(1)
+ std 20,160(1)
+ std 21,168(1)
+ std 22,176(1)
+ std 23,184(1)
+ std 24,192(1)
+ std 25,200(1)
+ std 26,208(1)
+ std 27,216(1)
+ std 28,224(1)
+ std 29,232(1)
+ std 30,240(1)
+ std 31,248(1)
+ std 0,272(1)
+
+ andi. 12,3,3
+ andi. 0,4,3
+ or. 12,12,0
+ bne .Lenc_unaligned
+
+.Lenc_unaligned_ok:
+ lwz 8,0(3)
+ lwz 9,4(3)
+ lwz 10,8(3)
+ lwz 11,12(3)
+ bl .LAES_Te
+ bl .Lppc_AES_encrypt_compact
+ ld 4,104(1)
+ stw 8,0(4)
+ stw 9,4(4)
+ stw 10,8(4)
+ stw 11,12(4)
+ b .Lenc_done
+
+.Lenc_unaligned:
+ subfic 12,3,4096
+ subfic 0,4,4096
+ andi. 12,12,4096-16
+ beq .Lenc_xpage
+ andi. 0,0,4096-16
+ bne .Lenc_unaligned_ok
+
+.Lenc_xpage:
+ lbz 16,0(3)
+ lbz 17,1(3)
+ lbz 18,2(3)
+ lbz 8,3(3)
+ lbz 20,4(3)
+ lbz 21,5(3)
+ lbz 22,6(3)
+ lbz 9,7(3)
+ lbz 24,8(3)
+ lbz 25,9(3)
+ lbz 26,10(3)
+ insrwi 8,16,8,0
+ lbz 10,11(3)
+ insrwi 9,20,8,0
+ lbz 28,12(3)
+ insrwi 8,17,8,8
+ lbz 29,13(3)
+ insrwi 9,21,8,8
+ lbz 30,14(3)
+ insrwi 8,18,8,16
+ lbz 11,15(3)
+ insrwi 9,22,8,16
+ insrwi 10,24,8,0
+ insrwi 11,28,8,0
+ insrwi 10,25,8,8
+ insrwi 11,29,8,8
+ insrwi 10,26,8,16
+ insrwi 11,30,8,16
+
+ bl .LAES_Te
+ bl .Lppc_AES_encrypt_compact
+ ld 4,104(1)
+
+ extrwi 16,8,8,0
+ extrwi 17,8,8,8
+ stb 16,0(4)
+ extrwi 18,8,8,16
+ stb 17,1(4)
+ stb 18,2(4)
+ extrwi 20,9,8,0
+ stb 8,3(4)
+ extrwi 21,9,8,8
+ stb 20,4(4)
+ extrwi 22,9,8,16
+ stb 21,5(4)
+ stb 22,6(4)
+ extrwi 24,10,8,0
+ stb 9,7(4)
+ extrwi 25,10,8,8
+ stb 24,8(4)
+ extrwi 26,10,8,16
+ stb 25,9(4)
+ stb 26,10(4)
+ extrwi 28,11,8,0
+ stb 10,11(4)
+ extrwi 29,11,8,8
+ stb 28,12(4)
+ extrwi 30,11,8,16
+ stb 29,13(4)
+ stb 30,14(4)
+ stb 11,15(4)
+
+.Lenc_done:
+ ld 0,272(1)
+ ld 14,112(1)
+ ld 15,120(1)
+ ld 16,128(1)
+ ld 17,136(1)
+ ld 18,144(1)
+ ld 19,152(1)
+ ld 20,160(1)
+ ld 21,168(1)
+ ld 22,176(1)
+ ld 23,184(1)
+ ld 24,192(1)
+ ld 25,200(1)
+ ld 26,208(1)
+ ld 27,216(1)
+ ld 28,224(1)
+ ld 29,232(1)
+ ld 30,240(1)
+ ld 31,248(1)
+ mtlr 0
+ addi 1,1,256
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+
+.align 5
+.Lppc_AES_encrypt:
+ lwz 16,240(5)
+ addi 6,3,3
+ lwz 12,0(5)
+ addi 7,3,2
+ lwz 0,4(5)
+ addi 4,3,1
+ lwz 14,8(5)
+ addi 16,16,-1
+ lwz 15,12(5)
+ addi 5,5,16
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ mtctr 16
+.align 4
+.Lenc_loop:
+ rlwinm 16,8,11,21,28
+ rlwinm 17,9,11,21,28
+ rlwinm 18,10,11,21,28
+ rlwinm 19,11,11,21,28
+ lwz 12,0(5)
+ rlwinm 20,9,19,21,28
+ lwz 0,4(5)
+ rlwinm 21,10,19,21,28
+ lwz 14,8(5)
+ rlwinm 22,11,19,21,28
+ lwz 15,12(5)
+ rlwinm 23,8,19,21,28
+ lwzx 16,3,16
+ rlwinm 24,10,27,21,28
+ lwzx 17,3,17
+ rlwinm 25,11,27,21,28
+ lwzx 18,3,18
+ rlwinm 26,8,27,21,28
+ lwzx 19,3,19
+ rlwinm 27,9,27,21,28
+ lwzx 20,6,20
+ rlwinm 28,11,3,21,28
+ lwzx 21,6,21
+ rlwinm 29,8,3,21,28
+ lwzx 22,6,22
+ rlwinm 30,9,3,21,28
+ lwzx 23,6,23
+ rlwinm 31,10,3,21,28
+ lwzx 24,7,24
+ xor 12,12,16
+ lwzx 25,7,25
+ xor 0,0,17
+ lwzx 26,7,26
+ xor 14,14,18
+ lwzx 27,7,27
+ xor 15,15,19
+ lwzx 28,4,28
+ xor 12,12,20
+ lwzx 29,4,29
+ xor 0,0,21
+ lwzx 30,4,30
+ xor 14,14,22
+ lwzx 31,4,31
+ xor 15,15,23
+ xor 12,12,24
+ xor 0,0,25
+ xor 14,14,26
+ xor 15,15,27
+ xor 8,12,28
+ xor 9,0,29
+ xor 10,14,30
+ xor 11,15,31
+ addi 5,5,16
+ bdnz .Lenc_loop
+
+ addi 7,3,2048
+ nop
+ lwz 12,0(5)
+ rlwinm 16,8,8,24,31
+ lwz 0,4(5)
+ rlwinm 17,9,8,24,31
+ lwz 14,8(5)
+ rlwinm 18,10,8,24,31
+ lwz 15,12(5)
+ rlwinm 19,11,8,24,31
+ lwz 24,2048(3)
+ rlwinm 20,9,16,24,31
+ lwz 25,2080(3)
+ rlwinm 21,10,16,24,31
+ lwz 26,2112(3)
+ rlwinm 22,11,16,24,31
+ lwz 27,2144(3)
+ rlwinm 23,8,16,24,31
+ lwz 28,2176(3)
+ rlwinm 24,10,24,24,31
+ lwz 29,2208(3)
+ rlwinm 25,11,24,24,31
+ lwz 30,2240(3)
+ rlwinm 26,8,24,24,31
+ lwz 31,2272(3)
+ rlwinm 27,9,24,24,31
+ lbzx 16,7,16
+ rlwinm 28,11,0,24,31
+ lbzx 17,7,17
+ rlwinm 29,8,0,24,31
+ lbzx 18,7,18
+ rlwinm 30,9,0,24,31
+ lbzx 19,7,19
+ rlwinm 31,10,0,24,31
+ lbzx 20,7,20
+ rlwinm 8,16,24,0,7
+ lbzx 21,7,21
+ rlwinm 9,17,24,0,7
+ lbzx 22,7,22
+ rlwinm 10,18,24,0,7
+ lbzx 23,7,23
+ rlwinm 11,19,24,0,7
+ lbzx 24,7,24
+ rlwimi 8,20,16,8,15
+ lbzx 25,7,25
+ rlwimi 9,21,16,8,15
+ lbzx 26,7,26
+ rlwimi 10,22,16,8,15
+ lbzx 27,7,27
+ rlwimi 11,23,16,8,15
+ lbzx 28,7,28
+ rlwimi 8,24,8,16,23
+ lbzx 29,7,29
+ rlwimi 9,25,8,16,23
+ lbzx 30,7,30
+ rlwimi 10,26,8,16,23
+ lbzx 31,7,31
+ rlwimi 11,27,8,16,23
+ or 8,8,28
+ or 9,9,29
+ or 10,10,30
+ or 11,11,31
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 4
+.Lppc_AES_encrypt_compact:
+ lwz 16,240(5)
+ addi 6,3,2048
+ lwz 12,0(5)
+ lis 7,0x8080
+ lwz 0,4(5)
+ lis 4,0x1b1b
+ lwz 14,8(5)
+ ori 7,7,0x8080
+ lwz 15,12(5)
+ ori 4,4,0x1b1b
+ addi 5,5,16
+ mtctr 16
+.align 4
+.Lenc_compact_loop:
+ xor 8,8,12
+ xor 9,9,0
+ rlwinm 16,8,8,24,31
+ xor 10,10,14
+ rlwinm 17,9,8,24,31
+ xor 11,11,15
+ rlwinm 18,10,8,24,31
+ rlwinm 19,11,8,24,31
+ rlwinm 20,9,16,24,31
+ rlwinm 21,10,16,24,31
+ rlwinm 22,11,16,24,31
+ rlwinm 23,8,16,24,31
+ lbzx 16,6,16
+ rlwinm 24,10,24,24,31
+ lbzx 17,6,17
+ rlwinm 25,11,24,24,31
+ lbzx 18,6,18
+ rlwinm 26,8,24,24,31
+ lbzx 19,6,19
+ rlwinm 27,9,24,24,31
+ lbzx 20,6,20
+ rlwinm 28,11,0,24,31
+ lbzx 21,6,21
+ rlwinm 29,8,0,24,31
+ lbzx 22,6,22
+ rlwinm 30,9,0,24,31
+ lbzx 23,6,23
+ rlwinm 31,10,0,24,31
+ lbzx 24,6,24
+ rlwinm 8,16,24,0,7
+ lbzx 25,6,25
+ rlwinm 9,17,24,0,7
+ lbzx 26,6,26
+ rlwinm 10,18,24,0,7
+ lbzx 27,6,27
+ rlwinm 11,19,24,0,7
+ lbzx 28,6,28
+ rlwimi 8,20,16,8,15
+ lbzx 29,6,29
+ rlwimi 9,21,16,8,15
+ lbzx 30,6,30
+ rlwimi 10,22,16,8,15
+ lbzx 31,6,31
+ rlwimi 11,23,16,8,15
+ rlwimi 8,24,8,16,23
+ rlwimi 9,25,8,16,23
+ rlwimi 10,26,8,16,23
+ rlwimi 11,27,8,16,23
+ lwz 12,0(5)
+ or 8,8,28
+ lwz 0,4(5)
+ or 9,9,29
+ lwz 14,8(5)
+ or 10,10,30
+ lwz 15,12(5)
+ or 11,11,31
+
+ addi 5,5,16
+ bdz .Lenc_compact_done
+
+ and 16,8,7
+ and 17,9,7
+ and 18,10,7
+ and 19,11,7
+ srwi 20,16,7
+ andc 24,8,7
+ srwi 21,17,7
+ andc 25,9,7
+ srwi 22,18,7
+ andc 26,10,7
+ srwi 23,19,7
+ andc 27,11,7
+ sub 16,16,20
+ sub 17,17,21
+ sub 18,18,22
+ sub 19,19,23
+ add 24,24,24
+ add 25,25,25
+ add 26,26,26
+ add 27,27,27
+ and 16,16,4
+ and 17,17,4
+ and 18,18,4
+ and 19,19,4
+ xor 16,16,24
+ xor 17,17,25
+ rotlwi 28,8,16
+ xor 18,18,26
+ rotlwi 29,9,16
+ xor 19,19,27
+ rotlwi 30,10,16
+
+ xor 8,8,16
+ rotlwi 31,11,16
+ xor 9,9,17
+ rotrwi 8,8,24
+ xor 10,10,18
+ rotrwi 9,9,24
+ xor 11,11,19
+ rotrwi 10,10,24
+ xor 8,8,16
+ rotrwi 11,11,24
+ xor 9,9,17
+ xor 10,10,18
+ xor 11,11,19
+ rotlwi 24,28,8
+ xor 8,8,28
+ rotlwi 25,29,8
+ xor 9,9,29
+ rotlwi 26,30,8
+ xor 10,10,30
+ rotlwi 27,31,8
+ xor 11,11,31
+ xor 8,8,24
+ xor 9,9,25
+ xor 10,10,26
+ xor 11,11,27
+
+ b .Lenc_compact_loop
+.align 4
+.Lenc_compact_done:
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size AES_encrypt,.-AES_encrypt
+
+.globl AES_decrypt
+.type AES_decrypt,@function
+.align 7
+AES_decrypt:
+.localentry AES_decrypt,0
+
+ stdu 1,-256(1)
+ mflr 0
+
+ std 4,104(1)
+ std 14,112(1)
+ std 15,120(1)
+ std 16,128(1)
+ std 17,136(1)
+ std 18,144(1)
+ std 19,152(1)
+ std 20,160(1)
+ std 21,168(1)
+ std 22,176(1)
+ std 23,184(1)
+ std 24,192(1)
+ std 25,200(1)
+ std 26,208(1)
+ std 27,216(1)
+ std 28,224(1)
+ std 29,232(1)
+ std 30,240(1)
+ std 31,248(1)
+ std 0,272(1)
+
+ andi. 12,3,3
+ andi. 0,4,3
+ or. 12,12,0
+ bne .Ldec_unaligned
+
+.Ldec_unaligned_ok:
+ lwz 8,0(3)
+ lwz 9,4(3)
+ lwz 10,8(3)
+ lwz 11,12(3)
+ bl .LAES_Td
+ bl .Lppc_AES_decrypt_compact
+ ld 4,104(1)
+ stw 8,0(4)
+ stw 9,4(4)
+ stw 10,8(4)
+ stw 11,12(4)
+ b .Ldec_done
+
+.Ldec_unaligned:
+ subfic 12,3,4096
+ subfic 0,4,4096
+ andi. 12,12,4096-16
+ beq .Ldec_xpage
+ andi. 0,0,4096-16
+ bne .Ldec_unaligned_ok
+
+.Ldec_xpage:
+ lbz 16,0(3)
+ lbz 17,1(3)
+ lbz 18,2(3)
+ lbz 8,3(3)
+ lbz 20,4(3)
+ lbz 21,5(3)
+ lbz 22,6(3)
+ lbz 9,7(3)
+ lbz 24,8(3)
+ lbz 25,9(3)
+ lbz 26,10(3)
+ insrwi 8,16,8,0
+ lbz 10,11(3)
+ insrwi 9,20,8,0
+ lbz 28,12(3)
+ insrwi 8,17,8,8
+ lbz 29,13(3)
+ insrwi 9,21,8,8
+ lbz 30,14(3)
+ insrwi 8,18,8,16
+ lbz 11,15(3)
+ insrwi 9,22,8,16
+ insrwi 10,24,8,0
+ insrwi 11,28,8,0
+ insrwi 10,25,8,8
+ insrwi 11,29,8,8
+ insrwi 10,26,8,16
+ insrwi 11,30,8,16
+
+ bl .LAES_Td
+ bl .Lppc_AES_decrypt_compact
+ ld 4,104(1)
+
+ extrwi 16,8,8,0
+ extrwi 17,8,8,8
+ stb 16,0(4)
+ extrwi 18,8,8,16
+ stb 17,1(4)
+ stb 18,2(4)
+ extrwi 20,9,8,0
+ stb 8,3(4)
+ extrwi 21,9,8,8
+ stb 20,4(4)
+ extrwi 22,9,8,16
+ stb 21,5(4)
+ stb 22,6(4)
+ extrwi 24,10,8,0
+ stb 9,7(4)
+ extrwi 25,10,8,8
+ stb 24,8(4)
+ extrwi 26,10,8,16
+ stb 25,9(4)
+ stb 26,10(4)
+ extrwi 28,11,8,0
+ stb 10,11(4)
+ extrwi 29,11,8,8
+ stb 28,12(4)
+ extrwi 30,11,8,16
+ stb 29,13(4)
+ stb 30,14(4)
+ stb 11,15(4)
+
+.Ldec_done:
+ ld 0,272(1)
+ ld 14,112(1)
+ ld 15,120(1)
+ ld 16,128(1)
+ ld 17,136(1)
+ ld 18,144(1)
+ ld 19,152(1)
+ ld 20,160(1)
+ ld 21,168(1)
+ ld 22,176(1)
+ ld 23,184(1)
+ ld 24,192(1)
+ ld 25,200(1)
+ ld 26,208(1)
+ ld 27,216(1)
+ ld 28,224(1)
+ ld 29,232(1)
+ ld 30,240(1)
+ ld 31,248(1)
+ mtlr 0
+ addi 1,1,256
+ blr
+.long 0
+.byte 0,12,4,1,0x80,18,3,0
+.long 0
+
+.align 5
+.Lppc_AES_decrypt:
+ lwz 16,240(5)
+ addi 6,3,3
+ lwz 12,0(5)
+ addi 7,3,2
+ lwz 0,4(5)
+ addi 4,3,1
+ lwz 14,8(5)
+ addi 16,16,-1
+ lwz 15,12(5)
+ addi 5,5,16
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ mtctr 16
+.align 4
+.Ldec_loop:
+ rlwinm 16,8,11,21,28
+ rlwinm 17,9,11,21,28
+ rlwinm 18,10,11,21,28
+ rlwinm 19,11,11,21,28
+ lwz 12,0(5)
+ rlwinm 20,11,19,21,28
+ lwz 0,4(5)
+ rlwinm 21,8,19,21,28
+ lwz 14,8(5)
+ rlwinm 22,9,19,21,28
+ lwz 15,12(5)
+ rlwinm 23,10,19,21,28
+ lwzx 16,3,16
+ rlwinm 24,10,27,21,28
+ lwzx 17,3,17
+ rlwinm 25,11,27,21,28
+ lwzx 18,3,18
+ rlwinm 26,8,27,21,28
+ lwzx 19,3,19
+ rlwinm 27,9,27,21,28
+ lwzx 20,6,20
+ rlwinm 28,9,3,21,28
+ lwzx 21,6,21
+ rlwinm 29,10,3,21,28
+ lwzx 22,6,22
+ rlwinm 30,11,3,21,28
+ lwzx 23,6,23
+ rlwinm 31,8,3,21,28
+ lwzx 24,7,24
+ xor 12,12,16
+ lwzx 25,7,25
+ xor 0,0,17
+ lwzx 26,7,26
+ xor 14,14,18
+ lwzx 27,7,27
+ xor 15,15,19
+ lwzx 28,4,28
+ xor 12,12,20
+ lwzx 29,4,29
+ xor 0,0,21
+ lwzx 30,4,30
+ xor 14,14,22
+ lwzx 31,4,31
+ xor 15,15,23
+ xor 12,12,24
+ xor 0,0,25
+ xor 14,14,26
+ xor 15,15,27
+ xor 8,12,28
+ xor 9,0,29
+ xor 10,14,30
+ xor 11,15,31
+ addi 5,5,16
+ bdnz .Ldec_loop
+
+ addi 7,3,2048
+ nop
+ lwz 12,0(5)
+ rlwinm 16,8,8,24,31
+ lwz 0,4(5)
+ rlwinm 17,9,8,24,31
+ lwz 14,8(5)
+ rlwinm 18,10,8,24,31
+ lwz 15,12(5)
+ rlwinm 19,11,8,24,31
+ lwz 24,2048(3)
+ rlwinm 20,11,16,24,31
+ lwz 25,2080(3)
+ rlwinm 21,8,16,24,31
+ lwz 26,2112(3)
+ lbzx 16,7,16
+ lwz 27,2144(3)
+ lbzx 17,7,17
+ lwz 28,2176(3)
+ rlwinm 22,9,16,24,31
+ lwz 29,2208(3)
+ rlwinm 23,10,16,24,31
+ lwz 30,2240(3)
+ rlwinm 24,10,24,24,31
+ lwz 31,2272(3)
+ rlwinm 25,11,24,24,31
+ lbzx 18,7,18
+ rlwinm 26,8,24,24,31
+ lbzx 19,7,19
+ rlwinm 27,9,24,24,31
+ lbzx 20,7,20
+ rlwinm 28,9,0,24,31
+ lbzx 21,7,21
+ rlwinm 29,10,0,24,31
+ lbzx 22,7,22
+ rlwinm 30,11,0,24,31
+ lbzx 23,7,23
+ rlwinm 31,8,0,24,31
+ lbzx 24,7,24
+ rlwinm 8,16,24,0,7
+ lbzx 25,7,25
+ rlwinm 9,17,24,0,7
+ lbzx 26,7,26
+ rlwinm 10,18,24,0,7
+ lbzx 27,7,27
+ rlwinm 11,19,24,0,7
+ lbzx 28,7,28
+ rlwimi 8,20,16,8,15
+ lbzx 29,7,29
+ rlwimi 9,21,16,8,15
+ lbzx 30,7,30
+ rlwimi 10,22,16,8,15
+ lbzx 31,7,31
+ rlwimi 11,23,16,8,15
+ rlwimi 8,24,8,16,23
+ rlwimi 9,25,8,16,23
+ rlwimi 10,26,8,16,23
+ rlwimi 11,27,8,16,23
+ or 8,8,28
+ or 9,9,29
+ or 10,10,30
+ or 11,11,31
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 4
+.Lppc_AES_decrypt_compact:
+ lwz 16,240(5)
+ addi 6,3,2048
+ lwz 12,0(5)
+ lis 7,0x8080
+ lwz 0,4(5)
+ lis 4,0x1b1b
+ lwz 14,8(5)
+ ori 7,7,0x8080
+ lwz 15,12(5)
+ ori 4,4,0x1b1b
+ addi 5,5,16
+ insrdi 7,7,32,0
+ insrdi 4,4,32,0
+ mtctr 16
+.align 4
+.Ldec_compact_loop:
+ xor 8,8,12
+ xor 9,9,0
+ rlwinm 16,8,8,24,31
+ xor 10,10,14
+ rlwinm 17,9,8,24,31
+ xor 11,11,15
+ rlwinm 18,10,8,24,31
+ rlwinm 19,11,8,24,31
+ rlwinm 20,11,16,24,31
+ rlwinm 21,8,16,24,31
+ rlwinm 22,9,16,24,31
+ rlwinm 23,10,16,24,31
+ lbzx 16,6,16
+ rlwinm 24,10,24,24,31
+ lbzx 17,6,17
+ rlwinm 25,11,24,24,31
+ lbzx 18,6,18
+ rlwinm 26,8,24,24,31
+ lbzx 19,6,19
+ rlwinm 27,9,24,24,31
+ lbzx 20,6,20
+ rlwinm 28,9,0,24,31
+ lbzx 21,6,21
+ rlwinm 29,10,0,24,31
+ lbzx 22,6,22
+ rlwinm 30,11,0,24,31
+ lbzx 23,6,23
+ rlwinm 31,8,0,24,31
+ lbzx 24,6,24
+ rlwinm 8,16,24,0,7
+ lbzx 25,6,25
+ rlwinm 9,17,24,0,7
+ lbzx 26,6,26
+ rlwinm 10,18,24,0,7
+ lbzx 27,6,27
+ rlwinm 11,19,24,0,7
+ lbzx 28,6,28
+ rlwimi 8,20,16,8,15
+ lbzx 29,6,29
+ rlwimi 9,21,16,8,15
+ lbzx 30,6,30
+ rlwimi 10,22,16,8,15
+ lbzx 31,6,31
+ rlwimi 11,23,16,8,15
+ rlwimi 8,24,8,16,23
+ rlwimi 9,25,8,16,23
+ rlwimi 10,26,8,16,23
+ rlwimi 11,27,8,16,23
+ lwz 12,0(5)
+ or 8,8,28
+ lwz 0,4(5)
+ or 9,9,29
+ lwz 14,8(5)
+ or 10,10,30
+ lwz 15,12(5)
+ or 11,11,31
+
+ addi 5,5,16
+ bdz .Ldec_compact_done
+
+ insrdi 8,9,32,0
+ insrdi 10,11,32,0
+
+ and 16,8,7
+ and 18,10,7
+ srdi 20,16,7
+ srdi 22,18,7
+ andc 24,8,7
+ andc 26,10,7
+ sub 16,16,20
+ sub 18,18,22
+ add 24,24,24
+ add 26,26,26
+ and 16,16,4
+ and 18,18,4
+ xor 16,16,24
+ xor 18,18,26
+
+ and 20,16,7
+ and 22,18,7
+ srdi 24,20,7
+ srdi 26,22,7
+ andc 28,16,7
+ andc 30,18,7
+ sub 20,20,24
+ sub 22,22,26
+ add 28,28,28
+ add 30,30,30
+ and 20,20,4
+ and 22,22,4
+ xor 20,20,28
+ xor 22,22,30
+
+ and 24,20,7
+ and 26,22,7
+ srdi 28,24,7
+ srdi 30,26,7
+ sub 24,24,28
+ sub 26,26,30
+ andc 28,20,7
+ andc 30,22,7
+ add 28,28,28
+ add 30,30,30
+ and 24,24,4
+ and 26,26,4
+ xor 24,24,28
+ xor 26,26,30
+
+ xor 16,16,8
+ xor 18,18,10
+ xor 20,20,8
+ xor 22,22,10
+
+ rldicl 17,16,32,32
+ rldicl 19,18,32,32
+ rldicl 21,20,32,32
+ rldicl 23,22,32,32
+ rldicl 25,24,32,32
+ rldicl 27,26,32,32
+ rotrwi 8,8,8
+ rotrwi 9,9,8
+ xor 8,8,16
+ rotrwi 10,10,8
+ xor 9,9,17
+ rotrwi 11,11,8
+ xor 10,10,18
+ xor 11,11,19
+ xor 16,16,24
+ xor 17,17,25
+ xor 18,18,26
+ xor 19,19,27
+ xor 8,8,20
+ rotrwi 16,16,24
+ xor 9,9,21
+ rotrwi 17,17,24
+ xor 10,10,22
+ rotrwi 18,18,24
+ xor 11,11,23
+ rotrwi 19,19,24
+ xor 20,20,24
+ xor 21,21,25
+ xor 22,22,26
+ xor 23,23,27
+ xor 8,8,24
+ rotrwi 20,20,16
+ xor 9,9,25
+ rotrwi 21,21,16
+ xor 10,10,26
+ rotrwi 22,22,16
+ xor 11,11,27
+ rotrwi 23,23,16
+ xor 8,8,16
+ rotrwi 24,24,8
+ xor 9,9,17
+ rotrwi 25,25,8
+ xor 10,10,18
+ rotrwi 26,26,8
+ xor 11,11,19
+ rotrwi 27,27,8
+ xor 8,8,20
+ xor 9,9,21
+ xor 10,10,22
+ xor 11,11,23
+ xor 8,8,24
+ xor 9,9,25
+ xor 10,10,26
+ xor 11,11,27
+
+ b .Ldec_compact_loop
+.align 4
+.Ldec_compact_done:
+ xor 8,8,12
+ xor 9,9,0
+ xor 10,10,14
+ xor 11,11,15
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.size AES_decrypt,.-AES_decrypt
+
+.byte 65,69,83,32,102,111,114,32,80,80,67,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+.align 7
diff --git a/sys/crypto/openssl/powerpc64/aesp8-ppc.S b/sys/crypto/openssl/powerpc64/aesp8-ppc.S
new file mode 100644
index 000000000000..091144251352
--- /dev/null
+++ b/sys/crypto/openssl/powerpc64/aesp8-ppc.S
@@ -0,0 +1,3660 @@
+/* $FreeBSD$ */
+/* Do not modify. This file is auto-generated from aesp8-ppc.pl. */
+.machine "any"
+
+.abiversion 2
+.text
+
+.align 7
+rcon:
+.byte 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00
+.byte 0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00
+.byte 0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c
+.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+.Lconsts:
+ mflr 0
+ bcl 20,31,$+4
+ mflr 6
+ addi 6,6,-0x48
+ mtlr 0
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+.byte 65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 2
+
+.globl aes_p8_set_encrypt_key
+.type aes_p8_set_encrypt_key,@function
+.align 5
+aes_p8_set_encrypt_key:
+.localentry aes_p8_set_encrypt_key,0
+
+.Lset_encrypt_key:
+ mflr 11
+ std 11,16(1)
+
+ li 6,-1
+ cmpldi 3,0
+ beq- .Lenc_key_abort
+ cmpldi 5,0
+ beq- .Lenc_key_abort
+ li 6,-2
+ cmpwi 4,128
+ blt- .Lenc_key_abort
+ cmpwi 4,256
+ bgt- .Lenc_key_abort
+ andi. 0,4,0x3f
+ bne- .Lenc_key_abort
+
+ lis 0,0xfff0
+ li 12,-1
+ or 0,0,0
+
+ bl .Lconsts
+ mtlr 11
+
+ neg 9,3
+ lvx 1,0,3
+ addi 3,3,15
+ lvsr 3,0,9
+ li 8,0x20
+ cmpwi 4,192
+ lvx 2,0,3
+
+ lvx 4,0,6
+
+ lvx 5,8,6
+ addi 6,6,0x10
+ vperm 1,1,2,3
+ li 7,8
+ vxor 0,0,0
+ mtctr 7
+
+ lvsr 8,0,5
+ vspltisb 9,-1
+ lvx 10,0,5
+ vperm 9,0,9,8
+
+ blt .Loop128
+ addi 3,3,8
+ beq .L192
+ addi 3,3,8
+ b .L256
+
+.align 4
+.Loop128:
+ vperm 3,1,1,5
+ vsldoi 6,0,1,12
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vadduwm 4,4,4
+ vxor 1,1,3
+ bdnz .Loop128
+
+ lvx 4,0,6
+
+ vperm 3,1,1,5
+ vsldoi 6,0,1,12
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vadduwm 4,4,4
+ vxor 1,1,3
+
+ vperm 3,1,1,5
+ vsldoi 6,0,1,12
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vxor 1,1,3
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+
+ addi 3,5,15
+ addi 5,5,0x50
+
+ li 8,10
+ b .Ldone
+
+.align 4
+.L192:
+ lvx 6,0,3
+ li 7,4
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 5,5,16
+ vperm 2,2,6,3
+ vspltisb 3,8
+ mtctr 7
+ vsububm 5,5,3
+
+.Loop192:
+ vperm 3,2,2,5
+ vsldoi 6,0,1,12
+ .long 0x10632509
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+
+ vsldoi 7,0,2,8
+ vspltw 6,1,3
+ vxor 6,6,2
+ vsldoi 2,0,2,12
+ vadduwm 4,4,4
+ vxor 2,2,6
+ vxor 1,1,3
+ vxor 2,2,3
+ vsldoi 7,7,1,8
+
+ vperm 3,2,2,5
+ vsldoi 6,0,1,12
+ vperm 11,7,7,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vsldoi 7,1,2,8
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vperm 11,7,7,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ stvx 7,0,5
+ addi 5,5,16
+
+ vspltw 6,1,3
+ vxor 6,6,2
+ vsldoi 2,0,2,12
+ vadduwm 4,4,4
+ vxor 2,2,6
+ vxor 1,1,3
+ vxor 2,2,3
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 3,5,15
+ addi 5,5,16
+ bdnz .Loop192
+
+ li 8,12
+ addi 5,5,0x20
+ b .Ldone
+
+.align 4
+.L256:
+ lvx 6,0,3
+ li 7,7
+ li 8,14
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 5,5,16
+ vperm 2,2,6,3
+ mtctr 7
+
+.Loop256:
+ vperm 3,2,2,5
+ vsldoi 6,0,1,12
+ vperm 11,2,2,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ .long 0x10632509
+ stvx 7,0,5
+ addi 5,5,16
+
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vsldoi 6,0,6,12
+ vxor 1,1,6
+ vadduwm 4,4,4
+ vxor 1,1,3
+ vperm 11,1,1,8
+ vsel 7,10,11,9
+ vor 10,11,11
+ stvx 7,0,5
+ addi 3,5,15
+ addi 5,5,16
+ bdz .Ldone
+
+ vspltw 3,1,3
+ vsldoi 6,0,2,12
+ .long 0x106305C8
+
+ vxor 2,2,6
+ vsldoi 6,0,6,12
+ vxor 2,2,6
+ vsldoi 6,0,6,12
+ vxor 2,2,6
+
+ vxor 2,2,3
+ b .Loop256
+
+.align 4
+.Ldone:
+ lvx 2,0,3
+ vsel 2,10,2,9
+ stvx 2,0,3
+ li 6,0
+ or 12,12,12
+ stw 8,0(5)
+
+.Lenc_key_abort:
+ mr 3,6
+ blr
+.long 0
+.byte 0,12,0x14,1,0,0,3,0
+.long 0
+.size aes_p8_set_encrypt_key,.-aes_p8_set_encrypt_key
+
+.globl aes_p8_set_decrypt_key
+.type aes_p8_set_decrypt_key,@function
+.align 5
+aes_p8_set_decrypt_key:
+.localentry aes_p8_set_decrypt_key,0
+
+ stdu 1,-64(1)
+ mflr 10
+ std 10,64+16(1)
+ bl .Lset_encrypt_key
+ mtlr 10
+
+ cmpwi 3,0
+ bne- .Ldec_key_abort
+
+ slwi 7,8,4
+ subi 3,5,240
+ srwi 8,8,1
+ add 5,3,7
+ mtctr 8
+
+.Ldeckey:
+ lwz 0, 0(3)
+ lwz 6, 4(3)
+ lwz 7, 8(3)
+ lwz 8, 12(3)
+ addi 3,3,16
+ lwz 9, 0(5)
+ lwz 10,4(5)
+ lwz 11,8(5)
+ lwz 12,12(5)
+ stw 0, 0(5)
+ stw 6, 4(5)
+ stw 7, 8(5)
+ stw 8, 12(5)
+ subi 5,5,16
+ stw 9, -16(3)
+ stw 10,-12(3)
+ stw 11,-8(3)
+ stw 12,-4(3)
+ bdnz .Ldeckey
+
+ xor 3,3,3
+.Ldec_key_abort:
+ addi 1,1,64
+ blr
+.long 0
+.byte 0,12,4,1,0x80,0,3,0
+.long 0
+.size aes_p8_set_decrypt_key,.-aes_p8_set_decrypt_key
+.globl aes_p8_encrypt
+.type aes_p8_encrypt,@function
+.align 5
+aes_p8_encrypt:
+.localentry aes_p8_encrypt,0
+
+ lwz 6,240(5)
+ lis 0,0xfc00
+ li 12,-1
+ li 7,15
+ or 0,0,0
+
+ lvx 0,0,3
+ neg 11,4
+ lvx 1,7,3
+ lvsl 2,0,3
+
+ lvsl 3,0,11
+
+ li 7,16
+ vperm 0,0,1,2
+ lvx 1,0,5
+ lvsl 5,0,5
+ srwi 6,6,1
+ lvx 2,7,5
+ addi 7,7,16
+ subi 6,6,1
+ vperm 1,1,2,5
+
+ vxor 0,0,1
+ lvx 1,7,5
+ addi 7,7,16
+ mtctr 6
+
+.Loop_enc:
+ vperm 2,2,1,5
+ .long 0x10001508
+ lvx 2,7,5
+ addi 7,7,16
+ vperm 1,1,2,5
+ .long 0x10000D08
+ lvx 1,7,5
+ addi 7,7,16
+ bdnz .Loop_enc
+
+ vperm 2,2,1,5
+ .long 0x10001508
+ lvx 2,7,5
+ vperm 1,1,2,5
+ .long 0x10000D09
+
+ vspltisb 2,-1
+ vxor 1,1,1
+ li 7,15
+ vperm 2,1,2,3
+
+ lvx 1,0,4
+ vperm 0,0,0,3
+ vsel 1,1,0,2
+ lvx 4,7,4
+ stvx 1,0,4
+ vsel 0,0,4,2
+ stvx 0,7,4
+
+ or 12,12,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size aes_p8_encrypt,.-aes_p8_encrypt
+.globl aes_p8_decrypt
+.type aes_p8_decrypt,@function
+.align 5
+aes_p8_decrypt:
+.localentry aes_p8_decrypt,0
+
+ lwz 6,240(5)
+ lis 0,0xfc00
+ li 12,-1
+ li 7,15
+ or 0,0,0
+
+ lvx 0,0,3
+ neg 11,4
+ lvx 1,7,3
+ lvsl 2,0,3
+
+ lvsl 3,0,11
+
+ li 7,16
+ vperm 0,0,1,2
+ lvx 1,0,5
+ lvsl 5,0,5
+ srwi 6,6,1
+ lvx 2,7,5
+ addi 7,7,16
+ subi 6,6,1
+ vperm 1,1,2,5
+
+ vxor 0,0,1
+ lvx 1,7,5
+ addi 7,7,16
+ mtctr 6
+
+.Loop_dec:
+ vperm 2,2,1,5
+ .long 0x10001548
+ lvx 2,7,5
+ addi 7,7,16
+ vperm 1,1,2,5
+ .long 0x10000D48
+ lvx 1,7,5
+ addi 7,7,16
+ bdnz .Loop_dec
+
+ vperm 2,2,1,5
+ .long 0x10001548
+ lvx 2,7,5
+ vperm 1,1,2,5
+ .long 0x10000D49
+
+ vspltisb 2,-1
+ vxor 1,1,1
+ li 7,15
+ vperm 2,1,2,3
+
+ lvx 1,0,4
+ vperm 0,0,0,3
+ vsel 1,1,0,2
+ lvx 4,7,4
+ stvx 1,0,4
+ vsel 0,0,4,2
+ stvx 0,7,4
+
+ or 12,12,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,3,0
+.long 0
+.size aes_p8_decrypt,.-aes_p8_decrypt
+.globl aes_p8_cbc_encrypt
+.type aes_p8_cbc_encrypt,@function
+.align 5
+aes_p8_cbc_encrypt:
+.localentry aes_p8_cbc_encrypt,0
+
+ cmpldi 5,16
+ .long 0x4dc00020
+
+ cmpwi 8,0
+ lis 0,0xffe0
+ li 12,-1
+ or 0,0,0
+
+ li 10,15
+ vxor 0,0,0
+
+
+ lvx 4,0,7
+ lvsl 6,0,7
+ lvx 5,10,7
+
+ vperm 4,4,5,6
+
+ neg 11,3
+ lvsl 10,0,6
+ lwz 9,240(6)
+
+ lvsr 6,0,11
+ lvx 5,0,3
+ addi 3,3,15
+
+
+ lvsr 8,0,4
+ vspltisb 9,-1
+ lvx 7,0,4
+ vperm 9,0,9,8
+
+
+ srwi 9,9,1
+ li 10,16
+ subi 9,9,1
+ beq .Lcbc_dec
+
+.Lcbc_enc:
+ vor 2,5,5
+ lvx 5,0,3
+ addi 3,3,16
+ mtctr 9
+ subi 5,5,16
+
+ lvx 0,0,6
+ vperm 2,2,5,6
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ vxor 2,2,0
+ lvx 0,10,6
+ addi 10,10,16
+ vxor 2,2,4
+
+.Loop_cbc_enc:
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ .long 0x10420508
+ lvx 0,10,6
+ addi 10,10,16
+ bdnz .Loop_cbc_enc
+
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ li 10,16
+ vperm 0,0,1,10
+ .long 0x10820509
+ cmpldi 5,16
+
+ vperm 3,4,4,8
+ vsel 2,7,3,9
+ vor 7,3,3
+ stvx 2,0,4
+ addi 4,4,16
+ bge .Lcbc_enc
+
+ b .Lcbc_done
+
+.align 4
+.Lcbc_dec:
+ cmpldi 5,128
+ bge _aesp8_cbc_decrypt8x
+ vor 3,5,5
+ lvx 5,0,3
+ addi 3,3,16
+ mtctr 9
+ subi 5,5,16
+
+ lvx 0,0,6
+ vperm 3,3,5,6
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ vxor 2,3,0
+ lvx 0,10,6
+ addi 10,10,16
+
+.Loop_cbc_dec:
+ vperm 1,1,0,10
+ .long 0x10420D48
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ .long 0x10420548
+ lvx 0,10,6
+ addi 10,10,16
+ bdnz .Loop_cbc_dec
+
+ vperm 1,1,0,10
+ .long 0x10420D48
+ lvx 1,10,6
+ li 10,16
+ vperm 0,0,1,10
+ .long 0x10420549
+ cmpldi 5,16
+
+ vxor 2,2,4
+ vor 4,3,3
+ vperm 3,2,2,8
+ vsel 2,7,3,9
+ vor 7,3,3
+ stvx 2,0,4
+ addi 4,4,16
+ bge .Lcbc_dec
+
+.Lcbc_done:
+ addi 4,4,-1
+ lvx 2,0,4
+ vsel 2,7,2,9
+ stvx 2,0,4
+
+ neg 8,7
+ li 10,15
+ vxor 0,0,0
+ vspltisb 9,-1
+
+ lvsl 8,0,8
+ vperm 9,0,9,8
+
+ lvx 7,0,7
+ vperm 4,4,4,8
+ vsel 2,7,4,9
+ lvx 5,10,7
+ stvx 2,0,7
+ vsel 2,4,5,9
+ stvx 2,10,7
+
+ or 12,12,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,6,0
+.long 0
+.align 5
+_aesp8_cbc_decrypt8x:
+ stdu 1,-448(1)
+ li 10,207
+ li 11,223
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ li 0,-1
+ stw 12,396(1)
+ li 8,0x10
+ std 26,400(1)
+ li 26,0x20
+ std 27,408(1)
+ li 27,0x30
+ std 28,416(1)
+ li 28,0x40
+ std 29,424(1)
+ li 29,0x50
+ std 30,432(1)
+ li 30,0x60
+ std 31,440(1)
+ li 31,0x70
+ or 0,0,0
+
+ subi 9,9,3
+ subi 5,5,128
+
+ lvx 23,0,6
+ lvx 30,8,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,10
+ addi 11,1,64+15
+ mtctr 9
+
+.Load_cbc_dec_key:
+ vperm 24,30,31,10
+ lvx 30,8,6
+ addi 6,6,0x20
+ stvx 24,0,11
+ vperm 25,31,30,10
+ lvx 31,0,6
+ stvx 25,8,11
+ addi 11,11,0x20
+ bdnz .Load_cbc_dec_key
+
+ lvx 26,8,6
+ vperm 24,30,31,10
+ lvx 27,26,6
+ stvx 24,0,11
+ vperm 25,31,26,10
+ lvx 28,27,6
+ stvx 25,8,11
+ addi 11,1,64+15
+ vperm 26,26,27,10
+ lvx 29,28,6
+ vperm 27,27,28,10
+ lvx 30,29,6
+ vperm 28,28,29,10
+ lvx 31,30,6
+ vperm 29,29,30,10
+ lvx 14,31,6
+ vperm 30,30,31,10
+ lvx 24,0,11
+ vperm 31,31,14,10
+ lvx 25,8,11
+
+
+
+ subi 3,3,15
+
+
+ .long 0x7C001E99
+
+
+ .long 0x7C281E99
+
+ .long 0x7C5A1E99
+
+ .long 0x7C7B1E99
+
+ .long 0x7D5C1E99
+
+ vxor 14,0,23
+ .long 0x7D7D1E99
+
+ vxor 15,1,23
+ .long 0x7D9E1E99
+
+ vxor 16,2,23
+ .long 0x7DBF1E99
+ addi 3,3,0x80
+
+ vxor 17,3,23
+
+ vxor 18,10,23
+
+ vxor 19,11,23
+ vxor 20,12,23
+ vxor 21,13,23
+
+ mtctr 9
+ b .Loop_cbc_dec8x
+.align 5
+.Loop_cbc_dec8x:
+ .long 0x11CEC548
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+ lvx 24,26,11
+ addi 11,11,0x20
+
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+ lvx 25,8,11
+ bdnz .Loop_cbc_dec8x
+
+ subic 5,5,128
+ .long 0x11CEC548
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+
+ subfe. 0,0,0
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+
+ and 0,0,5
+ .long 0x11CED548
+ .long 0x11EFD548
+ .long 0x1210D548
+ .long 0x1231D548
+ .long 0x1252D548
+ .long 0x1273D548
+ .long 0x1294D548
+ .long 0x12B5D548
+
+ add 3,3,0
+
+
+
+ .long 0x11CEDD48
+ .long 0x11EFDD48
+ .long 0x1210DD48
+ .long 0x1231DD48
+ .long 0x1252DD48
+ .long 0x1273DD48
+ .long 0x1294DD48
+ .long 0x12B5DD48
+
+ addi 11,1,64+15
+ .long 0x11CEE548
+ .long 0x11EFE548
+ .long 0x1210E548
+ .long 0x1231E548
+ .long 0x1252E548
+ .long 0x1273E548
+ .long 0x1294E548
+ .long 0x12B5E548
+ lvx 24,0,11
+
+ .long 0x11CEED48
+ .long 0x11EFED48
+ .long 0x1210ED48
+ .long 0x1231ED48
+ .long 0x1252ED48
+ .long 0x1273ED48
+ .long 0x1294ED48
+ .long 0x12B5ED48
+ lvx 25,8,11
+
+ .long 0x11CEF548
+ vxor 4,4,31
+ .long 0x11EFF548
+ vxor 0,0,31
+ .long 0x1210F548
+ vxor 1,1,31
+ .long 0x1231F548
+ vxor 2,2,31
+ .long 0x1252F548
+ vxor 3,3,31
+ .long 0x1273F548
+ vxor 10,10,31
+ .long 0x1294F548
+ vxor 11,11,31
+ .long 0x12B5F548
+ vxor 12,12,31
+
+ .long 0x11CE2549
+ .long 0x11EF0549
+ .long 0x7C001E99
+ .long 0x12100D49
+ .long 0x7C281E99
+ .long 0x12311549
+
+ .long 0x7C5A1E99
+ .long 0x12521D49
+
+ .long 0x7C7B1E99
+ .long 0x12735549
+
+ .long 0x7D5C1E99
+ .long 0x12945D49
+
+ .long 0x7D7D1E99
+ .long 0x12B56549
+
+ .long 0x7D9E1E99
+ vor 4,13,13
+
+ .long 0x7DBF1E99
+ addi 3,3,0x80
+
+
+
+ .long 0x7DC02799
+
+ vxor 14,0,23
+
+ .long 0x7DE82799
+
+ vxor 15,1,23
+
+ .long 0x7E1A2799
+ vxor 16,2,23
+
+ .long 0x7E3B2799
+ vxor 17,3,23
+
+ .long 0x7E5C2799
+ vxor 18,10,23
+
+ .long 0x7E7D2799
+ vxor 19,11,23
+
+ .long 0x7E9E2799
+ vxor 20,12,23
+ .long 0x7EBF2799
+ addi 4,4,0x80
+ vxor 21,13,23
+
+ mtctr 9
+ beq .Loop_cbc_dec8x
+
+ addic. 5,5,128
+ beq .Lcbc_dec8x_done
+ nop
+ nop
+
+.Loop_cbc_dec8x_tail:
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+ lvx 24,26,11
+ addi 11,11,0x20
+
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+ lvx 25,8,11
+ bdnz .Loop_cbc_dec8x_tail
+
+ .long 0x11EFC548
+ .long 0x1210C548
+ .long 0x1231C548
+ .long 0x1252C548
+ .long 0x1273C548
+ .long 0x1294C548
+ .long 0x12B5C548
+
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ .long 0x1231CD48
+ .long 0x1252CD48
+ .long 0x1273CD48
+ .long 0x1294CD48
+ .long 0x12B5CD48
+
+ .long 0x11EFD548
+ .long 0x1210D548
+ .long 0x1231D548
+ .long 0x1252D548
+ .long 0x1273D548
+ .long 0x1294D548
+ .long 0x12B5D548
+
+ .long 0x11EFDD48
+ .long 0x1210DD48
+ .long 0x1231DD48
+ .long 0x1252DD48
+ .long 0x1273DD48
+ .long 0x1294DD48
+ .long 0x12B5DD48
+
+ .long 0x11EFE548
+ .long 0x1210E548
+ .long 0x1231E548
+ .long 0x1252E548
+ .long 0x1273E548
+ .long 0x1294E548
+ .long 0x12B5E548
+
+ .long 0x11EFED48
+ .long 0x1210ED48
+ .long 0x1231ED48
+ .long 0x1252ED48
+ .long 0x1273ED48
+ .long 0x1294ED48
+ .long 0x12B5ED48
+
+ .long 0x11EFF548
+ vxor 4,4,31
+ .long 0x1210F548
+ vxor 1,1,31
+ .long 0x1231F548
+ vxor 2,2,31
+ .long 0x1252F548
+ vxor 3,3,31
+ .long 0x1273F548
+ vxor 10,10,31
+ .long 0x1294F548
+ vxor 11,11,31
+ .long 0x12B5F548
+ vxor 12,12,31
+
+ cmplwi 5,32
+ blt .Lcbc_dec8x_one
+ nop
+ beq .Lcbc_dec8x_two
+ cmplwi 5,64
+ blt .Lcbc_dec8x_three
+ nop
+ beq .Lcbc_dec8x_four
+ cmplwi 5,96
+ blt .Lcbc_dec8x_five
+ nop
+ beq .Lcbc_dec8x_six
+
+.Lcbc_dec8x_seven:
+ .long 0x11EF2549
+ .long 0x12100D49
+ .long 0x12311549
+ .long 0x12521D49
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+
+ .long 0x7E9D2799
+ .long 0x7EBE2799
+ addi 4,4,0x70
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_six:
+ .long 0x12102549
+ .long 0x12311549
+ .long 0x12521D49
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E002799
+
+ .long 0x7E282799
+
+ .long 0x7E5A2799
+
+ .long 0x7E7B2799
+
+ .long 0x7E9C2799
+ .long 0x7EBD2799
+ addi 4,4,0x60
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_five:
+ .long 0x12312549
+ .long 0x12521D49
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E202799
+
+ .long 0x7E482799
+
+ .long 0x7E7A2799
+
+ .long 0x7E9B2799
+ .long 0x7EBC2799
+ addi 4,4,0x50
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_four:
+ .long 0x12522549
+ .long 0x12735549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E402799
+
+ .long 0x7E682799
+
+ .long 0x7E9A2799
+ .long 0x7EBB2799
+ addi 4,4,0x40
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_three:
+ .long 0x12732549
+ .long 0x12945D49
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E602799
+
+ .long 0x7E882799
+ .long 0x7EBA2799
+ addi 4,4,0x30
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_two:
+ .long 0x12942549
+ .long 0x12B56549
+ vor 4,13,13
+
+
+
+ .long 0x7E802799
+ .long 0x7EA82799
+ addi 4,4,0x20
+ b .Lcbc_dec8x_done
+
+.align 5
+.Lcbc_dec8x_one:
+ .long 0x12B52549
+ vor 4,13,13
+
+
+ .long 0x7EA02799
+ addi 4,4,0x10
+
+.Lcbc_dec8x_done:
+
+ .long 0x7C803F99
+
+ li 10,79
+ li 11,95
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+
+ or 12,12,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ ld 26,400(1)
+ ld 27,408(1)
+ ld 28,416(1)
+ ld 29,424(1)
+ ld 30,432(1)
+ ld 31,440(1)
+ addi 1,1,448
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_cbc_encrypt,.-aes_p8_cbc_encrypt
+.globl aes_p8_ctr32_encrypt_blocks
+.type aes_p8_ctr32_encrypt_blocks,@function
+.align 5
+aes_p8_ctr32_encrypt_blocks:
+.localentry aes_p8_ctr32_encrypt_blocks,0
+
+ cmpldi 5,1
+ .long 0x4dc00020
+
+ lis 0,0xfff0
+ li 12,-1
+ or 0,0,0
+
+ li 10,15
+ vxor 0,0,0
+
+
+ lvx 4,0,7
+ lvsl 6,0,7
+ lvx 5,10,7
+ vspltisb 11,1
+
+ vperm 4,4,5,6
+ vsldoi 11,0,11,1
+
+ neg 11,3
+ lvsl 10,0,6
+ lwz 9,240(6)
+
+ lvsr 6,0,11
+ lvx 5,0,3
+ addi 3,3,15
+
+
+ srwi 9,9,1
+ li 10,16
+ subi 9,9,1
+
+ cmpldi 5,8
+ bge _aesp8_ctr32_encrypt8x
+
+ lvsr 8,0,4
+ vspltisb 9,-1
+ lvx 7,0,4
+ vperm 9,0,9,8
+
+
+ lvx 0,0,6
+ mtctr 9
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ vxor 2,4,0
+ lvx 0,10,6
+ addi 10,10,16
+ b .Loop_ctr32_enc
+
+.align 5
+.Loop_ctr32_enc:
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 0,0,1,10
+ .long 0x10420508
+ lvx 0,10,6
+ addi 10,10,16
+ bdnz .Loop_ctr32_enc
+
+ vadduwm 4,4,11
+ vor 3,5,5
+ lvx 5,0,3
+ addi 3,3,16
+ subic. 5,5,1
+
+ vperm 1,1,0,10
+ .long 0x10420D08
+ lvx 1,10,6
+ vperm 3,3,5,6
+ li 10,16
+ vperm 1,0,1,10
+ lvx 0,0,6
+ vxor 3,3,1
+ .long 0x10421D09
+
+ lvx 1,10,6
+ addi 10,10,16
+ vperm 2,2,2,8
+ vsel 3,7,2,9
+ mtctr 9
+ vperm 0,0,1,10
+ vor 7,2,2
+ vxor 2,4,0
+ lvx 0,10,6
+ addi 10,10,16
+ stvx 3,0,4
+ addi 4,4,16
+ bne .Loop_ctr32_enc
+
+ addi 4,4,-1
+ lvx 2,0,4
+ vsel 2,7,2,9
+ stvx 2,0,4
+
+ or 12,12,12
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,6,0
+.long 0
+.align 5
+_aesp8_ctr32_encrypt8x:
+ stdu 1,-448(1)
+ li 10,207
+ li 11,223
+ stvx 20,10,1
+ addi 10,10,32
+ stvx 21,11,1
+ addi 11,11,32
+ stvx 22,10,1
+ addi 10,10,32
+ stvx 23,11,1
+ addi 11,11,32
+ stvx 24,10,1
+ addi 10,10,32
+ stvx 25,11,1
+ addi 11,11,32
+ stvx 26,10,1
+ addi 10,10,32
+ stvx 27,11,1
+ addi 11,11,32
+ stvx 28,10,1
+ addi 10,10,32
+ stvx 29,11,1
+ addi 11,11,32
+ stvx 30,10,1
+ stvx 31,11,1
+ li 0,-1
+ stw 12,396(1)
+ li 8,0x10
+ std 26,400(1)
+ li 26,0x20
+ std 27,408(1)
+ li 27,0x30
+ std 28,416(1)
+ li 28,0x40
+ std 29,424(1)
+ li 29,0x50
+ std 30,432(1)
+ li 30,0x60
+ std 31,440(1)
+ li 31,0x70
+ or 0,0,0
+
+ subi 9,9,3
+
+ lvx 23,0,6
+ lvx 30,8,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,10
+ addi 11,1,64+15
+ mtctr 9
+
+.Load_ctr32_enc_key:
+ vperm 24,30,31,10
+ lvx 30,8,6
+ addi 6,6,0x20
+ stvx 24,0,11
+ vperm 25,31,30,10
+ lvx 31,0,6
+ stvx 25,8,11
+ addi 11,11,0x20
+ bdnz .Load_ctr32_enc_key
+
+ lvx 26,8,6
+ vperm 24,30,31,10
+ lvx 27,26,6
+ stvx 24,0,11
+ vperm 25,31,26,10
+ lvx 28,27,6
+ stvx 25,8,11
+ addi 11,1,64+15
+ vperm 26,26,27,10
+ lvx 29,28,6
+ vperm 27,27,28,10
+ lvx 30,29,6
+ vperm 28,28,29,10
+ lvx 31,30,6
+ vperm 29,29,30,10
+ lvx 15,31,6
+ vperm 30,30,31,10
+ lvx 24,0,11
+ vperm 31,31,15,10
+ lvx 25,8,11
+
+ vadduwm 7,11,11
+ subi 3,3,15
+ sldi 5,5,4
+
+ vadduwm 16,4,11
+ vadduwm 17,4,7
+ vxor 15,4,23
+
+ vadduwm 18,16,7
+ vxor 16,16,23
+
+ vadduwm 19,17,7
+ vxor 17,17,23
+
+ vadduwm 20,18,7
+ vxor 18,18,23
+
+ vadduwm 21,19,7
+ vxor 19,19,23
+ vadduwm 22,20,7
+ vxor 20,20,23
+ vadduwm 4,21,7
+ vxor 21,21,23
+ vxor 22,22,23
+
+ mtctr 9
+ b .Loop_ctr32_enc8x
+.align 5
+.Loop_ctr32_enc8x:
+ .long 0x11EFC508
+ .long 0x1210C508
+ .long 0x1231C508
+ .long 0x1252C508
+ .long 0x1273C508
+ .long 0x1294C508
+ .long 0x12B5C508
+ .long 0x12D6C508
+.Loop_ctr32_enc8x_middle:
+ lvx 24,26,11
+ addi 11,11,0x20
+
+ .long 0x11EFCD08
+ .long 0x1210CD08
+ .long 0x1231CD08
+ .long 0x1252CD08
+ .long 0x1273CD08
+ .long 0x1294CD08
+ .long 0x12B5CD08
+ .long 0x12D6CD08
+ lvx 25,8,11
+ bdnz .Loop_ctr32_enc8x
+
+ subic 11,5,256
+ .long 0x11EFC508
+ .long 0x1210C508
+ .long 0x1231C508
+ .long 0x1252C508
+ .long 0x1273C508
+ .long 0x1294C508
+ .long 0x12B5C508
+ .long 0x12D6C508
+
+ subfe 0,0,0
+ .long 0x11EFCD08
+ .long 0x1210CD08
+ .long 0x1231CD08
+ .long 0x1252CD08
+ .long 0x1273CD08
+ .long 0x1294CD08
+ .long 0x12B5CD08
+ .long 0x12D6CD08
+
+ and 0,0,11
+ addi 11,1,64+15
+ .long 0x11EFD508
+ .long 0x1210D508
+ .long 0x1231D508
+ .long 0x1252D508
+ .long 0x1273D508
+ .long 0x1294D508
+ .long 0x12B5D508
+ .long 0x12D6D508
+ lvx 24,0,11
+
+ subic 5,5,129
+ .long 0x11EFDD08
+ addi 5,5,1
+ .long 0x1210DD08
+ .long 0x1231DD08
+ .long 0x1252DD08
+ .long 0x1273DD08
+ .long 0x1294DD08
+ .long 0x12B5DD08
+ .long 0x12D6DD08
+ lvx 25,8,11
+
+ .long 0x11EFE508
+ .long 0x7C001E99
+ .long 0x1210E508
+ .long 0x7C281E99
+ .long 0x1231E508
+ .long 0x7C5A1E99
+ .long 0x1252E508
+ .long 0x7C7B1E99
+ .long 0x1273E508
+ .long 0x7D5C1E99
+ .long 0x1294E508
+ .long 0x7D9D1E99
+ .long 0x12B5E508
+ .long 0x7DBE1E99
+ .long 0x12D6E508
+ .long 0x7DDF1E99
+ addi 3,3,0x80
+
+ .long 0x11EFED08
+
+ .long 0x1210ED08
+
+ .long 0x1231ED08
+
+ .long 0x1252ED08
+
+ .long 0x1273ED08
+
+ .long 0x1294ED08
+
+ .long 0x12B5ED08
+
+ .long 0x12D6ED08
+
+
+ add 3,3,0
+
+
+
+ subfe. 0,0,0
+ .long 0x11EFF508
+ vxor 0,0,31
+ .long 0x1210F508
+ vxor 1,1,31
+ .long 0x1231F508
+ vxor 2,2,31
+ .long 0x1252F508
+ vxor 3,3,31
+ .long 0x1273F508
+ vxor 10,10,31
+ .long 0x1294F508
+ vxor 12,12,31
+ .long 0x12B5F508
+ vxor 13,13,31
+ .long 0x12D6F508
+ vxor 14,14,31
+
+ bne .Lctr32_enc8x_break
+
+ .long 0x100F0509
+ .long 0x10300D09
+ vadduwm 16,4,11
+ .long 0x10511509
+ vadduwm 17,4,7
+ vxor 15,4,23
+ .long 0x10721D09
+ vadduwm 18,16,7
+ vxor 16,16,23
+ .long 0x11535509
+ vadduwm 19,17,7
+ vxor 17,17,23
+ .long 0x11946509
+ vadduwm 20,18,7
+ vxor 18,18,23
+ .long 0x11B56D09
+ vadduwm 21,19,7
+ vxor 19,19,23
+ .long 0x11D67509
+ vadduwm 22,20,7
+ vxor 20,20,23
+
+ vadduwm 4,21,7
+ vxor 21,21,23
+
+ vxor 22,22,23
+ mtctr 9
+
+ .long 0x11EFC508
+ .long 0x7C002799
+
+ .long 0x1210C508
+ .long 0x7C282799
+
+ .long 0x1231C508
+ .long 0x7C5A2799
+
+ .long 0x1252C508
+ .long 0x7C7B2799
+
+ .long 0x1273C508
+ .long 0x7D5C2799
+
+ .long 0x1294C508
+ .long 0x7D9D2799
+
+ .long 0x12B5C508
+ .long 0x7DBE2799
+ .long 0x12D6C508
+ .long 0x7DDF2799
+ addi 4,4,0x80
+
+ b .Loop_ctr32_enc8x_middle
+
+.align 5
+.Lctr32_enc8x_break:
+ cmpwi 5,-0x60
+ blt .Lctr32_enc8x_one
+ nop
+ beq .Lctr32_enc8x_two
+ cmpwi 5,-0x40
+ blt .Lctr32_enc8x_three
+ nop
+ beq .Lctr32_enc8x_four
+ cmpwi 5,-0x20
+ blt .Lctr32_enc8x_five
+ nop
+ beq .Lctr32_enc8x_six
+ cmpwi 5,0x00
+ blt .Lctr32_enc8x_seven
+
+.Lctr32_enc8x_eight:
+ .long 0x11EF0509
+ .long 0x12100D09
+ .long 0x12311509
+ .long 0x12521D09
+ .long 0x12735509
+ .long 0x12946509
+ .long 0x12B56D09
+ .long 0x12D67509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+
+ .long 0x7E9D2799
+
+ .long 0x7EBE2799
+ .long 0x7EDF2799
+ addi 4,4,0x80
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_seven:
+ .long 0x11EF0D09
+ .long 0x12101509
+ .long 0x12311D09
+ .long 0x12525509
+ .long 0x12736509
+ .long 0x12946D09
+ .long 0x12B57509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+
+ .long 0x7E9D2799
+ .long 0x7EBE2799
+ addi 4,4,0x70
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_six:
+ .long 0x11EF1509
+ .long 0x12101D09
+ .long 0x12315509
+ .long 0x12526509
+ .long 0x12736D09
+ .long 0x12947509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+
+ .long 0x7E7C2799
+ .long 0x7E9D2799
+ addi 4,4,0x60
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_five:
+ .long 0x11EF1D09
+ .long 0x12105509
+ .long 0x12316509
+ .long 0x12526D09
+ .long 0x12737509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+
+ .long 0x7E5B2799
+ .long 0x7E7C2799
+ addi 4,4,0x50
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_four:
+ .long 0x11EF5509
+ .long 0x12106509
+ .long 0x12316D09
+ .long 0x12527509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+
+ .long 0x7E3A2799
+ .long 0x7E5B2799
+ addi 4,4,0x40
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_three:
+ .long 0x11EF6509
+ .long 0x12106D09
+ .long 0x12317509
+
+
+
+ .long 0x7DE02799
+
+ .long 0x7E082799
+ .long 0x7E3A2799
+ addi 4,4,0x30
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_two:
+ .long 0x11EF6D09
+ .long 0x12107509
+
+
+
+ .long 0x7DE02799
+ .long 0x7E082799
+ addi 4,4,0x20
+ b .Lctr32_enc8x_done
+
+.align 5
+.Lctr32_enc8x_one:
+ .long 0x11EF7509
+
+
+ .long 0x7DE02799
+ addi 4,4,0x10
+
+.Lctr32_enc8x_done:
+ li 10,79
+ li 11,95
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+ stvx 6,10,1
+ addi 10,10,32
+ stvx 6,11,1
+ addi 11,11,32
+
+ or 12,12,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ ld 26,400(1)
+ ld 27,408(1)
+ ld 28,416(1)
+ ld 29,424(1)
+ ld 30,432(1)
+ ld 31,440(1)
+ addi 1,1,448
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_ctr32_encrypt_blocks,.-aes_p8_ctr32_encrypt_blocks
+.globl aes_p8_xts_encrypt
+.type aes_p8_xts_encrypt,@function
+.align 5
+aes_p8_xts_encrypt:
+.localentry aes_p8_xts_encrypt,0
+
+ mr 10,3
+ li 3,-1
+ cmpldi 5,16
+ .long 0x4dc00020
+
+ lis 0,0xfff0
+ li 12,-1
+ li 11,0
+ or 0,0,0
+
+ vspltisb 9,0x07
+
+
+
+
+ li 3,15
+ lvx 8,0,8
+ lvsl 5,0,8
+ lvx 4,3,8
+
+ vperm 8,8,4,5
+
+ neg 11,10
+ lvsr 5,0,11
+ lvx 2,0,10
+ addi 10,10,15
+
+
+ cmpldi 7,0
+ beq .Lxts_enc_no_key2
+
+ lvsl 7,0,7
+ lwz 9,240(7)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ lvx 0,0,7
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ vxor 8,8,0
+ lvx 0,3,7
+ addi 3,3,16
+ mtctr 9
+
+.Ltweak_xts_enc:
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x11080508
+ lvx 0,3,7
+ addi 3,3,16
+ bdnz .Ltweak_xts_enc
+
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ vperm 0,0,1,7
+ .long 0x11080509
+
+ li 8,0
+ b .Lxts_enc
+
+.Lxts_enc_no_key2:
+ li 3,-16
+ and 5,5,3
+
+
+.Lxts_enc:
+ lvx 4,0,10
+ addi 10,10,16
+
+ lvsl 7,0,6
+ lwz 9,240(6)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ vslb 10,9,9
+ vor 10,10,9
+ vspltisb 11,1
+ vsldoi 10,10,11,15
+
+ cmpldi 5,96
+ bge _aesp8_xts_encrypt6x
+
+ andi. 7,5,15
+ subic 0,5,32
+ subi 7,7,16
+ subfe 0,0,0
+ and 0,0,7
+ add 10,10,0
+
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+ mtctr 9
+ b .Loop_xts_enc
+
+.align 5
+.Loop_xts_enc:
+ vperm 1,1,0,7
+ .long 0x10420D08
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x10420508
+ lvx 0,3,6
+ addi 3,3,16
+ bdnz .Loop_xts_enc
+
+ vperm 1,1,0,7
+ .long 0x10420D08
+ lvx 1,3,6
+ li 3,16
+ vperm 0,0,1,7
+ vxor 0,0,8
+ .long 0x10620509
+
+
+ nop
+
+ .long 0x7C602799
+ addi 4,4,16
+
+ subic. 5,5,16
+ beq .Lxts_enc_done
+
+ vor 2,4,4
+ lvx 4,0,10
+ addi 10,10,16
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+
+ subic 0,5,32
+ subfe 0,0,0
+ and 0,0,7
+ add 10,10,0
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 3,3,0
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+
+ mtctr 9
+ cmpldi 5,16
+ bge .Loop_xts_enc
+
+ vxor 3,3,8
+ lvsr 5,0,5
+ vxor 4,4,4
+ vspltisb 11,-1
+ vperm 4,4,11,5
+ vsel 2,2,3,4
+
+ subi 11,4,17
+ subi 4,4,16
+ mtctr 5
+ li 5,16
+.Loop_xts_enc_steal:
+ lbzu 0,1(11)
+ stb 0,16(11)
+ bdnz .Loop_xts_enc_steal
+
+ mtctr 9
+ b .Loop_xts_enc
+
+.Lxts_enc_done:
+ cmpldi 8,0
+ beq .Lxts_enc_ret
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+
+ .long 0x7D004799
+
+.Lxts_enc_ret:
+ or 12,12,12
+ li 3,0
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_xts_encrypt,.-aes_p8_xts_encrypt
+
+.globl aes_p8_xts_decrypt
+.type aes_p8_xts_decrypt,@function
+.align 5
+aes_p8_xts_decrypt:
+.localentry aes_p8_xts_decrypt,0
+
+ mr 10,3
+ li 3,-1
+ cmpldi 5,16
+ .long 0x4dc00020
+
+ lis 0,0xfff8
+ li 12,-1
+ li 11,0
+ or 0,0,0
+
+ andi. 0,5,15
+ neg 0,0
+ andi. 0,0,16
+ sub 5,5,0
+
+ vspltisb 9,0x07
+
+
+
+
+ li 3,15
+ lvx 8,0,8
+ lvsl 5,0,8
+ lvx 4,3,8
+
+ vperm 8,8,4,5
+
+ neg 11,10
+ lvsr 5,0,11
+ lvx 2,0,10
+ addi 10,10,15
+
+
+ cmpldi 7,0
+ beq .Lxts_dec_no_key2
+
+ lvsl 7,0,7
+ lwz 9,240(7)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ lvx 0,0,7
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ vxor 8,8,0
+ lvx 0,3,7
+ addi 3,3,16
+ mtctr 9
+
+.Ltweak_xts_dec:
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x11080508
+ lvx 0,3,7
+ addi 3,3,16
+ bdnz .Ltweak_xts_dec
+
+ vperm 1,1,0,7
+ .long 0x11080D08
+ lvx 1,3,7
+ vperm 0,0,1,7
+ .long 0x11080509
+
+ li 8,0
+ b .Lxts_dec
+
+.Lxts_dec_no_key2:
+ neg 3,5
+ andi. 3,3,15
+ add 5,5,3
+
+
+.Lxts_dec:
+ lvx 4,0,10
+ addi 10,10,16
+
+ lvsl 7,0,6
+ lwz 9,240(6)
+ srwi 9,9,1
+ subi 9,9,1
+ li 3,16
+
+ vslb 10,9,9
+ vor 10,10,9
+ vspltisb 11,1
+ vsldoi 10,10,11,15
+
+ cmpldi 5,96
+ bge _aesp8_xts_decrypt6x
+
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+ mtctr 9
+
+ cmpldi 5,16
+ blt .Ltail_xts_dec
+ b .Loop_xts_dec
+
+.align 5
+.Loop_xts_dec:
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x10420548
+ lvx 0,3,6
+ addi 3,3,16
+ bdnz .Loop_xts_dec
+
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ li 3,16
+ vperm 0,0,1,7
+ vxor 0,0,8
+ .long 0x10620549
+
+
+ nop
+
+ .long 0x7C602799
+ addi 4,4,16
+
+ subic. 5,5,16
+ beq .Lxts_dec_done
+
+ vor 2,4,4
+ lvx 4,0,10
+ addi 10,10,16
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+ vxor 2,2,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+
+ mtctr 9
+ cmpldi 5,16
+ bge .Loop_xts_dec
+
+.Ltail_xts_dec:
+ vsrab 11,8,9
+ vaddubm 12,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 12,12,11
+
+ subi 10,10,16
+ add 10,10,5
+
+ vxor 2,2,8
+ vxor 2,2,12
+
+.Loop_xts_dec_short:
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 0,0,1,7
+ .long 0x10420548
+ lvx 0,3,6
+ addi 3,3,16
+ bdnz .Loop_xts_dec_short
+
+ vperm 1,1,0,7
+ .long 0x10420D48
+ lvx 1,3,6
+ li 3,16
+ vperm 0,0,1,7
+ vxor 0,0,12
+ .long 0x10620549
+
+
+ nop
+
+ .long 0x7C602799
+
+ vor 2,4,4
+ lvx 4,0,10
+
+ lvx 0,0,6
+ lvx 1,3,6
+ addi 3,3,16
+ vperm 2,2,4,5
+ vperm 0,0,1,7
+
+ lvsr 5,0,5
+ vxor 4,4,4
+ vspltisb 11,-1
+ vperm 4,4,11,5
+ vsel 2,2,3,4
+
+ vxor 0,0,8
+ vxor 2,2,0
+ lvx 0,3,6
+ addi 3,3,16
+
+ subi 11,4,1
+ mtctr 5
+ li 5,16
+.Loop_xts_dec_steal:
+ lbzu 0,1(11)
+ stb 0,16(11)
+ bdnz .Loop_xts_dec_steal
+
+ mtctr 9
+ b .Loop_xts_dec
+
+.Lxts_dec_done:
+ cmpldi 8,0
+ beq .Lxts_dec_ret
+
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 8,8,11
+
+
+ .long 0x7D004799
+
+.Lxts_dec_ret:
+ or 12,12,12
+ li 3,0
+ blr
+.long 0
+.byte 0,12,0x04,0,0x80,6,6,0
+.long 0
+.size aes_p8_xts_decrypt,.-aes_p8_xts_decrypt
+.align 5
+_aesp8_xts_encrypt6x:
+ stdu 1,-448(1)
+ mflr 11
+ li 7,207
+ li 3,223
+ std 11,464(1)
+ stvx 20,7,1
+ addi 7,7,32
+ stvx 21,3,1
+ addi 3,3,32
+ stvx 22,7,1
+ addi 7,7,32
+ stvx 23,3,1
+ addi 3,3,32
+ stvx 24,7,1
+ addi 7,7,32
+ stvx 25,3,1
+ addi 3,3,32
+ stvx 26,7,1
+ addi 7,7,32
+ stvx 27,3,1
+ addi 3,3,32
+ stvx 28,7,1
+ addi 7,7,32
+ stvx 29,3,1
+ addi 3,3,32
+ stvx 30,7,1
+ stvx 31,3,1
+ li 0,-1
+ stw 12,396(1)
+ li 3,0x10
+ std 26,400(1)
+ li 26,0x20
+ std 27,408(1)
+ li 27,0x30
+ std 28,416(1)
+ li 28,0x40
+ std 29,424(1)
+ li 29,0x50
+ std 30,432(1)
+ li 30,0x60
+ std 31,440(1)
+ li 31,0x70
+ or 0,0,0
+
+ subi 9,9,3
+
+ lvx 23,0,6
+ lvx 30,3,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,7
+ addi 7,1,64+15
+ mtctr 9
+
+.Load_xts_enc_key:
+ vperm 24,30,31,7
+ lvx 30,3,6
+ addi 6,6,0x20
+ stvx 24,0,7
+ vperm 25,31,30,7
+ lvx 31,0,6
+ stvx 25,3,7
+ addi 7,7,0x20
+ bdnz .Load_xts_enc_key
+
+ lvx 26,3,6
+ vperm 24,30,31,7
+ lvx 27,26,6
+ stvx 24,0,7
+ vperm 25,31,26,7
+ lvx 28,27,6
+ stvx 25,3,7
+ addi 7,1,64+15
+ vperm 26,26,27,7
+ lvx 29,28,6
+ vperm 27,27,28,7
+ lvx 30,29,6
+ vperm 28,28,29,7
+ lvx 31,30,6
+ vperm 29,29,30,7
+ lvx 22,31,6
+ vperm 30,30,31,7
+ lvx 24,0,7
+ vperm 31,31,22,7
+ lvx 25,3,7
+
+ vperm 0,2,4,5
+ subi 10,10,31
+ vxor 17,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 7,0,17
+ vxor 8,8,11
+
+ .long 0x7C235699
+ vxor 18,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 12,1,18
+ vxor 8,8,11
+
+ .long 0x7C5A5699
+ andi. 31,5,15
+ vxor 19,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 13,2,19
+ vxor 8,8,11
+
+ .long 0x7C7B5699
+ sub 5,5,31
+ vxor 20,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 14,3,20
+ vxor 8,8,11
+
+ .long 0x7C9C5699
+ subi 5,5,0x60
+ vxor 21,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 15,4,21
+ vxor 8,8,11
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+ vxor 22,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 16,5,22
+ vxor 8,8,11
+
+ vxor 31,31,23
+ mtctr 9
+ b .Loop_xts_enc6x
+
+.align 5
+.Loop_xts_enc6x:
+ .long 0x10E7C508
+ .long 0x118CC508
+ .long 0x11ADC508
+ .long 0x11CEC508
+ .long 0x11EFC508
+ .long 0x1210C508
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ .long 0x11EFCD08
+ .long 0x1210CD08
+ lvx 25,3,7
+ bdnz .Loop_xts_enc6x
+
+ subic 5,5,96
+ vxor 0,17,31
+ .long 0x10E7C508
+ .long 0x118CC508
+ vsrab 11,8,9
+ vxor 17,8,23
+ vaddubm 8,8,8
+ .long 0x11ADC508
+ .long 0x11CEC508
+ vsldoi 11,11,11,15
+ .long 0x11EFC508
+ .long 0x1210C508
+
+ subfe. 0,0,0
+ vand 11,11,10
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ vxor 8,8,11
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ vxor 1,18,31
+ vsrab 11,8,9
+ vxor 18,8,23
+ .long 0x11EFCD08
+ .long 0x1210CD08
+
+ and 0,0,5
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x10E7D508
+ .long 0x118CD508
+ vand 11,11,10
+ .long 0x11ADD508
+ .long 0x11CED508
+ vxor 8,8,11
+ .long 0x11EFD508
+ .long 0x1210D508
+
+ add 10,10,0
+
+
+
+ vxor 2,19,31
+ vsrab 11,8,9
+ vxor 19,8,23
+ vaddubm 8,8,8
+ .long 0x10E7DD08
+ .long 0x118CDD08
+ vsldoi 11,11,11,15
+ .long 0x11ADDD08
+ .long 0x11CEDD08
+ vand 11,11,10
+ .long 0x11EFDD08
+ .long 0x1210DD08
+
+ addi 7,1,64+15
+ vxor 8,8,11
+ .long 0x10E7E508
+ .long 0x118CE508
+ vxor 3,20,31
+ vsrab 11,8,9
+ vxor 20,8,23
+ .long 0x11ADE508
+ .long 0x11CEE508
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x11EFE508
+ .long 0x1210E508
+ lvx 24,0,7
+ vand 11,11,10
+
+ .long 0x10E7ED08
+ .long 0x118CED08
+ vxor 8,8,11
+ .long 0x11ADED08
+ .long 0x11CEED08
+ vxor 4,21,31
+ vsrab 11,8,9
+ vxor 21,8,23
+ .long 0x11EFED08
+ .long 0x1210ED08
+ lvx 25,3,7
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ .long 0x10E7F508
+ .long 0x118CF508
+ vand 11,11,10
+ .long 0x11ADF508
+ .long 0x11CEF508
+ vxor 8,8,11
+ .long 0x11EFF508
+ .long 0x1210F508
+ vxor 5,22,31
+ vsrab 11,8,9
+ vxor 22,8,23
+
+ .long 0x10E70509
+ .long 0x7C005699
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x118C0D09
+ .long 0x7C235699
+ .long 0x11AD1509
+
+ .long 0x7C5A5699
+ vand 11,11,10
+ .long 0x11CE1D09
+
+ .long 0x7C7B5699
+ .long 0x11EF2509
+
+ .long 0x7C9C5699
+ vxor 8,8,11
+ .long 0x11702D09
+
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+
+
+
+
+
+ .long 0x7CE02799
+ vxor 7,0,17
+
+ .long 0x7D832799
+ vxor 12,1,18
+
+ .long 0x7DBA2799
+ vxor 13,2,19
+
+ .long 0x7DDB2799
+ vxor 14,3,20
+
+ .long 0x7DFC2799
+ vxor 15,4,21
+
+ .long 0x7D7D2799
+ vxor 16,5,22
+ addi 4,4,0x60
+
+ mtctr 9
+ beq .Loop_xts_enc6x
+
+ addic. 5,5,0x60
+ beq .Lxts_enc6x_zero
+ cmpwi 5,0x20
+ blt .Lxts_enc6x_one
+ nop
+ beq .Lxts_enc6x_two
+ cmpwi 5,0x40
+ blt .Lxts_enc6x_three
+ nop
+ beq .Lxts_enc6x_four
+
+.Lxts_enc6x_five:
+ vxor 7,1,17
+ vxor 12,2,18
+ vxor 13,3,19
+ vxor 14,4,20
+ vxor 15,5,21
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,22,22
+
+ .long 0x7CE02799
+
+ .long 0x7D832799
+
+ .long 0x7DBA2799
+ vxor 11,15,22
+
+ .long 0x7DDB2799
+ .long 0x7DFC2799
+ addi 4,4,0x50
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_four:
+ vxor 7,2,17
+ vxor 12,3,18
+ vxor 13,4,19
+ vxor 14,5,20
+ vxor 15,15,15
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,21,21
+
+ .long 0x7CE02799
+
+ .long 0x7D832799
+ vxor 11,14,21
+
+ .long 0x7DBA2799
+ .long 0x7DDB2799
+ addi 4,4,0x40
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_three:
+ vxor 7,3,17
+ vxor 12,4,18
+ vxor 13,5,19
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,20,20
+
+ .long 0x7CE02799
+ vxor 11,13,20
+
+ .long 0x7D832799
+ .long 0x7DBA2799
+ addi 4,4,0x30
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_two:
+ vxor 7,4,17
+ vxor 12,5,18
+ vxor 13,13,13
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_enc5x
+
+
+ vor 17,19,19
+ vxor 11,12,19
+
+ .long 0x7CE02799
+ .long 0x7D832799
+ addi 4,4,0x20
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_one:
+ vxor 7,5,17
+ nop
+.Loop_xts_enc1x:
+ .long 0x10E7C508
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD08
+ lvx 25,3,7
+ bdnz .Loop_xts_enc1x
+
+ add 10,10,31
+ cmpwi 31,0
+ .long 0x10E7C508
+
+ subi 10,10,16
+ .long 0x10E7CD08
+
+ lvsr 5,0,31
+ .long 0x10E7D508
+
+ .long 0x7C005699
+ .long 0x10E7DD08
+
+ addi 7,1,64+15
+ .long 0x10E7E508
+ lvx 24,0,7
+
+ .long 0x10E7ED08
+ lvx 25,3,7
+ vxor 17,17,31
+
+
+ .long 0x10E7F508
+
+ vperm 0,0,0,5
+ .long 0x10E78D09
+
+ vor 17,18,18
+ vxor 11,7,18
+
+ .long 0x7CE02799
+ addi 4,4,0x10
+ bne .Lxts_enc6x_steal
+ b .Lxts_enc6x_done
+
+.align 4
+.Lxts_enc6x_zero:
+ cmpwi 31,0
+ beq .Lxts_enc6x_done
+
+ add 10,10,31
+ subi 10,10,16
+ .long 0x7C005699
+ lvsr 5,0,31
+
+ vperm 0,0,0,5
+ vxor 11,11,17
+.Lxts_enc6x_steal:
+ vxor 0,0,17
+ vxor 7,7,7
+ vspltisb 12,-1
+ vperm 7,7,12,5
+ vsel 7,0,11,7
+
+ subi 30,4,17
+ subi 4,4,16
+ mtctr 31
+.Loop_xts_enc6x_steal:
+ lbzu 0,1(30)
+ stb 0,16(30)
+ bdnz .Loop_xts_enc6x_steal
+
+ li 31,0
+ mtctr 9
+ b .Loop_xts_enc1x
+
+.align 4
+.Lxts_enc6x_done:
+ cmpldi 8,0
+ beq .Lxts_enc6x_ret
+
+ vxor 8,17,23
+
+ .long 0x7D004799
+
+.Lxts_enc6x_ret:
+ mtlr 11
+ li 10,79
+ li 11,95
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+
+ or 12,12,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ ld 26,400(1)
+ ld 27,408(1)
+ ld 28,416(1)
+ ld 29,424(1)
+ ld 30,432(1)
+ ld 31,440(1)
+ addi 1,1,448
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,6,6,0
+.long 0
+
+.align 5
+_aesp8_xts_enc5x:
+ .long 0x10E7C508
+ .long 0x118CC508
+ .long 0x11ADC508
+ .long 0x11CEC508
+ .long 0x11EFC508
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ .long 0x11EFCD08
+ lvx 25,3,7
+ bdnz _aesp8_xts_enc5x
+
+ add 10,10,31
+ cmpwi 31,0
+ .long 0x10E7C508
+ .long 0x118CC508
+ .long 0x11ADC508
+ .long 0x11CEC508
+ .long 0x11EFC508
+
+ subi 10,10,16
+ .long 0x10E7CD08
+ .long 0x118CCD08
+ .long 0x11ADCD08
+ .long 0x11CECD08
+ .long 0x11EFCD08
+ vxor 17,17,31
+
+ .long 0x10E7D508
+ lvsr 5,0,31
+ .long 0x118CD508
+ .long 0x11ADD508
+ .long 0x11CED508
+ .long 0x11EFD508
+ vxor 1,18,31
+
+ .long 0x10E7DD08
+ .long 0x7C005699
+ .long 0x118CDD08
+ .long 0x11ADDD08
+ .long 0x11CEDD08
+ .long 0x11EFDD08
+ vxor 2,19,31
+
+ addi 7,1,64+15
+ .long 0x10E7E508
+ .long 0x118CE508
+ .long 0x11ADE508
+ .long 0x11CEE508
+ .long 0x11EFE508
+ lvx 24,0,7
+ vxor 3,20,31
+
+ .long 0x10E7ED08
+
+ .long 0x118CED08
+ .long 0x11ADED08
+ .long 0x11CEED08
+ .long 0x11EFED08
+ lvx 25,3,7
+ vxor 4,21,31
+
+ .long 0x10E7F508
+ vperm 0,0,0,5
+ .long 0x118CF508
+ .long 0x11ADF508
+ .long 0x11CEF508
+ .long 0x11EFF508
+
+ .long 0x10E78D09
+ .long 0x118C0D09
+ .long 0x11AD1509
+ .long 0x11CE1D09
+ .long 0x11EF2509
+ blr
+.long 0
+.byte 0,12,0x14,0,0,0,0,0
+
+.align 5
+_aesp8_xts_decrypt6x:
+ stdu 1,-448(1)
+ mflr 11
+ li 7,207
+ li 3,223
+ std 11,464(1)
+ stvx 20,7,1
+ addi 7,7,32
+ stvx 21,3,1
+ addi 3,3,32
+ stvx 22,7,1
+ addi 7,7,32
+ stvx 23,3,1
+ addi 3,3,32
+ stvx 24,7,1
+ addi 7,7,32
+ stvx 25,3,1
+ addi 3,3,32
+ stvx 26,7,1
+ addi 7,7,32
+ stvx 27,3,1
+ addi 3,3,32
+ stvx 28,7,1
+ addi 7,7,32
+ stvx 29,3,1
+ addi 3,3,32
+ stvx 30,7,1
+ stvx 31,3,1
+ li 0,-1
+ stw 12,396(1)
+ li 3,0x10
+ std 26,400(1)
+ li 26,0x20
+ std 27,408(1)
+ li 27,0x30
+ std 28,416(1)
+ li 28,0x40
+ std 29,424(1)
+ li 29,0x50
+ std 30,432(1)
+ li 30,0x60
+ std 31,440(1)
+ li 31,0x70
+ or 0,0,0
+
+ subi 9,9,3
+
+ lvx 23,0,6
+ lvx 30,3,6
+ addi 6,6,0x20
+ lvx 31,0,6
+ vperm 23,23,30,7
+ addi 7,1,64+15
+ mtctr 9
+
+.Load_xts_dec_key:
+ vperm 24,30,31,7
+ lvx 30,3,6
+ addi 6,6,0x20
+ stvx 24,0,7
+ vperm 25,31,30,7
+ lvx 31,0,6
+ stvx 25,3,7
+ addi 7,7,0x20
+ bdnz .Load_xts_dec_key
+
+ lvx 26,3,6
+ vperm 24,30,31,7
+ lvx 27,26,6
+ stvx 24,0,7
+ vperm 25,31,26,7
+ lvx 28,27,6
+ stvx 25,3,7
+ addi 7,1,64+15
+ vperm 26,26,27,7
+ lvx 29,28,6
+ vperm 27,27,28,7
+ lvx 30,29,6
+ vperm 28,28,29,7
+ lvx 31,30,6
+ vperm 29,29,30,7
+ lvx 22,31,6
+ vperm 30,30,31,7
+ lvx 24,0,7
+ vperm 31,31,22,7
+ lvx 25,3,7
+
+ vperm 0,2,4,5
+ subi 10,10,31
+ vxor 17,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ vand 11,11,10
+ vxor 7,0,17
+ vxor 8,8,11
+
+ .long 0x7C235699
+ vxor 18,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 12,1,18
+ vxor 8,8,11
+
+ .long 0x7C5A5699
+ andi. 31,5,15
+ vxor 19,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 13,2,19
+ vxor 8,8,11
+
+ .long 0x7C7B5699
+ sub 5,5,31
+ vxor 20,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 14,3,20
+ vxor 8,8,11
+
+ .long 0x7C9C5699
+ subi 5,5,0x60
+ vxor 21,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 15,4,21
+ vxor 8,8,11
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+ vxor 22,8,23
+ vsrab 11,8,9
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ vand 11,11,10
+ vxor 16,5,22
+ vxor 8,8,11
+
+ vxor 31,31,23
+ mtctr 9
+ b .Loop_xts_dec6x
+
+.align 5
+.Loop_xts_dec6x:
+ .long 0x10E7C548
+ .long 0x118CC548
+ .long 0x11ADC548
+ .long 0x11CEC548
+ .long 0x11EFC548
+ .long 0x1210C548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ .long 0x1210CD48
+ lvx 25,3,7
+ bdnz .Loop_xts_dec6x
+
+ subic 5,5,96
+ vxor 0,17,31
+ .long 0x10E7C548
+ .long 0x118CC548
+ vsrab 11,8,9
+ vxor 17,8,23
+ vaddubm 8,8,8
+ .long 0x11ADC548
+ .long 0x11CEC548
+ vsldoi 11,11,11,15
+ .long 0x11EFC548
+ .long 0x1210C548
+
+ subfe. 0,0,0
+ vand 11,11,10
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ vxor 8,8,11
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ vxor 1,18,31
+ vsrab 11,8,9
+ vxor 18,8,23
+ .long 0x11EFCD48
+ .long 0x1210CD48
+
+ and 0,0,5
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x10E7D548
+ .long 0x118CD548
+ vand 11,11,10
+ .long 0x11ADD548
+ .long 0x11CED548
+ vxor 8,8,11
+ .long 0x11EFD548
+ .long 0x1210D548
+
+ add 10,10,0
+
+
+
+ vxor 2,19,31
+ vsrab 11,8,9
+ vxor 19,8,23
+ vaddubm 8,8,8
+ .long 0x10E7DD48
+ .long 0x118CDD48
+ vsldoi 11,11,11,15
+ .long 0x11ADDD48
+ .long 0x11CEDD48
+ vand 11,11,10
+ .long 0x11EFDD48
+ .long 0x1210DD48
+
+ addi 7,1,64+15
+ vxor 8,8,11
+ .long 0x10E7E548
+ .long 0x118CE548
+ vxor 3,20,31
+ vsrab 11,8,9
+ vxor 20,8,23
+ .long 0x11ADE548
+ .long 0x11CEE548
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x11EFE548
+ .long 0x1210E548
+ lvx 24,0,7
+ vand 11,11,10
+
+ .long 0x10E7ED48
+ .long 0x118CED48
+ vxor 8,8,11
+ .long 0x11ADED48
+ .long 0x11CEED48
+ vxor 4,21,31
+ vsrab 11,8,9
+ vxor 21,8,23
+ .long 0x11EFED48
+ .long 0x1210ED48
+ lvx 25,3,7
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+
+ .long 0x10E7F548
+ .long 0x118CF548
+ vand 11,11,10
+ .long 0x11ADF548
+ .long 0x11CEF548
+ vxor 8,8,11
+ .long 0x11EFF548
+ .long 0x1210F548
+ vxor 5,22,31
+ vsrab 11,8,9
+ vxor 22,8,23
+
+ .long 0x10E70549
+ .long 0x7C005699
+ vaddubm 8,8,8
+ vsldoi 11,11,11,15
+ .long 0x118C0D49
+ .long 0x7C235699
+ .long 0x11AD1549
+
+ .long 0x7C5A5699
+ vand 11,11,10
+ .long 0x11CE1D49
+
+ .long 0x7C7B5699
+ .long 0x11EF2549
+
+ .long 0x7C9C5699
+ vxor 8,8,11
+ .long 0x12102D49
+
+ .long 0x7CBD5699
+ addi 10,10,0x60
+
+
+
+
+
+ .long 0x7CE02799
+ vxor 7,0,17
+
+ .long 0x7D832799
+ vxor 12,1,18
+
+ .long 0x7DBA2799
+ vxor 13,2,19
+
+ .long 0x7DDB2799
+ vxor 14,3,20
+
+ .long 0x7DFC2799
+ vxor 15,4,21
+ .long 0x7E1D2799
+ vxor 16,5,22
+ addi 4,4,0x60
+
+ mtctr 9
+ beq .Loop_xts_dec6x
+
+ addic. 5,5,0x60
+ beq .Lxts_dec6x_zero
+ cmpwi 5,0x20
+ blt .Lxts_dec6x_one
+ nop
+ beq .Lxts_dec6x_two
+ cmpwi 5,0x40
+ blt .Lxts_dec6x_three
+ nop
+ beq .Lxts_dec6x_four
+
+.Lxts_dec6x_five:
+ vxor 7,1,17
+ vxor 12,2,18
+ vxor 13,3,19
+ vxor 14,4,20
+ vxor 15,5,21
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,22,22
+ vxor 18,8,23
+
+ .long 0x7CE02799
+ vxor 7,0,18
+
+ .long 0x7D832799
+
+ .long 0x7DBA2799
+
+ .long 0x7DDB2799
+ .long 0x7DFC2799
+ addi 4,4,0x50
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_four:
+ vxor 7,2,17
+ vxor 12,3,18
+ vxor 13,4,19
+ vxor 14,5,20
+ vxor 15,15,15
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,21,21
+ vor 18,22,22
+
+ .long 0x7CE02799
+ vxor 7,0,22
+
+ .long 0x7D832799
+
+ .long 0x7DBA2799
+ .long 0x7DDB2799
+ addi 4,4,0x40
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_three:
+ vxor 7,3,17
+ vxor 12,4,18
+ vxor 13,5,19
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,20,20
+ vor 18,21,21
+
+ .long 0x7CE02799
+ vxor 7,0,21
+
+ .long 0x7D832799
+ .long 0x7DBA2799
+ addi 4,4,0x30
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_two:
+ vxor 7,4,17
+ vxor 12,5,18
+ vxor 13,13,13
+ vxor 14,14,14
+ vxor 15,15,15
+
+ bl _aesp8_xts_dec5x
+
+
+ vor 17,19,19
+ vor 18,20,20
+
+ .long 0x7CE02799
+ vxor 7,0,20
+ .long 0x7D832799
+ addi 4,4,0x20
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_one:
+ vxor 7,5,17
+ nop
+.Loop_xts_dec1x:
+ .long 0x10E7C548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ lvx 25,3,7
+ bdnz .Loop_xts_dec1x
+
+ subi 0,31,1
+ .long 0x10E7C548
+
+ andi. 0,0,16
+ cmpwi 31,0
+ .long 0x10E7CD48
+
+ sub 10,10,0
+ .long 0x10E7D548
+
+ .long 0x7C005699
+ .long 0x10E7DD48
+
+ addi 7,1,64+15
+ .long 0x10E7E548
+ lvx 24,0,7
+
+ .long 0x10E7ED48
+ lvx 25,3,7
+ vxor 17,17,31
+
+
+ .long 0x10E7F548
+
+ mtctr 9
+ .long 0x10E78D49
+
+ vor 17,18,18
+ vor 18,19,19
+
+ .long 0x7CE02799
+ addi 4,4,0x10
+ vxor 7,0,19
+ bne .Lxts_dec6x_steal
+ b .Lxts_dec6x_done
+
+.align 4
+.Lxts_dec6x_zero:
+ cmpwi 31,0
+ beq .Lxts_dec6x_done
+
+ .long 0x7C005699
+
+ vxor 7,0,18
+.Lxts_dec6x_steal:
+ .long 0x10E7C548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ lvx 25,3,7
+ bdnz .Lxts_dec6x_steal
+
+ add 10,10,31
+ .long 0x10E7C548
+
+ cmpwi 31,0
+ .long 0x10E7CD48
+
+ .long 0x7C005699
+ .long 0x10E7D548
+
+ lvsr 5,0,31
+ .long 0x10E7DD48
+
+ addi 7,1,64+15
+ .long 0x10E7E548
+ lvx 24,0,7
+
+ .long 0x10E7ED48
+ lvx 25,3,7
+ vxor 18,18,31
+
+
+ .long 0x10E7F548
+
+ vperm 0,0,0,5
+ .long 0x11679549
+
+
+
+ .long 0x7D602799
+
+ vxor 7,7,7
+ vspltisb 12,-1
+ vperm 7,7,12,5
+ vsel 7,0,11,7
+ vxor 7,7,17
+
+ subi 30,4,1
+ mtctr 31
+.Loop_xts_dec6x_steal:
+ lbzu 0,1(30)
+ stb 0,16(30)
+ bdnz .Loop_xts_dec6x_steal
+
+ li 31,0
+ mtctr 9
+ b .Loop_xts_dec1x
+
+.align 4
+.Lxts_dec6x_done:
+ cmpldi 8,0
+ beq .Lxts_dec6x_ret
+
+ vxor 8,17,23
+
+ .long 0x7D004799
+
+.Lxts_dec6x_ret:
+ mtlr 11
+ li 10,79
+ li 11,95
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+ stvx 9,10,1
+ addi 10,10,32
+ stvx 9,11,1
+ addi 11,11,32
+
+ or 12,12,12
+ lvx 20,10,1
+ addi 10,10,32
+ lvx 21,11,1
+ addi 11,11,32
+ lvx 22,10,1
+ addi 10,10,32
+ lvx 23,11,1
+ addi 11,11,32
+ lvx 24,10,1
+ addi 10,10,32
+ lvx 25,11,1
+ addi 11,11,32
+ lvx 26,10,1
+ addi 10,10,32
+ lvx 27,11,1
+ addi 11,11,32
+ lvx 28,10,1
+ addi 10,10,32
+ lvx 29,11,1
+ addi 11,11,32
+ lvx 30,10,1
+ lvx 31,11,1
+ ld 26,400(1)
+ ld 27,408(1)
+ ld 28,416(1)
+ ld 29,424(1)
+ ld 30,432(1)
+ ld 31,440(1)
+ addi 1,1,448
+ blr
+.long 0
+.byte 0,12,0x04,1,0x80,6,6,0
+.long 0
+
+.align 5
+_aesp8_xts_dec5x:
+ .long 0x10E7C548
+ .long 0x118CC548
+ .long 0x11ADC548
+ .long 0x11CEC548
+ .long 0x11EFC548
+ lvx 24,26,7
+ addi 7,7,0x20
+
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ lvx 25,3,7
+ bdnz _aesp8_xts_dec5x
+
+ subi 0,31,1
+ .long 0x10E7C548
+ .long 0x118CC548
+ .long 0x11ADC548
+ .long 0x11CEC548
+ .long 0x11EFC548
+
+ andi. 0,0,16
+ cmpwi 31,0
+ .long 0x10E7CD48
+ .long 0x118CCD48
+ .long 0x11ADCD48
+ .long 0x11CECD48
+ .long 0x11EFCD48
+ vxor 17,17,31
+
+ sub 10,10,0
+ .long 0x10E7D548
+ .long 0x118CD548
+ .long 0x11ADD548
+ .long 0x11CED548
+ .long 0x11EFD548
+ vxor 1,18,31
+
+ .long 0x10E7DD48
+ .long 0x7C005699
+ .long 0x118CDD48
+ .long 0x11ADDD48
+ .long 0x11CEDD48
+ .long 0x11EFDD48
+ vxor 2,19,31
+
+ addi 7,1,64+15
+ .long 0x10E7E548
+ .long 0x118CE548
+ .long 0x11ADE548
+ .long 0x11CEE548
+ .long 0x11EFE548
+ lvx 24,0,7
+ vxor 3,20,31