diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 137ff3a09d..03e5244020 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -1045,21 +1045,10 @@ static T ppu_load_acquire_reservation(ppu_thread& ppu, u32 addr) } }()) { - ppu.rtime = vm::reservation_acquire(addr, sizeof(T)); - - if (ppu.rtime & 127) - { - if (!(ppu.state & cpu_flag::wait)) - { - ppu.state += cpu_flag::wait; - } - - continue; - } - + ppu.rtime = vm::reservation_acquire(addr, sizeof(T)) & -128; ppu.rdata = data; - if (vm::reservation_acquire(addr, sizeof(T)) == ppu.rtime) [[likely]] + if ((vm::reservation_acquire(addr, sizeof(T)) & -128) == ppu.rtime) [[likely]] { ppu.test_stopped(); diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 060e128a93..42fac63ff4 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1784,9 +1784,9 @@ bool spu_thread::process_mfc_cmd() for (u64 i = 0;; [&]() { - if (ntime & 127 && g_use_rtm && !(state & cpu_flag::wait)) + if (is_paused()) { - state += cpu_flag::wait; + check_state(); } if (++i < 25) [[likely]] @@ -1813,7 +1813,7 @@ bool spu_thread::process_mfc_cmd() ntime != time0) { // Reservation data has been modified recently - if (time0 & 127) i += 12, ntime = time0; + if (time0 & 127) i += 12; continue; }