1
mirror of https://github.com/jedisct1/libsodium.git synced 2024-12-19 10:05:05 -07:00

aarch64: try harder when checking for the crypto extensions

This commit is contained in:
Frank Denis 2023-09-12 14:33:29 +02:00
parent 1074191f87
commit 8b1f568cb1
5 changed files with 61 additions and 6 deletions

View File

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

View File

@ -20,9 +20,12 @@
#ifdef __clang__
#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
#elif defined(__GNUC__)
#pragma GCC target("neon,crypto,aes")
#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

View File

@ -20,9 +20,12 @@
#ifdef __clang__
#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
#elif defined(__GNUC__)
#pragma GCC target("neon,crypto,aes")
#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

View File

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

View File

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