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;
196#define INT64_HI_INT32(i64) ((int32) ((i64) >> 32))
197#define INT64_LO_UINT32(i64) ((uint32) (i64))
214 "arithmetic right shift is needed");
235 if (
x != 0 &&
y != 0)
272 if (
x != 0 &&
y != 0)
358 tmp = (r << 32) + (
n_lo >> 32);
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)