math: add macros for static branch prediction hints
authorSzabolcs Nagy <nsz@port70.net>
Thu, 29 Nov 2018 23:33:40 +0000 (23:33 +0000)
committerRich Felker <dalias@aerifal.cx>
Wed, 17 Apr 2019 17:12:08 +0000 (13:12 -0400)
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%.

src/internal/libm.h

index 62da4bdb29f1ae0ed88303f058c2b65c1164deb7..28537603a78408e64e0bfca4b812411888f0e716 100644 (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