1//===-- Definition of macros to be used with stdbit functions ----------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef __LLVM_LIBC_MACROS_STDBIT_MACROS_H
10#define __LLVM_LIBC_MACROS_STDBIT_MACROS_H
11
12#define __STDC_VERSION_STDBIT_H__ 202311L
13#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
14#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
15#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
16
17// TODO(https://github.com/llvm/llvm-project/issues/80509): support _BitInt().
18#ifdef __cplusplus
19inline unsigned stdc_leading_zeros(unsigned char x) {
20 return stdc_leading_zeros_uc(x);
21}
22inline unsigned stdc_leading_zeros(unsigned short x) {
23 return stdc_leading_zeros_us(x);
24}
25inline unsigned stdc_leading_zeros(unsigned x) {
26 return stdc_leading_zeros_ui(x);
27}
28inline unsigned stdc_leading_zeros(unsigned long x) {
29 return stdc_leading_zeros_ul(x);
30}
31inline unsigned stdc_leading_zeros(unsigned long long x) {
32 return stdc_leading_zeros_ull(x);
33}
34inline unsigned stdc_leading_ones(unsigned char x) {
35 return stdc_leading_ones_uc(x);
36}
37inline unsigned stdc_leading_ones(unsigned short x) {
38 return stdc_leading_ones_us(x);
39}
40inline unsigned stdc_leading_ones(unsigned x) {
41 return stdc_leading_ones_ui(x);
42}
43inline unsigned stdc_leading_ones(unsigned long x) {
44 return stdc_leading_ones_ul(x);
45}
46inline unsigned stdc_leading_ones(unsigned long long x) {
47 return stdc_leading_ones_ull(x);
48}
49inline unsigned stdc_trailing_zeros(unsigned char x) {
50 return stdc_trailing_zeros_uc(x);
51}
52inline unsigned stdc_trailing_zeros(unsigned short x) {
53 return stdc_trailing_zeros_us(x);
54}
55inline unsigned stdc_trailing_zeros(unsigned x) {
56 return stdc_trailing_zeros_ui(x);
57}
58inline unsigned stdc_trailing_zeros(unsigned long x) {
59 return stdc_trailing_zeros_ul(x);
60}
61inline unsigned stdc_trailing_zeros(unsigned long long x) {
62 return stdc_trailing_zeros_ull(x);
63}
64inline unsigned stdc_trailing_ones(unsigned char x) {
65 return stdc_trailing_ones_uc(x);
66}
67inline unsigned stdc_trailing_ones(unsigned short x) {
68 return stdc_trailing_ones_us(x);
69}
70inline unsigned stdc_trailing_ones(unsigned x) {
71 return stdc_trailing_ones_ui(x);
72}
73inline unsigned stdc_trailing_ones(unsigned long x) {
74 return stdc_trailing_ones_ul(x);
75}
76inline unsigned stdc_trailing_ones(unsigned long long x) {
77 return stdc_trailing_ones_ull(x);
78}
79inline unsigned stdc_first_leading_zero(unsigned char x) {
80 return stdc_first_leading_zero_uc(x);
81}
82inline unsigned stdc_first_leading_zero(unsigned short x) {
83 return stdc_first_leading_zero_us(x);
84}
85inline unsigned stdc_first_leading_zero(unsigned x) {
86 return stdc_first_leading_zero_ui(x);
87}
88inline unsigned stdc_first_leading_zero(unsigned long x) {
89 return stdc_first_leading_zero_ul(x);
90}
91inline unsigned stdc_first_leading_zero(unsigned long long x) {
92 return stdc_first_leading_zero_ull(x);
93}
94inline unsigned stdc_first_leading_one(unsigned char x) {
95 return stdc_first_leading_one_uc(x);
96}
97inline unsigned stdc_first_leading_one(unsigned short x) {
98 return stdc_first_leading_one_us(x);
99}
100inline unsigned stdc_first_leading_one(unsigned x) {
101 return stdc_first_leading_one_ui(x);
102}
103inline unsigned stdc_first_leading_one(unsigned long x) {
104 return stdc_first_leading_one_ul(x);
105}
106inline unsigned stdc_first_leading_one(unsigned long long x) {
107 return stdc_first_leading_one_ull(x);
108}
109inline unsigned stdc_first_trailing_zero(unsigned char x) {
110 return stdc_first_trailing_zero_uc(x);
111}
112inline unsigned stdc_first_trailing_zero(unsigned short x) {
113 return stdc_first_trailing_zero_us(x);
114}
115inline unsigned stdc_first_trailing_zero(unsigned x) {
116 return stdc_first_trailing_zero_ui(x);
117}
118inline unsigned stdc_first_trailing_zero(unsigned long x) {
119 return stdc_first_trailing_zero_ul(x);
120}
121inline unsigned stdc_first_trailing_zero(unsigned long long x) {
122 return stdc_first_trailing_zero_ull(x);
123}
124inline unsigned stdc_first_trailing_one(unsigned char x) {
125 return stdc_first_trailing_one_uc(x);
126}
127inline unsigned stdc_first_trailing_one(unsigned short x) {
128 return stdc_first_trailing_one_us(x);
129}
130inline unsigned stdc_first_trailing_one(unsigned x) {
131 return stdc_first_trailing_one_ui(x);
132}
133inline unsigned stdc_first_trailing_one(unsigned long x) {
134 return stdc_first_trailing_one_ul(x);
135}
136inline unsigned stdc_first_trailing_one(unsigned long long x) {
137 return stdc_first_trailing_one_ull(x);
138}
139inline unsigned stdc_count_zeros(unsigned char x) {
140 return stdc_count_zeros_uc(x);
141}
142inline unsigned stdc_count_zeros(unsigned short x) {
143 return stdc_count_zeros_us(x);
144}
145inline unsigned stdc_count_zeros(unsigned x) { return stdc_count_zeros_ui(x); }
146inline unsigned stdc_count_zeros(unsigned long x) {
147 return stdc_count_zeros_ul(x);
148}
149inline unsigned stdc_count_zeros(unsigned long long x) {
150 return stdc_count_zeros_ull(x);
151}
152inline unsigned stdc_count_ones(unsigned char x) {
153 return stdc_count_ones_uc(x);
154}
155inline unsigned stdc_count_ones(unsigned short x) {
156 return stdc_count_ones_us(x);
157}
158inline unsigned stdc_count_ones(unsigned x) { return stdc_count_ones_ui(x); }
159inline unsigned stdc_count_ones(unsigned long x) {
160 return stdc_count_ones_ul(x);
161}
162inline unsigned stdc_count_ones(unsigned long long x) {
163 return stdc_count_ones_ull(x);
164}
165inline bool stdc_has_single_bit(unsigned char x) {
166 return stdc_has_single_bit_uc(x);
167}
168inline bool stdc_has_single_bit(unsigned short x) {
169 return stdc_has_single_bit_us(x);
170}
171inline bool stdc_has_single_bit(unsigned x) {
172 return stdc_has_single_bit_ui(x);
173}
174inline bool stdc_has_single_bit(unsigned long x) {
175 return stdc_has_single_bit_ul(x);
176}
177inline bool stdc_has_single_bit(unsigned long long x) {
178 return stdc_has_single_bit_ull(x);
179}
180inline unsigned stdc_bit_width(unsigned char x) { return stdc_bit_width_uc(x); }
181inline unsigned stdc_bit_width(unsigned short x) {
182 return stdc_bit_width_us(x);
183}
184inline unsigned stdc_bit_width(unsigned x) { return stdc_bit_width_ui(x); }
185inline unsigned stdc_bit_width(unsigned long x) { return stdc_bit_width_ul(x); }
186inline unsigned stdc_bit_width(unsigned long long x) {
187 return stdc_bit_width_ull(x);
188}
189inline unsigned char stdc_bit_floor(unsigned char x) {
190 return stdc_bit_floor_uc(x);
191}
192inline unsigned short stdc_bit_floor(unsigned short x) {
193 return stdc_bit_floor_us(x);
194}
195inline unsigned stdc_bit_floor(unsigned x) { return stdc_bit_floor_ui(x); }
196inline unsigned long stdc_bit_floor(unsigned long x) {
197 return stdc_bit_floor_ul(x);
198}
199inline unsigned long long stdc_bit_floor(unsigned long long x) {
200 return stdc_bit_floor_ull(x);
201}
202inline unsigned char stdc_bit_ceil(unsigned char x) {
203 return stdc_bit_ceil_uc(x);
204}
205inline unsigned short stdc_bit_ceil(unsigned short x) {
206 return stdc_bit_ceil_us(x);
207}
208inline unsigned stdc_bit_ceil(unsigned x) { return stdc_bit_ceil_ui(x); }
209inline unsigned long stdc_bit_ceil(unsigned long x) {
210 return stdc_bit_ceil_ul(x);
211}
212inline unsigned long long stdc_bit_ceil(unsigned long long x) {
213 return stdc_bit_ceil_ull(x);
214}
215#else
216#define stdc_leading_zeros(x) \
217 _Generic((x), \
218 unsigned char: stdc_leading_zeros_uc, \
219 unsigned short: stdc_leading_zeros_us, \
220 unsigned: stdc_leading_zeros_ui, \
221 unsigned long: stdc_leading_zeros_ul, \
222 unsigned long long: stdc_leading_zeros_ull)(x)
223#define stdc_leading_ones(x) \
224 _Generic((x), \
225 unsigned char: stdc_leading_ones_uc, \
226 unsigned short: stdc_leading_ones_us, \
227 unsigned: stdc_leading_ones_ui, \
228 unsigned long: stdc_leading_ones_ul, \
229 unsigned long long: stdc_leading_ones_ull)(x)
230#define stdc_trailing_zeros(x) \
231 _Generic((x), \
232 unsigned char: stdc_trailing_zeros_uc, \
233 unsigned short: stdc_trailing_zeros_us, \
234 unsigned: stdc_trailing_zeros_ui, \
235 unsigned long: stdc_trailing_zeros_ul, \
236 unsigned long long: stdc_trailing_zeros_ull)(x)
237#define stdc_trailing_ones(x) \
238 _Generic((x), \
239 unsigned char: stdc_trailing_ones_uc, \
240 unsigned short: stdc_trailing_ones_us, \
241 unsigned: stdc_trailing_ones_ui, \
242 unsigned long: stdc_trailing_ones_ul, \
243 unsigned long long: stdc_trailing_ones_ull)(x)
244#define stdc_first_leading_zero(x) \
245 _Generic((x), \
246 unsigned char: stdc_first_leading_zero_uc, \
247 unsigned short: stdc_first_leading_zero_us, \
248 unsigned: stdc_first_leading_zero_ui, \
249 unsigned long: stdc_first_leading_zero_ul, \
250 unsigned long long: stdc_first_leading_zero_ull)(x)
251#define stdc_first_leading_one(x) \
252 _Generic((x), \
253 unsigned char: stdc_first_leading_one_uc, \
254 unsigned short: stdc_first_leading_one_us, \
255 unsigned: stdc_first_leading_one_ui, \
256 unsigned long: stdc_first_leading_one_ul, \
257 unsigned long long: stdc_first_leading_one_ull)(x)
258#define stdc_first_trailing_zero(x) \
259 _Generic((x), \
260 unsigned char: stdc_first_trailing_zero_uc, \
261 unsigned short: stdc_first_trailing_zero_us, \
262 unsigned: stdc_first_trailing_zero_ui, \
263 unsigned long: stdc_first_trailing_zero_ul, \
264 unsigned long long: stdc_first_trailing_zero_ull)(x)
265#define stdc_first_trailing_one(x) \
266 _Generic((x), \
267 unsigned char: stdc_first_trailing_one_uc, \
268 unsigned short: stdc_first_trailing_one_us, \
269 unsigned: stdc_first_trailing_one_ui, \
270 unsigned long: stdc_first_trailing_one_ul, \
271 unsigned long long: stdc_first_trailing_one_ull)(x)
272#define stdc_count_zeros(x) \
273 _Generic((x), \
274 unsigned char: stdc_count_zeros_uc, \
275 unsigned short: stdc_count_zeros_us, \
276 unsigned: stdc_count_zeros_ui, \
277 unsigned long: stdc_count_zeros_ul, \
278 unsigned long long: stdc_count_zeros_ull)(x)
279#define stdc_count_ones(x) \
280 _Generic((x), \
281 unsigned char: stdc_count_ones_uc, \
282 unsigned short: stdc_count_ones_us, \
283 unsigned: stdc_count_ones_ui, \
284 unsigned long: stdc_count_ones_ul, \
285 unsigned long long: stdc_count_ones_ull)(x)
286#define stdc_has_single_bit(x) \
287 _Generic((x), \
288 unsigned char: stdc_has_single_bit_uc, \
289 unsigned short: stdc_has_single_bit_us, \
290 unsigned: stdc_has_single_bit_ui, \
291 unsigned long: stdc_has_single_bit_ul, \
292 unsigned long long: stdc_has_single_bit_ull)(x)
293#define stdc_bit_width(x) \
294 _Generic((x), \
295 unsigned char: stdc_bit_width_uc, \
296 unsigned short: stdc_bit_width_us, \
297 unsigned: stdc_bit_width_ui, \
298 unsigned long: stdc_bit_width_ul, \
299 unsigned long long: stdc_bit_width_ull)(x)
300#define stdc_bit_floor(x) \
301 _Generic((x), \
302 unsigned char: stdc_bit_floor_uc, \
303 unsigned short: stdc_bit_floor_us, \
304 unsigned: stdc_bit_floor_ui, \
305 unsigned long: stdc_bit_floor_ul, \
306 unsigned long long: stdc_bit_floor_ull)(x)
307#define stdc_bit_ceil(x) \
308 _Generic((x), \
309 unsigned char: stdc_bit_ceil_uc, \
310 unsigned short: stdc_bit_ceil_us, \
311 unsigned: stdc_bit_ceil_ui, \
312 unsigned long: stdc_bit_ceil_ul, \
313 unsigned long long: stdc_bit_ceil_ull)(x)
314#endif // __cplusplus
315
316#endif // __LLVM_LIBC_MACROS_STDBIT_MACROS_H
317

source code of libc/include/llvm-libc-macros/stdbit-macros.h