From 34aa0c5bd7493b6e01983df28f04af46a3d99967 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 30 May 2018 11:25:52 -0300 Subject: new macros 'likely'/'unlikely' with hints for jump predictions (used only in errors for now) --- llimits.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'llimits.h') diff --git a/llimits.h b/llimits.h index 9a3ae8d0..725d7c8b 100644 --- a/llimits.h +++ b/llimits.h @@ -1,5 +1,5 @@ /* -** $Id: llimits.h,v 1.148 2017/12/28 11:51:00 roberto Exp roberto $ +** $Id: llimits.h,v 1.149 2018/01/28 15:13:26 roberto Exp roberto $ ** Limits, basic types, and some other 'installation-dependent' definitions ** See Copyright Notice in lua.h */ @@ -130,9 +130,27 @@ typedef LUAI_UACINT l_uacInt; #endif +/* +** macros to improve jump prediction (used mainly for error handling) +*/ +#if !defined(likely) + +#if defined(__GNUC__) +#define likely(x) (__builtin_expect(((x) != 0), 1)) +#define unlikely(x) (__builtin_expect(((x) != 0), 0)) +#else +#define likely(x) (x) +#define unlikely(x) (x) +#endif + +#endif + + /* ** non-return type */ +#if !defined(l_noret) + #if defined(__GNUC__) #define l_noret void __attribute__((noreturn)) #elif defined(_MSC_VER) && _MSC_VER >= 1200 @@ -141,6 +159,7 @@ typedef LUAI_UACINT l_uacInt; #define l_noret void #endif +#endif /* -- cgit v1.2.3-55-g6feb