diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 5c897a0e21af..48c455f8223c 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -169,9 +169,10 @@ static void ppu_initialize2(class jit_compiler& jit, const ppu_module& module_pa extern void ppu_execute_syscall(ppu_thread& ppu, u64 code); // Get pointer to executable cache -static u64& ppu_ref(u32 addr) +template +static T& ppu_ref(u32 addr) { - return *reinterpret_cast(vm::g_exec_addr + (u64)addr * 2); + return *reinterpret_cast(vm::g_exec_addr + (u64)addr * 2); } // Get interpreter cache value @@ -288,7 +289,7 @@ extern void ppu_register_function_at(u32 addr, u32 size, ppu_function_t ptr) // Initialize specific function if (ptr) { - *reinterpret_cast(&ppu_ref(addr)) = ::narrow(reinterpret_cast(ptr)); + ppu_ref(addr) = ::narrow(reinterpret_cast(ptr)); return; } @@ -312,7 +313,7 @@ extern void ppu_register_function_at(u32 addr, u32 size, ppu_function_t ptr) while (size) { - if ((u32)ppu_ref(addr) == fallback) + if (ppu_ref(addr) == fallback) { ppu_ref(addr) = ppu_cache(addr); } @@ -357,7 +358,7 @@ extern void ppu_breakpoint(u32 addr, bool isAdding) if (isAdding) { // Set breakpoint - *reinterpret_cast(&ppu_ref(addr)) = _break; + ppu_ref(addr) = _break; } else { @@ -376,9 +377,9 @@ extern void ppu_set_breakpoint(u32 addr) const auto _break = ::narrow(reinterpret_cast(&ppu_break)); - if ((u32)ppu_ref(addr) != _break) + if (ppu_ref(addr) != _break) { - *reinterpret_cast(&ppu_ref(addr)) = _break; + ppu_ref(addr) = _break; } } @@ -392,7 +393,7 @@ extern void ppu_remove_breakpoint(u32 addr) const auto _break = ::narrow(reinterpret_cast(&ppu_break)); - if ((u32)ppu_ref(addr) == _break) + if (ppu_ref(addr) == _break) { ppu_ref(addr) = ppu_cache(addr); } @@ -420,7 +421,7 @@ extern bool ppu_patch(u32 addr, u32 value) const u32 _break = ::narrow(reinterpret_cast(&ppu_break)); const u32 fallback = ::narrow(reinterpret_cast(&ppu_fallback)); - if ((u32)ppu_ref(addr) != _break && (u32)ppu_ref(addr) != fallback) + if (ppu_ref(addr) != _break && ppu_ref(addr) != fallback) { ppu_ref(addr) = ppu_cache(addr); } @@ -622,7 +623,7 @@ void ppu_thread::exec_task() { while (!(state & (cpu_flag::ret + cpu_flag::exit + cpu_flag::stop + cpu_flag::dbg_global_stop))) { - reinterpret_cast(static_cast((u32)ppu_ref(cia)))(*this); + reinterpret_cast(static_cast(ppu_ref(cia)))(*this); } return; @@ -1339,7 +1340,7 @@ extern void ppu_initialize(const ppu_module& info) if (g_cfg.core.ppu_debug && func.size && func.toc != -1) { s_ppu_toc->emplace(func.addr, func.toc); - *reinterpret_cast(&ppu_ref(func.addr)) = ::narrow(reinterpret_cast(&ppu_check_toc)); + ppu_ref(func.addr) = ::narrow(reinterpret_cast(&ppu_check_toc)); } } @@ -1695,7 +1696,7 @@ extern void ppu_initialize(const ppu_module& info) { const u64 addr = jit->get(fmt::format("__0x%x", block.first - reloc)); jit_mod.funcs.emplace_back(reinterpret_cast(addr)); - *reinterpret_cast(&ppu_ref(block.first)) = ::narrow(addr); + ppu_ref(block.first) = ::narrow(addr); } } } @@ -1726,7 +1727,7 @@ extern void ppu_initialize(const ppu_module& info) { if (block.second) { - *reinterpret_cast(&ppu_ref(block.first)) = ::narrow(reinterpret_cast(jit_mod.funcs[index++])); + ppu_ref(block.first) = ::narrow(reinterpret_cast(jit_mod.funcs[index++])); } } }