Skip to content

Commit d34d77a

Browse files
committed
build: verify that the assembler can handle crc32 functions
Also, enable crc32 even if -msse4.2 wasn't added by us, as long as it works. This allows custom flags (such as -march=native) to work as expected.
1 parent e8b9523 commit d34d77a

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

configure.ac

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,32 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
246246
# Check for optional instruction set support. Enabling these does _not_ imply that all code will
247247
# be compiled with them, rather that specific objects/libs may use them after checking for runtime
248248
# compatibility.
249-
AX_CHECK_COMPILE_FLAG([-msse4.2],[[enable_sse42=yes; SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
249+
AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
250250

251251
fi
252+
253+
TEMP_CXXFLAGS="$CXXFLAGS"
254+
CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
255+
AC_MSG_CHECKING(for assembler crc32 support)
256+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
257+
#include <stdint.h>
258+
#if defined(_MSC_VER)
259+
#include <intrin.h>
260+
#elif defined(__GNUC__) && defined(__SSE4_2__)
261+
#include <nmmintrin.h>
262+
#endif
263+
]],[[
264+
uint64_t l = 0;
265+
l = _mm_crc32_u8(l, 0);
266+
l = _mm_crc32_u32(l, 0);
267+
l = _mm_crc32_u64(l, 0);
268+
return l;
269+
]])],
270+
[ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
271+
[ AC_MSG_RESULT(no)]
272+
)
273+
CXXFLAGS="$TEMP_CXXFLAGS"
274+
252275
CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
253276

254277
AC_ARG_WITH([utils],
@@ -1132,7 +1155,7 @@ AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
11321155
AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
11331156
AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
11341157
AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1135-
AM_CONDITIONAL([ENABLE_SSE42],[test x$enable_sse42 = xyes])
1158+
AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
11361159

11371160
AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
11381161
AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])

src/Makefile.leveldb.include

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ leveldb_libmemenv_a_SOURCES += leveldb/helpers/memenv/memenv.h
142142

143143
leveldb_libleveldb_sse42_a_CPPFLAGS = $(leveldb_libleveldb_a_CPPFLAGS)
144144
leveldb_libleveldb_sse42_a_CXXFLAGS = $(leveldb_libleveldb_a_CXXFLAGS)
145-
if ENABLE_SSE42
145+
if ENABLE_HWCRC32
146146
leveldb_libleveldb_sse42_a_CPPFLAGS += -DLEVELDB_PLATFORM_POSIX_SSE
147147
leveldb_libleveldb_sse42_a_CXXFLAGS += $(SSE42_CXXFLAGS)
148148
endif

0 commit comments

Comments
 (0)