1 /*
2  *  $Id$
3  */
4 
5 #ifndef _MACHINE__DEFAULT_TYPES_H
6 #define _MACHINE__DEFAULT_TYPES_H
7 
8 #include <sys/features.h>
9 
10 /*
11  * Guess on types by examining *_MIN / *_MAX defines.
12  */
13 #if __GNUC_PREREQ (3, 3)
14 /* GCC >= 3.3.0 has __<val>__ implicitly defined. */
15 #define __EXP(x) __##x##__
16 #else
17 /* Fall back to POSIX versions from <limits.h> */
18 #define __EXP(x) x
19 #include <limits.h>
20 #endif
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #ifdef __INT8_TYPE__
27 typedef __INT8_TYPE__ __int8_t;
28 #ifdef __UINT8_TYPE__
29 typedef __UINT8_TYPE__ __uint8_t;
30 #else
31 typedef unsigned __INT8_TYPE__ __uint8_t;
32 #endif
33 #define ___int8_t_defined 1
34 #elif __EXP(SCHAR_MAX) == 0x7f
35 typedef signed char __int8_t ;
36 typedef unsigned char __uint8_t ;
37 #define ___int8_t_defined 1
38 #endif
39 
40 #ifdef __INT16_TYPE__
41 typedef __INT16_TYPE__ __int16_t;
42 #ifdef __UINT16_TYPE__
43 typedef __UINT16_TYPE__ __uint16_t;
44 #else
45 typedef unsigned __INT16_TYPE__ __uint16_t;
46 #endif
47 #define ___int16_t_defined 1
48 #elif __EXP(INT_MAX) == 0x7fff
49 typedef signed int __int16_t;
50 typedef unsigned int __uint16_t;
51 #define ___int16_t_defined 1
52 #elif __EXP(SHRT_MAX) == 0x7fff
53 typedef signed short __int16_t;
54 typedef unsigned short __uint16_t;
55 #define ___int16_t_defined 1
56 #elif __EXP(SCHAR_MAX) == 0x7fff
57 typedef signed char __int16_t;
58 typedef unsigned char __uint16_t;
59 #define ___int16_t_defined 1
60 #endif
61 
62 #ifdef __INT32_TYPE__
63 typedef __INT32_TYPE__ __int32_t;
64 #ifdef __UINT32_TYPE__
65 typedef __UINT32_TYPE__ __uint32_t;
66 #else
67 typedef unsigned __INT32_TYPE__ __uint32_t;
68 #endif
69 #define ___int32_t_defined 1
70 #elif __EXP(INT_MAX) == 0x7fffffffL
71 typedef signed int __int32_t;
72 typedef unsigned int __uint32_t;
73 #define ___int32_t_defined 1
74 #elif __EXP(LONG_MAX) == 0x7fffffffL
75 typedef signed long __int32_t;
76 typedef unsigned long __uint32_t;
77 #define ___int32_t_defined 1
78 #elif __EXP(SHRT_MAX) == 0x7fffffffL
79 typedef signed short __int32_t;
80 typedef unsigned short __uint32_t;
81 #define ___int32_t_defined 1
82 #elif __EXP(SCHAR_MAX) == 0x7fffffffL
83 typedef signed char __int32_t;
84 typedef unsigned char __uint32_t;
85 #define ___int32_t_defined 1
86 #endif
87 
88 #ifdef __INT64_TYPE__
89 typedef __INT64_TYPE__ __int64_t;
90 #ifdef __UINT64_TYPE__
91 typedef __UINT64_TYPE__ __uint64_t;
92 #else
93 typedef unsigned __INT64_TYPE__ __uint64_t;
94 #endif
95 #define ___int64_t_defined 1
96 #elif __EXP(LONG_MAX) > 0x7fffffff
97 typedef signed long __int64_t;
98 typedef unsigned long __uint64_t;
99 #define ___int64_t_defined 1
100 
101 /* GCC has __LONG_LONG_MAX__ */
102 #elif  defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff)
103 typedef signed long long __int64_t;
104 typedef unsigned long long __uint64_t;
105 #define ___int64_t_defined 1
106 
107 /* POSIX mandates LLONG_MAX in <limits.h> */
108 #elif  defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
109 typedef signed long long __int64_t;
110 typedef unsigned long long __uint64_t;
111 #define ___int64_t_defined 1
112 
113 #elif  __EXP(INT_MAX) > 0x7fffffff
114 typedef signed int __int64_t;
115 typedef unsigned int __uint64_t;
116 #define ___int64_t_defined 1
117 #endif
118 
119 #ifdef __INT_LEAST8_TYPE__
120 typedef __INT_LEAST8_TYPE__ __int_least8_t;
121 #ifdef __UINT_LEAST8_TYPE__
122 typedef __UINT_LEAST8_TYPE__ __uint_least8_t;
123 #else
124 typedef unsigned __INT_LEAST8_TYPE__ __uint_least8_t;
125 #endif
126 #define ___int_least8_t_defined 1
127 #elif defined(___int8_t_defined)
128 typedef __int8_t __int_least8_t;
129 typedef __uint8_t __uint_least8_t;
130 #define ___int_least8_t_defined 1
131 #elif defined(___int16_t_defined)
132 typedef __int16_t __int_least8_t;
133 typedef __uint16_t __uint_least8_t;
134 #define ___int_least8_t_defined 1
135 #elif defined(___int32_t_defined)
136 typedef __int32_t __int_least8_t;
137 typedef __uint32_t __uint_least8_t;
138 #define ___int_least8_t_defined 1
139 #elif defined(___int64_t_defined)
140 typedef __int64_t __int_least8_t;
141 typedef __uint64_t __uint_least8_t;
142 #define ___int_least8_t_defined 1
143 #endif
144 
145 #ifdef __INT_LEAST16_TYPE__
146 typedef __INT_LEAST16_TYPE__ __int_least16_t;
147 #ifdef __UINT_LEAST16_TYPE__
148 typedef __UINT_LEAST16_TYPE__ __uint_least16_t;
149 #else
150 typedef unsigned __INT_LEAST16_TYPE__ __uint_least16_t;
151 #endif
152 #define ___int_least16_t_defined 1
153 #elif defined(___int16_t_defined)
154 typedef __int16_t __int_least16_t;
155 typedef __uint16_t __uint_least16_t;
156 #define ___int_least16_t_defined 1
157 #elif defined(___int32_t_defined)
158 typedef __int32_t __int_least16_t;
159 typedef __uint32_t __uint_least16_t;
160 #define ___int_least16_t_defined 1
161 #elif defined(___int64_t_defined)
162 typedef __int64_t __int_least16_t;
163 typedef __uint64_t __uint_least16_t;
164 #define ___int_least16_t_defined 1
165 #endif
166 
167 #ifdef __INT_LEAST32_TYPE__
168 typedef __INT_LEAST32_TYPE__ __int_least32_t;
169 #ifdef __UINT_LEAST32_TYPE__
170 typedef __UINT_LEAST32_TYPE__ __uint_least32_t;
171 #else
172 typedef unsigned __INT_LEAST32_TYPE__ __uint_least32_t;
173 #endif
174 #define ___int_least32_t_defined 1
175 #elif defined(___int32_t_defined)
176 typedef __int32_t __int_least32_t;
177 typedef __uint32_t __uint_least32_t;
178 #define ___int_least32_t_defined 1
179 #elif defined(___int64_t_defined)
180 typedef __int64_t __int_least32_t;
181 typedef __uint64_t __uint_least32_t;
182 #define ___int_least32_t_defined 1
183 #endif
184 
185 #ifdef __INT_LEAST64_TYPE__
186 typedef __INT_LEAST64_TYPE__ __int_least64_t;
187 #ifdef __UINT_LEAST64_TYPE__
188 typedef __UINT_LEAST64_TYPE__ __uint_least64_t;
189 #else
190 typedef unsigned __INT_LEAST64_TYPE__ __uint_least64_t;
191 #endif
192 #define ___int_least64_t_defined 1
193 #elif defined(___int64_t_defined)
194 typedef __int64_t __int_least64_t;
195 typedef __uint64_t __uint_least64_t;
196 #define ___int_least64_t_defined 1
197 #endif
198 
199 #ifdef __INTPTR_TYPE__
200 typedef __INTPTR_TYPE__ __intptr_t;
201 #ifdef __UINTPTR_TYPE__
202 typedef __UINTPTR_TYPE__ __uintptr_t;
203 #else
204 typedef unsigned __INTPTR_TYPE__ __uintptr_t;
205 #endif
206 #elif defined(__PTRDIFF_TYPE__)
207 typedef __PTRDIFF_TYPE__ __intptr_t;
208 typedef unsigned __PTRDIFF_TYPE__ __uintptr_t;
209 #else
210 typedef long __intptr_t;
211 typedef unsigned long __uintptr_t;
212 #endif
213 
214 #undef __EXP
215 
216 #ifdef __cplusplus
217 }
218 #endif
219 
220 #endif /* _MACHINE__DEFAULT_TYPES_H */
221