diff --git a/configure.ac b/configure.ac index f3d7c770e4..51e096bd90 100644 --- a/configure.ac +++ b/configure.ac @@ -77,9 +77,9 @@ AS_CASE([$host_cpu], [arm64], [host_cpu=aarch64], [*arm*], [host_cpu=arm], [*amd64*], [host_cpu=x86_64 HOSTARCH=intel], - [i?86], [host_cpu=i386 HOSTARCH=intel], - [mipsel*], [host_cpu=mips], - [mips64el*], [host_cpu=mips64], + [i?86], [host_cpu=i386 HOSTARCH=intel enable_asm=no], + [mips64*], [host_cpu=mips64 enable_asm=no], + [mips*], [host_cpu=mips enable_asm=no], [powerpc*], [host_cpu=powerpc], [ppc64*], [host_cpu=powerpc64], [x86_64], [HOSTARCH=intel] @@ -109,13 +109,16 @@ int main() {return 0;} AC_MSG_RESULT(no) ]) -AC_ARG_ENABLE([asm], - AS_HELP_STRING([--disable-asm], [Disable assembly])) -AM_CONDITIONAL([OPENSSL_NO_ASM], [test "x$enable_asm" = "xno" -o "$host_cpu" = "i386"]) +AC_ARG_ENABLE([asm], AS_HELP_STRING([--disable-asm], [Disable assembly])) +AM_CONDITIONAL([OPENSSL_NO_ASM], [test "x$enable_asm" = "xno"]) # Conditionally enable assembly by default AM_CONDITIONAL([HOST_ASM_ELF_ARM], [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "arm" -a "x$enable_asm" != "xno"]) +AM_CONDITIONAL([HOST_ASM_ELF_MIPS], + [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "mips" -a "x$enable_asm" != "xno"]) +AM_CONDITIONAL([HOST_ASM_ELF_MIPS64], + [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "mips64" -a "x$enable_asm" != "xno"]) AM_CONDITIONAL([HOST_ASM_ELF_X86_64], [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "x86_64" -a "x$enable_asm" != "xno"]) AM_CONDITIONAL([HOST_ASM_MACOSX_X86_64], diff --git a/crypto/Makefile.am b/crypto/Makefile.am index e456198fb6..3939802922 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am @@ -136,10 +136,6 @@ endif libcrypto_la_CPPFLAGS = -I$(top_srcdir)/crypto/hidden ${AM_CPPFLAGS} libcrypto_la_CPPFLAGS += -DLIBRESSL_INTERNAL libcrypto_la_CPPFLAGS += -DOPENSSL_NO_HW_PADLOCK -if OPENSSL_NO_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_NO_ASM -else -endif if OPENSSLDIR_DEFINED libcrypto_la_CPPFLAGS += -DOPENSSLDIR=\"@OPENSSLDIR@\" @@ -247,16 +243,21 @@ libcrypto_la_SOURCES = EXTRA_libcrypto_la_SOURCES = include Makefile.am.elf-arm +include Makefile.am.elf-mips +include Makefile.am.elf-mips64 include Makefile.am.elf-x86_64 include Makefile.am.macosx-x86_64 include Makefile.am.masm-x86_64 include Makefile.am.mingw64-x86_64 if !HOST_ASM_ELF_ARM +if !HOST_ASM_ELF_MIPS +if !HOST_ASM_ELF_MIPS64 if !HOST_ASM_ELF_X86_64 if !HOST_ASM_MACOSX_X86_64 if !HOST_ASM_MASM_X86_64 if !HOST_ASM_MINGW64_X86_64 +libcrypto_la_CPPFLAGS += -DOPENSSL_NO_ASM libcrypto_la_SOURCES += aes/aes_cbc.c libcrypto_la_SOURCES += aes/aes_core.c libcrypto_la_SOURCES += camellia/camellia.c @@ -269,6 +270,8 @@ endif endif endif endif +endif +endif libcrypto_la_SOURCES += cpt_err.c libcrypto_la_SOURCES += cryptlib.c @@ -459,6 +462,11 @@ libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/i386/ endif noinst_HEADERS += bn/arch/i386/bn_arch.h +if HOST_MIPS +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ +endif +noinst_HEADERS += bn/arch/mips/bn_arch.h + if HOST_MIPS64 libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips64/ endif diff --git a/crypto/Makefile.am.elf-mips b/crypto/Makefile.am.elf-mips new file mode 100644 index 0000000000..9c4a70f151 --- /dev/null +++ b/crypto/Makefile.am.elf-mips @@ -0,0 +1,24 @@ +ASM_MIPS_ELF = aes/aes-mips.S +ASM_MIPS_ELF += bn/bn-mips.S +ASM_MIPS_ELF += bn/mont-mips.S +ASM_MIPS_ELF += sha/sha1-mips.S +ASM_MIPS_ELF += sha/sha512-mips.S +ASM_MIPS_ELF += sha/sha256-mips.S + +ASM_MIPS_ELF += aes/aes_cbc.c +ASM_MIPS_ELF += camellia/camellia.c +ASM_MIPS_ELF += camellia/cmll_cbc.c +ASM_MIPS_ELF += rc4/rc4_enc.c +ASM_MIPS_ELF += rc4/rc4_skey.c +ASM_MIPS_ELF += whrlpool/wp_block.c + +EXTRA_DIST += $(ASM_MIPS_ELF) + +if HOST_ASM_ELF_MIPS +libcrypto_la_CPPFLAGS += -DAES_ASM +libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT +libcrypto_la_CPPFLAGS += -DSHA1_ASM +libcrypto_la_CPPFLAGS += -DSHA256_ASM +libcrypto_la_CPPFLAGS += -DSHA512_ASM +libcrypto_la_SOURCES += $(ASM_MIPS_ELF) +endif diff --git a/crypto/Makefile.am.elf-mips64 b/crypto/Makefile.am.elf-mips64 new file mode 100644 index 0000000000..c599fa8396 --- /dev/null +++ b/crypto/Makefile.am.elf-mips64 @@ -0,0 +1,24 @@ +ASM_MIPS64_ELF = aes/aes-mips.S +ASM_MIPS64_ELF += bn/bn-mips.S +ASM_MIPS64_ELF += bn/mont-mips.S +ASM_MIPS64_ELF += sha/sha1-mips.S +ASM_MIPS64_ELF += sha/sha512-mips.S +ASM_MIPS64_ELF += sha/sha256-mips.S + +ASM_MIPS64_ELF += aes/aes_cbc.c +ASM_MIPS64_ELF += camellia/camellia.c +ASM_MIPS64_ELF += camellia/cmll_cbc.c +ASM_MIPS64_ELF += rc4/rc4_enc.c +ASM_MIPS64_ELF += rc4/rc4_skey.c +ASM_MIPS64_ELF += whrlpool/wp_block.c + +EXTRA_DIST += $(ASM_MIPS64_ELF) + +if HOST_ASM_ELF_MIPS64 +libcrypto_la_CPPFLAGS += -DAES_ASM +libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT +libcrypto_la_CPPFLAGS += -DSHA1_ASM +libcrypto_la_CPPFLAGS += -DSHA256_ASM +libcrypto_la_CPPFLAGS += -DSHA512_ASM +libcrypto_la_SOURCES += $(ASM_MIPS64_ELF) +endif diff --git a/crypto/bn/arch/mips/bn_arch.h b/crypto/bn/arch/mips/bn_arch.h new file mode 100644 index 0000000000..4d6571f9cb --- /dev/null +++ b/crypto/bn/arch/mips/bn_arch.h @@ -0,0 +1,24 @@ +/* $OpenBSD: bn_arch.h,v 1.1 2023/01/20 10:04:34 jsing Exp $ */ +/* + * Copyright (c) 2023 Joel Sing + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef HEADER_BN_ARCH_H +#define HEADER_BN_ARCH_H + +#ifndef OPENSSL_NO_ASM + +#endif +#endif diff --git a/include/arch/mips/opensslconf.h b/include/arch/mips/opensslconf.h new file mode 100644 index 0000000000..f17d3d2803 --- /dev/null +++ b/include/arch/mips/opensslconf.h @@ -0,0 +1,154 @@ +#include +/* crypto/opensslconf.h.in */ + +#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) +#define OPENSSLDIR "/etc/ssl" +#endif + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +#if defined(HEADER_IDEA_H) && !defined(IDEA_INT) +#define IDEA_INT unsigned int +#endif + +#if defined(HEADER_MD2_H) && !defined(MD2_INT) +#define MD2_INT unsigned int +#endif + +#if defined(HEADER_RC2_H) && !defined(RC2_INT) +/* I need to put in a mod for the alpha - eay */ +#define RC2_INT unsigned int +#endif + +#if defined(HEADER_RC4_H) +#if !defined(RC4_INT) +/* using int types make the structure larger but make the code faster + * on most boxes I have tested - up to %20 faster. */ +/* + * I don't know what does "most" mean, but declaring "int" is a must on: + * - Intel P6 because partial register stalls are very expensive; + * - elder Alpha because it lacks byte load/store instructions; + */ +#define RC4_INT unsigned int +#endif +#if !defined(RC4_CHUNK) +/* + * This enables code handling data aligned at natural CPU word + * boundary. See crypto/rc4/rc4_enc.c for further details. + */ +#undef RC4_CHUNK +#endif +#endif + +#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) +/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a + * %20 speed up (longs are 8 bytes, int's are 4). */ +#ifndef DES_LONG +#define DES_LONG unsigned int +#endif +#endif + +#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) +#define CONFIG_HEADER_BN_H +#define BN_LLONG + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +/* The prime number generation stuff may not work when + * EIGHT_BIT but I don't care since I've only used this mode + * for debugging the bignum libraries */ +#undef SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#define THIRTY_TWO_BIT +#undef SIXTEEN_BIT +#undef EIGHT_BIT +#endif + +#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) +#define CONFIG_HEADER_RC4_LOCL_H +/* if this is defined data[i] is used instead of *data, this is a %20 + * speedup on x86 */ +#define RC4_INDEX +#endif + +#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) +#define CONFIG_HEADER_BF_LOCL_H +#undef BF_PTR +#endif /* HEADER_BF_LOCL_H */ + +#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) +#define CONFIG_HEADER_DES_LOCL_H +#ifndef DES_DEFAULT_OPTIONS +/* the following is tweaked from a config script, that is why it is a + * protected undef/define */ +#ifndef DES_PTR +#undef DES_PTR +#endif + +/* This helps C compiler generate the correct code for multiple functional + * units. It reduces register dependencies at the expense of 2 more + * registers */ +#ifndef DES_RISC1 +#undef DES_RISC1 +#endif + +#ifndef DES_RISC2 +#undef DES_RISC2 +#endif + +#if defined(DES_RISC1) && defined(DES_RISC2) +YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! +#endif + +/* Unroll the inner loop, this sometimes helps, sometimes hinders. + * Very much CPU dependent */ +#ifndef DES_UNROLL +#define DES_UNROLL +#endif + +/* These default values were supplied by + * Peter Gutman + * They are only used if nothing else has been defined */ +#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) +/* Special defines which change the way the code is built depending on the + CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find + even newer MIPS CPU's, but at the moment one size fits all for + optimization options. Older Sparc's work better with only UNROLL, but + there's no way to tell at compile time what it is you're running on */ + +#if defined( sun ) /* Newer Sparc's */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#elif defined( __ultrix ) /* Older MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined( __osf1__ ) /* Alpha */ +# define DES_PTR +# define DES_RISC2 +#elif defined ( _AIX ) /* RS6000 */ + /* Unknown */ +#elif defined( __hpux ) /* HP-PA */ + /* Unknown */ +#elif defined( __aux ) /* 68K */ + /* Unknown */ +#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ +# define DES_UNROLL +#elif defined( __sgi ) /* Newer MIPS */ +# define DES_PTR +# define DES_RISC2 +# define DES_UNROLL +#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ +# define DES_PTR +# define DES_RISC1 +# define DES_UNROLL +#endif /* Systems-specific speed defines */ +#endif + +#endif /* DES_DEFAULT_OPTIONS */ +#endif /* HEADER_DES_LOCL_H */ diff --git a/scripts/test b/scripts/test index 0eb2c06661..34437026df 100755 --- a/scripts/test +++ b/scripts/test @@ -89,6 +89,23 @@ elif [ "x$ARCH" = "xarm32" -o "x$ARCH" = "xarm64" ]; then file apps/openssl/.libs/openssl +elif [ "x$ARCH" = "xmipsel" -o "x$ARCH" = "xmips64el" ]; then + sudo apt-get install -y qemu-user-static binfmt-support + + if [ "x$ARCH" = "xmipsel" ]; then + sudo apt-get install -y g++-mips-linux-gnu + sudo ln -sf /usr/mipsel-linux-gnu/lib/ld.so.1 /lib/ + ./configure --host=mipsel-linux-gnu + LD_LIBRARY_PATH=/usr/mipsel-linux-gnu/lib make -j 4 check + else + sudo apt-get install -y g++-mips64el-linux-gnuabi64 + sudo ln -sf /usr/mips64el-linux-gnuabi64/lib64/ld.so.1 /lib64 + ./configure --host=mips64el-linux-gnuabi64 + LD_LIBRARY_PATH=/usr/mips64el-linux-gnuabi64/lib make -j 4 check + fi + + file apps/openssl/.libs/openssl + elif [ "x$ARCH" = "xandroid" ]; then export TC_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake diff --git a/update.sh b/update.sh index 29600a4703..cac95cad69 100755 --- a/update.sh +++ b/update.sh @@ -180,65 +180,94 @@ fixup_masm() { # generate assembly crypto algorithms asm_src=$libcrypto_src gen_asm_stdout() { - CC=true perl $asm_src/$2 $1 > $3.tmp - [ $1 = "elf" ] && cat <<-EOF >> $3.tmp + CC=true perl $asm_src/$2 $1 > crypto/$3.tmp + [ $1 = "elf" ] && cat <<-EOF >> crypto/$3.tmp #if defined(HAVE_GNU_STACK) .section .note.GNU-stack,"",%progbits #endif EOF if [ $1 = "masm" ]; then - fixup_masm $3.tmp $3 + fixup_masm crypto/$3.tmp crypto/$3 else - $MV $3.tmp $3 + $MV crypto/$3.tmp crypto/$3 fi } +gen_asm_mips() { + abi=$1 + dir=$2 + src=$3 + dst=$4 + CC=true perl $asm_src/$dir/asm/$src.pl $abi $dst.S + cat <<-EOF >> $dst.S + #if defined(HAVE_GNU_STACK) + .section .note.GNU-stack,"",%progbits + #endif + EOF + mv $dst.S crypto/$dir/$dst.S +} gen_asm() { - CC=true perl $asm_src/$2 $1 $3.tmp - [ $1 = "elf" ] && cat <<-EOF >> $3.tmp + CC=true perl $asm_src/$2 $1 crypto/$3.tmp + [ $1 = "elf" ] && cat <<-EOF >> crypto/$3.tmp #if defined(HAVE_GNU_STACK) .section .note.GNU-stack,"",%progbits #endif EOF if [ $1 = "masm" ]; then - fixup_masm $3.tmp $3 + fixup_masm crypto/$3.tmp crypto/$3 else - $MV $3.tmp $3 + $MV crypto/$3.tmp crypto/$3 fi } +#echo generating mips ASM source for elf +gen_asm_mips o32 aes aes-mips aes-mips +gen_asm_mips o32 bn mips bn-mips +gen_asm_mips o32 bn mips-mont mont-mips +gen_asm_mips o32 sha sha1-mips sha1-mips +gen_asm_mips o32 sha sha512-mips sha256-mips +gen_asm_mips o32 sha sha512-mips sha512-mips + +echo generating mips64 ASM source for elf +gen_asm_mips 64 aes aes-mips aes-mips64 +gen_asm_mips 64 bn mips bn-mips64 +gen_asm_mips 64 bn mips-mont mont-mips64 +gen_asm_mips 64 sha sha1-mips sha1-mips64 +gen_asm_mips 64 sha sha512-mips sha256-mips64 +gen_asm_mips 64 sha sha512-mips sha512-mips64 + echo generating arm ASM source for elf -gen_asm_stdout elf aes/asm/aes-armv4.pl crypto/aes/aes-elf-armv4.S -gen_asm_stdout elf bn/asm/armv4-gf2m.pl crypto/bn/gf2m-elf-armv4.S -gen_asm_stdout elf bn/asm/armv4-mont.pl crypto/bn/mont-elf-armv4.S -gen_asm_stdout elf sha/asm/sha1-armv4-large.pl crypto/sha/sha1-elf-armv4.S -gen_asm_stdout elf sha/asm/sha256-armv4.pl crypto/sha/sha256-elf-armv4.S -gen_asm_stdout elf sha/asm/sha512-armv4.pl crypto/sha/sha512-elf-armv4.S -gen_asm_stdout elf modes/asm/ghash-armv4.pl crypto/modes/ghash-elf-armv4.S +gen_asm_stdout elf aes/asm/aes-armv4.pl aes/aes-elf-armv4.S +gen_asm_stdout elf bn/asm/armv4-gf2m.pl bn/gf2m-elf-armv4.S +gen_asm_stdout elf bn/asm/armv4-mont.pl bn/mont-elf-armv4.S +gen_asm_stdout elf sha/asm/sha1-armv4-large.pl sha/sha1-elf-armv4.S +gen_asm_stdout elf sha/asm/sha256-armv4.pl sha/sha256-elf-armv4.S +gen_asm_stdout elf sha/asm/sha512-armv4.pl sha/sha512-elf-armv4.S +gen_asm_stdout elf modes/asm/ghash-armv4.pl modes/ghash-elf-armv4.S $CP $libcrypto_src/arch/arm/armv4cpuid.S crypto $CP $libcrypto_src/arch/arm/armcap.c crypto $CP $libcrypto_src/arch/arm/arm_arch.h crypto for abi in elf macosx masm mingw64; do echo generating x86_64 ASM source for $abi - gen_asm_stdout $abi aes/asm/aes-x86_64.pl crypto/aes/aes-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/vpaes-x86_64.pl crypto/aes/vpaes-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/bsaes-x86_64.pl crypto/aes/bsaes-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/aesni-x86_64.pl crypto/aes/aesni-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/aesni-sha1-x86_64.pl crypto/aes/aesni-sha1-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/modexp512-x86_64.pl crypto/bn/modexp512-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/x86_64-mont.pl crypto/bn/mont-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/x86_64-mont5.pl crypto/bn/mont5-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/x86_64-gf2m.pl crypto/bn/gf2m-$abi-x86_64.S - gen_asm_stdout $abi camellia/asm/cmll-x86_64.pl crypto/camellia/cmll-$abi-x86_64.S - gen_asm_stdout $abi md5/asm/md5-x86_64.pl crypto/md5/md5-$abi-x86_64.S - gen_asm_stdout $abi modes/asm/ghash-x86_64.pl crypto/modes/ghash-$abi-x86_64.S - gen_asm_stdout $abi rc4/asm/rc4-x86_64.pl crypto/rc4/rc4-$abi-x86_64.S - gen_asm_stdout $abi rc4/asm/rc4-md5-x86_64.pl crypto/rc4/rc4-md5-$abi-x86_64.S - gen_asm_stdout $abi sha/asm/sha1-x86_64.pl crypto/sha/sha1-$abi-x86_64.S - gen_asm $abi sha/asm/sha512-x86_64.pl crypto/sha/sha256-$abi-x86_64.S - gen_asm $abi sha/asm/sha512-x86_64.pl crypto/sha/sha512-$abi-x86_64.S - gen_asm_stdout $abi whrlpool/asm/wp-x86_64.pl crypto/whrlpool/wp-$abi-x86_64.S - gen_asm $abi x86_64cpuid.pl crypto/cpuid-$abi-x86_64.S + gen_asm_stdout $abi aes/asm/aes-x86_64.pl aes/aes-$abi-x86_64.S + gen_asm_stdout $abi aes/asm/vpaes-x86_64.pl aes/vpaes-$abi-x86_64.S + gen_asm_stdout $abi aes/asm/bsaes-x86_64.pl aes/bsaes-$abi-x86_64.S + gen_asm_stdout $abi aes/asm/aesni-x86_64.pl aes/aesni-$abi-x86_64.S + gen_asm_stdout $abi aes/asm/aesni-sha1-x86_64.pl aes/aesni-sha1-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/modexp512-x86_64.pl bn/modexp512-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/x86_64-mont.pl bn/mont-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/x86_64-mont5.pl bn/mont5-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/x86_64-gf2m.pl bn/gf2m-$abi-x86_64.S + gen_asm_stdout $abi camellia/asm/cmll-x86_64.pl camellia/cmll-$abi-x86_64.S + gen_asm_stdout $abi md5/asm/md5-x86_64.pl md5/md5-$abi-x86_64.S + gen_asm_stdout $abi modes/asm/ghash-x86_64.pl modes/ghash-$abi-x86_64.S + gen_asm_stdout $abi rc4/asm/rc4-x86_64.pl rc4/rc4-$abi-x86_64.S + gen_asm_stdout $abi rc4/asm/rc4-md5-x86_64.pl rc4/rc4-md5-$abi-x86_64.S + gen_asm_stdout $abi sha/asm/sha1-x86_64.pl sha/sha1-$abi-x86_64.S + gen_asm $abi sha/asm/sha512-x86_64.pl sha/sha256-$abi-x86_64.S + gen_asm $abi sha/asm/sha512-x86_64.pl sha/sha512-$abi-x86_64.S + gen_asm_stdout $abi whrlpool/asm/wp-x86_64.pl whrlpool/wp-$abi-x86_64.S + gen_asm $abi x86_64cpuid.pl cpuid-$abi-x86_64.S done # copy libtls source