summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/arch/i386/crypto_cpu_caps.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/arch/i386/crypto_cpu_caps.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/lib/libcrypto/arch/i386/crypto_cpu_caps.c b/src/lib/libcrypto/arch/i386/crypto_cpu_caps.c
index 6bb77411af..07d60f9a3f 100644
--- a/src/lib/libcrypto/arch/i386/crypto_cpu_caps.c
+++ b/src/lib/libcrypto/arch/i386/crypto_cpu_caps.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_cpu_caps.c,v 1.3 2024/11/12 13:14:57 jsing Exp $ */ 1/* $OpenBSD: crypto_cpu_caps.c,v 1.6 2025/07/22 09:18:02 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -19,11 +19,15 @@
19 19
20#include <openssl/crypto.h> 20#include <openssl/crypto.h>
21 21
22#include "crypto_arch.h"
22#include "x86_arch.h" 23#include "x86_arch.h"
23 24
24/* Legacy architecture specific capabilities, used by perlasm. */ 25/* Legacy architecture specific capabilities, used by perlasm. */
25uint64_t OPENSSL_ia32cap_P; 26uint64_t OPENSSL_ia32cap_P;
26 27
28/* Machine dependent CPU capabilities. */
29uint64_t crypto_cpu_caps_i386;
30
27/* Machine independent CPU capabilities. */ 31/* Machine independent CPU capabilities. */
28extern uint64_t crypto_cpu_caps; 32extern uint64_t crypto_cpu_caps;
29 33
@@ -85,17 +89,23 @@ crypto_cpu_caps_init(void)
85 caps |= CPUCAP_MASK_FXSR; 89 caps |= CPUCAP_MASK_FXSR;
86 if ((edx & IA32CAP_MASK0_HT) != 0) 90 if ((edx & IA32CAP_MASK0_HT) != 0)
87 caps |= CPUCAP_MASK_HT; 91 caps |= CPUCAP_MASK_HT;
88 if ((edx & IA32CAP_MASK0_MMX) != 0) 92 if ((edx & IA32CAP_MASK0_MMX) != 0) {
89 caps |= CPUCAP_MASK_MMX; 93 caps |= CPUCAP_MASK_MMX;
94 crypto_cpu_caps_i386 |= CRYPTO_CPU_CAPS_I386_MMX;
95 }
90 if ((edx & IA32CAP_MASK0_SSE) != 0) 96 if ((edx & IA32CAP_MASK0_SSE) != 0)
91 caps |= CPUCAP_MASK_SSE; 97 caps |= CPUCAP_MASK_SSE;
92 if ((edx & IA32CAP_MASK0_SSE2) != 0) 98 if ((edx & IA32CAP_MASK0_SSE2) != 0)
93 caps |= CPUCAP_MASK_SSE2; 99 caps |= CPUCAP_MASK_SSE2;
94 100
95 if ((ecx & IA32CAP_MASK1_AESNI) != 0) 101 if ((ecx & IA32CAP_MASK1_AESNI) != 0) {
96 caps |= CPUCAP_MASK_AESNI; 102 caps |= CPUCAP_MASK_AESNI;
97 if ((ecx & IA32CAP_MASK1_PCLMUL) != 0) 103 crypto_cpu_caps_i386 |= CRYPTO_CPU_CAPS_I386_AES;
104 }
105 if ((ecx & IA32CAP_MASK1_PCLMUL) != 0) {
98 caps |= CPUCAP_MASK_PCLMUL; 106 caps |= CPUCAP_MASK_PCLMUL;
107 crypto_cpu_caps_i386 |= CRYPTO_CPU_CAPS_I386_CLMUL;
108 }
99 if ((ecx & IA32CAP_MASK1_SSSE3) != 0) 109 if ((ecx & IA32CAP_MASK1_SSSE3) != 0)
100 caps |= CPUCAP_MASK_SSSE3; 110 caps |= CPUCAP_MASK_SSSE3;
101 111
@@ -112,9 +122,3 @@ crypto_cpu_caps_init(void)
112 122
113 OPENSSL_ia32cap_P = caps; 123 OPENSSL_ia32cap_P = caps;
114} 124}
115
116uint64_t
117crypto_cpu_caps_ia32(void)
118{
119 return OPENSSL_ia32cap_P;
120}