diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-16 15:08:56 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-16 15:08:56 +0200 |
| commit | b26a20e709fb8673fcab6930a879ff86d181055e (patch) | |
| tree | 25d8f154d7a5612b4ab7f4598e052b4125a9f7bb /src | |
| parent | d7eb87129eb6aa7eeac61ddeeb1357a654380e4b (diff) | |
| download | box64-b26a20e709fb8673fcab6930a879ff86d181055e.tar.gz box64-b26a20e709fb8673fcab6930a879ff86d181055e.zip | |
[ARM64_DYNAREC] More handling of low precision x87 flag change
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_d9.c | 2 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_db.c | 1 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_dd.c | 1 |
3 files changed, 4 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_d9.c b/src/dynarec/arm64/dynarec_arm64_d9.c index ca18951a..fe7242df 100644 --- a/src/dynarec/arm64/dynarec_arm64_d9.c +++ b/src/dynarec/arm64/dynarec_arm64_d9.c @@ -562,6 +562,8 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FLDCW Ew"); GETEW(x1, 0); STRH_U12(x1, xEmu, offsetof(x64emu_t, cw)); // hopefully cw is not too far for an imm8 + if(dyn->need_x87check) + UBFXw(x87pc, x1, 8, 2); break; case 6: INST_NAME("FNSTENV Ed"); diff --git a/src/dynarec/arm64/dynarec_arm64_db.c b/src/dynarec/arm64/dynarec_arm64_db.c index 1de2a9a6..1cda1140 100644 --- a/src/dynarec/arm64/dynarec_arm64_db.c +++ b/src/dynarec/arm64/dynarec_arm64_db.c @@ -134,6 +134,7 @@ uintptr_t dynarec64_DB(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MESSAGE(LOG_DUMP, "Need Optimization (FNINIT)\n"); x87_purgecache(dyn, ninst, 0, x1, x2, x3); CALL(reset_fpu, -1); + ARM64_CHECK_PRECISION(); break; case 0xE8: case 0xE9: diff --git a/src/dynarec/arm64/dynarec_arm64_dd.c b/src/dynarec/arm64/dynarec_arm64_dd.c index 623551d4..68a430da 100644 --- a/src/dynarec/arm64/dynarec_arm64_dd.c +++ b/src/dynarec/arm64/dynarec_arm64_dd.c @@ -206,6 +206,7 @@ uintptr_t dynarec64_DD(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(ed!=x1) {MOVx_REG(x1, ed);} CALL(native_fsave, -1); CALL(reset_fpu, -1); + ARM64_CHECK_PRECISION(); break; case 7: INST_NAME("FNSTSW m2byte"); |