diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-07-02 11:55:39 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-07-02 11:55:39 +0200 |
| commit | 44ff3375df163b55396e9bcd36e9f4099a2ce137 (patch) | |
| tree | e29fb61d8794fa761218efeff39ca32296c06b3e /src | |
| parent | dacc29434065523ecffb19489e7dfc39a5b4c320 (diff) | |
| download | box64-44ff3375df163b55396e9bcd36e9f4099a2ce137.tar.gz box64-44ff3375df163b55396e9bcd36e9f4099a2ce137.zip | |
[DYNAREC] Fixed a potential issue where defered flags are not computed/reset on internal jump
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_functions.c | 3 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.h | 2 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_helper.h | 2 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.h | 2 |
4 files changed, 5 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index 84832f65..e2ed058a 100644 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -774,7 +774,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r if (!dyn->need_dump && !BOX64ENV(dynarec_gdbjit) && !BOX64ENV(dynarec_perf_map)) return; static char buf[4096]; - int length = sprintf(buf, "barrier=%d state=%d/%d/%d(%d:%d->%d:%d), %s=%X/%X, use=%X, need=%X/%X, sm=%d(%d/%d)", + int length = sprintf(buf, "barrier=%d state=%d/%d/%d(%d:%d->%d:%d/%d), %s=%X/%X, use=%X, need=%X/%X, sm=%d(%d/%d)", dyn->insts[ninst].x64.barrier, dyn->insts[ninst].x64.state_flags, dyn->f.pending, @@ -783,6 +783,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r dyn->insts[ninst].f_entry.dfnone, dyn->insts[ninst].f_exit.pending, dyn->insts[ninst].f_exit.dfnone, + dyn->insts[ninst].f_exit.dfnone_here, dyn->insts[ninst].x64.may_set ? "may" : "set", dyn->insts[ninst].x64.set_flags, dyn->insts[ninst].x64.gen_flags, diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 63418126..595660fb 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -1123,9 +1123,9 @@ do { \ if (!dyn->f.dfnone) { \ STRw_U12(wZR, xEmu, offsetof(x64emu_t, df)); \ + dyn->f.dfnone_here = 1; \ } \ if(!dyn->insts[ninst].x64.may_set) { \ - dyn->f.dfnone_here = 1; \ dyn->f.dfnone = 1; \ } \ } while(0) diff --git a/src/dynarec/la64/dynarec_la64_helper.h b/src/dynarec/la64/dynarec_la64_helper.h index 48387125..010742dd 100644 --- a/src/dynarec/la64/dynarec_la64_helper.h +++ b/src/dynarec/la64/dynarec_la64_helper.h @@ -850,9 +850,9 @@ do { \ if (!dyn->f.dfnone) { \ ST_W(xZR, xEmu, offsetof(x64emu_t, df)); \ + dyn->f.dfnone_here = 1; \ } \ if (!dyn->insts[ninst].x64.may_set) { \ - dyn->f.dfnone_here = 1; \ dyn->f.dfnone = 1; \ } \ } while (0) diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index 939e3c37..bbd305cf 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -892,9 +892,9 @@ do { \ if (!dyn->f.dfnone) { \ SW(xZR, xEmu, offsetof(x64emu_t, df)); \ + dyn->f.dfnone_here = 1; \ } \ if (!dyn->insts[ninst].x64.may_set) { \ - dyn->f.dfnone_here = 1; \ dyn->f.dfnone = 1; \ } \ } while (0) |