@@ -234,12 +234,20 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
234234 AX_CHECK_COMPILE_FLAG ( [ -Wimplicit-fallthrough] ,[ CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"] ,,[ [ $CXXFLAG_WERROR] ] )
235235fi
236236
237- # Check for optional instruction set support. Enabling these does _not_ imply that all code will
238- # be compiled with them, rather that specific objects/libs may use them after checking for runtime
239- # compatibility.
240- AX_CHECK_COMPILE_FLAG ( [ -msse4.2] ,[ [ SSE42_CXXFLAGS="-msse4.2"] ] ,,[ [ $CXXFLAG_WERROR] ] )
237+ enable_hwcrc32=no
238+ enable_sse41=no
239+ enable_avx2=no
240+ enable_shani=no
241+
242+ if test "x$use_asm" = "xyes"; then
243+
244+ # Check for optional instruction set support. Enabling these does _not_ imply that all code will
245+ # be compiled with them, rather that specific objects/libs may use them after checking for runtime
246+ # compatibility.
247+ AX_CHECK_COMPILE_FLAG ( [ -msse4.2] ,[ [ SSE42_CXXFLAGS="-msse4.2"] ] ,,[ [ $CXXFLAG_WERROR] ] )
241248AX_CHECK_COMPILE_FLAG ( [ -msse4.1] ,[ [ SSE41_CXXFLAGS="-msse4.1"] ] ,,[ [ $CXXFLAG_WERROR] ] )
242249AX_CHECK_COMPILE_FLAG ( [ -mavx -mavx2] ,[ [ AVX2_CXXFLAGS="-mavx -mavx2"] ] ,,[ [ $CXXFLAG_WERROR] ] )
250+ AX_CHECK_COMPILE_FLAG ( [ -msse4 -msha] ,[ [ SHANI_CXXFLAGS="-msse4 -msha"] ] ,,[ [ $CXXFLAG_WERROR] ] )
243251
244252TEMP_CXXFLAGS="$CXXFLAGS"
245253CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
@@ -301,6 +309,25 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
301309)
302310CXXFLAGS="$TEMP_CXXFLAGS"
303311
312+ TEMP_CXXFLAGS="$CXXFLAGS"
313+ CXXFLAGS="$CXXFLAGS $SHANI_CXXFLAGS"
314+ AC_MSG_CHECKING ( for SHA-NI intrinsics )
315+ AC_COMPILE_IFELSE ( [ AC_LANG_PROGRAM ( [ [
316+ #include <stdint.h>
317+ #include <immintrin.h>
318+ ] ] ,[ [
319+ __m128i i = _mm_set1_epi32(0);
320+ __m128i j = _mm_set1_epi32(1);
321+ __m128i k = _mm_set1_epi32(2);
322+ return _mm_extract_epi32(_mm_sha256rnds2_epu32(i, i, k), 0);
323+ ] ] ) ] ,
324+ [ AC_MSG_RESULT ( yes ) ; enable_shani=yes; AC_DEFINE ( ENABLE_SHANI , 1 , [ Define this symbol to build code that uses SHA-NI intrinsics] ) ] ,
325+ [ AC_MSG_RESULT ( no ) ]
326+ )
327+ CXXFLAGS="$TEMP_CXXFLAGS"
328+
329+ fi
330+
304331CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
305332
306333AC_ARG_WITH ( [ utils] ,
@@ -1115,6 +1142,7 @@ AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
11151142AM_CONDITIONAL([ ENABLE_HWCRC32] ,[ test x$enable_hwcrc32 = xyes] )
11161143AM_CONDITIONAL([ ENABLE_SSE41] ,[ test x$enable_sse41 = xyes] )
11171144AM_CONDITIONAL([ ENABLE_AVX2] ,[ test x$enable_avx2 = xyes] )
1145+ AM_CONDITIONAL([ ENABLE_SHANI] ,[ test x$enable_shani = xyes] )
11181146AM_CONDITIONAL([ USE_ASM] ,[ test x$use_asm = xyes] )
11191147
11201148AC_DEFINE ( CLIENT_VERSION_MAJOR , _CLIENT_VERSION_MAJOR , [ Major version] )
@@ -1149,6 +1177,7 @@ AC_SUBST(PIE_FLAGS)
11491177AC_SUBST ( SSE42_CXXFLAGS )
11501178AC_SUBST ( SSE41_CXXFLAGS )
11511179AC_SUBST ( AVX2_CXXFLAGS )
1180+ AC_SUBST ( SHANI_CXXFLAGS )
11521181AC_SUBST ( LIBTOOL_APP_LDFLAGS )
11531182AC_SUBST ( USE_UPNP )
11541183AC_SUBST ( USE_QRCODE )
0 commit comments