about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-05-06 09:39:29 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-05-06 09:39:29 +0200
commit0a558652e32c059fff866e1098ad09d1540c22d7 (patch)
treed638157cefbabcb64356e151a68bf39a635eb5ea /src
parent30126c9288ca6bb53ca8f1d7c13bb811f47a0d0b (diff)
downloadbox64-0a558652e32c059fff866e1098ad09d1540c22d7.tar.gz
box64-0a558652e32c059fff866e1098ad09d1540c22d7.zip
[DYNAREC] Made FASTPAGE more agressive
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynablock.c4
-rwxr-xr-xsrc/libtools/signals.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c
index d5c95111..758e7c30 100755
--- a/src/dynarec/dynablock.c
+++ b/src/dynarec/dynablock.c
@@ -255,8 +255,10 @@ dynablock_t* DBGetBlock(x64emu_t* emu, uintptr_t addr, int create)
             emu->test.test = 0;
             if(box64_dynarec_fastpage) {
                 uint32_t hash = X31_hash_code(db->x64_addr, db->x64_size);
-                if(hash==db->hash)  // seems ok, run it without reprotecting it
+                if(hash==db->hash) { // seems ok, run it without reprotecting it
+                    setJumpTableIfRef64(db->x64_addr, db->block, db->jmpnext);
                     return db;
+                }
                 db->done = 0;   // invalidating the block, it's already not good
                 dynarec_log(LOG_DEBUG, "Invalidating block %p from %p:%p (hash:%X/%X) for %p\n", db, db->x64_addr, db->x64_addr+db->x64_size-1, hash, db->hash, (void*)addr);
                 // Free db, it's now invalid!
diff --git a/src/libtools/signals.c b/src/libtools/signals.c
index 7f68f598..89c0f0f0 100755
--- a/src/libtools/signals.c
+++ b/src/libtools/signals.c
@@ -939,7 +939,7 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx)
         }
         // access error, unprotect the block (and mark them dirty)
         unprotectDB((uintptr_t)addr, 1, 1);    // unprotect 1 byte... But then, the whole page will be unprotected
-        int db_need_test = db?getNeedTest((uintptr_t)db->x64_addr):0;
+        int db_need_test = (db && !box64_dynarec_fastpage)?getNeedTest((uintptr_t)db->x64_addr):0;
         if(db && ((addr>=db->x64_addr && addr<(db->x64_addr+db->x64_size)) || db_need_test)) {
             // dynablock got auto-dirty! need to get out of it!!!
             emu_jmpbuf_t* ejb = GetJmpBuf();