From 6d6cbe2e665b416e377390e2ab85830919b52345 Mon Sep 17 00:00:00 2001 From: Merry Date: Sat, 30 Jul 2022 19:12:19 +0100 Subject: [PATCH] emit_arm64_saturation: Fix UnsignedSaturation for < 0 --- src/dynarmic/backend/arm64/emit_arm64_saturation.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/dynarmic/backend/arm64/emit_arm64_saturation.cpp b/src/dynarmic/backend/arm64/emit_arm64_saturation.cpp index db55ce8f..95b8b51e 100644 --- a/src/dynarmic/backend/arm64/emit_arm64_saturation.cpp +++ b/src/dynarmic/backend/arm64/emit_arm64_saturation.cpp @@ -114,8 +114,10 @@ void EmitIR(oaknut::CodeGenerator& code, EmitCon const u32 saturated_value = (1u << N) - 1; code.MOV(Wscratch0, saturated_value); + code.CMP(*Woperand, 0); + code.CSEL(Wresult, Woperand, WZR, GT); code.CMP(*Woperand, Wscratch0); - code.CSEL(Wresult, Woperand, Wscratch0, LS); + code.CSEL(Wresult, Wresult, Wscratch0, LT); if (overflow_inst) { auto Woverflow = ctx.reg_alloc.WriteW(overflow_inst);