changeset 6788:993760061348 HEAD

Added likely() and unlikely() macros. Use unlikely() with asserts.
author Timo Sirainen <tss@iki.fi>
date Sun, 11 Nov 2007 23:29:41 +0200
parents b0dc70ac3372
children ee9bc72e0ed2
files src/lib/macros.h
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/macros.h	Sun Nov 11 21:33:33 2007 +0200
+++ b/src/lib/macros.h	Sun Nov 11 23:29:41 2007 +0200
@@ -168,23 +168,31 @@
 #  define GNUC_PRETTY_FUNCTION ""
 #endif
 
+#ifdef __GNUC__
+#  define unlikely(expr) __builtin_expect(!!(expr), 0)
+#  define likely(expr) __builtin_expect(!!(expr), 1)
+#else
+#  define unlikely(expr)
+#  define likely(expr)
+#endif
+
 /* Provide macros for error handling. */
 #ifdef DISABLE_ASSERTS
 #  define i_assert(expr)
 #elif defined (__GNUC__) && !defined (__STRICT_ANSI__)
 
 #define i_assert(expr)			STMT_START{			\
-     if (!(expr))							\
+     if (unlikely(!(expr)))						\
        i_panic("file %s: line %d (%s): assertion failed: (%s)",		\
-		__FILE__,							\
-		__LINE__,							\
+		__FILE__,						\
+		__LINE__,						\
 		__PRETTY_FUNCTION__,					\
 		#expr);			}STMT_END
 
 #else /* !__GNUC__ */
 
 #define i_assert(expr)			STMT_START{		\
-     if (!(expr))						\
+     if (unlikely(!(expr)))					\
        i_panic("file %s: line %d: assertion failed: (%s)",	\
 	      __FILE__,						\
 	      __LINE__,						\