about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-04 11:51:28 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-04 11:51:28 +0100
commit3c05822011bf351d3c4e2b5d847d0353387bab67 (patch)
tree81f9d1ba5e17522bc14891061bb1c2a822509909 /src
parent02cad7b5fe6d632738bda1c2610142dccc45ee62 (diff)
downloadbox64-3c05822011bf351d3c4e2b5d847d0353387bab67.tar.gz
box64-3c05822011bf351d3c4e2b5d847d0353387bab67.zip
[DYNAREC] Fixed a nasty bug with the finetunning of the jump table memory allocation
Diffstat (limited to 'src')
-rw-r--r--src/custommem.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/custommem.c b/src/custommem.c
index f0936b73..6cb011c1 100644
--- a/src/custommem.c
+++ b/src/custommem.c
@@ -575,27 +575,27 @@ void FreeDynarecMap(uintptr_t addr)
 
 static uintptr_t getDBSize(uintptr_t addr, size_t maxsize, dynablock_t** db)
 {
-    const uintptr_t idx3 = (addr>>48)&0xffff;
-    const uintptr_t idx2 = (addr>>32)&0xffff;
-    const uintptr_t idx1 = (addr>>16)&0xffff;
-    uintptr_t idx0 = addr&0xffff;
+    const uintptr_t idx3 = (addr>>JMPTABL_START3)&JMPTABLE_MASK3;
+    const uintptr_t idx2 = (addr>>JMPTABL_START2)&JMPTABLE_MASK2;
+    const uintptr_t idx1 = (addr>>JMPTABL_START1)&JMPTABLE_MASK1;
+    uintptr_t idx0 = addr&JMPTABLE_MASK0;
     *db = *(dynablock_t**)(box64_jmptbl3[idx3][idx2][idx1][idx0]- sizeof(void*));
     if(*db)
         return 1;
     if(box64_jmptbl3[idx3] == box64_jmptbldefault2)
-        return (addr|0xffffffffffffLL)+1-addr;
+        return (addr|((1LL<<JMPTABL_START3)-1))+1-addr;
     if(box64_jmptbl3[idx3][idx2] == box64_jmptbldefault1)
-        return (addr|0xffffffffLL)+1-addr;
+        return (addr|((1LL<<JMPTABL_START2)-1))+1-addr;
     uintptr_t* block = box64_jmptbl3[idx3][idx2][idx1];
     if(block == box64_jmptbldefault0)
-        return (addr|0xffffLL)+1-addr;
-    if (maxsize>0x10000)
-        maxsize = 0x10000;
+        return (addr|JMPTABLE_MASK0)+1-addr;
+    if (maxsize>JMPTABLE_MASK0+1)
+        maxsize = JMPTABLE_MASK0+1;
     while(idx0<maxsize && block[idx0]==(uintptr_t)native_next)
         ++idx0;
-    if(idx0<0x10000)
+    if(idx0<JMPTABLE_MASK0+1)
         *db = *(dynablock_t**)(block[idx0]- sizeof(void*));
-    return idx0+1-(addr&0xffff);
+    return idx0+1-(addr&JMPTABLE_MASK0);
 }
 
 // each dynmap is 64k of size