diff --git a/Makefile.am b/Makefile.am index 436315d43..2d9fcd07f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -201,7 +201,10 @@ if BUILD_LINUXKM export KERNEL_ROOT KERNEL_ARCH KERNEL_EXTRA_CFLAGS AM_CFLAGS CFLAGS AM_CCASFLAGS CCASFLAGS \ src_libwolfssl_la_OBJECTS ENABLED_CRYPT_TESTS ENABLED_ASM CFLAGS_FPU_DISABLE \ CFLAGS_FPU_ENABLE CFLAGS_SIMD_DISABLE CFLAGS_SIMD_ENABLE \ - CFLAGS_AUTO_VECTORIZE_DISABLE CFLAGS_AUTO_VECTORIZE_ENABLE + CFLAGS_AUTO_VECTORIZE_DISABLE CFLAGS_AUTO_VECTORIZE_ENABLE \ + ASFLAGS_FPU_DISABLE_SIMD_ENABLE ASFLAGS_FPU_ENABLE_SIMD_DISABLE \ + ASFLAGS_FPUSIMD_DISABLE ASFLAGS_FPUSIMD_ENABLE + SUBDIRS = linuxkm endif diff --git a/configure.ac b/configure.ac index dea00633e..e85242c5f 100644 --- a/configure.ac +++ b/configure.ac @@ -5357,6 +5357,10 @@ if test "x$ENABLED_LINUXKM" = "xyes"; then AC_SUBST([CFLAGS_SIMD_ENABLE]) AC_SUBST([CFLAGS_AUTO_VECTORIZE_DISABLE]) AC_SUBST([CFLAGS_AUTO_VECTORIZE_ENABLE]) + AC_SUBST([ASFLAGS_FPU_DISABLE_SIMD_ENABLE]) + AC_SUBST([ASFLAGS_FPU_ENABLE_SIMD_DISABLE]) + AC_SUBST([ASFLAGS_FPUSIMD_DISABLE]) + AC_SUBST([ASFLAGS_FPUSIMD_ENABLE]) if test "$ENABLED_AFALG" = "yes"; then AC_MSG_ERROR([--enable-afalg is incompatible with --enable-linuxkm.]) @@ -5673,7 +5677,11 @@ echo " * fpu enable C flags: $CFLAGS_FPU_ENABLE" && \ echo " * SIMD disable C flags: $CFLAGS_SIMD_DISABLE" && \ echo " * SIMD enable C flags: $CFLAGS_SIMD_ENABLE" && \ echo " * No-auto-vectorize C flags: $CFLAGS_AUTO_VECTORIZE_DISABLE" && \ -echo " * Auto-vectorize C flags: $CFLAGS_AUTO_VECTORIZE_ENABLE" +echo " * Auto-vectorize C flags: $CFLAGS_AUTO_VECTORIZE_ENABLE" && \ +echo " * SIMD enable as flags: $ASFLAGS_FPU_DISABLE_SIMD_ENABLE" && \ +echo " * FPU enable as flags: $ASFLAGS_FPU_ENABLE_SIMD_DISABLE" && \ +echo " * SIMD+FPU disable as flags: $ASFLAGS_FPUSIMD_DISABLE" && \ +echo " * SIMD+FPU enable as flags: $ASFLAGS_FPUSIMD_ENABLE" echo " * Debug enabled: $ax_enable_debug" echo " * Coverage enabled: $ax_enable_coverage" echo " * Warnings as failure: $ac_cv_warnings_as_errors" diff --git a/m4/ax_linuxkm.m4 b/m4/ax_linuxkm.m4 index 60ffbe8d0..6bba14254 100644 --- a/m4/ax_linuxkm.m4 +++ b/m4/ax_linuxkm.m4 @@ -96,5 +96,53 @@ AC_DEFUN([AX_SIMD_CC_COMPILER_FLAGS], [ AX_APPEND_COMPILE_FLAGS([-ftree-slp-vectorize],[CFLAGS_AUTO_VECTORIZE_ENABLE]) fi + case "$host_cpu" in + x86_64) + # note that gnu as accepts archs of the form -march=+no387, signifying the + # default target arch modified with no387. by default, we use that here. + if test "$ASFLAGS_FPU_DISABLE_SIMD_ENABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+no87+no287+no387+no687+sse+sse2+sse3+ssse3+sse4.1+sse4.2+sse4+avx+avx2+avx512f"],[ASFLAGS_FPU_DISABLE_SIMD_ENABLE]) + fi + + if test "$ASFLAGS_FPU_ENABLE_SIMD_DISABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+387+687+nosse+nosse2+nosse3+nossse3+nosse4.1+nosse4.2+nosse4+noavx+noavx2+noavx512f"],[ASFLAGS_FPU_ENABLE_SIMD_DISABLE]) + fi + + if test "$ASFLAGS_FPUSIMD_DISABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+no387+no687+nosse+nosse2+nosse3+nossse3+nosse4.1+nosse4.2+nosse4+noavx+noavx2+noavx512f"],[ASFLAGS_FPUSIMD_DISABLE]) + fi + + if test "$ASFLAGS_FPUSIMD_ENABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+387+687+sse+sse2+sse3+ssse3+sse4.1+sse4.2+sse4+avx+avx2+avx512f"],[ASFLAGS_FPUSIMD_ENABLE]) + fi + + ;; + aarch64) + if test "$BASE_TARGET_ARCH" = ""; then + BASE_TARGET_ARCH=all + fi + + if test "$ASFLAGS_FPU_DISABLE_SIMD_ENABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+nofpu+simd"],[ASFLAGS_FPU_DISABLE_SIMD_ENABLE]) + fi + + if test "$ASFLAGS_FPU_ENABLE_SIMD_DISABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+fpu+nosimd"],[ASFLAGS_FPU_ENABLE_SIMD_DISABLE]) + fi + + if test "$ASFLAGS_FPUSIMD_DISABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+nofpu+nosimd"],[ASFLAGS_FPUSIMD_DISABLE]) + fi + + if test "$ASFLAGS_FPUSIMD_ENABLE" = ""; then + AX_APPEND_COMPILE_FLAGS([-Wa,-march="${BASE_TARGET_ARCH}+fpu+simd"],[$ASFLAGS_FPUSIMD_ENABLE]) + fi + + ;; + *) + AC_MSG_ERROR(["Don\'t know how to construct assembler flags for target \"${host_cpu}\"."]) + ;; + esac + AC_LANG_POP ])