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; }