| /* |
| * Copyright (c) 2004, 2005 by |
| * Ralf Corsepius, Ulm/Germany. All rights reserved. |
| * |
| * Permission to use, copy, modify, and distribute this software |
| * is freely granted, provided that this notice is preserved. |
| */ |
| |
| #ifndef _SYS__INTSUP_H |
| #define _SYS__INTSUP_H |
| |
| #include <sys/features.h> |
| |
| #if __GNUC_PREREQ (3, 2) |
| /* gcc > 3.2 implicitly defines the values we are interested */ |
| #define __STDINT_EXP(x) __##x##__ |
| #else |
| #define __STDINT_EXP(x) x |
| #include <limits.h> |
| #endif |
| |
| /* Determine how intptr_t and intN_t fastN_t and leastN_t are defined by gcc |
| for this target. This is used to determine the correct printf() constant in |
| inttypes.h and other constants in stdint.h. |
| So we end up with |
| ?(signed|unsigned) char == 0 |
| ?(signed|unsigned) short == 1 |
| ?(signed|unsigned) int == 2 |
| ?(signed|unsigned) short int == 3 |
| ?(signed|unsigned) long == 4 |
| ?(signed|unsigned) long int == 6 |
| ?(signed|unsigned) long long == 8 |
| ?(signed|unsigned) long long int == 10 |
| */ |
| #pragma push_macro("signed") |
| #pragma push_macro("unsigned") |
| #pragma push_macro("char") |
| #pragma push_macro("short") |
| #pragma push_macro("__int20") |
| #pragma push_macro("__int20__") |
| #pragma push_macro("int") |
| #pragma push_macro("long") |
| #undef signed |
| #undef unsigned |
| #undef char |
| #undef short |
| #undef int |
| #undef __int20 |
| #undef __int20__ |
| #undef long |
| #define signed +0 |
| #define unsigned +0 |
| #define char +0 |
| #define short +1 |
| #define __int20 +2 |
| #define __int20__ +2 |
| #define int +2 |
| #define long +4 |
| #if (__INTPTR_TYPE__ == 8 || __INTPTR_TYPE__ == 10) |
| #define _INTPTR_EQ_LONGLONG |
| #elif (__INTPTR_TYPE__ == 4 || __INTPTR_TYPE__ == 6) |
| #define _INTPTR_EQ_LONG |
| /* Note - the tests for _INTPTR_EQ_INT and _INTPTR_EQ_SHORT are currently |
| redundant as the values are not used. But one day they may be needed |
| and so the tests remain. */ |
| #elif __INTPTR_TYPE__ == 2 |
| #define _INTPTR_EQ_INT |
| #elif (__INTPTR_TYPE__ == 1 || __INTPTR_TYPE__ == 3) |
| #define _INTPTR_EQ_SHORT |
| #else |
| #error "Unable to determine type definition of intptr_t" |
| #endif |
| #if (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6) |
| #define _INT32_EQ_LONG |
| #elif __INT32_TYPE__ == 2 |
| /* Nothing to define because int32_t is safe to print as an int. */ |
| #else |
| #error "Unable to determine type definition of int32_t" |
| #endif |
| |
| #if (__INT8_TYPE__ == 0) |
| #define __INT8 "hh" |
| #elif (__INT8_TYPE__ == 1 || __INT8_TYPE__ == 3) |
| #define __INT8 "h" |
| #elif (__INT8_TYPE__ == 2) |
| #define __INT8 |
| #elif (__INT8_TYPE__ == 4 || __INT8_TYPE__ == 6) |
| #define __INT8 "l" |
| #elif (__INT8_TYPE__ == 8 || __INT8_TYPE__ == 10) |
| #define __INT8 "ll" |
| #endif |
| #if (__INT16_TYPE__ == 1 || __INT16_TYPE__ == 3) |
| #define __INT16 "h" |
| #elif (__INT16_TYPE__ == 2) |
| #define __INT16 |
| #elif (__INT16_TYPE__ == 4 || __INT16_TYPE__ == 6) |
| #define __INT16 "l" |
| #elif (__INT16_TYPE__ == 8 || __INT16_TYPE__ == 10) |
| #define __INT16 "ll" |
| #endif |
| #if (__INT32_TYPE__ == 2) |
| #define __INT32 |
| #elif (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6) |
| #define __INT32 "l" |
| #elif (__INT32_TYPE__ == 8 || __INT32_TYPE__ == 10) |
| #define __INT32 "ll" |
| #endif |
| #if (__INT64_TYPE__ == 2) |
| #define __INT64 |
| #elif (__INT64_TYPE__ == 4 || __INT64_TYPE__ == 6) |
| #define __INT64 "l" |
| #elif (__INT64_TYPE__ == 8 || __INT64_TYPE__ == 10) |
| #define __INT64 "ll" |
| #endif |
| #if (__INT_FAST8_TYPE__ == 0) |
| #define __FAST8 "hh" |
| #elif (__INT_FAST8_TYPE__ == 1 || __INT_FAST8_TYPE__ == 3) |
| #define __FAST8 "h" |
| #elif (__INT_FAST8_TYPE__ == 2) |
| #define __FAST8 |
| #elif (__INT_FAST8_TYPE__ == 4 || __INT_FAST8_TYPE__ == 6) |
| #define __FAST8 "l" |
| #elif (__INT_FAST8_TYPE__ == 8 || __INT_FAST8_TYPE__ == 10) |
| #define __FAST8 "ll" |
| #endif |
| #if (__INT_FAST16_TYPE__ == 1 || __INT_FAST16_TYPE__ == 3) |
| #define __FAST16 "h" |
| #elif (__INT_FAST16_TYPE__ == 2) |
| #define __FAST16 |
| #elif (__INT_FAST16_TYPE__ == 4 || __INT_FAST16_TYPE__ == 6) |
| #define __FAST16 "l" |
| #elif (__INT_FAST16_TYPE__ == 8 || __INT_FAST16_TYPE__ == 10) |
| #define __FAST16 "ll" |
| #endif |
| #if (__INT_FAST32_TYPE__ == 2) |
| #define __FAST32 |
| #elif (__INT_FAST32_TYPE__ == 4 || __INT_FAST32_TYPE__ == 6) |
| #define __FAST32 "l" |
| #elif (__INT_FAST32_TYPE__ == 8 || __INT_FAST32_TYPE__ == 10) |
| #define __FAST32 "ll" |
| #endif |
| #if (__INT_FAST64_TYPE__ == 2) |
| #define __FAST64 |
| #elif (__INT_FAST64_TYPE__ == 4 || __INT_FAST64_TYPE__ == 6) |
| #define __FAST64 "l" |
| #elif (__INT_FAST64_TYPE__ == 8 || __INT_FAST64_TYPE__ == 10) |
| #define __FAST64 "ll" |
| #endif |
| |
| #if (__INT_LEAST8_TYPE__ == 0) |
| #define __LEAST8 "hh" |
| #elif (__INT_LEAST8_TYPE__ == 1 || __INT_LEAST8_TYPE__ == 3) |
| #define __LEAST8 "h" |
| #elif (__INT_LEAST8_TYPE__ == 2) |
| #define __LEAST8 |
| #elif (__INT_LEAST8_TYPE__ == 4 || __INT_LEAST8_TYPE__ == 6) |
| #define __LEAST8 "l" |
| #elif (__INT_LEAST8_TYPE__ == 8 || __INT_LEAST8_TYPE__ == 10) |
| #define __LEAST8 "ll" |
| #endif |
| #if (__INT_LEAST16_TYPE__ == 1 || __INT_LEAST16_TYPE__ == 3) |
| #define __LEAST16 "h" |
| #elif (__INT_LEAST16_TYPE__ == 2) |
| #define __LEAST16 |
| #elif (__INT_LEAST16_TYPE__ == 4 || __INT_LEAST16_TYPE__ == 6) |
| #define __LEAST16 "l" |
| #elif (__INT_LEAST16_TYPE__ == 8 || __INT_LEAST16_TYPE__ == 10) |
| #define __LEAST16 "ll" |
| #endif |
| #if (__INT_LEAST32_TYPE__ == 2) |
| #define __LEAST32 |
| #elif (__INT_LEAST32_TYPE__ == 4 || __INT_LEAST32_TYPE__ == 6) |
| #define __LEAST32 "l" |
| #elif (__INT_LEAST32_TYPE__ == 8 || __INT_LEAST32_TYPE__ == 10) |
| #define __LEAST32 "ll" |
| #endif |
| #if (__INT_LEAST64_TYPE__ == 2) |
| #define __LEAST64 |
| #elif (__INT_LEAST64_TYPE__ == 4 || __INT_LEAST64_TYPE__ == 6) |
| #define __LEAST64 "l" |
| #elif (__INT_LEAST64_TYPE__ == 8 || __INT_LEAST64_TYPE__ == 10) |
| #define __LEAST64 "ll" |
| #endif |
| #undef signed |
| #undef unsigned |
| #undef char |
| #undef short |
| #undef int |
| #undef long |
| #pragma pop_macro("signed") |
| #pragma pop_macro("unsigned") |
| #pragma pop_macro("char") |
| #pragma pop_macro("short") |
| #pragma pop_macro("__int20") |
| #pragma pop_macro("__int20__") |
| #pragma pop_macro("int") |
| #pragma pop_macro("long") |
| |
| #endif /* _SYS__INTSUP_H */ |