diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-31 21:00:15 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-31 21:00:15 +0200 |
| commit | b24f2f14f0ce716d1341b521978737cf8a327179 (patch) | |
| tree | 90ed59608a78fc11571bbaed4cccd5dcc613563a /src/dynarec | |
| parent | 40a1fab5e06011f3299676a1d61e7fb98819a6a0 (diff) | |
| download | box64-b24f2f14f0ce716d1341b521978737cf8a327179.tar.gz box64-b24f2f14f0ce716d1341b521978737cf8a327179.zip | |
[DYNAREC] More improvement to TEST_DYNAREC
Diffstat (limited to 'src/dynarec')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_helper.c | 6 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_helper.h | 14 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_native_pass.c | 3 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.h | 14 |
4 files changed, 23 insertions, 14 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c index cbbf0c38..7aaf098e 100755 --- a/src/dynarec/arm64/dynarec_arm64_helper.c +++ b/src/dynarec/arm64/dynarec_arm64_helper.c @@ -418,6 +418,7 @@ void jump_to_epilog(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst) } else { GETIP_(ip); } + NOTEST(x2); TABLE64(x2, (uintptr_t)arm64_epilog); SMEND(); BR(x2); @@ -432,6 +433,7 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst) if(reg!=xRIP) { MOVx_REG(xRIP, reg); } + NOTEST(x2); uintptr_t tbl = getJumpTable64(); MAYUSE(tbl); TABLE64(x3, tbl); @@ -444,6 +446,7 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst) UBFXx(x2, xRIP, JMPTABL_START0, JMPTABL_SHIFT0); LDRx_REG_LSL3(x2, x3, x2); } else { + NOTEST(x2); uintptr_t p = getJumpTableAddress64(ip); MAYUSE(p); TABLE64(x3, p); @@ -479,6 +482,7 @@ void ret_to_epilog(dynarec_arm_t* dyn, int ninst) // not the correct return address, regular jump } uintptr_t tbl = getJumpTable64(); + NOTEST(x2); MOV64x(x2, tbl); UBFXx(x3, xRIP, JMPTABL_START3, JMPTABL_SHIFT3); LDRx_REG_LSL3(x2, x2, x3); @@ -516,6 +520,7 @@ void retn_to_epilog(dynarec_arm_t* dyn, int ninst, int n) // not the correct return address, regular jump } uintptr_t tbl = getJumpTable64(); + NOTEST(x2); MOV64x(x2, tbl); UBFXx(x3, xRIP, JMPTABL_START3, JMPTABL_SHIFT3); LDRx_REG_LSL3(x2, x2, x3); @@ -535,6 +540,7 @@ void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits) MAYUSE(ninst); MESSAGE(LOG_DUMP, "IRet to epilog\n"); // POP IP + NOTEST(x2); POP1(xRIP); // POP CS POP1(x2); diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 5c908685..10d948b2 100755 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -1305,13 +1305,13 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n #define NOTEST(s1) \ if(box64_dynarec_test) { \ - if(offsetof(x64emu_t, test.test)<(1<<12)) { \ - STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.test));\ - } else { \ - MOV32w(s1, offsetof(x64emu_t, test.test)); \ - ADDx_REG(s1, xEmu, s1); \ - STRw_U12(xZR, s1, 0); \ - } \ + STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.test)); \ + STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.clean));\ + } +#define GOTEST(s1, s2) \ + if(box64_dynarec_test) { \ + MOV32w(s2, 1); \ + STRw_U12(s2, xEmu, offsetof(x64emu_t, test.test)); \ } #endif //__DYNAREC_ARM64_HELPER_H__ diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index 0c9ddfbc..1e8ba3aa 100755 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -78,6 +78,9 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr) dyn->last_ip = 0; // reset IP if some jump are comming here fpu_propagate_stack(dyn, ninst); NEW_INST; + if(!ninst) { + GOTEST(x1, x2); + } if(dyn->insts[ninst].pred_sz>1) {SMSTART();} fpu_reset_scratch(dyn); if((dyn->insts[ninst].x64.need_before&~X_PEND) && !dyn->insts[ninst].pred_sz) { diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index f7fb7a35..b0f71315 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -1144,13 +1144,13 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int #define NOTEST(s1) \ if(box64_dynarec_test) { \ - if(offsetof(x64emu_t, test.test)<2048) { \ - SW(xZR, xEmu, offsetof(x64emu_t, test.test)); \ - } else { \ - MOV32w(s1, offsetof(x64emu_t, test.test)); \ - ADD(s1, xEmu, s1); \ - SW(xZR, s1, 0); \ - } \ + SW(xZR, xEmu, offsetof(x64emu_t, test.test)); \ + SW(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ + } +#define GOTEST(s1, s2) \ + if(box64_dynarec_test) { \ + MOV32w(s2, 1); \ + SW(s2, xEmu, offsetof(x64emu_t, test.test)); \ } #endif //__DYNAREC_RV64_HELPER_H__ |