Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/system/lib/llvm-libc/include/llvm-libc-macros/limits-macros.h
6174 views
1
//===-- Definition of macros from limits.h --------------------------------===//
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_LIBC_MACROS_LIMITS_MACROS_H
10
#define LLVM_LIBC_MACROS_LIMITS_MACROS_H
11
12
// Define all C23 macro constants of limits.h
13
14
#ifndef CHAR_BIT
15
#ifdef __CHAR_BIT__
16
#define CHAR_BIT __CHAR_BIT__
17
#else
18
#define CHAR_BIT 8
19
#endif // __CHAR_BIT__
20
#endif // CHAR_BIT
21
22
#ifndef MB_LEN_MAX
23
// Represents a single UTF-32 wide character in the default locale.
24
#define MB_LEN_MAX 4
25
#endif // MB_LEN_MAX
26
27
// *_WIDTH macros
28
29
#ifndef CHAR_WIDTH
30
#define CHAR_WIDTH CHAR_BIT
31
#endif // CHAR_WIDTH
32
33
#ifndef SCHAR_WIDTH
34
#define SCHAR_WIDTH CHAR_BIT
35
#endif // SCHAR_WIDTH
36
37
#ifndef UCHAR_WIDTH
38
#define UCHAR_WIDTH CHAR_BIT
39
#endif // UCHAR_WIDTH
40
41
#ifndef SHRT_WIDTH
42
#ifdef __SHRT_WIDTH__
43
#define SHRT_WIDTH __SHRT_WIDTH__
44
#else
45
#define SHRT_WIDTH 16
46
#endif // __SHRT_WIDTH__
47
#endif // SHRT_WIDTH
48
49
#ifndef USHRT_WIDTH
50
#define USHRT_WIDTH SHRT_WIDTH
51
#endif // USHRT_WIDTH
52
53
#ifndef INT_WIDTH
54
#ifdef __INT_WIDTH__
55
#define INT_WIDTH __INT_WIDTH__
56
#else
57
#define INT_WIDTH 32
58
#endif // __INT_WIDTH__
59
#endif // INT_WIDTH
60
61
#ifndef UINT_WIDTH
62
#define UINT_WIDTH INT_WIDTH
63
#endif // UINT_WIDTH
64
65
#ifndef LONG_WIDTH
66
#ifdef __LONG_WIDTH__
67
#define LONG_WIDTH __LONG_WIDTH__
68
#elif defined(__WORDSIZE)
69
#define LONG_WIDTH __WORDSIZE
70
#else
71
// Use __SIZEOF_LONG__ * CHAR_BIT as backup. This is needed for clang-13 or
72
// before.
73
#define LONG_WIDTH (__SIZEOF_LONG__ * CHAR_BIT)
74
#endif // __LONG_WIDTH__
75
#endif // LONG_WIDTH
76
77
#ifndef ULONG_WIDTH
78
#define ULONG_WIDTH LONG_WIDTH
79
#endif // ULONG_WIDTH
80
81
#ifndef LLONG_WIDTH
82
#ifdef __LLONG_WIDTH__
83
#define LLONG_WIDTH __LLONG_WIDTH__
84
#else
85
#define LLONG_WIDTH 64
86
#endif // __LLONG_WIDTH__
87
#endif // LLONG_WIDTH
88
89
#ifndef ULLONG_WIDTH
90
#define ULLONG_WIDTH LLONG_WIDTH
91
#endif // ULLONG_WIDTH
92
93
#ifndef BOOL_WIDTH
94
#ifdef __BOOL_WIDTH__
95
#define BOOL_WIDTH __BOOL_WIDTH__
96
#else
97
#define BOOL_WIDTH 1
98
#endif // __BOOL_WIDTH__
99
#endif // BOOL_WIDTH
100
101
// *_MAX macros
102
103
#ifndef SCHAR_MAX
104
#ifdef __SCHAR_MAX__
105
#define SCHAR_MAX __SCHAR_MAX__
106
#else
107
#define SCHAR_MAX 0x7f
108
#endif // __SCHAR_MAX__
109
#endif // SCHAR_MAX
110
111
#ifndef UCHAR_MAX
112
#define UCHAR_MAX (SCHAR_MAX * 2 + 1)
113
#endif // UCHAR_MAX
114
115
// Check if char is unsigned.
116
#if !defined(__CHAR_UNSIGNED__) && ('\xff' > 0)
117
#define __CHAR_UNSIGNED__
118
#endif
119
120
#ifndef CHAR_MAX
121
#ifdef __CHAR_UNSIGNED__
122
#define CHAR_MAX UCHAR_MAX
123
#else
124
#define CHAR_MAX SCHAR_MAX
125
#endif // __CHAR_UNSIGNED__
126
#endif // CHAR_MAX
127
128
#ifndef SHRT_MAX
129
#ifdef __SHRT_MAX__
130
#define SHRT_MAX __SHRT_MAX__
131
#else
132
#define SHRT_MAX 0x7fff
133
#endif // __SHRT_MAX__
134
#endif // SHRT_MAX
135
136
#ifndef USHRT_MAX
137
#define USHRT_MAX (SHRT_MAX * 2U + 1U)
138
#endif // USHRT_MAX
139
140
#ifndef INT_MAX
141
#ifdef __INT_MAX__
142
#define INT_MAX __INT_MAX__
143
#else
144
#define INT_MAX (0 ^ (1 << (INT_WIDTH - 1)))
145
#endif // __INT_MAX__
146
#endif // INT_MAX
147
148
#ifndef UINT_MAX
149
#define UINT_MAX (INT_MAX * 2U + 1U)
150
#endif // UINT_MAX
151
152
#ifndef LONG_MAX
153
#ifdef __LONG_MAX__
154
#define LONG_MAX __LONG_MAX__
155
#else
156
#define LONG_MAX (0L ^ (1L << (LONG_WIDTH - 1)))
157
#endif // __LONG_MAX__
158
#endif // LONG_MAX
159
160
#ifndef ULONG_MAX
161
#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
162
#endif // ULONG_MAX
163
164
#ifndef LLONG_MAX
165
#ifdef __LONG_LONG_MAX__
166
#define LLONG_MAX __LONG_LONG_MAX__
167
#else
168
#define LLONG_MAX (0LL ^ (1LL << (LLONG_WIDTH - 1)))
169
#endif // __LONG_LONG_MAX__
170
#endif // LLONG_MAX
171
172
#ifndef ULLONG_MAX
173
#define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
174
#endif // ULLONG_MAX
175
176
// *_MIN macros
177
178
#ifndef SCHAR_MIN
179
#define SCHAR_MIN (-SCHAR_MAX - 1)
180
#endif // SCHAR_MIN
181
182
#ifndef UCHAR_MIN
183
#define UCHAR_MIN 0
184
#endif // UCHAR_MIN
185
186
#ifndef CHAR_MIN
187
#ifdef __CHAR_UNSIGNED__
188
#define CHAR_MIN UCHAR_MIN
189
#else
190
#define CHAR_MIN SCHAR_MIN
191
#endif // __CHAR_UNSIGNED__
192
#endif // CHAR_MIN
193
194
#ifndef SHRT_MIN
195
#define SHRT_MIN (-SHRT_MAX - 1)
196
#endif // SHRT_MIN
197
198
#ifndef USHRT_MIN
199
#define USHRT_MIN 0U
200
#endif // USHRT_MIN
201
202
#ifndef INT_MIN
203
#define INT_MIN (-INT_MAX - 1)
204
#endif // INT_MIN
205
206
#ifndef UINT_MIN
207
#define UINT_MIN 0U
208
#endif // UINT_MIN
209
210
#ifndef LONG_MIN
211
#define LONG_MIN (-LONG_MAX - 1L)
212
#endif // LONG_MIN
213
214
#ifndef ULONG_MIN
215
#define ULONG_MIN 0UL
216
#endif // ULONG_MIN
217
218
#ifndef LLONG_MIN
219
#define LLONG_MIN (-LLONG_MAX - 1LL)
220
#endif // LLONG_MIN
221
222
#ifndef ULLONG_MIN
223
#define ULLONG_MIN 0ULL
224
#endif // ULLONG_MIN
225
226
#ifndef _POSIX_MAX_CANON
227
#define _POSIX_MAX_CANON 255
228
#endif
229
230
#ifndef _POSIX_MAX_INPUT
231
#define _POSIX_MAX_INPUT 255
232
#endif
233
234
#ifndef _POSIX_NAME_MAX
235
#define _POSIX_PATH_MAX 256
236
#endif
237
238
#ifndef _POSIX_ARG_MAX
239
#define _POSIX_ARG_MAX 4096
240
#endif
241
242
#ifndef IOV_MAX
243
#define IOV_MAX 1024
244
#endif // IOV_MAX
245
246
#endif // LLVM_LIBC_MACROS_LIMITS_MACROS_H
247
248