source: bootcd/isolinux/syslinux-6.03/com32/include/klibc/compiler.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 3.8 KB
RevLine 
[e16e8f2]1/*
2 * klibc/compiler.h
3 *
4 * Various compiler features
5 */
6
7#ifndef _KLIBC_COMPILER_H
8#define _KLIBC_COMPILER_H
9
10#define __user
11
12/* Specific calling conventions */
13/* __cdecl is used when we want varadic and non-varadic functions to have
14   the same binary calling convention. */
15#ifdef __i386__
16# ifdef __GNUC__
17#  define __cdecl __attribute__((cdecl,regparm(0)))
18# else
19  /* Most other C compilers have __cdecl as a keyword */
20# endif
21#else
22# define __cdecl                /* Meaningless on non-i386 */
23#endif
24
25/* How to declare a function that *must* be inlined */
26#ifdef __GNUC__
27# if __GNUC_MAJOR__ >= 3
28#  define __must_inline static __inline__ __attribute__((always_inline))
29# else
30#  define __must_inline extern __inline__
31# endif
32#else
33# define __must_inline inline   /* Just hope this works... */
34#endif
35
36/* How to declare a function that does not return */
37#ifdef __GNUC__
38# define __noreturn void __attribute__((noreturn))
39#else
40# define __noreturn void
41#endif
42
43/* "const" function:
44
45     Many functions do not examine any values except their arguments,
46     and have no effects except the return value.  Basically this is
47     just slightly more strict class than the `pure' attribute above,
48     since function is not allowed to read global memory.
49
50     Note that a function that has pointer arguments and examines the
51     data pointed to must _not_ be declared `const'.  Likewise, a
52     function that calls a non-`const' function usually must not be
53     `const'.  It does not make sense for a `const' function to return
54     `void'.
55*/
56#ifdef __GNUC__
57# define __constfunc __attribute__((const))
58#else
59# define __constfunc
60#endif
61#undef __attribute_const__
62#define __attribute_const__ __constfunc
63
64/* "pure" function:
65
66     Many functions have no effects except the return value and their
67     return value depends only on the parameters and/or global
68     variables.  Such a function can be subject to common subexpression
69     elimination and loop optimization just as an arithmetic operator
70     would be.  These functions should be declared with the attribute
71     `pure'.
72*/
73#ifdef __GNUC__
74# define __purefunc __attribute__((pure))
75#else
76# define __purefunc
77#endif
78#undef __attribute_pure__
79#define __attribute_pure__ __purefunc
80
81/* Format attribute */
82#ifdef __GNUC__
83# define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
84#else
85# define __formatfunc(t,f,a)
86#endif
87
88/* malloc() function (returns unaliased pointer) */
89#if defined(__GNUC__) && (__GNUC_MAJOR__ >= 3)
90# define __mallocfunc __attribute__((malloc))
91#else
92# define __mallocfunc
93#endif
94
95/* likely/unlikely */
96#if defined(__GNUC__) && (__GNUC_MAJOR__ > 2 || (__GNUC_MAJOR__ == 2 && __GNUC_MINOR__ >= 95))
97# define __likely(x)   __builtin_expect(!!(x), 1)
98# define __unlikely(x) __builtin_expect(!!(x), 0)
99#else
100# define __likely(x)   (!!(x))
101# define __unlikely(x) (!!(x))
102#endif
103
104/* Possibly unused function */
105#ifdef __GNUC__
106# define __unusedfunc   __attribute__((unused))
107#else
108# define __unusedfunc
109#endif
110
111/* Declare a variable or data structure as unused. */
112#ifdef __GNUC__
113# define __unused       __attribute__((unused))
114#else
115# define __unused
116#endif
117
118/* Used symbol */
119#define __used                          __attribute__((used))
120
121/* Constructors and destructors */
122#define __constructor   __attribute__((constructor))
123#define __destructor    __attribute__((destructor))
124
125/* Packed structures */
126#define __packed        __attribute__((packed))
127
128/* Weak symbols */
129#define __weak          __attribute__((weak))
130
131/* Alignment */
132#define __aligned(x)    __attribute__((aligned(x)))
133#define __alignas(x)    __attribute__((aligned(__alignof__(x))))
134
135/* Handling of common (affect constructors/destructors) */
136#define __common        __attribute__((common))
137#define __nocommon      __attribute__((nocommon))
138
139/* Weak symbols */
140#define __weak                  __attribute__((weak))
141
142#define __export                __attribute__((visibility("default")))
143
144#endif
Note: See TracBrowser for help on using the repository browser.