summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-06-02 03:10:15 -0300
committerGravatar ameerj2021-07-22 21:51:34 -0400
commit4f8b68fb0424ccd273107e45709acb6a5c35cecb (patch)
treeec1523be2e5bff7297dfc2245dc6b6dae55eac13 /src/shader_recompiler/frontend
parentglasm: Use ARB_derivative_control conditionally (diff)
downloadyuzu-4f8b68fb0424ccd273107e45709acb6a5c35cecb.tar.gz
yuzu-4f8b68fb0424ccd273107e45709acb6a5c35cecb.tar.xz
yuzu-4f8b68fb0424ccd273107e45709acb6a5c35cecb.zip
shader: Avoid CPU side undefined behavior on I2F
Diffstat (limited to 'src/shader_recompiler/frontend')
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/integer_floating_point_conversion.cpp2
1 files changed, 2 insertions, 0 deletions
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 d6224d5cc..e0e157275 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) {
114 IR::U1 is_least; 114 IR::U1 is_least;
115 if (src_bitsize == 64) { 115 if (src_bitsize == 64) {
116 is_least = v.ir.IEqual(src, v.ir.Imm64(std::numeric_limits<s64>::min())); 116 is_least = v.ir.IEqual(src, v.ir.Imm64(std::numeric_limits<s64>::min()));
117 } else if (src_bitsize == 32) {
118 is_least = v.ir.IEqual(src, v.ir.Imm32(std::numeric_limits<s32>::min()));
117 } else { 119 } else {
118 const IR::U32 least_value{v.ir.Imm32(-(1 << (src_bitsize - 1)))}; 120 const IR::U32 least_value{v.ir.Imm32(-(1 << (src_bitsize - 1)))};
119 is_least = v.ir.IEqual(src, least_value); 121 is_least = v.ir.IEqual(src, least_value);