From d398e9ef61f01b4b775ecc331ba207e30843dada Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Mon, 14 Jul 2014 01:52:14 +0200 Subject: [PATCH] Common: add macros for assisting branch prediction --- Source/Core/Common/Common.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/Common.h b/Source/Core/Common/Common.h index 232acf5e87..fa1cece364 100644 --- a/Source/Core/Common/Common.h +++ b/Source/Core/Common/Common.h @@ -15,7 +15,7 @@ #define __has_feature(x) 0 #endif -// SVN version number +// Git version number extern const char *scm_desc_str; extern const char *scm_branch_str; extern const char *scm_rev_str; @@ -37,6 +37,28 @@ extern const char *netplay_dolphin_ver; #define UNUSED #endif +#if defined(__GNUC__) || __clang__ + #define EXPECT(x, y) __builtin_expect(x, y) + #define LIKELY(x) __builtin_expect(!!(x), 1) + #define UNLIKELY(x) __builtin_expect(!!(x), 0) + // Careful, wrong assumptions result in undefined behavior! + #define UNREACHABLE __builtin_unreachable() + // Careful, wrong assumptions result in undefined behavior! + #define ASSUME(x) do { if (!x) __builtin_unreachable(); } while (0) +#else + #define EXPECT(x, y) (x) + #define LIKELY(x) (x) + #define UNLIKELY(x) (x) + // Careful, wrong assumptions result in undefined behavior! + #define UNREACHABLE ASSUME(0) + #if defined(_MSC_VER) + // Careful, wrong assumptions result in undefined behavior! + #define ASSUME(x) __assume(x) + #else + #define ASSUME(x) do { void(x); } while (0) + #endif +#endif + #define STACKALIGN #if __cplusplus >= 201103 || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)