LibWasm: Implement fx.nearest using nearbyint() instead of round()

This instruction wants RoundingMode::ToEven, so let's use the correct
function.
This commit is contained in:
Ali Mohammad Pur 2021-08-30 16:21:21 +04:30 committed by Andreas Kling
parent e93c740df5
commit 2c7e2e351a
Notes: sideshowbarker 2024-07-18 05:03:55 +09:00
2 changed files with 5 additions and 5 deletions

View file

@ -824,7 +824,7 @@ void BytecodeInterpreter::interpret(Configuration& configuration, InstructionPoi
case Instructions::f32_trunc.value():
return unary_operation<float, float, Operators::Truncate>(configuration);
case Instructions::f32_nearest.value():
return unary_operation<float, float, Operators::Round>(configuration);
return unary_operation<float, float, Operators::NearbyIntegral>(configuration);
case Instructions::f32_sqrt.value():
return unary_operation<float, float, Operators::SquareRoot>(configuration);
case Instructions::f32_add.value():
@ -852,7 +852,7 @@ void BytecodeInterpreter::interpret(Configuration& configuration, InstructionPoi
case Instructions::f64_trunc.value():
return unary_operation<double, double, Operators::Truncate>(configuration);
case Instructions::f64_nearest.value():
return unary_operation<double, double, Operators::Round>(configuration);
return unary_operation<double, double, Operators::NearbyIntegral>(configuration);
case Instructions::f64_sqrt.value():
return unary_operation<double, double, Operators::SquareRoot>(configuration);
case Instructions::f64_add.value():

View file

@ -271,14 +271,14 @@ struct Truncate {
static StringView name() { return "truncate"; }
};
struct Round {
struct NearbyIntegral {
template<typename Lhs>
auto operator()(Lhs lhs) const
{
if constexpr (IsSame<Lhs, float>)
return roundf(lhs);
return nearbyintf(lhs);
else if constexpr (IsSame<Lhs, double>)
return round(lhs);
return nearbyint(lhs);
else
VERIFY_NOT_REACHED();
}