option(BUILD_AVX512 "Experimental: support avx512 in the fat runtime"
OFF)
+option(BUILD_AVX512VBMI "Experimental: support avx512vbmi in the fat runtime"
+ OFF)
+
+if (BUILD_AVX512VBMI)
+ set(BUILD_AVX512 ON)
+endif ()
+
option(WINDOWS_ICC "Use Intel C++ Compiler on Windows, default off, requires ICC to be set in project" OFF)
# TODO: per platform config files?
set(SKYLAKE_FLAG "-xCORE-AVX512")
else ()
set(SKYLAKE_FLAG "-march=skylake-avx512")
+ set(ICELAKE_FLAG "-march=icelake-server")
endif ()
endif()
if (BUILD_AVX512)
add_library(hs_exec_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_avx512>)
- set_target_properties(hs_exec_avx512 PROPERTIES
- COMPILE_FLAGS "${SKYLAKE_FLAG}"
- RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
- )
+ if (BUILD_AVX512VBMI)
+ set_target_properties(hs_exec_avx512 PROPERTIES
+ COMPILE_FLAGS "${ICELAKE_FLAG}"
+ RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
+ )
+ else ()
+ set_target_properties(hs_exec_avx512 PROPERTIES
+ COMPILE_FLAGS "${SKYLAKE_FLAG}"
+ RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
+ )
+ endif (BUILD_AVX512VBMI)
endif (BUILD_AVX512)
add_library(hs_exec_common OBJECT
if (BUILD_AVX512)
add_library(hs_exec_shared_avx512 OBJECT ${hs_exec_SRCS} ${hs_exec_avx2_SRCS})
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_avx512>)
- set_target_properties(hs_exec_shared_avx512 PROPERTIES
- COMPILE_FLAGS "${SKYLAKE_FLAG}"
- POSITION_INDEPENDENT_CODE TRUE
- RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
- )
+ if (BUILD_AVX512VBMI)
+ set_target_properties(hs_exec_shared_avx512 PROPERTIES
+ COMPILE_FLAGS "${ICELAKE_FLAG}"
+ POSITION_INDEPENDENT_CODE TRUE
+ RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
+ )
+ else ()
+ set_target_properties(hs_exec_shared_avx512 PROPERTIES
+ COMPILE_FLAGS "${SKYLAKE_FLAG}"
+ POSITION_INDEPENDENT_CODE TRUE
+ RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} avx512 ${CMAKE_MODULE_PATH}/keep.syms.in"
+ )
+ endif (BUILD_AVX512VBMI)
endif (BUILD_AVX512)
add_library(hs_exec_common_shared OBJECT
${hs_exec_common_SRCS}
if (FAT_RUNTIME)
# test the highest level microarch to make sure everything works
if (BUILD_AVX512)
- set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${SKYLAKE_FLAG}")
+ if (BUILD_AVX512VBMI)
+ set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${ICELAKE_FLAG}")
+ else ()
+ set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${SKYLAKE_FLAG}")
+ endif (BUILD_AVX512VBMI)
else ()
set (CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} -march=core-avx2")
endif ()
if ((ARCH_IA32 OR ARCH_X86_64) AND BUILD_AVX512 AND NOT HAVE_AVX512)
message(FATAL_ERROR "AVX512 support requested but not supported")
endif ()
+ if (BUILD_AVX512VBMI AND NOT HAVE_AVX512VBMI)
+ message(FATAL_ERROR "AVX512VBMI support requested but not supported")
+ endif ()
else (NOT FAT_RUNTIME)
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX2)
message(STATUS "Building without AVX2 support")
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_AVX512)
message(STATUS "Building without AVX512 support")
endif ()
+ if (ARCH_IA32 OR ARCH_X86_64 AND NOT HAVE_AVX512VBMI)
+ message(STATUS "Building without AVX512VBMI support")
+ endif ()
if ((ARCH_IA32 OR ARCH_X86_64) AND NOT HAVE_SSSE3)
message(FATAL_ERROR "A minimum of SSSE3 compiler support is required")
endif ()