xref: /llvm-project/libc/include/llvm-libc-macros/stdint-macros.h (revision c996023f9a288f12f97de8e1a2b8fbb28d2ed0c3)
1*c996023fSJoseph Huber //===-- Definition of macros from stdint.h --------------------------------===//
2*c996023fSJoseph Huber //
3*c996023fSJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*c996023fSJoseph Huber // See https://llvm.org/LICENSE.txt for license information.
5*c996023fSJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*c996023fSJoseph Huber //
7*c996023fSJoseph Huber //===----------------------------------------------------------------------===//
8*c996023fSJoseph Huber 
9*c996023fSJoseph Huber #ifndef LLVM_LIBC_MACROS_STDINT_MACROS_H
10*c996023fSJoseph Huber #define LLVM_LIBC_MACROS_STDINT_MACROS_H
11*c996023fSJoseph Huber 
12*c996023fSJoseph Huber // These definitions are copied directly from the clang implementation located
13*c996023fSJoseph Huber // at 'clang/lib/Headers/stdint.h'. We provide it here again for compatibility.
14*c996023fSJoseph Huber 
15*c996023fSJoseph Huber /* C99 7.18.1.1 Exact-width integer types.
16*c996023fSJoseph Huber  * C99 7.18.1.2 Minimum-width integer types.
17*c996023fSJoseph Huber  * C99 7.18.1.3 Fastest minimum-width integer types.
18*c996023fSJoseph Huber  *
19*c996023fSJoseph Huber  * The standard requires that exact-width type be defined for 8-, 16-, 32-, and
20*c996023fSJoseph Huber  * 64-bit types if they are implemented. Other exact width types are optional.
21*c996023fSJoseph Huber  * This implementation defines an exact-width types for every integer width
22*c996023fSJoseph Huber  * that is represented in the standard integer types.
23*c996023fSJoseph Huber  *
24*c996023fSJoseph Huber  * The standard also requires minimum-width types be defined for 8-, 16-, 32-,
25*c996023fSJoseph Huber  * and 64-bit widths regardless of whether there are corresponding exact-width
26*c996023fSJoseph Huber  * types.
27*c996023fSJoseph Huber  *
28*c996023fSJoseph Huber  * To accommodate targets that are missing types that are exactly 8, 16, 32, or
29*c996023fSJoseph Huber  * 64 bits wide, this implementation takes an approach of cascading
30*c996023fSJoseph Huber  * redefinitions, redefining __int_leastN_t to successively smaller exact-width
31*c996023fSJoseph Huber  * types. It is therefore important that the types are defined in order of
32*c996023fSJoseph Huber  * descending widths.
33*c996023fSJoseph Huber  *
34*c996023fSJoseph Huber  * We currently assume that the minimum-width types and the fastest
35*c996023fSJoseph Huber  * minimum-width types are the same. This is allowed by the standard, but is
36*c996023fSJoseph Huber  * suboptimal.
37*c996023fSJoseph Huber  *
38*c996023fSJoseph Huber  * In violation of the standard, some targets do not implement a type that is
39*c996023fSJoseph Huber  * wide enough to represent all of the required widths (8-, 16-, 32-, 64-bit).
40*c996023fSJoseph Huber  * To accommodate these targets, a required minimum-width type is only
41*c996023fSJoseph Huber  * defined if there exists an exact-width type of equal or greater width.
42*c996023fSJoseph Huber  */
43*c996023fSJoseph Huber 
44*c996023fSJoseph Huber #ifdef __INT64_TYPE__
45*c996023fSJoseph Huber #ifndef __int8_t_defined /* glibc sys/types.h also defines int64_t*/
46*c996023fSJoseph Huber typedef __INT64_TYPE__ int64_t;
47*c996023fSJoseph Huber #endif /* __int8_t_defined */
48*c996023fSJoseph Huber typedef __UINT64_TYPE__ uint64_t;
49*c996023fSJoseph Huber #undef __int_least64_t
50*c996023fSJoseph Huber #define __int_least64_t int64_t
51*c996023fSJoseph Huber #undef __uint_least64_t
52*c996023fSJoseph Huber #define __uint_least64_t uint64_t
53*c996023fSJoseph Huber #undef __int_least32_t
54*c996023fSJoseph Huber #define __int_least32_t int64_t
55*c996023fSJoseph Huber #undef __uint_least32_t
56*c996023fSJoseph Huber #define __uint_least32_t uint64_t
57*c996023fSJoseph Huber #undef __int_least16_t
58*c996023fSJoseph Huber #define __int_least16_t int64_t
59*c996023fSJoseph Huber #undef __uint_least16_t
60*c996023fSJoseph Huber #define __uint_least16_t uint64_t
61*c996023fSJoseph Huber #undef __int_least8_t
62*c996023fSJoseph Huber #define __int_least8_t int64_t
63*c996023fSJoseph Huber #undef __uint_least8_t
64*c996023fSJoseph Huber #define __uint_least8_t uint64_t
65*c996023fSJoseph Huber #endif /* __INT64_TYPE__ */
66*c996023fSJoseph Huber 
67*c996023fSJoseph Huber #ifdef __int_least64_t
68*c996023fSJoseph Huber typedef __int_least64_t int_least64_t;
69*c996023fSJoseph Huber typedef __uint_least64_t uint_least64_t;
70*c996023fSJoseph Huber typedef __int_least64_t int_fast64_t;
71*c996023fSJoseph Huber typedef __uint_least64_t uint_fast64_t;
72*c996023fSJoseph Huber #endif /* __int_least64_t */
73*c996023fSJoseph Huber 
74*c996023fSJoseph Huber #ifdef __INT56_TYPE__
75*c996023fSJoseph Huber typedef __INT56_TYPE__ int56_t;
76*c996023fSJoseph Huber typedef __UINT56_TYPE__ uint56_t;
77*c996023fSJoseph Huber typedef int56_t int_least56_t;
78*c996023fSJoseph Huber typedef uint56_t uint_least56_t;
79*c996023fSJoseph Huber typedef int56_t int_fast56_t;
80*c996023fSJoseph Huber typedef uint56_t uint_fast56_t;
81*c996023fSJoseph Huber #undef __int_least32_t
82*c996023fSJoseph Huber #define __int_least32_t int56_t
83*c996023fSJoseph Huber #undef __uint_least32_t
84*c996023fSJoseph Huber #define __uint_least32_t uint56_t
85*c996023fSJoseph Huber #undef __int_least16_t
86*c996023fSJoseph Huber #define __int_least16_t int56_t
87*c996023fSJoseph Huber #undef __uint_least16_t
88*c996023fSJoseph Huber #define __uint_least16_t uint56_t
89*c996023fSJoseph Huber #undef __int_least8_t
90*c996023fSJoseph Huber #define __int_least8_t int56_t
91*c996023fSJoseph Huber #undef __uint_least8_t
92*c996023fSJoseph Huber #define __uint_least8_t uint56_t
93*c996023fSJoseph Huber #endif /* __INT56_TYPE__ */
94*c996023fSJoseph Huber 
95*c996023fSJoseph Huber #ifdef __INT48_TYPE__
96*c996023fSJoseph Huber typedef __INT48_TYPE__ int48_t;
97*c996023fSJoseph Huber typedef __UINT48_TYPE__ uint48_t;
98*c996023fSJoseph Huber typedef int48_t int_least48_t;
99*c996023fSJoseph Huber typedef uint48_t uint_least48_t;
100*c996023fSJoseph Huber typedef int48_t int_fast48_t;
101*c996023fSJoseph Huber typedef uint48_t uint_fast48_t;
102*c996023fSJoseph Huber #undef __int_least32_t
103*c996023fSJoseph Huber #define __int_least32_t int48_t
104*c996023fSJoseph Huber #undef __uint_least32_t
105*c996023fSJoseph Huber #define __uint_least32_t uint48_t
106*c996023fSJoseph Huber #undef __int_least16_t
107*c996023fSJoseph Huber #define __int_least16_t int48_t
108*c996023fSJoseph Huber #undef __uint_least16_t
109*c996023fSJoseph Huber #define __uint_least16_t uint48_t
110*c996023fSJoseph Huber #undef __int_least8_t
111*c996023fSJoseph Huber #define __int_least8_t int48_t
112*c996023fSJoseph Huber #undef __uint_least8_t
113*c996023fSJoseph Huber #define __uint_least8_t uint48_t
114*c996023fSJoseph Huber #endif /* __INT48_TYPE__ */
115*c996023fSJoseph Huber 
116*c996023fSJoseph Huber #ifdef __INT40_TYPE__
117*c996023fSJoseph Huber typedef __INT40_TYPE__ int40_t;
118*c996023fSJoseph Huber typedef __UINT40_TYPE__ uint40_t;
119*c996023fSJoseph Huber typedef int40_t int_least40_t;
120*c996023fSJoseph Huber typedef uint40_t uint_least40_t;
121*c996023fSJoseph Huber typedef int40_t int_fast40_t;
122*c996023fSJoseph Huber typedef uint40_t uint_fast40_t;
123*c996023fSJoseph Huber #undef __int_least32_t
124*c996023fSJoseph Huber #define __int_least32_t int40_t
125*c996023fSJoseph Huber #undef __uint_least32_t
126*c996023fSJoseph Huber #define __uint_least32_t uint40_t
127*c996023fSJoseph Huber #undef __int_least16_t
128*c996023fSJoseph Huber #define __int_least16_t int40_t
129*c996023fSJoseph Huber #undef __uint_least16_t
130*c996023fSJoseph Huber #define __uint_least16_t uint40_t
131*c996023fSJoseph Huber #undef __int_least8_t
132*c996023fSJoseph Huber #define __int_least8_t int40_t
133*c996023fSJoseph Huber #undef __uint_least8_t
134*c996023fSJoseph Huber #define __uint_least8_t uint40_t
135*c996023fSJoseph Huber #endif /* __INT40_TYPE__ */
136*c996023fSJoseph Huber 
137*c996023fSJoseph Huber #ifdef __INT32_TYPE__
138*c996023fSJoseph Huber 
139*c996023fSJoseph Huber #ifndef __int8_t_defined /* glibc sys/types.h also defines int32_t*/
140*c996023fSJoseph Huber typedef __INT32_TYPE__ int32_t;
141*c996023fSJoseph Huber #endif /* __int8_t_defined */
142*c996023fSJoseph Huber 
143*c996023fSJoseph Huber #ifndef __uint32_t_defined /* more glibc compatibility */
144*c996023fSJoseph Huber #define __uint32_t_defined
145*c996023fSJoseph Huber typedef __UINT32_TYPE__ uint32_t;
146*c996023fSJoseph Huber #endif /* __uint32_t_defined */
147*c996023fSJoseph Huber 
148*c996023fSJoseph Huber #undef __int_least32_t
149*c996023fSJoseph Huber #define __int_least32_t int32_t
150*c996023fSJoseph Huber #undef __uint_least32_t
151*c996023fSJoseph Huber #define __uint_least32_t uint32_t
152*c996023fSJoseph Huber #undef __int_least16_t
153*c996023fSJoseph Huber #define __int_least16_t int32_t
154*c996023fSJoseph Huber #undef __uint_least16_t
155*c996023fSJoseph Huber #define __uint_least16_t uint32_t
156*c996023fSJoseph Huber #undef __int_least8_t
157*c996023fSJoseph Huber #define __int_least8_t int32_t
158*c996023fSJoseph Huber #undef __uint_least8_t
159*c996023fSJoseph Huber #define __uint_least8_t uint32_t
160*c996023fSJoseph Huber #endif /* __INT32_TYPE__ */
161*c996023fSJoseph Huber 
162*c996023fSJoseph Huber #ifdef __int_least32_t
163*c996023fSJoseph Huber typedef __int_least32_t int_least32_t;
164*c996023fSJoseph Huber typedef __uint_least32_t uint_least32_t;
165*c996023fSJoseph Huber typedef __int_least32_t int_fast32_t;
166*c996023fSJoseph Huber typedef __uint_least32_t uint_fast32_t;
167*c996023fSJoseph Huber #endif /* __int_least32_t */
168*c996023fSJoseph Huber 
169*c996023fSJoseph Huber #ifdef __INT24_TYPE__
170*c996023fSJoseph Huber typedef __INT24_TYPE__ int24_t;
171*c996023fSJoseph Huber typedef __UINT24_TYPE__ uint24_t;
172*c996023fSJoseph Huber typedef int24_t int_least24_t;
173*c996023fSJoseph Huber typedef uint24_t uint_least24_t;
174*c996023fSJoseph Huber typedef int24_t int_fast24_t;
175*c996023fSJoseph Huber typedef uint24_t uint_fast24_t;
176*c996023fSJoseph Huber #undef __int_least16_t
177*c996023fSJoseph Huber #define __int_least16_t int24_t
178*c996023fSJoseph Huber #undef __uint_least16_t
179*c996023fSJoseph Huber #define __uint_least16_t uint24_t
180*c996023fSJoseph Huber #undef __int_least8_t
181*c996023fSJoseph Huber #define __int_least8_t int24_t
182*c996023fSJoseph Huber #undef __uint_least8_t
183*c996023fSJoseph Huber #define __uint_least8_t uint24_t
184*c996023fSJoseph Huber #endif /* __INT24_TYPE__ */
185*c996023fSJoseph Huber 
186*c996023fSJoseph Huber #ifdef __INT16_TYPE__
187*c996023fSJoseph Huber #ifndef __int8_t_defined /* glibc sys/types.h also defines int16_t*/
188*c996023fSJoseph Huber typedef __INT16_TYPE__ int16_t;
189*c996023fSJoseph Huber #endif /* __int8_t_defined */
190*c996023fSJoseph Huber typedef __UINT16_TYPE__ uint16_t;
191*c996023fSJoseph Huber #undef __int_least16_t
192*c996023fSJoseph Huber #define __int_least16_t int16_t
193*c996023fSJoseph Huber #undef __uint_least16_t
194*c996023fSJoseph Huber #define __uint_least16_t uint16_t
195*c996023fSJoseph Huber #undef __int_least8_t
196*c996023fSJoseph Huber #define __int_least8_t int16_t
197*c996023fSJoseph Huber #undef __uint_least8_t
198*c996023fSJoseph Huber #define __uint_least8_t uint16_t
199*c996023fSJoseph Huber #endif /* __INT16_TYPE__ */
200*c996023fSJoseph Huber 
201*c996023fSJoseph Huber #ifdef __int_least16_t
202*c996023fSJoseph Huber typedef __int_least16_t int_least16_t;
203*c996023fSJoseph Huber typedef __uint_least16_t uint_least16_t;
204*c996023fSJoseph Huber typedef __int_least16_t int_fast16_t;
205*c996023fSJoseph Huber typedef __uint_least16_t uint_fast16_t;
206*c996023fSJoseph Huber #endif /* __int_least16_t */
207*c996023fSJoseph Huber 
208*c996023fSJoseph Huber #ifdef __INT8_TYPE__
209*c996023fSJoseph Huber #ifndef __int8_t_defined /* glibc sys/types.h also defines int8_t*/
210*c996023fSJoseph Huber typedef __INT8_TYPE__ int8_t;
211*c996023fSJoseph Huber #endif /* __int8_t_defined */
212*c996023fSJoseph Huber typedef __UINT8_TYPE__ uint8_t;
213*c996023fSJoseph Huber #undef __int_least8_t
214*c996023fSJoseph Huber #define __int_least8_t int8_t
215*c996023fSJoseph Huber #undef __uint_least8_t
216*c996023fSJoseph Huber #define __uint_least8_t uint8_t
217*c996023fSJoseph Huber #endif /* __INT8_TYPE__ */
218*c996023fSJoseph Huber 
219*c996023fSJoseph Huber #ifdef __int_least8_t
220*c996023fSJoseph Huber typedef __int_least8_t int_least8_t;
221*c996023fSJoseph Huber typedef __uint_least8_t uint_least8_t;
222*c996023fSJoseph Huber typedef __int_least8_t int_fast8_t;
223*c996023fSJoseph Huber typedef __uint_least8_t uint_fast8_t;
224*c996023fSJoseph Huber #endif /* __int_least8_t */
225*c996023fSJoseph Huber 
226*c996023fSJoseph Huber /* prevent glibc sys/types.h from defining conflicting types */
227*c996023fSJoseph Huber #ifndef __int8_t_defined
228*c996023fSJoseph Huber #define __int8_t_defined
229*c996023fSJoseph Huber #endif /* __int8_t_defined */
230*c996023fSJoseph Huber 
231*c996023fSJoseph Huber /* C99 7.18.1.4 Integer types capable of holding object pointers.
232*c996023fSJoseph Huber  */
233*c996023fSJoseph Huber #define __stdint_join3(a, b, c) a##b##c
234*c996023fSJoseph Huber 
235*c996023fSJoseph Huber #ifndef _INTPTR_T
236*c996023fSJoseph Huber #ifndef __intptr_t_defined
237*c996023fSJoseph Huber typedef __INTPTR_TYPE__ intptr_t;
238*c996023fSJoseph Huber #define __intptr_t_defined
239*c996023fSJoseph Huber #define _INTPTR_T
240*c996023fSJoseph Huber #endif
241*c996023fSJoseph Huber #endif
242*c996023fSJoseph Huber 
243*c996023fSJoseph Huber #ifndef _UINTPTR_T
244*c996023fSJoseph Huber typedef __UINTPTR_TYPE__ uintptr_t;
245*c996023fSJoseph Huber #define _UINTPTR_T
246*c996023fSJoseph Huber #endif
247*c996023fSJoseph Huber 
248*c996023fSJoseph Huber /* C99 7.18.1.5 Greatest-width integer types.
249*c996023fSJoseph Huber  */
250*c996023fSJoseph Huber typedef __INTMAX_TYPE__ intmax_t;
251*c996023fSJoseph Huber typedef __UINTMAX_TYPE__ uintmax_t;
252*c996023fSJoseph Huber 
253*c996023fSJoseph Huber /* C99 7.18.4 Macros for minimum-width integer constants.
254*c996023fSJoseph Huber  *
255*c996023fSJoseph Huber  * The standard requires that integer constant macros be defined for all the
256*c996023fSJoseph Huber  * minimum-width types defined above. As 8-, 16-, 32-, and 64-bit minimum-width
257*c996023fSJoseph Huber  * types are required, the corresponding integer constant macros are defined
258*c996023fSJoseph Huber  * here. This implementation also defines minimum-width types for every other
259*c996023fSJoseph Huber  * integer width that the target implements, so corresponding macros are
260*c996023fSJoseph Huber  * defined below, too.
261*c996023fSJoseph Huber  *
262*c996023fSJoseph Huber  * These macros are defined using the same successive-shrinking approach as
263*c996023fSJoseph Huber  * the type definitions above. It is likewise important that macros are defined
264*c996023fSJoseph Huber  * in order of decending width.
265*c996023fSJoseph Huber  *
266*c996023fSJoseph Huber  * Note that C++ should not check __STDC_CONSTANT_MACROS here, contrary to the
267*c996023fSJoseph Huber  * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]).
268*c996023fSJoseph Huber  */
269*c996023fSJoseph Huber 
270*c996023fSJoseph Huber #define __int_c_join(a, b) a##b
271*c996023fSJoseph Huber #define __int_c(v, suffix) __int_c_join(v, suffix)
272*c996023fSJoseph Huber #define __uint_c(v, suffix) __int_c_join(v##U, suffix)
273*c996023fSJoseph Huber 
274*c996023fSJoseph Huber #ifdef __INT64_TYPE__
275*c996023fSJoseph Huber #undef __int64_c_suffix
276*c996023fSJoseph Huber #undef __int32_c_suffix
277*c996023fSJoseph Huber #undef __int16_c_suffix
278*c996023fSJoseph Huber #undef __int8_c_suffix
279*c996023fSJoseph Huber #ifdef __INT64_C_SUFFIX__
280*c996023fSJoseph Huber #define __int64_c_suffix __INT64_C_SUFFIX__
281*c996023fSJoseph Huber #define __int32_c_suffix __INT64_C_SUFFIX__
282*c996023fSJoseph Huber #define __int16_c_suffix __INT64_C_SUFFIX__
283*c996023fSJoseph Huber #define __int8_c_suffix __INT64_C_SUFFIX__
284*c996023fSJoseph Huber #endif /* __INT64_C_SUFFIX__ */
285*c996023fSJoseph Huber #endif /* __INT64_TYPE__ */
286*c996023fSJoseph Huber 
287*c996023fSJoseph Huber #ifdef __int_least64_t
288*c996023fSJoseph Huber #ifdef __int64_c_suffix
289*c996023fSJoseph Huber #define INT64_C(v) __int_c(v, __int64_c_suffix)
290*c996023fSJoseph Huber #define UINT64_C(v) __uint_c(v, __int64_c_suffix)
291*c996023fSJoseph Huber #else
292*c996023fSJoseph Huber #define INT64_C(v) v
293*c996023fSJoseph Huber #define UINT64_C(v) v##U
294*c996023fSJoseph Huber #endif /* __int64_c_suffix */
295*c996023fSJoseph Huber #endif /* __int_least64_t */
296*c996023fSJoseph Huber 
297*c996023fSJoseph Huber #ifdef __INT56_TYPE__
298*c996023fSJoseph Huber #undef __int32_c_suffix
299*c996023fSJoseph Huber #undef __int16_c_suffix
300*c996023fSJoseph Huber #undef __int8_c_suffix
301*c996023fSJoseph Huber #ifdef __INT56_C_SUFFIX__
302*c996023fSJoseph Huber #define INT56_C(v) __int_c(v, __INT56_C_SUFFIX__)
303*c996023fSJoseph Huber #define UINT56_C(v) __uint_c(v, __INT56_C_SUFFIX__)
304*c996023fSJoseph Huber #define __int32_c_suffix __INT56_C_SUFFIX__
305*c996023fSJoseph Huber #define __int16_c_suffix __INT56_C_SUFFIX__
306*c996023fSJoseph Huber #define __int8_c_suffix __INT56_C_SUFFIX__
307*c996023fSJoseph Huber #else
308*c996023fSJoseph Huber #define INT56_C(v) v
309*c996023fSJoseph Huber #define UINT56_C(v) v##U
310*c996023fSJoseph Huber #endif /* __INT56_C_SUFFIX__ */
311*c996023fSJoseph Huber #endif /* __INT56_TYPE__ */
312*c996023fSJoseph Huber 
313*c996023fSJoseph Huber #ifdef __INT48_TYPE__
314*c996023fSJoseph Huber #undef __int32_c_suffix
315*c996023fSJoseph Huber #undef __int16_c_suffix
316*c996023fSJoseph Huber #undef __int8_c_suffix
317*c996023fSJoseph Huber #ifdef __INT48_C_SUFFIX__
318*c996023fSJoseph Huber #define INT48_C(v) __int_c(v, __INT48_C_SUFFIX__)
319*c996023fSJoseph Huber #define UINT48_C(v) __uint_c(v, __INT48_C_SUFFIX__)
320*c996023fSJoseph Huber #define __int32_c_suffix __INT48_C_SUFFIX__
321*c996023fSJoseph Huber #define __int16_c_suffix __INT48_C_SUFFIX__
322*c996023fSJoseph Huber #define __int8_c_suffix __INT48_C_SUFFIX__
323*c996023fSJoseph Huber #else
324*c996023fSJoseph Huber #define INT48_C(v) v
325*c996023fSJoseph Huber #define UINT48_C(v) v##U
326*c996023fSJoseph Huber #endif /* __INT48_C_SUFFIX__ */
327*c996023fSJoseph Huber #endif /* __INT48_TYPE__ */
328*c996023fSJoseph Huber 
329*c996023fSJoseph Huber #ifdef __INT40_TYPE__
330*c996023fSJoseph Huber #undef __int32_c_suffix
331*c996023fSJoseph Huber #undef __int16_c_suffix
332*c996023fSJoseph Huber #undef __int8_c_suffix
333*c996023fSJoseph Huber #ifdef __INT40_C_SUFFIX__
334*c996023fSJoseph Huber #define INT40_C(v) __int_c(v, __INT40_C_SUFFIX__)
335*c996023fSJoseph Huber #define UINT40_C(v) __uint_c(v, __INT40_C_SUFFIX__)
336*c996023fSJoseph Huber #define __int32_c_suffix __INT40_C_SUFFIX__
337*c996023fSJoseph Huber #define __int16_c_suffix __INT40_C_SUFFIX__
338*c996023fSJoseph Huber #define __int8_c_suffix __INT40_C_SUFFIX__
339*c996023fSJoseph Huber #else
340*c996023fSJoseph Huber #define INT40_C(v) v
341*c996023fSJoseph Huber #define UINT40_C(v) v##U
342*c996023fSJoseph Huber #endif /* __INT40_C_SUFFIX__ */
343*c996023fSJoseph Huber #endif /* __INT40_TYPE__ */
344*c996023fSJoseph Huber 
345*c996023fSJoseph Huber #ifdef __INT32_TYPE__
346*c996023fSJoseph Huber #undef __int32_c_suffix
347*c996023fSJoseph Huber #undef __int16_c_suffix
348*c996023fSJoseph Huber #undef __int8_c_suffix
349*c996023fSJoseph Huber #ifdef __INT32_C_SUFFIX__
350*c996023fSJoseph Huber #define __int32_c_suffix __INT32_C_SUFFIX__
351*c996023fSJoseph Huber #define __int16_c_suffix __INT32_C_SUFFIX__
352*c996023fSJoseph Huber #define __int8_c_suffix __INT32_C_SUFFIX__
353*c996023fSJoseph Huber #endif /* __INT32_C_SUFFIX__ */
354*c996023fSJoseph Huber #endif /* __INT32_TYPE__ */
355*c996023fSJoseph Huber 
356*c996023fSJoseph Huber #ifdef __int_least32_t
357*c996023fSJoseph Huber #ifdef __int32_c_suffix
358*c996023fSJoseph Huber #define INT32_C(v) __int_c(v, __int32_c_suffix)
359*c996023fSJoseph Huber #define UINT32_C(v) __uint_c(v, __int32_c_suffix)
360*c996023fSJoseph Huber #else
361*c996023fSJoseph Huber #define INT32_C(v) v
362*c996023fSJoseph Huber #define UINT32_C(v) v##U
363*c996023fSJoseph Huber #endif /* __int32_c_suffix */
364*c996023fSJoseph Huber #endif /* __int_least32_t */
365*c996023fSJoseph Huber 
366*c996023fSJoseph Huber #ifdef __INT24_TYPE__
367*c996023fSJoseph Huber #undef __int16_c_suffix
368*c996023fSJoseph Huber #undef __int8_c_suffix
369*c996023fSJoseph Huber #ifdef __INT24_C_SUFFIX__
370*c996023fSJoseph Huber #define INT24_C(v) __int_c(v, __INT24_C_SUFFIX__)
371*c996023fSJoseph Huber #define UINT24_C(v) __uint_c(v, __INT24_C_SUFFIX__)
372*c996023fSJoseph Huber #define __int16_c_suffix __INT24_C_SUFFIX__
373*c996023fSJoseph Huber #define __int8_c_suffix __INT24_C_SUFFIX__
374*c996023fSJoseph Huber #else
375*c996023fSJoseph Huber #define INT24_C(v) v
376*c996023fSJoseph Huber #define UINT24_C(v) v##U
377*c996023fSJoseph Huber #endif /* __INT24_C_SUFFIX__ */
378*c996023fSJoseph Huber #endif /* __INT24_TYPE__ */
379*c996023fSJoseph Huber 
380*c996023fSJoseph Huber #ifdef __INT16_TYPE__
381*c996023fSJoseph Huber #undef __int16_c_suffix
382*c996023fSJoseph Huber #undef __int8_c_suffix
383*c996023fSJoseph Huber #ifdef __INT16_C_SUFFIX__
384*c996023fSJoseph Huber #define __int16_c_suffix __INT16_C_SUFFIX__
385*c996023fSJoseph Huber #define __int8_c_suffix __INT16_C_SUFFIX__
386*c996023fSJoseph Huber #endif /* __INT16_C_SUFFIX__ */
387*c996023fSJoseph Huber #endif /* __INT16_TYPE__ */
388*c996023fSJoseph Huber 
389*c996023fSJoseph Huber #ifdef __int_least16_t
390*c996023fSJoseph Huber #ifdef __int16_c_suffix
391*c996023fSJoseph Huber #define INT16_C(v) __int_c(v, __int16_c_suffix)
392*c996023fSJoseph Huber #define UINT16_C(v) __uint_c(v, __int16_c_suffix)
393*c996023fSJoseph Huber #else
394*c996023fSJoseph Huber #define INT16_C(v) v
395*c996023fSJoseph Huber #define UINT16_C(v) v##U
396*c996023fSJoseph Huber #endif /* __int16_c_suffix */
397*c996023fSJoseph Huber #endif /* __int_least16_t */
398*c996023fSJoseph Huber 
399*c996023fSJoseph Huber #ifdef __INT8_TYPE__
400*c996023fSJoseph Huber #undef __int8_c_suffix
401*c996023fSJoseph Huber #ifdef __INT8_C_SUFFIX__
402*c996023fSJoseph Huber #define __int8_c_suffix __INT8_C_SUFFIX__
403*c996023fSJoseph Huber #endif /* __INT8_C_SUFFIX__ */
404*c996023fSJoseph Huber #endif /* __INT8_TYPE__ */
405*c996023fSJoseph Huber 
406*c996023fSJoseph Huber #ifdef __int_least8_t
407*c996023fSJoseph Huber #ifdef __int8_c_suffix
408*c996023fSJoseph Huber #define INT8_C(v) __int_c(v, __int8_c_suffix)
409*c996023fSJoseph Huber #define UINT8_C(v) __uint_c(v, __int8_c_suffix)
410*c996023fSJoseph Huber #else
411*c996023fSJoseph Huber #define INT8_C(v) v
412*c996023fSJoseph Huber #define UINT8_C(v) v##U
413*c996023fSJoseph Huber #endif /* __int8_c_suffix */
414*c996023fSJoseph Huber #endif /* __int_least8_t */
415*c996023fSJoseph Huber 
416*c996023fSJoseph Huber /* C99 7.18.2.1 Limits of exact-width integer types.
417*c996023fSJoseph Huber  * C99 7.18.2.2 Limits of minimum-width integer types.
418*c996023fSJoseph Huber  * C99 7.18.2.3 Limits of fastest minimum-width integer types.
419*c996023fSJoseph Huber  *
420*c996023fSJoseph Huber  * The presence of limit macros are completely optional in C99.  This
421*c996023fSJoseph Huber  * implementation defines limits for all of the types (exact- and
422*c996023fSJoseph Huber  * minimum-width) that it defines above, using the limits of the minimum-width
423*c996023fSJoseph Huber  * type for any types that do not have exact-width representations.
424*c996023fSJoseph Huber  *
425*c996023fSJoseph Huber  * As in the type definitions, this section takes an approach of
426*c996023fSJoseph Huber  * successive-shrinking to determine which limits to use for the standard (8,
427*c996023fSJoseph Huber  * 16, 32, 64) bit widths when they don't have exact representations. It is
428*c996023fSJoseph Huber  * therefore important that the definitions be kept in order of decending
429*c996023fSJoseph Huber  * widths.
430*c996023fSJoseph Huber  *
431*c996023fSJoseph Huber  * Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the
432*c996023fSJoseph Huber  * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]).
433*c996023fSJoseph Huber  */
434*c996023fSJoseph Huber 
435*c996023fSJoseph Huber #ifdef __INT64_TYPE__
436*c996023fSJoseph Huber #define INT64_MAX INT64_C(9223372036854775807)
437*c996023fSJoseph Huber #define INT64_MIN (-INT64_C(9223372036854775807) - 1)
438*c996023fSJoseph Huber #define UINT64_MAX UINT64_C(18446744073709551615)
439*c996023fSJoseph Huber 
440*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
441*c996023fSJoseph Huber #define UINT64_WIDTH 64
442*c996023fSJoseph Huber #define INT64_WIDTH UINT64_WIDTH
443*c996023fSJoseph Huber 
444*c996023fSJoseph Huber #define __UINT_LEAST64_WIDTH UINT64_WIDTH
445*c996023fSJoseph Huber #undef __UINT_LEAST32_WIDTH
446*c996023fSJoseph Huber #define __UINT_LEAST32_WIDTH UINT64_WIDTH
447*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
448*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT64_WIDTH
449*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
450*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT64_MAX
451*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
452*c996023fSJoseph Huber 
453*c996023fSJoseph Huber #define __INT_LEAST64_MIN INT64_MIN
454*c996023fSJoseph Huber #define __INT_LEAST64_MAX INT64_MAX
455*c996023fSJoseph Huber #define __UINT_LEAST64_MAX UINT64_MAX
456*c996023fSJoseph Huber #undef __INT_LEAST32_MIN
457*c996023fSJoseph Huber #define __INT_LEAST32_MIN INT64_MIN
458*c996023fSJoseph Huber #undef __INT_LEAST32_MAX
459*c996023fSJoseph Huber #define __INT_LEAST32_MAX INT64_MAX
460*c996023fSJoseph Huber #undef __UINT_LEAST32_MAX
461*c996023fSJoseph Huber #define __UINT_LEAST32_MAX UINT64_MAX
462*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
463*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT64_MIN
464*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
465*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT64_MAX
466*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
467*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT64_MAX
468*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
469*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT64_MIN
470*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
471*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT64_MAX
472*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
473*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT64_MAX
474*c996023fSJoseph Huber #endif /* __INT64_TYPE__ */
475*c996023fSJoseph Huber 
476*c996023fSJoseph Huber #ifdef __INT_LEAST64_MIN
477*c996023fSJoseph Huber #define INT_LEAST64_MIN __INT_LEAST64_MIN
478*c996023fSJoseph Huber #define INT_LEAST64_MAX __INT_LEAST64_MAX
479*c996023fSJoseph Huber #define UINT_LEAST64_MAX __UINT_LEAST64_MAX
480*c996023fSJoseph Huber #define INT_FAST64_MIN __INT_LEAST64_MIN
481*c996023fSJoseph Huber #define INT_FAST64_MAX __INT_LEAST64_MAX
482*c996023fSJoseph Huber #define UINT_FAST64_MAX __UINT_LEAST64_MAX
483*c996023fSJoseph Huber 
484*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
485*c996023fSJoseph Huber #define UINT_LEAST64_WIDTH __UINT_LEAST64_WIDTH
486*c996023fSJoseph Huber #define INT_LEAST64_WIDTH UINT_LEAST64_WIDTH
487*c996023fSJoseph Huber #define UINT_FAST64_WIDTH __UINT_LEAST64_WIDTH
488*c996023fSJoseph Huber #define INT_FAST64_WIDTH UINT_FAST64_WIDTH
489*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
490*c996023fSJoseph Huber #endif /* __INT_LEAST64_MIN */
491*c996023fSJoseph Huber 
492*c996023fSJoseph Huber #ifdef __INT56_TYPE__
493*c996023fSJoseph Huber #define INT56_MAX INT56_C(36028797018963967)
494*c996023fSJoseph Huber #define INT56_MIN (-INT56_C(36028797018963967) - 1)
495*c996023fSJoseph Huber #define UINT56_MAX UINT56_C(72057594037927935)
496*c996023fSJoseph Huber #define INT_LEAST56_MIN INT56_MIN
497*c996023fSJoseph Huber #define INT_LEAST56_MAX INT56_MAX
498*c996023fSJoseph Huber #define UINT_LEAST56_MAX UINT56_MAX
499*c996023fSJoseph Huber #define INT_FAST56_MIN INT56_MIN
500*c996023fSJoseph Huber #define INT_FAST56_MAX INT56_MAX
501*c996023fSJoseph Huber #define UINT_FAST56_MAX UINT56_MAX
502*c996023fSJoseph Huber 
503*c996023fSJoseph Huber #undef __INT_LEAST32_MIN
504*c996023fSJoseph Huber #define __INT_LEAST32_MIN INT56_MIN
505*c996023fSJoseph Huber #undef __INT_LEAST32_MAX
506*c996023fSJoseph Huber #define __INT_LEAST32_MAX INT56_MAX
507*c996023fSJoseph Huber #undef __UINT_LEAST32_MAX
508*c996023fSJoseph Huber #define __UINT_LEAST32_MAX UINT56_MAX
509*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
510*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT56_MIN
511*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
512*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT56_MAX
513*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
514*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT56_MAX
515*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
516*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT56_MIN
517*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
518*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT56_MAX
519*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
520*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT56_MAX
521*c996023fSJoseph Huber 
522*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
523*c996023fSJoseph Huber #define UINT56_WIDTH 56
524*c996023fSJoseph Huber #define INT56_WIDTH UINT56_WIDTH
525*c996023fSJoseph Huber #define UINT_LEAST56_WIDTH UINT56_WIDTH
526*c996023fSJoseph Huber #define INT_LEAST56_WIDTH UINT_LEAST56_WIDTH
527*c996023fSJoseph Huber #define UINT_FAST56_WIDTH UINT56_WIDTH
528*c996023fSJoseph Huber #define INT_FAST56_WIDTH UINT_FAST56_WIDTH
529*c996023fSJoseph Huber #undef __UINT_LEAST32_WIDTH
530*c996023fSJoseph Huber #define __UINT_LEAST32_WIDTH UINT56_WIDTH
531*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
532*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT56_WIDTH
533*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
534*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT56_WIDTH
535*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
536*c996023fSJoseph Huber #endif /* __INT56_TYPE__ */
537*c996023fSJoseph Huber 
538*c996023fSJoseph Huber #ifdef __INT48_TYPE__
539*c996023fSJoseph Huber #define INT48_MAX INT48_C(140737488355327)
540*c996023fSJoseph Huber #define INT48_MIN (-INT48_C(140737488355327) - 1)
541*c996023fSJoseph Huber #define UINT48_MAX UINT48_C(281474976710655)
542*c996023fSJoseph Huber #define INT_LEAST48_MIN INT48_MIN
543*c996023fSJoseph Huber #define INT_LEAST48_MAX INT48_MAX
544*c996023fSJoseph Huber #define UINT_LEAST48_MAX UINT48_MAX
545*c996023fSJoseph Huber #define INT_FAST48_MIN INT48_MIN
546*c996023fSJoseph Huber #define INT_FAST48_MAX INT48_MAX
547*c996023fSJoseph Huber #define UINT_FAST48_MAX UINT48_MAX
548*c996023fSJoseph Huber 
549*c996023fSJoseph Huber #undef __INT_LEAST32_MIN
550*c996023fSJoseph Huber #define __INT_LEAST32_MIN INT48_MIN
551*c996023fSJoseph Huber #undef __INT_LEAST32_MAX
552*c996023fSJoseph Huber #define __INT_LEAST32_MAX INT48_MAX
553*c996023fSJoseph Huber #undef __UINT_LEAST32_MAX
554*c996023fSJoseph Huber #define __UINT_LEAST32_MAX UINT48_MAX
555*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
556*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT48_MIN
557*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
558*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT48_MAX
559*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
560*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT48_MAX
561*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
562*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT48_MIN
563*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
564*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT48_MAX
565*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
566*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT48_MAX
567*c996023fSJoseph Huber 
568*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
569*c996023fSJoseph Huber #define UINT48_WIDTH 48
570*c996023fSJoseph Huber #define INT48_WIDTH UINT48_WIDTH
571*c996023fSJoseph Huber #define UINT_LEAST48_WIDTH UINT48_WIDTH
572*c996023fSJoseph Huber #define INT_LEAST48_WIDTH UINT_LEAST48_WIDTH
573*c996023fSJoseph Huber #define UINT_FAST48_WIDTH UINT48_WIDTH
574*c996023fSJoseph Huber #define INT_FAST48_WIDTH UINT_FAST48_WIDTH
575*c996023fSJoseph Huber #undef __UINT_LEAST32_WIDTH
576*c996023fSJoseph Huber #define __UINT_LEAST32_WIDTH UINT48_WIDTH
577*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
578*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT48_WIDTH
579*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
580*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT48_WIDTH
581*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
582*c996023fSJoseph Huber #endif /* __INT48_TYPE__ */
583*c996023fSJoseph Huber 
584*c996023fSJoseph Huber #ifdef __INT40_TYPE__
585*c996023fSJoseph Huber #define INT40_MAX INT40_C(549755813887)
586*c996023fSJoseph Huber #define INT40_MIN (-INT40_C(549755813887) - 1)
587*c996023fSJoseph Huber #define UINT40_MAX UINT40_C(1099511627775)
588*c996023fSJoseph Huber #define INT_LEAST40_MIN INT40_MIN
589*c996023fSJoseph Huber #define INT_LEAST40_MAX INT40_MAX
590*c996023fSJoseph Huber #define UINT_LEAST40_MAX UINT40_MAX
591*c996023fSJoseph Huber #define INT_FAST40_MIN INT40_MIN
592*c996023fSJoseph Huber #define INT_FAST40_MAX INT40_MAX
593*c996023fSJoseph Huber #define UINT_FAST40_MAX UINT40_MAX
594*c996023fSJoseph Huber 
595*c996023fSJoseph Huber #undef __INT_LEAST32_MIN
596*c996023fSJoseph Huber #define __INT_LEAST32_MIN INT40_MIN
597*c996023fSJoseph Huber #undef __INT_LEAST32_MAX
598*c996023fSJoseph Huber #define __INT_LEAST32_MAX INT40_MAX
599*c996023fSJoseph Huber #undef __UINT_LEAST32_MAX
600*c996023fSJoseph Huber #define __UINT_LEAST32_MAX UINT40_MAX
601*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
602*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT40_MIN
603*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
604*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT40_MAX
605*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
606*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT40_MAX
607*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
608*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT40_MIN
609*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
610*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT40_MAX
611*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
612*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT40_MAX
613*c996023fSJoseph Huber 
614*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
615*c996023fSJoseph Huber #define UINT40_WIDTH 40
616*c996023fSJoseph Huber #define INT40_WIDTH UINT40_WIDTH
617*c996023fSJoseph Huber #define UINT_LEAST40_WIDTH UINT40_WIDTH
618*c996023fSJoseph Huber #define INT_LEAST40_WIDTH UINT_LEAST40_WIDTH
619*c996023fSJoseph Huber #define UINT_FAST40_WIDTH UINT40_WIDTH
620*c996023fSJoseph Huber #define INT_FAST40_WIDTH UINT_FAST40_WIDTH
621*c996023fSJoseph Huber #undef __UINT_LEAST32_WIDTH
622*c996023fSJoseph Huber #define __UINT_LEAST32_WIDTH UINT40_WIDTH
623*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
624*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT40_WIDTH
625*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
626*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT40_WIDTH
627*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
628*c996023fSJoseph Huber #endif /* __INT40_TYPE__ */
629*c996023fSJoseph Huber 
630*c996023fSJoseph Huber #ifdef __INT32_TYPE__
631*c996023fSJoseph Huber #define INT32_MAX INT32_C(2147483647)
632*c996023fSJoseph Huber #define INT32_MIN (-INT32_C(2147483647) - 1)
633*c996023fSJoseph Huber #define UINT32_MAX UINT32_C(4294967295)
634*c996023fSJoseph Huber 
635*c996023fSJoseph Huber #undef __INT_LEAST32_MIN
636*c996023fSJoseph Huber #define __INT_LEAST32_MIN INT32_MIN
637*c996023fSJoseph Huber #undef __INT_LEAST32_MAX
638*c996023fSJoseph Huber #define __INT_LEAST32_MAX INT32_MAX
639*c996023fSJoseph Huber #undef __UINT_LEAST32_MAX
640*c996023fSJoseph Huber #define __UINT_LEAST32_MAX UINT32_MAX
641*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
642*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT32_MIN
643*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
644*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT32_MAX
645*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
646*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT32_MAX
647*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
648*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT32_MIN
649*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
650*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT32_MAX
651*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
652*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT32_MAX
653*c996023fSJoseph Huber 
654*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
655*c996023fSJoseph Huber #define UINT32_WIDTH 32
656*c996023fSJoseph Huber #define INT32_WIDTH UINT32_WIDTH
657*c996023fSJoseph Huber #undef __UINT_LEAST32_WIDTH
658*c996023fSJoseph Huber #define __UINT_LEAST32_WIDTH UINT32_WIDTH
659*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
660*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT32_WIDTH
661*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
662*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT32_WIDTH
663*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
664*c996023fSJoseph Huber #endif /* __INT32_TYPE__ */
665*c996023fSJoseph Huber 
666*c996023fSJoseph Huber #ifdef __INT_LEAST32_MIN
667*c996023fSJoseph Huber #define INT_LEAST32_MIN __INT_LEAST32_MIN
668*c996023fSJoseph Huber #define INT_LEAST32_MAX __INT_LEAST32_MAX
669*c996023fSJoseph Huber #define UINT_LEAST32_MAX __UINT_LEAST32_MAX
670*c996023fSJoseph Huber #define INT_FAST32_MIN __INT_LEAST32_MIN
671*c996023fSJoseph Huber #define INT_FAST32_MAX __INT_LEAST32_MAX
672*c996023fSJoseph Huber #define UINT_FAST32_MAX __UINT_LEAST32_MAX
673*c996023fSJoseph Huber 
674*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
675*c996023fSJoseph Huber #define UINT_LEAST32_WIDTH __UINT_LEAST32_WIDTH
676*c996023fSJoseph Huber #define INT_LEAST32_WIDTH UINT_LEAST32_WIDTH
677*c996023fSJoseph Huber #define UINT_FAST32_WIDTH __UINT_LEAST32_WIDTH
678*c996023fSJoseph Huber #define INT_FAST32_WIDTH UINT_FAST32_WIDTH
679*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
680*c996023fSJoseph Huber #endif /* __INT_LEAST32_MIN */
681*c996023fSJoseph Huber 
682*c996023fSJoseph Huber #ifdef __INT24_TYPE__
683*c996023fSJoseph Huber #define INT24_MAX INT24_C(8388607)
684*c996023fSJoseph Huber #define INT24_MIN (-INT24_C(8388607) - 1)
685*c996023fSJoseph Huber #define UINT24_MAX UINT24_C(16777215)
686*c996023fSJoseph Huber #define INT_LEAST24_MIN INT24_MIN
687*c996023fSJoseph Huber #define INT_LEAST24_MAX INT24_MAX
688*c996023fSJoseph Huber #define UINT_LEAST24_MAX UINT24_MAX
689*c996023fSJoseph Huber #define INT_FAST24_MIN INT24_MIN
690*c996023fSJoseph Huber #define INT_FAST24_MAX INT24_MAX
691*c996023fSJoseph Huber #define UINT_FAST24_MAX UINT24_MAX
692*c996023fSJoseph Huber 
693*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
694*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT24_MIN
695*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
696*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT24_MAX
697*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
698*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT24_MAX
699*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
700*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT24_MIN
701*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
702*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT24_MAX
703*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
704*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT24_MAX
705*c996023fSJoseph Huber 
706*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
707*c996023fSJoseph Huber #define UINT24_WIDTH 24
708*c996023fSJoseph Huber #define INT24_WIDTH UINT24_WIDTH
709*c996023fSJoseph Huber #define UINT_LEAST24_WIDTH UINT24_WIDTH
710*c996023fSJoseph Huber #define INT_LEAST24_WIDTH UINT_LEAST24_WIDTH
711*c996023fSJoseph Huber #define UINT_FAST24_WIDTH UINT24_WIDTH
712*c996023fSJoseph Huber #define INT_FAST24_WIDTH UINT_FAST24_WIDTH
713*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
714*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT24_WIDTH
715*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
716*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT24_WIDTH
717*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
718*c996023fSJoseph Huber #endif /* __INT24_TYPE__ */
719*c996023fSJoseph Huber 
720*c996023fSJoseph Huber #ifdef __INT16_TYPE__
721*c996023fSJoseph Huber #define INT16_MAX INT16_C(32767)
722*c996023fSJoseph Huber #define INT16_MIN (-INT16_C(32767) - 1)
723*c996023fSJoseph Huber #define UINT16_MAX UINT16_C(65535)
724*c996023fSJoseph Huber 
725*c996023fSJoseph Huber #undef __INT_LEAST16_MIN
726*c996023fSJoseph Huber #define __INT_LEAST16_MIN INT16_MIN
727*c996023fSJoseph Huber #undef __INT_LEAST16_MAX
728*c996023fSJoseph Huber #define __INT_LEAST16_MAX INT16_MAX
729*c996023fSJoseph Huber #undef __UINT_LEAST16_MAX
730*c996023fSJoseph Huber #define __UINT_LEAST16_MAX UINT16_MAX
731*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
732*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT16_MIN
733*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
734*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT16_MAX
735*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
736*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT16_MAX
737*c996023fSJoseph Huber 
738*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
739*c996023fSJoseph Huber #define UINT16_WIDTH 16
740*c996023fSJoseph Huber #define INT16_WIDTH UINT16_WIDTH
741*c996023fSJoseph Huber #undef __UINT_LEAST16_WIDTH
742*c996023fSJoseph Huber #define __UINT_LEAST16_WIDTH UINT16_WIDTH
743*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
744*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT16_WIDTH
745*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
746*c996023fSJoseph Huber #endif /* __INT16_TYPE__ */
747*c996023fSJoseph Huber 
748*c996023fSJoseph Huber #ifdef __INT_LEAST16_MIN
749*c996023fSJoseph Huber #define INT_LEAST16_MIN __INT_LEAST16_MIN
750*c996023fSJoseph Huber #define INT_LEAST16_MAX __INT_LEAST16_MAX
751*c996023fSJoseph Huber #define UINT_LEAST16_MAX __UINT_LEAST16_MAX
752*c996023fSJoseph Huber #define INT_FAST16_MIN __INT_LEAST16_MIN
753*c996023fSJoseph Huber #define INT_FAST16_MAX __INT_LEAST16_MAX
754*c996023fSJoseph Huber #define UINT_FAST16_MAX __UINT_LEAST16_MAX
755*c996023fSJoseph Huber 
756*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
757*c996023fSJoseph Huber #define UINT_LEAST16_WIDTH __UINT_LEAST16_WIDTH
758*c996023fSJoseph Huber #define INT_LEAST16_WIDTH UINT_LEAST16_WIDTH
759*c996023fSJoseph Huber #define UINT_FAST16_WIDTH __UINT_LEAST16_WIDTH
760*c996023fSJoseph Huber #define INT_FAST16_WIDTH UINT_FAST16_WIDTH
761*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
762*c996023fSJoseph Huber #endif /* __INT_LEAST16_MIN */
763*c996023fSJoseph Huber 
764*c996023fSJoseph Huber #ifdef __INT8_TYPE__
765*c996023fSJoseph Huber #define INT8_MAX INT8_C(127)
766*c996023fSJoseph Huber #define INT8_MIN (-INT8_C(127) - 1)
767*c996023fSJoseph Huber #define UINT8_MAX UINT8_C(255)
768*c996023fSJoseph Huber 
769*c996023fSJoseph Huber #undef __INT_LEAST8_MIN
770*c996023fSJoseph Huber #define __INT_LEAST8_MIN INT8_MIN
771*c996023fSJoseph Huber #undef __INT_LEAST8_MAX
772*c996023fSJoseph Huber #define __INT_LEAST8_MAX INT8_MAX
773*c996023fSJoseph Huber #undef __UINT_LEAST8_MAX
774*c996023fSJoseph Huber #define __UINT_LEAST8_MAX UINT8_MAX
775*c996023fSJoseph Huber 
776*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
777*c996023fSJoseph Huber #define UINT8_WIDTH 8
778*c996023fSJoseph Huber #define INT8_WIDTH UINT8_WIDTH
779*c996023fSJoseph Huber #undef __UINT_LEAST8_WIDTH
780*c996023fSJoseph Huber #define __UINT_LEAST8_WIDTH UINT8_WIDTH
781*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
782*c996023fSJoseph Huber #endif /* __INT8_TYPE__ */
783*c996023fSJoseph Huber 
784*c996023fSJoseph Huber #ifdef __INT_LEAST8_MIN
785*c996023fSJoseph Huber #define INT_LEAST8_MIN __INT_LEAST8_MIN
786*c996023fSJoseph Huber #define INT_LEAST8_MAX __INT_LEAST8_MAX
787*c996023fSJoseph Huber #define UINT_LEAST8_MAX __UINT_LEAST8_MAX
788*c996023fSJoseph Huber #define INT_FAST8_MIN __INT_LEAST8_MIN
789*c996023fSJoseph Huber #define INT_FAST8_MAX __INT_LEAST8_MAX
790*c996023fSJoseph Huber #define UINT_FAST8_MAX __UINT_LEAST8_MAX
791*c996023fSJoseph Huber 
792*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
793*c996023fSJoseph Huber #define UINT_LEAST8_WIDTH __UINT_LEAST8_WIDTH
794*c996023fSJoseph Huber #define INT_LEAST8_WIDTH UINT_LEAST8_WIDTH
795*c996023fSJoseph Huber #define UINT_FAST8_WIDTH __UINT_LEAST8_WIDTH
796*c996023fSJoseph Huber #define INT_FAST8_WIDTH UINT_FAST8_WIDTH
797*c996023fSJoseph Huber #endif /* __STDC_VERSION__ */
798*c996023fSJoseph Huber #endif /* __INT_LEAST8_MIN */
799*c996023fSJoseph Huber 
800*c996023fSJoseph Huber /* Some utility macros */
801*c996023fSJoseph Huber #define __INTN_MIN(n) __stdint_join3(INT, n, _MIN)
802*c996023fSJoseph Huber #define __INTN_MAX(n) __stdint_join3(INT, n, _MAX)
803*c996023fSJoseph Huber #define __UINTN_MAX(n) __stdint_join3(UINT, n, _MAX)
804*c996023fSJoseph Huber #define __INTN_C(n, v) __stdint_join3(INT, n, _C(v))
805*c996023fSJoseph Huber #define __UINTN_C(n, v) __stdint_join3(UINT, n, _C(v))
806*c996023fSJoseph Huber 
807*c996023fSJoseph Huber /* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */
808*c996023fSJoseph Huber /* C99 7.18.3 Limits of other integer types. */
809*c996023fSJoseph Huber 
810*c996023fSJoseph Huber #define INTPTR_MIN (-__INTPTR_MAX__ - 1)
811*c996023fSJoseph Huber #define INTPTR_MAX __INTPTR_MAX__
812*c996023fSJoseph Huber #define UINTPTR_MAX __UINTPTR_MAX__
813*c996023fSJoseph Huber #define PTRDIFF_MIN (-__PTRDIFF_MAX__ - 1)
814*c996023fSJoseph Huber #define PTRDIFF_MAX __PTRDIFF_MAX__
815*c996023fSJoseph Huber #define SIZE_MAX __SIZE_MAX__
816*c996023fSJoseph Huber 
817*c996023fSJoseph Huber /* C23 7.22.2.4 Width of integer types capable of holding object pointers. */
818*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
819*c996023fSJoseph Huber /* NB: The C standard requires that these be the same value, but the compiler
820*c996023fSJoseph Huber    exposes separate internal width macros. */
821*c996023fSJoseph Huber #define INTPTR_WIDTH __INTPTR_WIDTH__
822*c996023fSJoseph Huber #define UINTPTR_WIDTH __UINTPTR_WIDTH__
823*c996023fSJoseph Huber #endif
824*c996023fSJoseph Huber 
825*c996023fSJoseph Huber /* ISO9899:2011 7.20 (C11 Annex K): Define RSIZE_MAX if __STDC_WANT_LIB_EXT1__
826*c996023fSJoseph Huber  * is enabled. */
827*c996023fSJoseph Huber #if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
828*c996023fSJoseph Huber #define RSIZE_MAX (SIZE_MAX >> 1)
829*c996023fSJoseph Huber #endif
830*c996023fSJoseph Huber 
831*c996023fSJoseph Huber /* C99 7.18.2.5 Limits of greatest-width integer types. */
832*c996023fSJoseph Huber #define INTMAX_MIN (-__INTMAX_MAX__ - 1)
833*c996023fSJoseph Huber #define INTMAX_MAX __INTMAX_MAX__
834*c996023fSJoseph Huber #define UINTMAX_MAX __UINTMAX_MAX__
835*c996023fSJoseph Huber 
836*c996023fSJoseph Huber /* C23 7.22.2.5 Width of greatest-width integer types. */
837*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
838*c996023fSJoseph Huber /* NB: The C standard requires that these be the same value, but the compiler
839*c996023fSJoseph Huber    exposes separate internal width macros. */
840*c996023fSJoseph Huber #define INTMAX_WIDTH __INTMAX_WIDTH__
841*c996023fSJoseph Huber #define UINTMAX_WIDTH __UINTMAX_WIDTH__
842*c996023fSJoseph Huber #endif
843*c996023fSJoseph Huber 
844*c996023fSJoseph Huber /* C99 7.18.3 Limits of other integer types. */
845*c996023fSJoseph Huber #define SIG_ATOMIC_MIN __INTN_MIN(__SIG_ATOMIC_WIDTH__)
846*c996023fSJoseph Huber #define SIG_ATOMIC_MAX __INTN_MAX(__SIG_ATOMIC_WIDTH__)
847*c996023fSJoseph Huber #ifdef __WINT_UNSIGNED__
848*c996023fSJoseph Huber #define WINT_MIN __UINTN_C(__WINT_WIDTH__, 0)
849*c996023fSJoseph Huber #define WINT_MAX __UINTN_MAX(__WINT_WIDTH__)
850*c996023fSJoseph Huber #else
851*c996023fSJoseph Huber #define WINT_MIN __INTN_MIN(__WINT_WIDTH__)
852*c996023fSJoseph Huber #define WINT_MAX __INTN_MAX(__WINT_WIDTH__)
853*c996023fSJoseph Huber #endif
854*c996023fSJoseph Huber 
855*c996023fSJoseph Huber #ifndef WCHAR_MAX
856*c996023fSJoseph Huber #define WCHAR_MAX __WCHAR_MAX__
857*c996023fSJoseph Huber #endif
858*c996023fSJoseph Huber #ifndef WCHAR_MIN
859*c996023fSJoseph Huber #if __WCHAR_MAX__ == __INTN_MAX(__WCHAR_WIDTH__)
860*c996023fSJoseph Huber #define WCHAR_MIN __INTN_MIN(__WCHAR_WIDTH__)
861*c996023fSJoseph Huber #else
862*c996023fSJoseph Huber #define WCHAR_MIN __UINTN_C(__WCHAR_WIDTH__, 0)
863*c996023fSJoseph Huber #endif
864*c996023fSJoseph Huber #endif
865*c996023fSJoseph Huber 
866*c996023fSJoseph Huber /* 7.18.4.2 Macros for greatest-width integer constants. */
867*c996023fSJoseph Huber #define INTMAX_C(v) __int_c(v, __INTMAX_C_SUFFIX__)
868*c996023fSJoseph Huber #define UINTMAX_C(v) __int_c(v, __UINTMAX_C_SUFFIX__)
869*c996023fSJoseph Huber 
870*c996023fSJoseph Huber /* C23 7.22.3.x Width of other integer types. */
871*c996023fSJoseph Huber #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
872*c996023fSJoseph Huber #define PTRDIFF_WIDTH __PTRDIFF_WIDTH__
873*c996023fSJoseph Huber #define SIG_ATOMIC_WIDTH __SIG_ATOMIC_WIDTH__
874*c996023fSJoseph Huber #define SIZE_WIDTH __SIZE_WIDTH__
875*c996023fSJoseph Huber #define WCHAR_WIDTH __WCHAR_WIDTH__
876*c996023fSJoseph Huber #define WINT_WIDTH __WINT_WIDTH__
877*c996023fSJoseph Huber #endif
878*c996023fSJoseph Huber #endif // LLVM_LIBC_MACROS_STDINT_MACROS_H
879