From 84470c34db47655df52b5e3b95b791708d966dbe Mon Sep 17 00:00:00 2001 From: Eladash Date: Thu, 11 Jun 2020 13:57:47 +0300 Subject: [PATCH] SPU: Disable PUTLLC NOP transfers detection on TSX path --- rpcs3/Emu/Cell/PPUThread.cpp | 2 +- rpcs3/Emu/Cell/SPUThread.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index a1a0a427b6..0d9269af04 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -1227,7 +1227,7 @@ static bool ppu_store_reservation(ppu_thread& ppu, u32 addr, T reg_value) const T old_data = static_cast(ppu.rdata << ((addr & 7) * 8) >> size_off); auto& res = vm::reservation_acquire(addr, sizeof(T)); - if (std::exchange(ppu.raddr, 0) != addr || addr % sizeof(T) || old_data != data || ppu.rtime != res) + if (std::exchange(ppu.raddr, 0) != addr || addr % sizeof(T) || old_data != data || ppu.rtime != (res & -128)) { return false; } diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 5ab587c1a6..b931bec5c4 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -2021,7 +2021,7 @@ bool spu_thread::process_mfc_cmd() if (raddr && raddr != addr) { // Last check for event before we replace the reservation with a new one - if (vm::reservation_acquire(raddr, 128) != rtime || !cmp_rdata(rdata, vm::_ref(raddr))) + if ((vm::reservation_acquire(raddr, 128) & -128) != rtime || !cmp_rdata(rdata, vm::_ref(raddr))) { ch_event_stat |= SPU_EVENT_LR; } @@ -2063,7 +2063,7 @@ bool spu_thread::process_mfc_cmd() return false; } - if (cmp_rdata(to_write, rdata)) + if (!g_use_rtm && cmp_rdata(to_write, rdata)) { // Writeback of unchanged data. Only check memory change return cmp_rdata(rdata, vm::_ref(addr)) && res.compare_and_swap_test(rtime, rtime + 128);