LibWasm: Inline bytecode interpreter instruction interpretation

Gets fib(30) from 480ms to 380ms.
This commit is contained in:
Diego Frias 2024-08-02 20:58:15 -07:00 committed by Ali Mohammad Pur
commit b73b17aab4
Notes: github-actions[bot] 2024-08-06 23:11:23 +00:00
2 changed files with 7 additions and 6 deletions

View file

@ -48,7 +48,7 @@ void BytecodeInterpreter::interpret(Configuration& configuration)
} }
auto& instruction = instructions[current_ip_value.value()]; auto& instruction = instructions[current_ip_value.value()];
auto old_ip = current_ip_value; auto old_ip = current_ip_value;
interpret(configuration, current_ip_value, instruction); interpret_instruction(configuration, current_ip_value, instruction);
if (did_trap()) if (did_trap())
return; return;
if (current_ip_value == old_ip) // If no jump occurred if (current_ip_value == old_ip) // If no jump occurred
@ -420,7 +420,7 @@ Vector<Value> BytecodeInterpreter::pop_values(Configuration& configuration, size
return results; 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()); 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) { if (pre_interpret_hook) {
auto result = pre_interpret_hook(configuration, ip, instruction); 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) { if (post_interpret_hook) {
auto result = post_interpret_hook(configuration, ip, instruction, *this); auto result = post_interpret_hook(configuration, ip, instruction, *this);

View file

@ -19,6 +19,7 @@ struct BytecodeInterpreter : public Interpreter {
} }
virtual void interpret(Configuration&) override; virtual void interpret(Configuration&) override;
virtual ~BytecodeInterpreter() override = default; virtual ~BytecodeInterpreter() override = default;
virtual bool did_trap() const override { return !m_trap.has<Empty>(); } virtual bool did_trap() const override { return !m_trap.has<Empty>(); }
virtual ByteString trap_reason() const override virtual ByteString trap_reason() const override
@ -44,7 +45,7 @@ struct BytecodeInterpreter : public Interpreter {
}; };
protected: protected:
virtual void interpret(Configuration&, InstructionPointer&, Instruction const&); void interpret_instruction(Configuration&, InstructionPointer&, Instruction const&);
void branch_to_label(Configuration&, LabelIndex); void branch_to_label(Configuration&, LabelIndex);
template<typename ReadT, typename PushT> template<typename ReadT, typename PushT>
void load_and_push(Configuration&, Instruction const&); 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; Function<bool(Configuration&, InstructionPointer&, Instruction const&, Interpreter const&)> post_interpret_hook;
private: private:
virtual void interpret(Configuration&, InstructionPointer&, Instruction const&) override; void interpret_instruction(Configuration&, InstructionPointer&, Instruction const&);
}; };
} }