summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2009-09-17 09:07:17 -0700
committerAndrew Tridgell <tridge@samba.org>2009-09-17 21:52:23 -0700
commitd27140ab763a1bc5e831fe8416869ff6c875452f (patch)
tree9853a20991f711475bb6d97c3b39f282a28c13b1 /lib
parent44674efc818baaad527c73d5a0e9f3d05b76d807 (diff)
downloadsamba-d27140ab763a1bc5e831fe8416869ff6c875452f.tar.gz
samba-d27140ab763a1bc5e831fe8416869ff6c875452f.tar.bz2
samba-d27140ab763a1bc5e831fe8416869ff6c875452f.zip
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/replace/replace.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/replace/replace.h b/lib/replace/replace.h
index 2db6aa1226..6424d10c0f 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 */