diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2023-03-29 01:56:46 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-28 19:56:46 +0200 |
| commit | 0ea17750844de67b652ceed3d35ddc38490fde10 (patch) | |
| tree | 1d93158cda129929f82fd3bf08a0a76c9e96e9b5 /src | |
| parent | 2fda0bd12be31f16a50a7b47db410865620bc0d3 (diff) | |
| download | box64-0ea17750844de67b652ceed3d35ddc38490fde10.tar.gz box64-0ea17750844de67b652ceed3d35ddc38490fde10.zip | |
[RV64_DYNAREC] Fixed more issues caught by cosim (#647)
* [RV64_DYNAREC] Fixed 0F AF IMUL opcode * [RV64_DYNAREC] NOTEST on divs for brevity
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_00.c | 2 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_64.c | 1 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_66.c | 1 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_67.c | 1 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00.c | 2 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_0f.c | 4 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_66.c | 1 |
7 files changed, 10 insertions, 2 deletions
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); |