mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:58:12 +00:00
LibRegex: Always inline get_opcode()
This function's prologue was showing up as very hot in profiles, taking almost 9% of runtime in our Regex test suite.
This commit is contained in:
parent
a539c261b1
commit
11abca421a
2 changed files with 22 additions and 22 deletions
|
@ -181,28 +181,6 @@ void ByteCode::ensure_opcodes_initialized()
|
|||
s_opcodes_initialized = true;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE OpCode& ByteCode::get_opcode_by_id(OpCodeId id) const
|
||||
{
|
||||
VERIFY(id >= OpCodeId::First && id <= OpCodeId::Last);
|
||||
|
||||
auto& opcode = s_opcodes[(u32)id];
|
||||
opcode->set_bytecode(*const_cast<ByteCode*>(this));
|
||||
return *opcode;
|
||||
}
|
||||
|
||||
OpCode& ByteCode::get_opcode(MatchState& state) const
|
||||
{
|
||||
OpCodeId opcode_id;
|
||||
if (auto opcode_ptr = static_cast<DisjointChunks<ByteCodeValueType> const&>(*this).find(state.instruction_position))
|
||||
opcode_id = (OpCodeId)*opcode_ptr;
|
||||
else
|
||||
opcode_id = OpCodeId::Exit;
|
||||
|
||||
auto& opcode = get_opcode_by_id(opcode_id);
|
||||
opcode.set_state(state);
|
||||
return opcode;
|
||||
}
|
||||
|
||||
ALWAYS_INLINE ExecutionResult OpCode_Exit::execute(MatchInput const& input, MatchState& state) const
|
||||
{
|
||||
if (state.string_position > input.view.length() || state.instruction_position >= m_bytecode->size())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue