Nowadays, we have these type-generic builtins always available.

2018-10-02  Uros Bizjak  <ubiz...@gmail.com>

    * libgcc2.c (isnan): Use __builtin_isnan.
    (isfinite): Use __builtin_isfinite.
    (isinf): Use __builtin_isinf.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

OK for mainline?

Uros.
diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c
index f418f3a354de..8ac2025f7af6 100644
--- a/libgcc/libgcc2.c
+++ b/libgcc/libgcc2.c
@@ -1939,15 +1939,9 @@ NAME (TYPE x, int m)
 #define CONCAT2(A,B)   _CONCAT2(A,B)
 #define _CONCAT2(A,B)  A##B
 
-/* All of these would be present in a full C99 implementation of <math.h>
-   and <complex.h>.  Our problem is that only a few systems have such full
-   implementations.  Further, libgcc_s.so isn't currently linked against
-   libm.so, and even for systems that do provide full C99, the extra overhead
-   of all programs using libgcc having to link against libm.  So avoid it.  */
-
-#define isnan(x)       __builtin_expect ((x) != (x), 0)
-#define isfinite(x)    __builtin_expect (!isnan((x) - (x)), 1)
-#define isinf(x)       __builtin_expect (!isnan(x) & !isfinite(x), 0)
+#define isnan(x)       __builtin_isnan (x)
+#define isfinite(x)    __builtin_isfinite (x)
+#define isinf(x)       __builtin_isinf (x)
 
 #define INFINITY       CONCAT2(__builtin_huge_val, CEXT) ()
 #define I              1i

Reply via email to