mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:18:11 +00:00
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:
parent
e7435d68b0
commit
1efe4b58aa
2 changed files with 23 additions and 6 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue