diff --git a/libc/hdr/fenv_macros.h b/libc/hdr/fenv_macros.h index 041fca5f224b3..a2e4462ef02dc 100644 --- a/libc/hdr/fenv_macros.h +++ b/libc/hdr/fenv_macros.h @@ -17,10 +17,51 @@ #include +// In some environment, FE_ALL_EXCEPT is set to 0 and the remaining exceptions +// FE_* are missing. +#if (FE_ALL_EXCEPT == 0) +#ifndef FE_DIVBYZERO +#define FE_DIVBYZERO 0 +#endif // FE_DIVBYZERO + +#ifndef FE_INEXACT +#define FE_INEXACT 0 +#endif // FE_INEXACT + +#ifndef FE_INVALID +#define FE_INVALID 0 +#endif // FE_INVALID + +#ifndef FE_OVERFLOW +#define FE_OVERFLOW 0 +#endif // FE_OVERFLOW + +#ifndef FE_UNDERFLOW +#define FE_UNDERFLOW 0 +#endif // FE_UNDERFLOW +#else // If this is not provided by the system, define it for use internally. #ifndef __FE_DENORM #define __FE_DENORM (1 << 6) #endif +#endif + +// Rounding mode macros might be missing. +#ifndef FE_DOWNWARD +#define FE_DOWNWARD 0x400 +#endif // FE_DOWNWARD + +#ifndef FE_TONEAREST +#define FE_TONEAREST 0 +#endif // FE_TONEAREST + +#ifndef FE_TOWARDZERO +#define FE_TOWARDZERO 0xC00 +#endif // FE_TOWARDZERO + +#ifndef FE_UPWARD +#define FE_UPWARD 0x800 +#endif // FE_UPWARD #endif // LLVM_LIBC_FULL_BUILD