X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Farmcap.c;h=550414425d6bd9a8d1c56a5ac377abe03e57ac95;hp=8dbd7410878a8c36f019475dc807a8165cd8d29f;hb=0bcb17a7776b7f740e855932890edfb7acfd7124;hpb=033a25cef59de7ab4b9fdbfab96f683e2b79d4e9 diff --git a/crypto/armcap.c b/crypto/armcap.c index 8dbd741087..550414425d 100644 --- a/crypto/armcap.c +++ b/crypto/armcap.c @@ -19,18 +19,22 @@ 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) { - if (OPENSSL_armcap_P|ARMV7_TICK) + if (OPENSSL_armcap_P & ARMV7_TICK) return _armv7_tick(); else return 0; } #if defined(__GNUC__) && __GNUC__>=2 -void OPENSSL_cpuid_setup(void) __attribute__((constructor)) +void OPENSSL_cpuid_setup(void) __attribute__((constructor)); #endif void OPENSSL_cpuid_setup(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) {