git: ce35a3bc852d - stable/13 - Add assembly optimized code for OpenSSL on powerpc, powerpc64 and powerpc64le
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 29 Dec 2021 13:45:58 UTC
The branch stable/13 has been updated by pkubaj (ports committer):
URL: https://cgit.FreeBSD.org/src/commit/?id=ce35a3bc852d25cb989bc1f3dc4ddb723d7d5117
commit ce35a3bc852d25cb989bc1f3dc4ddb723d7d5117
Author: Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2021-11-22 02:28:46 +0000
Commit: Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2021-12-29 13:45:29 +0000
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)
---
crypto/openssl/crypto/perlasm/ppc-xlate.pl | 8 +-
crypto/openssl/crypto/ppccap.c | 12 +-
secure/lib/libcrypto/Makefile | 50 +-
secure/lib/libcrypto/Makefile.asm | 189 +
secure/lib/libcrypto/Makefile.inc | 35 +-
sys/crypto/openssl/powerpc/aes-ppc.S | 1562 +++++++
sys/crypto/openssl/powerpc/aesp8-ppc.S | 3643 +++++++++++++++
sys/crypto/openssl/powerpc/chacha-ppc.S | 1493 ++++++
sys/crypto/openssl/powerpc/ghashp8-ppc.S | 570 +++
sys/crypto/openssl/powerpc/poly1305-ppc.S | 313 ++
sys/crypto/openssl/powerpc/poly1305-ppcfp.S | 587 +++
sys/crypto/openssl/powerpc/ppc-mont.S | 1788 +++++++
sys/crypto/openssl/powerpc/ppc.S | 1856 ++++++++
sys/crypto/openssl/powerpc/ppccpuid.S | 357 ++
sys/crypto/openssl/powerpc/sha1-ppc.S | 1119 +++++
sys/crypto/openssl/powerpc/sha256-ppc.S | 1322 ++++++
sys/crypto/openssl/powerpc/sha256p8-ppc.S | 736 +++
sys/crypto/openssl/powerpc/sha512-ppc.S | 3072 +++++++++++++
sys/crypto/openssl/powerpc/sha512p8-ppc.S | 834 ++++
sys/crypto/openssl/powerpc/vpaes-ppc.S | 1469 ++++++
sys/crypto/openssl/powerpc64/aes-ppc.S | 1534 +++++++
sys/crypto/openssl/powerpc64/aesp8-ppc.S | 3660 +++++++++++++++
sys/crypto/openssl/powerpc64/chacha-ppc.S | 1500 ++++++
sys/crypto/openssl/powerpc64/ecp_nistz256-ppc64.S | 4855 ++++++++++++++++++++
sys/crypto/openssl/powerpc64/ghashp8-ppc.S | 577 +++
sys/crypto/openssl/powerpc64/keccak1600-ppc64.S | 671 +++
sys/crypto/openssl/powerpc64/poly1305-ppc.S | 186 +
sys/crypto/openssl/powerpc64/poly1305-ppcfp.S | 597 +++
sys/crypto/openssl/powerpc64/ppc-mont.S | 1791 ++++++++
sys/crypto/openssl/powerpc64/ppc.S | 1877 ++++++++
sys/crypto/openssl/powerpc64/ppccpuid.S | 388 ++
sys/crypto/openssl/powerpc64/sha1-ppc.S | 1122 +++++
sys/crypto/openssl/powerpc64/sha256-ppc.S | 1325 ++++++
sys/crypto/openssl/powerpc64/sha256p8-ppc.S | 739 +++
sys/crypto/openssl/powerpc64/sha512-ppc.S | 1421 ++++++
sys/crypto/openssl/powerpc64/sha512p8-ppc.S | 837 ++++
sys/crypto/openssl/powerpc64/vpaes-ppc.S | 1480 ++++++
sys/crypto/openssl/powerpc64/x25519-ppc64.S | 350 ++
sys/crypto/openssl/powerpc64le/aes-ppc.S | 1582 +++++++
sys/crypto/openssl/powerpc64le/aesp8-ppc.S | 3660 +++++++++++++++
sys/crypto/openssl/powerpc64le/chacha-ppc.S | 1372 ++++++
.../openssl/powerpc64le/ecp_nistz256-ppc64.S | 4855 ++++++++++++++++++++
sys/crypto/openssl/powerpc64le/ghashp8-ppc.S | 577 +++
sys/crypto/openssl/powerpc64le/keccak1600-ppc64.S | 671 +++
sys/crypto/openssl/powerpc64le/poly1305-ppc.S | 163 +
sys/crypto/openssl/powerpc64le/poly1305-ppcfp.S | 592 +++
sys/crypto/openssl/powerpc64le/ppc-mont.S | 1791 ++++++++
sys/crypto/openssl/powerpc64le/ppc.S | 1877 ++++++++
sys/crypto/openssl/powerpc64le/ppccpuid.S | 388 ++
sys/crypto/openssl/powerpc64le/sha1-ppc.S | 1170 +++++
sys/crypto/openssl/powerpc64le/sha256-ppc.S | 1373 ++++++
sys/crypto/openssl/powerpc64le/sha256p8-ppc.S | 747 +++
sys/crypto/openssl/powerpc64le/sha512-ppc.S | 1517 ++++++
sys/crypto/openssl/powerpc64le/sha512p8-ppc.S | 849 ++++
sys/crypto/openssl/powerpc64le/vpaes-ppc.S | 1480 ++++++
sys/crypto/openssl/powerpc64le/x25519-ppc64.S | 350 ++
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
*** 70501 LINES SKIPPED ***