#ifndef __STDC_VERSION_STDBIT_H__ #define __STDC_VERSION_STDBIT_H__ 202311L #include #include #ifndef __STDC_ENDIAN_BIG__ #define __STDC_ENDIAN_BIG__ __BIG_ENDIAN #endif #ifndef __STDC_ENDIAN_LITTLE__ #define __STDC_ENDIAN_LITTLE__ __LITTLE_ENDIAN #endif #ifndef __STDC_ENDIAN_NATIVE__ #define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER #endif unsigned int stdc_count_ones_uc(unsigned char) __unsequenced; unsigned int stdc_count_ones_us(unsigned short) __unsequenced; unsigned int stdc_count_ones_ui(unsigned int) __unsequenced; unsigned int stdc_count_ones_ul(unsigned long) __unsequenced; unsigned int stdc_count_ones_ull(unsigned long long) __unsequenced; unsigned int stdc_count_zeros_uc(unsigned char) __unsequenced; unsigned int stdc_count_zeros_us(unsigned short) __unsequenced; unsigned int stdc_count_zeros_ui(unsigned int) __unsequenced; unsigned int stdc_count_zeros_ul(unsigned long) __unsequenced; unsigned int stdc_count_zeros_ull(unsigned long long) __unsequenced; unsigned int stdc_leading_zeros_uc(unsigned char) __unsequenced; unsigned int stdc_leading_zeros_us(unsigned short) __unsequenced; unsigned int stdc_leading_zeros_ui(unsigned int) __unsequenced; unsigned int stdc_leading_zeros_ul(unsigned long) __unsequenced; unsigned int stdc_leading_zeros_ull(unsigned long long) __unsequenced; unsigned int stdc_leading_ones_uc(unsigned char) __unsequenced; unsigned int stdc_leading_ones_us(unsigned short) __unsequenced; unsigned int stdc_leading_ones_ui(unsigned int) __unsequenced; unsigned int stdc_leading_ones_ul(unsigned long) __unsequenced; unsigned int stdc_leading_ones_ull(unsigned long long) __unsequenced; unsigned int stdc_trailing_zeros_uc(unsigned char) __unsequenced; unsigned int stdc_trailing_zeros_us(unsigned short) __unsequenced; unsigned int stdc_trailing_zeros_ui(unsigned int) __unsequenced; unsigned int stdc_trailing_zeros_ul(unsigned long) __unsequenced; unsigned int stdc_trailing_zeros_ull(unsigned long long) __unsequenced; unsigned int stdc_trailing_ones_uc(unsigned char) __unsequenced; unsigned int stdc_trailing_ones_us(unsigned short) __unsequenced; unsigned int stdc_trailing_ones_ui(unsigned int) __unsequenced; unsigned int stdc_trailing_ones_ul(unsigned long) __unsequenced; unsigned int stdc_trailing_ones_ull(unsigned long long) __unsequenced; unsigned int stdc_first_leading_zero_uc(unsigned char) __unsequenced; unsigned int stdc_first_leading_zero_us(unsigned short) __unsequenced; unsigned int stdc_first_leading_zero_ui(unsigned int) __unsequenced; unsigned int stdc_first_leading_zero_ul(unsigned long) __unsequenced; unsigned int stdc_first_leading_zero_ull(unsigned long long) __unsequenced; unsigned int stdc_first_leading_one_uc(unsigned char) __unsequenced; unsigned int stdc_first_leading_one_us(unsigned short) __unsequenced; unsigned int stdc_first_leading_one_ui(unsigned int) __unsequenced; unsigned int stdc_first_leading_one_ul(unsigned long) __unsequenced; unsigned int stdc_first_leading_one_ull(unsigned long long) __unsequenced; unsigned int stdc_first_trailing_one_uc(unsigned char) __unsequenced; unsigned int stdc_first_trailing_one_us(unsigned short) __unsequenced; unsigned int stdc_first_trailing_one_ui(unsigned int) __unsequenced; unsigned int stdc_first_trailing_one_ul(unsigned long) __unsequenced; unsigned int stdc_first_trailing_one_ull(unsigned long long) __unsequenced; unsigned int stdc_first_trailing_zero_uc(unsigned char) __unsequenced; unsigned int stdc_first_trailing_zero_us(unsigned short) __unsequenced; unsigned int stdc_first_trailing_zero_ui(unsigned int) __unsequenced; unsigned int stdc_first_trailing_zero_ul(unsigned long) __unsequenced; unsigned int stdc_first_trailing_zero_ull(unsigned long long) __unsequenced; _Bool stdc_has_single_bit_uc(unsigned char) __unsequenced; _Bool stdc_has_single_bit_us(unsigned short) __unsequenced; _Bool stdc_has_single_bit_ui(unsigned int) __unsequenced; _Bool stdc_has_single_bit_ul(unsigned long) __unsequenced; _Bool stdc_has_single_bit_ull(unsigned long long) __unsequenced; unsigned int stdc_bit_width_uc(unsigned char) __unsequenced; unsigned int stdc_bit_width_us(unsigned short) __unsequenced; unsigned int stdc_bit_width_ui(unsigned int) __unsequenced; unsigned int stdc_bit_width_ul(unsigned long) __unsequenced; unsigned int stdc_bit_width_ull(unsigned long long) __unsequenced; unsigned char stdc_bit_floor_uc(unsigned char) __unsequenced; unsigned short stdc_bit_floor_us(unsigned short) __unsequenced; unsigned int stdc_bit_floor_ui(unsigned int) __unsequenced; unsigned long stdc_bit_floor_ul(unsigned long) __unsequenced; unsigned long long stdc_bit_floor_ull(unsigned long long) __unsequenced; unsigned char stdc_bit_ceil_uc(unsigned char) __unsequenced; unsigned short stdc_bit_ceil_us(unsigned short) __unsequenced; unsigned int stdc_bit_ceil_ui(unsigned int) __unsequenced; unsigned long stdc_bit_ceil_ul(unsigned long) __unsequenced; unsigned long long stdc_bit_ceil_ull(unsigned long long) __unsequenced; unsigned int __leading_zeros_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __leading_ones_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __trailing_zeros_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __trailing_ones_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __first_leading_zero_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __first_leading_one_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __first_trailing_zero_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __first_trailing_one_u128(unsigned long long, unsigned long long) __unsequenced; unsigned int __count_zeros_u128(unsigned long long, unsigned long long) __unsequenced; int __count_ones_u128(unsigned long long, unsigned long long) __unsequenced; _Bool __has_single_bit_u128(unsigned long long, unsigned long long) __unsequenced; void __bit_floor_u128(unsigned long long[2]); void __bit_ceil_u128(unsigned long long[2]); #if __SIZEOF_INT128__ static __inline unsigned int __stdc_leading_zeros_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_leading_ones_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_trailing_zeros_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_trailing_ones_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_first_leading_zero_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_first_leading_one_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_first_trailing_zero_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_first_trailing_one_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_count_zeros_u128(unsigned __int128) __unsequenced; static __inline int __stdc_count_ones_u128(unsigned __int128) __unsequenced; static __inline _Bool __stdc_has_single_bit_u128(unsigned __int128) __unsequenced; static __inline unsigned __int128 __stdc_bit_floor_u128(unsigned __int128) __unsequenced; static __inline unsigned __int128 __stdc_bit_ceil_u128(unsigned __int128) __unsequenced; static __inline unsigned int __stdc_leading_zeros_u128(unsigned __int128 __val) { return __leading_zeros_u128(__val, __val>>64); } static __inline unsigned int __stdc_leading_ones_u128(unsigned __int128 __val) { return __leading_ones_u128(__val, __val>>64); } static __inline unsigned int __stdc_trailing_zeros_u128(unsigned __int128 __val) { return __trailing_zeros_u128(__val, __val>>64); } static __inline unsigned int __stdc_trailing_ones_u128(unsigned __int128 __val) { return __trailing_ones_u128(__val, __val>>64); } static __inline unsigned int __stdc_first_leading_zero_u128(unsigned __int128 __val) { return __first_leading_zero_u128(__val, __val>>64); } static __inline unsigned int __stdc_first_leading_one_u128(unsigned __int128 __val) { return __first_leading_one_u128(__val, __val>>64); } #define __stdc_bit_width_u128 __stdc_first_leading_one_u128 static __inline unsigned int __stdc_first_trailing_zero_u128(unsigned __int128 __val) { return __first_trailing_zero_u128(__val, __val>>64); } static __inline unsigned int __stdc_first_trailing_one_u128(unsigned __int128 __val) { return __first_trailing_one_u128(__val, __val>>64); } static __inline unsigned int __stdc_count_zeros_u128(unsigned __int128 __val) { return __count_zeros_u128(__val, __val>>64); } static __inline int __stdc_count_ones_u128(unsigned __int128 __val) { return __count_ones_u128(__val, __val>>64); } static __inline _Bool __stdc_has_single_bit_u128(unsigned __int128 __val) { return __has_single_bit_u128(__val, __val>>64); } static __inline unsigned __int128 __stdc_bit_floor_u128(unsigned __int128 __val) { unsigned long long __ar[2] = { __val, __val>>64, }; __bit_floor_u128(__ar); return (((unsigned __int128)__ar[1])<<64) | __ar[0]; } static __inline unsigned __int128 __stdc_bit_ceil_u128(unsigned __int128 __val) { unsigned long long __ar[2] = { __val, __val>>64, }; __bit_ceil_u128(__ar); return (((unsigned __int128)__ar[1])<<64) | __ar[0]; } #endif #if __has_bitint128 static __inline unsigned int __stdc_leading_zeros_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_leading_ones_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_trailing_zeros_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_trailing_ones_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_first_leading_zero_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_first_leading_one_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_first_trailing_zero_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_first_trailing_one_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_count_zeros_b128(unsigned _BitInt(128)) __unsequenced; static __inline int __stdc_count_ones_b128(unsigned _BitInt(128)) __unsequenced; static __inline _Bool __stdc_has_single_bit_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned _BitInt(128) __stdc_bit_floor_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned _BitInt(128) __stdc_bit_ceil_b128(unsigned _BitInt(128)) __unsequenced; static __inline unsigned int __stdc_leading_zeros_b128(unsigned _BitInt(128) __val) { return __leading_zeros_u128(__val, __val>>64); } static __inline unsigned int __stdc_leading_ones_b128(unsigned _BitInt(128) __val) { return __leading_ones_u128(__val, __val>>64); } static __inline unsigned int __stdc_trailing_zeros_b128(unsigned _BitInt(128) __val) { return __trailing_zeros_u128(__val, __val>>64); } static __inline unsigned int __stdc_trailing_ones_b128(unsigned _BitInt(128) __val) { return __trailing_ones_u128(__val, __val>>64); } static __inline unsigned int __stdc_first_leading_zero_b128(unsigned _BitInt(128) __val) { return __first_leading_zero_u128(__val, __val>>64); } static __inline unsigned int __stdc_first_leading_one_b128(unsigned _BitInt(128) __val) { return __first_leading_one_u128(__val, __val>>64); } #define __stdc_bit_width_b128 __stdc_first_leading_one_b128 static __inline unsigned int __stdc_first_trailing_zero_b128(unsigned _BitInt(128) __val) { return __first_trailing_zero_u128(__val, __val>>64); } static __inline unsigned int __stdc_first_trailing_one_b128(unsigned _BitInt(128) __val) { return __first_trailing_one_u128(__val, __val>>64); } static __inline unsigned int __stdc_count_zeros_b128(unsigned _BitInt(128) __val) { return __count_zeros_u128(__val, __val>>64); } static __inline int __stdc_count_ones_b128(unsigned _BitInt(128) __val) { return __count_ones_u128(__val, __val>>64); } static __inline _Bool __stdc_has_single_bit_b128(unsigned _BitInt(128) __val) { return __has_single_bit_u128(__val, __val>>64); } static __inline unsigned _BitInt(128) __stdc_bit_floor_b128(unsigned _BitInt(128) __val) { unsigned long long __ar[2] = { __val, __val>>64, }; __bit_floor_u128(__ar); return (((unsigned _BitInt(128))__ar[1])<<64) | __ar[0]; } static __inline unsigned _BitInt(128) __stdc_bit_ceil_b128(unsigned _BitInt(128) __val) { unsigned long long __ar[2] = { __val, __val>>64, }; __bit_ceil_u128(__ar); return (((unsigned _BitInt(128))__ar[1])<<64) | __ar[0]; } #endif /* Start the definition of the type-generic interfaces. We have to include 128 bit types and _BitInt types if they exist. */ #if __STDC_VERSION__ >= 201112L #if __SIZEOF_INT128__ #if __has_bitint128 #define __U128_SELECTION(F) \ unsigned __int128: __stdc_ ## F ## _u128, \ unsigned _BitInt(128): __stdc_ ## F ## _b128 \ , /* don't remove comma */ #else #define __U128_SELECTION(F) \ unsigned __int128: __stdc_ ## F ## _u128 \ , /* don't remove comma */ #endif #else #if __has_bitint128 #define __U128_SELECTION(F) \ unsigned _BitInt(128): __stdc_ ## F ## _b128 \ , /* don't remove comma */ #else #define __U128_SELECTION(F) #endif #endif #if __BITINT_MAXWIDTH__ #define __BITINT_SELECTION(F) \ unsigned _BitInt(8): stdc_ ## F ## _uc, \ unsigned _BitInt(16): stdc_ ## F ## _us, \ unsigned _BitInt(32): stdc_ ## F ## _ui, \ unsigned _BitInt(64): stdc_ ## F ## _ull \ , /* don't remove comma */ #else #define __BITINT_SELECTION(F) #endif /* The following macros are intended that they may receive multiple macro arguments, but which should expand into a single C expression after preprocessing. */ #define __stdc_bit_generic(F, ...) \ _Generic(__VA_ARGS__, \ __BITINT_SELECTION(F) \ __U128_SELECTION(F) \ unsigned char: stdc_ ## F ## _uc, \ unsigned short: stdc_ ## F ## _us, \ unsigned int: stdc_ ## F ## _ui, \ unsigned long: stdc_ ## F ## _ul, \ unsigned long long: stdc_ ## F ## _ull \ )(__VA_ARGS__) #define stdc_leading_zeros(...) __stdc_bit_generic(leading_zeros, __VA_ARGS__) #define stdc_leading_ones(...) __stdc_bit_generic(leading_ones, __VA_ARGS__) #define stdc_trailing_zeros(...) __stdc_bit_generic(trailing_zeros, __VA_ARGS__) #define stdc_trailing_ones(...) __stdc_bit_generic(trailing_ones, __VA_ARGS__) #define stdc_first_leading_zero(...) __stdc_bit_generic(first_leading_zero, __VA_ARGS__) #define stdc_first_leading_one(...) __stdc_bit_generic(first_leading_one, __VA_ARGS__) #define stdc_first_trailing_zero(...) __stdc_bit_generic(first_trailing_zero, __VA_ARGS__) #define stdc_first_trailing_one(...) __stdc_bit_generic(first_trailing_one, __VA_ARGS__) #define stdc_count_zeros(...) __stdc_bit_generic(count_zeros, __VA_ARGS__) #define stdc_count_ones(...) __stdc_bit_generic(count_ones, __VA_ARGS__) #define stdc_has_single_bit(...) __stdc_bit_generic(has_single_bit, __VA_ARGS__) #define stdc_bit_width(...) __stdc_bit_generic(bit_width, __VA_ARGS__) #define stdc_bit_floor(...) __stdc_bit_generic(bit_floor, __VA_ARGS__) #define stdc_bit_ceil(...) __stdc_bit_generic(bit_ceil, __VA_ARGS__) #endif #endif