diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 36 | ||||
-rw-r--r-- | common/opthelpers.h | 39 |
3 files changed, 41 insertions, 35 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index f0161048..cdbf4855 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -696,6 +696,7 @@ SET(COMMON_OBJS common/almalloc.h common/atomic.h common/math_defs.h + common/opthelpers.h common/threads.cpp common/threads.h common/vecmat.h diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 9fdec5ac..ab0c6206 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -32,6 +32,7 @@ #include "almalloc.h" #include "threads.h" #include "ambidefs.h" +#include "opthelpers.h" template<typename T, size_t N> @@ -40,41 +41,6 @@ constexpr inline size_t countof(const T(&)[N]) noexcept #define COUNTOF countof -#ifdef __has_builtin -#define HAS_BUILTIN __has_builtin -#else -#define HAS_BUILTIN(x) (0) -#endif - -#ifdef __GNUC__ -/* LIKELY optimizes the case where the condition is true. The condition is not - * required to be true, but it can result in more optimal code for the true - * path at the expense of a less optimal false path. - */ -#define LIKELY(x) __builtin_expect(!!(x), !0) -/* The opposite of LIKELY, optimizing the case where the condition is false. */ -#define UNLIKELY(x) __builtin_expect(!!(x), 0) -/* Unlike LIKELY, ASSUME requires the condition to be true or else it invokes - * undefined behavior. It's essentially an assert without actually checking the - * condition at run-time, allowing for stronger optimizations than LIKELY. - */ -#if HAS_BUILTIN(__builtin_assume) -#define ASSUME __builtin_assume -#else -#define ASSUME(x) do { if(!(x)) __builtin_unreachable(); } while(0) -#endif - -#else - -#define LIKELY(x) (!!(x)) -#define UNLIKELY(x) (!!(x)) -#ifdef _MSC_VER -#define ASSUME __assume -#else -#define ASSUME(x) ((void)0) -#endif -#endif - #ifndef UNUSED #if defined(__cplusplus) #define UNUSED(x) diff --git a/common/opthelpers.h b/common/opthelpers.h new file mode 100644 index 00000000..b496942c --- /dev/null +++ b/common/opthelpers.h @@ -0,0 +1,39 @@ +#ifndef OPTHELPERS_H +#define OPTHELPERS_H + +#ifdef __has_builtin +#define HAS_BUILTIN __has_builtin +#else +#define HAS_BUILTIN(x) (0) +#endif + +#ifdef __GNUC__ +/* LIKELY optimizes the case where the condition is true. The condition is not + * required to be true, but it can result in more optimal code for the true + * path at the expense of a less optimal false path. + */ +#define LIKELY(x) __builtin_expect(!!(x), !0) +/* The opposite of LIKELY, optimizing the case where the condition is false. */ +#define UNLIKELY(x) __builtin_expect(!!(x), 0) +/* Unlike LIKELY, ASSUME requires the condition to be true or else it invokes + * undefined behavior. It's essentially an assert without actually checking the + * condition at run-time, allowing for stronger optimizations than LIKELY. + */ +#if HAS_BUILTIN(__builtin_assume) +#define ASSUME __builtin_assume +#else +#define ASSUME(x) do { if(!(x)) __builtin_unreachable(); } while(0) +#endif + +#else /* __GNUC__ */ + +#define LIKELY(x) (!!(x)) +#define UNLIKELY(x) (!!(x)) +#ifdef _MSC_VER +#define ASSUME __assume +#else +#define ASSUME(x) ((void)0) +#endif /* _MSC_VER */ +#endif /* __GNUC__ */ + +#endif /* OPTHELPERS_H */ |