Selaa lähdekoodia

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>
kris/onging/CECPQ3_patch15
Adam Langley 9 vuotta sitten
vanhempi
commit
9e65d487b8
2 muutettua tiedostoa jossa 15 lisäystä ja 5 poistoa
  1. +1
    -1
      crypto/cpu-arm.c
  2. +14
    -4
      include/openssl/cpu.h

+ 1
- 1
crypto/cpu-arm.c Näytä tiedosto

@@ -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;
}



+ 14
- 4
include/openssl/cpu.h Näytä tiedosto

@@ -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


Ladataan…
Peruuta
Tallenna