From adedc7c66762c06aff6df7b49f89336f78999511 Mon Sep 17 00:00:00 2001 From: Elad Ashkenazi <18193363+elad335@users.noreply.github.com> Date: Mon, 25 Mar 2024 11:01:51 +0200 Subject: [PATCH] Savestates/SPU: Add RCHCNT as a safe return in compatiblity mode --- rpcs3/Emu/Cell/SPULLVMRecompiler.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp b/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp index 00cf2131de..30b58e6b46 100644 --- a/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp +++ b/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp @@ -2971,6 +2971,12 @@ public: } case SPU_RdInMbox: { + if (g_cfg.savestate.compatible_mode) + { + ensure_gpr_stores(); + check_state(m_pos, false); + } + const auto value = m_ir->CreateLoad(get_type(), spu_ptr(&spu_thread::ch_in_mbox)); value->setAtomic(llvm::AtomicOrdering::Acquire); res.value = value; @@ -2980,6 +2986,12 @@ public: } case SPU_RdEventStat: { + if (g_cfg.savestate.compatible_mode) + { + ensure_gpr_stores(); + check_state(m_pos, false); + } + const auto mask = m_ir->CreateTrunc(m_ir->CreateLShr(m_ir->CreateLoad(get_type(), spu_ptr(&spu_thread::ch_events)), 32), get_type()); res.value = call("spu_get_events", &exec_get_events, m_thread, mask); break;