mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-29 16:21:29 +00:00
LibWasm: Inline bytecode interpreter instruction interpretation
Gets fib(30) from 480ms to 380ms.
This commit is contained in:
parent
a3b077c641
commit
b73b17aab4
Notes:
github-actions[bot]
2024-08-06 23:11:23 +00:00
Author: https://github.com/dzfrias Commit: https://github.com/LadybirdBrowser/ladybird/commit/b73b17aab45 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/960 Reviewed-by: https://github.com/alimpfard
|
@ -48,7 +48,7 @@ void BytecodeInterpreter::interpret(Configuration& configuration)
|
|||
}
|
||||
auto& instruction = instructions[current_ip_value.value()];
|
||||
auto old_ip = current_ip_value;
|
||||
interpret(configuration, current_ip_value, instruction);
|
||||
interpret_instruction(configuration, current_ip_value, instruction);
|
||||
if (did_trap())
|
||||
return;
|
||||
if (current_ip_value == old_ip) // If no jump occurred
|
||||
|
@ -420,7 +420,7 @@ Vector<Value> BytecodeInterpreter::pop_values(Configuration& configuration, size
|
|||
return results;
|
||||
}
|
||||
|
||||
void BytecodeInterpreter::interpret(Configuration& configuration, InstructionPointer& ip, Instruction const& instruction)
|
||||
ALWAYS_INLINE void BytecodeInterpreter::interpret_instruction(Configuration& configuration, InstructionPointer& ip, Instruction const& instruction)
|
||||
{
|
||||
dbgln_if(WASM_TRACE_DEBUG, "Executing instruction {} at ip {}", instruction_name(instruction.opcode()), ip.value());
|
||||
|
||||
|
@ -1671,7 +1671,7 @@ void BytecodeInterpreter::interpret(Configuration& configuration, InstructionPoi
|
|||
}
|
||||
}
|
||||
|
||||
void DebuggerBytecodeInterpreter::interpret(Configuration& configuration, InstructionPointer& ip, Instruction const& instruction)
|
||||
void DebuggerBytecodeInterpreter::interpret_instruction(Configuration& configuration, InstructionPointer& ip, Instruction const& instruction)
|
||||
{
|
||||
if (pre_interpret_hook) {
|
||||
auto result = pre_interpret_hook(configuration, ip, instruction);
|
||||
|
@ -1681,7 +1681,7 @@ void DebuggerBytecodeInterpreter::interpret(Configuration& configuration, Instru
|
|||
}
|
||||
}
|
||||
|
||||
BytecodeInterpreter::interpret(configuration, ip, instruction);
|
||||
BytecodeInterpreter::interpret_instruction(configuration, ip, instruction);
|
||||
|
||||
if (post_interpret_hook) {
|
||||
auto result = post_interpret_hook(configuration, ip, instruction, *this);
|
||||
|
|
|
@ -19,6 +19,7 @@ struct BytecodeInterpreter : public Interpreter {
|
|||
}
|
||||
|
||||
virtual void interpret(Configuration&) override;
|
||||
|
||||
virtual ~BytecodeInterpreter() override = default;
|
||||
virtual bool did_trap() const override { return !m_trap.has<Empty>(); }
|
||||
virtual ByteString trap_reason() const override
|
||||
|
@ -44,7 +45,7 @@ struct BytecodeInterpreter : public Interpreter {
|
|||
};
|
||||
|
||||
protected:
|
||||
virtual void interpret(Configuration&, InstructionPointer&, Instruction const&);
|
||||
void interpret_instruction(Configuration&, InstructionPointer&, Instruction const&);
|
||||
void branch_to_label(Configuration&, LabelIndex);
|
||||
template<typename ReadT, typename PushT>
|
||||
void load_and_push(Configuration&, Instruction const&);
|
||||
|
@ -101,7 +102,7 @@ struct DebuggerBytecodeInterpreter : public BytecodeInterpreter {
|
|||
Function<bool(Configuration&, InstructionPointer&, Instruction const&, Interpreter const&)> post_interpret_hook;
|
||||
|
||||
private:
|
||||
virtual void interpret(Configuration&, InstructionPointer&, Instruction const&) override;
|
||||
void interpret_instruction(Configuration&, InstructionPointer&, Instruction const&);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue