summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2015-03-20 10:26:17 +0100
committerAndres Freund <andres@anarazel.de>2015-03-20 10:26:17 +0100
commit8122e1437e332e156d971a0274879b0ee76e488a (patch)
tree4049661023618ba959e645969698c7829ce19ed1 /src
parent7e9ed623d9988fcb1497a2a8ca7f676a5bfa136f (diff)
downloadpostgresql-8122e1437e332e156d971a0274879b0ee76e488a.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/include/c.h11
-rw-r--r--src/include/pg_config.h.in3
-rw-r--r--src/include/pg_config.h.win323
3 files changed, 17 insertions, 0 deletions
diff --git a/src/include/c.h b/src/include/c.h
index a2d4a2c5c5..744721860c 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -293,6 +293,17 @@ typedef unsigned long long int uint64;
#define HAVE_INT64_TIMESTAMP
#endif
+/*
+ * 128-bit signed and unsigned integers
+ * There currently is only a limited support for the type. E.g. 128bit
+ * literals and snprintf are not supported; but math is.
+ */
+#if defined(PG_INT128_TYPE)
+#define HAVE_INT128
+typedef PG_INT128_TYPE int128;
+typedef unsigned PG_INT128_TYPE uint128;
+#endif
+
/* sig_atomic_t is required by ANSI C, but may be missing on old platforms */
#ifndef HAVE_SIG_ATOMIC_T
typedef int sig_atomic_t;
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index ece57c81cc..202c51a34a 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -711,6 +711,9 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
+/* Define to the name of a signed 128-bit integer type. */
+#undef PG_INT128_TYPE
+
/* Define to the name of a signed 64-bit integer type. */
#undef PG_INT64_TYPE
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 3f858c658b..1baf64f005 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -562,6 +562,9 @@
/* Define to the version of this package. */
#define PACKAGE_VERSION "9.5devel"
+/* Define to the name of a signed 128-bit integer type. */
+#undef PG_INT128_TYPE
+
/* Define to the name of a signed 64-bit integer type. */
#define PG_INT64_TYPE long long int