summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/armcap.c
diff options
context:
space:
mode:
authorpatrick <>2019-03-13 10:18:30 +0000
committerpatrick <>2019-03-13 10:18:30 +0000
commitc8b032d94e020218d5131e77fbf235f86e40d682 (patch)
tree6dadd834bed727ad5c50b373566559b87fd8a447 /src/lib/libcrypto/armcap.c
parent0f055359dd96a64079ae31ef2dc039c5e13b4a5f (diff)
downloadopenbsd-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.c21
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 */
24void _armv7_neon_probe(void); 24void _armv7_neon_probe(void);
25void _armv8_aes_probe(void);
26void _armv8_sha1_probe(void);
27void _armv8_sha256_probe(void);
28void _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);