pgsql: Optimise non-native 128-bit addition in int128.h. - Mailing list pgsql-committers

From Dean Rasheed
Subject pgsql: Optimise non-native 128-bit addition in int128.h.
Date
Msg-id E1ujvuD-001BxY-2T@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Optimise non-native 128-bit addition in int128.h.

On platforms without native 128-bit integer support, simplify the test
for carry in int128_add_uint64() by noting that the low-part addition
is unsigned integer arithmetic, which is just modular arithmetic.
Therefore the test for carry can simply be written as "new value < old
value" (i.e., a test for modular wrap-around). This can then be made
branchless so that on modern compilers it produces the same machine
instructions as native 128-bit addition, making it significantly
simpler and faster.

Similarly, the test for carry in int128_add_int64() can be written in
much the same way, but with an extra term to compensate for the sign
of the value being added. Again, on modern compilers this leads to
branchless code, often identical to the native 128-bit integer
addition machine code.

Author: Dean Rasheed <dean.a.rasheed@gmail.com>
Reviewed-by: John Naylor <johncnaylorls@gmail.com>
Discussion: https://postgr.es/m/CAEZATCWgBMc9ZwKMYqQpaQz2X6gaamYRB+RnMsUNcdMcL2Mj_w@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/d9bb8ef093d62763cfd19d37e6bb8182998a3f88

Modified Files
--------------
src/include/common/int128.h | 36 ++++++++++++++++--------------------
1 file changed, 16 insertions(+), 20 deletions(-)


pgsql-committers by date:

Previous
From: Michael Paquier
Date:
Subject: pgsql: Improve tests of date_trunc() with infinity and unsupported unit
Next
From: Dean Rasheed
Date:
Subject: pgsql: Simplify non-native 64x64-bit multiplication in int128.h.