Browse Source

fastlink impl

dynarmic-ppc64
lizzie 2 months ago
parent
commit
247e7d1ff9
  1. 1
      src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp
  2. 16
      src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.cpp

1
src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp

@ -3,6 +3,7 @@
#include <memory>
#include <mutex>
#include <cstddef>
#include <boost/icl/interval_set.hpp>
#include "dynarmic/common/assert.h"

16
src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.cpp

@ -169,7 +169,21 @@ void EmitTerminal(powah::Context& code, EmitContext& ctx, IR::Term::LinkBlock te
}
void EmitTerminal(powah::Context& code, EmitContext& ctx, IR::Term::LinkBlockFast terminal, IR::LocationDescriptor initial_location, bool) {
ASSERT(false && "unimp");
if (ctx.emit_conf.a64_variant) {
auto const tmp = ctx.reg_alloc.ScratchGpr();
code.LI(tmp, terminal.next.Value());
code.STD(tmp, PPC64::RJIT, offsetof(A64JitState, pc));
code.LD(tmp, PPC64::RTOCPTR, 0);
code.MTCTR(tmp);
code.LD(powah::R2, PPC64::RTOCPTR, 8);
code.LD(powah::R11, PPC64::RTOCPTR, 16);
code.BCTR();
} else {
auto const tmp = ctx.reg_alloc.ScratchGpr();
code.LI(tmp, terminal.next.Value());
code.STW(tmp, PPC64::RJIT, offsetof(A32JitState, regs) + sizeof(u32) * 15);
ASSERT(false && "unimp");
}
}
void EmitTerminal(powah::Context& code, EmitContext& ctx, IR::Term::PopRSBHint, IR::LocationDescriptor, bool) {

Loading…
Cancel
Save