>>> Miod Vallat 4-Nov-16 08:53 >>>
>
> I386_ONLY was used to prefer a different assembler sequence in the
> sha512 code, which would be faster on 80386 processors, but slower on
> 80486 and above.
>
> This code path has never been enabled, and there are actually no plans
> to make libcrypto friendlier to genuine 80386 chips, so why bother
> keeping this - it's only contributing to obfuscation.
... not to mention that OpenBSD hasn't supported the 386 for a long time now
ok tom@
> Index: cryptlib.c
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/cryptlib.c,v
> retrieving revision 1.37
> diff -u -p -r1.37 cryptlib.c
> --- cryptlib.c 13 Sep 2015 16:56:11 -0000 1.37
> +++ cryptlib.c 4 Nov 2016 08:49:22 -0000
> @@ -635,7 +635,7 @@ OPENSSL_cpu_caps(void)
> return *(uint64_t *)OPENSSL_ia32cap_P;
> }
>
> -#if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) &&
> !defined(I386_ONLY)
> +#if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM)
> #define OPENSSL_CPUID_SETUP
> typedef unsigned long long IA32CAP;
> void
> Index: md32_common.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/md32_common.h,v
> retrieving revision 1.21
> diff -u -p -r1.21 md32_common.h
> --- md32_common.h 4 Sep 2016 14:31:29 -0000 1.21
> +++ md32_common.h 4 Nov 2016 08:49:22 -0000
> @@ -152,8 +152,8 @@ static inline uint32_t ROTATE(uint32_t a
> #if defined(DATA_ORDER_IS_BIG_ENDIAN)
>
> #if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) &&
> !defined(OPENSSL_NO_INLINE_ASM)
> -# if ((defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)) || \
> - (defined(__x86_64) || defined(__x86_64__))
> +# if (defined(__i386) || defined(__i386__) || \
> + defined(__x86_64) || defined(__x86_64__))
> /*
> * This gives ~30-40% performance improvement in SHA-256 compiled
> * with gcc [on P4]. Well, first macro to be frank. We can pull
> Index: arch/alpha/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/alpha/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/alpha/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/alpha/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/amd64/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/amd64/opensslconf.h,v
> retrieving revision 1.9
> diff -u -p -r1.9 opensslconf.h
> --- arch/amd64/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.9
> +++ arch/amd64/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/arm/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/arm/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/arm/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/arm/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/hppa/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/hppa/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/hppa/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/hppa/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/i386/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/i386/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/i386/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/i386/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/m88k/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/m88k/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/m88k/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/m88k/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/mips64/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/mips64/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/mips64/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/mips64/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/powerpc/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/powerpc/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/powerpc/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/powerpc/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/sh/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/sh/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/sh/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/sh/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/sparc/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/sparc/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/sparc/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/sparc/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: arch/sparc64/opensslconf.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/arch/sparc64/opensslconf.h,v
> retrieving revision 1.7
> diff -u -p -r1.7 opensslconf.h
> --- arch/sparc64/opensslconf.h 19 Jun 2015 06:05:11 -0000 1.7
> +++ arch/sparc64/opensslconf.h 4 Nov 2016 08:49:22 -0000
> @@ -1,9 +1,6 @@
> #include <openssl/opensslfeatures.h>
> /* crypto/opensslconf.h.in */
>
> -/* Generate 80386 code? */
> -#undef I386_ONLY
> -
> #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
> #define OPENSSLDIR "/etc/ssl"
> #endif
> Index: engine/eng_padlock.c
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/engine/eng_padlock.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 eng_padlock.c
> --- engine/eng_padlock.c 7 Feb 2015 13:19:15 -0000 1.14
> +++ engine/eng_padlock.c 4 Nov 2016 08:49:23 -0000
> @@ -100,7 +100,7 @@
> In addition, because of the heavy use of inline assembler,
> compiler choice is limited to GCC and Microsoft C. */
> #undef COMPILE_HW_PADLOCK
> -#if !defined(I386_ONLY) && !defined(OPENSSL_NO_INLINE_ASM)
> +#if !defined(OPENSSL_NO_INLINE_ASM)
> # if (defined(__GNUC__) && (defined(__i386__) || defined(__i386)))
> # define COMPILE_HW_PADLOCK
> # endif
> Index: evp/e_aes.c
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/evp/e_aes.c,v
> retrieving revision 1.29
> diff -u -p -r1.29 e_aes.c
> --- evp/e_aes.c 10 Sep 2015 15:56:25 -0000 1.29
> +++ evp/e_aes.c 4 Nov 2016 08:49:23 -0000
> @@ -143,14 +143,14 @@ void AES_xts_decrypt(const char *inp, ch
> const AES_KEY *key1, const AES_KEY *key2, const unsigned char iv[16]);
> #endif
>
> -#if defined(AES_ASM) && !defined(I386_ONLY) && ( \
> +#if defined(AES_ASM) && ( \
> ((defined(__i386) || defined(__i386__) || \
> defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
> defined(__x86_64) || defined(__x86_64__) || \
> defined(_M_AMD64) || defined(_M_X64) || \
> defined(__INTEL__) )
>
> -extern unsigned int OPENSSL_ia32cap_P[2];
> +extern unsigned int OPENSSL_ia32cap_P[];
>
> #ifdef VPAES_ASM
> #define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
> Index: modes/gcm128.c
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/modes/gcm128.c,v
> retrieving revision 1.13
> diff -u -p -r1.13 gcm128.c
> --- modes/gcm128.c 10 Sep 2015 15:56:25 -0000 1.13
> +++ modes/gcm128.c 4 Nov 2016 08:49:23 -0000
> @@ -638,8 +638,7 @@ static void gcm_gmult_1bit(u64 Xi[2],con
> #endif
>
> #if TABLE_BITS==4 && defined(GHASH_ASM)
> -# if !defined(I386_ONLY) && \
> - (defined(__i386) || defined(__i386__) || \
> +# if (defined(__i386) || defined(__i386__) || \
> defined(__x86_64) || defined(__x86_64__) || \
> defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
> # define GHASH_ASM_X86_OR_64
> Index: modes/modes_lcl.h
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/modes/modes_lcl.h,v
> retrieving revision 1.8
> diff -u -p -r1.8 modes_lcl.h
> --- modes/modes_lcl.h 10 Jul 2014 22:45:57 -0000 1.8
> +++ modes/modes_lcl.h 4 Nov 2016 08:49:23 -0000
> @@ -34,7 +34,7 @@ typedef unsigned char u8;
> # define BSWAP4(x) ({ u32 ret=(x); \
> asm ("bswapl %0" \
> : "+r"(ret)); ret; })
> -# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)
> +# elif (defined(__i386) || defined(__i386__))
> # define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
> asm ("bswapl %0; bswapl %1" \
> : "+r"(hi),"+r"(lo)); \
> Index: sha/sha512.c
> ===================================================================
> RCS file: /cvs/src/lib/libcrypto/sha/sha512.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 sha512.c
> --- sha/sha512.c 10 Sep 2015 15:56:26 -0000 1.14
> +++ sha/sha512.c 4 Nov 2016 08:49:23 -0000
> @@ -320,23 +320,12 @@ static const SHA_LONG64 K512[80] = {
> : "=r"(ret) \
> : "0"(ret)); ret; })
> # elif (defined(__i386) || defined(__i386__))
> -# if defined(I386_ONLY)
> -# define PULL64(x) ({ const unsigned int *p=(const unsigned int *)(&(x));\
> - unsigned int hi=p[0],lo=p[1]; \
> - asm("xchgb %%ah,%%al;xchgb %%dh,%%dl;"\
> - "roll $16,%%eax; roll $16,%%edx; "\
> - "xchgb %%ah,%%al;xchgb %%dh,%%dl;" \
> - : "=a"(lo),"=d"(hi) \
> - : "0"(lo),"1"(hi) : "cc"); \
> - ((SHA_LONG64)hi)<<32|lo; })
> -# else
> # define PULL64(x) ({ const unsigned int *p=(const unsigned int *)(&(x));\
> unsigned int hi=p[0],lo=p[1]; \
> asm ("bswapl %0; bswapl %1;" \
> : "=r"(lo),"=r"(hi) \
> : "0"(lo),"1"(hi)); \
> ((SHA_LONG64)hi)<<32|lo; })
> -# endif
> # elif (defined(_ARCH_PPC) && defined(__64BIT__)) || defined(_ARCH_PPC64)
> # define ROTR(a,n) ({ SHA_LONG64 ret; \
> asm ("rotrdi %0,%1,%2" \