24#ifndef USE_NATIVE_INT128
26#define USE_NATIVE_INT128 1
28#define USE_NATIVE_INT128 0
49#define PG_INT128_HI_INT64(i128) ((int64) ((i128) >> 64))
50#define PG_INT128_LO_UINT64(i128) ((uint64) (i128))
65#define PG_INT128_HI_INT64(i128) ((i128).hi)
66#define PG_INT128_LO_UINT64(i128) ((i128).lo)
78 return (((int128) hi) << 64) + lo;
109 i128->
hi += (i128->
lo < oldlo);
136 i128->
hi += (i128->
lo < oldlo) + (v >> 63);
171 i128->
hi -= (i128->
lo > oldlo);
188 i128->
hi -= (i128->
lo > oldlo) + (v >> 63);
196#define INT64_HI_INT32(i64) ((int32) ((i64) >> 32))
197#define INT64_LO_UINT32(i64) ((uint32) (i64))
210 *i128 += (int128)
x * (int128)
y;
214 "arithmetic right shift is needed");
235 if (
x != 0 &&
y != 0)
269 *i128 -= (int128)
x * (int128)
y;
272 if (
x != 0 &&
y != 0)
311 int128 old_i128 = *i128;
358 tmp = (r << 32) + (n_lo >> 32);
363 tmp = (r << 32) + (
uint32) n_lo;
373 if ((i128->
hi < 0) != (v < 0))
394 return x.hi == 0 &&
x.lo == 0;
#define StaticAssertDecl(condition, errmessage)
static void int128_sub_uint64(INT128 *i128, uint64 v)
static void int128_add_uint64(INT128 *i128, uint64 v)
static INT128 make_int128(int64 hi, uint64 lo)
static bool int128_is_zero(INT128 x)
static void int128_sub_int64_mul_int64(INT128 *i128, int64 x, int64 y)
#define INT64_HI_INT32(i64)
static int int128_sign(INT128 x)
static void int128_add_int128(INT128 *i128, INT128 v)
static void int128_sub_int64(INT128 *i128, int64 v)
static int int128_compare(INT128 x, INT128 y)
static INT128 int64_to_int128(int64 v)
static void int128_add_int64(INT128 *i128, int64 v)
#define INT64_LO_UINT32(i64)
static int64 int128_to_int64(INT128 val)
static void int128_div_mod_int32(INT128 *i128, int32 v, int32 *remainder)
static void int128_add_int64_mul_int64(INT128 *i128, int64 x, int64 y)