lib: add OPTIMIZE + assume() to compiler.h

Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
David Lamparter 2019-06-06 18:51:32 +02:00
parent f7288f1515
commit 111a04f740

View File

@ -33,6 +33,9 @@ extern "C" {
#endif
# define _CONSTRUCTOR(x) constructor(x)
# define _DEPRECATED(x) deprecated(x)
# if __has_builtin(assume)
# define assume(x) __builtin_assume(x)
# endif
#elif defined(__GNUC__)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)
# define _RET_NONNULL , returns_nonnull
@ -44,12 +47,28 @@ extern "C" {
#endif
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
# define _DEPRECATED(x) deprecated(x)
# define assume(x) do { if (!(x)) __builtin_unreachable(); } while (0)
#endif
#if __GNUC__ < 5
# define __has_attribute(x) 0
#endif
#if __GNUC__ >= 7
# define _FALLTHROUGH __attribute__((fallthrough));
#endif
#endif
#if __has_attribute(hot)
# define _OPTIMIZE_HOT __attribute__((hot))
#else
# define _OPTIMIZE_HOT
#endif
#if __has_attribute(optimize)
# define _OPTIMIZE_O3 __attribute__((optimize("3")))
#else
# define _OPTIMIZE_O3
#endif
#define OPTIMIZE _OPTIMIZE_O3 _OPTIMIZE_HOT
#if !defined(__GNUC__)
#error module code needs GCC visibility extensions
#elif __GNUC__ < 4
@ -85,6 +104,9 @@ extern "C" {
#ifndef _DEPRECATED
#define _DEPRECATED(x) deprecated
#endif
#ifndef assume
#define assume(x)
#endif
/* pure = function does not modify memory & return value is the same if
* memory hasn't changed (=> allows compiler to optimize)