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.