fix IA32 build, as we need minimum SSSE3 support for compilation to succeed

This commit is contained in:
Konstantinos Margaritis 2020-12-30 19:57:44 +02:00
parent 124455a4a8
commit 752a42419b
6 changed files with 24 additions and 8 deletions

View File

@ -30,7 +30,7 @@ else()
message(STATUS "Build type ${CMAKE_BUILD_TYPE}") message(STATUS "Build type ${CMAKE_BUILD_TYPE}")
endif() endif()
if(CMAKE_BUILD_TYPE MATCHES RELEASE|RELWITHDEBINFO|MINSIZEREL) if(CMAKE_BUILD_TYPE MATCHES NONE|RELEASE|RELWITHDEBINFO|MINSIZEREL)
message(STATUS "using release build") message(STATUS "using release build")
set(RELEASE_BUILD TRUE) set(RELEASE_BUILD TRUE)
else() else()
@ -1193,6 +1193,9 @@ if (NOT FAT_RUNTIME)
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C) 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_compile PROPERTIES COMPILE_FLAGS "-mssse3")
endif (ARCH_IA32)
add_library(hs STATIC add_library(hs STATIC
src/hs_version.c src/hs_version.c
@ -1260,6 +1263,10 @@ else (FAT_RUNTIME)
${RUNTIME_LIBS}) ${RUNTIME_LIBS})
set_target_properties(hs_runtime PROPERTIES LINKER_LANGUAGE C) 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 # we want the static lib for testing
add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c add_library(hs STATIC src/hs_version.c src/hs_valid_platform.c

View File

@ -30,7 +30,7 @@
#include "hs_common.h" #include "hs_common.h"
#include "hs_runtime.h" #include "hs_runtime.h"
#include "ue2common.h" #include "ue2common.h"
#if defined(ARCH_X86_64) #if defined(ARCH_IA32) || defined(ARCH_X86_64)
#include "util/arch/x86/cpuid_inline.h" #include "util/arch/x86/cpuid_inline.h"
#endif #endif
#include "util/join.h" #include "util/join.h"

View File

@ -45,7 +45,7 @@
#include "parser/unsupported.h" #include "parser/unsupported.h"
#include "util/compile_error.h" #include "util/compile_error.h"
#include "util/arch/common/cpuid_flags.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" #include "util/arch/x86/cpuid_inline.h"
#elif defined(ARCH_ARM32) || defined(ARCH_AARCH64) #elif defined(ARCH_ARM32) || defined(ARCH_AARCH64)
#endif #endif

View File

@ -29,7 +29,7 @@
#include "config.h" #include "config.h"
#include "hs_common.h" #include "hs_common.h"
#include "ue2common.h" #include "ue2common.h"
#if defined(ARCH_X86_64) #if defined(ARCH_IA32) || defined(ARCH_X86_64)
#include "util/arch/x86/cpuid_inline.h" #include "util/arch/x86/cpuid_inline.h"
#endif #endif

View File

@ -44,7 +44,7 @@
static really_inline m128 ones128(void) { static really_inline m128 ones128(void) {
#if defined(__GNUC__) || defined(__INTEL_COMPILER) #if defined(__GNUC__) || defined(__INTEL_COMPILER)
/* gcc gets this right */ /* gcc gets this right */
return _mm_set1_epi8(0xFF); return (m128) _mm_set1_epi8(0xFF);
#else #else
/* trick from Intel's optimization guide to generate all-ones. /* trick from Intel's optimization guide to generate all-ones.
* ICC converts this to the single cmpeq instruction */ * ICC converts this to the single cmpeq instruction */
@ -53,12 +53,12 @@ static really_inline m128 ones128(void) {
} }
static really_inline m128 zeroes128(void) { static really_inline m128 zeroes128(void) {
return _mm_setzero_si128(); return (m128) _mm_setzero_si128();
} }
/** \brief Bitwise not for m128*/ /** \brief Bitwise not for m128*/
static really_inline m128 not128(m128 a) { 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 */ /** \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) { static really_inline u64a movq(const m128 in) {
#if defined(ARCH_X86_64)
return _mm_cvtsi128_si64(in); 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 */ /* another form of movq */

View File

@ -33,6 +33,9 @@ SET(corpusomatic_SRCS
ng_find_matches.cpp ng_find_matches.cpp
) )
add_library(corpusomatic STATIC ${corpusomatic_SRCS}) add_library(corpusomatic STATIC ${corpusomatic_SRCS})
if (ARCH_IA32)
set_target_properties(corpusomatic PROPERTIES COMPILE_FLAGS "-mssse3")
endif (ARCH_IA32)
set(databaseutil_SRCS set(databaseutil_SRCS
database_util.cpp database_util.cpp