From 50d7ad511486df0bebf99fb2aa773be59746e651 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Fri, 10 May 2024 08:36:31 -0700 Subject: [PATCH] [a64] Fix non-const MUL_I32 Was picking up `W0` rather than src1 --- src/xenia/cpu/backend/a64/a64_sequences.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/xenia/cpu/backend/a64/a64_sequences.cc b/src/xenia/cpu/backend/a64/a64_sequences.cc index 7379f4509..53e4a3836 100644 --- a/src/xenia/cpu/backend/a64/a64_sequences.cc +++ b/src/xenia/cpu/backend/a64/a64_sequences.cc @@ -1487,7 +1487,7 @@ struct MUL_HI_I32 e.UBFX(X0, X0, 32, 32); e.MOV(i.dest, X0.toW()); } else { - e.UMULL(X0, W0, i.src2); + e.UMULL(X0, i.src1, i.src2); e.UBFX(X0, X0, 32, 32); e.MOV(i.dest, X0.toW()); } @@ -1496,17 +1496,17 @@ struct MUL_HI_I32 assert_true(!i.src2.is_constant); e.MOV(W0, i.src1.constant()); e.SMULL(X0, W0, i.src2); - e.UBFX(X0, X0, 32, 32); + e.SBFX(X0, X0, 32, 32); e.MOV(i.dest, X0.toW()); } else if (i.src2.is_constant) { assert_true(!i.src1.is_constant); e.MOV(W0, i.src2.constant()); e.SMULL(X0, W0, i.src2); - e.UBFX(X0, X0, 32, 32); + e.SBFX(X0, X0, 32, 32); e.MOV(i.dest, X0.toW()); } else { - e.SMULL(X0, W0, i.src2); - e.UBFX(X0, X0, 32, 32); + e.SMULL(X0, i.src1, i.src2); + e.SBFX(X0, X0, 32, 32); e.MOV(i.dest, X0.toW()); } }