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 */
xwos
lib
compiler.h
制作者
1.9.7