diff options
| author | jsing <> | 2025-06-09 14:28:34 +0000 | 
|---|---|---|
| committer | jsing <> | 2025-06-09 14:28:34 +0000 | 
| commit | 011a1f76b32897df27867f465cf66a9db9a7ddf0 (patch) | |
| tree | 6c411eca3de0b4b777e48c9aba4d6dd13c8e899a /src | |
| parent | 1a0c3eab9c4462c15d6a3062e0053989404f8a8d (diff) | |
| download | openbsd-011a1f76b32897df27867f465cf66a9db9a7ddf0.tar.gz openbsd-011a1f76b32897df27867f465cf66a9db9a7ddf0.tar.bz2 openbsd-011a1f76b32897df27867f465cf66a9db9a7ddf0.zip | |
Make OPENSSL_IA32_SSE2 the default for i386 and remove the flag.
The OPENSSL_IA32_SSE2 flag controls whether a number of the perlasm
scripts generate additional implementations that use SSE2 functionality.
In all cases except ghash, the code checks OPENSSL_ia32cap_P for SSE2
support, before trying to run SSE2 code. For ghash it generates a CLMUL
based implementation in addition to different MMX version (one MMX
version hides behind OPENSSL_IA32_SSE2, the other does not), however this
does not appear to actually use SSE2. We also disable AES-NI on i386 if
OPENSSL_IA32_SSE2.
On OpenBSD, we've always defined OPENSSL_IA32_SSE2 so this is effectively
a no-op. The only change is that we now check MMX rather than SSE2 for the
ghash MMX implementation.
ok bcook@ beck@
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/arch/i386/Makefile.inc | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/bn/asm/bn-586.pl | 3 | ||||
| -rwxr-xr-x | src/lib/libcrypto/bn/asm/x86-mont.pl | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/evp/e_aes.c | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/modes/asm/ghash-x86.pl | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/modes/gcm128.c | 8 | ||||
| -rw-r--r-- | src/lib/libcrypto/sha/asm/sha1-586.pl | 5 | ||||
| -rw-r--r-- | src/lib/libcrypto/sha/asm/sha512-586.pl | 3 | 
8 files changed, 9 insertions, 23 deletions
| diff --git a/src/lib/libcrypto/arch/i386/Makefile.inc b/src/lib/libcrypto/arch/i386/Makefile.inc index 4bcf8e2bbc..e593c31467 100644 --- a/src/lib/libcrypto/arch/i386/Makefile.inc +++ b/src/lib/libcrypto/arch/i386/Makefile.inc | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | # $OpenBSD: Makefile.inc,v 1.28 2025/04/18 13:19:39 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.29 2025/06/09 14:28:33 jsing Exp $ | 
| 2 | 2 | ||
| 3 | # i386-specific libcrypto build rules | 3 | # i386-specific libcrypto build rules | 
| 4 | 4 | ||
| @@ -12,7 +12,6 @@ CFLAGS+= -DAES_ASM | |||
| 12 | SSLASM+= aes aes-586 | 12 | SSLASM+= aes aes-586 | 
| 13 | SSLASM+= aes aesni-x86 | 13 | SSLASM+= aes aesni-x86 | 
| 14 | # bn | 14 | # bn | 
| 15 | CFLAGS+= -DOPENSSL_IA32_SSE2 | ||
| 16 | SSLASM+= bn bn-586 | 15 | SSLASM+= bn bn-586 | 
| 17 | SSLASM+= bn co-586 | 16 | SSLASM+= bn co-586 | 
| 18 | CFLAGS+= -DOPENSSL_BN_ASM_MONT | 17 | CFLAGS+= -DOPENSSL_BN_ASM_MONT | 
| diff --git a/src/lib/libcrypto/bn/asm/bn-586.pl b/src/lib/libcrypto/bn/asm/bn-586.pl index 71b775af8d..19a1afdbbe 100644 --- a/src/lib/libcrypto/bn/asm/bn-586.pl +++ b/src/lib/libcrypto/bn/asm/bn-586.pl | |||
| @@ -6,8 +6,7 @@ require "x86asm.pl"; | |||
| 6 | 6 | ||
| 7 | &asm_init($ARGV[0],$0); | 7 | &asm_init($ARGV[0],$0); | 
| 8 | 8 | ||
| 9 | $sse2=0; | 9 | $sse2=1; | 
| 10 | for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } | ||
| 11 | 10 | ||
| 12 | &external_label("OPENSSL_ia32cap_P") if ($sse2); | 11 | &external_label("OPENSSL_ia32cap_P") if ($sse2); | 
| 13 | 12 | ||
| diff --git a/src/lib/libcrypto/bn/asm/x86-mont.pl b/src/lib/libcrypto/bn/asm/x86-mont.pl index 6524651748..3be440f11f 100755 --- a/src/lib/libcrypto/bn/asm/x86-mont.pl +++ b/src/lib/libcrypto/bn/asm/x86-mont.pl | |||
| @@ -32,8 +32,7 @@ require "x86asm.pl"; | |||
| 32 | 32 | ||
| 33 | &asm_init($ARGV[0],$0); | 33 | &asm_init($ARGV[0],$0); | 
| 34 | 34 | ||
| 35 | $sse2=0; | 35 | $sse2=1; | 
| 36 | for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } | ||
| 37 | 36 | ||
| 38 | &external_label("OPENSSL_ia32cap_P") if ($sse2); | 37 | &external_label("OPENSSL_ia32cap_P") if ($sse2); | 
| 39 | 38 | ||
| diff --git a/src/lib/libcrypto/evp/e_aes.c b/src/lib/libcrypto/evp/e_aes.c index 74d86c98d8..42c0fb45ed 100644 --- a/src/lib/libcrypto/evp/e_aes.c +++ b/src/lib/libcrypto/evp/e_aes.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: e_aes.c,v 1.70 2025/06/06 07:41:01 tb Exp $ */ | 1 | /* $OpenBSD: e_aes.c,v 1.71 2025/06/09 14:28:34 jsing Exp $ */ | 
| 2 | /* ==================================================================== | 2 | /* ==================================================================== | 
| 3 | * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. | 
| 4 | * | 4 | * | 
| @@ -115,7 +115,7 @@ void AES_xts_decrypt(const char *inp, char *out, size_t len, | |||
| 115 | 115 | ||
| 116 | #if defined(AES_ASM) && ( \ | 116 | #if defined(AES_ASM) && ( \ | 
| 117 | ((defined(__i386) || defined(__i386__) || \ | 117 | ((defined(__i386) || defined(__i386__) || \ | 
| 118 | defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \ | 118 | defined(_M_IX86)))|| \ | 
| 119 | defined(__x86_64) || defined(__x86_64__) || \ | 119 | defined(__x86_64) || defined(__x86_64__) || \ | 
| 120 | defined(_M_AMD64) || defined(_M_X64) || \ | 120 | defined(_M_AMD64) || defined(_M_X64) || \ | 
| 121 | defined(__INTEL__) ) | 121 | defined(__INTEL__) ) | 
| diff --git a/src/lib/libcrypto/modes/asm/ghash-x86.pl b/src/lib/libcrypto/modes/asm/ghash-x86.pl index 47833582b6..395c680cc5 100644 --- a/src/lib/libcrypto/modes/asm/ghash-x86.pl +++ b/src/lib/libcrypto/modes/asm/ghash-x86.pl | |||
| @@ -119,8 +119,7 @@ require "x86asm.pl"; | |||
| 119 | 119 | ||
| 120 | &asm_init($ARGV[0],"ghash-x86.pl",$x86only = $ARGV[$#ARGV] eq "386"); | 120 | &asm_init($ARGV[0],"ghash-x86.pl",$x86only = $ARGV[$#ARGV] eq "386"); | 
| 121 | 121 | ||
| 122 | $sse2=0; | 122 | $sse2=1; | 
| 123 | for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } | ||
| 124 | 123 | ||
| 125 | ($Zhh,$Zhl,$Zlh,$Zll) = ("ebp","edx","ecx","ebx"); | 124 | ($Zhh,$Zhl,$Zlh,$Zll) = ("ebp","edx","ecx","ebx"); | 
| 126 | $inp = "edi"; | 125 | $inp = "edi"; | 
| diff --git a/src/lib/libcrypto/modes/gcm128.c b/src/lib/libcrypto/modes/gcm128.c index 2540b7cf3d..8136c2cde2 100644 --- a/src/lib/libcrypto/modes/gcm128.c +++ b/src/lib/libcrypto/modes/gcm128.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: gcm128.c,v 1.50 2025/06/08 07:49:45 jsing Exp $ */ | 1 | /* $OpenBSD: gcm128.c,v 1.51 2025/06/09 14:28:34 jsing Exp $ */ | 
| 2 | /* ==================================================================== | 2 | /* ==================================================================== | 
| 3 | * Copyright (c) 2010 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 2010 The OpenSSL Project. All rights reserved. | 
| 4 | * | 4 | * | 
| @@ -259,7 +259,6 @@ CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block) | |||
| 259 | ctx->H.u[1] = be64toh(ctx->H.u[1]); | 259 | ctx->H.u[1] = be64toh(ctx->H.u[1]); | 
| 260 | 260 | ||
| 261 | # if defined(GHASH_ASM_X86_OR_64) | 261 | # if defined(GHASH_ASM_X86_OR_64) | 
| 262 | # if !defined(GHASH_ASM_X86) || defined(OPENSSL_IA32_SSE2) | ||
| 263 | /* check FXSR and PCLMULQDQ bits */ | 262 | /* check FXSR and PCLMULQDQ bits */ | 
| 264 | if ((crypto_cpu_caps_ia32() & (CPUCAP_MASK_FXSR | CPUCAP_MASK_PCLMUL)) == | 263 | if ((crypto_cpu_caps_ia32() & (CPUCAP_MASK_FXSR | CPUCAP_MASK_PCLMUL)) == | 
| 265 | (CPUCAP_MASK_FXSR | CPUCAP_MASK_PCLMUL)) { | 264 | (CPUCAP_MASK_FXSR | CPUCAP_MASK_PCLMUL)) { | 
| @@ -268,14 +267,9 @@ CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block) | |||
| 268 | ctx->ghash = gcm_ghash_clmul; | 267 | ctx->ghash = gcm_ghash_clmul; | 
| 269 | return; | 268 | return; | 
| 270 | } | 269 | } | 
| 271 | # endif | ||
| 272 | gcm_init_4bit(ctx->Htable, ctx->H.u); | 270 | gcm_init_4bit(ctx->Htable, ctx->H.u); | 
| 273 | # if defined(GHASH_ASM_X86) /* x86 only */ | 271 | # if defined(GHASH_ASM_X86) /* x86 only */ | 
| 274 | # if defined(OPENSSL_IA32_SSE2) | ||
| 275 | if (crypto_cpu_caps_ia32() & CPUCAP_MASK_SSE) { /* check SSE bit */ | ||
| 276 | # else | ||
| 277 | if (crypto_cpu_caps_ia32() & CPUCAP_MASK_MMX) { /* check MMX bit */ | 272 | if (crypto_cpu_caps_ia32() & CPUCAP_MASK_MMX) { /* check MMX bit */ | 
| 278 | # endif | ||
| 279 | ctx->gmult = gcm_gmult_4bit_mmx; | 273 | ctx->gmult = gcm_gmult_4bit_mmx; | 
| 280 | ctx->ghash = gcm_ghash_4bit_mmx; | 274 | ctx->ghash = gcm_ghash_4bit_mmx; | 
| 281 | } else { | 275 | } else { | 
| diff --git a/src/lib/libcrypto/sha/asm/sha1-586.pl b/src/lib/libcrypto/sha/asm/sha1-586.pl index 72dd3badb1..d2491766f3 100644 --- a/src/lib/libcrypto/sha/asm/sha1-586.pl +++ b/src/lib/libcrypto/sha/asm/sha1-586.pl | |||
| @@ -104,10 +104,7 @@ require "x86asm.pl"; | |||
| 104 | 104 | ||
| 105 | &asm_init($ARGV[0],"sha1-586.pl",$ARGV[$#ARGV] eq "386"); | 105 | &asm_init($ARGV[0],"sha1-586.pl",$ARGV[$#ARGV] eq "386"); | 
| 106 | 106 | ||
| 107 | $xmm=$ymm=0; | 107 | $xmm=$ymm=1; | 
| 108 | for (@ARGV) { $xmm=1 if (/-DOPENSSL_IA32_SSE2/); } | ||
| 109 | |||
| 110 | $ymm=1 if $xmm; | ||
| 111 | 108 | ||
| 112 | &external_label("OPENSSL_ia32cap_P") if ($xmm); | 109 | &external_label("OPENSSL_ia32cap_P") if ($xmm); | 
| 113 | 110 | ||
| diff --git a/src/lib/libcrypto/sha/asm/sha512-586.pl b/src/lib/libcrypto/sha/asm/sha512-586.pl index c1d0684e92..fe1ff487bc 100644 --- a/src/lib/libcrypto/sha/asm/sha512-586.pl +++ b/src/lib/libcrypto/sha/asm/sha512-586.pl | |||
| @@ -38,8 +38,7 @@ require "x86asm.pl"; | |||
| 38 | 38 | ||
| 39 | &asm_init($ARGV[0],"sha512-586.pl",$ARGV[$#ARGV] eq "386"); | 39 | &asm_init($ARGV[0],"sha512-586.pl",$ARGV[$#ARGV] eq "386"); | 
| 40 | 40 | ||
| 41 | $sse2=0; | 41 | $sse2=1; | 
| 42 | for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } | ||
| 43 | 42 | ||
| 44 | &external_label("OPENSSL_ia32cap_P") if ($sse2); | 43 | &external_label("OPENSSL_ia32cap_P") if ($sse2); | 
| 45 | 44 | ||
