diff options
Diffstat (limited to 'configure')
| -rwxr-xr-x | configure | 212 |
1 files changed, 212 insertions, 0 deletions
@@ -650,6 +650,8 @@ MSGMERGE MSGFMT_FLAGS MSGFMT HAVE_POSIX_SIGNALS +PG_CRC32C_OBJS +CFLAGS_SSE42 LDAP_LIBS_BE LDAP_LIBS_FE PTHREAD_CFLAGS @@ -14095,6 +14097,216 @@ $as_echo "#define HAVE_GCC__ATOMIC_INT64_CAS 1" >>confdefs.h fi + +# Check for x86 cpuid instruction +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __get_cpuid" >&5 +$as_echo_n "checking for __get_cpuid... " >&6; } +if ${pgac_cv__get_cpuid+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <cpuid.h> +int +main () +{ +unsigned int exx[4] = {0, 0, 0, 0}; + __get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv__get_cpuid="yes" +else + pgac_cv__get_cpuid="no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__get_cpuid" >&5 +$as_echo "$pgac_cv__get_cpuid" >&6; } +if test x"$pgac_cv__get_cpuid" = x"yes"; then + +$as_echo "#define HAVE__GET_CPUID 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cpuid" >&5 +$as_echo_n "checking for __cpuid... " >&6; } +if ${pgac_cv__cpuid+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <intrin.h> +int +main () +{ +unsigned int exx[4] = {0, 0, 0, 0}; + __get_cpuid(exx[0], 1); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv__cpuid="yes" +else + pgac_cv__cpuid="no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__cpuid" >&5 +$as_echo "$pgac_cv__cpuid" >&6; } +if test x"$pgac_cv__cpuid" = x"yes"; then + +$as_echo "#define HAVE__CPUID 1" >>confdefs.h + +fi + +# Check for Intel SSE 4.2 intrinsics to do CRC calculations. +# +# First check if the _mm_crc32_u8 and _mmcrc32_u64 intrinsics can be used +# with the default compiler flags. If not, check if adding the -msse4.2 +# flag helps. CFLAGS_SSE42 is set to -msse4.2 if that's required. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mm_crc32_u8 and _mm_crc32_u64 with CFLAGS=" >&5 +$as_echo_n "checking for _mm_crc32_u8 and _mm_crc32_u64 with CFLAGS=... " >&6; } +if ${pgac_cv_sse42_crc32_intrinsics_+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CFLAGS=$CFLAGS +CFLAGS="$pgac_save_CFLAGS " +ac_save_c_werror_flag=$ac_c_werror_flag +ac_c_werror_flag=yes +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <nmmintrin.h> +int +main () +{ +unsigned int crc = 0; + crc = _mm_crc32_u8(crc, 0); + crc = (unsigned int) _mm_crc32_u64(crc, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv_sse42_crc32_intrinsics_=yes +else + pgac_cv_sse42_crc32_intrinsics_=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +ac_c_werror_flag=$ac_save_c_werror_flag +CFLAGS="$pgac_save_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_sse42_crc32_intrinsics_" >&5 +$as_echo "$pgac_cv_sse42_crc32_intrinsics_" >&6; } +if test x"$pgac_cv_sse42_crc32_intrinsics_" = x"yes"; then + CFLAGS_SSE42="" + pgac_sse42_crc32_intrinsics=yes +fi + +if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mm_crc32_u8 and _mm_crc32_u64 with CFLAGS=-msse4.2" >&5 +$as_echo_n "checking for _mm_crc32_u8 and _mm_crc32_u64 with CFLAGS=-msse4.2... " >&6; } +if ${pgac_cv_sse42_crc32_intrinsics__msse4_2+:} false; then : + $as_echo_n "(cached) " >&6 +else + pgac_save_CFLAGS=$CFLAGS +CFLAGS="$pgac_save_CFLAGS -msse4.2" +ac_save_c_werror_flag=$ac_c_werror_flag +ac_c_werror_flag=yes +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <nmmintrin.h> +int +main () +{ +unsigned int crc = 0; + crc = _mm_crc32_u8(crc, 0); + crc = (unsigned int) _mm_crc32_u64(crc, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv_sse42_crc32_intrinsics__msse4_2=yes +else + pgac_cv_sse42_crc32_intrinsics__msse4_2=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +ac_c_werror_flag=$ac_save_c_werror_flag +CFLAGS="$pgac_save_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_sse42_crc32_intrinsics__msse4_2" >&5 +$as_echo "$pgac_cv_sse42_crc32_intrinsics__msse4_2" >&6; } +if test x"$pgac_cv_sse42_crc32_intrinsics__msse4_2" = x"yes"; then + CFLAGS_SSE42="-msse4.2" + pgac_sse42_crc32_intrinsics=yes +fi + +fi + + +# Select CRC-32C implementation. +# +# If the SSE 4.2 intrinsics are available without extra CFLAGS, then use them +# always. If they require extra CFLAGS, compile both implementations and +# select which one to use at runtime, depending on whether SSE 4.2 is +# supported by the processor we're running on. +# +# You can override this logic by setting the appropriate USE_*_CRC32 flag to 1 +# in the template or configure command line. +if test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"" && test x"$USE_SLICING_BY_8_CRC32C" = x""; then + if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && test x"$CFLAGS_SSE42" = x"" ; then + USE_SSE42_CRC32C=1 + else + # the CPUID instruction is needed for the runtime check. + if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && (test x"$pgac_cv__get_cpuid" = x"yes" || test x"$pgac_cv__cpuid" = x"yes"); then + USE_SSE42_CRC32C_WITH_RUNTIME_CHECK=1 + else + USE_SLICING_BY_8_CRC32C=1 + fi + fi +fi + +# Set PG_CRC32C_OBJS appropriately depending on the selected implementation. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which CRC-32C implementation to use" >&5 +$as_echo_n "checking which CRC-32C implementation to use... " >&6; } +if test x"$USE_SSE42_CRC32C" = x"1"; then + +$as_echo "#define USE_SSE42_CRC32C 1" >>confdefs.h + + PG_CRC32C_OBJS="pg_crc32c_sse42.o" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE 4.2" >&5 +$as_echo "SSE 4.2" >&6; } +else + if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then + +$as_echo "#define USE_SSE42_CRC32C_WITH_RUNTIME_CHECK 1" >>confdefs.h + + PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_choose.o" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE 4.2 with runtime check" >&5 +$as_echo "SSE 4.2 with runtime check" >&6; } + else + +$as_echo "#define USE_SLICING_BY_8_CRC32C 1" >>confdefs.h + + PG_CRC32C_OBJS="pg_crc32c_sb8.o" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: slicing-by-8" >&5 +$as_echo "slicing-by-8" >&6; } + fi +fi + + + +# Check that POSIX signals are available if thread safety is enabled. if test "$PORTNAME" != "win32" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for POSIX signal interface" >&5 |
