Browse Source
more ppc fixes
Signed-off-by: lizzie <lizzie@eden-emu.dev>
dynarmic-ppc64
lizzie
1 month ago
No known key found for this signature in database
GPG Key ID: 287378CADCAB13
3 changed files with
8 additions and
5 deletions
-
src/dynarmic/src/dynarmic/backend/ppc64/a32_interface.cpp
-
src/dynarmic/src/dynarmic/backend/ppc64/a64_interface.cpp
-
src/dynarmic/src/dynarmic/backend/ppc64/abi.h
|
|
|
@ -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<void*>(&A32Core::Run)); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -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<void*>(&A64Core::Run)); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -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; |
|
|
|
|