diff options
author | patrick <> | 2019-03-13 10:18:30 +0000 |
---|---|---|
committer | patrick <> | 2019-03-13 10:18:30 +0000 |
commit | c8b032d94e020218d5131e77fbf235f86e40d682 (patch) | |
tree | 6dadd834bed727ad5c50b373566559b87fd8a447 /src/lib/libcrypto/armcap.c | |
parent | 0f055359dd96a64079ae31ef2dc039c5e13b4a5f (diff) | |
download | openbsd-c8b032d94e020218d5131e77fbf235f86e40d682.tar.gz openbsd-c8b032d94e020218d5131e77fbf235f86e40d682.tar.bz2 openbsd-c8b032d94e020218d5131e77fbf235f86e40d682.zip |
Backport support for probing ARMv8 HW acceleration capabilities on armv7
in preparation for adding support for the probing code for arm64.
ok bcook@
Diffstat (limited to 'src/lib/libcrypto/armcap.c')
-rw-r--r-- | src/lib/libcrypto/armcap.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/lib/libcrypto/armcap.c b/src/lib/libcrypto/armcap.c index 3fda185326..8c4983280e 100644 --- a/src/lib/libcrypto/armcap.c +++ b/src/lib/libcrypto/armcap.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: armcap.c,v 1.7 2018/11/11 03:27:56 bcook Exp $ */ | 1 | /* $OpenBSD: armcap.c,v 1.8 2019/03/13 10:18:30 patrick Exp $ */ |
2 | #include <stdio.h> | 2 | #include <stdio.h> |
3 | #include <stdlib.h> | 3 | #include <stdlib.h> |
4 | #include <string.h> | 4 | #include <string.h> |
@@ -22,6 +22,10 @@ static sigjmp_buf ill_jmp; | |||
22 | * ARM compilers support inline assembler... | 22 | * ARM compilers support inline assembler... |
23 | */ | 23 | */ |
24 | void _armv7_neon_probe(void); | 24 | void _armv7_neon_probe(void); |
25 | void _armv8_aes_probe(void); | ||
26 | void _armv8_sha1_probe(void); | ||
27 | void _armv8_sha256_probe(void); | ||
28 | void _armv8_pmull_probe(void); | ||
25 | #endif | 29 | #endif |
26 | 30 | ||
27 | #if defined(__GNUC__) && __GNUC__>=2 | 31 | #if defined(__GNUC__) && __GNUC__>=2 |
@@ -61,6 +65,21 @@ OPENSSL_cpuid_setup(void) | |||
61 | if (sigsetjmp(ill_jmp, 1) == 0) { | 65 | if (sigsetjmp(ill_jmp, 1) == 0) { |
62 | _armv7_neon_probe(); | 66 | _armv7_neon_probe(); |
63 | OPENSSL_armcap_P |= ARMV7_NEON; | 67 | OPENSSL_armcap_P |= ARMV7_NEON; |
68 | if (sigsetjmp(ill_jmp, 1) == 0) { | ||
69 | _armv8_pmull_probe(); | ||
70 | OPENSSL_armcap_P |= ARMV8_PMULL | ARMV8_AES; | ||
71 | } else if (sigsetjmp(ill_jmp, 1) == 0) { | ||
72 | _armv8_aes_probe(); | ||
73 | OPENSSL_armcap_P |= ARMV8_AES; | ||
74 | } | ||
75 | if (sigsetjmp(ill_jmp, 1) == 0) { | ||
76 | _armv8_sha1_probe(); | ||
77 | OPENSSL_armcap_P |= ARMV8_SHA1; | ||
78 | } | ||
79 | if (sigsetjmp(ill_jmp, 1) == 0) { | ||
80 | _armv8_sha256_probe(); | ||
81 | OPENSSL_armcap_P |= ARMV8_SHA256; | ||
82 | } | ||
64 | } | 83 | } |
65 | 84 | ||
66 | sigaction (SIGILL, &ill_oact, NULL); | 85 | sigaction (SIGILL, &ill_oact, NULL); |