Improve math_errhandling
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 3 Jan 2018 13:14:10 +0000 (13:14 +0000)
committerWilco Dijkstra <wdijkstr@arm.com>
Wed, 3 Jan 2018 13:14:10 +0000 (13:14 +0000)
Currently math_errhandling is always set to MATH_ERRNO | MATH_ERREXCEPT
even if -fno-math-errno is used.  It is not defined at all when fast-math
is used.  Set it to 0 with fast-math - this is noncomforming but more
useful than not define math_errhandling at all. Also take __NO_MATH_ERRNO__
into account and update comment.

* math/math.h (math_errhandling): Set to 0 with __FAST_MATH__.
Add __NO_MATH_ERRNO__ check.

ChangeLog
math/math.h

index d87d799..68b8c93 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-02  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       * math/math.h (math_errhandling): Set to 0 with __FAST_MATH__.
+       Add __NO_MATH_ERRNO__ check.
+
 2018-01-02  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/mips/mips32/libm-test-ulps: Update.
index 633681e..3c515f8 100644 (file)
@@ -665,10 +665,16 @@ enum
 # define MATH_ERRNO    1       /* errno set by math functions.  */
 # define MATH_ERREXCEPT        2       /* Exceptions raised by math functions.  */
 
-/* By default all functions support both errno and exception handling.
-   In gcc's fast math mode and if inline functions are defined this
-   might not be true.  */
-# ifndef __FAST_MATH__
+/* By default all math functions support both errno and exception handling
+   (except for soft floating point implementations which may only support
+   errno handling).  If errno handling is disabled, exceptions are still
+   supported by GLIBC.  Set math_errhandling to 0 with -ffast-math (this is
+   nonconforming but it is more useful than leaving it undefined).  */
+# ifdef __FAST_MATH__
+#  define math_errhandling     0
+# elif defined __NO_MATH_ERRNO__
+#  define math_errhandling     (MATH_ERREXCEPT)
+# else
 #  define math_errhandling     (MATH_ERRNO | MATH_ERREXCEPT)
 # endif