source: trunk/libs/newlib/src/newlib/libc/include/stdint.h @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 12.1 KB
Line 
1/*
2 * Copyright (c) 2004, 2005 by
3 * Ralf Corsepius, Ulm/Germany. All rights reserved.
4 *
5 * Permission to use, copy, modify, and distribute this software
6 * is freely granted, provided that this notice is preserved.
7 */
8
9#ifndef _STDINT_H
10#define _STDINT_H
11
12#include <machine/_default_types.h>
13#include <sys/_intsup.h>
14#include <sys/_stdint.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20#ifdef ___int_least8_t_defined
21typedef __int_least8_t int_least8_t;
22typedef __uint_least8_t uint_least8_t;
23#define __int_least8_t_defined 1
24#endif
25
26#ifdef ___int_least16_t_defined
27typedef __int_least16_t int_least16_t;
28typedef __uint_least16_t uint_least16_t;
29#define __int_least16_t_defined 1
30#endif
31
32#ifdef ___int_least32_t_defined
33typedef __int_least32_t int_least32_t;
34typedef __uint_least32_t uint_least32_t;
35#define __int_least32_t_defined 1
36#endif
37
38#ifdef ___int_least64_t_defined
39typedef __int_least64_t int_least64_t;
40typedef __uint_least64_t uint_least64_t;
41#define __int_least64_t_defined 1
42#endif
43
44/*
45 * Fastest minimum-width integer types
46 *
47 * Assume int to be the fastest type for all types with a width
48 * less than __INT_MAX__ rsp. INT_MAX
49 */
50#ifdef __INT_FAST8_TYPE__
51  typedef __INT_FAST8_TYPE__ int_fast8_t;
52  typedef __UINT_FAST8_TYPE__ uint_fast8_t;
53#define __int_fast8_t_defined 1
54#elif __STDINT_EXP(INT_MAX) >= 0x7f
55  typedef signed int int_fast8_t;
56  typedef unsigned int uint_fast8_t;
57#define __int_fast8_t_defined 1
58#endif
59
60#ifdef __INT_FAST16_TYPE__
61  typedef __INT_FAST16_TYPE__ int_fast16_t;
62  typedef __UINT_FAST16_TYPE__ uint_fast16_t;
63#define __int_fast16_t_defined 1
64#elif __STDINT_EXP(INT_MAX) >= 0x7fff
65  typedef signed int int_fast16_t;
66  typedef unsigned int uint_fast16_t;
67#define __int_fast16_t_defined 1
68#endif
69
70#ifdef __INT_FAST32_TYPE__
71  typedef __INT_FAST32_TYPE__ int_fast32_t;
72  typedef __UINT_FAST32_TYPE__ uint_fast32_t;
73#define __int_fast32_t_defined 1
74#elif __STDINT_EXP(INT_MAX) >= 0x7fffffff
75  typedef signed int int_fast32_t;
76  typedef unsigned int uint_fast32_t;
77#define __int_fast32_t_defined 1
78#endif
79
80#ifdef __INT_FAST64_TYPE__
81  typedef __INT_FAST64_TYPE__ int_fast64_t;
82  typedef __UINT_FAST64_TYPE__ uint_fast64_t;
83#define __int_fast64_t_defined 1
84#elif __STDINT_EXP(INT_MAX) > 0x7fffffff
85  typedef signed int int_fast64_t;
86  typedef unsigned int uint_fast64_t;
87#define __int_fast64_t_defined 1
88#endif
89
90/*
91 * Fall back to [u]int_least<N>_t for [u]int_fast<N>_t types
92 * not having been defined, yet.
93 * Leave undefined, if [u]int_least<N>_t should not be available.
94 */
95#if !__int_fast8_t_defined
96#if __int_least8_t_defined
97  typedef int_least8_t int_fast8_t;
98  typedef uint_least8_t uint_fast8_t;
99#define __int_fast8_t_defined 1
100#endif
101#endif
102
103#if !__int_fast16_t_defined
104#if __int_least16_t_defined
105  typedef int_least16_t int_fast16_t;
106  typedef uint_least16_t uint_fast16_t;
107#define __int_fast16_t_defined 1
108#endif
109#endif
110
111#if !__int_fast32_t_defined
112#if __int_least32_t_defined
113  typedef int_least32_t int_fast32_t;
114  typedef uint_least32_t uint_fast32_t;
115#define __int_fast32_t_defined 1
116#endif
117#endif
118
119#if !__int_fast64_t_defined
120#if __int_least64_t_defined
121  typedef int_least64_t int_fast64_t;
122  typedef uint_least64_t uint_fast64_t;
123#define __int_fast64_t_defined 1
124#endif
125#endif
126
127#ifdef __INTPTR_TYPE__
128#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
129#define INTPTR_MAX (__INTPTR_MAX__)
130#define UINTPTR_MAX (__UINTPTR_MAX__)
131#elif defined(__PTRDIFF_TYPE__)
132#define INTPTR_MAX PTRDIFF_MAX
133#define INTPTR_MIN PTRDIFF_MIN
134#ifdef __UINTPTR_MAX__
135#define UINTPTR_MAX (__UINTPTR_MAX__)
136#else
137#define UINTPTR_MAX (2UL * PTRDIFF_MAX + 1)
138#endif
139#else
140/*
141 * Fallback to hardcoded values,
142 * should be valid on cpu's with 32bit int/32bit void*
143 */
144#define INTPTR_MAX (__STDINT_EXP(LONG_MAX))
145#define INTPTR_MIN (-__STDINT_EXP(LONG_MAX) - 1)
146#define UINTPTR_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)
147#endif
148
149/* Limits of Specified-Width Integer Types */
150
151#ifdef __INT8_MAX__
152#define INT8_MIN (-__INT8_MAX__ - 1)
153#define INT8_MAX (__INT8_MAX__)
154#define UINT8_MAX (__UINT8_MAX__)
155#elif defined(__int8_t_defined)
156#define INT8_MIN        (-128)
157#define INT8_MAX         (127)
158#define UINT8_MAX        (255)
159#endif
160
161#ifdef __INT_LEAST8_MAX__
162#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
163#define INT_LEAST8_MAX (__INT_LEAST8_MAX__)
164#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)
165#elif defined(__int_least8_t_defined)
166#define INT_LEAST8_MIN  (-128)
167#define INT_LEAST8_MAX   (127)
168#define UINT_LEAST8_MAX  (255)
169#else
170#error required type int_least8_t missing
171#endif
172
173#ifdef __INT16_MAX__
174#define INT16_MIN (-__INT16_MAX__ - 1)
175#define INT16_MAX (__INT16_MAX__)
176#define UINT16_MAX (__UINT16_MAX__)
177#elif defined(__int16_t_defined)
178#define INT16_MIN       (-32768)
179#define INT16_MAX        (32767)
180#define UINT16_MAX       (65535)
181#endif
182
183#ifdef __INT_LEAST16_MAX__
184#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
185#define INT_LEAST16_MAX (__INT_LEAST16_MAX__)
186#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)
187#elif defined(__int_least16_t_defined)
188#define INT_LEAST16_MIN (-32768)
189#define INT_LEAST16_MAX  (32767)
190#define UINT_LEAST16_MAX (65535)
191#else
192#error required type int_least16_t missing
193#endif
194
195#ifdef __INT32_MAX__
196#define INT32_MIN (-__INT32_MAX__ - 1)
197#define INT32_MAX (__INT32_MAX__)
198#define UINT32_MAX (__UINT32_MAX__)
199#elif defined(__int32_t_defined)
200#if defined (_INT32_EQ_LONG)
201#define INT32_MIN        (-2147483647L-1)
202#define INT32_MAX        (2147483647L)
203#define UINT32_MAX       (4294967295UL)
204#else
205#define INT32_MIN        (-2147483647-1)
206#define INT32_MAX        (2147483647)
207#define UINT32_MAX       (4294967295U)
208#endif
209#endif
210
211#ifdef __INT_LEAST32_MAX__
212#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
213#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
214#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
215#elif defined(__int_least32_t_defined)
216#if defined (_INT32_EQ_LONG)
217#define INT_LEAST32_MIN  (-2147483647L-1)
218#define INT_LEAST32_MAX  (2147483647L)
219#define UINT_LEAST32_MAX (4294967295UL)
220#else
221#define INT_LEAST32_MIN  (-2147483647-1)
222#define INT_LEAST32_MAX  (2147483647)
223#define UINT_LEAST32_MAX (4294967295U)
224#endif
225#else
226#error required type int_least32_t missing
227#endif
228
229#ifdef __INT64_MAX__
230#define INT64_MIN (-__INT64_MAX__ - 1)
231#define INT64_MAX (__INT64_MAX__)
232#define UINT64_MAX (__UINT64_MAX__)
233#elif defined(__int64_t_defined)
234#if __have_long64
235#define INT64_MIN       (-9223372036854775807L-1L)
236#define INT64_MAX        (9223372036854775807L)
237#define UINT64_MAX      (18446744073709551615U)
238#elif __have_longlong64
239#define INT64_MIN       (-9223372036854775807LL-1LL)
240#define INT64_MAX        (9223372036854775807LL)
241#define UINT64_MAX      (18446744073709551615ULL)
242#endif
243#endif
244
245#ifdef __INT_LEAST64_MAX__
246#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
247#define INT_LEAST64_MAX (__INT_LEAST64_MAX__)
248#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)
249#elif defined(__int_least64_t_defined)
250#if __have_long64
251#define INT_LEAST64_MIN  (-9223372036854775807L-1L)
252#define INT_LEAST64_MAX  (9223372036854775807L)
253#define UINT_LEAST64_MAX (18446744073709551615U)
254#elif __have_longlong64
255#define INT_LEAST64_MIN  (-9223372036854775807LL-1LL)
256#define INT_LEAST64_MAX  (9223372036854775807LL)
257#define UINT_LEAST64_MAX (18446744073709551615ULL)
258#endif
259#endif
260
261#ifdef __INT_FAST8_MAX__
262#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
263#define INT_FAST8_MAX (__INT_FAST8_MAX__)
264#define UINT_FAST8_MAX (__UINT_FAST8_MAX__)
265#elif defined(__int_fast8_t_defined)
266#if __STDINT_EXP(INT_MAX) >= 0x7f
267#define INT_FAST8_MIN   (-__STDINT_EXP(INT_MAX)-1)
268#define INT_FAST8_MAX   (__STDINT_EXP(INT_MAX))
269#define UINT_FAST8_MAX  (__STDINT_EXP(INT_MAX)*2U+1U)
270#else
271#define INT_FAST8_MIN   INT_LEAST8_MIN
272#define INT_FAST8_MAX   INT_LEAST8_MAX
273#define UINT_FAST8_MAX  UINT_LEAST8_MAX
274#endif
275#endif
276
277#ifdef __INT_FAST16_MAX__
278#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
279#define INT_FAST16_MAX (__INT_FAST16_MAX__)
280#define UINT_FAST16_MAX (__UINT_FAST16_MAX__)
281#elif defined(__int_fast16_t_defined)
282#if __STDINT_EXP(INT_MAX) >= 0x7fff
283#define INT_FAST16_MIN  (-__STDINT_EXP(INT_MAX)-1)
284#define INT_FAST16_MAX  (__STDINT_EXP(INT_MAX))
285#define UINT_FAST16_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
286#else
287#define INT_FAST16_MIN  INT_LEAST16_MIN
288#define INT_FAST16_MAX  INT_LEAST16_MAX
289#define UINT_FAST16_MAX UINT_LEAST16_MAX
290#endif
291#endif
292
293#ifdef __INT_FAST32_MAX__
294#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
295#define INT_FAST32_MAX (__INT_FAST32_MAX__)
296#define UINT_FAST32_MAX (__UINT_FAST32_MAX__)
297#elif defined(__int_fast32_t_defined)
298#if __STDINT_EXP(INT_MAX) >= 0x7fffffff
299#define INT_FAST32_MIN  (-__STDINT_EXP(INT_MAX)-1)
300#define INT_FAST32_MAX  (__STDINT_EXP(INT_MAX))
301#define UINT_FAST32_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
302#else
303#define INT_FAST32_MIN  INT_LEAST32_MIN
304#define INT_FAST32_MAX  INT_LEAST32_MAX
305#define UINT_FAST32_MAX UINT_LEAST32_MAX
306#endif
307#endif
308
309#ifdef __INT_FAST64_MAX__
310#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
311#define INT_FAST64_MAX (__INT_FAST64_MAX__)
312#define UINT_FAST64_MAX (__UINT_FAST64_MAX__)
313#elif defined(__int_fast64_t_defined)
314#if __STDINT_EXP(INT_MAX) > 0x7fffffff
315#define INT_FAST64_MIN  (-__STDINT_EXP(INT_MAX)-1)
316#define INT_FAST64_MAX  (__STDINT_EXP(INT_MAX))
317#define UINT_FAST64_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
318#else
319#define INT_FAST64_MIN  INT_LEAST64_MIN
320#define INT_FAST64_MAX  INT_LEAST64_MAX
321#define UINT_FAST64_MAX UINT_LEAST64_MAX
322#endif
323#endif
324
325#ifdef __INTMAX_MAX__
326#define INTMAX_MAX (__INTMAX_MAX__)
327#define INTMAX_MIN (-INTMAX_MAX - 1)
328#elif defined(__INTMAX_TYPE__)
329/* All relevant GCC versions prefer long to long long for intmax_t.  */
330#define INTMAX_MAX INT64_MAX
331#define INTMAX_MIN INT64_MIN
332#endif
333
334#ifdef __UINTMAX_MAX__
335#define UINTMAX_MAX (__UINTMAX_MAX__)
336#elif defined(__UINTMAX_TYPE__)
337/* All relevant GCC versions prefer long to long long for intmax_t.  */
338#define UINTMAX_MAX UINT64_MAX
339#endif
340
341/* This must match size_t in stddef.h, currently long unsigned int */
342#ifdef __SIZE_MAX__
343#define SIZE_MAX (__SIZE_MAX__)
344#else
345#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)
346#endif
347
348/* This must match sig_atomic_t in <signal.h> (currently int) */
349#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
350#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
351
352/* This must match ptrdiff_t  in <stddef.h> (currently long int) */
353#ifdef __PTRDIFF_MAX__
354#define PTRDIFF_MAX (__PTRDIFF_MAX__)
355#else
356#define PTRDIFF_MAX (__STDINT_EXP(LONG_MAX))
357#endif
358#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
359
360/* This must match definition in <wchar.h> */
361#ifndef WCHAR_MIN
362#ifdef __WCHAR_MIN__
363#define WCHAR_MIN (__WCHAR_MIN__)
364#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0)
365#define WCHAR_MIN (0 + L'\0')
366#else
367#define WCHAR_MIN (-0x7fffffff - 1 + L'\0')
368#endif
369#endif
370
371/* This must match definition in <wchar.h> */
372#ifndef WCHAR_MAX
373#ifdef __WCHAR_MAX__
374#define WCHAR_MAX (__WCHAR_MAX__)
375#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0)
376#define WCHAR_MAX (0xffffffffu + L'\0')
377#else
378#define WCHAR_MAX (0x7fffffff + L'\0')
379#endif
380#endif
381
382/* wint_t is unsigned int on almost all GCC targets.  */
383#ifdef __WINT_MAX__
384#define WINT_MAX (__WINT_MAX__)
385#else
386#define WINT_MAX (__STDINT_EXP(INT_MAX) * 2U + 1U)
387#endif
388#ifdef __WINT_MIN__
389#define WINT_MIN (__WINT_MIN__)
390#else
391#define WINT_MIN (0U)
392#endif
393
394/** Macros for minimum-width integer constant expressions */
395#ifdef __INT8_C
396#define INT8_C(x) __INT8_C(x)
397#define UINT8_C(x) __UINT8_C(x)
398#else
399#define INT8_C(x)       x
400#if __STDINT_EXP(INT_MAX) > 0x7f
401#define UINT8_C(x)      x
402#else
403#define UINT8_C(x)      x##U
404#endif
405#endif
406
407#ifdef __INT16_C
408#define INT16_C(x) __INT16_C(x)
409#define UINT16_C(x) __UINT16_C(x)
410#else
411#define INT16_C(x)      x
412#if __STDINT_EXP(INT_MAX) > 0x7fff
413#define UINT16_C(x)     x
414#else
415#define UINT16_C(x)     x##U
416#endif
417#endif
418
419#ifdef __INT32_C
420#define INT32_C(x) __INT32_C(x)
421#define UINT32_C(x) __UINT32_C(x)
422#else
423#if defined (_INT32_EQ_LONG)
424#define INT32_C(x)      x##L
425#define UINT32_C(x)     x##UL
426#else
427#define INT32_C(x)      x
428#define UINT32_C(x)     x##U
429#endif
430#endif
431
432#ifdef __INT64_C
433#define INT64_C(x) __INT64_C(x)
434#define UINT64_C(x) __UINT64_C(x)
435#else
436#if __int64_t_defined
437#if __have_long64
438#define INT64_C(x)      x##L
439#define UINT64_C(x)     x##UL
440#else
441#define INT64_C(x)      x##LL
442#define UINT64_C(x)     x##ULL
443#endif
444#endif
445#endif
446
447/** Macros for greatest-width integer constant expression */
448#ifdef __INTMAX_C
449#define INTMAX_C(x) __INTMAX_C(x)
450#define UINTMAX_C(x) __UINTMAX_C(x)
451#else
452#if __have_long64
453#define INTMAX_C(x)     x##L
454#define UINTMAX_C(x)    x##UL
455#else
456#define INTMAX_C(x)     x##LL
457#define UINTMAX_C(x)    x##ULL
458#endif
459#endif
460
461
462#ifdef __cplusplus
463}
464#endif
465
466#endif /* _STDINT_H */
Note: See TracBrowser for help on using the repository browser.