15#ifndef PRIVACY_PROOFS_ZK_LIB_UTIL_CEILDIV_H_
16#define PRIVACY_PROOFS_ZK_LIB_UTIL_CEILDIV_H_
28 return (a + (b - 1)) / b;
31inline size_t lg(
size_t n) {
32 size_t lgk = 0, k = 1;
43inline uint64_t even(uint64_t x) {
44 x &= 0x5555555555555555ull;
46 x &= 0x3333333333333333ull;
48 x &= 0x0F0F0F0F0F0F0F0Full;
50 x &= 0x00FF00FF00FF00FFull;
52 x &= 0x0000FFFF0000FFFFull;
54 x &= 0x00000000FFFFFFFFull;
59inline uint64_t uneven(uint64_t x) {
60 x &= 0x00000000FFFFFFFFull;
62 x &= 0x0000FFFF0000FFFFull;
64 x &= 0x00FF00FF00FF00FFull;
66 x &= 0x0F0F0F0F0F0F0F0Full;
68 x &= 0x3333333333333333ull;
70 x &= 0x5555555555555555ull;
79static void add(T *x0, T *x1, T y0, T y1) {
118 T g0 = *x0 & y0, g1 = *x1 & y1;
119 T p0 = *x0 ^ y0, p1 = *x1 ^ y1;
122 T g = g1 ^ (g0 & p1);
130 T gprime = (g + (p ^ g)) ^ p;
134 *x1 = g0 ^ (gprime & p0) ^ p1;
139static void sub(T *x0, T *x1, T y0, T y1) {
151static bool lt(T x0, T x1, T y0, T y1) {
152 sub(&x0, &x1, y0, y1);
153 return (x1 >> (8 *
sizeof(T) - 1)) == 1;
157static bool eq(T x0, T x1, T y0, T y1) {
158 return x0 == y0 && x1 == y1;