From d27140ab763a1bc5e831fe8416869ff6c875452f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 17 Sep 2009 09:07:17 -0700 Subject: [PATCH] libreplace: added likely()/unlikely() macros for gcc These macros allow the compile to better optimise code that has a lot of if statements. I particularly want to use this for our low level generated NDR code. --- lib/replace/replace.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/replace/replace.h b/lib/replace/replace.h index 2db6aa1226c..6424d10c0f9 100644 --- a/lib/replace/replace.h +++ b/lib/replace/replace.h @@ -704,4 +704,23 @@ char *ufc_crypt(const char *key, const char *salt); #endif #endif +/* these macros gain us a few percent of speed on gcc */ +#if (__GNUC__ >= 3) +/* the strange !! is to ensure that __builtin_expect() takes either 0 or 1 + as its first argument */ +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#endif +#ifndef unlikely +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif +#else +#ifndef likely +#define likely(x) (x) +#endif +#ifndef unlikely +#define unlikely(x) (x) +#endif +#endif + #endif /* _LIBREPLACE_REPLACE_H */