mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
SPU/PPU atomics performance and LR event fixes (#5435)
* Fix SPU LR event setting in atomic commands according to hw test * MFC: increment timestamp for PUT cmd in non-tsx path * MFC: fix reservation lost test on non-tsx path in regard to the lock bit * Reservation notification moved out of writer_lock scope to reduce its lifetime * Use passive_lock/unlock in ppu atomic inctrustions to reduce redundancy * Lock only once for dma transfers (non-TSX) * Don't use RDTSC in reservation update logic * Remove MFC cmd args passing to process_mfc_cmd * Reorder check_state cpu_flag::memory check for faster unlocking * Specialization for 128-byte data copy in SPU dma transfers * Implement memory range locks and isolate PPU and SPU passive lock logic
This commit is contained in:
parent
f19fd23227
commit
fc92ae4085
9 changed files with 344 additions and 235 deletions
|
@ -1436,6 +1436,7 @@ void spu_recompiler::get_events()
|
|||
c->mov(*qw0, imm_ptr(vm::g_reservations));
|
||||
c->shr(qw1->r32(), 4);
|
||||
c->mov(*qw0, x86::qword_ptr(*qw0, *qw1));
|
||||
c->and_(qw0->r64(), (u64)(~1ull));
|
||||
c->cmp(*qw0, SPU_OFF_64(rtime));
|
||||
c->jne(fail);
|
||||
c->mov(*qw0, imm_ptr(vm::g_base_addr));
|
||||
|
@ -2596,7 +2597,7 @@ static void spu_wrch(spu_thread* _spu, u32 ch, u32 value, spu_function_t _ret)
|
|||
|
||||
static void spu_wrch_mfc(spu_thread* _spu, spu_function_t _ret)
|
||||
{
|
||||
if (!_spu->process_mfc_cmd(_spu->ch_mfc_cmd))
|
||||
if (!_spu->process_mfc_cmd())
|
||||
{
|
||||
_ret = &spu_wrch_ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue