summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2017-11-11 23:42:52 +0200
committerKhaled Hosny <khaledhosny@eglug.org>2017-11-12 00:28:22 +0200
commite428f970f69750094f6dbd40dee8e1d36182a545 (patch)
tree4a2c3dcf06e6ff236bce54f719e462fafac4dc80
parent72e901ceb7850b9e8a04c60e997c46df96676c44 (diff)
downloadfribidi-e428f970f69750094f6dbd40dee8e1d36182a545.tar.gz
Copy LIKELY/UNLIKELY from GLib
-rw-r--r--lib/common.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/common.h b/lib/common.h
index 739e647..8ef427e 100644
--- a/lib/common.h
+++ b/lib/common.h
@@ -155,8 +155,22 @@
/* LIKEYLY and UNLIKELY are used to give a hint on branch prediction to the
* compiler. */
#ifndef LIKELY
-# define LIKELY
-# define UNLIKELY
+# if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
+# define FRIBIDI_BOOLEAN_EXPR(expr) \
+ __extension__ ({ \
+ int fribidi_bool_var; \
+ if (expr) \
+ fribidi_bool_var = 1; \
+ else \
+ fribidi_bool_var = 0; \
+ fribidi_bool_var; \
+ })
+# define LIKELY(expr) (__builtin_expect (FRIBIDI_BOOLEAN_EXPR(expr), 1))
+# define UNLIKELY(expr) (__builtin_expect (FRIBIDI_BOOLEAN_EXPR(expr), 0))
+# else
+# define LIKELY
+# define UNLIKELY
+# endif /* _GNUC_ */
#endif /* !LIKELY */
#ifndef FRIBIDI_EMPTY_STMT