mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
Fix SPU Loop Detection
This commit is contained in:
parent
3602d45cb7
commit
b9b591bf02
3 changed files with 19 additions and 0 deletions
|
@ -1534,8 +1534,17 @@ void spu_recompiler::RDCH(spu_opcode_t op)
|
|||
const u32 out = _spu->ch_dec_value - static_cast<u32>(get_timebased_time() - _spu->ch_dec_start_timestamp);
|
||||
|
||||
if (out > 1500)
|
||||
{
|
||||
_spu->state += cpu_flag::wait;
|
||||
std::this_thread::yield();
|
||||
|
||||
if (_spu->test_stopped())
|
||||
{
|
||||
_spu->pc += 4;
|
||||
spu_runtime::g_escape(_spu);
|
||||
}
|
||||
}
|
||||
|
||||
*_res = v128::from32r(out);
|
||||
};
|
||||
|
||||
|
|
|
@ -5200,7 +5200,14 @@ public:
|
|||
|
||||
if (res > 1500 && g_cfg.core.spu_loop_detection)
|
||||
{
|
||||
_spu->state += cpu_flag::wait;
|
||||
std::this_thread::yield();
|
||||
|
||||
if (_spu->test_stopped())
|
||||
{
|
||||
_spu->pc += 4;
|
||||
spu_runtime::g_escape(_spu);
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
|
|
|
@ -2335,7 +2335,10 @@ s64 spu_thread::get_ch_value(u32 ch)
|
|||
|
||||
//Polling: We might as well hint to the scheduler to slot in another thread since this one is counting down
|
||||
if (g_cfg.core.spu_loop_detection && out > spu::scheduler::native_jiffy_duration_us)
|
||||
{
|
||||
state += cpu_flag::wait;
|
||||
std::this_thread::yield();
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue