Common: add macros for assisting branch prediction

This commit is contained in:
Tillmann Karras 2014-07-14 01:52:14 +02:00
parent 16582a0459
commit d398e9ef61
1 changed files with 23 additions and 1 deletions

View File

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