Add framework for yet another assembler module dubbed "cpuid." Idea
authorAndy Polyakov <appro@openssl.org>
Mon, 26 Jul 2004 20:18:55 +0000 (20:18 +0000)
committerAndy Polyakov <appro@openssl.org>
Mon, 26 Jul 2004 20:18:55 +0000 (20:18 +0000)
is to have a placeholder to small routines, which can be written only
in assembler. In IA-32 case this includes processor capability
identification and access to Time-Stamp Counter. As discussed earlier
OPENSSL_ia32cap is introduced to control recently added SSE2 code
pathes (see docs/crypto/OPENSSL_ia32cap.pod). For the moment the
code is operational on ELF platforms only. I haven't checked it yet,
but I have all reasons to believe that Windows build should fail to
link too. I'll be looking into it shortly...

13 files changed:
Configure
Makefile.org
TABLE
crypto/Makefile.ssl
crypto/amd64cpuid.pl [new file with mode: 0644]
crypto/cryptlib.c
crypto/evp/c_all.c
crypto/ia64cpuid.S [new file with mode: 0644]
crypto/perlasm/x86ms.pl
crypto/perlasm/x86nasm.pl
crypto/perlasm/x86unix.pl
crypto/x86cpuid.pl [new file with mode: 0644]
doc/crypto/OPENSSL_ia32cap.pod [new file with mode: 0644]

index 34839c1..0bb1782 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -114,15 +114,15 @@ my $tlib="-lnsl -lsocket";
 my $bits1="THIRTY_TWO_BIT ";
 my $bits2="SIXTY_FOUR_BIT ";
 
-my $x86_elf_asm="asm/bn86-elf.o asm/co86-elf.o:asm/dx86-elf.o asm/yx86-elf.o::asm/bx86-elf.o:asm/mx86-elf.o:asm/sx86-elf.o asm/s512sse2-elf.o:asm/cx86-elf.o:asm/rx86-elf.o:asm/rm86-elf.o:asm/r586-elf.o";
-my $x86_out_asm="asm/bn86-out.o asm/co86-out.o:asm/dx86-out.o asm/yx86-out.o::asm/bx86-out.o:asm/mx86-out.o:asm/sx86-out.o:asm/cx86-out.o:asm/rx86-out.o:asm/rm86-out.o:asm/r586-out.o";
-my $x86_bsdi_asm="asm/bn86bsdi.o asm/co86bsdi.o:asm/dx86bsdi.o asm/yx86bsdi.o::asm/bx86bsdi.o:asm/mx86bsdi.o:asm/sx86bsdi.o:asm/cx86bsdi.o:asm/rx86bsdi.o:asm/rm86bsdi.o:asm/r586bsdi.o";
-my $no_asm=":::::::::";
+my $x86_elf_asm="x86cpuid-elf.o:asm/bn86-elf.o asm/co86-elf.o:asm/dx86-elf.o asm/yx86-elf.o::asm/bx86-elf.o:asm/mx86-elf.o:asm/sx86-elf.o asm/s512sse2-elf.o:asm/cx86-elf.o:asm/rx86-elf.o:asm/rm86-elf.o:asm/r586-elf.o";
+my $x86_out_asm=":asm/bn86-out.o asm/co86-out.o:asm/dx86-out.o asm/yx86-out.o::asm/bx86-out.o:asm/mx86-out.o:asm/sx86-out.o:asm/cx86-out.o:asm/rx86-out.o:asm/rm86-out.o:asm/r586-out.o";
+my $x86_bsdi_asm=":asm/bn86bsdi.o asm/co86bsdi.o:asm/dx86bsdi.o asm/yx86bsdi.o::asm/bx86bsdi.o:asm/mx86bsdi.o:asm/sx86bsdi.o:asm/cx86bsdi.o:asm/rx86bsdi.o:asm/rm86bsdi.o:asm/r586bsdi.o";
+my $no_asm="::::::::::";
 
 # -DB_ENDIAN slows things down on a sparc for md5, but helps sha1.
 # So the md5_locl.h file has an undef B_ENDIAN if sun is defined
 
