LibWasm: Fix comparisons between 0.0 and -0.0

According to the spec, -0.0 < 0.0.
This commit is contained in:
Diego
2024-07-06 13:54:56 -07:00
committed by Ali Mohammad Pur
parent c103001f16
commit 31c7e98a4a

View File

@@ -329,14 +329,12 @@ struct Minimum {
auto operator()(Lhs lhs, Rhs rhs) const auto operator()(Lhs lhs, Rhs rhs) const
{ {
if constexpr (IsFloatingPoint<Lhs> || IsFloatingPoint<Rhs>) { if constexpr (IsFloatingPoint<Lhs> || IsFloatingPoint<Rhs>) {
if (isnan(lhs)) if (isnan(lhs) || isnan(rhs)) {
return lhs; return isnan(lhs) ? lhs : rhs;
if (isnan(rhs)) }
return rhs; if (lhs == 0 && rhs == 0) {
if (isinf(lhs)) return signbit(lhs) ? lhs : rhs;
return lhs > 0 ? rhs : lhs; }
if (isinf(rhs))
return rhs > 0 ? lhs : rhs;
} }
return min(lhs, rhs); return min(lhs, rhs);
} }
@@ -349,14 +347,12 @@ struct Maximum {
auto operator()(Lhs lhs, Rhs rhs) const auto operator()(Lhs lhs, Rhs rhs) const
{ {
if constexpr (IsFloatingPoint<Lhs> || IsFloatingPoint<Rhs>) { if constexpr (IsFloatingPoint<Lhs> || IsFloatingPoint<Rhs>) {
if (isnan(lhs)) if (isnan(lhs) || isnan(rhs)) {
return lhs; return isnan(lhs) ? lhs : rhs;
if (isnan(rhs)) }
return rhs; if (lhs == 0 && rhs == 0) {
if (isinf(lhs)) return signbit(lhs) ? rhs : lhs;
return lhs > 0 ? lhs : rhs; }
if (isinf(rhs))
return rhs > 0 ? rhs : lhs;
} }
return max(lhs, rhs); return max(lhs, rhs);
} }