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__)