Allow |CRYPTO_is_NEON_capable| to be known at compile time, if possible.
If -mfpu=neon is passed then we don't need to worry about checking for NEON support at run time. This change allows |CRYPTO_is_NEON_capable| to statically return 1 in this case. This then allows the compiler to discard generic code in several cases. Change-Id: I3b229740ea3d5cb0a304f365c400a0996d0c66ef Reviewed-on: https://boringssl-review.googlesource.com/6523 Reviewed-by: David Benjamin <davidben@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
3ac32b1eda
commit
9e65d487b8
@ -34,7 +34,7 @@ unsigned long getauxval(unsigned long type) __attribute__((weak));
|
|||||||
|
|
||||||
extern uint32_t OPENSSL_armcap_P;
|
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;
|
return (OPENSSL_armcap_P & ARMV7_NEON) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,10 +102,20 @@ extern uint32_t OPENSSL_ia32cap_P[4];
|
|||||||
|
|
||||||
#if !defined(OPENSSL_STATIC_ARMCAP)
|
#if !defined(OPENSSL_STATIC_ARMCAP)
|
||||||
|
|
||||||
/* CRYPTO_is_NEON_capable returns true if the current CPU has a NEON unit. Note
|
/* CRYPTO_is_NEON_capable_at_runtime returns true if the current CPU has a NEON
|
||||||
* that |OPENSSL_armcap_P| also exists and contains the same information in a
|
* unit. Note that |OPENSSL_armcap_P| also exists and contains the same
|
||||||
* form that's easier for assembly to use. */
|
* information in a form that's easier for assembly to use. */
|
||||||
OPENSSL_EXPORT char CRYPTO_is_NEON_capable(void);
|
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|.
|
/* 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
|
* By default, unless the code was compiled with |-mfpu=neon|, NEON is assumed
|
||||||
|
Loading…
Reference in New Issue
Block a user