mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
build/run on machines that only have SSE2 with SIMDE (#303)
This allows the use of SIMDE library to emulate SSSE3/SSE4.2 instructions on SSE2-only (x86-64-v2) hardware. --------- Co-authored-by: G.E <gregory.economou@vectorcamp.gr> Co-authored-by: Konstantinos Margaritis <konstantinos@vectorcamp.gr>
This commit is contained in:
parent
aa832db892
commit
cc11a3d738
@ -129,6 +129,10 @@ include (${CMAKE_MODULE_PATH}/platform.cmake)
|
||||
# Detect OS and if Fat Runtime is available
|
||||
include (${CMAKE_MODULE_PATH}/osdetection.cmake)
|
||||
|
||||
if(ARCH_X86_64 AND BUILD_SSE2_SIMDE AND NOT FAT_RUNTIME)
|
||||
set(SIMDE_BACKEND True)
|
||||
endif()
|
||||
|
||||
if(SIMDE_BACKEND)
|
||||
include (${CMAKE_MODULE_PATH}/simde.cmake)
|
||||
elseif (ARCH_IA32 OR ARCH_X86_64)
|
||||
@ -947,16 +951,36 @@ else ()
|
||||
if (NOT BUILD_AVX512VBMI)
|
||||
set (DISPATCHER_DEFINE "${DISPATCHER_DEFINE} -DDISABLE_AVX512VBMI_DISPATCH")
|
||||
endif (NOT BUILD_AVX512VBMI)
|
||||
if(BUILD_SSE2_SIMDE)
|
||||
set (DISPATCHER_DEFINE "${DISPATCHER_DEFINE} -DVS_SIMDE_BACKEND -DVS_SIMDE_NATIVE -march=core2 -msse2")
|
||||
endif(BUILD_SSE2_SIMDE)
|
||||
set_source_files_properties(src/dispatcher.c PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-unused-parameter -Wno-unused-function ${DISPATCHER_DEFINE}")
|
||||
|
||||
if (BUILD_STATIC_LIBS)
|
||||
|
||||
if (BUILD_SSE2_SIMDE)
|
||||
add_library(hs_exec_core2 OBJECT ${hs_exec_SRCS})
|
||||
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_core2>)
|
||||
message("Building SIMDE SSE2 version..")
|
||||
include_directories(${PROJECT_SOURCE_DIR}/simde)
|
||||
if (CMAKE_COMPILER_IS_CLANG)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSIMDE_NO_CHECK_IMMEDIATE_CONSTANT")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSIMDE_NO_CHECK_IMMEDIATE_CONSTANT")
|
||||
endif()
|
||||
|
||||
set_target_properties(hs_exec_core2 PROPERTIES
|
||||
COMPILE_FLAGS "-DVS_SIMDE_BACKEND -DVS_SIMDE_NATIVE -march=core2 -msse2"
|
||||
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
|
||||
)
|
||||
else()
|
||||
add_library(hs_exec_core2 OBJECT ${hs_exec_SRCS})
|
||||
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_core2>)
|
||||
set_target_properties(hs_exec_core2 PROPERTIES
|
||||
COMPILE_FLAGS "-march=core2 -msse4.2"
|
||||
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
|
||||
)
|
||||
endif(BUILD_SSE2_SIMDE)
|
||||
|
||||
add_library(hs_exec_corei7 OBJECT ${hs_exec_SRCS})
|
||||
list(APPEND RUNTIME_LIBS $<TARGET_OBJECTS:hs_exec_corei7>)
|
||||
@ -1015,6 +1039,23 @@ else ()
|
||||
# build shared libs
|
||||
add_library(hs_compile_shared OBJECT ${hs_compile_SRCS})
|
||||
set_target_properties(hs_compile_shared PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
||||
|
||||
if (BUILD_SSE2_SIMDE)
|
||||
message("Building SIMDE SSE2 version..")
|
||||
add_library(hs_exec_shared_core2 OBJECT ${hs_exec_SRCS})
|
||||
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_core2>)
|
||||
|
||||
include_directories(${PROJECT_SOURCE_DIR}/simde)
|
||||
if (CMAKE_COMPILER_IS_CLANG)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSIMDE_NO_CHECK_IMMEDIATE_CONSTANT")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSIMDE_NO_CHECK_IMMEDIATE_CONSTANT")
|
||||
endif()
|
||||
set_target_properties(hs_exec_shared_core2 PROPERTIES
|
||||
COMPILE_FLAGS "-DVS_SIMDE_BACKEND -DVS_SIMDE_NATIVE -march=core2 -msse2"
|
||||
POSITION_INDEPENDENT_CODE TRUE
|
||||
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
|
||||
)
|
||||
else()
|
||||
add_library(hs_exec_shared_core2 OBJECT ${hs_exec_SRCS})
|
||||
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_core2>)
|
||||
set_target_properties(hs_exec_shared_core2 PROPERTIES
|
||||
@ -1022,6 +1063,8 @@ else ()
|
||||
POSITION_INDEPENDENT_CODE TRUE
|
||||
RULE_LAUNCH_COMPILE "${BUILD_WRAPPER} core2 ${CMAKE_MODULE_PATH}/keep.syms.in"
|
||||
)
|
||||
endif (BUILD_SSE2_SIMDE)
|
||||
|
||||
add_library(hs_exec_shared_corei7 OBJECT ${hs_exec_SRCS})
|
||||
list(APPEND RUNTIME_SHLIBS $<TARGET_OBJECTS:hs_exec_shared_corei7>)
|
||||
set_target_properties(hs_exec_shared_corei7 PROPERTIES
|
||||
|
@ -20,10 +20,21 @@ if (SIMDE_SSE42_H_FOUND)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (SIMDE_NATIVE)
|
||||
if (BUILD_SSE2_SIMDE)
|
||||
message("using BUILD_SSE2_SIMDE..")
|
||||
set(SIMDE_NATIVE true)
|
||||
set(ARCH_C_FLAGS "-msse2")
|
||||
set(ARCH_CXX_FLAGS "-msse2")
|
||||
set(X86_ARCH "x86-64")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVS_SIMDE_NATIVE -DVS_SIMDE_BACKEND")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVS_SIMDE_NATIVE -DVS_SIMDE_BACKEND")
|
||||
endif()
|
||||
|
||||
if (SIMDE_NATIVE AND NOT BUILD_SSE2_SIMDE)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVS_SIMDE_NATIVE -DSIMDE_ENABLE_OPENMP -fopenmp-simd")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVS_SIMDE_NATIVE -DSIMDE_ENABLE_OPENMP -fopenmp-simd")
|
||||
endif()
|
||||
|
||||
else()
|
||||
message(FATAL_ERROR "SIMDe backend requested but SIMDe is not available on the system")
|
||||
endif()
|
||||
|
@ -42,6 +42,7 @@ HS_PUBLIC_API
|
||||
hs_error_t HS_CDECL hs_valid_platform(void) {
|
||||
/* Hyperscan requires SSSE3, anything else is a bonus */
|
||||
#if !defined(VS_SIMDE_BACKEND) && (defined(ARCH_IA32) || defined(ARCH_X86_64))
|
||||
// cppcheck-suppress knownConditionTrueFalse
|
||||
if (check_ssse3()) {
|
||||
return HS_SUCCESS;
|
||||
} else {
|
||||
|
@ -210,9 +210,13 @@ int check_avx512vbmi(void) {
|
||||
|
||||
static inline
|
||||
int check_ssse3(void) {
|
||||
#if defined(VS_SIMDE_NATIVE) && (defined(ARCH_IA32) || defined(ARCH_X86_64))
|
||||
return 1;
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & CPUID_SSSE3);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline
|
||||
|
@ -36,7 +36,9 @@
|
||||
#include "ue2common.h"
|
||||
|
||||
#if defined(VS_SIMDE_BACKEND)
|
||||
#ifndef VECTORSIZE
|
||||
#define VECTORSIZE 16
|
||||
#endif
|
||||
#define SIMDE_ENABLE_NATIVE_ALIASES
|
||||
#if !defined(VS_SIMDE_NATIVE)
|
||||
#define SIMDE_NO_NATIVE
|
||||
|
Loading…
x
Reference in New Issue
Block a user