17bc5eaa0SNick Desaulniers //===-- Definition of macros to be used with stdbit functions ----------===//
27bc5eaa0SNick Desaulniers //
37bc5eaa0SNick Desaulniers // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47bc5eaa0SNick Desaulniers // See https://llvm.org/LICENSE.txt for license information.
57bc5eaa0SNick Desaulniers // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67bc5eaa0SNick Desaulniers //
77bc5eaa0SNick Desaulniers //===----------------------------------------------------------------------===//
87bc5eaa0SNick Desaulniers
97bc5eaa0SNick Desaulniers #ifndef __LLVM_LIBC_MACROS_STDBIT_MACROS_H
107bc5eaa0SNick Desaulniers #define __LLVM_LIBC_MACROS_STDBIT_MACROS_H
117bc5eaa0SNick Desaulniers
12*f0c0ddaeSNick Desaulniers #define __STDC_VERSION_STDBIT_H__ 202311L
13*f0c0ddaeSNick Desaulniers #define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
14*f0c0ddaeSNick Desaulniers #define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
15*f0c0ddaeSNick Desaulniers #define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__
16*f0c0ddaeSNick Desaulniers
177760006dSNick Desaulniers // TODO(https://github.com/llvm/llvm-project/issues/80509): support _BitInt().
185a7a8f73SNick Desaulniers #ifdef __cplusplus
stdc_leading_zeros(unsigned char x)19edbd93d3SNick Desaulniers inline unsigned stdc_leading_zeros(unsigned char x) {
205a7a8f73SNick Desaulniers return stdc_leading_zeros_uc(x);
215a7a8f73SNick Desaulniers }
stdc_leading_zeros(unsigned short x)22edbd93d3SNick Desaulniers inline unsigned stdc_leading_zeros(unsigned short x) {
235a7a8f73SNick Desaulniers return stdc_leading_zeros_us(x);
245a7a8f73SNick Desaulniers }
stdc_leading_zeros(unsigned x)255a7a8f73SNick Desaulniers inline unsigned stdc_leading_zeros(unsigned x) {
265a7a8f73SNick Desaulniers return stdc_leading_zeros_ui(x);
275a7a8f73SNick Desaulniers }
stdc_leading_zeros(unsigned long x)28edbd93d3SNick Desaulniers inline unsigned stdc_leading_zeros(unsigned long x) {
295a7a8f73SNick Desaulniers return stdc_leading_zeros_ul(x);
305a7a8f73SNick Desaulniers }
stdc_leading_zeros(unsigned long long x)31edbd93d3SNick Desaulniers inline unsigned stdc_leading_zeros(unsigned long long x) {
325a7a8f73SNick Desaulniers return stdc_leading_zeros_ull(x);
335a7a8f73SNick Desaulniers }
stdc_leading_ones(unsigned char x)34edbd93d3SNick Desaulniers inline unsigned stdc_leading_ones(unsigned char x) {
356a3fde6dSNick Desaulniers return stdc_leading_ones_uc(x);
366a3fde6dSNick Desaulniers }
stdc_leading_ones(unsigned short x)37edbd93d3SNick Desaulniers inline unsigned stdc_leading_ones(unsigned short x) {
386a3fde6dSNick Desaulniers return stdc_leading_ones_us(x);
396a3fde6dSNick Desaulniers }
stdc_leading_ones(unsigned x)406a3fde6dSNick Desaulniers inline unsigned stdc_leading_ones(unsigned x) {
416a3fde6dSNick Desaulniers return stdc_leading_ones_ui(x);
426a3fde6dSNick Desaulniers }
stdc_leading_ones(unsigned long x)43edbd93d3SNick Desaulniers inline unsigned stdc_leading_ones(unsigned long x) {
446a3fde6dSNick Desaulniers return stdc_leading_ones_ul(x);
456a3fde6dSNick Desaulniers }
stdc_leading_ones(unsigned long long x)46edbd93d3SNick Desaulniers inline unsigned stdc_leading_ones(unsigned long long x) {
476a3fde6dSNick Desaulniers return stdc_leading_ones_ull(x);
486a3fde6dSNick Desaulniers }
stdc_trailing_zeros(unsigned char x)49d5a3de4aSNick Desaulniers inline unsigned stdc_trailing_zeros(unsigned char x) {
50d5a3de4aSNick Desaulniers return stdc_trailing_zeros_uc(x);
51d5a3de4aSNick Desaulniers }
stdc_trailing_zeros(unsigned short x)52d5a3de4aSNick Desaulniers inline unsigned stdc_trailing_zeros(unsigned short x) {
53d5a3de4aSNick Desaulniers return stdc_trailing_zeros_us(x);
54d5a3de4aSNick Desaulniers }
stdc_trailing_zeros(unsigned x)55d5a3de4aSNick Desaulniers inline unsigned stdc_trailing_zeros(unsigned x) {
56d5a3de4aSNick Desaulniers return stdc_trailing_zeros_ui(x);
57d5a3de4aSNick Desaulniers }
stdc_trailing_zeros(unsigned long x)58d5a3de4aSNick Desaulniers inline unsigned stdc_trailing_zeros(unsigned long x) {
59d5a3de4aSNick Desaulniers return stdc_trailing_zeros_ul(x);
60d5a3de4aSNick Desaulniers }
stdc_trailing_zeros(unsigned long long x)61d5a3de4aSNick Desaulniers inline unsigned stdc_trailing_zeros(unsigned long long x) {
62d5a3de4aSNick Desaulniers return stdc_trailing_zeros_ull(x);
63d5a3de4aSNick Desaulniers }
stdc_trailing_ones(unsigned char x)647760006dSNick Desaulniers inline unsigned stdc_trailing_ones(unsigned char x) {
657760006dSNick Desaulniers return stdc_trailing_ones_uc(x);
667760006dSNick Desaulniers }
stdc_trailing_ones(unsigned short x)677760006dSNick Desaulniers inline unsigned stdc_trailing_ones(unsigned short x) {
687760006dSNick Desaulniers return stdc_trailing_ones_us(x);
697760006dSNick Desaulniers }
stdc_trailing_ones(unsigned x)707760006dSNick Desaulniers inline unsigned stdc_trailing_ones(unsigned x) {
717760006dSNick Desaulniers return stdc_trailing_ones_ui(x);
727760006dSNick Desaulniers }
stdc_trailing_ones(unsigned long x)737760006dSNick Desaulniers inline unsigned stdc_trailing_ones(unsigned long x) {
747760006dSNick Desaulniers return stdc_trailing_ones_ul(x);
757760006dSNick Desaulniers }
stdc_trailing_ones(unsigned long long x)767760006dSNick Desaulniers inline unsigned stdc_trailing_ones(unsigned long long x) {
777760006dSNick Desaulniers return stdc_trailing_ones_ull(x);
787760006dSNick Desaulniers }
stdc_first_leading_zero(unsigned char x)79d2d6b368SNick Desaulniers inline unsigned stdc_first_leading_zero(unsigned char x) {
80d2d6b368SNick Desaulniers return stdc_first_leading_zero_uc(x);
81d2d6b368SNick Desaulniers }
stdc_first_leading_zero(unsigned short x)82d2d6b368SNick Desaulniers inline unsigned stdc_first_leading_zero(unsigned short x) {
83d2d6b368SNick Desaulniers return stdc_first_leading_zero_us(x);
84d2d6b368SNick Desaulniers }
stdc_first_leading_zero(unsigned x)85d2d6b368SNick Desaulniers inline unsigned stdc_first_leading_zero(unsigned x) {
86d2d6b368SNick Desaulniers return stdc_first_leading_zero_ui(x);
87d2d6b368SNick Desaulniers }
stdc_first_leading_zero(unsigned long x)88d2d6b368SNick Desaulniers inline unsigned stdc_first_leading_zero(unsigned long x) {
89d2d6b368SNick Desaulniers return stdc_first_leading_zero_ul(x);
90d2d6b368SNick Desaulniers }
stdc_first_leading_zero(unsigned long long x)91d2d6b368SNick Desaulniers inline unsigned stdc_first_leading_zero(unsigned long long x) {
92d2d6b368SNick Desaulniers return stdc_first_leading_zero_ull(x);
93d2d6b368SNick Desaulniers }
stdc_first_leading_one(unsigned char x)9460596716SNick Desaulniers inline unsigned stdc_first_leading_one(unsigned char x) {
9560596716SNick Desaulniers return stdc_first_leading_one_uc(x);
9660596716SNick Desaulniers }
stdc_first_leading_one(unsigned short x)9760596716SNick Desaulniers inline unsigned stdc_first_leading_one(unsigned short x) {
9860596716SNick Desaulniers return stdc_first_leading_one_us(x);
9960596716SNick Desaulniers }
stdc_first_leading_one(unsigned x)10060596716SNick Desaulniers inline unsigned stdc_first_leading_one(unsigned x) {
10160596716SNick Desaulniers return stdc_first_leading_one_ui(x);
10260596716SNick Desaulniers }
stdc_first_leading_one(unsigned long x)10360596716SNick Desaulniers inline unsigned stdc_first_leading_one(unsigned long x) {
10460596716SNick Desaulniers return stdc_first_leading_one_ul(x);
10560596716SNick Desaulniers }
stdc_first_leading_one(unsigned long long x)10660596716SNick Desaulniers inline unsigned stdc_first_leading_one(unsigned long long x) {
10760596716SNick Desaulniers return stdc_first_leading_one_ull(x);
10860596716SNick Desaulniers }
stdc_first_trailing_zero(unsigned char x)10916e7d684SNick Desaulniers inline unsigned stdc_first_trailing_zero(unsigned char x) {
11016e7d684SNick Desaulniers return stdc_first_trailing_zero_uc(x);
11116e7d684SNick Desaulniers }
stdc_first_trailing_zero(unsigned short x)11216e7d684SNick Desaulniers inline unsigned stdc_first_trailing_zero(unsigned short x) {
11316e7d684SNick Desaulniers return stdc_first_trailing_zero_us(x);
11416e7d684SNick Desaulniers }
stdc_first_trailing_zero(unsigned x)11516e7d684SNick Desaulniers inline unsigned stdc_first_trailing_zero(unsigned x) {
11616e7d684SNick Desaulniers return stdc_first_trailing_zero_ui(x);
11716e7d684SNick Desaulniers }
stdc_first_trailing_zero(unsigned long x)11816e7d684SNick Desaulniers inline unsigned stdc_first_trailing_zero(unsigned long x) {
11916e7d684SNick Desaulniers return stdc_first_trailing_zero_ul(x);
12016e7d684SNick Desaulniers }
stdc_first_trailing_zero(unsigned long long x)12116e7d684SNick Desaulniers inline unsigned stdc_first_trailing_zero(unsigned long long x) {
12216e7d684SNick Desaulniers return stdc_first_trailing_zero_ull(x);
12316e7d684SNick Desaulniers }
stdc_first_trailing_one(unsigned char x)1246297479fSNick Desaulniers inline unsigned stdc_first_trailing_one(unsigned char x) {
1256297479fSNick Desaulniers return stdc_first_trailing_one_uc(x);
1266297479fSNick Desaulniers }
stdc_first_trailing_one(unsigned short x)1276297479fSNick Desaulniers inline unsigned stdc_first_trailing_one(unsigned short x) {
1286297479fSNick Desaulniers return stdc_first_trailing_one_us(x);
1296297479fSNick Desaulniers }
stdc_first_trailing_one(unsigned x)1306297479fSNick Desaulniers inline unsigned stdc_first_trailing_one(unsigned x) {
1316297479fSNick Desaulniers return stdc_first_trailing_one_ui(x);
1326297479fSNick Desaulniers }
stdc_first_trailing_one(unsigned long x)1336297479fSNick Desaulniers inline unsigned stdc_first_trailing_one(unsigned long x) {
1346297479fSNick Desaulniers return stdc_first_trailing_one_ul(x);
1356297479fSNick Desaulniers }
stdc_first_trailing_one(unsigned long long x)1366297479fSNick Desaulniers inline unsigned stdc_first_trailing_one(unsigned long long x) {
1376297479fSNick Desaulniers return stdc_first_trailing_one_ull(x);
1386297479fSNick Desaulniers }
stdc_count_zeros(unsigned char x)139f70d5c0bSNick Desaulniers inline unsigned stdc_count_zeros(unsigned char x) {
140f70d5c0bSNick Desaulniers return stdc_count_zeros_uc(x);
141f70d5c0bSNick Desaulniers }
stdc_count_zeros(unsigned short x)142f70d5c0bSNick Desaulniers inline unsigned stdc_count_zeros(unsigned short x) {
143f70d5c0bSNick Desaulniers return stdc_count_zeros_us(x);
144f70d5c0bSNick Desaulniers }
stdc_count_zeros(unsigned x)145f70d5c0bSNick Desaulniers inline unsigned stdc_count_zeros(unsigned x) { return stdc_count_zeros_ui(x); }
stdc_count_zeros(unsigned long x)146f70d5c0bSNick Desaulniers inline unsigned stdc_count_zeros(unsigned long x) {
147f70d5c0bSNick Desaulniers return stdc_count_zeros_ul(x);
148f70d5c0bSNick Desaulniers }
stdc_count_zeros(unsigned long long x)149f70d5c0bSNick Desaulniers inline unsigned stdc_count_zeros(unsigned long long x) {
150f70d5c0bSNick Desaulniers return stdc_count_zeros_ull(x);
151f70d5c0bSNick Desaulniers }
stdc_count_ones(unsigned char x)152d8406d48SNick Desaulniers inline unsigned stdc_count_ones(unsigned char x) {
153d8406d48SNick Desaulniers return stdc_count_ones_uc(x);
154d8406d48SNick Desaulniers }
stdc_count_ones(unsigned short x)155d8406d48SNick Desaulniers inline unsigned stdc_count_ones(unsigned short x) {
156d8406d48SNick Desaulniers return stdc_count_ones_us(x);
157d8406d48SNick Desaulniers }
stdc_count_ones(unsigned x)158d8406d48SNick Desaulniers inline unsigned stdc_count_ones(unsigned x) { return stdc_count_ones_ui(x); }
stdc_count_ones(unsigned long x)159d8406d48SNick Desaulniers inline unsigned stdc_count_ones(unsigned long x) {
160d8406d48SNick Desaulniers return stdc_count_ones_ul(x);
161d8406d48SNick Desaulniers }
stdc_count_ones(unsigned long long x)162d8406d48SNick Desaulniers inline unsigned stdc_count_ones(unsigned long long x) {
163d8406d48SNick Desaulniers return stdc_count_ones_ull(x);
164d8406d48SNick Desaulniers }
stdc_has_single_bit(unsigned char x)16506bcd9daSNick Desaulniers inline bool stdc_has_single_bit(unsigned char x) {
16606bcd9daSNick Desaulniers return stdc_has_single_bit_uc(x);
16706bcd9daSNick Desaulniers }
stdc_has_single_bit(unsigned short x)16806bcd9daSNick Desaulniers inline bool stdc_has_single_bit(unsigned short x) {
16906bcd9daSNick Desaulniers return stdc_has_single_bit_us(x);
17006bcd9daSNick Desaulniers }
stdc_has_single_bit(unsigned x)17106bcd9daSNick Desaulniers inline bool stdc_has_single_bit(unsigned x) {
17206bcd9daSNick Desaulniers return stdc_has_single_bit_ui(x);
17306bcd9daSNick Desaulniers }
stdc_has_single_bit(unsigned long x)17406bcd9daSNick Desaulniers inline bool stdc_has_single_bit(unsigned long x) {
17506bcd9daSNick Desaulniers return stdc_has_single_bit_ul(x);
17606bcd9daSNick Desaulniers }
stdc_has_single_bit(unsigned long long x)17706bcd9daSNick Desaulniers inline bool stdc_has_single_bit(unsigned long long x) {
17806bcd9daSNick Desaulniers return stdc_has_single_bit_ull(x);
17906bcd9daSNick Desaulniers }
stdc_bit_width(unsigned char x)180041638c4SNick Desaulniers inline unsigned stdc_bit_width(unsigned char x) { return stdc_bit_width_uc(x); }
stdc_bit_width(unsigned short x)181041638c4SNick Desaulniers inline unsigned stdc_bit_width(unsigned short x) {
182041638c4SNick Desaulniers return stdc_bit_width_us(x);
183041638c4SNick Desaulniers }
stdc_bit_width(unsigned x)184041638c4SNick Desaulniers inline unsigned stdc_bit_width(unsigned x) { return stdc_bit_width_ui(x); }
stdc_bit_width(unsigned long x)185041638c4SNick Desaulniers inline unsigned stdc_bit_width(unsigned long x) { return stdc_bit_width_ul(x); }
stdc_bit_width(unsigned long long x)186041638c4SNick Desaulniers inline unsigned stdc_bit_width(unsigned long long x) {
187041638c4SNick Desaulniers return stdc_bit_width_ull(x);
188041638c4SNick Desaulniers }
stdc_bit_floor(unsigned char x)189101a13dfSNick Desaulniers inline unsigned char stdc_bit_floor(unsigned char x) {
190101a13dfSNick Desaulniers return stdc_bit_floor_uc(x);
191101a13dfSNick Desaulniers }
stdc_bit_floor(unsigned short x)192101a13dfSNick Desaulniers inline unsigned short stdc_bit_floor(unsigned short x) {
193101a13dfSNick Desaulniers return stdc_bit_floor_us(x);
194101a13dfSNick Desaulniers }
stdc_bit_floor(unsigned x)195101a13dfSNick Desaulniers inline unsigned stdc_bit_floor(unsigned x) { return stdc_bit_floor_ui(x); }
stdc_bit_floor(unsigned long x)196101a13dfSNick Desaulniers inline unsigned long stdc_bit_floor(unsigned long x) {
197101a13dfSNick Desaulniers return stdc_bit_floor_ul(x);
198101a13dfSNick Desaulniers }
stdc_bit_floor(unsigned long long x)199101a13dfSNick Desaulniers inline unsigned long long stdc_bit_floor(unsigned long long x) {
200101a13dfSNick Desaulniers return stdc_bit_floor_ull(x);
201101a13dfSNick Desaulniers }
stdc_bit_ceil(unsigned char x)20275b0d384SMichael Flanders inline unsigned char stdc_bit_ceil(unsigned char x) {
20375b0d384SMichael Flanders return stdc_bit_ceil_uc(x);
20475b0d384SMichael Flanders }
stdc_bit_ceil(unsigned short x)20575b0d384SMichael Flanders inline unsigned short stdc_bit_ceil(unsigned short x) {
20675b0d384SMichael Flanders return stdc_bit_ceil_us(x);
20775b0d384SMichael Flanders }
stdc_bit_ceil(unsigned x)20875b0d384SMichael Flanders inline unsigned stdc_bit_ceil(unsigned x) { return stdc_bit_ceil_ui(x); }
stdc_bit_ceil(unsigned long x)20975b0d384SMichael Flanders inline unsigned long stdc_bit_ceil(unsigned long x) {
21075b0d384SMichael Flanders return stdc_bit_ceil_ul(x);
21175b0d384SMichael Flanders }
stdc_bit_ceil(unsigned long long x)21275b0d384SMichael Flanders inline unsigned long long stdc_bit_ceil(unsigned long long x) {
21375b0d384SMichael Flanders return stdc_bit_ceil_ull(x);
21475b0d384SMichael Flanders }
2155a7a8f73SNick Desaulniers #else
2167bc5eaa0SNick Desaulniers #define stdc_leading_zeros(x) \
2177bc5eaa0SNick Desaulniers _Generic((x), \
2187bc5eaa0SNick Desaulniers unsigned char: stdc_leading_zeros_uc, \
2197bc5eaa0SNick Desaulniers unsigned short: stdc_leading_zeros_us, \
2207bc5eaa0SNick Desaulniers unsigned: stdc_leading_zeros_ui, \
2217bc5eaa0SNick Desaulniers unsigned long: stdc_leading_zeros_ul, \
2227bc5eaa0SNick Desaulniers unsigned long long: stdc_leading_zeros_ull)(x)
2236a3fde6dSNick Desaulniers #define stdc_leading_ones(x) \
2246a3fde6dSNick Desaulniers _Generic((x), \
2256a3fde6dSNick Desaulniers unsigned char: stdc_leading_ones_uc, \
2266a3fde6dSNick Desaulniers unsigned short: stdc_leading_ones_us, \
2276a3fde6dSNick Desaulniers unsigned: stdc_leading_ones_ui, \
2286a3fde6dSNick Desaulniers unsigned long: stdc_leading_ones_ul, \
2296a3fde6dSNick Desaulniers unsigned long long: stdc_leading_ones_ull)(x)
230d5a3de4aSNick Desaulniers #define stdc_trailing_zeros(x) \
231d5a3de4aSNick Desaulniers _Generic((x), \
232d5a3de4aSNick Desaulniers unsigned char: stdc_trailing_zeros_uc, \
233d5a3de4aSNick Desaulniers unsigned short: stdc_trailing_zeros_us, \
234d5a3de4aSNick Desaulniers unsigned: stdc_trailing_zeros_ui, \
235d5a3de4aSNick Desaulniers unsigned long: stdc_trailing_zeros_ul, \
236d5a3de4aSNick Desaulniers unsigned long long: stdc_trailing_zeros_ull)(x)
2377760006dSNick Desaulniers #define stdc_trailing_ones(x) \
2387760006dSNick Desaulniers _Generic((x), \
2397760006dSNick Desaulniers unsigned char: stdc_trailing_ones_uc, \
2407760006dSNick Desaulniers unsigned short: stdc_trailing_ones_us, \
2417760006dSNick Desaulniers unsigned: stdc_trailing_ones_ui, \
2427760006dSNick Desaulniers unsigned long: stdc_trailing_ones_ul, \
2437760006dSNick Desaulniers unsigned long long: stdc_trailing_ones_ull)(x)
244d2d6b368SNick Desaulniers #define stdc_first_leading_zero(x) \
245d2d6b368SNick Desaulniers _Generic((x), \
246d2d6b368SNick Desaulniers unsigned char: stdc_first_leading_zero_uc, \
247d2d6b368SNick Desaulniers unsigned short: stdc_first_leading_zero_us, \
248d2d6b368SNick Desaulniers unsigned: stdc_first_leading_zero_ui, \
249d2d6b368SNick Desaulniers unsigned long: stdc_first_leading_zero_ul, \
250d2d6b368SNick Desaulniers unsigned long long: stdc_first_leading_zero_ull)(x)
25160596716SNick Desaulniers #define stdc_first_leading_one(x) \
25260596716SNick Desaulniers _Generic((x), \
25360596716SNick Desaulniers unsigned char: stdc_first_leading_one_uc, \
25460596716SNick Desaulniers unsigned short: stdc_first_leading_one_us, \
25560596716SNick Desaulniers unsigned: stdc_first_leading_one_ui, \
25660596716SNick Desaulniers unsigned long: stdc_first_leading_one_ul, \
25760596716SNick Desaulniers unsigned long long: stdc_first_leading_one_ull)(x)
25816e7d684SNick Desaulniers #define stdc_first_trailing_zero(x) \
25916e7d684SNick Desaulniers _Generic((x), \
26016e7d684SNick Desaulniers unsigned char: stdc_first_trailing_zero_uc, \
26116e7d684SNick Desaulniers unsigned short: stdc_first_trailing_zero_us, \
26216e7d684SNick Desaulniers unsigned: stdc_first_trailing_zero_ui, \
26316e7d684SNick Desaulniers unsigned long: stdc_first_trailing_zero_ul, \
26416e7d684SNick Desaulniers unsigned long long: stdc_first_trailing_zero_ull)(x)
2656297479fSNick Desaulniers #define stdc_first_trailing_one(x) \
2666297479fSNick Desaulniers _Generic((x), \
2676297479fSNick Desaulniers unsigned char: stdc_first_trailing_one_uc, \
2686297479fSNick Desaulniers unsigned short: stdc_first_trailing_one_us, \
2696297479fSNick Desaulniers unsigned: stdc_first_trailing_one_ui, \
2706297479fSNick Desaulniers unsigned long: stdc_first_trailing_one_ul, \
2716297479fSNick Desaulniers unsigned long long: stdc_first_trailing_one_ull)(x)
272f70d5c0bSNick Desaulniers #define stdc_count_zeros(x) \
273f70d5c0bSNick Desaulniers _Generic((x), \
274f70d5c0bSNick Desaulniers unsigned char: stdc_count_zeros_uc, \
275f70d5c0bSNick Desaulniers unsigned short: stdc_count_zeros_us, \
276f70d5c0bSNick Desaulniers unsigned: stdc_count_zeros_ui, \
277f70d5c0bSNick Desaulniers unsigned long: stdc_count_zeros_ul, \
278f70d5c0bSNick Desaulniers unsigned long long: stdc_count_zeros_ull)(x)
279d8406d48SNick Desaulniers #define stdc_count_ones(x) \
280d8406d48SNick Desaulniers _Generic((x), \
281d8406d48SNick Desaulniers unsigned char: stdc_count_ones_uc, \
282d8406d48SNick Desaulniers unsigned short: stdc_count_ones_us, \
283d8406d48SNick Desaulniers unsigned: stdc_count_ones_ui, \
284d8406d48SNick Desaulniers unsigned long: stdc_count_ones_ul, \
285d8406d48SNick Desaulniers unsigned long long: stdc_count_ones_ull)(x)
28606bcd9daSNick Desaulniers #define stdc_has_single_bit(x) \
28706bcd9daSNick Desaulniers _Generic((x), \
28806bcd9daSNick Desaulniers unsigned char: stdc_has_single_bit_uc, \
28906bcd9daSNick Desaulniers unsigned short: stdc_has_single_bit_us, \
29006bcd9daSNick Desaulniers unsigned: stdc_has_single_bit_ui, \
29106bcd9daSNick Desaulniers unsigned long: stdc_has_single_bit_ul, \
29206bcd9daSNick Desaulniers unsigned long long: stdc_has_single_bit_ull)(x)
293041638c4SNick Desaulniers #define stdc_bit_width(x) \
294041638c4SNick Desaulniers _Generic((x), \
29535b78437SMichael Flanders unsigned char: stdc_bit_width_uc, \
296041638c4SNick Desaulniers unsigned short: stdc_bit_width_us, \
297041638c4SNick Desaulniers unsigned: stdc_bit_width_ui, \
298041638c4SNick Desaulniers unsigned long: stdc_bit_width_ul, \
299041638c4SNick Desaulniers unsigned long long: stdc_bit_width_ull)(x)
300101a13dfSNick Desaulniers #define stdc_bit_floor(x) \
301101a13dfSNick Desaulniers _Generic((x), \
30235b78437SMichael Flanders unsigned char: stdc_bit_floor_uc, \
303101a13dfSNick Desaulniers unsigned short: stdc_bit_floor_us, \
304101a13dfSNick Desaulniers unsigned: stdc_bit_floor_ui, \
305101a13dfSNick Desaulniers unsigned long: stdc_bit_floor_ul, \
306101a13dfSNick Desaulniers unsigned long long: stdc_bit_floor_ull)(x)
30775b0d384SMichael Flanders #define stdc_bit_ceil(x) \
30875b0d384SMichael Flanders _Generic((x), \
30975b0d384SMichael Flanders unsigned char: stdc_bit_ceil_uc, \
31075b0d384SMichael Flanders unsigned short: stdc_bit_ceil_us, \
31175b0d384SMichael Flanders unsigned: stdc_bit_ceil_ui, \
31275b0d384SMichael Flanders unsigned long: stdc_bit_ceil_ul, \
31375b0d384SMichael Flanders unsigned long long: stdc_bit_ceil_ull)(x)
3145a7a8f73SNick Desaulniers #endif // __cplusplus
3157bc5eaa0SNick Desaulniers
3167bc5eaa0SNick Desaulniers #endif // __LLVM_LIBC_MACROS_STDBIT_MACROS_H
317