From 68a7a53f6ba91ad4fc47946575d2abb510cd540a Mon Sep 17 00:00:00 2001 From: elad335 <18193363+elad335@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:55:19 +0300 Subject: [PATCH] RawSpu: Optimize START register/commands START MFC proxy commands can be common even after their need, optimize their usage. --- rpcs3/Emu/Cell/RawSPUThread.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 91a1166eaa..dd621ae088 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -7,20 +7,30 @@ inline void try_start(spu_thread& spu) { - reader_lock lock(spu.run_ctrl_mtx); + bool notify = false; - if (spu.status_npc.fetch_op([](spu_thread::status_npc_sync_var& value) + if (~spu.status_npc.load().status & SPU_STATUS_RUNNING) { - if (value.status & SPU_STATUS_RUNNING) + reader_lock lock(spu.run_ctrl_mtx); + + if (spu.status_npc.fetch_op([](spu_thread::status_npc_sync_var& value) { - return false; - } + if (value.status & SPU_STATUS_RUNNING) + { + return false; + } - value.status = SPU_STATUS_RUNNING | (value.status & SPU_STATUS_IS_ISOLATED); - return true; - }).second) + value.status = SPU_STATUS_RUNNING | (value.status & SPU_STATUS_IS_ISOLATED); + return true; + }).second) + { + spu.state -= cpu_flag::stop; + notify = true; + } + } + + if (notify) { - spu.state -= cpu_flag::stop; spu.state.notify_one(); } };