Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/boringssl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'crypto')
-rw-r--r--crypto/cpu-arm-asm.S4
-rw-r--r--crypto/cpu-arm.c21
2 files changed, 18 insertions, 7 deletions
diff --git a/crypto/cpu-arm-asm.S b/crypto/cpu-arm-asm.S
index 7941f5f0..faf3ad89 100644
--- a/crypto/cpu-arm-asm.S
+++ b/crypto/cpu-arm-asm.S
@@ -12,7 +12,7 @@
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#if !defined(OPENSSL_NO_ASM)
+#if !defined(OPENSSL_NO_ASM) && defined(__arm__)
.syntax unified
.cpu cortex-a8
@@ -29,4 +29,4 @@ CRYPTO_arm_neon_probe:
bx lr
.section .note.GNU-stack,"",%progbits
-#endif /* !OPENSSL_NO_ASM */
+#endif /* !OPENSSL_NO_ASM && __arm__ */
diff --git a/crypto/cpu-arm.c b/crypto/cpu-arm.c
index 5ecdb1a3..8ca60fbf 100644
--- a/crypto/cpu-arm.c
+++ b/crypto/cpu-arm.c
@@ -62,6 +62,8 @@ void CRYPTO_set_NEON_functional(char neon_functional) {
}
}
+#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM)
+
static sigjmp_buf sigill_jmp;
static void sigill_handler(int signal) {
@@ -76,7 +78,6 @@ void CRYPTO_arm_neon_probe();
static int probe_for_NEON() {
int supported = 0;
-#if !defined(OPENSSL_NO_ASM)
sigset_t sigmask;
sigfillset(&sigmask);
sigdelset(&sigmask, SIGILL);
@@ -109,16 +110,26 @@ static int probe_for_NEON() {
sigaction(SIGILL, &sigill_original_action, NULL);
sigprocmask(SIG_SETMASK, &original_sigmask, NULL);
-#endif
return supported;
}
+#else
+
+static int probe_for_NEON() {
+ return 0;
+}
+
+#endif /* !OPENSSL_NO_ASM && OPENSSL_ARM */
+
void OPENSSL_cpuid_setup(void) {
if (getauxval == NULL) {
- // |CRYPTO_is_NEON_capable| can be true even if |CRYPTO_set_NEON_capable|
- // has never been called if the code was compiled with NEON support enabled
- // (e.g. -mfpu=neon).
+ // On ARM, but not AArch64, try a NEON instruction and see whether it works
+ // in order to probe for NEON support.
+ //
+ // Note that |CRYPTO_is_NEON_capable| can be true even if
+ // |CRYPTO_set_NEON_capable| has never been called if the code was compiled
+ // with NEON support enabled (e.g. -mfpu=neon).
if (!g_set_neon_called && !CRYPTO_is_NEON_capable() && probe_for_NEON()) {
OPENSSL_armcap_P |= ARMV7_NEON;
}