math: add macros for static branch prediction hints

These don't have an effectw with -Os so not useful with default settings
other than documenting the expectation.

With --enable-optimize=internal,malloc,string,math the libc.so code size
increases by 18K on x86_64 and performance varies in -2% .. +10%.
This commit is contained in:
Szabolcs Nagy 2018-11-29 23:33:40 +00:00 committed by Rich Felker
parent 4f8acf953c
commit 3c3763fc52
1 changed files with 9 additions and 0 deletions

View File

@ -59,6 +59,15 @@ union ldshape {
#error Unsupported long double representation
#endif
/* Helps static branch prediction so hot path can be better optimized. */
#ifdef __GNUC__
#define predict_true(x) __builtin_expect(!!(x), 1)
#define predict_false(x) __builtin_expect(x, 0)
#else
#define predict_true(x) (x)
#define predict_false(x) (x)
#endif
/* Evaluate an expression as the specified type. With standard excess
precision handling a type cast or assignment is enough (with
-ffloat-store an assignment is required, in old compilers argument