chiark / gitweb /
[PATCH] add udevtest program to build
[elogind.git] / klibc / klibc / include / klibc / compiler.h
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 #ifdef __i386__
12 # ifdef __GNUC__
13 #  define __cdecl __attribute__((cdecl,regparm(0)))
14 # else
15   /* Most other C compilers have __cdecl as a keyword */
16 # endif
17 #endif
18
19 /* How to declare a function that *must* be inlined */
20 #ifdef __GNUC__
21 # if __GNUC_MAJOR__ >= 3
22 #  define __must_inline static __inline__ __attribute__((always_inline))
23 # else
24 #  define __must_inline extern __inline__
25 # endif
26 #else
27 # define __must_inline inline   /* Just hope this works... */
28 #endif
29
30 /* How to declare a function that does not return */
31 #ifdef __GNUC__
32 # define __noreturn void __attribute__((noreturn))
33 #else
34 # define __noreturn void
35 #endif
36
37 /* How to declare a "constant" function (a function in the
38    mathematical sense) */
39 #ifdef __GNUC__
40 # define __constfunc __attribute__((const))
41 #else
42 # define __constfunc
43 #endif
44
45 /* Format attribute */
46 #ifdef __GNUC__
47 # define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
48 #else
49 # define __formatfunc(t,f,a)
50 #endif
51
52 /* likely/unlikely */
53 #if defined(__GNUC__) && (__GNUC_MAJOR__ > 2 || (__GNUC_MAJOR__ == 2 && __GNUC_MINOR__ >= 95))
54 # define __likely(x)   __builtin_expect((x), 1)
55 # define __unlikely(x) __builtin_expect((x), 0)
56 #else
57 # define __likely(x)   (x)
58 # define __unlikely(x) (x)
59 #endif
60
61 /* Possibly unused function */
62 #ifdef __GNUC__
63 # define __unusedfunc   __attribute__((unused))
64 #else
65 # define __unusedfunc
66 #endif
67
68 #endif