TSX/PPU: fix conditional store regression
This commit is contained in:
@@ -2339,7 +2339,7 @@ static bool ppu_store_reservation(ppu_thread& ppu, u32 addr, u64 reg_value)
|
|||||||
// Aligned 8-byte reservations will be used here
|
// Aligned 8-byte reservations will be used here
|
||||||
addr &= -8;
|
addr &= -8;
|
||||||
|
|
||||||
const u64 lock_bits = g_cfg.core.spu_accurate_dma ? vm::rsrv_unique_lock : 1;
|
const u64 lock_bits = vm::rsrv_unique_lock;
|
||||||
|
|
||||||
auto [_oldd, _ok] = res.fetch_op([&](u64& r)
|
auto [_oldd, _ok] = res.fetch_op([&](u64& r)
|
||||||
{
|
{
|
||||||
@@ -2348,7 +2348,6 @@ static bool ppu_store_reservation(ppu_thread& ppu, u32 addr, u64 reg_value)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Despite using shared lock, doesn't allow other shared locks (TODO)
|
|
||||||
r += lock_bits;
|
r += lock_bits;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1705,7 +1705,7 @@ void spu_thread::cpu_work()
|
|||||||
gen_interrupt = check_mfc_interrupts(pc);
|
gen_interrupt = check_mfc_interrupts(pc);
|
||||||
work_left |= interrupts_enabled;
|
work_left |= interrupts_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
in_cpu_work = false;
|
in_cpu_work = false;
|
||||||
|
|
||||||
if (!work_left)
|
if (!work_left)
|
||||||
@@ -4575,7 +4575,7 @@ bool spu_thread::stop_and_signal(u32 code)
|
|||||||
spu_function_logger logger(*this, "sys_spu_thread_receive_event");
|
spu_function_logger logger(*this, "sys_spu_thread_receive_event");
|
||||||
|
|
||||||
std::shared_ptr<lv2_event_queue> queue;
|
std::shared_ptr<lv2_event_queue> queue;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
// Check group status, wait if necessary
|
// Check group status, wait if necessary
|
||||||
|
|||||||
Reference in New Issue
Block a user