ソースを参照

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

This instruction wants RoundingMode::ToEven, so let's use the correct
function.
Ali Mohammad Pur 3 年 前
コミット
2c7e2e351a

+ 2 - 2
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():

+ 3 - 3
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();
     }