mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 01:47:34 +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:
parent
ce6cd4f45f
commit
e335354b30
4 changed files with 46 additions and 3 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -25,6 +25,7 @@ public:
|
|||
static ThrowCompletionOr<Value> ceil_impl(VM&, Value);
|
||||
static ThrowCompletionOr<Value> round_impl(VM&, Value);
|
||||
static ThrowCompletionOr<Value> exp_impl(VM&, Value);
|
||||
static ThrowCompletionOr<Value> abs_impl(VM&, Value);
|
||||
|
||||
private:
|
||||
explicit MathObject(Realm&);
|
||||
|
|
|
@ -57,6 +57,11 @@ public:
|
|||
m_builtins[to_underlying(builtin)] = value;
|
||||
}
|
||||
|
||||
Value get_builtin_value(Bytecode::Builtin builtin)
|
||||
{
|
||||
return m_builtins[to_underlying(builtin)];
|
||||
}
|
||||
|
||||
static FlatPtr global_environment_offset() { return OFFSET_OF(Realm, m_global_environment); }
|
||||
static FlatPtr builtins_offset() { return OFFSET_OF(Realm, m_builtins); }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue