LibJS/Bytecode: Store current interpreter register window as a Span

This avoids a bunch of indirections on every single register access.

~17% speed-up on Kraken/stanford-crypto-aes.js :^)
This commit is contained in:
Andreas Kling 2023-07-01 13:56:40 +02:00 committed by Linus Groh
commit 1efe4b58aa
Notes: sideshowbarker 2024-07-17 18:46:30 +09:00
2 changed files with 23 additions and 6 deletions

View file

@ -101,10 +101,15 @@ private:
return const_cast<Interpreter*>(this)->window();
}
MarkedVector<Value>& registers() { return window().registers; }
Span<Value> registers() { return m_current_register_window; }
ReadonlySpan<Value> registers() const { return m_current_register_window; }
void push_register_window(Variant<NonnullOwnPtr<RegisterWindow>, RegisterWindow*>, size_t register_count);
[[nodiscard]] Variant<NonnullOwnPtr<RegisterWindow>, RegisterWindow*> pop_register_window();
VM& m_vm;
Vector<Variant<NonnullOwnPtr<RegisterWindow>, RegisterWindow*>> m_register_windows;
Span<Value> m_current_register_window;
Optional<BasicBlock const*> m_pending_jump;
BasicBlock const* m_scheduled_jump { nullptr };
Value m_return_value;