This ensures `is_iec559` is defined correctly under all long double ABIs, including musl and its 64-bit long double. Also, `__ppc__` or `__ppc64__` is not defined on gcc. --- a/include/limits +++ b/include/limits @@ -426,8 +426,14 @@ protected: _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT {return __builtin_nansl("");} _LIBCPP_INLINE_VISIBILITY static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT {return __LDBL_DENORM_MIN__;} -#if (defined(__ppc__) || defined(__ppc64__)) +#if defined(__powerpc__) || defined(__powerpc64__) +#if (__LDBL_MAX_EXP__ > __DBL_MAX_EXP__) || (__LDBL_MANT_DIG__ == __DBL_MANT_DIG__) + /* IEEE 754 quadruple or double precision */ + static _LIBCPP_CONSTEXPR const bool is_iec559 = true; +#else + /* 128-bit IBM double-double */ static _LIBCPP_CONSTEXPR const bool is_iec559 = false; +#endif #else static _LIBCPP_CONSTEXPR const bool is_iec559 = true; #endif