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