xref: /freebsd/include/stdbit.h (revision ade8a27ea4c28d12fabc2d5f8e44386a3add23d1)
1 /*-
2  * Copyright (c) 2025-2026 Robert Clausecker <fuz@FreeBSD.org>
3  *
4  * SPDX-License-Identifier: BSD-2-Clause
5  */
6 
7 #ifndef __STDC_VERSION_STDBIT_H__
8 #define __STDC_VERSION_STDBIT_H__ 202311L
9 
10 #include <sys/cdefs.h>
11 #include <sys/_types.h>
12 #include <sys/_stdint.h>
13 
14 #ifndef _SIZE_T_DECLARED
15 typedef __size_t	size_t;
16 #define _SIZE_T_DECLARED
17 #endif
18 
19 #ifndef _INT_LEAST_T_DECLARED
20 typedef	__int_least8_t		int_least8_t;
21 typedef	__int_least16_t		int_least16_t;
22 typedef	__int_least32_t		int_least32_t;
23 typedef	__int_least64_t		int_least64_t;
24 
25 typedef	__uint_least8_t		uint_least8_t;
26 typedef	__uint_least16_t	uint_least16_t;
27 typedef	__uint_least32_t	uint_least32_t;
28 typedef	__uint_least64_t	uint_least64_t;
29 #define _INT_LEAST_T_DECLARED
30 #endif
31 
32 /* byte order */
33 #define  __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
34 #define  __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
35 #define  __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
36 
37 #define __generic_bitfunc(func, x) (_Generic(x,				\
38 	unsigned char: func ## _uc,					\
39 	unsigned short: func ## _us,					\
40 	unsigned int: func ## _ui,					\
41 	unsigned long: func ## _ul,					\
42 	unsigned long long: func ## _ull)(x))
43 
44 __BEGIN_DECLS
45 unsigned int stdc_leading_zeros_uc(unsigned char) __pure2;
46 unsigned int stdc_leading_zeros_us(unsigned short) __pure2;
47 unsigned int stdc_leading_zeros_ui(unsigned int) __pure2;
48 unsigned int stdc_leading_zeros_ul(unsigned long) __pure2;
49 unsigned int stdc_leading_zeros_ull(unsigned long long) __pure2;
50 #define stdc_leading_zeros(x) __generic_bitfunc(stdc_leading_zeros, x)
51 
52 unsigned int stdc_leading_ones_uc(unsigned char) __pure2;
53 unsigned int stdc_leading_ones_us(unsigned short) __pure2;
54 unsigned int stdc_leading_ones_ui(unsigned int) __pure2;
55 unsigned int stdc_leading_ones_ul(unsigned long) __pure2;
56 unsigned int stdc_leading_ones_ull(unsigned long long) __pure2;
57 #define stdc_leading_ones(x) __generic_bitfunc(stdc_leading_ones, x)
58 
59 unsigned int stdc_trailing_zeros_uc(unsigned char) __pure2;
60 unsigned int stdc_trailing_zeros_us(unsigned short) __pure2;
61 unsigned int stdc_trailing_zeros_ui(unsigned int) __pure2;
62 unsigned int stdc_trailing_zeros_ul(unsigned long) __pure2;
63 unsigned int stdc_trailing_zeros_ull(unsigned long long) __pure2;
64 #define stdc_trailing_zeros(x) __generic_bitfunc(stdc_trailing_zeros, x)
65 
66 unsigned int stdc_trailing_ones_uc(unsigned char) __pure2;
67 unsigned int stdc_trailing_ones_us(unsigned short) __pure2;
68 unsigned int stdc_trailing_ones_ui(unsigned int) __pure2;
69 unsigned int stdc_trailing_ones_ul(unsigned long) __pure2;
70 unsigned int stdc_trailing_ones_ull(unsigned long long) __pure2;
71 #define stdc_trailing_ones(x) __generic_bitfunc(stdc_trailing_ones, x)
72 
73 unsigned int stdc_first_leading_zero_uc(unsigned char) __pure2;
74 unsigned int stdc_first_leading_zero_us(unsigned short) __pure2;
75 unsigned int stdc_first_leading_zero_ui(unsigned int) __pure2;
76 unsigned int stdc_first_leading_zero_ul(unsigned long) __pure2;
77 unsigned int stdc_first_leading_zero_ull(unsigned long long) __pure2;
78 #define stdc_first_leading_zero(x) __generic_bitfunc(stdc_first_leading_zero, x)
79 
80 unsigned int stdc_first_leading_one_uc(unsigned char) __pure2;
81 unsigned int stdc_first_leading_one_us(unsigned short) __pure2;
82 unsigned int stdc_first_leading_one_ui(unsigned int) __pure2;
83 unsigned int stdc_first_leading_one_ul(unsigned long) __pure2;
84 unsigned int stdc_first_leading_one_ull(unsigned long long) __pure2;
85 #define stdc_first_leading_one(x) __generic_bitfunc(stdc_first_leading_one, x)
86 
87 unsigned int stdc_first_trailing_zero_uc(unsigned char) __pure2;
88 unsigned int stdc_first_trailing_zero_us(unsigned short) __pure2;
89 unsigned int stdc_first_trailing_zero_ui(unsigned int) __pure2;
90 unsigned int stdc_first_trailing_zero_ul(unsigned long) __pure2;
91 unsigned int stdc_first_trailing_zero_ull(unsigned long long) __pure2;
92 #define stdc_first_trailing_zero(x) __generic_bitfunc(stdc_first_trailing_zero, x)
93 
94 unsigned int stdc_first_trailing_one_uc(unsigned char) __pure2;
95 unsigned int stdc_first_trailing_one_us(unsigned short) __pure2;
96 unsigned int stdc_first_trailing_one_ui(unsigned int) __pure2;
97 unsigned int stdc_first_trailing_one_ul(unsigned long) __pure2;
98 unsigned int stdc_first_trailing_one_ull(unsigned long long) __pure2;
99 #define stdc_first_trailing_one(x) __generic_bitfunc(stdc_first_trailing_one, x)
100 
101 unsigned int stdc_count_zeros_uc(unsigned char) __pure2;
102 unsigned int stdc_count_zeros_us(unsigned short) __pure2;
103 unsigned int stdc_count_zeros_ui(unsigned int) __pure2;
104 unsigned int stdc_count_zeros_ul(unsigned long) __pure2;
105 unsigned int stdc_count_zeros_ull(unsigned long long) __pure2;
106 #define stdc_count_zeros(x) __generic_bitfunc(stdc_count_zeros, x)
107 
108 unsigned int stdc_count_ones_uc(unsigned char) __pure2;
109 unsigned int stdc_count_ones_us(unsigned short) __pure2;
110 unsigned int stdc_count_ones_ui(unsigned int) __pure2;
111 unsigned int stdc_count_ones_ul(unsigned long) __pure2;
112 unsigned int stdc_count_ones_ull(unsigned long long) __pure2;
113 #define stdc_count_ones(x) __generic_bitfunc(stdc_count_ones, x)
114 
115 _Bool stdc_has_single_bit_uc(unsigned char) __pure2;
116 _Bool stdc_has_single_bit_us(unsigned short) __pure2;
117 _Bool stdc_has_single_bit_ui(unsigned int) __pure2;
118 _Bool stdc_has_single_bit_ul(unsigned long) __pure2;
119 _Bool stdc_has_single_bit_ull(unsigned long long) __pure2;
120 #define stdc_has_single_bit(x) __generic_bitfunc(stdc_has_single_bit, x)
121 
122 unsigned int stdc_bit_width_uc(unsigned char) __pure2;
123 unsigned int stdc_bit_width_us(unsigned short) __pure2;
124 unsigned int stdc_bit_width_ui(unsigned int) __pure2;
125 unsigned int stdc_bit_width_ul(unsigned long) __pure2;
126 unsigned int stdc_bit_width_ull(unsigned long long) __pure2;
127 #define stdc_bit_width(x) __generic_bitfunc(stdc_bit_width, x)
128 
129 unsigned char stdc_bit_floor_uc(unsigned char) __pure2;
130 unsigned short stdc_bit_floor_us(unsigned short) __pure2;
131 unsigned stdc_bit_floor_ui(unsigned int) __pure2;
132 unsigned long stdc_bit_floor_ul(unsigned long) __pure2;
133 unsigned long long stdc_bit_floor_ull(unsigned long long) __pure2;
134 #define stdc_bit_floor(x) __generic_bitfunc(stdc_bit_floor, x)
135 
136 unsigned char stdc_bit_ceil_uc(unsigned char) __pure2;
137 unsigned short stdc_bit_ceil_us(unsigned short) __pure2;
138 unsigned int stdc_bit_ceil_ui(unsigned int) __pure2;
139 unsigned long stdc_bit_ceil_ul(unsigned long) __pure2;
140 unsigned long long stdc_bit_ceil_ull(unsigned long long) __pure2;
141 #define stdc_bit_ceil(x) __generic_bitfunc(stdc_bit_ceil, x)
142 __END_DECLS
143 
144 #endif /* __STDC_VERSION_STDBIT_H__ */
145