RTEMS 6.1-rc2
Loading...
Searching...
No Matches
cmsis_compiler.h
Go to the documentation of this file.
1/**************************************************************************/
7/*
8 * Copyright (c) 2009-2023 Arm Limited. All rights reserved.
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 *
12 * Licensed under the Apache License, Version 2.0 (the License); you may
13 * not use this file except in compliance with the License.
14 * You may obtain a copy of the License at
15 *
16 * www.apache.org/licenses/LICENSE-2.0
17 *
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
20 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
23 */
24
25#ifndef __CMSIS_COMPILER_H
26#define __CMSIS_COMPILER_H
27
28#include <stdint.h>
29
30/*
31 * Arm Compiler 4/5
32 */
33#if defined ( __CC_ARM )
34 #include "cmsis_armcc.h"
35
36
37/*
38 * Arm Compiler 6.6 LTM (armclang)
39 */
40#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100)
41 #include "cmsis_armclang_ltm.h"
42
43 /*
44 * Arm Compiler above 6.10.1 (armclang)
45 */
46#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
47 #include "cmsis_armclang.h"
48
49/*
50 * TI Arm Clang Compiler (tiarmclang)
51 */
52#elif defined (__ti__)
53 #include "cmsis_tiarmclang.h"
54
55/*
56 * GNU Compiler
57 */
58#elif defined ( __GNUC__ )
59 #include "cmsis_gcc.h"
60
61
62/*
63 * IAR Compiler
64 */
65#elif defined ( __ICCARM__ )
66 #include <cmsis_iccarm.h>
67
68
69/*
70 * TI Arm Compiler (armcl)
71 */
72#elif defined ( __TI_ARM__ )
73 #include <cmsis_ccs.h>
74
75 #ifndef __ASM
76 #define __ASM __asm
77 #endif
78 #ifndef __INLINE
79 #define __INLINE inline
80 #endif
81 #ifndef __STATIC_INLINE
82 #define __STATIC_INLINE static inline
83 #endif
84 #ifndef __STATIC_FORCEINLINE
85 #define __STATIC_FORCEINLINE __STATIC_INLINE
86 #endif
87 #ifndef __NO_RETURN
88 #define __NO_RETURN __attribute__((noreturn))
89 #endif
90 #ifndef __USED
91 #define __USED __attribute__((used))
92 #endif
93 #ifndef __WEAK
94 #define __WEAK __attribute__((weak))
95 #endif
96 #ifndef __PACKED
97 #define __PACKED __attribute__((packed))
98 #endif
99 #ifndef __PACKED_STRUCT
100 #define __PACKED_STRUCT struct __attribute__((packed))
101 #endif
102 #ifndef __PACKED_UNION
103 #define __PACKED_UNION union __attribute__((packed))
104 #endif
105 #ifndef __UNALIGNED_UINT32 /* deprecated */
106 struct __attribute__((packed)) T_UINT32 { uint32_t v; };
107 #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
108 #endif
109 #ifndef __UNALIGNED_UINT16_WRITE
110 __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
111 #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
112 #endif
113 #ifndef __UNALIGNED_UINT16_READ
114 __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
115 #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
116 #endif
117 #ifndef __UNALIGNED_UINT32_WRITE
118 __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
119 #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
120 #endif
121 #ifndef __UNALIGNED_UINT32_READ
122 __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
123 #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
124 #endif
125 #ifndef __ALIGNED
126 #define __ALIGNED(x) __attribute__((aligned(x)))
127 #endif
128 #ifndef __RESTRICT
129 #define __RESTRICT __restrict
130 #endif
131 #ifndef __COMPILER_BARRIER
132 #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
133 #define __COMPILER_BARRIER() (void)0
134 #endif
135 #ifndef __NO_INIT
136 #define __NO_INIT __attribute__ ((section (".bss.noinit")))
137 #endif
138 #ifndef __ALIAS
139 #define __ALIAS(x) __attribute__ ((alias(x)))
140 #endif
141
142/*
143 * TASKING Compiler
144 */
145#elif defined ( __TASKING__ )
146 /*
147 * The CMSIS functions have been implemented as intrinsics in the compiler.
148 * Please use "carm -?i" to get an up to date list of all intrinsics,
149 * Including the CMSIS ones.
150 */
151
152 #ifndef __ASM
153 #define __ASM __asm
154 #endif
155 #ifndef __INLINE
156 #define __INLINE inline
157 #endif
158 #ifndef __STATIC_INLINE
159 #define __STATIC_INLINE static inline
160 #endif
161 #ifndef __STATIC_FORCEINLINE
162 #define __STATIC_FORCEINLINE __STATIC_INLINE
163 #endif
164 #ifndef __NO_RETURN
165 #define __NO_RETURN __attribute__((noreturn))
166 #endif
167 #ifndef __USED
168 #define __USED __attribute__((used))
169 #endif
170 #ifndef __WEAK
171 #define __WEAK __attribute__((weak))
172 #endif
173 #ifndef __PACKED
174 #define __PACKED __packed__
175 #endif
176 #ifndef __PACKED_STRUCT
177 #define __PACKED_STRUCT struct __packed__
178 #endif
179 #ifndef __PACKED_UNION
180 #define __PACKED_UNION union __packed__
181 #endif
182 #ifndef __UNALIGNED_UINT32 /* deprecated */
183 struct __packed__ T_UINT32 { uint32_t v; };
184 #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
185 #endif
186 #ifndef __UNALIGNED_UINT16_WRITE
187 __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
188 #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
189 #endif
190 #ifndef __UNALIGNED_UINT16_READ
191 __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
192 #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
193 #endif
194 #ifndef __UNALIGNED_UINT32_WRITE
195 __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
196 #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
197 #endif
198 #ifndef __UNALIGNED_UINT32_READ
199 __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
200 #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
201 #endif
202 #ifndef __ALIGNED
203 #define __ALIGNED(x) __align(x)
204 #endif
205 #ifndef __RESTRICT
206 #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
207 #define __RESTRICT
208 #endif
209 #ifndef __COMPILER_BARRIER
210 #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
211 #define __COMPILER_BARRIER() (void)0
212 #endif
213 #ifndef __NO_INIT
214 #define __NO_INIT __attribute__ ((section (".bss.noinit")))
215 #endif
216 #ifndef __ALIAS
217 #define __ALIAS(x) __attribute__ ((alias(x)))
218 #endif
219
220/*
221 * COSMIC Compiler
222 */
223#elif defined ( __CSMC__ )
224 #include <cmsis_csm.h>
225
226 #ifndef __ASM
227 #define __ASM _asm
228 #endif
229 #ifndef __INLINE
230 #define __INLINE inline
231 #endif
232 #ifndef __STATIC_INLINE
233 #define __STATIC_INLINE static inline
234 #endif
235 #ifndef __STATIC_FORCEINLINE
236 #define __STATIC_FORCEINLINE __STATIC_INLINE
237 #endif
238 #ifndef __NO_RETURN
239 // NO RETURN is automatically detected hence no warning here
240 #define __NO_RETURN
241 #endif
242 #ifndef __USED
243 #warning No compiler specific solution for __USED. __USED is ignored.
244 #define __USED
245 #endif
246 #ifndef __WEAK
247 #define __WEAK __weak
248 #endif
249 #ifndef __PACKED
250 #define __PACKED @packed
251 #endif
252 #ifndef __PACKED_STRUCT
253 #define __PACKED_STRUCT @packed struct
254 #endif
255 #ifndef __PACKED_UNION
256 #define __PACKED_UNION @packed union
257 #endif
258 #ifndef __UNALIGNED_UINT32 /* deprecated */
259 @packed struct T_UINT32 { uint32_t v; };
260 #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
261 #endif
262 #ifndef __UNALIGNED_UINT16_WRITE
263 __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
264 #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
265 #endif
266 #ifndef __UNALIGNED_UINT16_READ
267 __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
268 #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
269 #endif
270 #ifndef __UNALIGNED_UINT32_WRITE
271 __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
272 #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
273 #endif
274 #ifndef __UNALIGNED_UINT32_READ
275 __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
276 #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
277 #endif
278 #ifndef __ALIGNED
279 #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
280 #define __ALIGNED(x)
281 #endif
282 #ifndef __RESTRICT
283 #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
284 #define __RESTRICT
285 #endif
286 #ifndef __COMPILER_BARRIER
287 #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
288 #define __COMPILER_BARRIER() (void)0
289 #endif
290 #ifndef __NO_INIT
291 #define __NO_INIT __attribute__ ((section (".bss.noinit")))
292 #endif
293 #ifndef __ALIAS
294 #define __ALIAS(x) __attribute__ ((alias(x)))
295 #endif
296
297#else
298 #error Unknown compiler.
299#endif
300
301
302#endif /* __CMSIS_COMPILER_H */
303
CMSIS compiler GCC header file.
Definition: xnandpsu_onfi.h:181