From 1f8d873459f6e5fcd0549c2b12f22d2e4ffcc4bd Mon Sep 17 00:00:00 2001 From: "Herman S." <429230+has207@users.noreply.github.com> Date: Wed, 22 Apr 2026 00:57:43 +0900 Subject: [PATCH] [PPC/Posix] Apply 0x1000 shift in PPCContext::TranslateVirtual --- src/xenia/cpu/ppc/ppc_context.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/xenia/cpu/ppc/ppc_context.h b/src/xenia/cpu/ppc/ppc_context.h index 2289024fc..76780c49d 100644 --- a/src/xenia/cpu/ppc/ppc_context.h +++ b/src/xenia/cpu/ppc/ppc_context.h @@ -14,6 +14,7 @@ #include #include +#include "xenia/base/memory.h" #include "xenia/base/mutex.h" #include "xenia/base/vec128.h" #include "xenia/guest_pointers.h" @@ -439,6 +440,12 @@ typedef struct alignas(64) PPCContext_s { static_cast(reinterpret_cast(this))) { host_address += 0x1000; } +#else + // Match vE0000000 PhysicalHeap shift (see Memory::TranslateVirtual). + if (xe::memory::allocation_granularity() > 0x1000 && + guest_address >= 0xE0000000u) { + host_address += 0x1000; + } #endif return reinterpret_cast(host_address); } @@ -467,6 +474,11 @@ typedef struct alignas(64) PPCContext_s { if (guest_tmp >= static_cast(reinterpret_cast(this))) { guest_tmp -= 0x1000; } +#else + if (xe::memory::allocation_granularity() > 0x1000 && + guest_tmp >= 0xE0000000u) { + guest_tmp -= 0x1000; + } #endif return guest_tmp; }