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