Jit64: Implement low DCBZ hack

I was hoping this would improve the performance of Cars 2 by
avoiding interpreter fallbacks, but it doesn't seem to have
made any measurable impact.
This commit is contained in:
JosJuice 2020-06-29 18:17:19 +02:00
parent 3201944208
commit 76228fa482
1 changed files with 13 additions and 3 deletions

View File

@ -290,7 +290,6 @@ void Jit64::dcbz(UGeckoInstruction inst)
{ {
INSTRUCTION_START INSTRUCTION_START
JITDISABLE(bJITLoadStoreOff); JITDISABLE(bJITLoadStoreOff);
FALLBACK_IF(SConfig::GetInstance().bLowDCBZHack);
int a = inst.RA; int a = inst.RA;
int b = inst.RB; int b = inst.RB;
@ -304,6 +303,14 @@ void Jit64::dcbz(UGeckoInstruction inst)
AND(32, R(RSCRATCH), Imm32(~31)); AND(32, R(RSCRATCH), Imm32(~31));
} }
FixupBranch end_dcbz_hack;
if (SConfig::GetInstance().bLowDCBZHack)
{
// HACK: Don't clear any memory in the [0x8000'0000, 0x8000'8000) region.
CMP(32, R(RSCRATCH), Imm32(0x8000'8000));
end_dcbz_hack = J_CC(CC_L);
}
bool emit_fast_path = MSR.DR && m_jit.jo.fastmem_arena; bool emit_fast_path = MSR.DR && m_jit.jo.fastmem_arena;
if (emit_fast_path) if (emit_fast_path)
@ -333,10 +340,13 @@ void Jit64::dcbz(UGeckoInstruction inst)
if (emit_fast_path) if (emit_fast_path)
{ {
FixupBranch end = J(true); FixupBranch end_far_code = J(true);
SwitchToNearCode(); SwitchToNearCode();
SetJumpTarget(end); SetJumpTarget(end_far_code);
} }
if (SConfig::GetInstance().bLowDCBZHack)
SetJumpTarget(end_dcbz_hack);
} }
void Jit64::stX(UGeckoInstruction inst) void Jit64::stX(UGeckoInstruction inst)