Remove kernel-specific parts of ros/common.h (XCC)
[akaros.git] / kern / include / common.h
1 #pragma once
2
3 #include <ros/common.h>
4 #include <compiler.h>
5
6 /* Force a rebuild of the whole kernel if 64BIT-ness changed */
7 #ifdef CONFIG_64BIT
8 #endif
9
10 #define SIZE_MAX        (~(size_t)0)
11
12 // Efficient min and max operations
13 #define MIN(_a, _b)                                             \
14 ({                                                              \
15         typeof(_a) __a = (_a);                                  \
16         typeof(_b) __b = (_b);                                  \
17         __a <= __b ? __a : __b;                                 \
18 })
19 #define MAX(_a, _b)                                             \
20 ({                                                              \
21         typeof(_a) __a = (_a);                                  \
22         typeof(_b) __b = (_b);                                  \
23         __a >= __b ? __a : __b;                                 \
24 })
25
26 /* Test for alignment, e.g. 2^6 */
27 #define ALIGNED(p, a)   (!(((uintptr_t)(p)) & ((a)-1)))
28 /* Aligns x up to the mask, e.g. (2^6 - 1) (round up if any mask bits are set)*/
29 #define __ALIGN_MASK(x, mask) (((uintptr_t)(x) + (mask)) & ~(mask))
30 /* Aligns x up to the alignment, e.g. 2^6. */
31 #define ALIGN(x, a) ((typeof(x)) __ALIGN_MASK(x, (a) - 1))
32 /* Will return false for 0.  Debatable, based on what you want. */
33 #define IS_PWR2(x) ((x) && !((x) & (x - 1)))
34
35 #define ARRAY_SIZE(x) COUNT_OF(x)