summaryrefslogtreecommitdiff
path: root/include/stdbit.h
blob: a529676bed4bb2bb3eba97682d959b4bb37dfa7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*-
 * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#ifndef __STDC_VERSION_STDBIT_H__
#define __STDC_VERSION_STDBIT_H__ 202311L

#include <sys/cdefs.h>

/* byte order */
#define  __STDC_ENDIAN_LITTLE__ __ORDER_LITTLE_ENDIAN__
#define  __STDC_ENDIAN_BIG__ __ORDER_BIG_ENDIAN__
#define  __STDC_ENDIAN_NATIVE__ __BYTE_ORDER__

#define __generic_bitfunc(func, x) (_Generic(x,				\
	unsigned char: func ## _uc,					\
	unsigned short: func ## _us,					\
	unsigned int: func ## _ui,					\
	unsigned long: func ## _ul,					\
	unsigned long long: func ## _ull)(x))

__BEGIN_DECLS
unsigned int stdc_leading_zeros_uc(unsigned char) __pure2;
unsigned int stdc_leading_zeros_us(unsigned short) __pure2;
unsigned int stdc_leading_zeros_ui(unsigned int) __pure2;
unsigned int stdc_leading_zeros_ul(unsigned long) __pure2;
unsigned int stdc_leading_zeros_ull(unsigned long long) __pure2;
#define stdc_leading_zeros(x) __generic_bitfunc(stdc_leading_zeros, x)

unsigned int stdc_leading_ones_uc(unsigned char) __pure2;
unsigned int stdc_leading_ones_us(unsigned short) __pure2;
unsigned int stdc_leading_ones_ui(unsigned int) __pure2;
unsigned int stdc_leading_ones_ul(unsigned long) __pure2;
unsigned int stdc_leading_ones_ull(unsigned long long) __pure2;
#define stdc_leading_ones(x) __generic_bitfunc(stdc_leading_ones, x)

unsigned int stdc_trailing_zeros_uc(unsigned char) __pure2;
unsigned int stdc_trailing_zeros_us(unsigned short) __pure2;
unsigned int stdc_trailing_zeros_ui(unsigned int) __pure2;
unsigned int stdc_trailing_zeros_ul(unsigned long) __pure2;
unsigned int stdc_trailing_zeros_ull(unsigned long long) __pure2;
#define stdc_trailing_zeros(x) __generic_bitfunc(stdc_trailing_zeros, x)

unsigned int stdc_trailing_ones_uc(unsigned char) __pure2;
unsigned int stdc_trailing_ones_us(unsigned short) __pure2;
unsigned int stdc_trailing_ones_ui(unsigned int) __pure2;
unsigned int stdc_trailing_ones_ul(unsigned long) __pure2;
unsigned int stdc_trailing_ones_ull(unsigned long long) __pure2;
#define stdc_trailing_ones(x) __generic_bitfunc(stdc_trailing_ones, x)

unsigned int stdc_first_leading_zero_uc(unsigned char) __pure2;
unsigned int stdc_first_leading_zero_us(unsigned short) __pure2;
unsigned int stdc_first_leading_zero_ui(unsigned int) __pure2;
unsigned int stdc_first_leading_zero_ul(unsigned long) __pure2;
unsigned int stdc_first_leading_zero_ull(unsigned long long) __pure2;
#define stdc_first_leading_zero(x) __generic_bitfunc(stdc_first_leading_zero, x)

unsigned int stdc_first_leading_one_uc(unsigned char) __pure2;
unsigned int stdc_first_leading_one_us(unsigned short) __pure2;
unsigned int stdc_first_leading_one_ui(unsigned int) __pure2;
unsigned int stdc_first_leading_one_ul(unsigned long) __pure2;
unsigned int stdc_first_leading_one_ull(unsigned long long) __pure2;
#define stdc_first_leading_one(x) __generic_bitfunc(stdc_first_leading_one, x)

