From 111a04f740ce257478029837a9c6ee0f851935a0 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Thu, 6 Jun 2019 18:51:32 +0200 Subject: [PATCH] lib: add OPTIMIZE + assume() to compiler.h Signed-off-by: David Lamparter --- lib/compiler.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/compiler.h b/lib/compiler.h index 7509428220..9ce91e3361 100644 --- a/lib/compiler.h +++ b/lib/compiler.h @@ -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) -- 2.39.5