From d62e37b4a9200c35f44176b6e3fd159f9d7d1ea2 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 9 Mar 2007 21:39:19 +0000 Subject: [PATCH] r12473@Kushana: nickm | 2007-03-06 15:49:45 -0500 Excise PREDICT and PREDICT_FALSE in favor of PREDICT_LIKELY and PREDICT_UNLIKELY. svn:r9781 --- src/common/compat.h | 10 ++++++---- src/common/util.h | 9 ++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/common/compat.h b/src/common/compat.h index 07f194282f..a6c339ee73 100644 --- a/src/common/compat.h +++ b/src/common/compat.h @@ -98,15 +98,17 @@ extern INLINE double U64_TO_DBL(uint64_t x) { #define ATTR_PURE __attribute__((pure)) #define ATTR_MALLOC __attribute__((malloc)) #define ATTR_NONNULL(x) __attribute__((nonnull x)) -#define PREDICT(exp, val) __builtin_expect((exp), (val)) -#define PREDICT_LIKELY(exp) PREDICT((exp), 1) -#define PREDICT_UNLIKELY(exp) PREDICT((exp), 0) +/** Macro: Evaluates to exp and hints the compiler that the value + * of exp will probably be true. */ +#define PREDICT_LIKELY(exp) __builtin_expect((exp), 1) +/** Macro: Evaluates to exp and hints the compiler that the value + * of exp will probably be false. */ +#define PREDICT_UNLIKELY(exp) __builtin_expect((exp), 0) #else #define ATTR_NORETURN #define ATTR_PURE #define ATTR_MALLOC #define ATTR_NONNULL(x) -#define PREDICT(exp, val) (exp) #define PREDICT_LIKELY(exp) (exp) #define PREDICT_UNLIKELY(exp) (exp) #endif diff --git a/src/common/util.h b/src/common/util.h index 9f37e6ad3f..1d524cf66f 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -39,17 +39,16 @@ #error "Sorry; we don't support building with NDEBUG." #else #ifdef __GNUC__ -/** Macro: evaluate the expression x, which we expect to be false. - * Used to hint the compiler that a branch won't be taken. */ -#define PREDICT_FALSE(x) PREDICT_UNLIKELY((x) == ((typeof(x)) 0)) +/* Give an int-valued version of !x that won't confuse PREDICT_UNLIKELY. */ +#define IS_FALSE_AS_INT(x) ((x) == ((typeof(x)) 0)) #else -#define PREDICT_FALSE(x) !(x) +#define IS_FALSE_AS_INT(x) !(x) #endif /** Like assert(3), but send assertion failures to the log as well as to * stderr. */ #define tor_assert(expr) do { \ - if (PREDICT_FALSE(expr)) { \ + if (PREDICT_UNLIKELY(IS_FALSE_AS_INT(expr))) { \ log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \ _SHORT_FILE_, __LINE__, __func__, #expr); \ fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \