From 46e3671081f18583251b4ce765af5f7c43ad60f1 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" <checkins@unknownbrackets.org> Date: Sun, 17 Sep 2023 09:33:53 -0700 Subject: [PATCH] x86jit: Fix flush for special-purpose reg. --- Core/MIPS/x86/X64IRRegCache.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Core/MIPS/x86/X64IRRegCache.cpp b/Core/MIPS/x86/X64IRRegCache.cpp index 387a64bdd17e..911058b19c1a 100644 --- a/Core/MIPS/x86/X64IRRegCache.cpp +++ b/Core/MIPS/x86/X64IRRegCache.cpp @@ -222,14 +222,19 @@ void X64IRRegCache::MapWithFlags(IRInst inst, X64Map destFlags, X64Map src1Flags mapping[2].flags = mapping[2].flags | src2Flags; auto flushReg = [&](IRNativeReg nreg) { + bool keep = false; for (int i = 0; i < 3; ++i) { - if (mapping[i].reg == nr[nreg].mipsReg && (mapping[i].flags & MIPSMap::NOINIT) == MIPSMap::NOINIT) { - DiscardNativeReg(nreg); - return; + if (mapping[i].reg == nr[nreg].mipsReg && (mapping[i].flags & MIPSMap::NOINIT) != MIPSMap::NOINIT) { + keep = true; + break; } } - FlushNativeReg(nreg); + if (keep) { + FlushNativeReg(nreg); + } else { + DiscardNativeReg(nreg); + } }; // If there are any special rules, we might need to spill.