20#ifndef PHP_RANDOM_UINT128_H
21# define PHP_RANDOM_UINT128_H
25# if !defined(__SIZEOF_INT128__) || defined(PHP_RANDOM_FORCE_EMULATE_128)
55 r.
lo = (num1.
lo + num2.
lo);
65 x0 = num1.
lo & 0xffffffffULL,
67 y0 = num2.
lo & 0xffffffffULL,
69 z0 = (((x1 * y0) + (x0 * y0 >> 32)) & 0xffffffffULL) + x0 * y1;
73 r.
hi += x1 * y1 + ((x1 * y0 + (x0 * y0 >> 32)) >> 32) + (z0 >> 32);
81 v = (num.
hi ^ num.
lo),
84 return (
v >>
s) | (
v << ((-
s) & 63));
91 return (uint64_t) (num >> 64);
96 return (uint64_t) num;
121 v = ((uint64_t) (num >> 64U)) ^ (uint64_t) num,
124 return (
v >>
s) | (
v << ((-
s) & 63));
struct _php_random_uint128_t php_random_uint128_t