summaryrefslogtreecommitdiff
path: root/libc/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'libc/stdlib')
-rw-r--r--libc/stdlib/malloc/malloc.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/libc/stdlib/malloc/malloc.h b/libc/stdlib/malloc/malloc.h
index 4914a9edc..30a28b776 100644
--- a/libc/stdlib/malloc/malloc.h
+++ b/libc/stdlib/malloc/malloc.h
@@ -110,14 +110,16 @@ extern malloc_mutex_t __malloc_sbrk_lock;
#endif /* __UCLIBC_HAS_THREADS__ */
-/* Use branch-prediction macros from libc if defined. */
-#ifdef likely
-#define __malloc_likely(c) likely(c)
-#define __malloc_unlikely(c) unlikely(c)
+/* branch-prediction macros; they may already be defined by libc. */
+#ifndef likely
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#define likely(cond) __builtin_expect(!!(int)(cond), 1)
+#define unlikely(cond) __builtin_expect((int)(cond), 0)
#else
-#define __malloc_likely(c) (c)
-#define __malloc_unlikely(c) (c)
+#define likely(cond) (cond)
+#define unlikely(cond) (cond)
#endif
+#endif /* !likely */
/* Define MALLOC_DEBUGGING to cause malloc to emit debugging info to stderr. */