317 lines · c
1//===-- Definition of macros to be used with stdbit functions ----------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef __LLVM_LIBC_MACROS_STDBIT_MACROS_H10#define __LLVM_LIBC_MACROS_STDBIT_MACROS_H11 12#define __STDC_VERSION_STDBIT_H__ 202311L13#define __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__14#define __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__15#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__16 17// TODO(https://github.com/llvm/llvm-project/issues/80509): support _BitInt().18#ifdef __cplusplus19inline unsigned stdc_leading_zeros(unsigned char x) {20 return stdc_leading_zeros_uc(x);21}22inline unsigned stdc_leading_zeros(unsigned short x) {23 return stdc_leading_zeros_us(x);24}25inline unsigned stdc_leading_zeros(unsigned x) {26 return stdc_leading_zeros_ui(x);27}28inline unsigned stdc_leading_zeros(unsigned long x) {29 return stdc_leading_zeros_ul(x);30}31inline unsigned stdc_leading_zeros(unsigned long long x) {32 return stdc_leading_zeros_ull(x);33}34inline unsigned stdc_leading_ones(unsigned char x) {35 return stdc_leading_ones_uc(x);36}37inline unsigned stdc_leading_ones(unsigned short x) {38 return stdc_leading_ones_us(x);39}40inline unsigned stdc_leading_ones(unsigned x) {41 return stdc_leading_ones_ui(x);42}43inline unsigned stdc_leading_ones(unsigned long x) {44 return stdc_leading_ones_ul(x);45}46inline unsigned stdc_leading_ones(unsigned long long x) {47 return stdc_leading_ones_ull(x);48}49inline unsigned stdc_trailing_zeros(unsigned char x) {50 return stdc_trailing_zeros_uc(x);51}52inline unsigned stdc_trailing_zeros(unsigned short x) {53 return stdc_trailing_zeros_us(x);54}55inline unsigned stdc_trailing_zeros(unsigned x) {56 return stdc_trailing_zeros_ui(x);57}58inline unsigned stdc_trailing_zeros(unsigned long x) {59 return stdc_trailing_zeros_ul(x);60}61inline unsigned stdc_trailing_zeros(unsigned long long x) {62 return stdc_trailing_zeros_ull(x);63}64inline unsigned stdc_trailing_ones(unsigned char x) {65 return stdc_trailing_ones_uc(x);66}67inline unsigned stdc_trailing_ones(unsigned short x) {68 return stdc_trailing_ones_us(x);69}70inline unsigned stdc_trailing_ones(unsigned x) {71 return stdc_trailing_ones_ui(x);72}73inline unsigned stdc_trailing_ones(unsigned long x) {74 return stdc_trailing_ones_ul(x);75}76inline unsigned stdc_trailing_ones(unsigned long long x) {77 return stdc_trailing_ones_ull(x);78}79inline unsigned stdc_first_leading_zero(unsigned char x) {80 return stdc_first_leading_zero_uc(x);81}82inline unsigned stdc_first_leading_zero(unsigned short x) {83 return stdc_first_leading_zero_us(x);84}85inline unsigned stdc_first_leading_zero(unsigned x) {86 return stdc_first_leading_zero_ui(x);87}88inline unsigned stdc_first_leading_zero(unsigned long x) {89 return stdc_first_leading_zero_ul(x);90}91inline unsigned stdc_first_leading_zero(unsigned long long x) {92 return stdc_first_leading_zero_ull(x);93}94inline unsigned stdc_first_leading_one(unsigned char x) {95 return stdc_first_leading_one_uc(x);96}97inline unsigned stdc_first_leading_one(unsigned short x) {98 return stdc_first_leading_one_us(x);99}100inline unsigned stdc_first_leading_one(unsigned x) {101 return stdc_first_leading_one_ui(x);102}103inline unsigned stdc_first_leading_one(unsigned long x) {104 return stdc_first_leading_one_ul(x);105}106inline unsigned stdc_first_leading_one(unsigned long long x) {107 return stdc_first_leading_one_ull(x);108}109inline unsigned stdc_first_trailing_zero(unsigned char x) {110 return stdc_first_trailing_zero_uc(x);111}112inline unsigned stdc_first_trailing_zero(unsigned short x) {113 return stdc_first_trailing_zero_us(x);114}115inline unsigned stdc_first_trailing_zero(unsigned x) {116 return stdc_first_trailing_zero_ui(x);117}118inline unsigned stdc_first_trailing_zero(unsigned long x) {119 return stdc_first_trailing_zero_ul(x);120}121inline unsigned stdc_first_trailing_zero(unsigned long long x) {122 return stdc_first_trailing_zero_ull(x);123}124inline unsigned stdc_first_trailing_one(unsigned char x) {125 return stdc_first_trailing_one_uc(x);126}127inline unsigned stdc_first_trailing_one(unsigned short x) {128 return stdc_first_trailing_one_us(x);129}130inline unsigned stdc_first_trailing_one(unsigned x) {131 return stdc_first_trailing_one_ui(x);132}133inline unsigned stdc_first_trailing_one(unsigned long x) {134 return stdc_first_trailing_one_ul(x);135}136inline unsigned stdc_first_trailing_one(unsigned long long x) {137 return stdc_first_trailing_one_ull(x);138}139inline unsigned stdc_count_zeros(unsigned char x) {140 return stdc_count_zeros_uc(x);141}142inline unsigned stdc_count_zeros(unsigned short x) {143 return stdc_count_zeros_us(x);144}145inline unsigned stdc_count_zeros(unsigned x) { return stdc_count_zeros_ui(x); }146inline unsigned stdc_count_zeros(unsigned long x) {147 return stdc_count_zeros_ul(x);148}149inline unsigned stdc_count_zeros(unsigned long long x) {150 return stdc_count_zeros_ull(x);151}152inline unsigned stdc_count_ones(unsigned char x) {153 return stdc_count_ones_uc(x);154}155inline unsigned stdc_count_ones(unsigned short x) {156 return stdc_count_ones_us(x);157}158inline unsigned stdc_count_ones(unsigned x) { return stdc_count_ones_ui(x); }159inline unsigned stdc_count_ones(unsigned long x) {160 return stdc_count_ones_ul(x);161}162inline unsigned stdc_count_ones(unsigned long long x) {163 return stdc_count_ones_ull(x);164}165inline bool stdc_has_single_bit(unsigned char x) {166 return stdc_has_single_bit_uc(x);167}168inline bool stdc_has_single_bit(unsigned short x) {169 return stdc_has_single_bit_us(x);170}171inline bool stdc_has_single_bit(unsigned x) {172 return stdc_has_single_bit_ui(x);173}174inline bool stdc_has_single_bit(unsigned long x) {175 return stdc_has_single_bit_ul(x);176}177inline bool stdc_has_single_bit(unsigned long long x) {178 return stdc_has_single_bit_ull(x);179}180inline unsigned stdc_bit_width(unsigned char x) { return stdc_bit_width_uc(x); }181inline unsigned stdc_bit_width(unsigned short x) {182 return stdc_bit_width_us(x);183}184inline unsigned stdc_bit_width(unsigned x) { return stdc_bit_width_ui(x); }185inline unsigned stdc_bit_width(unsigned long x) { return stdc_bit_width_ul(x); }186inline unsigned stdc_bit_width(unsigned long long x) {187 return stdc_bit_width_ull(x);188}189inline unsigned char stdc_bit_floor(unsigned char x) {190 return stdc_bit_floor_uc(x);191}192inline unsigned short stdc_bit_floor(unsigned short x) {193 return stdc_bit_floor_us(x);194}195inline unsigned stdc_bit_floor(unsigned x) { return stdc_bit_floor_ui(x); }196inline unsigned long stdc_bit_floor(unsigned long x) {197 return stdc_bit_floor_ul(x);198}199inline unsigned long long stdc_bit_floor(unsigned long long x) {200 return stdc_bit_floor_ull(x);201}202inline unsigned char stdc_bit_ceil(unsigned char x) {203 return stdc_bit_ceil_uc(x);204}205inline unsigned short stdc_bit_ceil(unsigned short x) {206 return stdc_bit_ceil_us(x);207}208inline unsigned stdc_bit_ceil(unsigned x) { return stdc_bit_ceil_ui(x); }209inline unsigned long stdc_bit_ceil(unsigned long x) {210 return stdc_bit_ceil_ul(x);211}212inline unsigned long long stdc_bit_ceil(unsigned long long x) {213 return stdc_bit_ceil_ull(x);214}215#else216#define stdc_leading_zeros(x) \217 _Generic((x), \218 unsigned char: stdc_leading_zeros_uc, \219 unsigned short: stdc_leading_zeros_us, \220 unsigned: stdc_leading_zeros_ui, \221 unsigned long: stdc_leading_zeros_ul, \222 unsigned long long: stdc_leading_zeros_ull)(x)223#define stdc_leading_ones(x) \224 _Generic((x), \225 unsigned char: stdc_leading_ones_uc, \226 unsigned short: stdc_leading_ones_us, \227 unsigned: stdc_leading_ones_ui, \228 unsigned long: stdc_leading_ones_ul, \229 unsigned long long: stdc_leading_ones_ull)(x)230#define stdc_trailing_zeros(x) \231 _Generic((x), \232 unsigned char: stdc_trailing_zeros_uc, \233 unsigned short: stdc_trailing_zeros_us, \234 unsigned: stdc_trailing_zeros_ui, \235 unsigned long: stdc_trailing_zeros_ul, \236 unsigned long long: stdc_trailing_zeros_ull)(x)237#define stdc_trailing_ones(x) \238 _Generic((x), \239 unsigned char: stdc_trailing_ones_uc, \240 unsigned short: stdc_trailing_ones_us, \241 unsigned: stdc_trailing_ones_ui, \242 unsigned long: stdc_trailing_ones_ul, \243 unsigned long long: stdc_trailing_ones_ull)(x)244#define stdc_first_leading_zero(x) \245 _Generic((x), \246 unsigned char: stdc_first_leading_zero_uc, \247 unsigned short: stdc_first_leading_zero_us, \248 unsigned: stdc_first_leading_zero_ui, \249 unsigned long: stdc_first_leading_zero_ul, \250 unsigned long long: stdc_first_leading_zero_ull)(x)251#define stdc_first_leading_one(x) \252 _Generic((x), \253 unsigned char: stdc_first_leading_one_uc, \254 unsigned short: stdc_first_leading_one_us, \255 unsigned: stdc_first_leading_one_ui, \256 unsigned long: stdc_first_leading_one_ul, \257 unsigned long long: stdc_first_leading_one_ull)(x)258#define stdc_first_trailing_zero(x) \259 _Generic((x), \260 unsigned char: stdc_first_trailing_zero_uc, \261 unsigned short: stdc_first_trailing_zero_us, \262 unsigned: stdc_first_trailing_zero_ui, \263 unsigned long: stdc_first_trailing_zero_ul, \264 unsigned long long: stdc_first_trailing_zero_ull)(x)265#define stdc_first_trailing_one(x) \266 _Generic((x), \267 unsigned char: stdc_first_trailing_one_uc, \268 unsigned short: stdc_first_trailing_one_us, \269 unsigned: stdc_first_trailing_one_ui, \270 unsigned long: stdc_first_trailing_one_ul, \271 unsigned long long: stdc_first_trailing_one_ull)(x)272#define stdc_count_zeros(x) \273 _Generic((x), \274 unsigned char: stdc_count_zeros_uc, \275 unsigned short: stdc_count_zeros_us, \276 unsigned: stdc_count_zeros_ui, \277 unsigned long: stdc_count_zeros_ul, \278 unsigned long long: stdc_count_zeros_ull)(x)279#define stdc_count_ones(x) \280 _Generic((x), \281 unsigned char: stdc_count_ones_uc, \282 unsigned short: stdc_count_ones_us, \283 unsigned: stdc_count_ones_ui, \284 unsigned long: stdc_count_ones_ul, \285 unsigned long long: stdc_count_ones_ull)(x)286#define stdc_has_single_bit(x) \287 _Generic((x), \288 unsigned char: stdc_has_single_bit_uc, \289 unsigned short: stdc_has_single_bit_us, \290 unsigned: stdc_has_single_bit_ui, \291 unsigned long: stdc_has_single_bit_ul, \292 unsigned long long: stdc_has_single_bit_ull)(x)293#define stdc_bit_width(x) \294 _Generic((x), \295 unsigned char: stdc_bit_width_uc, \296 unsigned short: stdc_bit_width_us, \297 unsigned: stdc_bit_width_ui, \298 unsigned long: stdc_bit_width_ul, \299 unsigned long long: stdc_bit_width_ull)(x)300#define stdc_bit_floor(x) \301 _Generic((x), \302 unsigned char: stdc_bit_floor_uc, \303 unsigned short: stdc_bit_floor_us, \304 unsigned: stdc_bit_floor_ui, \305 unsigned long: stdc_bit_floor_ul, \306 unsigned long long: stdc_bit_floor_ull)(x)307#define stdc_bit_ceil(x) \308 _Generic((x), \309 unsigned char: stdc_bit_ceil_uc, \310 unsigned short: stdc_bit_ceil_us, \311 unsigned: stdc_bit_ceil_ui, \312 unsigned long: stdc_bit_ceil_ul, \313 unsigned long long: stdc_bit_ceil_ull)(x)314#endif // __cplusplus315 316#endif // __LLVM_LIBC_MACROS_STDBIT_MACROS_H317