69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
/*
|
|
* klibc/compiler.h
|
|
*
|
|
* Various compiler features
|
|
*/
|
|
|
|
#ifndef _KLIBC_COMPILER_H
|
|
#define _KLIBC_COMPILER_H
|
|
|
|
/* Specific calling conventions */
|
|
#ifdef __i386__
|
|
# ifdef __GNUC__
|
|
# define __cdecl __attribute__((cdecl,regparm(0)))
|
|
# else
|
|
/* Most other C compilers have __cdecl as a keyword */
|
|
# endif
|
|
#endif
|
|
|
|
/* How to declare a function that *must* be inlined */
|
|
#ifdef __GNUC__
|
|
# if __GNUC_MAJOR__ >= 3
|
|
# define __must_inline static __inline__ __attribute__((always_inline))
|
|
# else
|
|
# define __must_inline extern __inline__
|
|
# endif
|
|
#else
|
|
# define __must_inline inline /* Just hope this works... */
|
|
#endif
|
|
|
|
/* How to declare a function that does not return */
|
|
#ifdef __GNUC__
|
|
# define __noreturn void __attribute__((noreturn))
|
|
#else
|
|
# define __noreturn void
|
|
#endif
|
|
|
|
/* How to declare a "constant" function (a function in the
|
|
mathematical sense) */
|
|
#ifdef __GNUC__
|
|
# define __constfunc __attribute__((const))
|
|
#else
|
|
# define __constfunc
|
|
#endif
|
|
|
|
/* Format attribute */
|
|
#ifdef __GNUC__
|
|
# define __formatfunc(t,f,a) __attribute__((format(t,f,a)))
|
|
#else
|
|
# define __formatfunc(t,f,a)
|
|
#endif
|
|
|
|
/* likely/unlikely */
|
|
#if defined(__GNUC__) && (__GNUC_MAJOR__ > 2 || (__GNUC_MAJOR__ == 2 && __GNUC_MINOR__ >= 95))
|
|
# define __likely(x) __builtin_expect((x), 1)
|
|
# define __unlikely(x) __builtin_expect((x), 0)
|
|
#else
|
|
# define __likely(x) (x)
|
|
# define __unlikely(x) (x)
|
|
#endif
|
|
|
|
/* Possibly unused function */
|
|
#ifdef __GNUC__
|
|
# define __unusedfunc __attribute__((unused))
|
|
#else
|
|
# define __unusedfunc
|
|
#endif
|
|
|
|
#endif
|