Line data Source code
1 0 : /*
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 0 : #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
|