25 #ifndef __MOTR_LIB_ARITH_H__ 26 #define __MOTR_LIB_ARITH_H__ 36 static inline int32_t
min32(int32_t a, int32_t b)
41 static inline int32_t
max32(int32_t a, int32_t b)
46 static inline int64_t
min64(int64_t a, int64_t b)
51 static inline int64_t
max64(int64_t a, int64_t b)
56 static inline uint32_t
min32u(uint32_t a, uint32_t b)
61 static inline uint32_t
max32u(uint32_t a, uint32_t b)
66 static inline uint64_t
min64u(uint64_t a, uint64_t b)
71 static inline uint64_t
max64u(uint64_t a, uint64_t b)
76 #define min_type(t, a, b) ({ \ 79 __a < __b ? __a : __b; \ 82 #define max_type(t, a, b) ({ \ 85 __a > __b ? __a : __b; \ 88 #define min_check(a, b) ({ \ 89 typeof(a) __a = (a); \ 90 typeof(b) __b = (b); \ 91 (void)(&__a == &__b); \ 92 __a < __b ? __a : __b; \ 95 #define max_check(a, b) ({ \ 96 typeof(a) __a = (a); \ 97 typeof(b) __b = (b); \ 98 (void)(&__a == &__b); \ 99 __a > __b ? __a : __b; \ 103 # define min3(a, b, c) (min_check((a), min_check((b), (c)))) 104 # define max3(a, b, c) (max_check((a), max_check((b), (c)))) 122 M0_INTERNAL
bool m0_mod_gt(uint64_t x0, uint64_t x1);
129 M0_INTERNAL
bool m0_mod_ge(uint64_t x0, uint64_t x1);
151 M0_INTERNAL uint64_t
m0_gcd64(uint64_t
p, uint64_t
q);
155 return (
val & (
val - 1)) == 0;
175 mask = alignment - 1;
176 return (
val + mask) & ~mask;
184 mask = alignment - 1;
185 return (
val & mask) == 0;
190 #define M0_IS_8ALIGNED(val) ((((uint64_t)(val)) & 07) == 0) 199 #define M0_3WAY(v0, v1) \ 201 typeof(v0) __a0 = (v0); \ 202 typeof(v1) __a1 = (v1); \ 204 (__a0 < __a1) ? -1 : __a0 != __a1; \ 207 #define M0_SWAP(v0, v1) \ 209 typeof(v0) *__a0 = &(v0); \ 210 typeof(v1) *__a1 = &(v1); \ 211 typeof(v0) __tmp = *__a0; \ 212 (void)(__a0 == __a1); \ 219 #define M0_CNT_DEC(cnt) \ 221 M0_ASSERT((cnt) != 0); \ 226 #define M0_CNT_INC(cnt) \ 229 M0_ASSERT((cnt) != 0); \ 245 static inline uint64_t
m0_enc(uint64_t width, uint64_t row, uint64_t column)
248 return row * width + column;
256 static inline void m0_dec(uint64_t width, uint64_t pos, uint64_t *row,
260 *column = pos % width;
static struct m0_addb2_philter p
static struct m0_semaphore q
static bool m0_is_po2(uint64_t val)
static bool m0_addu64_will_overflow(uint64_t a, uint64_t b)
M0_INTERNAL bool m0_mod_ge(uint64_t x0, uint64_t x1)
static int32_t max32(int32_t a, int32_t b)
static uint64_t m0_clip64u(uint64_t lo, uint64_t hi, uint64_t x)
static int64_t max64(int64_t a, int64_t b)
M0_INTERNAL uint64_t m0_rnd(uint64_t max, uint64_t *seed)
static bool m0_is_aligned(uint64_t val, uint64_t alignment)
static long long max(long long a, long long b)
static uint64_t min64u(uint64_t a, uint64_t b)
M0_INTERNAL uint64_t m0_gcd64(uint64_t p, uint64_t q)
M0_INTERNAL bool m0_mod_gt(uint64_t x0, uint64_t x1)
static uint64_t m0_enc(uint64_t width, uint64_t row, uint64_t column)
static uint32_t min32u(uint32_t a, uint32_t b)
M0_INTERNAL uint64_t m0_rnd64(uint64_t *seed)
static void m0_dec(uint64_t width, uint64_t pos, uint64_t *row, uint64_t *column)
static int64_t min64(int64_t a, int64_t b)
static uint32_t max32u(uint32_t a, uint32_t b)
static unsigned m0_log2(uint64_t val)
static int32_t min32(int32_t a, int32_t b)
static uint64_t m0_align(uint64_t val, uint64_t alignment)
static uint64_t max64u(uint64_t a, uint64_t b)