From 14a9cfef4d364d7bf3c5366772d0c71029ced7c5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 4 Oct 2023 15:31:48 +0200 Subject: [PATCH] LibJS: Add fast-path for Int32 values in Math.abs() This function becomes very simple when the input is already an Int32. 2.3% speed-up on Kraken/imaging-gaussian-blur.js :^) --- Userland/Libraries/LibJS/Runtime/MathObject.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Runtime/MathObject.cpp b/Userland/Libraries/LibJS/Runtime/MathObject.cpp index 6c60c2ba50..73e2c8ca49 100644 --- a/Userland/Libraries/LibJS/Runtime/MathObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/MathObject.cpp @@ -79,8 +79,14 @@ void MathObject::initialize(Realm& realm) // 21.3.2.1 Math.abs ( x ), https://tc39.es/ecma262/#sec-math.abs JS_DEFINE_NATIVE_FUNCTION(MathObject::abs) { + auto x = vm.argument(0); + + // OPTIMIZATION: Fast path for Int32 values. + if (x.is_int32()) + return Value(AK::abs(x.as_i32())); + // Let n be ? ToNumber(x). - auto number = TRY(vm.argument(0).to_number(vm)); + auto number = TRY(x.to_number(vm)); // 2. If n is NaN, return NaN. if (number.is_nan())