diff --git a/newlib/libc/include/machine/ieeefp.h b/newlib/libc/include/machine/ieeefp.h index aa8a1903b..b0042bbf6 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 1efc5b92c..9fd82d9fa 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);