xref: /src/include/stdbit.h (revision 6296500a85c8474e3ff3fe2f8e4a9d56dd0acd64)
16296500aSRobert Clausecker /*-
26296500aSRobert Clausecker  * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
36296500aSRobert Clausecker  *
46296500aSRobert Clausecker  * SPDX-License-Identifier: BSD-2-Clause
56296500aSRobert Clausecker  */
66296500aSRobert Clausecker 
76296500aSRobert Clausecker #ifndef __STDC_VERSION_STDBIT_H__
86296500aSRobert Clausecker #define __STDC_VERSION_STDBIT_H__ 202311L
96296500aSRobert Clausecker 
106296500aSRobert Clausecker #include <sys/cdefs.h>
116296500aSRobert Clausecker 
126296500aSRobert Clausecker /* byte order */
136296500aSRobert Clausecker #define  __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
146296500aSRobert Clausecker #define  __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
156296500aSRobert Clausecker #define  __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
166296500aSRobert Clausecker 
176296500aSRobert Clausecker #define __generic_bitfunc(func, x) (_Generic(x,				\
186296500aSRobert Clausecker 	unsigned char: func ## _uc,					\
196296500aSRobert Clausecker 	unsigned short: func ## _us,					\
206296500aSRobert Clausecker 	unsigned int: func ## _ui,					\
216296500aSRobert Clausecker 	unsigned long: func ## _ul,					\
226296500aSRobert Clausecker 	unsigned long long: func ## _ull)(x))
236296500aSRobert Clausecker 
246296500aSRobert Clausecker __BEGIN_DECLS
256296500aSRobert Clausecker unsigned int stdc_leading_zeros_uc(unsigned char) __pure2;
266296500aSRobert Clausecker unsigned int stdc_leading_zeros_us(unsigned short) __pure2;
276296500aSRobert Clausecker unsigned int stdc_leading_zeros_ui(unsigned int) __pure2;
286296500aSRobert Clausecker unsigned int stdc_leading_zeros_ul(unsigned long) __pure2;
296296500aSRobert Clausecker unsigned int stdc_leading_zeros_ull(unsigned long long) __pure2;
306296500aSRobert Clausecker #define stdc_leading_zeros(x) __generic_bitfunc(stdc_leading_zeros, x)
316296500aSRobert Clausecker 
326296500aSRobert Clausecker unsigned int stdc_leading_ones_uc(unsigned char) __pure2;
336296500aSRobert Clausecker unsigned int stdc_leading_ones_us(unsigned short) __pure2;
346296500aSRobert Clausecker unsigned int stdc_leading_ones_ui(unsigned int) __pure2;
356296500aSRobert Clausecker unsigned int stdc_leading_ones_ul(unsigned long) __pure2;
366296500aSRobert Clausecker unsigned int stdc_leading_ones_ull(unsigned long long) __pure2;
376296500aSRobert Clausecker #define stdc_leading_ones(x) __generic_bitfunc(stdc_leading_ones, x)
386296500aSRobert Clausecker 
396296500aSRobert Clausecker unsigned int stdc_trailing_zeros_uc(unsigned char) __pure2;
406296500aSRobert Clausecker unsigned int stdc_trailing_zeros_us(unsigned short) __pure2;
416296500aSRobert Clausecker unsigned int stdc_trailing_zeros_ui(unsigned int) __pure2;
426296500aSRobert Clausecker unsigned int stdc_trailing_zeros_ul(unsigned long) __pure2;
436296500aSRobert Clausecker unsigned int stdc_trailing_zeros_ull(unsigned long long) __pure2;
446296500aSRobert Clausecker #define stdc_trailing_zeros(x) __generic_bitfunc(stdc_trailing_zeros, x)
456296500aSRobert Clausecker 
466296500aSRobert Clausecker unsigned int stdc_trailing_ones_uc(unsigned char) __pure2;
476296500aSRobert Clausecker unsigned int stdc_trailing_ones_us(unsigned short) __pure2;
486296500aSRobert Clausecker unsigned int stdc_trailing_ones_ui(unsigned int) __pure2;
496296500aSRobert Clausecker unsigned int stdc_trailing_ones_ul(unsigned long) __pure2;
506296500aSRobert Clausecker unsigned int stdc_trailing_ones_ull(unsigned long long) __pure2;
516296500aSRobert Clausecker #define stdc_trailing_ones(x) __generic_bitfunc(stdc_trailing_ones, x)
526296500aSRobert Clausecker 
536296500aSRobert Clausecker unsigned int stdc_first_leading_zero_uc(unsigned char) __pure2;
546296500aSRobert Clausecker unsigned int stdc_first_leading_zero_us(unsigned short) __pure2;
556296500aSRobert Clausecker unsigned int stdc_first_leading_zero_ui(unsigned int) __pure2;
566296500aSRobert Clausecker unsigned int stdc_first_leading_zero_ul(unsigned long) __pure2;
576296500aSRobert Clausecker unsigned int stdc_first_leading_zero_ull(unsigned long long) __pure2;
586296500aSRobert Clausecker #define stdc_first_leading_zero(x) __generic_bitfunc(stdc_first_leading_zero, x)
596296500aSRobert Clausecker 
606296500aSRobert Clausecker unsigned int stdc_first_leading_one_uc(unsigned char) __pure2;
616296500aSRobert Clausecker unsigned int stdc_first_leading_one_us(unsigned short) __pure2;
626296500aSRobert Clausecker unsigned int stdc_first_leading_one_ui(unsigned int) __pure2;
636296500aSRobert Clausecker unsigned int stdc_first_leading_one_ul(unsigned long) __pure2;
646296500aSRobert Clausecker unsigned int stdc_first_leading_one_ull(unsigned long long) __pure2;
656296500aSRobert Clausecker #define stdc_first_leading_one(x) __generic_bitfunc(stdc_first_leading_one, x)
666296500aSRobert Clausecker 
676296500aSRobert Clausecker unsigned int stdc_first_trailing_zero_uc(unsigned char) __pure2;
686296500aSRobert Clausecker unsigned int stdc_first_trailing_zero_us(unsigned short) __pure2;
696296500aSRobert Clausecker unsigned int stdc_first_trailing_zero_ui(unsigned int) __pure2;
706296500aSRobert Clausecker unsigned int stdc_first_trailing_zero_ul(unsigned long) __pure2;
716296500aSRobert Clausecker unsigned int stdc_first_trailing_zero_ull(unsigned long long) __pure2;
726296500aSRobert Clausecker #define stdc_first_trailing_zero(x) __generic_bitfunc(stdc_first_trailing_zero, x)
736296500aSRobert Clausecker 
746296500aSRobert Clausecker unsigned int stdc_first_trailing_one_uc(unsigned char) __pure2;
756296500aSRobert Clausecker unsigned int stdc_first_trailing_one_us(unsigned short) __pure2;
766296500aSRobert Clausecker unsigned int stdc_first_trailing_one_ui(unsigned int) __pure2;
776296500aSRobert Clausecker unsigned int stdc_first_trailing_one_ul(unsigned long) __pure2;
786296500aSRobert Clausecker unsigned int stdc_first_trailing_one_ull(unsigned long long) __pure2;
796296500aSRobert Clausecker #define stdc_first_trailing_one(x) __generic_bitfunc(stdc_first_trailing_one, x)
806296500aSRobert Clausecker 
816296500aSRobert Clausecker unsigned int stdc_count_zeros_uc(unsigned char) __pure2;
826296500aSRobert Clausecker unsigned int stdc_count_zeros_us(unsigned short) __pure2;
836296500aSRobert Clausecker unsigned int stdc_count_zeros_ui(unsigned int) __pure2;
846296500aSRobert Clausecker unsigned int stdc_count_zeros_ul(unsigned long) __pure2;
856296500aSRobert Clausecker unsigned int stdc_count_zeros_ull(unsigned long long) __pure2;
866296500aSRobert Clausecker #define stdc_count_zeros(x) __generic_bitfunc(stdc_count_zeros, x)
876296500aSRobert Clausecker 
886296500aSRobert Clausecker unsigned int stdc_count_ones_uc(unsigned char) __pure2;
896296500aSRobert Clausecker unsigned int stdc_count_ones_us(unsigned short) __pure2;
906296500aSRobert Clausecker unsigned int stdc_count_ones_ui(unsigned int) __pure2;
916296500aSRobert Clausecker unsigned int stdc_count_ones_ul(unsigned long) __pure2;
926296500aSRobert Clausecker unsigned int stdc_count_ones_ull(unsigned long long) __pure2;
936296500aSRobert Clausecker #define stdc_count_ones(x) __generic_bitfunc(stdc_count_ones, x)
946296500aSRobert Clausecker 
956296500aSRobert Clausecker _Bool stdc_has_single_bit_uc(unsigned char) __pure2;
966296500aSRobert Clausecker _Bool stdc_has_single_bit_us(unsigned short) __pure2;
976296500aSRobert Clausecker _Bool stdc_has_single_bit_ui(unsigned int) __pure2;
986296500aSRobert Clausecker _Bool stdc_has_single_bit_ul(unsigned long) __pure2;
996296500aSRobert Clausecker _Bool stdc_has_single_bit_ull(unsigned long long) __pure2;
1006296500aSRobert Clausecker #define stdc_has_single_bit(x) __generic_bitfunc(stdc_has_single_bit, x)
1016296500aSRobert Clausecker 
1026296500aSRobert Clausecker unsigned int stdc_bit_width_uc(unsigned char) __pure2;
1036296500aSRobert Clausecker unsigned int stdc_bit_width_us(unsigned short) __pure2;
1046296500aSRobert Clausecker unsigned int stdc_bit_width_ui(unsigned int) __pure2;
1056296500aSRobert Clausecker unsigned int stdc_bit_width_ul(unsigned long) __pure2;
1066296500aSRobert Clausecker unsigned int stdc_bit_width_ull(unsigned long long) __pure2;
1076296500aSRobert Clausecker #define stdc_bit_width(x) __generic_bitfunc(stdc_bit_width, x)
1086296500aSRobert Clausecker 
1096296500aSRobert Clausecker unsigned char stdc_bit_floor_uc(unsigned char) __pure2;
1106296500aSRobert Clausecker unsigned short stdc_bit_floor_us(unsigned short) __pure2;
1116296500aSRobert Clausecker unsigned stdc_bit_floor_ui(unsigned int) __pure2;
1126296500aSRobert Clausecker unsigned long stdc_bit_floor_ul(unsigned long) __pure2;
1136296500aSRobert Clausecker unsigned long long stdc_bit_floor_ull(unsigned long long) __pure2;
1146296500aSRobert Clausecker #define stdc_bit_floor(x) __generic_bitfunc(stdc_bit_floor, x)
1156296500aSRobert Clausecker 
1166296500aSRobert Clausecker unsigned char stdc_bit_ceil_uc(unsigned char) __pure2;
1176296500aSRobert Clausecker unsigned short stdc_bit_ceil_us(unsigned short) __pure2;
1186296500aSRobert Clausecker unsigned int stdc_bit_ceil_ui(unsigned int) __pure2;
1196296500aSRobert Clausecker unsigned long stdc_bit_ceil_ul(unsigned long) __pure2;
1206296500aSRobert Clausecker unsigned long long stdc_bit_ceil_ull(unsigned long long) __pure2;
1216296500aSRobert Clausecker #define stdc_bit_ceil(x) __generic_bitfunc(stdc_bit_ceil, x)
1226296500aSRobert Clausecker __END_DECLS
1236296500aSRobert Clausecker 
1246296500aSRobert Clausecker #endif /* __STDC_VERSION_STDBIT_H__ */
125