From 2a6b6b33dfe0f3c435abf2829b62ef3f1ef12cd3 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Wed, 6 Nov 2024 14:33:46 -0800 Subject: [PATCH] GH-126458: disable SIMD for HACL under WASI (#126512) Requires an extra `-msimd128` flag and the `*mmintrin.h` header files are exclusive to x86-family CPUs. --- .../Build/2024-11-06-11-12-04.gh-issue-126458.7vzHtx.rst | 1 + configure | 6 ++++-- configure.ac | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2024-11-06-11-12-04.gh-issue-126458.7vzHtx.rst diff --git a/Misc/NEWS.d/next/Build/2024-11-06-11-12-04.gh-issue-126458.7vzHtx.rst b/Misc/NEWS.d/next/Build/2024-11-06-11-12-04.gh-issue-126458.7vzHtx.rst new file mode 100644 index 00000000000000..cc06dd8a30e30a --- /dev/null +++ b/Misc/NEWS.d/next/Build/2024-11-06-11-12-04.gh-issue-126458.7vzHtx.rst @@ -0,0 +1 @@ +Disable SIMD support for HACL under WASI. diff --git a/configure b/configure index e529527214da29..e0ab304570dfd4 100755 --- a/configure +++ b/configure @@ -30770,7 +30770,8 @@ esac # The SIMD files use aligned_alloc, which is not available on older versions of # Android. -if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then +# The *mmintrin.h headers are x86-family-specific, so can't be used on WASI. +if test "$ac_sys_system" != "Linux-android" -a "$ac_sys_system" != "WASI" || test "$ANDROID_API_LEVEL" -ge 28; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse -msse2 -msse3 -msse4.1 -msse4.2" >&5 printf %s "checking whether C compiler accepts -msse -msse2 -msse3 -msse4.1 -msse4.2... " >&6; } if test ${ax_cv_check_cflags__Werror__msse__msse2__msse3__msse4_1__msse4_2+y} @@ -30837,11 +30838,12 @@ fi # The SIMD files use aligned_alloc, which is not available on older versions of # Android. +# The *mmintrin.h headers are x86-family-specific, so can't be used on WASI. # # Although AVX support is not guaranteed on Android # (https://developer.android.com/ndk/guides/abis#86-64), this is safe because we do a # runtime CPUID check. -if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then +if test "$ac_sys_system" != "Linux-android" -a "$ac_sys_system" != "WASI" || test "$ANDROID_API_LEVEL" -ge 28; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mavx2" >&5 printf %s "checking whether C compiler accepts -mavx2... " >&6; } if test ${ax_cv_check_cflags__Werror__mavx2+y} diff --git a/configure.ac b/configure.ac index bc67a0596ac2b4..da7d1ef68eefa8 100644 --- a/configure.ac +++ b/configure.ac @@ -7853,7 +7853,8 @@ AC_SUBST([LIBHACL_CFLAGS]) # The SIMD files use aligned_alloc, which is not available on older versions of # Android. -if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then +# The *mmintrin.h headers are x86-family-specific, so can't be used on WASI. +if test "$ac_sys_system" != "Linux-android" -a "$ac_sys_system" != "WASI" || test "$ANDROID_API_LEVEL" -ge 28; then dnl This can be extended here to detect e.g. Power8, which HACL* should also support. AX_CHECK_COMPILE_FLAG([-msse -msse2 -msse3 -msse4.1 -msse4.2],[ [LIBHACL_SIMD128_FLAGS="-msse -msse2 -msse3 -msse4.1 -msse4.2"] @@ -7879,11 +7880,12 @@ AC_SUBST([LIBHACL_SIMD128_OBJS]) # The SIMD files use aligned_alloc, which is not available on older versions of # Android. +# The *mmintrin.h headers are x86-family-specific, so can't be used on WASI. # # Although AVX support is not guaranteed on Android # (https://developer.android.com/ndk/guides/abis#86-64), this is safe because we do a # runtime CPUID check. -if test "$ac_sys_system" != "Linux-android" || test "$ANDROID_API_LEVEL" -ge 28; then +if test "$ac_sys_system" != "Linux-android" -a "$ac_sys_system" != "WASI" || test "$ANDROID_API_LEVEL" -ge 28; then AX_CHECK_COMPILE_FLAG([-mavx2],[ [LIBHACL_SIMD256_FLAGS="-mavx2"] AC_DEFINE([HACL_CAN_COMPILE_SIMD256], [1], [HACL* library can compile SIMD256 implementations])