blob: d32857482fc33f6255c0cff6752cc304a630b7d5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#pragma once
#include "kernel.h"
#include "types.h"
#define BIT(n) (1 << (n))
static inline void bit_flip(void *addr, uintptr_t bit)
{
uint32_t *map = (uint32_t *)addr;
map += (bit >> 5);
*map ^= (uint32_t)(1 << (bit & 0x1f));
}
static inline int bit_check(const void *addr, uintptr_t bit)
{
const uint32_t *map = (const uint32_t *)addr;
map += (bit >> 5);
return (*map & (1 << (bit & 0x1f)));
}
#define MOD_POW_2(x, y) ((x) & ((y)-1))
#define IS_POW_2(x) (!MOD_POW_2(x, x))
#define SELECT(condition, trueval, falseval) \
(!!(condition) * (trueval) + !condition * (falseval))
|