1 /* 2 * $Id: _types.h,v 1.2 2005/03/22 18:12:29 cgf Exp $ 3 */ 4 5 #ifndef _MACHINE__TYPES_H 6 #define _MACHINE__TYPES_H 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 /* 13 * Guess on types by examining *_MIN / *_MAX defines. 14 */ 15 #if defined(__GNUC__) && (__GNUC__ >= 3 ) \ 16 && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2 ) 17 /* GCC >= 3.3.0 has __<val>__ implicitly defined. */ 18 #define __EXP(x) __##x##__ 19 #else 20 /* Fall back to POSIX versions from <limits.h> */ 21 #define __EXP(x) x 22 #include <limits.h> 23 #endif 24 25 #if __EXP(SCHAR_MAX) == 0x7f 26 typedef signed char __int8_t ; 27 typedef unsigned char __uint8_t ; 28 #define ___int8_t_defined 1 29 #endif 30 31 #if __EXP(INT_MAX) == 0x7fff 32 typedef signed int __int16_t; 33 typedef unsigned int __uint16_t; 34 #define ___int16_t_defined 1 35 #elif __EXP(SHRT_MAX) == 0x7fff 36 typedef signed short __int16_t; 37 typedef unsigned short __uint16_t; 38 #define ___int16_t_defined 1 39 #elif __EXP(SCHAR_MAX) == 0x7fff 40 typedef signed char __int16_t; 41 typedef unsigned char __uint16_t; 42 #define ___int16_t_defined 1 43 #endif 44 45 #if ___int16_t_defined 46 typedef __int16_t __int_least16_t; 47 typedef __uint16_t __uint_least16_t; 48 #define ___int_least16_t_defined 1 49 50 #if !___int8_t_defined 51 typedef __int16_t __int_least8_t; 52 typedef __uint16_t __uint_least8_t; 53 #define ___int_least8_t_defined 1 54 #endif 55 #endif 56 57 #if __EXP(INT_MAX) == 0x7fffffffL 58 typedef signed int __int32_t; 59 typedef unsigned int __uint32_t; 60 #define ___int32_t_defined 1 61 #elif __EXP(LONG_MAX) == 0x7fffffffL 62 typedef signed long __int32_t; 63 typedef unsigned long __uint32_t; 64 #define ___int32_t_defined 1 65 #elif __EXP(SHRT_MAX) == 0x7fffffffL 66 typedef signed short __int32_t; 67 typedef unsigned short __uint32_t; 68 #define ___int32_t_defined 1 69 #elif __EXP(SCHAR_MAX) == 0x7fffffffL 70 typedef signed char __int32_t; 71 typedef unsigned char __uint32_t; 72 #define ___int32_t_defined 1 73 #endif 74 75 #if ___int32_t_defined 76 typedef __int32_t __int_least32_t; 77 typedef __uint32_t __uint_least32_t; 78 #define ___int_least32_t_defined 1 79 80 #if !___int8_t_defined 81 typedef __int32_t __int_least8_t; 82 typedef __uint32_t __uint_least8_t; 83 #define ___int_least8_t_defined 1 84 #endif 85 #if !___int16_t_defined 86 typedef __int32_t __int_least16_t; 87 typedef __uint32_t __uint_least16_t; 88 #define ___int_least16_t_defined 1 89 #endif 90 #endif 91 92 #if __EXP(LONG_MAX) > 0x7fffffff 93 typedef signed long __int64_t; 94 typedef unsigned long __uint64_t; 95 #define ___int64_t_defined 1 96 97 /* GCC has __LONG_LONG_MAX__ */ 98 #elif defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff) 99 typedef signed long long __int64_t; 100 typedef unsigned long long __uint64_t; 101 #define ___int64_t_defined 1 102 103 /* POSIX mandates LLONG_MAX in <limits.h> */ 104 #elif defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff) 105 typedef signed long long __int64_t; 106 typedef unsigned long long __uint64_t; 107 #define ___int64_t_defined 1 108 109 #elif __EXP(INT_MAX) > 0x7fffffff 110 typedef signed int __int64_t; 111 typedef unsigned int __uint64_t; 112 #define ___int64_t_defined 1 113 #endif 114 115 #undef __EXP 116 117 #ifdef __cplusplus 118 } 119 #endif 120 121 #endif /* _MACHINE__TYPES_H */ 122