mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-16 07:20:59 +00:00
Fix stwcx. and stdcx. not properly clearing the reservation address.
This commit is contained in:
parent
d78fe3b4d4
commit
74cbf1877b
@ -2698,12 +2698,12 @@ private:
|
|||||||
if (CPU.R_ADDR == addr)
|
if (CPU.R_ADDR == addr)
|
||||||
{
|
{
|
||||||
CPU.SetCR_EQ(0, InterlockedCompareExchange(vm::get_ptr<volatile u32>(vm::cast(CPU.R_ADDR)), re32((u32)CPU.GPR[rs]), (u32)CPU.R_VALUE) == (u32)CPU.R_VALUE);
|
CPU.SetCR_EQ(0, InterlockedCompareExchange(vm::get_ptr<volatile u32>(vm::cast(CPU.R_ADDR)), re32((u32)CPU.GPR[rs]), (u32)CPU.R_VALUE) == (u32)CPU.R_VALUE);
|
||||||
CPU.R_ADDR = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CPU.SetCR_EQ(0, false);
|
CPU.SetCR_EQ(0, false);
|
||||||
}
|
}
|
||||||
|
CPU.R_ADDR = 0;
|
||||||
}
|
}
|
||||||
void STWX(u32 rs, u32 ra, u32 rb)
|
void STWX(u32 rs, u32 ra, u32 rb)
|
||||||
{
|
{
|
||||||
@ -2757,12 +2757,12 @@ private:
|
|||||||
if (CPU.R_ADDR == addr)
|
if (CPU.R_ADDR == addr)
|
||||||
{
|
{
|
||||||
CPU.SetCR_EQ(0, InterlockedCompareExchange(vm::get_ptr<volatile u64>(vm::cast(CPU.R_ADDR)), re64(CPU.GPR[rs]), CPU.R_VALUE) == CPU.R_VALUE);
|
CPU.SetCR_EQ(0, InterlockedCompareExchange(vm::get_ptr<volatile u64>(vm::cast(CPU.R_ADDR)), re64(CPU.GPR[rs]), CPU.R_VALUE) == CPU.R_VALUE);
|
||||||
CPU.R_ADDR = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CPU.SetCR_EQ(0, false);
|
CPU.SetCR_EQ(0, false);
|
||||||
}
|
}
|
||||||
|
CPU.R_ADDR = 0;
|
||||||
}
|
}
|
||||||
void STBX(u32 rs, u32 ra, u32 rb)
|
void STBX(u32 rs, u32 ra, u32 rb)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user