diff --git a/crypto/cpu-arm.c b/crypto/cpu-arm.c index 14ad2ee4f..675d174e4 100644 --- a/crypto/cpu-arm.c +++ b/crypto/cpu-arm.c @@ -34,7 +34,7 @@ unsigned long getauxval(unsigned long type) __attribute__((weak)); extern uint32_t OPENSSL_armcap_P; -char CRYPTO_is_NEON_capable(void) { +char CRYPTO_is_NEON_capable_at_runtime(void) { return (OPENSSL_armcap_P & ARMV7_NEON) != 0; } diff --git a/include/openssl/cpu.h b/include/openssl/cpu.h index 19e11d048..e946304a3 100644 --- a/include/openssl/cpu.h +++ b/include/openssl/cpu.h @@ -102,10 +102,20 @@ extern uint32_t OPENSSL_ia32cap_P[4]; #if !defined(OPENSSL_STATIC_ARMCAP) -/* CRYPTO_is_NEON_capable returns true if the current CPU has a NEON unit. Note - * that |OPENSSL_armcap_P| also exists and contains the same information in a - * form that's easier for assembly to use. */ -OPENSSL_EXPORT char CRYPTO_is_NEON_capable(void); +/* CRYPTO_is_NEON_capable_at_runtime returns true if the current CPU has a NEON + * unit. Note that |OPENSSL_armcap_P| also exists and contains the same + * information in a form that's easier for assembly to use. */ +OPENSSL_EXPORT char CRYPTO_is_NEON_capable_at_runtime(void); + +/* CRYPTO_is_NEON_capable returns true if the current CPU has a NEON unit. If + * this is known statically then it returns one immediately. */ +static inline int CRYPTO_is_NEON_capable(void) { +#if defined(__ARM_NEON__) + return 1; +#else + return CRYPTO_is_NEON_capable_at_runtime(); +#endif +} /* CRYPTO_set_NEON_capable sets the return value of |CRYPTO_is_NEON_capable|. * By default, unless the code was compiled with |-mfpu=neon|, NEON is assumed