-#config-string $cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags
+#config-string $cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags
 
 my %table=(
 # File 'TABLE' (created by 'make TABLE') contains the data from this list,
@@ -137,7 +137,7 @@ my %table=(
 # Our development configs
 "purify",      "purify gcc:-g -DPURIFY -Wall::(unknown)::-lsocket -lnsl::::",
 "debug",       "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown)::-lefence::::",
-"debug-ben",   "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::asm/bn86-elf.o asm/co86-elf.o",
+"debug-ben",   "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::asm/bn86-elf.o asm/co86-elf.o",
 "debug-ben-openbsd","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
 "debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
 "debug-ben-debug",     "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::::",
@@ -146,7 +146,7 @@ my %table=(
 "debug-bodo",  "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 "debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
 "debug-steve", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wno-long-long -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared",
-"debug-steve-linux-pseudo64",  "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT::dlfcn:linux-shared",
+"debug-steve-linux-pseudo64",  "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT:${no_asm}:dlfcn:linux-shared",
 "debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -176,25 +176,25 @@ my %table=(
 
 #### SPARC Solaris with GNU C setups
 "solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
-"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:::asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 ####
-"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o::::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/sparcv8.o::::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 #### SPARC Solaris with Sun C setups
 # SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
 # SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
 # SC5.0 note: Compiler common patch 107357-01 or later is required!
 "solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-KPIC:-xarch=v9:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
+"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:::asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-KPIC:-xarch=v9:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
 ####
-"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8.o::::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8plus.o::::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
+"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/sparcv8.o::::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR::asm/sparcv8plus.o::::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 
 #### SunOS configs, assuming sparc for the gcc one.
 #"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
@@ -208,11 +208,11 @@ my %table=(
 # Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
 # './Configure irix-cc -o32' manually.
 # -mips4 flag is added by ./config when appropriate.
-"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:asm/mips3.o::::::::::dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:asm/mips3.o::::::::::dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT::asm/mips3.o::::::::::dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT::asm/mips3.o::::::::::dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # N64 ABI builds.
-"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:asm/mips3.o::::::::::dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:asm/mips3.o::::::::::dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG::asm/mips3.o::::::::::dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG::asm/mips3.o::::::::::dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 #### Unified HP-UX ANSI C configs.
 # Special notes:
@@ -245,8 +245,8 @@ my %table=(
 # Since there is mention of this in shlib/hpux10-cc.sh
 "hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1:asm/pa-risc2.o::::::::::dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2W.o::::::::::dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1::asm/pa-risc2.o::::::::::dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/pa-risc2W.o::::::::::dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 # More attempts at unified 10.X and 11.X targets for HP C compiler.
 #
@@ -254,17 +254,17 @@ my %table=(
 # Kevin Steves <ks@hp.se>
 "hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "hpux-parisc1_0-cc","cc:+DAportable +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2.o::::::::::dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2W.o::::::::::dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/pa-risc2.o::::::::::dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/pa-risc2W.o::::::::::dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 # HP/UX IA-64 targets
-"hpux-ia64-cc","cc:-Ae +DD32 +O2 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:+Z:+DD32 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux-ia64-cc","cc:-Ae +DD32 +O2 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:+Z:+DD32 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
 # with debugging of the following config.
-"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:+Z:+DD64 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:+Z:+DD64 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # GCC builds...
-"hpux-ia64-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:-fpic:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:-fpic:-mlp64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
+"hpux-ia64-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:-fpic:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:hpux-shared:-fpic:-mlp64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 
 # Legacy HPUX 9.X configs...
 "hpux-cc",     "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O2 -z::(unknown)::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -311,26 +311,26 @@ my %table=(
 #
 "linux-mipsel",        "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-mips",  "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-ppc",   "gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/linux_ppc32.o::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-ppc64", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/linux_ppc64.o::::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ppc",   "gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::asm/linux_ppc32.o::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ppc64", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::asm/linux_ppc64.o::::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-m68k",  "gcc:-DB_ENDIAN -DTERMIO -O2 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::",
 "linux-s390",  "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-s390x", "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-ia64",  "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-x86_64",        "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:asm/x86_64-gcc.o:::::::asm/rc4-amd64.o:::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ia64",  "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR::asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR::asm/ia64.o::asm/aes-ia64.o:::asm/sha256-ia64.o asm/sha512-ia64.o:::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-x86_64",        "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL::asm/x86_64-gcc.o:::::::asm/rc4-amd64.o:::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-elf-arm","gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "linux-parisc",        "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT:::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
 #### SPARC Linux setups
 "linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
 # Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
 # assisted with debugging of following two configs.
-"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # it's a real mess with -mcpu=ultrasparc option under Linux, but
 # -Wa,-Av8plus should do the trick no matter what.
-"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/sparcv8plus.o:asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 # GCC 3.1 is a requirement
-"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv9.o::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::asm/des_enc-sparc.o fcrypt_b.o:::asm/md5-sparcv9.o::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 #### Alpha Linux with GNU C and Compaq C setups
 # Special notes:
 # - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
@@ -356,7 +356,7 @@ my %table=(
 
 "FreeBSD-elf", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::-pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "FreeBSD-sparc64","gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::-pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE:::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"FreeBSD-ia64",        "gcc:-DL_ENDIAN -DTERMIOS -O -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"FreeBSD-ia64",        "gcc:-DL_ENDIAN -DTERMIOS -O -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR::asm/ia64.o::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "FreeBSD-alpha","gcc:-DTERMIOS -O::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC2:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "FreeBSD",     "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
 
@@ -368,8 +368,8 @@ my %table=(
 "OpenBSD-m88k",                "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "OpenBSD-mips",                "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "OpenBSD-powerpc",     "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"OpenBSD-sparc",       "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"OpenBSD-sparc64",     "gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR::asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"OpenBSD-sparc",       "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::asm/sparcv8.o:asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"OpenBSD-sparc64",     "gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR:::asm/des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "OpenBSD-vax",         "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 "OpenBSD-hppa",                "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
@@ -410,12 +410,12 @@ my %table=(
 "sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
 #### IBM's AIX.
-"aix-gcc",  "gcc:-O -DB_ENDIAN::(unknown):AIX::BN_LLONG RC4_CHAR:asm/aix_ppc32.o::::::::::dlfcn:",
-"aix43-cc", "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):::BN_LLONG RC4_CHAR:asm/aix_ppc32.o::::::::::dlfcn:aix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::",
+"aix-gcc",  "gcc:-O -DB_ENDIAN::(unknown):AIX::BN_LLONG RC4_CHAR::asm/aix_ppc32.o::::::::::dlfcn:",
+"aix43-cc", "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):::BN_LLONG RC4_CHAR::asm/aix_ppc32.o::::::::::dlfcn:aix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::",
 # Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
 # at build time. $OBJECT_MODE is respected at ./config stage!
-"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:asm/aix_ppc32.o::::::::::dlfcn:aix-shared::-q32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
-"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:asm/aix_ppc64.o::::::::::dlfcn:aix-shared::-q64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
+"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR::asm/aix_ppc32.o::::::::::dlfcn:aix-shared::-q32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
+"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR::asm/aix_ppc64.o::::::::::dlfcn:aix-shared::-q64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 
 #
 # Cray T90 and similar (SDSC)
@@ -509,7 +509,7 @@ my %table=(
 
 ##### MacOS X (a.k.a. Rhapsody or Darwin) setup
 "rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
-"darwin-ppc-cc","cc:-O3 -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/osx_ppc32.o:::::::::::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+"darwin-ppc-cc","cc:-O3 -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::asm/osx_ppc32.o:::::::::::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 "darwin-i386-cc","cc:-O3 -fomit-frame-pointer -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 
 ##### A/UX
@@ -549,6 +549,7 @@ my $idx_thread_cflag = $idx++;
 my $idx_sys_id = $idx++;
 my $idx_lflags = $idx++;
 my $idx_bn_ops = $idx++;
+my $idx_cpuid_obj = $idx++;
 my $idx_bn_obj = $idx++;
 my $idx_des_obj = $idx++;
 my $idx_aes_obj = $idx++;
@@ -934,6 +935,7 @@ my $thread_cflag = $fields[$idx_thread_cflag];
 my $sys_id = $fields[$idx_sys_id];
 my $lflags = $fields[$idx_lflags];
 my $bn_ops = $fields[$idx_bn_ops];
+my $cpuid_obj = $fields[$idx_cpuid_obj];
 my $bn_obj = $fields[$idx_bn_obj];
 my $des_obj = $fields[$idx_des_obj];
 my $aes_obj = $fields[$idx_aes_obj];
@@ -1077,7 +1079,7 @@ $lflags="$libs$lflags" if ($libs ne "");
 
 if ($no_asm)
        {
-       $bn_obj=$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj="";
+       $cpuid_obj=$bn_obj=$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj="";
        $sha1_obj=$md5_obj=$rmd160_obj="";
        }
 
@@ -1264,6 +1266,7 @@ while (<IN>)
        s/^DEPFLAG=.*$/DEPFLAG= $depflags/;
        s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
        s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
+       s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
        s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
        s/^DES_ENC=.*$/DES_ENC= $des_obj/;
        s/^AES_ASM_OBJ=.*$/AES_ASM_OBJ= $aes_obj/;
@@ -1700,7 +1703,7 @@ sub print_table_entry
        my $target = shift;
 
        (my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
-       my $bn_ops,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
+       my $bn_ops,my $cpuid_obj,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
        my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
        my $rc5_obj,my $dso_scheme,my $shared_target,my $shared_cflag,
        my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags)=
@@ -1716,6 +1719,7 @@ sub print_table_entry
 \$sys_id       = $sys_id
 \$lflags       = $lflags
 \$bn_ops       = $bn_ops
+\$cpuid_obj    = $cpuid_obj
 \$bn_obj       = $bn_obj
 \$des_obj      = $des_obj
 \$aes_obj      = $aes_obj
index d7a4319..e20be74 100644 (file)
@@ -80,6 +80,13 @@ MAKEDEPPROG=makedepend
 AS=$(CC) -c
 ASFLAG=$(CFLAG)
 
+# For x86 assembler: Set PROCESSOR to 386 if you want to support
+# the 80386.
+PROCESSOR=
+
+# CPUID module collects small commonly used assembler snippets
+CPUID_OBJ= 
+
 # Set BN_ASM to bn_asm.o if you want to use the C version
 BN_ASM= bn_asm.o
 #BN_ASM= bn_asm.o
@@ -95,10 +102,6 @@ BN_ASM= bn_asm.o
 #BN_ASM= asm/x86w16.o   # 16 bit code for Windows 3.1/DOS
 #BN_ASM= asm/x86w32.o   # 32 bit code for Windows 3.1
 
-# For x86 assembler: Set PROCESSOR to 386 if you want to support
-# the 80386.
-PROCESSOR=
-
 # Set DES_ENC to des_enc.o if you want to use the C version
 #There are 4 x86 assember options.
 DES_ENC= asm/dx86-out.o asm/yx86-out.o
@@ -229,6 +232,7 @@ BUILDENV=   PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
                EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}'       \
                SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' \
                PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}'     \
+               CPUID_OBJ='${CPUID_OBJ}'                        \
                BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}'         \
                AES_ASM_OBJ='${AES_ASM_OBJ}'                    \
                BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}'       \
diff --git a/TABLE b/TABLE
index ab8a4c4..8eabda3 100644 (file)
--- a/TABLE
+++ b/TABLE
@@ -8,6 +8,7 @@ $thread_cflag = (unknown)
 $sys_id       = WIN16
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -34,6 +35,7 @@ $thread_cflag =
 $sys_id       = WIN32
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -60,6 +62,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -86,6 +89,7 @@ $thread_cflag =
 $sys_id       = CYGWIN32
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = asm/bn86-out.o asm/co86-out.o
 $des_obj      = asm/dx86-out.o asm/yx86-out.o
 $aes_obj      = 
@@ -112,6 +116,7 @@ $thread_cflag = (unknown)
 $sys_id       = CYGWIN32
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -138,6 +143,7 @@ $thread_cflag =
 $sys_id       = MSDOS
 $lflags       = -L/dev/env/WATT_ROOT/lib -lwatt
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -164,6 +170,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = asm/bn86-out.o asm/co86-out.o
 $des_obj      = asm/dx86-out.o asm/yx86-out.o
 $aes_obj      = 
@@ -190,6 +197,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC2
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -216,6 +224,7 @@ $thread_cflag = -pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -242,6 +251,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = 
@@ -268,6 +278,7 @@ $thread_cflag = -pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -294,6 +305,7 @@ $thread_cflag = (unknown)
 $sys_id       = MPE
 $lflags       = -L/SYSLOG/PUB -lsyslog -lsocket -lcurses
 $bn_ops       = BN_LLONG DES_PTR DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -320,6 +332,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -346,6 +359,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -372,6 +386,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -398,6 +413,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -424,6 +440,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -450,6 +467,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -476,6 +494,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -502,6 +521,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -528,6 +548,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = asm/bn86-out.o asm/co86-out.o
 $des_obj      = asm/dx86-out.o asm/yx86-out.o
 $aes_obj      = 
@@ -554,6 +575,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -580,6 +602,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -606,6 +629,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -632,6 +656,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -658,6 +683,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -684,6 +710,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -710,6 +737,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -736,6 +764,7 @@ $thread_cflag = -Kthread
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX DES_PTR DES_RISC1 DES_UNROLL
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -762,6 +791,7 @@ $thread_cflag = -pthread
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX DES_PTR DES_RISC1 DES_UNROLL
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -788,6 +818,7 @@ $thread_cflag = -Kthread
 $sys_id       = SNI
 $lflags       = -lsocket -lnsl -lc -L/usr/ucblib -lucb
 $bn_ops       = BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -814,6 +845,7 @@ $thread_cflag = (unknown)
 $sys_id       = SNI
 $lflags       = -lsocket -lnsl -lc -L/usr/ucblib -lucb
 $bn_ops       = RC4_INDEX RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -840,6 +872,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lucb
 $bn_ops       = RC4_INDEX RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -866,6 +899,7 @@ $thread_cflag =
 $sys_id       = UWIN
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -892,6 +926,7 @@ $thread_cflag =
 $sys_id       = WINCE
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -918,6 +953,7 @@ $thread_cflag = (unknown)
 $sys_id       = MSDOS
 $lflags       = 
 $bn_ops       = BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -944,6 +980,7 @@ $thread_cflag =
 $sys_id       = WINNT
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -970,6 +1007,7 @@ $thread_cflag = (unknown)
 $sys_id       = WIN16
 $lflags       = 
 $bn_ops       = BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -996,6 +1034,7 @@ $thread_cflag =
 $sys_id       = WIN16
 $lflags       = 
 $bn_ops       = BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1022,6 +1061,7 @@ $thread_cflag = (unknown)
 $sys_id       = WIN16
 $lflags       = 
 $bn_ops       = MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1048,6 +1088,7 @@ $thread_cflag =
 $sys_id       = WIN32
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1074,6 +1115,7 @@ $thread_cflag =
 $sys_id       = WIN64A
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT EXPORT_VAR_AS_FN
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1100,6 +1142,7 @@ $thread_cflag =
 $sys_id       = WIN64I
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT EXPORT_VAR_AS_FN
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1126,6 +1169,7 @@ $thread_cflag = (unknown)
 $sys_id       = AIX
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/aix_ppc32.o
 $des_obj      = 
 $aes_obj      = 
@@ -1152,6 +1196,7 @@ $thread_cflag = (unknown)
 $sys_id       = AIX
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/aix_ppc32.o
 $des_obj      = 
 $aes_obj      = 
@@ -1178,6 +1223,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/aix_ppc32.o
 $des_obj      = 
 $aes_obj      = 
@@ -1204,6 +1250,7 @@ $thread_cflag = (unknown)
 $sys_id       = AIX
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/aix_ppc64.o
 $des_obj      = 
 $aes_obj      = 
@@ -1230,6 +1277,7 @@ $thread_cflag = -pthread
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1256,6 +1304,7 @@ $thread_cflag = (unknown)
 $sys_id       = AUX
 $lflags       = -lbsd
 $bn_ops       = RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1282,6 +1331,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1308,6 +1358,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = RSA_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = asm/bn86bsdi.o asm/co86bsdi.o
 $des_obj      = asm/dx86bsdi.o asm/yx86bsdi.o
 $aes_obj      = 
@@ -1334,6 +1385,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1360,6 +1412,7 @@ $thread_cflag = (unknown)
 $sys_id       = CRAY
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG DES_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1386,6 +1439,7 @@ $thread_cflag = (unknown)
 $sys_id       = CRAY
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1412,6 +1466,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = MACOSX
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1438,6 +1493,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = MACOSX
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/osx_ppc32.o
 $des_obj      = 
 $aes_obj      = 
@@ -1464,6 +1520,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lefence
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1490,6 +1547,7 @@ $thread_cflag =
 $sys_id       = CYGWIN32
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1516,6 +1574,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = 
 $aes_obj      = 
@@ -1542,6 +1601,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1568,6 +1628,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1594,6 +1655,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1620,6 +1682,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1646,6 +1709,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1672,6 +1736,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1698,6 +1763,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1724,6 +1790,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1750,6 +1817,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1776,6 +1844,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -1802,6 +1871,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lefence -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1828,6 +1898,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1854,6 +1925,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1880,6 +1952,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1906,6 +1979,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -1932,6 +2006,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8.o
 $des_obj      = 
 $aes_obj      = 
@@ -1958,6 +2033,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8.o
 $des_obj      = 
 $aes_obj      = 
@@ -1984,6 +2060,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8plus.o
 $des_obj      = 
 $aes_obj      = 
@@ -2010,6 +2087,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8plus.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -2036,6 +2114,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -rdynamic -ldl
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -2062,9 +2141,10 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -rdynamic -ldl
 $bn_ops       = SIXTY_FOUR_BIT
+$cpuid_obj    = 
 $bn_obj       = 
-$des_obj      = dlfcn
-$aes_obj      = linux-shared
+$des_obj      = 
+$aes_obj      = 
 $bf_obj       = 
 $md5_obj      = 
 $sha1_obj     = 
@@ -2072,8 +2152,8 @@ $cast_obj     =
 $rc4_obj      = 
 $rmd160_obj   = 
 $rc5_obj      = 
-$dso_scheme   = 
-$shared_target= 
+$dso_scheme   = dlfcn
+$shared_target= linux-shared
 $shared_cflag = 
 $shared_ldflag = 
 $shared_extension = 
@@ -2088,6 +2168,7 @@ $thread_cflag =
 $sys_id       = CYGWIN32
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2114,6 +2195,7 @@ $thread_cflag = (unknown)
 $sys_id       = VOS
 $lflags       = -Wl,-map
 $bn_ops       = BN_LLONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2140,6 +2222,7 @@ $thread_cflag = (unknown)
 $sys_id       = VOS
 $lflags       = -Wl,-map
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2166,6 +2249,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = RC4_INDEX DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2192,6 +2276,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lnsl -lsocket
 $bn_ops       = RC4_INDEX DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2218,6 +2303,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lnsl -lsocket
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -2244,6 +2330,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2270,6 +2357,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2296,6 +2384,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = DES_PTR DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2322,6 +2411,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = DES_PTR DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2348,6 +2438,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = asm/aes-ia64.o
@@ -2374,6 +2465,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = asm/aes-ia64.o
@@ -2400,6 +2492,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2426,6 +2519,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldld
 $bn_ops       = BN_LLONG DES_PTR DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2452,6 +2546,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = BN_LLONG DES_PTR DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2478,6 +2573,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2504,6 +2600,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/pa-risc2.o
 $des_obj      = 
 $aes_obj      = 
@@ -2530,6 +2627,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -Wl,+s -ldld
 $bn_ops       = SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = asm/pa-risc2.o
 $des_obj      = 
 $aes_obj      = 
@@ -2556,6 +2654,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = asm/aes-ia64.o
@@ -2582,6 +2681,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = asm/aes-ia64.o
@@ -2608,6 +2708,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/pa-risc2W.o
 $des_obj      = 
 $aes_obj      = 
@@ -2634,6 +2735,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
+$cpuid_obj    = 
 $bn_obj       = asm/pa-risc2W.o
 $des_obj      = 
 $aes_obj      = 
@@ -2660,6 +2762,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -2686,6 +2789,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2712,6 +2816,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2738,6 +2843,7 @@ $thread_cflag = -D_SGI_MP_SOURCE
 $sys_id       = 
 $lflags       = 
 $bn_ops       = DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT
+$cpuid_obj    = 
 $bn_obj       = asm/mips3.o
 $des_obj      = 
 $aes_obj      = 
@@ -2764,6 +2870,7 @@ $thread_cflag = -D_SGI_MP_SOURCE
 $sys_id       = 
 $lflags       = 
 $bn_ops       = MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT
+$cpuid_obj    = 
 $bn_obj       = asm/mips3.o
 $des_obj      = 
 $aes_obj      = 
@@ -2790,6 +2897,7 @@ $thread_cflag = -D_SGI_MP_SOURCE
 $sys_id       = 
 $lflags       = 
 $bn_ops       = RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG
+$cpuid_obj    = 
 $bn_obj       = asm/mips3.o
 $des_obj      = 
 $aes_obj      = 
@@ -2816,6 +2924,7 @@ $thread_cflag = -D_SGI_MP_SOURCE
 $sys_id       = 
 $lflags       = 
 $bn_ops       = RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG
+$cpuid_obj    = 
 $bn_obj       = asm/mips3.o
 $des_obj      = 
 $aes_obj      = 
@@ -2842,6 +2951,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2868,6 +2978,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2894,6 +3005,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2920,6 +3032,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -2946,6 +3059,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = asm/bn86-out.o asm/co86-out.o
 $des_obj      = asm/dx86-out.o asm/yx86-out.o
 $aes_obj      = 
@@ -2972,6 +3086,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -2998,6 +3113,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3024,6 +3140,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -3050,6 +3167,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = asm/aes-ia64.o
@@ -3076,6 +3194,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR
+$cpuid_obj    = 
 $bn_obj       = asm/ia64.o
 $des_obj      = 
 $aes_obj      = asm/aes-ia64.o
@@ -3102,6 +3221,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -3128,6 +3248,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3154,6 +3275,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3180,6 +3302,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3206,6 +3329,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3232,6 +3356,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -3258,6 +3383,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = asm/linux_ppc32.o
 $des_obj      = 
 $aes_obj      = 
@@ -3284,6 +3410,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = asm/linux_ppc64.o
 $des_obj      = 
 $aes_obj      = 
@@ -3310,6 +3437,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -3336,6 +3464,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3362,6 +3491,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3388,6 +3518,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3414,6 +3545,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -3440,6 +3572,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8plus.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -3466,6 +3599,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
+$cpuid_obj    = 
 $bn_obj       = asm/x86_64-gcc.o
 $des_obj      = 
 $aes_obj      = 
@@ -3492,6 +3626,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -3518,6 +3653,7 @@ $thread_cflag =
 $sys_id       = MINGW32
 $lflags       = -mno-cygwin -lwsock32 -lgdi32
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = asm/bn86-out.o asm/co86-out.o
 $des_obj      = asm/dx86-out.o asm/yx86-out.o
 $aes_obj      = 
@@ -3544,6 +3680,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket -lnsl -lc89
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3570,6 +3707,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = RC4_INDEX MD2_INT
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3596,6 +3734,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = BN_LLONG RC4_INDEX MD2_INT
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3622,6 +3761,7 @@ $thread_cflag =
 $sys_id       = 
 $lflags       = RC4_INDEX MD2_INT
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3648,6 +3788,7 @@ $thread_cflag = (unknown)
 $sys_id       = NEWS4
 $lflags       = -lmld -liberty
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3674,6 +3815,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3700,6 +3842,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3726,6 +3869,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3752,6 +3896,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3778,6 +3923,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3804,6 +3950,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3830,6 +3977,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3856,6 +4004,7 @@ $thread_cflag = (unknown)
 $sys_id       = MACOSX_RHAPSODY
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3882,6 +4031,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3908,6 +4058,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -3934,6 +4085,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -3960,6 +4112,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -3986,6 +4139,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4012,6 +4166,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -4038,6 +4193,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -4064,6 +4220,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8plus.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -4090,6 +4247,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = asm/sparcv8plus.o
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -4116,6 +4274,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4142,6 +4301,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -4168,6 +4328,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -4194,6 +4355,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = ULTRASPARC
 $lflags       = -lsocket -lnsl -ldl
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = asm/des_enc-sparc.o fcrypt_b.o
 $aes_obj      = 
@@ -4220,6 +4382,7 @@ $thread_cflag = (unknown)
 $sys_id       = SUNOS
 $lflags       = 
 $bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4246,6 +4409,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = THIRTY_TWO_BIT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4272,6 +4436,7 @@ $thread_cflag = -pthread
 $sys_id       = 
 $lflags       = 
 $bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4298,6 +4463,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4324,6 +4490,7 @@ $thread_cflag = (unknown)
 $sys_id       = 
 $lflags       = 
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4350,6 +4517,7 @@ $thread_cflag = -Kthread
 $sys_id       = 
 $lflags       = -lsocket -lnsl -lresolv -lx
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4376,6 +4544,7 @@ $thread_cflag = -Kthread
 $sys_id       = 
 $lflags       = -lsocket -lnsl -lresolv -lx
 $bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4402,6 +4571,7 @@ $thread_cflag = -Kthread
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX DES_PTR DES_RISC1 DES_UNROLL
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -4428,6 +4598,7 @@ $thread_cflag = -D_REENTRANT
 $sys_id       = 
 $lflags       = -lsocket -lnsl
 $bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
+$cpuid_obj    = x86cpuid-elf.o
 $bn_obj       = asm/bn86-elf.o asm/co86-elf.o
 $des_obj      = asm/dx86-elf.o asm/yx86-elf.o
 $aes_obj      = 
@@ -4454,6 +4625,7 @@ $thread_cflag = (unknown)
 $sys_id       = VOS
 $lflags       = -Wl,-map
 $bn_ops       = BN_LLONG
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4480,6 +4652,7 @@ $thread_cflag = (unknown)
 $sys_id       = VOS
 $lflags       = -Wl,-map
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4506,6 +4679,7 @@ $thread_cflag =
 $sys_id       = VXWORKS
 $lflags       = -r
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4532,6 +4706,7 @@ $thread_cflag =
 $sys_id       = VXWORKS
 $lflags       = -r
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4558,6 +4733,7 @@ $thread_cflag =
 $sys_id       = VXWORKS
 $lflags       = -r
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4584,6 +4760,7 @@ $thread_cflag =
 $sys_id       = VXWORKS
 $lflags       = -r
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
@@ -4610,6 +4787,7 @@ $thread_cflag =
 $sys_id       = VXWORKS
 $lflags       = -r
 $bn_ops       = 
+$cpuid_obj    = 
 $bn_obj       = 
 $des_obj      = 
 $aes_obj      = 
index 40b3b7c..8d59395 100644 (file)
@@ -22,6 +22,7 @@ PEX_LIBS=
 EX_LIBS=
  
 CFLAGS= $(INCLUDE) $(CFLAG)
+ASFLAGS= $(INCLUDE) $(ASFLAG)
 
 
 LIBS=
@@ -39,7 +40,7 @@ GENERAL=Makefile README crypto-lib.com install.com
 LIB= $(TOP)/libcrypto.a
 SHARED_LIB= libcrypto$(SHLIB_EXT)
 LIBSRC=        cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c o_dir.c
-LIBOBJ= cryptlib.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o
+LIBOBJ= cryptlib.o mem.o mem_clr.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o o_time.o o_str.o o_dir.o $(CPUID_OBJ)
 
 SRC= $(LIBSRC)
 
@@ -62,6 +63,13 @@ buildinf.h: ../Makefile.ssl
        echo "  #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
        echo '#endif' ) >buildinf.h
 
+x86cpuid-elf.s:        x86cpuid.pl perlasm/x86asm.pl
+       $(PERL) x86cpuid.pl elf $(CFLAGS) $(PROCESSOR) > $@
+amd64cpuid.s: amd64cpuid.pl
+       $(PERL) amd64cpuid.pl $@
+ia64cpuid.s: ia64cpuid.S
+       $(CC) $(CFLAGS) -E ia64cpuid.S > $@
+
 testapps:
        if echo ${SDIRS} | fgrep ' des '; \
        then cd des && $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' des; fi
@@ -148,7 +156,7 @@ depend:
        done;
 
 clean:
-       rm -f buildinf.h *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
+       rm -f buildinf.h *.s *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
        @for i in $(SDIRS) ;\
        do \
        (cd $$i && echo "making clean in crypto/$$i..." && \
diff --git a/crypto/amd64cpuid.pl b/crypto/amd64cpuid.pl
new file mode 100644 (file)
index 0000000..baf801d
--- /dev/null
@@ -0,0 +1,30 @@
+#!/usr/bin/env perl
+
+$output=shift;
+$win64a=1 if ($output =~ /win64a\.[s|asm]/);
+open STDOUT,">$output" || die "can't open $output: $!";
+
+print<<___ if(defined($win64a));
+TEXT   SEGMENT
+PUBLIC OPENSSL_rdtsc
+ALIGN  16
+OPENSSL_rdtsc  PROC NEAR
+       rdtsc
+       shl     rdx,32
+       or      rax,rdx
+       ret
+OPENSSL_rdtsc  ENDP
+TEXT   ENDS
+END
+___
+print<<___ if(!defined($win64a));
+.text
+.globl OPENSSL_rdtsc
+.align 16
+OPENSSL_rdtsc:
+       rdtsc
+       shl     \$32,%rdx
+       or      %rdx,%rax
+       ret
+.size  OPENSSL_rdtsc,.-OPENSSL_rdtsc
+___
index b180aeb..79c54b9 100644 (file)
@@ -539,6 +539,38 @@ const char *CRYPTO_get_lock_name(int type)
                return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS));
        }
 
+#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__INTEL__)
+
+unsigned long  OPENSSL_ia32cap=0;
+unsigned long *OPENSSL_ia32cap_loc() { return &OPENSSL_ia32cap; }
+
+#if !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY)
+#define OPENSSL_CPUID_SETUP
+void OPENSSL_cpuid_setup()
+{ static int trigger=0;
+  unsigned long OPENSSL_ia32_cpuid();
+  char *env;
+
+    if (trigger)       return;
+
+    trigger=1;
+    if ((env=getenv("OPENSSL_ia32cap")))
+       OPENSSL_ia32cap = strtoul(env,NULL,0)|(1<<10);
+    else
+       OPENSSL_ia32cap = OPENSSL_ia32_cpuid()|(1<<10);
+    /*
+     * |(1<<10) sets a reserved bit to signal that variable
+     * was initialized already... This is to avoid interference
+     * with cpuid snippets in ELF .init segment.
+     */
+}
+#endif
+
+#endif
+#if !defined(OPENSSL_CPUID_SETUP)
+void OPENSSL_cpuid_setup() {}
+#endif
+
 #ifdef _DLL
 #ifdef OPENSSL_SYS_WIN32
 
@@ -551,6 +583,7 @@ BOOL WINAPI DLLEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason,
        switch(fdwReason)
                {
        case DLL_PROCESS_ATTACH:
+               OPENSSL_cpuid_setup();
                break;
        case DLL_THREAD_ATTACH:
                break;
index fa60a73..c6a3315 100644 (file)
@@ -74,6 +74,13 @@ void OpenSSL_add_all_algorithms(void)
 
 void OPENSSL_add_all_algorithms_noconf(void)
        {
+       /*
+        * For the moment OPENSSL_cpuid_setup does something
+        * only on IA-32, but we reserve the option for all
+        * platforms...
+        */
+       void OPENSSL_cpuid_setup();
+       OPENSSL_cpuid_setup();
        OpenSSL_add_all_ciphers();
        OpenSSL_add_all_digests();
 #ifndef OPENSSL_NO_ENGINE
diff --git a/crypto/ia64cpuid.S b/crypto/ia64cpuid.S
new file mode 100644 (file)
index 0000000..a800527
--- /dev/null
@@ -0,0 +1,9 @@
+// Works on all IA-64 platforms: Linux, HP-UX, Win64i...
+// On Win64i compile with ias.exe.
+.text
+.global        OPENSSL_rdtsc#
+.proc  OPENSSL_rdtsc#
+OPENSSL_rdtsc:
+       mov     r8=ar.itc
+       br.ret  b0
+.endp   OPENSSL_rdtsc#
index dd62348..f6e225c 100644 (file)
@@ -160,6 +160,8 @@ sub main'jne        { &out1("jne",@_); }
 sub main'jno   { &out1("jno",@_); }
 sub main'push  { &out1("push",@_); $stack+=4; }
 sub main'pop   { &out1("pop",@_); $stack-=4; }
+sub main'pushf { &out0("pushf"); $stack+=4; }
+sub main'popf  { &out0("popf"); $stack-=4; }
 sub main'bswap { &out1("bswap",@_); &using486(); }
 sub main'not   { &out1("not",@_); }
 sub main'call  { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); }
@@ -168,6 +170,8 @@ sub main'nop        { &out0("nop"); }
 sub main'test  { &out2("test",@_); }
 sub main'bt    { &out2("bt",@_); }
 sub main'leave { &out0("leave"); }
+sub main'cpuid { &out0("cpuid"); }
+sub main'rdtsc { &out0("rdtsc"); }
 
 # SSE2
 sub main'emms  { &out0("emms"); }
index da2a1d4..4cb09dd 100644 (file)
@@ -169,6 +169,8 @@ sub main'jno        { &out1("jno NEAR",@_); }
 
 sub main'push  { &out1("push",@_); $stack+=4; }
 sub main'pop   { &out1("pop",@_); $stack-=4; }
+sub main'pushf { &out0("pushf"); $stack+=4; }
+sub main'popf  { &out0("popf"); $stack-=4; }
 sub main'bswap { &out1("bswap",@_); &using486(); }
 sub main'not   { &out1("not",@_); }
 sub main'call  { &out1("call",($_[0]=~/^\$L/?'':'_').$_[0]); }
@@ -177,6 +179,8 @@ sub main'nop        { &out0("nop"); }
 sub main'test  { &out2("test",@_); }
 sub main'bt    { &out2("bt",@_); }
 sub main'leave { &out0("leave"); }
+sub main'cpuid { &out0("cpuid"); }
+sub main'rdtsc { &out0("rdtsc"); }
 
 # SSE2
 sub main'emms  { &out0("emms"); }
index 99e2865..12ff816 100644 (file)
@@ -199,6 +199,8 @@ sub main'nop        { &out0("nop"); }
 sub main'test  { &out2("testl",@_); }
 sub main'bt    { &out2("btl",@_); }
 sub main'leave { &out0("leave"); }
+sub main'cpuid { &out0(".word\t0xa20f"); }
+sub main'rdtsc { &out0(".word\t0x310f"); }
 
 # SSE2
 sub main'emms  { &out0("emms"); }
@@ -519,11 +521,14 @@ sub main'file_end
                # SSE/MMX module with this snippet... Well, it's 72
                # bytes long and for the moment we have two modules.
                # Let's argue when we have 7 modules or so...
+               #
+               # $1<<10 sets a reserved bit to signal that variable
+               # was initialized already...
                &main'picmeup("edx","OPENSSL_ia32cap");
                $tmp=<<___;
                cmpl    \$0,(%edx)
                jne     1f
-               movl    \$1,(%edx)
+               movl    \$1<<10,(%edx)
                pushf
                popl    %eax
                movl    %eax,%ecx
@@ -539,12 +544,13 @@ sub main'file_end
                pushl   %ebx
                movl    %edx,%edi
                movl    \$1,%eax
-               cpuid
-               orl     \$1,%edx
+               .word   0xa20f
+               orl     \$1<<10,%edx
                movl    %edx,0(%edi)
                movl    %ecx,4(%edi)
                popl    %ebx
                popl    %edi
+       .align  4
        1:
 ___
                push (@out,$tmp);
@@ -675,3 +681,17 @@ ___
        }
 
 sub main'blindpop { &out1("popl",@_); }
+
+sub main'initseg
+       {
+       local($f)=@_;
+       if ($main'elf)
+               {
+               local($tmp)=<<___;
+.pushsection   .init
+       call    $under$f
+.popsection
+___
+               push(@out,$tmp);
+               }
+       }
diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl
new file mode 100644 (file)
index 0000000..85fbef7
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env perl
+
+push(@INC,"perlasm");
+require "x86asm.pl";
+
+&asm_init($ARGV[0],"x86cpuid");
+
+&function_begin("OPENSSL_ia32_cpuid");
+       &xor    ("edx","edx");
+       &pushf  ();
+       &pop    ("eax");
+       &mov    ("ecx","eax");
+       &xor    ("eax",1<<21);
+       &push   ("eax");
+       &popf   ();
+       &pushf  ();
+       &pop    ("eax");
+       &xor    ("ecx","eax");
+       &bt     ("ecx",21);
+       &jnc    (&label("nocpuid"));
+       &mov    ("eax",1);
+       &cpuid  ();
+&set_label("nocpuid");
+       &mov    ("eax","edx");
+       &mov    ("edx","ecx");
+&function_end("OPENSSL_ia32_cpuid");
+
+&external_label("OPENSSL_ia32cap");
+
+&function_begin_B("OPENSSL_rdtsc");
+       &xor    ("eax","eax");
+       &xor    ("edx","edx");
+       &picmeup("ecx","OPENSSL_ia32cap");
+       &bt     (&DWP(0,"ecx"),4);
+       &jnc    (&label("notsc"));
+       &rdtsc  ();
+&set_label("notsc");
+       &ret    ();
+&function_end_B("OPENSSL_rdtsc");
+
+&initseg("OPENSSL_cpuid_setup") if ($main'elf);
+
+&asm_finish();
diff --git a/doc/crypto/OPENSSL_ia32cap.pod b/doc/crypto/OPENSSL_ia32cap.pod
new file mode 100644 (file)
index 0000000..46afd19
--- /dev/null
@@ -0,0 +1,34 @@
+=pod
+
+=head1 NAME
+
+OPENSSL_ia32cap
+
+=head1 SYNOPSIS
+
+ extern unsigned long OPENSSL_ia32cap;
+ unsigned long *OPENSSL_ia32cap_loc();
+
+=head1 DESCRIPTION
+
+OPENSSL_ia32cap is a variable containing IA-32 processor capabilities
+bit vector as it appears in EDX register after executing CPUID
+instruction with EAX=1 input value (see Intel Application Note
+#241618). Naturally it's defined/meaningful on IA-32 platforms only.
+The variable is normally set up automatically upon toolkit
+initialization and can be manipulated afterwards to modify crypto
+library behaviour. For the moment of this writing only two bits are
+significant, namely bit #26 denoting SSE2 support, and bit #4 denoting
+presence of Time-Stamp Counter. Resetting bit #26 at run-time for
+example disables high-performance SSE2 code present in the crypto
+library. You might have to do this if target OpenSSL application is
+executed on SSE2 capable CPU, but under control of OS which does not
+support SSE2 extentions. Even though you can programmatically
+manipulate the value, you most likely will find it more appropriate to
+set up an environment variable with the same name prior starting target
+application, e.g. 'env OPENSSL_ia32cap=0x10 apps/openssl', to achieve
+same effect without modifying the application source code.
+Alternatively you can reconfigure the toolkit with no-sse2 option and
+recompile.
+
+=cut