Skip to content

Commit 7caeb88

Browse files
New features and macros have been added to the types.h library.
1 parent 69c49d9 commit 7caeb88

1 file changed

Lines changed: 84 additions & 2 deletions

File tree

SystemLib/Std/types.h

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ typedef unsigned int uint32_t;
77
typedef unsigned long long uint64_t;
88

99
typedef unsigned int size_t;
10-
typedef int bool_t;
10+
typedef uint8_t bool_t;
1111

1212
typedef signed char int8_t;
1313
typedef signed short int16_t;
@@ -17,14 +17,96 @@ typedef signed long long int64_t;
1717
typedef float float32_t;
1818
typedef double float64_t;
1919

20+
typedef unsigned long uintptr_t;
21+
typedef signed long intptr_t;
22+
23+
typedef volatile uint32_t atomic32_t;
24+
typedef volatile uint64_t atomic64_t;
25+
2026
#define true 1
2127
#define false 0
2228

2329
#define NULL ((void *)0)
2430

31+
#define ALIGN_UP(x, align) (((x) + ((align) - 1)) & ~((align) - 1))
32+
#define ALIGN_DOWN(x, align) ((x) & ~((align) - 1))
33+
34+
#define PACKED __attribute__((packed))
35+
#define INLINE __attribute__((always_inline)) inline
36+
#define NORETURN __attribute__((noreturn))
37+
38+
#define BIT(n) (1U << (n))
39+
#define SET_BIT(x, n) ((x) |= BIT(n))
40+
#define CLEAR_BIT(x, n) ((x) &= ~BIT(n))
41+
#define TOGGLE_BIT(x, n) ((x) ^= BIT(n))
42+
#define CHECK_BIT(x, n) ((x) & BIT(n))
43+
44+
#define UINT8_MAX ((uint8_t)0xFF)
45+
#define UINT16_MAX ((uint16_t)0xFFFF)
46+
#define UINT32_MAX ((uint32_t)0xFFFFFFFF)
47+
#define UINT64_MAX ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
48+
49+
#define OFFSET_OF(type, member) ((size_t)&(((type *)0)->member))
50+
#define CONTAINER_OF(ptr, type, member) ((type *)((char *)(ptr) - OFFSET_OF(type, member)))
51+
52+
#define MIN(a, b) ((a) < (b) ? (a) : (b))
53+
#define MAX(a, b) ((a) > (b) ? (a) : (b))
54+
#define CLAMP(x, min, max) (MAX((min), MIN((x), (max))))
55+
56+
#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
57+
58+
#define UNUSED(x) (void)(x)
59+
#define STATIC_ASSERT(cond, msg) typedef char static_assert_##msg[(cond)?1:-1]
60+
61+
#define likely(x) __builtin_expect(!!(x), 1)
62+
#define unlikely(x) __builtin_expect(!!(x), 0)
63+
64+
#define MEMORY_BARRIER() __asm__ volatile("" ::: "memory")
65+
66+
#define SWAP(a, b) do { \
67+
typeof(a) _tmp = (a); \
68+
(a) = (b); \
69+
(b) = _tmp; \
70+
} while(0)
71+
72+
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
73+
#define IS_ALIGNED(x, a) (((x) & ((a) - 1)) == 0)
74+
75+
#define CONTAINER_OF_SAFE(ptr, type, member) \
76+
(ptr ? CONTAINER_OF(ptr, type, member) : NULL)
77+
78+
#define BIT_MASK(len) ((1U << (len)) - 1)
79+
#define BIT_RANGE(x, start, len) (((x) >> (start)) & BIT_MASK(len))
80+
81+
#define READ_ONCE(x) (*(volatile typeof(x) *)&(x))
82+
#define WRITE_ONCE(x, val) (*(volatile typeof(x) *)&(x) = (val))
83+
84+
#define BUG() __builtin_trap()
85+
86+
#define TYPE_CHECK(x, y) (!!(sizeof((x) == (y))))
87+
88+
#define ASSERT_ALIGNED(x, a) STATIC_ASSERT(((a) & ((a) - 1)) == 0, alignment_must_be_power_of_two)
89+
90+
#define PAGE_SIZE 4096
91+
#define PAGE_ALIGN(x) ALIGN_UP(x, PAGE_SIZE)
92+
#define PAGE_ALIGN_DOWN(x) ALIGN_DOWN(x, PAGE_SIZE)
93+
94+
#define KB(x) ((x) * 1024ULL)
95+
#define MB(x) (KB(x) * 1024ULL)
96+
#define GB(x) (MB(x) * 1024ULL)
97+
98+
#define PTR_ADD(ptr, val) ((void *)((uint8_t *)(ptr) + (val)))
99+
#define PTR_SUB(ptr, val) ((void *)((uint8_t *)(ptr) - (val)))
100+
101+
#define IS_NULL(ptr) ((ptr) == NULL)
102+
#define BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2*!!(cond)]))
103+
104+
#define PREFETCH(x) __builtin_prefetch(x)
105+
#define CPU_RELAX() __asm__ volatile("pause" ::: "memory")
106+
25107
#define TYPES_MODULE_NAME "Types Library"
26108
#define TYPES_MODULE_DESC "Types Library for OpenKernel"
27-
#define TYPES_MODULE_VER "1.0"
109+
#define TYPES_MODULE_VER "2.0"
28110
#define TYPES_MODULE_AUTHOR "OpenSoftware-World"
29111
#define TYPES_MODULE_FILE_NAME "types.lib"
30112
#define TYPES_MODULE_KRNL_VER "2.0"

0 commit comments

Comments
 (0)