1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 21:18:14 +00:00

LibJS: Call builtins directly in the bytecode interpreter

Allows the bytecode interpreter to call the builtins c++
implementation directly without making a javascript call
just as the JIT.

Kraken test speedups: imaging-gaussian-blur.js (1.5x) and
audio-oscillator.js (1.2x)
This commit is contained in:
Todderod 2023-11-30 19:49:29 +01:00 committed by Andreas Kling
parent ce6cd4f45f
commit e335354b30
4 changed files with 46 additions and 3 deletions

View file

@ -80,10 +80,8 @@ 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)
ThrowCompletionOr<Value> MathObject::abs_impl(VM& vm, Value x)
{
auto x = vm.argument(0);
// OPTIMIZATION: Fast path for Int32 values.
if (x.is_int32())
return Value(AK::abs(x.as_i32()));
@ -108,6 +106,12 @@ JS_DEFINE_NATIVE_FUNCTION(MathObject::abs)
return Value(number.as_double() < 0 ? -number.as_double() : number.as_double());
}
// 21.3.2.1 Math.abs ( x ), https://tc39.es/ecma262/#sec-math.abs
JS_DEFINE_NATIVE_FUNCTION(MathObject::abs)
{
return abs_impl(vm, vm.argument(0));
}
// 21.3.2.2 Math.acos ( x ), https://tc39.es/ecma262/#sec-math.acos
JS_DEFINE_NATIVE_FUNCTION(MathObject::acos)
{