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>
This commit is contained in:
parent
bb166cfc3e
commit
45efe659b8
@ -87,6 +87,9 @@
|
|||||||
# define __IEEE_BYTES_LITTLE_ENDIAN
|
# define __IEEE_BYTES_LITTLE_ENDIAN
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef __SOFTFP__
|
||||||
|
# define _SUPPORTS_ERREXCEPT
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (__aarch64__)
|
#if defined (__aarch64__)
|
||||||
@ -96,6 +99,9 @@
|
|||||||
#define __IEEE_BIG_ENDIAN
|
#define __IEEE_BIG_ENDIAN
|
||||||
#endif
|
#endif
|
||||||
#define __OBSOLETE_MATH_DEFAULT 0
|
#define __OBSOLETE_MATH_DEFAULT 0
|
||||||
|
#ifdef __ARM_FP
|
||||||
|
# define _SUPPORTS_ERREXCEPT
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __epiphany__
|
#ifdef __epiphany__
|
||||||
@ -189,10 +195,14 @@
|
|||||||
|
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
#define __IEEE_LITTLE_ENDIAN
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
# define _SUPPORTS_ERREXCEPT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __riscv
|
#ifdef __riscv
|
||||||
#define __IEEE_LITTLE_ENDIAN
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#ifdef __riscv_flen
|
||||||
|
# define _SUPPORTS_ERREXCEPT
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __i960__
|
#ifdef __i960__
|
||||||
@ -386,6 +396,7 @@
|
|||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
#define __IEEE_LITTLE_ENDIAN
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
# define _SUPPORTS_ERREXCEPT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __mep__
|
#ifdef __mep__
|
||||||
|
@ -188,7 +188,17 @@ extern int isnan (double);
|
|||||||
# define MATH_ERREXCEPT 2
|
# define MATH_ERREXCEPT 2
|
||||||
#endif
|
#endif
|
||||||
#ifndef math_errhandling
|
#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
|
#endif
|
||||||
|
|
||||||
extern int __isinff (float x);
|
extern int __isinff (float x);
|
||||||
|
Loading…
Reference in New Issue
Block a user