Browse Source

shader: Avoid CPU side undefined behavior on I2F

nce_cpp
ReinUsesLisp 5 years ago
committed by ameerj
parent
commit
1dd4302fac
  1. 2
      src/shader_recompiler/frontend/maxwell/translate/impl/integer_floating_point_conversion.cpp

2
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);

Loading…
Cancel
Save