about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/custommem.c2
-rw-r--r--src/emu/modrm.h6
-rw-r--r--src/include/env.h1
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)                   \