xref: /optee_os/lib/libutils/isoc/include/stdint.h (revision 1f60363a2157d404764a700e960fb227dfb960f2)
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  * with the exception of:
32b0104773SPascal Brand  * o Minimum-width integer types
33b0104773SPascal Brand  * o Fastest minimum-width integer types
34b0104773SPascal Brand  * o Geatest-width integer types
35b0104773SPascal Brand  */
36b0104773SPascal Brand 
37b0104773SPascal Brand #ifndef STDINT_H
38b0104773SPascal Brand #define STDINT_H
39b0104773SPascal Brand #define _STDINT_H
40b0104773SPascal Brand 
41*1f60363aSJens Wiklander /*
42*1f60363aSJens Wiklander  * If compiler supplies neither __ILP32__ or __LP64__, try to figure it out
43*1f60363aSJens Wiklander  * here.
44*1f60363aSJens Wiklander  */
45*1f60363aSJens Wiklander #if !defined(__ILP32__) && !defined(__LP64__)
46*1f60363aSJens Wiklander #if defined(__SIZEOF_INT__) && defined(__SIZEOF_POINTER__) && \
47*1f60363aSJens Wiklander 	defined(__SIZEOF_LONG__)
48*1f60363aSJens Wiklander #if __SIZEOF_INT__ == 4 && __SIZEOF_POINTER__ == 4 && __SIZEOF_LONG__ == 4
49*1f60363aSJens Wiklander #define __ILP32__ 1
50*1f60363aSJens Wiklander #endif
51*1f60363aSJens Wiklander #if __SIZEOF_INT__ == 4 && __SIZEOF_POINTER__ == 8 && __SIZEOF_LONG__ == 8
52*1f60363aSJens Wiklander #define __LP64__ 1
53*1f60363aSJens Wiklander #endif
54*1f60363aSJens Wiklander #endif
55*1f60363aSJens Wiklander #endif /* !defined(__ILP32__) && !defined(__LP64__) */
56*1f60363aSJens Wiklander 
57*1f60363aSJens Wiklander #if !defined(__ILP32__) && !defined(__LP64__)
58*1f60363aSJens Wiklander #error Neither __ILP32__ nor __LP64__ is defined
59*1f60363aSJens Wiklander #endif
60*1f60363aSJens Wiklander 
61b0104773SPascal Brand /* 7.18.1.1 Exact-width interger types */
62b0104773SPascal Brand #ifndef __int8_t_defined
63b0104773SPascal Brand # define __int8_t_defined
64b0104773SPascal Brand typedef signed char             int8_t;
65b0104773SPascal Brand typedef short int               int16_t;
66b0104773SPascal Brand typedef int                     int32_t;
67*1f60363aSJens Wiklander #ifdef __ILP32__
68b0104773SPascal Brand __extension__
69b0104773SPascal Brand typedef long long int           int64_t;
70*1f60363aSJens Wiklander #endif /*__ILP32__*/
71*1f60363aSJens Wiklander #ifdef __LP64__
72*1f60363aSJens Wiklander typedef long int		int64_t;
73*1f60363aSJens Wiklander #endif /*__LP64__*/
74b0104773SPascal Brand #endif
75b0104773SPascal Brand 
76b0104773SPascal Brand /* Unsigned.  */
77b0104773SPascal Brand typedef unsigned char           uint8_t;
78b0104773SPascal Brand typedef unsigned short int      uint16_t;
79b0104773SPascal Brand #ifndef __uint32_t_defined
80b0104773SPascal Brand typedef unsigned int            uint32_t;
81b0104773SPascal Brand # define __uint32_t_defined
82b0104773SPascal Brand #endif
83*1f60363aSJens Wiklander #ifdef __ILP32__
84b0104773SPascal Brand __extension__
85b0104773SPascal Brand typedef unsigned long long int  uint64_t;
86*1f60363aSJens Wiklander #endif /*__ILP32__*/
87*1f60363aSJens Wiklander #ifdef __LP64__
88*1f60363aSJens Wiklander typedef unsigned long int	uint64_t;
89*1f60363aSJens Wiklander #endif /*__LP64__*/
90b0104773SPascal Brand 
91b0104773SPascal Brand /* 7.18.1.4 Integer types capable of holding object pointers */
92*1f60363aSJens Wiklander typedef long intptr_t;
93*1f60363aSJens Wiklander typedef unsigned long uintptr_t;
94b0104773SPascal Brand 
95*1f60363aSJens Wiklander typedef int64_t intmax_t;
96*1f60363aSJens Wiklander typedef uint64_t uintmax_t;
97b0104773SPascal Brand 
98b0104773SPascal Brand /*
99b0104773SPascal Brand  * 7.18.2 Limits of specified-width integer types
100b0104773SPascal Brand  */
101b0104773SPascal Brand 
102b0104773SPascal Brand /* 7.18.2.1 Limits of exact-width interger types */
103b0104773SPascal Brand 
104b0104773SPascal Brand #define INT8_MIN    (-0x7f-1)
105b0104773SPascal Brand #define INT16_MIN   (-0x7fff-1)
106b0104773SPascal Brand #define INT32_MIN   (-0x7fffffff-1)
107b0104773SPascal Brand #define INT64_MIN   (-0x7fffffffffffffffL-1)
108b0104773SPascal Brand 
109b0104773SPascal Brand #define INT8_MAX    0x7f
110b0104773SPascal Brand #define INT16_MAX   0x7fff
111b0104773SPascal Brand #define INT32_MAX   0x7fffffff
112b0104773SPascal Brand #define INT64_MAX   0x7fffffffffffffffL
113b0104773SPascal Brand 
114b0104773SPascal Brand #define UINT8_MAX    0xff
115b0104773SPascal Brand #define UINT16_MAX   0xffff
116b0104773SPascal Brand #define UINT32_MAX   0xffffffffU
117b0104773SPascal Brand #define UINT64_MAX   0xffffffffffffffffUL
118b0104773SPascal Brand 
119b0104773SPascal Brand /* 7.18.2.4 Limits of integer types capable of holding object pointers */
120b0104773SPascal Brand 
121*1f60363aSJens Wiklander #define INTPTR_MIN  LONG_MIN
122*1f60363aSJens Wiklander #define INTPTR_MAX  LONG_MAX
123*1f60363aSJens Wiklander #define UINTPTR_MAX ULONG_MAX
124*1f60363aSJens Wiklander 
125*1f60363aSJens Wiklander #define INTMAX_MAX  INT64_MAX
126*1f60363aSJens Wiklander #define INTMAX_MIN  INT64_MIN
127*1f60363aSJens Wiklander #define UINTMAX_MAX UINT64_MAX
128b0104773SPascal Brand 
129b0104773SPascal Brand #endif /* STDINT_H */
130