diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/a32_interface.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/a32_interface.cpp index 5568ff1fab..a2d443ad9b 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/a32_interface.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/a32_interface.cpp @@ -20,6 +20,7 @@ namespace Dynarmic::A32 { using namespace Dynarmic::Backend::PPC64; +using CodePtr = std::uint32_t*; struct A32AddressSpace final { explicit A32AddressSpace(const A32::UserConfig& conf) @@ -72,8 +73,8 @@ struct A32Core final { static HaltReason Run(A32AddressSpace& process, A32JitState& thread_ctx, volatile u32* halt_reason) { auto const loc = thread_ctx.GetLocationDescriptor(); auto const entry = process.GetOrEmit(loc); - using CodeFn = HaltReason (*)(A32AddressSpace*, A32JitState*, volatile u32*); - return (CodeFn(entry))(&process, &thread_ctx, halt_reason); + using CodeFn = HaltReason (*)(A32AddressSpace*, A32JitState*, volatile u32*, void*); + return (CodeFn(entry))(&process, &thread_ctx, halt_reason, reinterpret_cast(&A32Core::Run)); } }; diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp index 75ea6afc95..063f74cc68 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp @@ -19,6 +19,7 @@ namespace Dynarmic::A64 { using namespace Dynarmic::Backend::PPC64; +using CodePtr = std::uint32_t*; struct A64AddressSpace final { explicit A64AddressSpace(const A64::UserConfig& conf) @@ -74,8 +75,8 @@ struct A64Core final { static HaltReason Run(A64AddressSpace& process, A64JitState& thread_ctx, volatile u32* halt_reason) { const auto loc = thread_ctx.GetLocationDescriptor(); const auto entry = process.GetOrEmit(loc); - using CodeFn = HaltReason (*)(A64AddressSpace*, A64JitState*, volatile u32*); - return (CodeFn(entry))(&process, &thread_ctx, halt_reason); + using CodeFn = HaltReason (*)(A64AddressSpace*, A64JitState*, volatile u32*, void*); + return (CodeFn(entry))(&process, &thread_ctx, halt_reason, reinterpret_cast(&A64Core::Run)); } }; diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/abi.h b/src/dynarmic/src/dynarmic/backend/ppc64/abi.h index 0f7e059110..3d4b2c70bd 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/abi.h +++ b/src/dynarmic/src/dynarmic/backend/ppc64/abi.h @@ -8,10 +8,11 @@ namespace Dynarmic::Backend::PPC64 { -// Jit fn signature => (AXXAddressSpace& process, AXXJitState& thread_ctx, volatile u32* halt_reason) +// Jit fn signature => (AXXAddressSpace& process, AXXJitState& thread_ctx, volatile u32* halt_reason, void* link_fn) constexpr powah::GPR RPROCESS = powah::R3; constexpr powah::GPR RJIT = powah::R4; constexpr powah::GPR RHALTREASON = powah::R5; +constexpr powah::GPR RLINKFN = powah::R6; constexpr powah::GPR RNZCV = powah::R31; constexpr powah::GPR ABI_PARAM1 = powah::R3;