From 5f6a9d07ac93754e1f04b3054a2a7118c25d3965 Mon Sep 17 00:00:00 2001 From: offtkp Date: Mon, 2 Sep 2024 05:08:30 +0300 Subject: [PATCH] Set carry for S_ADDC_U32 --- src/shader_recompiler/frontend/translate/scalar_alu.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/shader_recompiler/frontend/translate/scalar_alu.cpp b/src/shader_recompiler/frontend/translate/scalar_alu.cpp index c97c38ba7..89a859dd8 100644 --- a/src/shader_recompiler/frontend/translate/scalar_alu.cpp +++ b/src/shader_recompiler/frontend/translate/scalar_alu.cpp @@ -547,7 +547,11 @@ void Translator::S_ADDC_U32(const GcnInst& inst) { const IR::U32 src0{GetSrc(inst.src[0])}; const IR::U32 src1{GetSrc(inst.src[1])}; const IR::U32 carry{ir.Select(ir.GetScc(), ir.Imm32(1U), ir.Imm32(0U))}; - SetDst(inst.dst[0], ir.IAdd(ir.IAdd(src0, src1), carry)); + const IR::U32 result{ir.IAdd(ir.IAdd(src0, src1), carry)}; + SetDst(inst.dst[0], result); + const IR::U1 less_src0 = ir.ILessThan(result, src0, false); + const IR::U1 less_src1 = ir.ILessThan(result, src1, false); + ir.SetScc(ir.LogicalOr(less_src0, less_src1)); } void Translator::S_MAX_U32(const GcnInst& inst) {