void _gnutls_mpi_log (const char *prefix, bigint_t a);
#ifdef C99_MACROS
-#define LEVEL(l, ...) do { if (_gnutls_log_level >= l || _gnutls_log_level > 9) \
+#define LEVEL(l, ...) do { if (unlikely(_gnutls_log_level >= l || _gnutls_log_level > 9)) \
_gnutls_log( l, __VA_ARGS__); } while(0)
-#define LEVEL_EQ(l, ...) do { if (_gnutls_log_level == l || _gnutls_log_level > 9) \
+#define LEVEL_EQ(l, ...) do { if (unlikely(_gnutls_log_level == l || _gnutls_log_level > 9)) \
_gnutls_log( l, __VA_ARGS__); } while(0)
#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
# define memxor gl_memxor
#endif
+#ifdef __GNUC__
+# ifndef _GNUTLS_GCC_VERSION
+# define _GNUTLS_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+# endif
+# if _GNUTLS_GCC_VERSION >= 30100
+# define likely(x) __builtin_expect((x), 1)
+# define unlikely(x) __builtin_expect((x), 0)
+# endif
+#endif
+
+#ifndef likely
+# define likely
+# define unlikely
+#endif
+
/* some systems had problems with long long int, thus,
* it is not used.
*/