Changeset - r24517:6e602c28f35b
[Not reviewed]
master
0 1 0
Jonathan G Rennison - 8 years ago 2016-03-10 00:13:58
j.g.rennison@gmail.com
Codechange: Use likely/__builtin_expect for assertion macros
1 file changed with 10 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/stdafx.h
Show inline comments
 
@@ -417,6 +417,14 @@ assert_compile(SIZE_MAX >= UINT32_MAX);
 
#	define CloseConnection OTTD_CloseConnection
 
#endif /* __APPLE__ */
 

	
 
#ifdef __GNUC__
 
#	define likely(x)   __builtin_expect(!!(x), 1)
 
#	define unlikely(x) __builtin_expect(!!(x), 0)
 
#else
 
#	define likely(x)   (x)
 
#	define unlikely(x) (x)
 
#endif
 

	
 
void NORETURN CDECL usererror(const char *str, ...) WARN_FORMAT(1, 2);
 
void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2);
 
#define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__)
 
@@ -424,13 +432,13 @@ void NORETURN CDECL error(const char *st
 
/* For non-debug builds with assertions enabled use the special assertion handler. */
 
#if defined(NDEBUG) && defined(WITH_ASSERT)
 
#	undef assert
 
#	define assert(expression) if (!(expression)) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression);
 
#	define assert(expression) if (unlikely(!(expression))) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression);
 
#endif
 

	
 
/* Asserts are enabled if NDEBUG isn't defined or WITH_ASSERT is defined. */
 
#if !defined(NDEBUG) || defined(WITH_ASSERT)
 
#	define OTTD_ASSERT
 
#	define assert_msg(expression, msg, ...) if (!(expression)) error("Assertion failed at line %i of %s: %s\n\t" msg, __LINE__, __FILE__, #expression, __VA_ARGS__);
 
#	define assert_msg(expression, msg, ...) if (unlikely(!(expression))) error("Assertion failed at line %i of %s: %s\n\t" msg, __LINE__, __FILE__, #expression, __VA_ARGS__);
 
#else
 
#	define assert_msg(expression, msg, ...)
 
#endif
0 comments (0 inline, 0 general)