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