From 7ae9dca5622065b96852cf7080cd619d7ce410ad Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 9 Jul 2021 21:06:36 +0200 Subject: [DYNAREC] Fixed emiter for shr32c, sar32c and shrd32c (for #44) --- src/dynarec/dynarec_arm64_emit_shift.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/dynarec/dynarec_arm64_emit_shift.c b/src/dynarec/dynarec_arm64_emit_shift.c index c89546e1..0380650d 100755 --- a/src/dynarec/dynarec_arm64_emit_shift.c +++ b/src/dynarec/dynarec_arm64_emit_shift.c @@ -206,7 +206,9 @@ void emit_shr32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int32_t c, in return; } IFX(X_CF) { - LSRxw_REG(s3, s1, c-1); + if(c>1) { + LSRxw(s3, s1, c-1); + } BFIw(xFlags, s3, 0, 1); } LSRxw(s1, s1, c); @@ -252,7 +254,9 @@ void emit_sar32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int32_t c, in return; } IFX(X_CF) { - ASRxw(s3, s1, c-1); + if(c>1) { + ASRxw(s3, s1, c-1); + } BFIw(xFlags, s3, 0, 1); } ASRxw(s1, s1, c); @@ -359,7 +363,9 @@ void emit_shrd32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int3 return; } IFX(X_CF) { - LSRxw_REG(s3, s1, c-1); + if(c>1) { + LSRxw(s3, s1, c-1); + } BFIw(xFlags, s3, 0, 1); } LSRxw(s1, s1, c); -- cgit 1.4.1