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