diff options
| author | patrick <> | 2019-03-13 10:18:30 +0000 |
|---|---|---|
| committer | patrick <> | 2019-03-13 10:18:30 +0000 |
| commit | 96e62a13a6d04fbc03969ab4a0627800a44f8342 (patch) | |
| tree | 6dadd834bed727ad5c50b373566559b87fd8a447 /src/lib/libcrypto/armcap.c | |
| parent | a2c7f1590e65b6f0be62929015b816fb15bc9fff (diff) | |
| download | openbsd-96e62a13a6d04fbc03969ab4a0627800a44f8342.tar.gz openbsd-96e62a13a6d04fbc03969ab4a0627800a44f8342.tar.bz2 openbsd-96e62a13a6d04fbc03969ab4a0627800a44f8342.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); |
