From 4f8b68fb0424ccd273107e45709acb6a5c35cecb Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Wed, 2 Jun 2021 03:10:15 -0300
Subject: [PATCH] shader: Avoid CPU side undefined behavior on I2F

---
 .../translate/impl/integer_floating_point_conversion.cpp        | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/integer_floating_point_conversion.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/integer_floating_point_conversion.cpp
index d6224d5cce..e0e157275b 100644
--- a/src/shader_recompiler/frontend/maxwell/translate/impl/integer_floating_point_conversion.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/integer_floating_point_conversion.cpp
@@ -114,6 +114,8 @@ void I2F(TranslatorVisitor& v, u64 insn, IR::U32U64 src) {
             IR::U1 is_least;
             if (src_bitsize == 64) {
                 is_least = v.ir.IEqual(src, v.ir.Imm64(std::numeric_limits<s64>::min()));
+            } else if (src_bitsize == 32) {
+                is_least = v.ir.IEqual(src, v.ir.Imm32(std::numeric_limits<s32>::min()));
             } else {
                 const IR::U32 least_value{v.ir.Imm32(-(1 << (src_bitsize - 1)))};
                 is_least = v.ir.IEqual(src, least_value);