XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
compiler.h
浏览该文件的文档.
1
13#ifndef __xwos_lib_compiler_h__
14#define __xwos_lib_compiler_h__
15
16#include <cfg/project.h>
17
56#include <xwos/ospl/soc/compiler.h>
57
58#ifndef __xwcc_section
59# define __xwcc_section(s)
60#endif
61#ifndef __xwcc_aligned
62# define __xwcc_aligned(x) __attribute__((aligned(x)))
63#endif
64#ifndef __xwcc_weak
65# define __xwcc_weak __attribute__((weak))
66#endif
67#ifndef __xwcc_weakref
68# define __xwcc_weakref(x) __attribute__((weakref(s)))
69#endif
70#ifndef __xwcc_alias
71# define __xwcc_alias(s) __attribute__((alias(s)))
72#endif
73#ifndef __xwcc_weakalias
74# define __xwcc_weakalias(s) __attribute__((weak, alias(s)))
75#endif
76#ifndef __xwcc_inline
77# define __xwcc_inline inline
78#endif
79#ifndef __xwcc_pure
80# define __xwcc_pure
81#endif
82#ifndef __xwcc_packed
83# define __xwcc_packed __attribute__((packed))
84#endif
85#ifndef __xwcc_must_check
86# define __xwcc_must_check __attribute__((warn_unused_result))
87#endif
88#ifndef __xwcc_naked
89#define __xwcc_naked __attribute__((naked))
90#endif
91#ifndef __xwcc_unused
92# define __xwcc_unused __attribute__((unused))
93#endif
94#ifndef __xwcc_used
95# define __xwcc_used __attribute__((used))
96#endif
97#ifndef __xwcc_hot
98# define __xwcc_hot __attribute__((hot))
99#endif
100#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
101# ifndef __xwcc_atomic
102# define __xwcc_atomic _Atomic
103# endif
104# ifndef __xwcc_noreturn
105# define __xwcc_noreturn _Noreturn
106# endif
107#else
108# ifndef __xwcc_atomic
109# define __xwcc_atomic volatile
110# endif
111# ifndef __xwcc_noreturn
112# define __xwcc_noreturn __attribute__((noreturn))
113# endif
114#endif
115#ifndef __xwcc_likely
116# define __xwcc_likely(x) __builtin_expect(!!(x), 1)
117#endif
118#ifndef __xwcc_unlikely
119# define __xwcc_unlikely(x) __builtin_expect(!!(x), 0)
120#endif
121#ifndef __xwcc_alignl1cache
122# if defined(CPUCFG_L1_CACHELINE_SIZE)
123# define __xwcc_alignl1cache __xwcc_aligned(CPUCFG_L1_CACHELINE_SIZE)
124# else
125# define __xwcc_alignl1cache __xwcc_aligned(sizeof(void *))
126# endif
127#endif
128#ifndef __xwcc_alignptr
129# define __xwcc_alignptr __xwcc_aligned(sizeof(void *))
130#endif
131#ifndef __xwcc_warning
132# define __xwcc_warning(message) __attribute__((warning(message)))
133#endif
134#ifndef __xwcc_error
135# define __xwcc_error(message) __attribute__((error(message)))
136#endif
137
138#ifndef __xwos_init_code
139# define __xwos_init_code
140#endif
141
142#ifndef __xwos_init_rodata
143# define __xwos_init_rodata
144#endif
145
146#ifndef __xwos_exit_code
147# define __xwos_exit_code
148#endif
149
150#ifndef __xwos_exit_rodata
151# define __xwos_exit_rodata
152#endif
153
154#ifndef __xwos_ivt
155# define __xwos_ivt
156#endif
157
158#ifndef __xwos_isr
159# define __xwos_isr
160#endif
161
162#ifndef __xwos_bh
163# define __xwos_bh __xwos_isr
164#endif
165
166#ifndef __xwos_inline
167# define __xwos_inline __xwcc_inline
168#endif
169
170#ifndef __xwos_code
171# define __xwos_code
172#endif
173
174#ifndef __xwos_api
175# define __xwos_api __xwos_code
176#endif
177
178#ifndef __xwos_inline_api
179# define __xwos_inline_api __xwcc_inline
180#endif
181
182#ifndef __xwos_rodata
183# define __xwos_rodata
184#endif
185
186#ifndef __xwos_data
187# define __xwos_data
188#endif
189
190#ifndef __image_description
191# define __image_description
192#endif
193
194#ifndef __image_tail
195# define __image_tail
196#endif
197
198#ifndef __xwlib_code
199# define __xwlib_code __xwos_code
200#endif
201
202#ifndef __xwlib_inline
203# define __xwlib_inline __xwcc_inline
204#endif
205
206#ifndef __xwlib_data
207# define __xwlib_data __xwos_data
208#endif
209
210#ifndef __xwlib_rodata
211# define __xwlib_rodata __xwos_rodata
212#endif
213
214#ifndef __xwbsp_init_code
215# define __xwbsp_init_code __xwos_init_code
216#endif
217
218#ifndef __xwbsp_init_rodata
219# define __xwbsp_init_rodata __xwos_init_rodata
220#endif
221
222#ifndef __xwbsp_exit_code
223# define __xwbsp_exit_code __xwos_exit_code
224#endif
225
226#ifndef __xwbsp_exit_rodata
227# define __xwbsp_exit_rodata __xwos_exit_rodata
228#endif
229
230#ifndef __xwbsp_code
231# define __xwbsp_code __xwos_code
232#endif
233
234#ifndef __xwbsp_api
235# define __xwbsp_api __xwos_api
236#endif
237
238#ifndef __xwbsp_isr
239# define __xwbsp_isr __xwos_isr
240#endif
241
242#ifndef __xwbsp_inline
243# define __xwbsp_inline __xwcc_inline
244#endif
245
246#ifndef __xwbsp_data
247# define __xwbsp_data __xwos_data
248#endif
249
250#ifndef __xwbsp_rodata
251# define __xwbsp_rodata __xwos_rodata
252#endif
253
254#ifndef __xwmp_init_code
255# define __xwmp_init_code __xwos_init_code
256#endif
257
258#ifndef __xwmp_init_rodata
259# define __xwmp_init_rodata __xwos_init_rodata
260#endif
261
262#ifndef __xwmp_exit_code
263# define __xwmp_exit_code __xwos_exit_code
264#endif
265
266#ifndef __xwmp_exit_rodata
267# define __xwmp_exit_rodata __xwos_exit_rodata
268#endif
269
270#ifndef __xwmp_ivt
271# define __xwmp_ivt __xwos_ivt
272#endif
273
274#ifndef __xwmp_isr
275# define __xwmp_isr __xwos_isr
276#endif
277
278#ifndef __xwmp_bh
279# define __xwmp_bh __xwos_bh
280#endif
281
282#ifndef __xwmp_code
283# define __xwmp_code __xwos_code
284#endif
285
286#ifndef __xwmp_api
287# define __xwmp_api __xwos_api
288#endif
289
290#ifndef __xwmp_inline
291# define __xwmp_inline __xwcc_inline
292#endif
293
294#ifndef __xwmp_inline_api
295# define __xwmp_inline_api __xwos_inline_api
296#endif
297
298#ifndef __xwmp_rodata
299# define __xwmp_rodata __xwos_rodata
300#endif
301
302#ifndef __xwmp_data
303# define __xwmp_data __xwos_data
304#endif
305
306#ifndef __xwup_init_code
307# define __xwup_init_code __xwos_init_code
308#endif
309
310#ifndef __xwup_init_rodata
311# define __xwup_init_rodata __xwos_init_rodata
312#endif
313
314#ifndef __xwup_exit_code
315# define __xwup_exit_code __xwos_exit_code
316#endif
317
318#ifndef __xwup_exit_rodata
319# define __xwup_exit_rodata __xwos_exit_rodata
320#endif
321
322#ifndef __xwup_ivt
323# define __xwup_ivt __xwos_ivt
324#endif
325
326#ifndef __xwup_isr
327# define __xwup_isr __xwos_isr
328#endif
329
330#ifndef __xwup_bh
331# define __xwup_bh __xwos_bh
332#endif
333
334#ifndef __xwup_code
335# define __xwup_code __xwos_code
336#endif
337
338#ifndef __xwup_api
339# define __xwup_api __xwos_api
340#endif
341
342#ifndef __xwup_inline
343# define __xwup_inline __xwcc_inline
344#endif
345
346#ifndef __xwup_inline_api
347# define __xwup_inline_api __xwos_inline_api
348#endif
349
350#ifndef __xwup_rodata
351# define __xwup_rodata __xwos_rodata
352#endif
353
354#ifndef __xwup_data
355# define __xwup_data __xwos_data
356#endif
357
358#ifndef __xwmd_code
359# define __xwmd_code __xwos_code
360#endif
361
362#ifndef __xwmd_api
363# define __xwmd_api __xwmd_code
364#endif
365
366#ifndef __xwmd_inline
367# define __xwmd_inline __xwcc_inline
368#endif
369
370#ifndef __xwmd_inline_api
371# define __xwmd_inline_api __xwos_inline_api
372#endif
373
374#ifndef __xwmd_isr
375# define __xwmd_isr __xwmd_code
376#endif
377
378#ifndef __xwmd_bh
379# define __xwmd_bh __xwmd_isr
380#endif
381
382#ifndef __xwmd_rodata
383# define __xwmd_rodata __xwos_rodata
384#endif
385
386#ifndef __xwmd_data
387# define __xwmd_data __xwos_data
388#endif
389
390#ifndef __xwcd_code
391# define __xwcd_code __xwos_code
392#endif
393
394#ifndef __xwcd_api
395# define __xwcd_api __xwcd_code
396#endif
397
398#ifndef __xwcd_inline
399# define __xwcd_inline __xwcc_inline
400#endif
401
402#ifndef __xwcd_inline_api
403# define __xwcd_inline_api __xwos_inline_api
404#endif
405
406#ifndef __xwcd_isr
407# define __xwcd_isr __xwcd_code
408#endif
409
410#ifndef __xwcd_bh
411# define __xwcd_bh __xwcd_isr
412#endif
413
414#ifndef __xwcd_rodata
415# define __xwcd_rodata __xwos_rodata
416#endif
417
418#ifndef __xwcd_data
419# define __xwcd_data __xwos_data
420#endif
421
422/******** ******** compiletime check ******** ********/
423#ifndef xwcc_native_word
428# define xwcc_native_word(t) \
429 (sizeof(t) == sizeof(xwu8_t) || \
430 sizeof(t) == sizeof(xwu16_t) || \
431 sizeof(t) == sizeof(xwu32_t) || \
432 sizeof(t) == sizeof(xwu64_t))
433#endif
434
435/******** ******** macros to string ******** ********/
436#ifndef stringify
440// cppcheck-suppress [misra-c2012-20.10]
441# define __stringify(m) #m
442
466// cppcheck-suppress [misra-c2012-20.10]
467# define stringify(m) __stringify(m)
468#endif
469
477// cppcheck-suppress [misra-c2012-20.10]
478#define __show_macro(m) #m ":" stringify(m)
479
480/******** ******** struct & member ******** ********/
481#ifndef xwcc_offsetof
487# define xwcc_offsetof(type, member) ((xwptr_t)&(((type *)0)->member))
488#endif
489
490#ifndef xwcc_derof
501#define xwcc_derof(baseptr, derclass, member) \
502 ((derclass *)(((xwptr_t)(baseptr)) - (xwptr_t)xwcc_offsetof(derclass, member)))
503#endif
504
505
510#endif /* xwos/lib/compiler.h */