YAHAL
Yet Another Hardware Abstraction Library
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 ARMCC (Arm Compiler 5) header file.
CMSIS compiler armclang (Arm Compiler 6) header file.
CMSIS compiler armclang (Arm Compiler 6) header file.
CMSIS compiler GCC header file.
CMSIS compiler ICCARM (IAR Compiler for Arm) header file.
void __attribute__((noreturn))(*rom_reset_usb_boot_fn)(uint32_t
Reboot the device into BOOTSEL mode.
Definition bootrom.h:66