Magellan Linux

Contents of /trunk/mkinitrd-magellan/klibc/usr/include/klibc/compiler.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 815 - (show annotations) (download)
Fri Apr 24 18:32:46 2009 UTC (15 years ago) by niro
File MIME type: text/plain
File size: 3523 byte(s)
-updated to klibc-1.5.15
1 /*
2 * klibc/compiler.h
3 *
4 * Various compiler features
5 */
6
7 #ifndef _KLIBC_COMPILER_H
8 #define _KLIBC_COMPILER_H
9
10 /* Specific calling conventions */
11 /* __cdecl is used when we want varadic and non-varadic functions to have
12 the same binary calling convention. */
13 #ifdef __i386__
14 # ifdef __GNUC__
15 # define __cdecl __attribute__((cdecl,regparm(0)))
16 # else
17 /* Most other C compilers have __cdecl as a keyword */
18 # endif
19 #else
20 # define __cdecl /* Meaningless on non-i386 */
21 #endif
22
23 /* How to declare a function that *must* be inlined */
24 /* Use "extern inline" even in the gcc3+ case to avoid warnings in ctype.h */
25 #ifdef __GNUC__
26 # if __GNUC__ >= 3
27 # define __must_inline extern __inline__ __attribute__((always_inline))
28 # else
29 # define __must_inline extern __inline__
30 # endif
31 #else
32 # define __must_inline inline /* Just hope this works... */
33 #endif
34
35 /* How to declare a function that does not return */
36 #ifdef __GNUC__
37 # define __noreturn void __attribute__((noreturn))
38 #else
39 # define __noreturn void
40 #endif
41
42 /* "const" function:
43
44 Many functions do not examine any values except their arguments,
45 and have no effects except the return value. Basically this is
46 just slightly more strict class than the `pure' attribute above,
47 since function is not allowed to read global memory.
48
49 Note that a function that has pointer arguments and examines the
50 data pointed to must _not_ be declared `const'. Likewise, a
51 function that calls a non-`const' function usually must not be
52 `const'. It does not make sense for a `const' function to return
53 `void'.
54 */
55 #ifdef __GNUC__
56 # define __constfunc __attribute__((const))
57 #else
58 # define __constfunc
59 #endif
60 #undef __attribute_const__
61 #define __attribute_const__ __constfunc
62
63 /* "pure" function:
64
65 Many functions have no effects except the return value and their
66 return value depends only on the parameters and/or global
67 variables. Such a function can be subject to common subexpression
68 elimination and loop optimization just as an arithmetic operator
69 would be. These functions should be declared with the attribute
70 `pure'.
71 */
72 #ifdef __GNUC__
73 # define __purefunc __attribute__((pure))
74 #else
75 # define __purefunc
76 #endif
77 #undef __attribute_pure__
78 #define __attribute_pure__ __purefunc
79
80 /* Format attribute */
81 #ifdef __GNUC__
82 # define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
83 #else
84 # define __formatfunc(t,f,a)
85 #endif
86
87 /* malloc() function (returns unaliased pointer) */
88 #if defined(__GNUC__) && (__GNUC__ >= 3)
89 # define __mallocfunc __attribute__((malloc))
90 #else
91 # define __mallocfunc
92 #endif
93
94 /* likely/unlikely */
95 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
96 # define __likely(x) __builtin_expect(!!(x), 1)
97 # define __unlikely(x) __builtin_expect(!!(x), 0)
98 #else
99 # define __likely(x) (!!(x))
100 # define __unlikely(x) (!!(x))
101 #endif
102
103 /* Possibly unused function */
104 #ifdef __GNUC__
105 # define __unusedfunc __attribute__((unused))
106 #else
107 # define __unusedfunc
108 #endif
109
110 /* It's all user space... */
111 #define __user
112
113 /* The bitwise attribute: disallow arithmetric operations */
114 #ifdef __CHECKER__ /* sparse only */
115 # define __bitwise __attribute__((bitwise))
116 #else
117 # define __bitwise
118 #endif
119
120 /* Shut up unused warnings */
121 #ifdef __GNUC__
122 # define __attribute_used__ __attribute__((used))
123 #else
124 # define __attribute_used__
125 #endif
126
127 /* Compiler pragma to make an alias symbol */
128 #define __ALIAS(__t, __f, __p, __a) \
129 __t __f __p __attribute__((weak, alias(#__a)));
130
131 #endif