xref: /llvm-project/libc/include/llvm-libc-macros/stdbit-macros.h (revision f0c0ddae45ec929d023232d2ff0b75b7f09853c2)
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