aarch64: try harder when checking for the crypto extensions
This commit is contained in:
parent
17ea717fd7
commit
e2935b6943
46
configure.ac
46
configure.ac
@ -397,7 +397,28 @@ AS_IF([test "x$EMSCRIPTEN" = "x"], [
|
||||
AS_IF([test "x$target_cpu_aarch64" = "xyes"], [
|
||||
have_armcrypto=no
|
||||
AC_MSG_CHECKING(for ARM crypto instructions set)
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <arm_neon.h>]], [[ vaeseq_u8(vmovq_n_u8(0), vmovq_n_u8(__ARM_FEATURE_CRYPTO)) ]])],
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#ifdef __clang__
|
||||
# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
|
||||
#elif defined(__GNUC__)
|
||||
# pragma GCC target("+simd+crypto")
|
||||
#endif
|
||||
#ifndef __ARM_FEATURE_CRYPTO
|
||||
# define __ARM_FEATURE_CRYPTO 1
|
||||
#endif
|
||||
#ifndef __ARM_FEATURE_AES
|
||||
# define __ARM_FEATURE_AES 1
|
||||
#endif
|
||||
|
||||
#include <arm_neon.h>
|
||||
]], [[
|
||||
vaeseq_u8(vmovq_n_u8(0), vmovq_n_u8(0));
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang attribute pop
|
||||
#endif
|
||||
(void) 0
|
||||
]])],
|
||||
[
|
||||
AC_MSG_RESULT(yes)
|
||||
have_armcrypto=yes
|
||||
@ -408,7 +429,26 @@ AS_IF([test "x$EMSCRIPTEN" = "x"], [
|
||||
AX_CHECK_COMPILE_FLAG([-march=armv8-a+crypto+aes], [
|
||||
CFLAGS="$CFLAGS -march=armv8-a+crypto+aes"
|
||||
AC_MSG_CHECKING(for ARM crypto instructions set with -march=armv8-a+crypto+aes)
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <arm_neon.h>]], [[ vaeseq_u8(vmovq_n_u8(0), vmovq_n_u8(__ARM_FEATURE_CRYPTO)) ]])],
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#ifdef __clang__
|
||||
# pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
|
||||
#elif defined(__GNUC__)
|
||||
# pragma GCC target("+simd+crypto")
|
||||
#endif
|
||||
#ifndef __ARM_FEATURE_CRYPTO
|
||||
# define __ARM_FEATURE_CRYPTO 1
|
||||
#endif
|
||||
#ifndef __ARM_FEATURE_AES
|
||||
# define __ARM_FEATURE_AES 1
|
||||
#endif
|
||||
]], [[
|
||||
vaeseq_u8(vmovq_n_u8(0), vmovq_n_u8(0));
|
||||
|
||||
#ifdef __clang__
|
||||
# pragma clang attribute pop
|
||||
#endif
|
||||
(void) 0
|
||||
]])],
|
||||
[
|
||||
AC_MSG_RESULT(yes - with addition of -march=armv8-a+crypto+aes)
|
||||
have_armcrypto=yes
|
||||
@ -904,7 +944,7 @@ if (&getentropy != NULL) {
|
||||
|
||||
AS_IF([test "x$WASI" = "x"],[
|
||||
AC_CHECK_FUNCS([getpid])
|
||||
AC_CHECK_FUNCS([getauxva elf_aux_info])
|
||||
AC_CHECK_FUNCS([getauxval elf_aux_info])
|
||||
])
|
||||
|
||||
AC_CHECK_FUNCS([posix_memalign nanosleep clock_gettime])
|
||||
|
@ -19,6 +19,15 @@
|
||||
#define __vectorcall
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
|
||||
#elif defined(__GNUC__)
|
||||
#pragma GCC target("+simd+crypto")
|
||||
#endif
|
||||
|
||||
#ifndef __ARM_FEATURE_CRYPTO
|
||||
#define __ARM_FEATURE_CRYPTO 1
|
||||
#endif
|
||||
#ifndef __ARM_FEATURE_AES
|
||||
#define __ARM_FEATURE_AES 1
|
||||
#endif
|
||||
|
@ -97,7 +97,7 @@ _sodium_runtime_arm_cpu_features(CPUFeatures * const cpu_features)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if __ARM_FEATURE_CRYPTO
|
||||
#if defined(__ARM_FEATURE_CRYPTO) && defined(__ARM_FEATURE_AES)
|
||||
cpu_features->has_armcrypto = 1;
|
||||
#elif defined(_M_ARM64)
|
||||
cpu_features->has_armcrypto = 1; /* assuming all CPUs supported by ARM Windows have the crypto extensions */
|
||||
|
Loading…
Reference in New Issue
Block a user