more ppc fixes

Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie
2025-11-13 23:49:31 +00:00
parent 4e5f0cd4e1
commit ed8d2d9ded
3 changed files with 8 additions and 5 deletions
@@ -20,6 +20,7 @@
namespace Dynarmic::A32 { namespace Dynarmic::A32 {
using namespace Dynarmic::Backend::PPC64; using namespace Dynarmic::Backend::PPC64;
using CodePtr = std::uint32_t*;
struct A32AddressSpace final { struct A32AddressSpace final {
explicit A32AddressSpace(const A32::UserConfig& conf) 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) { static HaltReason Run(A32AddressSpace& process, A32JitState& thread_ctx, volatile u32* halt_reason) {
auto const loc = thread_ctx.GetLocationDescriptor(); auto const loc = thread_ctx.GetLocationDescriptor();
auto const entry = process.GetOrEmit(loc); auto const entry = process.GetOrEmit(loc);
using CodeFn = HaltReason (*)(A32AddressSpace*, A32JitState*, volatile u32*); using CodeFn = HaltReason (*)(A32AddressSpace*, A32JitState*, volatile u32*, void*);
return (CodeFn(entry))(&process, &thread_ctx, halt_reason); return (CodeFn(entry))(&process, &thread_ctx, halt_reason, reinterpret_cast<void*>(&A32Core::Run));
} }
}; };
@@ -19,6 +19,7 @@
namespace Dynarmic::A64 { namespace Dynarmic::A64 {
using namespace Dynarmic::Backend::PPC64; using namespace Dynarmic::Backend::PPC64;
using CodePtr = std::uint32_t*;
struct A64AddressSpace final { struct A64AddressSpace final {
explicit A64AddressSpace(const A64::UserConfig& conf) 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) { static HaltReason Run(A64AddressSpace& process, A64JitState& thread_ctx, volatile u32* halt_reason) {
const auto loc = thread_ctx.GetLocationDescriptor(); const auto loc = thread_ctx.GetLocationDescriptor();
const auto entry = process.GetOrEmit(loc); const auto entry = process.GetOrEmit(loc);
using CodeFn = HaltReason (*)(A64AddressSpace*, A64JitState*, volatile u32*); using CodeFn = HaltReason (*)(A64AddressSpace*, A64JitState*, volatile u32*, void*);
return (CodeFn(entry))(&process, &thread_ctx, halt_reason); return (CodeFn(entry))(&process, &thread_ctx, halt_reason, reinterpret_cast<void*>(&A64Core::Run));
} }
}; };
@@ -8,10 +8,11 @@
namespace Dynarmic::Backend::PPC64 { 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 RPROCESS = powah::R3;
constexpr powah::GPR RJIT = powah::R4; constexpr powah::GPR RJIT = powah::R4;
constexpr powah::GPR RHALTREASON = powah::R5; constexpr powah::GPR RHALTREASON = powah::R5;
constexpr powah::GPR RLINKFN = powah::R6;
constexpr powah::GPR RNZCV = powah::R31; constexpr powah::GPR RNZCV = powah::R31;
constexpr powah::GPR ABI_PARAM1 = powah::R3; constexpr powah::GPR ABI_PARAM1 = powah::R3;