From 0ea17750844de67b652ceed3d35ddc38490fde10 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Wed, 29 Mar 2023 01:56:46 +0800 Subject: [RV64_DYNAREC] Fixed more issues caught by cosim (#647) * [RV64_DYNAREC] Fixed 0F AF IMUL opcode * [RV64_DYNAREC] NOTEST on divs for brevity --- src/dynarec/arm64/dynarec_arm64_00.c | 2 ++ src/dynarec/arm64/dynarec_arm64_64.c | 1 + src/dynarec/arm64/dynarec_arm64_66.c | 1 + src/dynarec/arm64/dynarec_arm64_67.c | 1 + src/dynarec/rv64/dynarec_rv64_00.c | 2 ++ src/dynarec/rv64/dynarec_rv64_0f.c | 4 ++-- src/dynarec/rv64/dynarec_rv64_66.c | 1 + 7 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 2c82d929..5925738d 100755 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2399,6 +2399,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 7: INST_NAME("IDIV Eb"); + NOTEST(x1); MESSAGE(LOG_DUMP, "Need Optimization\n"); SETFLAGS(X_ALL, SF_SET); GETEB(x1, 0); @@ -2509,6 +2510,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 7: INST_NAME("IDIV Ed"); + NOTEST(x1); SETFLAGS(X_ALL, SF_SET); if(!rex.w) { SET_DFNONE(x2) diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index f5793b9d..da2c8c4a 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -918,6 +918,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 7: INST_NAME("IDIV Ed"); + NOTEST(x1); SETFLAGS(X_ALL, SF_SET); if(!rex.w) { SET_DFNONE(x2) diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index e55effc7..fa69a836 100755 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -886,6 +886,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 7: INST_NAME("IDIV Ew"); + NOTEST(x1); SETFLAGS(X_ALL, SF_SET); GETSEW(x1, 0); UXTHw(x2, xRAX); diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c index 61442c57..c50e5013 100755 --- a/src/dynarec/arm64/dynarec_arm64_67.c +++ b/src/dynarec/arm64/dynarec_arm64_67.c @@ -939,6 +939,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 7: INST_NAME("IDIV Ed"); + NOTEST(x1); SETFLAGS(X_ALL, SF_SET); if(!rex.w) { SET_DFNONE(x2) diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c index 4dab2b01..20cb4ecd 100644 --- a/src/dynarec/rv64/dynarec_rv64_00.c +++ b/src/dynarec/rv64/dynarec_rv64_00.c @@ -1664,6 +1664,7 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 7: INST_NAME("IDIV Eb"); + NOTEST(x1); MESSAGE(LOG_DUMP, "Need Optimization\n"); SETFLAGS(X_ALL, SF_SET); GETEB(x1, 0); @@ -1778,6 +1779,7 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 7: INST_NAME("IDIV Ed"); + NOTEST(x1); SETFLAGS(X_ALL, SF_SET); if(!rex.w) { SET_DFNONE() diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index 038be66b..ed473df9 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -400,11 +400,11 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SRLI(x3, gd, 32); UFLAG_OP1(x3); UFLAG_DF(x3, d_imul32); - SLLI(gd, gd, 32); - SRLI(gd, gd, 32); } else { MULxw(gd, gd, ed); } + SLLI(gd, gd, 32); + SRLI(gd, gd, 32); } break; diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c index 547ae7f2..df0c09c5 100644 --- a/src/dynarec/rv64/dynarec_rv64_66.c +++ b/src/dynarec/rv64/dynarec_rv64_66.c @@ -625,6 +625,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 7: INST_NAME("IDIV Ew"); + NOTEST(x1); SETFLAGS(X_ALL, SF_SET); GETSEW(x1, 0); SLLI(x2, xRAX, 48); -- cgit 1.4.1