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