summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2021-08-30 16:21:21 +0430
committerAndreas Kling <kling@serenityos.org>2021-08-30 22:47:02 +0200
commit2c7e2e351aa2c40daedfd8ddac3ef868ebac0f2c (patch)
treea6057f628a651397eb5a5e54728e8af6c011f06d /Userland
parente93c740df5fe50a83b145e58c105ba54aaf67ac6 (diff)
downloadserenity-2c7e2e351aa2c40daedfd8ddac3ef868ebac0f2c.zip
LibWasm: Implement fx.nearest using nearbyint() instead of round()
This instruction wants RoundingMode::ToEven, so let's use the correct function.
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp4
-rw-r--r--Userland/Libraries/LibWasm/AbstractMachine/Operators.h6
2 files changed, 5 insertions, 5 deletions
diff --git a/Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp b/Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp
index a8f0301bdd..d472da2f96 100644
--- a/Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp
+++ b/Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp
@@ -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():
diff --git a/Userland/Libraries/LibWasm/AbstractMachine/Operators.h b/Userland/Libraries/LibWasm/AbstractMachine/Operators.h
index ecb13f37e7..aac34ce7c6 100644
--- a/Userland/Libraries/LibWasm/AbstractMachine/Operators.h
+++ b/Userland/Libraries/LibWasm/AbstractMachine/Operators.h
@@ -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();
}