mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
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
This commit is contained in:
52
configure
vendored
52
configure
vendored
@ -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
|
||||
|
Reference in New Issue
Block a user