diff options
author | Andy Polyakov <appro@openssl.org> | 2014-05-04 10:55:49 +0200 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2014-06-10 22:47:19 +0200 |
commit | 3da2c3df78860e52eda782676697dc8344327edf (patch) | |
tree | 65f863ed2c19302231670d183cfbd7f993cc3a3c /crypto/armcap.c | |
parent | 4ceddeea6c626a922e1b8f54b6fe1d2b89f8ef90 (diff) |
crypto/armcap.c: detect ARMv8 capabilities [in 32-bit build].
(cherry picked from commit 4afa9f033dd58465b4c2d119a9d8cd737edeba26)
Diffstat (limited to 'crypto/armcap.c')
-rw-r--r-- | crypto/armcap.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/crypto/armcap.c b/crypto/armcap.c index 9abaf396e5..550414425d 100644 --- a/crypto/armcap.c +++ b/crypto/armcap.c @@ -19,6 +19,10 @@ static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } * ARM compilers support inline assembler... */ void _armv7_neon_probe(void); +void _armv8_aes_probe(void); +void _armv8_sha1_probe(void); +void _armv8_sha256_probe(void); +void _armv8_pmull_probe(void); unsigned int _armv7_tick(void); unsigned int OPENSSL_rdtsc(void) @@ -68,6 +72,26 @@ void OPENSSL_cpuid_setup(void) { _armv7_neon_probe(); OPENSSL_armcap_P |= ARMV7_NEON; + if (sigsetjmp(ill_jmp,1) == 0) + { + _armv8_aes_probe(); + OPENSSL_armcap_P |= ARMV8_AES; + } + if (sigsetjmp(ill_jmp,1) == 0) + { + _armv8_sha1_probe(); + OPENSSL_armcap_P |= ARMV8_SHA1; + } + if (sigsetjmp(ill_jmp,1) == 0) + { + _armv8_sha256_probe(); + OPENSSL_armcap_P |= ARMV8_SHA256; + } + if (sigsetjmp(ill_jmp,1) == 0) + { + _armv8_pmull_probe(); + OPENSSL_armcap_P |= ARMV8_PMULL; + } } if (sigsetjmp(ill_jmp,1) == 0) { |