From 1b7bd32ac1daa90a0f9f6dfdd6c7289845a3cbad Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 5 Nov 2023 09:15:08 +0100 Subject: [PATCH] JitArm64: Correctly flush non-dirty immediates Without this change, non-dirty immediates don't actually get flushed. This can be a problem if we for instance are flushing all registers in order to execute an interpreter fallback. If that interpreter fallback writes to a register that contained a non-dirty immediate, the JIT will keep using the old value instead of loading the updated value. --- Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp index a1400a5c9a..96c1e356db 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp @@ -232,10 +232,10 @@ void Arm64GPRCache::FlushRegister(size_t index, bool maintain_state, ARM64Reg tm if (allocated_tmp_reg) UnlockRegister(tmp_reg); } - - if (!maintain_state) - reg.Flush(); } + + if (!maintain_state) + reg.Flush(); } }