summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2022-02-14 19:03:34 +0100
committerJosJuice <josjuice@gmail.com>2022-02-14 19:17:59 +0100
commitfd511a689f5acb9cb563f6f267da836e7ad4f37b (patch)
treed1823bbe2c1842c689bcecdd4105062570b3953f /Source/Core
parent86dbf768b925d7c451e42b0694d82c7f648957de (diff)
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.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/Jit64/Jit.cpp4
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/Jit.cpp4
2 files changed, 4 insertions, 4 deletions
diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/PowerPC/Jit64/Jit.cpp
index 903bc826fb..f43d25855f 100644
--- a/Source/Core/Core/PowerPC/Jit64/Jit.cpp
+++ b/Source/Core/Core/PowerPC/Jit64/Jit.cpp
@@ -1184,8 +1184,8 @@ bool Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
gpr.Discard(op.gprDiscardable);
fpr.Discard(op.fprDiscardable);
}
- gpr.Flush(~op.gprInUse);
- fpr.Flush(~op.fprInUse);
+ gpr.Flush(~op.gprInUse & (op.regsIn | op.regsOut));
+ fpr.Flush(~op.fprInUse & (op.fregsIn | op.GetFregsOut()));
if (opinfo->flags & FL_LOADSTORE)
++js.numLoadStoreInst;
diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
index 113c8e0043..3be81d2c71 100644
--- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
@@ -971,8 +971,8 @@ bool JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
gpr.DiscardRegisters(op.gprDiscardable);
fpr.DiscardRegisters(op.fprDiscardable);
}
- gpr.StoreRegisters(~op.gprInUse);
- fpr.StoreRegisters(~op.fprInUse);
+ gpr.StoreRegisters(~op.gprInUse & (op.regsIn | op.regsOut));
+ fpr.StoreRegisters(~op.fprInUse & (op.fregsIn | op.GetFregsOut()));
if (opinfo->flags & FL_LOADSTORE)
++js.numLoadStoreInst;