From 7e444cb544929fa2da999ea665974d2a3a968342 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Wed, 20 May 2026 09:11:34 +0200 Subject: [PATCH] Fix GFNI detection Currently, GFNI will be activated for all x86 builds which fails on older machines (prior to skylake or Zen4). Properly detect based on CPU flags. Signed-off-by: Raymond Knopp --- CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d8b1a04a30..f791aa6004 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,14 +155,17 @@ add_boolean_option(AVX512 ${AUTODETECT_AVX512} "Whether AVX512 intrinsics is ava eval_boolean(AUTODETECT_AVX2 DEFINED CPUFLAGS AND CPUFLAGS MATCHES "avx2") add_boolean_option(AVX2 ${AUTODETECT_AVX2} "Whether AVX2 intrinsics is available on the host processor" ON) +eval_boolean(AUTODETECT_GFNI DEFINED CPUFLAGS AND CPUFLAGS MATCHES "gfni") +add_boolean_option(GFNI ${AUTODETECT_GFNI} "Whether GFNI intrinsics is available on the host processor" ON) + message(STATUS "CPU architecture is ${CMAKE_SYSTEM_PROCESSOR}") if (CROSS_COMPILE) message(STATUS "setting as aarch64") set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -gdwarf-2 -lgcc -lrt") elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") # The following intrinsics are assumed to be available on any x86 system - # (avx, f16c, fma, gnfi, mmx, pclmul, sse, sse2, sse3, xop) - set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_AVX_NATIVE -DSIMDE_X86_AVX_NATIVE -DSIMDE_X86_F16C_NATIVE -DSIMDE_X86_FMA_NATIVE -DSIMDE_X86_GFNI_NATIVE -DSIMDE_X86_MMX_NATIVE -DSIMDE_X86_PCLMUL_NATIVE -DSIMDE_X86_SSE2_NATIVE -DSIMDE_X86_SSE3_NATIVE -DSIMDE_X86_SSE_NATIVE -DSIMDE_X86_XOP_HAVE_COM_ -DSIMDE_X86_XOP_NATIVE") + # (avx, f16c, fma, mmx, pclmul, sse, sse2, sse3, xop) + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_AVX_NATIVE -DSIMDE_X86_AVX_NATIVE -DSIMDE_X86_F16C_NATIVE -DSIMDE_X86_FMA_NATIVE -DSIMDE_X86_MMX_NATIVE -DSIMDE_X86_PCLMUL_NATIVE -DSIMDE_X86_SSE2_NATIVE -DSIMDE_X86_SSE3_NATIVE -DSIMDE_X86_SSE_NATIVE -DSIMDE_X86_XOP_HAVE_COM_ -DSIMDE_X86_XOP_NATIVE") message(STATUS "AVX512 intrinsics are ${AVX512}") if(${AVX512}) set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_AVX512BW_NATIVE -DSIMDE_X86_AVX512F_NATIVE -DSIMDE_X86_AVX512VL_NATIVE -mavx512bw -march=skylake-avx512 -mtune=skylake-avx512") @@ -173,6 +176,10 @@ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") if(${AVX2}) set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_AVX2_NATIVE -DSIMDE_X86_VPCLMULQDQ_NATIVE") endif() + message(STATUS "GFNI intrinsics are ${GFNI}") + if(${GFNI}) + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_GFNI_NATIVE -mgfni") + endif() if (CPUINFO MATCHES "sse4_1") set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_SSE4_1_NATIVE") endif()