Common: add macros for assisting branch prediction
This commit is contained in:
parent
16582a0459
commit
d398e9ef61
|
@ -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__)
|
||||
|
|
Loading…
Reference in New Issue