xref: /optee_os/lib/libutils/isoc/include/stdint.h (revision 4c1908d3bf80595e998583826f1003ed0e45bf4b)
1b0104773SPascal Brand /*
2b0104773SPascal Brand  * Copyright (c) 2014, STMicroelectronics International N.V.
3b0104773SPascal Brand  * All rights reserved.
4b0104773SPascal Brand  *
5b0104773SPascal Brand  * Redistribution and use in source and binary forms, with or without
6b0104773SPascal Brand  * modification, are permitted provided that the following conditions are met:
7b0104773SPascal Brand  *
8b0104773SPascal Brand  * 1. Redistributions of source code must retain the above copyright notice,
9b0104773SPascal Brand  * this list of conditions and the following disclaimer.
10b0104773SPascal Brand  *
11b0104773SPascal Brand  * 2. Redistributions in binary form must reproduce the above copyright notice,
12b0104773SPascal Brand  * this list of conditions and the following disclaimer in the documentation
13b0104773SPascal Brand  * and/or other materials provided with the distribution.
14b0104773SPascal Brand  *
15b0104773SPascal Brand  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16b0104773SPascal Brand  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17b0104773SPascal Brand  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18b0104773SPascal Brand  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19b0104773SPascal Brand  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20b0104773SPascal Brand  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21b0104773SPascal Brand  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22b0104773SPascal Brand  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23b0104773SPascal Brand  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24b0104773SPascal Brand  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25b0104773SPascal Brand  * POSSIBILITY OF SUCH DAMAGE.
26b0104773SPascal Brand  */
27b0104773SPascal Brand 
28b0104773SPascal Brand /*
29b0104773SPascal Brand  * This file provides what C99 standard requires in
30b0104773SPascal Brand  * 7.18 interger types <stdint.h>
31b0104773SPascal Brand  */
32b0104773SPascal Brand 
33b0104773SPascal Brand #ifndef STDINT_H
34b0104773SPascal Brand #define STDINT_H
35b0104773SPascal Brand #define _STDINT_H
36b0104773SPascal Brand 
371f60363aSJens Wiklander /*
381f60363aSJens Wiklander  * If compiler supplies neither __ILP32__ or __LP64__, try to figure it out
391f60363aSJens Wiklander  * here.
401f60363aSJens Wiklander  */
411f60363aSJens Wiklander #if !defined(__ILP32__) && !defined(__LP64__)
421f60363aSJens Wiklander #if defined(__SIZEOF_INT__) && defined(__SIZEOF_POINTER__) && \
431f60363aSJens Wiklander 	defined(__SIZEOF_LONG__)
441f60363aSJens Wiklander #if __SIZEOF_INT__ == 4 && __SIZEOF_POINTER__ == 4 && __SIZEOF_LONG__ == 4
451f60363aSJens Wiklander #define __ILP32__ 1
461f60363aSJens Wiklander #endif
471f60363aSJens Wiklander #if __SIZEOF_INT__ == 4 && __SIZEOF_POINTER__ == 8 && __SIZEOF_LONG__ == 8
481f60363aSJens Wiklander #define __LP64__ 1
491f60363aSJens Wiklander #endif
501f60363aSJens Wiklander #endif
511f60363aSJens Wiklander #endif /* !defined(__ILP32__) && !defined(__LP64__) */
521f60363aSJens Wiklander 
531f60363aSJens Wiklander #if !defined(__ILP32__) && !defined(__LP64__)
541f60363aSJens Wiklander #error Neither __ILP32__ nor __LP64__ is defined
551f60363aSJens Wiklander #endif
561f60363aSJens Wiklander 
57b0104773SPascal Brand /* 7.18.1.1 Exact-width interger types */
58b0104773SPascal Brand #ifndef __int8_t_defined
59b0104773SPascal Brand # define __int8_t_defined
60b0104773SPascal Brand typedef signed char             int8_t;
61b0104773SPascal Brand typedef short int               int16_t;
62b0104773SPascal Brand typedef int                     int32_t;
631f60363aSJens Wiklander #ifdef __ILP32__
64b0104773SPascal Brand __extension__
65b0104773SPascal Brand typedef long long int           int64_t;
661f60363aSJens Wiklander #endif /*__ILP32__*/
671f60363aSJens Wiklander #ifdef __LP64__
681f60363aSJens Wiklander typedef long int		int64_t;
691f60363aSJens Wiklander #endif /*__LP64__*/
70b0104773SPascal Brand #endif
71b0104773SPascal Brand 
72b0104773SPascal Brand /* Unsigned.  */
73b0104773SPascal Brand typedef unsigned char           uint8_t;
74b0104773SPascal Brand typedef unsigned short int      uint16_t;
75b0104773SPascal Brand #ifndef __uint32_t_defined
76b0104773SPascal Brand typedef unsigned int            uint32_t;
77b0104773SPascal Brand # define __uint32_t_defined
78b0104773SPascal Brand #endif
791f60363aSJens Wiklander #ifdef __ILP32__
80b0104773SPascal Brand __extension__
81b0104773SPascal Brand typedef unsigned long long int  uint64_t;
821f60363aSJens Wiklander #endif /*__ILP32__*/
831f60363aSJens Wiklander #ifdef __LP64__
841f60363aSJens Wiklander typedef unsigned long int	uint64_t;
851f60363aSJens Wiklander #endif /*__LP64__*/
86b0104773SPascal Brand 
87*4c1908d3SJens Wiklander /* 7.18.1.2 Minimum-width integer types */
88*4c1908d3SJens Wiklander typedef int8_t int_least8_t;
89*4c1908d3SJens Wiklander typedef int16_t int_least16_t;
90*4c1908d3SJens Wiklander typedef int32_t int_least32_t;
91*4c1908d3SJens Wiklander typedef int64_t int_least64_t;
92*4c1908d3SJens Wiklander typedef uint8_t uint_least8_t;
93*4c1908d3SJens Wiklander typedef uint16_t uint_least16_t;
94*4c1908d3SJens Wiklander typedef uint32_t uint_least32_t;
95*4c1908d3SJens Wiklander typedef uint64_t uint_least64_t;
96*4c1908d3SJens Wiklander 
97*4c1908d3SJens Wiklander /* 7.18.1.3 Fastest minimum-width integer types */
98*4c1908d3SJens Wiklander typedef int8_t int_fast8_t;
99*4c1908d3SJens Wiklander typedef int16_t int_fast16_t;
100*4c1908d3SJens Wiklander typedef int32_t int_fast32_t;
101*4c1908d3SJens Wiklander typedef int64_t int_fast64_t;
102*4c1908d3SJens Wiklander typedef uint8_t uint_fast8_t;
103*4c1908d3SJens Wiklander typedef uint16_t uint_fast16_t;
104*4c1908d3SJens Wiklander typedef uint32_t uint_fast32_t;
105*4c1908d3SJens Wiklander typedef uint64_t uint_fast64_t;
106*4c1908d3SJens Wiklander 
107b0104773SPascal Brand /* 7.18.1.4 Integer types capable of holding object pointers */
1081f60363aSJens Wiklander typedef long intptr_t;
1091f60363aSJens Wiklander typedef unsigned long uintptr_t;
110b0104773SPascal Brand 
1111f60363aSJens Wiklander typedef int64_t intmax_t;
1121f60363aSJens Wiklander typedef uint64_t uintmax_t;
113b0104773SPascal Brand 
114b0104773SPascal Brand /*
115b0104773SPascal Brand  * 7.18.2 Limits of specified-width integer types
116b0104773SPascal Brand  */
117b0104773SPascal Brand 
118b0104773SPascal Brand /* 7.18.2.1 Limits of exact-width interger types */
119b0104773SPascal Brand 
120b0104773SPascal Brand #define INT8_MIN    (-0x7f-1)
121b0104773SPascal Brand #define INT16_MIN   (-0x7fff-1)
122b0104773SPascal Brand #define INT32_MIN   (-0x7fffffff-1)
123b0104773SPascal Brand #define INT64_MIN   (-0x7fffffffffffffffL-1)
124b0104773SPascal Brand 
125b0104773SPascal Brand #define INT8_MAX    0x7f
126b0104773SPascal Brand #define INT16_MAX   0x7fff
127b0104773SPascal Brand #define INT32_MAX   0x7fffffff
128b0104773SPascal Brand #define INT64_MAX   0x7fffffffffffffffL
129b0104773SPascal Brand 
130b0104773SPascal Brand #define UINT8_MAX    0xff
131b0104773SPascal Brand #define UINT16_MAX   0xffff
132b0104773SPascal Brand #define UINT32_MAX   0xffffffffU
133b0104773SPascal Brand #define UINT64_MAX   0xffffffffffffffffUL
134b0104773SPascal Brand 
135*4c1908d3SJens Wiklander /* 7.18.2.2 Limits of minimum-width integer types */
136*4c1908d3SJens Wiklander 
137*4c1908d3SJens Wiklander #define INT_LEAST8_MIN		INT8_MIN
138*4c1908d3SJens Wiklander #define INT_LEAST16_MIN		INT16_MIN
139*4c1908d3SJens Wiklander #define INT_LEAST32_MIN		INT32_MIN
140*4c1908d3SJens Wiklander #define INT_LEAST64_MIN		INT64_MIN
141*4c1908d3SJens Wiklander 
142*4c1908d3SJens Wiklander #define INT_LEAST8_MAX		INT8_MAX
143*4c1908d3SJens Wiklander #define INT_LEAST16_MAX		INT16_MAX
144*4c1908d3SJens Wiklander #define INT_LEAST32_MAX		INT32_MAX
145*4c1908d3SJens Wiklander #define INT_LEAST64_MAX		INT64_MAX
146*4c1908d3SJens Wiklander 
147*4c1908d3SJens Wiklander #define UINT_LEAST8_MAX		UINT8_MAX
148*4c1908d3SJens Wiklander #define UINT_LEAST16_MAX	UINT16_MAX
149*4c1908d3SJens Wiklander #define UINT_LEAST32_MAX	UINT32_MAX
150*4c1908d3SJens Wiklander #define UINT_LEAST64_MAX	UINT64_MAX
151*4c1908d3SJens Wiklander 
152*4c1908d3SJens Wiklander /* 7.18.2.3 Limits of fastest minimum-width integer types */
153*4c1908d3SJens Wiklander 
154*4c1908d3SJens Wiklander #define INT_FAST8_MIN		INT8_MIN
155*4c1908d3SJens Wiklander #define INT_FAST16_MIN		INT16_MIN
156*4c1908d3SJens Wiklander #define INT_FAST32_MIN		INT32_MIN
157*4c1908d3SJens Wiklander #define INT_FAST64_MIN		INT64_MIN
158*4c1908d3SJens Wiklander 
159*4c1908d3SJens Wiklander #define INT_FAST8_MAX		INT8_MAX
160*4c1908d3SJens Wiklander #define INT_FAST16_MAX		INT16_MAX
161*4c1908d3SJens Wiklander #define INT_FAST32_MAX		INT32_MAX
162*4c1908d3SJens Wiklander #define INT_FAST64_MAX		INT64_MAX
163*4c1908d3SJens Wiklander 
164*4c1908d3SJens Wiklander #define UINT_FAST8_MAX		UINT8_MAX
165*4c1908d3SJens Wiklander #define UINT_FAST16_MAX		UINT16_MAX
166*4c1908d3SJens Wiklander #define UINT_FAST32_MAX		UINT32_MAX
167*4c1908d3SJens Wiklander #define UINT_FAST64_MAX		UINT64_MAX
168*4c1908d3SJens Wiklander 
169b0104773SPascal Brand /* 7.18.2.4 Limits of integer types capable of holding object pointers */
170b0104773SPascal Brand 
1711f60363aSJens Wiklander #define INTPTR_MIN  LONG_MIN
1721f60363aSJens Wiklander #define INTPTR_MAX  LONG_MAX
1731f60363aSJens Wiklander #define UINTPTR_MAX ULONG_MAX
1741f60363aSJens Wiklander 
1751f60363aSJens Wiklander #define INTMAX_MAX  INT64_MAX
1761f60363aSJens Wiklander #define INTMAX_MIN  INT64_MIN
1771f60363aSJens Wiklander #define UINTMAX_MAX UINT64_MAX
178b0104773SPascal Brand 
179*4c1908d3SJens Wiklander /*
180*4c1908d3SJens Wiklander  * 7.18.4 Macros for integer constants
181*4c1908d3SJens Wiklander  */
182*4c1908d3SJens Wiklander 
183*4c1908d3SJens Wiklander /* 7.18.4.1 Macros for minimum-width integer constants */
184*4c1908d3SJens Wiklander 
185*4c1908d3SJens Wiklander #define INT8_C(v)	v
186*4c1908d3SJens Wiklander #define UINT8_C(v)	v
187*4c1908d3SJens Wiklander #define INT16_C(v)	v
188*4c1908d3SJens Wiklander #define UINT16_C(v)	v
189*4c1908d3SJens Wiklander #define INT32_C(v)	v
190*4c1908d3SJens Wiklander #define UINT32_C(v)	v ## U
191*4c1908d3SJens Wiklander #ifdef __ILP32__
192*4c1908d3SJens Wiklander #define INT64_C(v)	v ## LL
193*4c1908d3SJens Wiklander #define UINT64_C(v)	v ## ULL
194*4c1908d3SJens Wiklander #endif
195*4c1908d3SJens Wiklander #ifdef __LP64__
196*4c1908d3SJens Wiklander #define INT64_C(v)	v ## L
197*4c1908d3SJens Wiklander #define UINT64_C(v)	v ## UL
198*4c1908d3SJens Wiklander #endif
199*4c1908d3SJens Wiklander 
200*4c1908d3SJens Wiklander /* 7.18.4.2 Macros for greatest-width integer constants */
201*4c1908d3SJens Wiklander 
202*4c1908d3SJens Wiklander #define INTMAX_C(v)	INT64_C(v)
203*4c1908d3SJens Wiklander #define UINTMAX_C(v)	UINT64_C(v)
204*4c1908d3SJens Wiklander 
205*4c1908d3SJens Wiklander 
206b0104773SPascal Brand #endif /* STDINT_H */
207