unsigned int stdc_first_trailing_zero_uc(unsigned char) __pure2;
unsigned int stdc_first_trailing_zero_us(unsigned short) __pure2;
unsigned int stdc_first_trailing_zero_ui(unsigned int) __pure2;
unsigned int stdc_first_trailing_zero_ul(unsigned long) __pure2;
unsigned int stdc_first_trailing_zero_ull(unsigned long long) __pure2;
#define stdc_first_trailing_zero(x) __generic_bitfunc(stdc_first_trailing_zero, x)

unsigned int stdc_first_trailing_one_uc(unsigned char) __pure2;
unsigned int stdc_first_trailing_one_us(unsigned short) __pure2;
unsigned int stdc_first_trailing_one_ui(unsigned int) __pure2;
unsigned int stdc_first_trailing_one_ul(unsigned long) __pure2;
unsigned int stdc_first_trailing_one_ull(unsigned long long) __pure2;
#define stdc_first_trailing_one(x) __generic_bitfunc(stdc_first_trailing_one, x)

unsigned int stdc_count_zeros_uc(unsigned char) __pure2;
unsigned int stdc_count_zeros_us(unsigned short) __pure2;
unsigned int stdc_count_zeros_ui(unsigned int) __pure2;
unsigned int stdc_count_zeros_ul(unsigned long) __pure2;
unsigned int stdc_count_zeros_ull(unsigned long long) __pure2;
#define stdc_count_zeros(x) __generic_bitfunc(stdc_count_zeros, x)

unsigned int stdc_count_ones_uc(unsigned char) __pure2;
unsigned int stdc_count_ones_us(unsigned short) __pure2;
unsigned int stdc_count_ones_ui(unsigned int) __pure2;
unsigned int stdc_count_ones_ul(unsigned long) __pure2;
unsigned int stdc_count_ones_ull(unsigned long long) __pure2;
#define stdc_count_ones(x) __generic_bitfunc(stdc_count_ones, x)

_Bool stdc_has_single_bit_uc(unsigned char) __pure2;
_Bool stdc_has_single_bit_us(unsigned short) __pure2;
_Bool stdc_has_single_bit_ui(unsigned int) __pure2;
_Bool stdc_has_single_bit_ul(unsigned long) __pure2;
_Bool stdc_has_single_bit_ull(unsigned long long) __pure2;
#define stdc_has_single_bit(x) __generic_bitfunc(stdc_has_single_bit, x)

unsigned int stdc_bit_width_uc(unsigned char) __pure2;
unsigned int stdc_bit_width_us(unsigned short) __pure2;
unsigned int stdc_bit_width_ui(unsigned int) __pure2;
unsigned int stdc_bit_width_ul(unsigned long) __pure2;
unsigned int stdc_bit_width_ull(unsigned long long) __pure2;
#define stdc_bit_width(x) __generic_bitfunc(stdc_bit_width, x)

unsigned char stdc_bit_floor_uc(unsigned char) __pure2;
unsigned short stdc_bit_floor_us(unsigned short) __pure2;
unsigned stdc_bit_floor_ui(unsigned int) __pure2;
unsigned long stdc_bit_floor_ul(unsigned long) __pure2;
unsigned long long stdc_bit_floor_ull(unsigned long long) __pure2;
#define stdc_bit_floor(x) __generic_bitfunc(stdc_bit_floor, x)

unsigned char stdc_bit_ceil_uc(unsigned char) __pure2;
unsigned short stdc_bit_ceil_us(unsigned short) __pure2;
unsigned int stdc_bit_ceil_ui(unsigned int) __pure2;
unsigned long stdc_bit_ceil_ul(unsigned long) __pure2;
unsigned long long stdc_bit_ceil_ull(unsigned long long) __pure2;
#define stdc_bit_ceil(x) __generic_bitfunc(stdc_bit_ceil, x)
__END_DECLS

#endif /* __STDC_VERSION_STDBIT_H__ */