diff options
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"); |