From 8122e1437e332e156d971a0274879b0ee76e488a Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Fri, 20 Mar 2015 10:26:17 +0100 Subject: Add, optional, support for 128bit integers. We will, for the foreseeable future, not expose 128 bit datatypes to SQL. But being able to use 128bit math will allow us, in a later patch, to use 128bit accumulators for some aggregates; leading to noticeable speedups over using numeric. So far we only detect a gcc/clang extension that supports 128bit math, but no 128bit literals, and no *printf support. We might want to expand this in the future to further compilers; if there are any that that provide similar support. Discussion: 544BB5F1.50709@proxel.se Author: Andreas Karlsson, with significant editorializing by me Reviewed-By: Peter Geoghegan, Oskari Saarenmaa --- configure | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'configure') diff --git a/configure b/configure index 379dab16ab..2c9b3a7c71 100755 --- a/configure +++ b/configure @@ -13803,6 +13803,58 @@ _ACEOF fi +# Check for extensions offering the integer scalar type __int128. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __int128" >&5 +$as_echo_n "checking for __int128... " >&6; } +if ${pgac_cv__128bit_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* + * These are globals to discourage the compiler from folding all the + * arithmetic tests down to compile-time constants. We do not have + * convenient support for 64bit literals at this point... + */ +__int128 a = 48828125; +__int128 b = 97656255; + +int +main () +{ + +__int128 c,d; +a = (a << 12) + 1; /* 200000000001 */ +b = (b << 12) + 5; /* 400000000005 */ +/* use the most relevant arithmetic ops */ +c = a * b; +d = (c + b) / b; +/* return different values, to prevent optimizations */ +if (d != a+1) + return 0; +return 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pgac_cv__128bit_int=yes +else + pgac_cv__128bit_int=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__128bit_int" >&5 +$as_echo "$pgac_cv__128bit_int" >&6; } +if test x"$pgac_cv__128bit_int" = xyes ; then + +$as_echo "#define PG_INT128_TYPE __int128" >>confdefs.h + +fi + # Check for various atomic operations now that we have checked how to declare # 64bit integers. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __sync char locking functions" >&5 -- cgit v1.2.3