Jit: Skip redundant flushes

This makes codegen faster (by perhaps 10-20% in the case of Jit64,
I didn't measure too closely), which helps speed up NBA Live 2005
a little. But the game still has serious performance issues.
This commit is contained in:
JosJuice 2022-02-14 19:03:34 +01:00
parent 86dbf768b9
commit fd511a689f
2 changed files with 4 additions and 4 deletions

View File

@ -1184,8 +1184,8 @@ bool Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
gpr.Discard(op.gprDiscardable); gpr.Discard(op.gprDiscardable);
fpr.Discard(op.fprDiscardable); fpr.Discard(op.fprDiscardable);
} }
gpr.Flush(~op.gprInUse); gpr.Flush(~op.gprInUse & (op.regsIn | op.regsOut));
fpr.Flush(~op.fprInUse); fpr.Flush(~op.fprInUse & (op.fregsIn | op.GetFregsOut()));
if (opinfo->flags & FL_LOADSTORE) if (opinfo->flags & FL_LOADSTORE)
++js.numLoadStoreInst; ++js.numLoadStoreInst;

View File

@ -971,8 +971,8 @@ bool JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
gpr.DiscardRegisters(op.gprDiscardable); gpr.DiscardRegisters(op.gprDiscardable);
fpr.DiscardRegisters(op.fprDiscardable); fpr.DiscardRegisters(op.fprDiscardable);
} }
gpr.StoreRegisters(~op.gprInUse); gpr.StoreRegisters(~op.gprInUse & (op.regsIn | op.regsOut));
fpr.StoreRegisters(~op.fprInUse); fpr.StoreRegisters(~op.fprInUse & (op.fregsIn | op.GetFregsOut()));
if (opinfo->flags & FL_LOADSTORE) if (opinfo->flags & FL_LOADSTORE)
++js.numLoadStoreInst; ++js.numLoadStoreInst;