diff --git a/include/d/dolzel_base.pch b/include/d/dolzel_base.pch index b478b643e9b..d430859ca26 100644 --- a/include/d/dolzel_base.pch +++ b/include/d/dolzel_base.pch @@ -6,6 +6,7 @@ // Fixes weak .data #include // IWYU pragma: export +#include // IWYU pragma: export #include "JSystem/J3DGraphBase/J3DMatBlock.h" // IWYU pragma: export #include "Z2AudioLib/Z2Calc.h" // IWYU pragma: export diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/limits b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/limits index 75f643aa613..5da476c21fb 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/limits +++ b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/limits @@ -73,17 +73,31 @@ class numeric_limits { public: inline static float min(); inline static float max() { return FLT_MAX; } - inline static float signaling_NaN() { return *(float*)__float_nan; } + inline static float signaling_NaN() { +#if __REVOLUTION_SDK__ + static const unsigned long x = 0x7fbfffffUL; + return *reinterpret_cast(&x); +#else + return *(float*)__float_nan; +#endif + } }; #if __REVOLUTION_SDK__ template <> class numeric_limits { public: - static const unsigned long long x = 0x7ff0000000000001ULL; inline static double min(); inline static double max(); - inline static double signaling_NaN() { return *reinterpret_cast(&x); } + inline static double signaling_NaN() { + static const unsigned long long x = 0x7ff7ffffffffffffULL; + return *reinterpret_cast(&x); + } + //TODO: this function is almost certainly fake, but for some reason the constant shows up twice in debug .rodata + inline static double signaling_NaN_2() { + static const unsigned long long x = 0x7ff7ffffffffffffULL; + return *reinterpret_cast(&x); + } }; #endif