1 /* 2 * Copyright (c) 2019 BayLibre SAS 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 /* 8 * Basic macro definitions that gcc and clang provide on their own 9 * but that xcc lacks. Only those that Zephyr requires are provided here. 10 */ 11 12 #ifndef ZEPHYR_INCLUDE_TOOLCHAIN_XCC_MISSING_DEFS_H_ 13 #define ZEPHYR_INCLUDE_TOOLCHAIN_XCC_MISSING_DEFS_H_ 14 15 #if __CHAR_BIT__ == 8 16 #define __SCHAR_WIDTH__ 8 17 #else 18 #error "unexpected __CHAR_BIT__ value" 19 #endif 20 21 #if __SHRT_MAX__ == 32767 22 #define __SHRT_WIDTH__ 16 23 #define __SIZEOF_SHORT__ 2 24 #else 25 #error "unexpected __SHRT_WIDTH__ value" 26 #endif 27 28 #if __INT_MAX__ == 2147483647 29 #define __INT_WIDTH__ 32 30 #define __SIZEOF_INT__ 4 31 #else 32 #error "unexpected __INT_MAX__ value" 33 #endif 34 35 #if __LONG_MAX__ == 2147483647L 36 #define __LONG_WIDTH__ 32 37 #define __SIZEOF_LONG__ 4 38 #else 39 #error "unexpected __LONG_MAX__ value" 40 #endif 41 42 #if __LONG_LONG_MAX__ == 9223372036854775807LL 43 #define __LONG_LONG_WIDTH__ 64 44 #define __SIZEOF_LONG_LONG__ 8 45 #else 46 #error "unexpected __LONG_LONG_MAX__ value" 47 #endif 48 49 #if __INTMAX_MAX__ == 9223372036854775807LL 50 #define __INTMAX_WIDTH__ 64 51 #define __SIZEOF_INTMAX__ 8 52 #define __UINTMAX_MAX__ 0xffffffffffffffffULL 53 #define __UINTMAX_WIDTH__ 64 54 #define __SIZEOF_UINTMAX__ 8 55 #else 56 #error "unexpected __INTMAX_MAX__ value" 57 #endif 58 59 /* 60 * No xcc provided definitions related to pointers, so let's just enforce 61 * the Zephyr expected type. 62 */ 63 64 #define __INTPTR_MAX__ 0x7fffffffL 65 #define __INTPTR_TYPE__ long int 66 #define __INTPTR_WIDTH__ 32 67 #define __SIZEOF_POINTER__ 4 68 69 #define __PTRDIFF_MAX__ 0x7fffffffL 70 #define __PTRDIFF_WIDTH__ 32 71 #define __SIZEOF_PTRDIFF_T__ 4 72 73 #define __UINTPTR_MAX__ 0xffffffffLU 74 #define __UINTPTR_TYPE__ long unsigned int 75 76 /* 77 * xcc already defines __SIZE_TYPE__ as "unsigned int" but there is no way 78 * to safeguard that here with preprocessor equality. 79 */ 80 81 #define __SIZE_MAX__ 0xffffffffU 82 #define __SIZE_WIDTH__ 32 83 #define __SIZEOF_SIZE_T__ 4 84 85 /* 86 * The following defines are inferred from the xcc provided defines 87 * already tested above. 88 */ 89 90 #define __INT8_MAX__ 0x7f 91 #define __INT8_TYPE__ signed char 92 93 #define __INT16_MAX__ 0x7fff 94 #define __INT16_TYPE__ short int 95 96 #define __INT32_MAX__ 0x7fffffff 97 #define __INT32_TYPE__ int 98 99 #define __INT64_MAX__ 0x7fffffffffffffffLL 100 #define __INT64_TYPE__ long long int 101 102 #define __INT_FAST8_MAX__ 0x7f 103 #define __INT_FAST8_TYPE__ signed char 104 #define __INT_FAST8_WIDTH__ 8 105 106 #define __INT_FAST16_MAX__ 0x7fffffff 107 #define __INT_FAST16_TYPE__ int 108 #define __INT_FAST16_WIDTH__ 32 109 110 #define __INT_FAST32_MAX__ 0x7fffffff 111 #define __INT_FAST32_TYPE__ int 112 #define __INT_FAST32_WIDTH__ 32 113 114 #define __INT_FAST64_MAX__ 0x7fffffffffffffffLL 115 #define __INT_FAST64_TYPE__ long long int 116 #define __INT_FAST64_WIDTH__ 64 117 118 #define __INT_LEAST8_MAX__ 0x7f 119 #define __INT_LEAST8_TYPE__ signed char 120 #define __INT_LEAST8_WIDTH__ 8 121 122 #define __INT_LEAST16_MAX__ 0x7fff 123 #define __INT_LEAST16_TYPE__ short int 124 #define __INT_LEAST16_WIDTH__ 16 125 126 #define __INT_LEAST32_MAX__ 0x7fffffff 127 #define __INT_LEAST32_TYPE__ int 128 #define __INT_LEAST32_WIDTH__ 32 129 130 #define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL 131 #define __INT_LEAST64_TYPE__ long long int 132 #define __INT_LEAST64_WIDTH__ 64 133 134 #define __UINT8_MAX__ 0xffU 135 #define __UINT8_TYPE__ unsigned char 136 137 #define __UINT16_MAX__ 0xffffU 138 #define __UINT16_TYPE__ short unsigned int 139 140 #define __UINT32_MAX__ 0xffffffffU 141 #define __UINT32_TYPE__ unsigned int 142 143 #define __UINT64_MAX__ 0xffffffffffffffffULL 144 #define __UINT64_TYPE__ long long unsigned int 145 146 #define __UINT_FAST8_MAX__ 0xffU 147 #define __UINT_FAST8_TYPE__ unsigned char 148 149 #define __UINT_FAST16_MAX__ 0xffffffffU 150 #define __UINT_FAST16_TYPE__ unsigned int 151 152 #define __UINT_FAST32_MAX__ 0xffffffffU 153 #define __UINT_FAST32_TYPE__ unsigned int 154 155 #define __UINT_FAST64_MAX__ 0xffffffffffffffffULL 156 #define __UINT_FAST64_TYPE__ long long unsigned int 157 158 #define __UINT_LEAST8_MAX__ 0xffU 159 #define __UINT_LEAST8_TYPE__ unsigned char 160 161 #define __UINT_LEAST16_MAX__ 0xffffU 162 #define __UINT_LEAST16_TYPE__ short unsigned int 163 164 #define __UINT_LEAST32_MAX__ 0xffffffffU 165 #define __UINT_LEAST32_TYPE__ unsigned int 166 167 #define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL 168 #define __UINT_LEAST64_TYPE__ long long unsigned int 169 170 #endif 171