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