xref: /freebsd/include/stdbit.h (revision 6296500a85c8474e3ff3fe2f8e4a9d56dd0acd64)
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