aboutsummaryrefslogtreecommitdiff
path: root/kernel/include/util/bits.h
diff options
context:
space:
mode:
authornthnluu <nate1299@me.com>2024-01-28 21:20:27 -0500
committernthnluu <nate1299@me.com>2024-01-28 21:20:27 -0500
commitc63f340d90800895f007de64b7d2d14624263331 (patch)
tree2c0849fa597dd6da831c8707b6f2603403778d7b /kernel/include/util/bits.h
Created student weenix repository
Diffstat (limited to 'kernel/include/util/bits.h')
-rw-r--r--kernel/include/util/bits.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/kernel/include/util/bits.h b/kernel/include/util/bits.h
new file mode 100644
index 0000000..d328574
--- /dev/null
+++ b/kernel/include/util/bits.h
@@ -0,0 +1,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))