1 /* 2 * Copyright (c) 2025 IAR Systems AB 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 iccarm lacks. Only those that Zephyr requires are provided here. 10 */ 11 12 #ifndef ZEPHYR_INCLUDE_TOOLCHAIN_ICCARM_MISSING_DEFS_H_ 13 #define ZEPHYR_INCLUDE_TOOLCHAIN_ICCARM_MISSING_DEFS_H_ 14 15 /* We need to define NULL with a parenthesis around _NULL 16 * otherwise the DEBRACE macros won't work correctly 17 */ 18 19 #undef NULL 20 #define NULL (_NULL) 21 22 #if defined(__IAR_SYSTEMS_ICC__) 23 #ifndef __CHAR_BIT__ 24 #define __CHAR_BIT__ __CHAR_BITS__ 25 #endif 26 #define __SCHAR_MAX__ __SIGNED_CHAR_MAX__ 27 28 #define __INT_MAX__ __SIGNED_INT_MAX__ 29 #define __INT_WIDTH__ (__INT_SIZE__*8) 30 #define __SIZEOF_INT__ __INT_SIZE__ 31 32 #define __SHRT_MAX__ __SIGNED_SHORT_MAX__ 33 #define __SHRT_WIDTH__ (__SHORT_SIZE__*8) 34 #define __SIZEOF_SHORT__ __SHORT_SIZE__ 35 36 #define __LONG_MAX__ __SIGNED_LONG_MAX__ 37 #define __LONG_WIDTH__ (__LONG_SIZE__*8) 38 #define __SIZEOF_LONG__ __LONG_SIZE__ 39 40 #define __LONG_LONG_MAX__ __SIGNED_LONG_LONG_MAX__ 41 #define __LONG_LONG_WIDTH__ (__LONG_LONG_SIZE__*8) 42 #define __SIZEOF_LONG_LONG__ __LONG_LONG_SIZE__ 43 44 #define __INTMAX_MAX__ __INTMAX_T_MAX__ 45 #define __SIZEOF_INTMAX__ sizeof(__INTMAX_T_TYPE__) 46 #define __INTMAX_WIDTH__ (__SIZEOF_INTMAX__*8) 47 #define __UINTMAX_MAX__ __UINTMAX_T_MAX__ 48 #define __SIZEOF_UINTMAX__ sizeof(__UINTMAX_T_TYPE__) 49 #define __UINTMAX_WIDTH__ (__SIZEOF_UINTMAX__*8) 50 51 #define __INTPTR_MAX__ __INTPTR_T_MAX__ 52 #define __INTPTR_TYPE__ __INTPTR_T_TYPE__ 53 #define __INTPTR_WIDTH__ (__INTPTR_T_SIZE__*8) 54 #define __SIZEOF_POINTER__ __INTPTR_T_SIZE__ 55 56 #define __PTRDIFF_MAX__ __PTRDIFF_T_MAX__ 57 #define __PTRDIFF_WIDTH__ (__PTRDIFF_T_SIZE__*8) 58 #define __SIZEOF_PTRDIFF_T__ __PTRDIFF_T_SIZE__ 59 60 #define __UINTPTR_MAX__ __UINTPTR_T_MAX__ 61 #define __UINTPTR_TYPE__ __UINTPTR_T_TYPE__ 62 63 /* 64 * ICCARM already defines __SIZE_T_MAX__ as "unsigned int" but there is no way 65 * to safeguard that here with preprocessor equality. 66 */ 67 68 #define __SIZE_TYPE__ __SIZE_T_TYPE__ 69 #define __SIZE_MAX__ __SIZE_T_MAX__ 70 #define __SIZE_WIDTH__ ((__SIZEOF_SIZE_T__)*8) 71 /* #define __SIZEOF_SIZE_T__ 4 */ 72 73 /* 74 * The following defines are inferred from the ICCARM provided defines 75 * already tested above. 76 */ 77 78 79 #define __INT8_MAX__ __INT8_T_MAX__ 80 #define __INT8_TYPE__ __INT8_T_TYPE__ 81 82 #define __UINT8_MAX__ __UINT8_T_MAX__ 83 #define __UINT8_TYPE__ __UINT8_T_TYPE__ 84 85 #define __INT16_MAX__ __INT16_T_MAX__ 86 #define __INT16_TYPE__ __INT16_T_TYPE__ 87 88 #define __UINT16_MAX__ __UINT16_T_MAX__ 89 #define __UINT16_TYPE__ __UINT16_T_TYPE__ 90 91 #define __INT32_MAX__ __INT32_T_MAX__ 92 #define __INT32_TYPE__ __INT32_T_TYPE__ 93 94 #define __UINT32_MAX__ __UINT32_T_MAX__ 95 #define __UINT32_TYPE__ __UINT32_T_TYPE__ 96 97 #define __INT64_MAX__ __INT64_T_MAX__ 98 #define __INT64_TYPE__ __INT64_T_TYPE__ 99 100 #define __UINT64_MAX__ __UINT64_T_MAX__ 101 #define __UINT64_TYPE__ __UINT64_T_TYPE__ 102 103 #define __INT_FAST8_MAX__ __INT_FAST8_T_MAX__ 104 #define __INT_FAST8_TYPE__ __INT_FAST8_T_TYPE__ 105 #define __INT_FAST8_WIDTH__ (__INT_FAST8_T_SIZE__*8) 106 107 #define __INT_FAST16_MAX__ __INT_FAST16_T_MAX__ 108 #define __INT_FAST16_TYPE__ __INT_FAST16_T_TYPE__ 109 #define __INT_FAST16_WIDTH__ (__INT_FAST16_T_SIZE__*8) 110 111 #define __INT_FAST32_MAX__ __INT_FAST32_T_MAX__ 112 #define __INT_FAST32_TYPE__ __INT_FAST32_T_TYPE__ 113 #define __INT_FAST32_WIDTH__ (__INT_FAST32_T_SIZE__*8) 114 115 #define __INT_FAST64_MAX__ __INT_FAST64_T_MAX__ 116 #define __INT_FAST64_TYPE__ __INT_FAST64_T_TYPE__ 117 #define __INT_FAST64_WIDTH__ (__INT_FAST64_T_SIZE__*8) 118 119 #define __INT_LEAST8_MAX__ __INT_LEAST8_T_MAX__ 120 #define __INT_LEAST8_TYPE__ __INT_LEAST8_T_TYPE__ 121 #define __INT_LEAST8_WIDTH__ (__INT_LEAST8_T_SIZE__*8) 122 123 #define __INT_LEAST16_MAX__ __INT_LEAST16_T_MAX__ 124 #define __INT_LEAST16_TYPE__ __INT_LEAST16_T_TYPE__ 125 #define __INT_LEAST16_WIDTH__ (__INT_LEAST16_T_SIZE__*8) 126 127 #define __INT_LEAST32_MAX__ __INT_LEAST32_T_MAX__ 128 #define __INT_LEAST32_TYPE__ __INT_LEAST32_T_TYPE__ 129 #define __INT_LEAST32_WIDTH__ (__INT_LEAST32_T_SIZE__*8) 130 131 #define __INT_LEAST64_MAX__ __INT_LEAST64_T_MAX__ 132 #define __INT_LEAST64_TYPE__ __INT_LEAST64_T_TYPE__ 133 #define __INT_LEAST64_WIDTH__ (__INT_LEAST64_T_SIZE__*8) 134 135 #define __UINT_FAST8_MAX__ __UINT_FAST8_T_MAX__ 136 #define __UINT_FAST8_TYPE__ __UINT_FAST8_T_TYPE__ 137 138 #define __UINT_FAST16_MAX__ __UINT_FAST16_T_MAX__ 139 #define __UINT_FAST16_TYPE__ __UINT_FAST16_T_TYPE__ 140 141 #define __UINT_FAST32_MAX__ __UINT_FAST32_T_MAX__ 142 #define __UINT_FAST32_TYPE__ __UINT_FAST32_T_TYPE__ 143 144 #define __UINT_FAST64_MAX__ __UINT_FAST64_T_MAX__ 145 #define __UINT_FAST64_TYPE__ __UINT_FAST64_T_TYPE__ 146 147 #define __UINT_LEAST8_MAX__ __UINT_LEAST8_T_MAX__ 148 #define __UINT_LEAST8_TYPE__ __UINT_LEAST8_T_TYPE__ 149 150 #define __UINT_LEAST16_MAX__ __UINT_LEAST16_T_MAX__ 151 #define __UINT_LEAST16_TYPE__ __UINT_LEAST16_T_TYPE__ 152 153 #define __UINT_LEAST32_MAX__ __UINT_LEAST32_T_MAX__ 154 #define __UINT_LEAST32_TYPE__ __UINT_LEAST32_T_TYPE__ 155 156 #define __UINT_LEAST64_MAX__ __UINT_LEAST64_T_MAX__ 157 #define __UINT_LEAST64_TYPE__ __UINT_LEAST64_T_TYPE__ 158 159 #endif /* __IAR_SYSTEMS_ICC__ */ 160 161 #endif 162