mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 00:11:24 +12:00
vm::range_lock cleanup and minor optimization
Removed unused arg. Linearized some branches.
This commit is contained in:
parent
46d3066c62
commit
06ecc2ae68
3 changed files with 25 additions and 44 deletions
|
@ -2032,7 +2032,7 @@ void spu_thread::do_dma_transfer(spu_thread* _this, const spu_mfc_cmd& args, u8*
|
|||
}
|
||||
|
||||
// Obtain range lock as normal store
|
||||
vm::range_lock(nullptr, range_lock, eal, size0);
|
||||
vm::range_lock(range_lock, eal, size0);
|
||||
|
||||
switch (size0)
|
||||
{
|
||||
|
@ -2104,35 +2104,32 @@ void spu_thread::do_dma_transfer(spu_thread* _this, const spu_mfc_cmd& args, u8*
|
|||
|
||||
perf_meter<"DMA_PUT"_u64> perf2;
|
||||
|
||||
// Temporarily disabled, may be removed at all
|
||||
atomic_t<u64>* res = nullptr;
|
||||
|
||||
switch (u32 size = args.size)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
vm::range_lock(res, range_lock, eal, 1);
|
||||
vm::range_lock(range_lock, eal, 1);
|
||||
*reinterpret_cast<u8*>(dst) = *reinterpret_cast<const u8*>(src);
|
||||
range_lock->release(0);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
vm::range_lock(res, range_lock, eal, 2);
|
||||
vm::range_lock(range_lock, eal, 2);
|
||||
*reinterpret_cast<u16*>(dst) = *reinterpret_cast<const u16*>(src);
|
||||
range_lock->release(0);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
vm::range_lock(res, range_lock, eal, 4);
|
||||
vm::range_lock(range_lock, eal, 4);
|
||||
*reinterpret_cast<u32*>(dst) = *reinterpret_cast<const u32*>(src);
|
||||
range_lock->release(0);
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
vm::range_lock(res, range_lock, eal, 8);
|
||||
vm::range_lock(range_lock, eal, 8);
|
||||
*reinterpret_cast<u64*>(dst) = *reinterpret_cast<const u64*>(src);
|
||||
range_lock->release(0);
|
||||
break;
|
||||
|
@ -2141,7 +2138,7 @@ void spu_thread::do_dma_transfer(spu_thread* _this, const spu_mfc_cmd& args, u8*
|
|||
{
|
||||
if (((eal & 127) + size) <= 128)
|
||||
{
|
||||
vm::range_lock(res, range_lock, eal, size);
|
||||
vm::range_lock(range_lock, eal, size);
|
||||
|
||||
while (size)
|
||||
{
|
||||
|
@ -2167,7 +2164,7 @@ void spu_thread::do_dma_transfer(spu_thread* _this, const spu_mfc_cmd& args, u8*
|
|||
size -= size0;
|
||||
|
||||
// Split locking + transfer in two parts (before 64K border, and after it)
|
||||
vm::range_lock(res, range_lock, range_addr, size0);
|
||||
vm::range_lock(range_lock, range_addr, size0);
|
||||
|
||||
// Avoid unaligned stores in mov_rdata_avx
|
||||
if (reinterpret_cast<u64>(dst) & 0x10)
|
||||
|
@ -2201,7 +2198,7 @@ void spu_thread::do_dma_transfer(spu_thread* _this, const spu_mfc_cmd& args, u8*
|
|||
range_addr = nexta;
|
||||
}
|
||||
|
||||
vm::range_lock(res, range_lock, range_addr, range_end - range_addr);
|
||||
vm::range_lock(range_lock, range_addr, range_end - range_addr);
|
||||
|
||||
// Avoid unaligned stores in mov_rdata_avx
|
||||
if (reinterpret_cast<u64>(dst) & 0x10)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue