diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/custommem.c | 2 | ||||
| -rw-r--r-- | src/emu/modrm.h | 6 | ||||
| -rw-r--r-- | src/include/env.h | 1 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/custommem.c b/src/custommem.c index c0f5c028..7c997422 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -2250,6 +2250,8 @@ void CheckHotPage(uintptr_t addr, uint32_t prot) return; if(prot&PROT_NEVERCLEAN && BOX64ENV(dynarec_dirty)==2) return; + if(BOX64ENV(dynarec_nohotpage)) + return; uintptr_t page = addr>>12; // look for idx int idx = IdxHotPage(page); diff --git a/src/emu/modrm.h b/src/emu/modrm.h index d8687df4..e18212aa 100644 --- a/src/emu/modrm.h +++ b/src/emu/modrm.h @@ -13,9 +13,9 @@ #define PARITY(x) (((emu->x64emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0) #ifdef DYNAREC -#define STEP CheckExec(emu, addr); if(step && !ACCESS_FLAG(F_TF)) return 0; -#define STEP2 CheckExec(emu, addr); if(step && !ACCESS_FLAG(F_TF)) {R_RIP = addr; return 0;} -#define STEP3 CheckExec(emu, addr); if(*step) (*step)++; +#define STEP if(step && !ACCESS_FLAG(F_TF)) return 0; else if((emu->old_ip>>12)!=(addr>>12)) CheckExec(emu, addr); +#define STEP2 if(step && !ACCESS_FLAG(F_TF)) {R_RIP = addr; return 0;} else if((emu->old_ip>>12)!=(addr>>12)) CheckExec(emu, addr); +#define STEP3 if(*step) (*step)++; else if((emu->old_ip>>12)!=(addr>>12)) CheckExec(emu, addr); #else #define STEP #define STEP2 diff --git a/src/include/env.h b/src/include/env.h index 398e1f03..3e6a7342 100644 --- a/src/include/env.h +++ b/src/include/env.h @@ -47,6 +47,7 @@ extern char* ftrace_name; INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2, 1) \ BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1, 1) \ INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2, 0) \ + BOOLEAN(BOX64_DYNAREC_NOHOTPAGE, dynarec_nohotpage, 0, 0) \ BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0, 1) \ INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2, 1) \ STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range, 1) \ |