xref: /DragonOS/kernel/src/include/DragonOS/stdint.h (revision 0e0c187484281768391e131495f0655e40d70cf7)
1*0e0c1874Slogin /* Copyright (C) 1997-2022 Free Software Foundation, Inc.
2*0e0c1874Slogin    This file is part of the GNU C Library.
3*0e0c1874Slogin 
4*0e0c1874Slogin    The GNU C Library is free software; you can redistribute it and/or
5*0e0c1874Slogin    modify it under the terms of the GNU Lesser General Public
6*0e0c1874Slogin    License as published by the Free Software Foundation; either
7*0e0c1874Slogin    version 2.1 of the License, or (at your option) any later version.
8*0e0c1874Slogin 
9*0e0c1874Slogin    The GNU C Library is distributed in the hope that it will be useful,
10*0e0c1874Slogin    but WITHOUT ANY WARRANTY; without even the implied warranty of
11*0e0c1874Slogin    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*0e0c1874Slogin    Lesser General Public License for more details.
13*0e0c1874Slogin 
14*0e0c1874Slogin    You should have received a copy of the GNU Lesser General Public
15*0e0c1874Slogin    License along with the GNU C Library; if not, see
16*0e0c1874Slogin    <https://www.gnu.org/licenses/>.  */
17*0e0c1874Slogin 
18*0e0c1874Slogin /*
19*0e0c1874Slogin  *	ISO C99: 7.18 Integer types <stdint.h>
20*0e0c1874Slogin  */
21*0e0c1874Slogin 
22*0e0c1874Slogin #ifndef _STDINT_H
23*0e0c1874Slogin #define _STDINT_H	1
24*0e0c1874Slogin 
25*0e0c1874Slogin 
26*0e0c1874Slogin 
27*0e0c1874Slogin # define __WORDSIZE	64
28*0e0c1874Slogin 
29*0e0c1874Slogin /* Convenience types.  */
30*0e0c1874Slogin typedef unsigned char __u_char;
31*0e0c1874Slogin typedef unsigned short int __u_short;
32*0e0c1874Slogin typedef unsigned int __u_int;
33*0e0c1874Slogin typedef unsigned long int __u_long;
34*0e0c1874Slogin 
35*0e0c1874Slogin /* Fixed-size types, underlying types depend on word size and compiler.  */
36*0e0c1874Slogin typedef signed char __int8_t;
37*0e0c1874Slogin typedef unsigned char __uint8_t;
38*0e0c1874Slogin typedef signed short int __int16_t;
39*0e0c1874Slogin typedef unsigned short int __uint16_t;
40*0e0c1874Slogin typedef signed int __int32_t;
41*0e0c1874Slogin typedef unsigned int __uint32_t;
42*0e0c1874Slogin #if __WORDSIZE == 64
43*0e0c1874Slogin typedef signed long int __int64_t;
44*0e0c1874Slogin typedef unsigned long int __uint64_t;
45*0e0c1874Slogin #else
46*0e0c1874Slogin __extension__ typedef signed long long int __int64_t;
47*0e0c1874Slogin __extension__ typedef unsigned long long int __uint64_t;
48*0e0c1874Slogin #endif
49*0e0c1874Slogin 
50*0e0c1874Slogin /* Smallest types with at least a given width.  */
51*0e0c1874Slogin typedef __int8_t __int_least8_t;
52*0e0c1874Slogin typedef __uint8_t __uint_least8_t;
53*0e0c1874Slogin typedef __int16_t __int_least16_t;
54*0e0c1874Slogin typedef __uint16_t __uint_least16_t;
55*0e0c1874Slogin typedef __int32_t __int_least32_t;
56*0e0c1874Slogin typedef __uint32_t __uint_least32_t;
57*0e0c1874Slogin typedef __int64_t __int_least64_t;
58*0e0c1874Slogin typedef __uint64_t __uint_least64_t;
59*0e0c1874Slogin 
60*0e0c1874Slogin typedef __uint8_t uint8_t;
61*0e0c1874Slogin typedef __uint16_t uint16_t;
62*0e0c1874Slogin typedef __uint32_t uint32_t;
63*0e0c1874Slogin typedef __uint64_t uint64_t;
64*0e0c1874Slogin 
65*0e0c1874Slogin typedef __int8_t int8_t;
66*0e0c1874Slogin typedef __int16_t int16_t;
67*0e0c1874Slogin typedef __int32_t int32_t;
68*0e0c1874Slogin typedef __int64_t int64_t;
69*0e0c1874Slogin 
70*0e0c1874Slogin /* Small types.  */
71*0e0c1874Slogin 
72*0e0c1874Slogin /* Signed.  */
73*0e0c1874Slogin typedef __int_least8_t int_least8_t;
74*0e0c1874Slogin typedef __int_least16_t int_least16_t;
75*0e0c1874Slogin typedef __int_least32_t int_least32_t;
76*0e0c1874Slogin typedef __int_least64_t int_least64_t;
77*0e0c1874Slogin 
78*0e0c1874Slogin /* Unsigned.  */
79*0e0c1874Slogin typedef __uint_least8_t uint_least8_t;
80*0e0c1874Slogin typedef __uint_least16_t uint_least16_t;
81*0e0c1874Slogin typedef __uint_least32_t uint_least32_t;
82*0e0c1874Slogin typedef __uint_least64_t uint_least64_t;
83*0e0c1874Slogin 
84*0e0c1874Slogin 
85*0e0c1874Slogin /* Fast types.  */
86*0e0c1874Slogin 
87*0e0c1874Slogin /* Signed.  */
88*0e0c1874Slogin typedef signed char		int_fast8_t;
89*0e0c1874Slogin #if __WORDSIZE == 64
90*0e0c1874Slogin typedef long int		int_fast16_t;
91*0e0c1874Slogin typedef long int		int_fast32_t;
92*0e0c1874Slogin typedef long int		int_fast64_t;
93*0e0c1874Slogin #else
94*0e0c1874Slogin typedef int			int_fast16_t;
95*0e0c1874Slogin typedef int			int_fast32_t;
96*0e0c1874Slogin __extension__
97*0e0c1874Slogin typedef long long int		int_fast64_t;
98*0e0c1874Slogin #endif
99*0e0c1874Slogin 
100*0e0c1874Slogin /* Unsigned.  */
101*0e0c1874Slogin typedef unsigned char		uint_fast8_t;
102*0e0c1874Slogin #if __WORDSIZE == 64
103*0e0c1874Slogin typedef unsigned long int	uint_fast16_t;
104*0e0c1874Slogin typedef unsigned long int	uint_fast32_t;
105*0e0c1874Slogin typedef unsigned long int	uint_fast64_t;
106*0e0c1874Slogin #else
107*0e0c1874Slogin typedef unsigned int		uint_fast16_t;
108*0e0c1874Slogin typedef unsigned int		uint_fast32_t;
109*0e0c1874Slogin __extension__
110*0e0c1874Slogin typedef unsigned long long int	uint_fast64_t;
111*0e0c1874Slogin #endif
112*0e0c1874Slogin 
113*0e0c1874Slogin 
114*0e0c1874Slogin /* Types for `void *' pointers.  */
115*0e0c1874Slogin #if __WORDSIZE == 64
116*0e0c1874Slogin # ifndef __intptr_t_defined
117*0e0c1874Slogin typedef long int		intptr_t;
118*0e0c1874Slogin #  define __intptr_t_defined
119*0e0c1874Slogin # endif
120*0e0c1874Slogin typedef unsigned long int	uintptr_t;
121*0e0c1874Slogin #else
122*0e0c1874Slogin # ifndef __intptr_t_defined
123*0e0c1874Slogin typedef int			intptr_t;
124*0e0c1874Slogin #  define __intptr_t_defined
125*0e0c1874Slogin # endif
126*0e0c1874Slogin typedef unsigned int		uintptr_t;
127*0e0c1874Slogin #endif
128*0e0c1874Slogin 
129*0e0c1874Slogin /* Largest integral types.  */
130*0e0c1874Slogin #if __WORDSIZE == 64
131*0e0c1874Slogin typedef long int __intmax_t;
132*0e0c1874Slogin typedef unsigned long int __uintmax_t;
133*0e0c1874Slogin #else
134*0e0c1874Slogin __extension__ typedef long long int __intmax_t;
135*0e0c1874Slogin __extension__ typedef unsigned long long int __uintmax_t;
136*0e0c1874Slogin #endif
137*0e0c1874Slogin 
138*0e0c1874Slogin 
139*0e0c1874Slogin /* Largest integral types.  */
140*0e0c1874Slogin typedef __intmax_t		intmax_t;
141*0e0c1874Slogin typedef __uintmax_t		uintmax_t;
142*0e0c1874Slogin 
143*0e0c1874Slogin 
144*0e0c1874Slogin # if __WORDSIZE == 64
145*0e0c1874Slogin #  define __INT64_C(c)	c ## L
146*0e0c1874Slogin #  define __UINT64_C(c)	c ## UL
147*0e0c1874Slogin # else
148*0e0c1874Slogin #  define __INT64_C(c)	c ## LL
149*0e0c1874Slogin #  define __UINT64_C(c)	c ## ULL
150*0e0c1874Slogin # endif
151*0e0c1874Slogin 
152*0e0c1874Slogin /* Limits of integral types.  */
153*0e0c1874Slogin 
154*0e0c1874Slogin /* Minimum of signed integral types.  */
155*0e0c1874Slogin # define INT8_MIN		(-128)
156*0e0c1874Slogin # define INT16_MIN		(-32767-1)
157*0e0c1874Slogin # define INT32_MIN		(-2147483647-1)
158*0e0c1874Slogin # define INT64_MIN		(-__INT64_C(9223372036854775807)-1)
159*0e0c1874Slogin /* Maximum of signed integral types.  */
160*0e0c1874Slogin # define INT8_MAX		(127)
161*0e0c1874Slogin # define INT16_MAX		(32767)
162*0e0c1874Slogin # define INT32_MAX		(2147483647)
163*0e0c1874Slogin # define INT64_MAX		(__INT64_C(9223372036854775807))
164*0e0c1874Slogin 
165*0e0c1874Slogin /* Maximum of unsigned integral types.  */
166*0e0c1874Slogin # define UINT8_MAX		(255)
167*0e0c1874Slogin # define UINT16_MAX		(65535)
168*0e0c1874Slogin # define UINT32_MAX		(4294967295U)
169*0e0c1874Slogin # define UINT64_MAX		(__UINT64_C(18446744073709551615))
170*0e0c1874Slogin 
171*0e0c1874Slogin 
172*0e0c1874Slogin /* Minimum of signed integral types having a minimum size.  */
173*0e0c1874Slogin # define INT_LEAST8_MIN		(-128)
174*0e0c1874Slogin # define INT_LEAST16_MIN	(-32767-1)
175*0e0c1874Slogin # define INT_LEAST32_MIN	(-2147483647-1)
176*0e0c1874Slogin # define INT_LEAST64_MIN	(-__INT64_C(9223372036854775807)-1)
177*0e0c1874Slogin /* Maximum of signed integral types having a minimum size.  */
178*0e0c1874Slogin # define INT_LEAST8_MAX		(127)
179*0e0c1874Slogin # define INT_LEAST16_MAX	(32767)
180*0e0c1874Slogin # define INT_LEAST32_MAX	(2147483647)
181*0e0c1874Slogin # define INT_LEAST64_MAX	(__INT64_C(9223372036854775807))
182*0e0c1874Slogin 
183*0e0c1874Slogin /* Maximum of unsigned integral types having a minimum size.  */
184*0e0c1874Slogin # define UINT_LEAST8_MAX	(255)
185*0e0c1874Slogin # define UINT_LEAST16_MAX	(65535)
186*0e0c1874Slogin # define UINT_LEAST32_MAX	(4294967295U)
187*0e0c1874Slogin # define UINT_LEAST64_MAX	(__UINT64_C(18446744073709551615))
188*0e0c1874Slogin 
189*0e0c1874Slogin 
190*0e0c1874Slogin /* Minimum of fast signed integral types having a minimum size.  */
191*0e0c1874Slogin # define INT_FAST8_MIN		(-128)
192*0e0c1874Slogin # if __WORDSIZE == 64
193*0e0c1874Slogin #  define INT_FAST16_MIN	(-9223372036854775807L-1)
194*0e0c1874Slogin #  define INT_FAST32_MIN	(-9223372036854775807L-1)
195*0e0c1874Slogin # else
196*0e0c1874Slogin #  define INT_FAST16_MIN	(-2147483647-1)
197*0e0c1874Slogin #  define INT_FAST32_MIN	(-2147483647-1)
198*0e0c1874Slogin # endif
199*0e0c1874Slogin # define INT_FAST64_MIN		(-__INT64_C(9223372036854775807)-1)
200*0e0c1874Slogin /* Maximum of fast signed integral types having a minimum size.  */
201*0e0c1874Slogin # define INT_FAST8_MAX		(127)
202*0e0c1874Slogin # if __WORDSIZE == 64
203*0e0c1874Slogin #  define INT_FAST16_MAX	(9223372036854775807L)
204*0e0c1874Slogin #  define INT_FAST32_MAX	(9223372036854775807L)
205*0e0c1874Slogin # else
206*0e0c1874Slogin #  define INT_FAST16_MAX	(2147483647)
207*0e0c1874Slogin #  define INT_FAST32_MAX	(2147483647)
208*0e0c1874Slogin # endif
209*0e0c1874Slogin # define INT_FAST64_MAX		(__INT64_C(9223372036854775807))
210*0e0c1874Slogin 
211*0e0c1874Slogin /* Maximum of fast unsigned integral types having a minimum size.  */
212*0e0c1874Slogin # define UINT_FAST8_MAX		(255)
213*0e0c1874Slogin # if __WORDSIZE == 64
214*0e0c1874Slogin #  define UINT_FAST16_MAX	(18446744073709551615UL)
215*0e0c1874Slogin #  define UINT_FAST32_MAX	(18446744073709551615UL)
216*0e0c1874Slogin # else
217*0e0c1874Slogin #  define UINT_FAST16_MAX	(4294967295U)
218*0e0c1874Slogin #  define UINT_FAST32_MAX	(4294967295U)
219*0e0c1874Slogin # endif
220*0e0c1874Slogin # define UINT_FAST64_MAX	(__UINT64_C(18446744073709551615))
221*0e0c1874Slogin 
222*0e0c1874Slogin 
223*0e0c1874Slogin /* Values to test for integral types holding `void *' pointer.  */
224*0e0c1874Slogin # if __WORDSIZE == 64
225*0e0c1874Slogin #  define INTPTR_MIN		(-9223372036854775807L-1)
226*0e0c1874Slogin #  define INTPTR_MAX		(9223372036854775807L)
227*0e0c1874Slogin #  define UINTPTR_MAX		(18446744073709551615UL)
228*0e0c1874Slogin # else
229*0e0c1874Slogin #  define INTPTR_MIN		(-2147483647-1)
230*0e0c1874Slogin #  define INTPTR_MAX		(2147483647)
231*0e0c1874Slogin #  define UINTPTR_MAX		(4294967295U)
232*0e0c1874Slogin # endif
233*0e0c1874Slogin 
234*0e0c1874Slogin 
235*0e0c1874Slogin /* Minimum for largest signed integral type.  */
236*0e0c1874Slogin # define INTMAX_MIN		(-__INT64_C(9223372036854775807)-1)
237*0e0c1874Slogin /* Maximum for largest signed integral type.  */
238*0e0c1874Slogin # define INTMAX_MAX		(__INT64_C(9223372036854775807))
239*0e0c1874Slogin 
240*0e0c1874Slogin /* Maximum for largest unsigned integral type.  */
241*0e0c1874Slogin # define UINTMAX_MAX		(__UINT64_C(18446744073709551615))
242*0e0c1874Slogin 
243*0e0c1874Slogin 
244*0e0c1874Slogin /* Limits of other integer types.  */
245*0e0c1874Slogin 
246*0e0c1874Slogin /* Limits of `ptrdiff_t' type.  */
247*0e0c1874Slogin # if __WORDSIZE == 64
248*0e0c1874Slogin #  define PTRDIFF_MIN		(-9223372036854775807L-1)
249*0e0c1874Slogin #  define PTRDIFF_MAX		(9223372036854775807L)
250*0e0c1874Slogin # else
251*0e0c1874Slogin #  if __WORDSIZE32_PTRDIFF_LONG
252*0e0c1874Slogin #   define PTRDIFF_MIN		(-2147483647L-1)
253*0e0c1874Slogin #   define PTRDIFF_MAX		(2147483647L)
254*0e0c1874Slogin #  else
255*0e0c1874Slogin #   define PTRDIFF_MIN		(-2147483647-1)
256*0e0c1874Slogin #   define PTRDIFF_MAX		(2147483647)
257*0e0c1874Slogin #  endif
258*0e0c1874Slogin # endif
259*0e0c1874Slogin 
260*0e0c1874Slogin /* Limits of `sig_atomic_t'.  */
261*0e0c1874Slogin # define SIG_ATOMIC_MIN		(-2147483647-1)
262*0e0c1874Slogin # define SIG_ATOMIC_MAX		(2147483647)
263*0e0c1874Slogin 
264*0e0c1874Slogin /* Limit of `size_t' type.  */
265*0e0c1874Slogin # if __WORDSIZE == 64
266*0e0c1874Slogin #  define SIZE_MAX		(18446744073709551615UL)
267*0e0c1874Slogin # else
268*0e0c1874Slogin #  if __WORDSIZE32_SIZE_ULONG
269*0e0c1874Slogin #   define SIZE_MAX		(4294967295UL)
270*0e0c1874Slogin #  else
271*0e0c1874Slogin #   define SIZE_MAX		(4294967295U)
272*0e0c1874Slogin #  endif
273*0e0c1874Slogin # endif
274*0e0c1874Slogin 
275*0e0c1874Slogin /* Limits of `wchar_t'.  */
276*0e0c1874Slogin # ifndef WCHAR_MIN
277*0e0c1874Slogin /* These constants might also be defined in <wchar.h>.  */
278*0e0c1874Slogin #  define WCHAR_MIN		__WCHAR_MIN
279*0e0c1874Slogin #  define WCHAR_MAX		__WCHAR_MAX
280*0e0c1874Slogin # endif
281*0e0c1874Slogin 
282*0e0c1874Slogin /* Limits of `wint_t'.  */
283*0e0c1874Slogin # define WINT_MIN		(0u)
284*0e0c1874Slogin # define WINT_MAX		(4294967295u)
285*0e0c1874Slogin 
286*0e0c1874Slogin /* Signed.  */
287*0e0c1874Slogin # define INT8_C(c)	c
288*0e0c1874Slogin # define INT16_C(c)	c
289*0e0c1874Slogin # define INT32_C(c)	c
290*0e0c1874Slogin # if __WORDSIZE == 64
291*0e0c1874Slogin #  define INT64_C(c)	c ## L
292*0e0c1874Slogin # else
293*0e0c1874Slogin #  define INT64_C(c)	c ## LL
294*0e0c1874Slogin # endif
295*0e0c1874Slogin 
296*0e0c1874Slogin /* Unsigned.  */
297*0e0c1874Slogin # define UINT8_C(c)	c
298*0e0c1874Slogin # define UINT16_C(c)	c
299*0e0c1874Slogin # define UINT32_C(c)	c ## U
300*0e0c1874Slogin # if __WORDSIZE == 64
301*0e0c1874Slogin #  define UINT64_C(c)	c ## UL
302*0e0c1874Slogin # else
303*0e0c1874Slogin #  define UINT64_C(c)	c ## ULL
304*0e0c1874Slogin # endif
305*0e0c1874Slogin 
306*0e0c1874Slogin /* Maximal type.  */
307*0e0c1874Slogin # if __WORDSIZE == 64
308*0e0c1874Slogin #  define INTMAX_C(c)	c ## L
309*0e0c1874Slogin #  define UINTMAX_C(c)	c ## UL
310*0e0c1874Slogin # else
311*0e0c1874Slogin #  define INTMAX_C(c)	c ## LL
312*0e0c1874Slogin #  define UINTMAX_C(c)	c ## ULL
313*0e0c1874Slogin # endif
314*0e0c1874Slogin 
315*0e0c1874Slogin 
316*0e0c1874Slogin #endif /* stdint.h */