mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 15:01:28 +12:00
ppu: Fix extreme reservation corner case
This commit is contained in:
parent
efbd77deb4
commit
cd11ae5d8b
2 changed files with 5 additions and 0 deletions
|
@ -1005,11 +1005,13 @@ static T ppu_load_acquire_reservation(ppu_thread& ppu, u32 addr)
|
|||
|
||||
extern u32 ppu_lwarx(ppu_thread& ppu, u32 addr)
|
||||
{
|
||||
ppu.lr_64 = false;
|
||||
return ppu_load_acquire_reservation<u32>(ppu, addr);
|
||||
}
|
||||
|
||||
extern u64 ppu_ldarx(ppu_thread& ppu, u32 addr)
|
||||
{
|
||||
ppu.lr_64 = true;
|
||||
return ppu_load_acquire_reservation<u64>(ppu, addr);
|
||||
}
|
||||
|
||||
|
@ -1064,6 +1066,8 @@ extern bool ppu_stwcx(ppu_thread& ppu, u32 addr, u32 reg_value)
|
|||
{
|
||||
atomic_be_t<u32>& data = vm::_ref<atomic_be_t<u32>>(addr);
|
||||
|
||||
if (UNLIKELY(ppu.lr_64)) ppu.rdata >>= 32;
|
||||
|
||||
if (ppu.raddr != addr || ppu.rdata != data.load() || ppu.rtime != vm::reservation_acquire(addr, sizeof(u32)))
|
||||
{
|
||||
ppu.raddr = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue