From f8e97f5a8af0de3f770abd7aab137933668fef76 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 21 Aug 2021 16:31:25 +0200 Subject: [PATCH] JitArm64: divwx - Special case dividend == 0 Zero divided by any number is still zero. For whatever reason, this case shows up frequently too. --- Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 7bc7ceb2a7..777281abfd 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -1327,6 +1327,13 @@ void JitArm64::divwx(UGeckoInstruction inst) if (inst.Rc) ComputeRC0(imm_d); } + else if (gpr.IsImm(a) && gpr.GetImm(a) == 0) + { + // Zero divided by anything is always zero + gpr.SetImmediate(d, 0); + if (inst.Rc) + ComputeRC0(0); + } else if (gpr.IsImm(a)) { const u32 dividend = gpr.GetImm(a);