diff options
author | Keith Packard via Newlib <newlib@sourceware.org> | 2020-08-04 08:04:39 -0700 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2020-08-04 19:30:45 +0200 |
commit | 45efe659b836f7e48b0671c4318c5d4ba7210504 (patch) | |
tree | b54eebfc2540544b9965453407f44e82f75eb49c /newlib/libc/include | |
parent | bb166cfc3e45ceb712fb867c116b7cae4834209d (diff) | |
download | newlib-45efe659b836f7e48b0671c4318c5d4ba7210504.zip newlib-45efe659b836f7e48b0671c4318c5d4ba7210504.tar.gz newlib-45efe659b836f7e48b0671c4318c5d4ba7210504.tar.bz2 |
libm: Set math_errhandling to match library and hardware [v2]
math_errhandling is specified to contain two bits of information:
1. MATH_ERRNO -- Set when the library sets errno
2. MATH_ERREXCEPT -- Set when math operations report exceptions
MATH_ERRNO should match whether the original math code is compiled in
_IEEE_LIBM mode and the new math code has WANT_ERRNO == 1.
MATH_ERREXCEPT should match whether the underlying hardware has
exception support. This patch adds configurations of this value for
RISC-V, ARM, Aarch64, x86 and x86_64 when using HW float.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'newlib/libc/include')
-rw-r--r-- | newlib/libc/include/machine/ieeefp.h | 11 | ||||
-rw-r--r-- | newlib/libc/include/math.h | 12 |
2 files changed, 22 insertions, 1 deletions
diff --git a/newlib/libc/include/machine/ieeefp.h b/newlib/libc/include/machine/ieeefp.h index aa8a190..b0042bb 100644 --- a/newlib/libc/include/machine/ieeefp.h +++ b/newlib/libc/include/machine/ieeefp.h @@ -87,6 +87,9 @@ # define __IEEE_BYTES_LITTLE_ENDIAN # endif #endif +#ifndef __SOFTFP__ +# define _SUPPORTS_ERREXCEPT +#endif #endif #if defined (__aarch64__) @@ -96,6 +99,9 @@ #define __IEEE_BIG_ENDIAN #endif #define __OBSOLETE_MATH_DEFAULT 0 +#ifdef __ARM_FP +# define _SUPPORTS_ERREXCEPT +#endif #endif #ifdef __epiphany__ @@ -189,10 +195,14 @@ #ifdef __i386__ #define __IEEE_LITTLE_ENDIAN +# define _SUPPORTS_ERREXCEPT #endif #ifdef __riscv #define __IEEE_LITTLE_ENDIAN +#ifdef __riscv_flen +# define _SUPPORTS_ERREXCEPT +#endif #endif #ifdef __i960__ @@ -386,6 +396,7 @@ #ifdef __x86_64__ #define __IEEE_LITTLE_ENDIAN +# define _SUPPORTS_ERREXCEPT #endif #ifdef __mep__ diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h index 1efc5b9..9fd82d9 100644 --- a/newlib/libc/include/math.h +++ b/newlib/libc/include/math.h @@ -188,7 +188,17 @@ extern int isnan (double); # define MATH_ERREXCEPT 2 #endif #ifndef math_errhandling -# define math_errhandling MATH_ERRNO +# ifdef _IEEE_LIBM +# define _MATH_ERRHANDLING_ERRNO 0 +# else +# define _MATH_ERRHANDLING_ERRNO MATH_ERRNO +# endif +# ifdef _SUPPORTS_ERREXCEPT +# define _MATH_ERRHANDLING_ERREXCEPT MATH_ERREXCEPT +# else +# define _MATH_ERRHANDLING_ERREXCEPT 0 +# endif +# define math_errhandling (_MATH_ERRHANDLING_ERRNO | _MATH_ERRHANDLING_ERREXCEPT) #endif extern int __isinff (float x); |