return num;
}
+/** Right shift 128 bit integer
+ *
+ * @note shift must be 127 bits or less.
+ */
+static uint128_t uint128_rshift(uint128_t num, uint8_t bits)
+{
+ rad_assert(bits < 128);
+
+ if (bits >= 64) {
+ num.h = 0;
+ num.l = num.h >> (bits - 64);
+ return num;
+ }
+ num.l = (num.l >> bits) | (num.h << (64 - bits));
+ num.h >>= bits;
+
+ return num;
+}
+
/** Perform bitwise & of two 128bit unsigned integers
*
*/
#define uint128_mul(_a, _b) ((_a) * (_b))
#define uint128_lshift(_num, _bits) (_num << _bits)
+#define uint128_rshift(_num, _bits) (_num >> _bits)
#define uint128_band(_a, _b) (_a & _b)
#define uint128_bor(_a, _b) (_a | _b)