From 937e2cf853255dd636388134c882c6277ce74552 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 13 Nov 2024 13:31:32 +0100 Subject: [ARM64_DYNAREC] Improved 32/64bits imul/mul opcodes flags handling --- src/dynarec/arm64/dynarec_arm64_00.c | 87 ++++++++++++++++------------- src/dynarec/arm64/dynarec_arm64_0f.c | 31 +++-------- src/dynarec/arm64/dynarec_arm64_64.c | 104 +++++++++++++++++++++++++---------- src/dynarec/arm64/dynarec_arm64_67.c | 62 +++++++++++++++++---- 4 files changed, 184 insertions(+), 100 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index e06cd2d6..0e4b22c2 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -822,7 +822,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0x69: INST_NAME("IMUL Gd, Ed, Id"); - SETFLAGS(X_ALL, SF_SET_PENDING); + SETFLAGS(X_ALL, SF_SET); nextop = F8; GETGD; GETED(4); @@ -833,13 +833,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin UFLAG_IF { SMULH(x3, ed, x4); MULx(gd, ed, x4); - IFX(X_PEND) { - UFLAG_OP1(x3); - UFLAG_RES(gd); - UFLAG_DF(x1, d_imul64); - } else { - SET_DFNONE(x1); - } + SET_DFNONE(x1); IFX(X_ZF | X_PF | X_AF | X_SF) { MOV32w(x1, (1<