]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r12473@Kushana: nickm | 2007-03-06 15:49:45 -0500
authorNick Mathewson <nickm@torproject.org>
Fri, 9 Mar 2007 21:39:19 +0000 (21:39 +0000)
committerNick Mathewson <nickm@torproject.org>
Fri, 9 Mar 2007 21:39:19 +0000 (21:39 +0000)
 Excise PREDICT and PREDICT_FALSE in favor of PREDICT_LIKELY and PREDICT_UNLIKELY.

svn:r9781

src/common/compat.h
src/common/util.h

index 07f194282f16c50e0d2a37c8ac7a61c5bc51b55c..a6c339ee73f22b13ca049e4fd2e881e25930c5c8 100644 (file)
@@ -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 <b>exp</b> and hints the compiler that the value
+ * of <b>exp</b> will probably be true. */
+#define PREDICT_LIKELY(exp) __builtin_expect((exp), 1)
+/** Macro: Evaluates to <b>exp</b> and hints the compiler that the value
+ * of <b>exp</b> 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
index 9f37e6ad3f89225e18dc5b31ca8958fdc5b23cb2..1d524cf66f1fc64a08bee5d242e543aedc23340d 100644 (file)
 #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",      \