|
42 | 42 | #define FP_LLOGBNAN LONG_MAX |
43 | 43 | #endif |
44 | 44 |
|
45 | | -#if defined(__NVPTX__) || defined(__AMDGPU__) || defined(__FAST_MATH__) |
46 | | -#define math_errhandling 0 |
47 | | -#elif defined(__NO_MATH_ERRNO__) |
48 | | -#define math_errhandling (MATH_ERREXCEPT) |
| 45 | +// Math error handling. Target support is assumed to be existent unless |
| 46 | +// explicitly disabled. |
| 47 | +#if defined(__NVPTX__) || defined(__AMDGPU__) || defined(__FAST_MATH__) || \ |
| 48 | + defined(__NO_MATH_ERRNO__) |
| 49 | +#define __LIBC_SUPPORTS_MATH_ERRNO 0 |
| 50 | +#else |
| 51 | +#define __LIBC_SUPPORTS_MATH_ERRNO 1 |
| 52 | +#endif |
| 53 | + |
| 54 | +#if defined(__FAST_MATH__) || \ |
| 55 | + ((defined(__arm__) || defined(_M_ARM) || defined(__thumb__) || \ |
| 56 | + defined(__aarch64__) || defined(_M_ARM64)) && \ |
| 57 | + !defined(__ARM_FP)) |
| 58 | +#define __LIBC_SUPPORTS_MATH_ERREXCEPT 0 |
49 | 59 | #else |
| 60 | +#define __LIBC_SUPPORTS_MATH_ERREXCEPT 1 |
| 61 | +#endif |
| 62 | + |
| 63 | +#if __LIBC_SUPPORTS_MATH_ERRNO && __LIBC_SUPPORTS_MATH_ERREXCEPT |
50 | 64 | #define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT) |
| 65 | +#elif __LIBC_SUPPORTS_MATH_ERRNO |
| 66 | +#define math_errhandling (MATH_ERRNO) |
| 67 | +#elif __LIBC_SUPPORTS_MATH_ERREXCEPT |
| 68 | +#define math_errhandling (MATH_ERREXCEPT) |
| 69 | +#else |
| 70 | +#define math_errhandling 0 |
51 | 71 | #endif |
52 | 72 |
|
| 73 | +#undef __LIBC_SUPPORTS_MATH_ERRNO |
| 74 | +#undef __LIBC_SUPPORTS_MATH_ERREXCEPT |
| 75 | + |
53 | 76 | // POSIX math constants |
54 | 77 | // https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/math.h.html |
55 | 78 | #define M_E (__extension__ 0x1.5bf0a8b145769p1) |
|
0 commit comments