mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
Remove __builtin_expect
prediction assistance
In microbenchmarks I tried, using `__builtin_expect` to indicate which branch was likely/unlikely was never faster, and often slower, than just omitting. In GSL, this is used only for `Expects` and `Ensures` which are nearly always true, and all processors have long been great at predicting such branches well.
This commit is contained in:
parent
0140ab1d73
commit
c20a54c8e7
@ -57,16 +57,6 @@
|
|||||||
#define GSL_STRINGIFY_DETAIL(x) #x
|
#define GSL_STRINGIFY_DETAIL(x) #x
|
||||||
#define GSL_STRINGIFY(x) GSL_STRINGIFY_DETAIL(x)
|
#define GSL_STRINGIFY(x) GSL_STRINGIFY_DETAIL(x)
|
||||||
|
|
||||||
#if defined(__clang__) || defined(__GNUC__)
|
|
||||||
#define GSL_LIKELY(x) __builtin_expect(!!(x), 1)
|
|
||||||
#define GSL_UNLIKELY(x) __builtin_expect(!!(x), 0)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define GSL_LIKELY(x) (!!(x))
|
|
||||||
#define GSL_UNLIKELY(x) (!!(x))
|
|
||||||
#endif // defined(__clang__) || defined(__GNUC__)
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// GSL_ASSUME(cond)
|
// GSL_ASSUME(cond)
|
||||||
//
|
//
|
||||||
@ -123,7 +113,7 @@ namespace details
|
|||||||
} // namespace gsl
|
} // namespace gsl
|
||||||
|
|
||||||
#define GSL_CONTRACT_CHECK(type, cond) \
|
#define GSL_CONTRACT_CHECK(type, cond) \
|
||||||
(GSL_LIKELY(cond) ? static_cast<void>(0) : gsl::details::terminate())
|
((cond) ? static_cast<void>(0) : gsl::details::terminate())
|
||||||
|
|
||||||
#define Expects(cond) GSL_CONTRACT_CHECK("Precondition", cond)
|
#define Expects(cond) GSL_CONTRACT_CHECK("Precondition", cond)
|
||||||
#define Ensures(cond) GSL_CONTRACT_CHECK("Postcondition", cond)
|
#define Ensures(cond) GSL_CONTRACT_CHECK("Postcondition", cond)
|
||||||
|
Loading…
Reference in New Issue
Block a user