cantata
cmsis_compiler.h
Go to the documentation of this file.
1 /**************************************************************************/
7 /*
8  * Copyright (c) 2009-2018 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 (armclang)
39  */
40 #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
41  #include "cmsis_armclang.h"
42 
43 
44 /*
45  * GNU Compiler
46  */
47 #elif defined ( __GNUC__ )
48  #include "cmsis_gcc.h"
49 
50 
51 /*
52  * IAR Compiler
53  */
54 #elif defined ( __ICCARM__ )
55  #include <cmsis_iccarm.h>
56 
57 
58 /*
59  * TI Arm Compiler
60  */
61 #elif defined ( __TI_ARM__ )
62  #include <cmsis_ccs.h>
63 
64  #ifndef __ASM
65  #define __ASM __asm
66  #endif
67  #ifndef __INLINE
68  #define __INLINE inline
69  #endif
70  #ifndef __STATIC_INLINE
71  #define __STATIC_INLINE static inline
72  #endif
73  #ifndef __STATIC_FORCEINLINE
74  #define __STATIC_FORCEINLINE __STATIC_INLINE
75  #endif
76  #ifndef __NO_RETURN
77  #define __NO_RETURN __attribute__((noreturn))
78  #endif
79  #ifndef __USED
80  #define __USED __attribute__((used))
81  #endif
82  #ifndef __WEAK
83  #define __WEAK __attribute__((weak))
84  #endif
85  #ifndef __PACKED
86  #define __PACKED __attribute__((packed))
87  #endif
88  #ifndef __PACKED_STRUCT
89  #define __PACKED_STRUCT struct __attribute__((packed))
90  #endif
91  #ifndef __PACKED_UNION
92  #define __PACKED_UNION union __attribute__((packed))
93  #endif
94  #ifndef __UNALIGNED_UINT32 /* deprecated */
95  struct __attribute__((packed)) T_UINT32 { uint32_t v; };
96  #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
97  #endif
98  #ifndef __UNALIGNED_UINT16_WRITE
99  __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
100  #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
101  #endif
102  #ifndef __UNALIGNED_UINT16_READ
103  __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
104  #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
105  #endif
106  #ifndef __UNALIGNED_UINT32_WRITE
107  __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
108  #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
109  #endif
110  #ifndef __UNALIGNED_UINT32_READ
111  __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
112  #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
113  #endif
114  #ifndef __ALIGNED
115  #define __ALIGNED(x) __attribute__((aligned(x)))
116  #endif
117  #ifndef __RESTRICT
118  #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
119  #define __RESTRICT
120  #endif
121 
122 
123 /*
124  * TASKING Compiler
125  */
126 #elif defined ( __TASKING__ )
127  /*
128  * The CMSIS functions have been implemented as intrinsics in the compiler.
129  * Please use "carm -?i" to get an up to date list of all intrinsics,
130  * Including the CMSIS ones.
131  */
132 
133  #ifndef __ASM
134  #define __ASM __asm
135  #endif
136  #ifndef __INLINE
137  #define __INLINE inline
138  #endif
139  #ifndef __STATIC_INLINE
140  #define __STATIC_INLINE static inline
141  #endif
142  #ifndef __STATIC_FORCEINLINE
143  #define __STATIC_FORCEINLINE __STATIC_INLINE
144  #endif
145  #ifndef __NO_RETURN
146  #define __NO_RETURN __attribute__((noreturn))
147  #endif
148  #ifndef __USED
149  #define __USED __attribute__((used))
150  #endif
151  #ifndef __WEAK
152  #define __WEAK __attribute__((weak))
153  #endif
154  #ifndef __PACKED
155  #define __PACKED __packed__
156  #endif
157  #ifndef __PACKED_STRUCT
158  #define __PACKED_STRUCT struct __packed__
159  #endif
160  #ifndef __PACKED_UNION
161  #define __PACKED_UNION union __packed__
162  #endif
163  #ifndef __UNALIGNED_UINT32 /* deprecated */
164  struct __packed__ T_UINT32 { uint32_t v; };
165  #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
166  #endif
167  #ifndef __UNALIGNED_UINT16_WRITE
168  __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
169  #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
170  #endif
171  #ifndef __UNALIGNED_UINT16_READ
172  __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
173  #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
174  #endif
175  #ifndef __UNALIGNED_UINT32_WRITE
176  __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
177  #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
178  #endif
179  #ifndef __UNALIGNED_UINT32_READ
180  __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
181  #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
182  #endif
183  #ifndef __ALIGNED
184  #define __ALIGNED(x) __align(x)
185  #endif
186  #ifndef __RESTRICT
187  #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
188  #define __RESTRICT
189  #endif
190 
191 
192 /*
193  * COSMIC Compiler
194  */
195 #elif defined ( __CSMC__ )
196  #include <cmsis_csm.h>
197 
198  #ifndef __ASM
199  #define __ASM _asm
200  #endif
201  #ifndef __INLINE
202  #define __INLINE inline
203  #endif
204  #ifndef __STATIC_INLINE
205  #define __STATIC_INLINE static inline
206  #endif
207  #ifndef __STATIC_FORCEINLINE
208  #define __STATIC_FORCEINLINE __STATIC_INLINE
209  #endif
210  #ifndef __NO_RETURN
211  // NO RETURN is automatically detected hence no warning here
212  #define __NO_RETURN
213  #endif
214  #ifndef __USED
215  #warning No compiler specific solution for __USED. __USED is ignored.
216  #define __USED
217  #endif
218  #ifndef __WEAK
219  #define __WEAK __weak
220  #endif
221  #ifndef __PACKED
222  #define __PACKED @packed
223  #endif
224  #ifndef __PACKED_STRUCT
225  #define __PACKED_STRUCT @packed struct
226  #endif
227  #ifndef __PACKED_UNION
228  #define __PACKED_UNION @packed union
229  #endif
230  #ifndef __UNALIGNED_UINT32 /* deprecated */
231  @packed struct T_UINT32 { uint32_t v; };
232  #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
233  #endif
234  #ifndef __UNALIGNED_UINT16_WRITE
235  __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
236  #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
237  #endif
238  #ifndef __UNALIGNED_UINT16_READ
239  __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
240  #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
241  #endif
242  #ifndef __UNALIGNED_UINT32_WRITE
243  __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
244  #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
245  #endif
246  #ifndef __UNALIGNED_UINT32_READ
247  __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
248  #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
249  #endif
250  #ifndef __ALIGNED
251  #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
252  #define __ALIGNED(x)
253  #endif
254  #ifndef __RESTRICT
255  #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
256  #define __RESTRICT
257  #endif
258 
259 
260 #else
261  #error Unknown compiler.
262 #endif
263 
264 
265 #endif /* __CMSIS_COMPILER_H */
266 
CMSIS compiler GCC header file.
CMSIS compiler ARMCC (Arm Compiler 5) header file.
CMSIS compiler ICCARM (IAR Compiler for Arm) header file.
CMSIS compiler armclang (Arm Compiler 6) header file.