27 #ifdef __SIZEOF_INT128__
33 using int128_t = __int128_t;
34 using uint128_t = __uint128_t;
37 return static_cast<uint64_t
>(x & 0xffffffffffffffffULL);
40 return static_cast<uint64_t
>( x >> 64 );
45 #else // __SIZEOF_INT128__
47 #include <boost/multiprecision/integer.hpp>
51 using boost::multiprecision::int128_t;
52 using boost::multiprecision::uint128_t;
55 return static_cast<uint64_t
>(x & 0xffffffffffffffffULL);
58 return static_cast<uint64_t
>( x >> 64 );
63 #endif // __SIZEOF_INT128__
67 inline uint128_t
uint128(
const uint64_t hi,
const uint64_t lo ) {
68 return ( uint128_t(hi) << 64 ) + lo;