diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-05-09 05:41:41 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-05-09 05:41:41 +0200 |
| commit | eec460ec2ef13dee7376f2854ba00da9a98b0cd5 (patch) | |
| tree | c0f19f04bac33f2a7f53f0b0fadf3f167305a472 /src/core/arm/nce/interpreter_visitor.cpp | |
| parent | a6423a88cc068f8213db8707900a1d1b38b9566d (diff) | |
[dynarmic] remove decode matcher function handlers using std::function<>, use raw function pointers (#3920)
issues:
- std::function<> is used, which is famously bad
- storage of tehse in tables makes big fucking tables for no good reason
- lets just store a normal pointer and stuff! :)
this pr attempts to address that
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3920
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Diffstat (limited to 'src/core/arm/nce/interpreter_visitor.cpp')
| -rw-r--r-- | src/core/arm/nce/interpreter_visitor.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/core/arm/nce/interpreter_visitor.cpp b/src/core/arm/nce/interpreter_visitor.cpp index 077a696cc8..ec2b155fe4 100644 --- a/src/core/arm/nce/interpreter_visitor.cpp +++ b/src/core/arm/nce/interpreter_visitor.cpp @@ -761,8 +761,7 @@ bool InterpreterVisitor::LDR_reg_fpsimd(Imm<2> size, Imm<1> opc_1, Reg Rm, Imm<3 return this->SIMDOffset(scale, shift, opc_0, Rm, option, Rn, Vt); } -std::optional<u64> MatchAndExecuteOneInstruction(Core::Memory::Memory& memory, mcontext_t* context, - fpsimd_context* fpsimd_context) { +std::optional<u64> MatchAndExecuteOneInstruction(Core::Memory::Memory& memory, mcontext_t* context, fpsimd_context* fpsimd_context) { std::span<u64, 31> regs(reinterpret_cast<u64*>(context->regs), 31); std::span<u128, 32> vregs(reinterpret_cast<u128*>(fpsimd_context->vregs), 32); u64& sp = *reinterpret_cast<u64*>(&context->sp); @@ -772,9 +771,9 @@ std::optional<u64> MatchAndExecuteOneInstruction(Core::Memory::Memory& memory, m u32 instruction = memory.Read32(pc); bool was_executed = false; - auto decoder = Dynarmic::A64::Decode<VisitorBase>(instruction); + auto decoder = Dynarmic::A64::Decode<VisitorBase, bool>(visitor, instruction); if (decoder) { - was_executed = decoder->get().call(visitor, instruction); + was_executed = *decoder; } else { was_executed = false; } |
