1 // SPDX-License-Identifier: MIT
2 // SPDX-FileCopyrightText: 2024 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 #ifndef _RSEQ_ALLOC_UTILS_H
5 #define _RSEQ_ALLOC_UTILS_H
7 #define RSEQ_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
9 #define __rseq_align_mask(v, mask) (((v) + (mask)) & ~(mask))
10 #define rseq_align(v, align) __rseq_align_mask(v, (__typeof__(v)) (align) - 1)
13 unsigned int rseq_fls_u64(uint64_t x
)
20 if (!(x
& 0xFFFFFFFF00000000ULL
)) {
24 if (!(x
& 0xFFFF000000000000ULL
)) {
28 if (!(x
& 0xFF00000000000000ULL
)) {
32 if (!(x
& 0xF000000000000000ULL
)) {
36 if (!(x
& 0xC000000000000000ULL
)) {
40 if (!(x
& 0x8000000000000000ULL
)) {
48 unsigned int rseq_fls_u32(uint32_t x
)
54 if (!(x
& 0xFFFF0000U
)) {
58 if (!(x
& 0xFF000000U
)) {
62 if (!(x
& 0xF0000000U
)) {
66 if (!(x
& 0xC0000000U
)) {
70 if (!(x
& 0x80000000U
)) {
78 unsigned int rseq_fls_ulong(unsigned long x
)
80 #if RSEQ_BITS_PER_LONG == 32
81 return rseq_fls_u32(x
);
83 return rseq_fls_u64(x
);
88 * Return the minimum order for which x <= (1UL << order).
89 * Return -1 if x is 0.
92 int rseq_get_count_order_ulong(unsigned long x
)
97 return rseq_fls_ulong(x
- 1);
100 #define RSEQ_DEFAULT_PAGE_SIZE 4096
103 long rseq_get_page_len(void)
105 long page_len
= sysconf(_SC_PAGE_SIZE
);
108 page_len
= RSEQ_DEFAULT_PAGE_SIZE
;
113 int rseq_hweight_ulong(unsigned long v
)
115 return __builtin_popcountl(v
);
118 #endif /* _RSEQ_ALLOC_UTILS_H */
This page took 0.031163 seconds and 4 git commands to generate.