diff --git a/CMakeLists.txt b/CMakeLists.txt index 55954384..11415c80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ else() message(STATUS "Build type ${CMAKE_BUILD_TYPE}") endif() -if(CMAKE_BUILD_TYPE MATCHES RELEASE|RELWITHDEBINFO|MINSIZEREL) +if(CMAKE_BUILD_TYPE MATCHES NONE|RELEASE|RELWITHDEBINFO|MINSIZEREL) message(STATUS "using release build") set(RELEASE_BUILD TRUE) else() @@ -1193,6 +1193,9 @@ if (NOT FAT_RUNTIME) set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C) add_library(hs_compile OBJECT ${hs_compile_SRCS}) + if (ARCH_IA32) + set_target_properties(hs_compile PROPERTIES COMPILE_FLAGS "-mssse3") + endif (ARCH_IA32) add_library(hs STATIC src/hs_version.c @@ -1259,7 +1262,11 @@ else (FAT_RUNTIME) $ ${RUNTIME_LIBS}) set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C) - add_library(hs_compile OBJECT ${hs_compile_SRCS}) + add_library(hs_compile OBJECT ${hs_compile_SRCS}) + if (ARCH_IA32) + set_target_properties(hs_exec_common PROPERTIES COMPILE_FLAGS "-mssse3") + set_target_properties(hs_compile PROPERTIES COMPILE_FLAGS "-mssse3") + endif (ARCH_IA32) # we want the static lib for testing add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c diff --git a/src/dispatcher.c b/src/dispatcher.c index 76ed37a1..46fdb7d5 100644 --- a/src/dispatcher.c +++ b/src/dispatcher.c @@ -30,7 +30,7 @@ #include "hs_common.h" #include "hs_runtime.h" #include "ue2common.h" -#if defined(ARCH_X86_64) +#if defined(ARCH_IA32) || defined(ARCH_X86_64) #include "util/arch/x86/cpuid_inline.h" #endif #include "util/join.h" diff --git a/src/hs.cpp b/src/hs.cpp index 7898cf46..b128572a 100644 --- a/src/hs.cpp +++ b/src/hs.cpp @@ -45,7 +45,7 @@ #include "parser/unsupported.h" #include "util/compile_error.h" #include "util/arch/common/cpuid_flags.h" -#if defined(ARCH_X86_64) +#if defined(ARCH_IA32) || defined(ARCH_X86_64) #include "util/arch/x86/cpuid_inline.h" #elif defined(ARCH_ARM32) || defined(ARCH_AARCH64) #endif diff --git a/src/hs_valid_platform.c b/src/hs_valid_platform.c index b187090b..8323f343 100644 --- a/src/hs_valid_platform.c +++ b/src/hs_valid_platform.c @@ -29,7 +29,7 @@ #include "config.h" #include "hs_common.h" #include "ue2common.h" -#if defined(ARCH_X86_64) +#if defined(ARCH_IA32) || defined(ARCH_X86_64) #include "util/arch/x86/cpuid_inline.h" #endif diff --git a/src/util/arch/x86/simd_utils.h b/src/util/arch/x86/simd_utils.h index 9555bf6c..5270808a 100644 --- a/src/util/arch/x86/simd_utils.h +++ b/src/util/arch/x86/simd_utils.h @@ -44,7 +44,7 @@ static really_inline m128 ones128(void) { #if defined(__GNUC__) || defined(__INTEL_COMPILER) /* gcc gets this right */ - return _mm_set1_epi8(0xFF); + return (m128) _mm_set1_epi8(0xFF); #else /* trick from Intel's optimization guide to generate all-ones. * ICC converts this to the single cmpeq instruction */ @@ -53,12 +53,12 @@ static really_inline m128 ones128(void) { } static really_inline m128 zeroes128(void) { - return _mm_setzero_si128(); + return (m128) _mm_setzero_si128(); } /** \brief Bitwise not for m128*/ static really_inline m128 not128(m128 a) { - return _mm_xor_si128(a, ones128()); + return (m128) _mm_xor_si128(a, ones128()); } /** \brief Return 1 if a and b are different otherwise 0 */ @@ -125,7 +125,13 @@ static really_inline u32 movd(const m128 in) { } static really_inline u64a movq(const m128 in) { +#if defined(ARCH_X86_64) return _mm_cvtsi128_si64(in); +#else // 32-bit - this is horrific + u32 lo = movd(in); + u32 hi = movd(_mm_srli_epi64(in, 32)); + return (u64a)hi << 32 | lo; +#endif } /* another form of movq */ diff --git a/util/CMakeLists.txt b/util/CMakeLists.txt index ea942ef1..861f2f08 100644 --- a/util/CMakeLists.txt +++ b/util/CMakeLists.txt @@ -33,6 +33,9 @@ SET(corpusomatic_SRCS ng_find_matches.cpp ) add_library(corpusomatic STATIC ${corpusomatic_SRCS}) +if (ARCH_IA32) + set_target_properties(corpusomatic PROPERTIES COMPILE_FLAGS "-mssse3") +endif (ARCH_IA32) set(databaseutil_SRCS database_util.cpp