From 8065520583accbeeec750141de769d5712f275ba Mon Sep 17 00:00:00 2001 From: Exzap <13877693+Exzap@users.noreply.github.com> Date: Fri, 20 Mar 2026 22:48:48 +0100 Subject: [PATCH] PPCRec: Fix eflags optimization --- src/Cafe/HW/Espresso/Recompiler/IML/IMLOptimizer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Cafe/HW/Espresso/Recompiler/IML/IMLOptimizer.cpp b/src/Cafe/HW/Espresso/Recompiler/IML/IMLOptimizer.cpp index 7671a163..604fc571 100644 --- a/src/Cafe/HW/Espresso/Recompiler/IML/IMLOptimizer.cpp +++ b/src/Cafe/HW/Espresso/Recompiler/IML/IMLOptimizer.cpp @@ -678,7 +678,8 @@ void IMLOptimizerX86_SubstituteCJumpForEflagsJump(IMLOptimizerRegIOAnalysis& reg // we can turn the jump into an eflags jump cjumpInstr.make_x86_eflags_jcc(cond, invertedCondition); - if (IMLUtil_CountRegisterReadsInRange(seg, cmpInstrIndex, cjmpInstIndex, regCondBool.GetRegID()) > 1 || regIoAnalysis.IsRegisterNeededAtEndOfSegment(seg, regCondBool.GetRegID())) + // note: x86_eflags_jcc doesn't count towards cond reg reads, so we have to check > 0 here instead of > 1 + if (IMLUtil_CountRegisterReadsInRange(seg, cmpInstrIndex, cjmpInstIndex, regCondBool.GetRegID()) > 0 || regIoAnalysis.IsRegisterNeededAtEndOfSegment(seg, regCondBool.GetRegID())) return; // bool register is used beyond the CMP, we can't drop it auto& cmpInstr = seg.imlList[cmpInstrIndex];