From fa3481ea8ea0d88e6ec4f250df873e806d2cad45 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 28 Nov 2022 18:55:57 +0100 Subject: [DYNAREC] Optimized cleanDBFromAddressRange, again --- src/custommem.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/custommem.c b/src/custommem.c index b6cfa043..d8d2d768 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -628,7 +628,7 @@ void FreeDynarecMap(dynablock_t* db, uintptr_t addr, size_t size) ActuallyFreeDynarecMap(db, addr, size); } -uintptr_t getDefaultSize(uintptr_t addr) +uintptr_t getSizeJmpDefault(uintptr_t addr, size_t maxsize) { uintptr_t idx3, idx2, idx1, idx0; idx3 = (((uintptr_t)addr)>>48)&0xffff; @@ -638,10 +638,13 @@ uintptr_t getDefaultSize(uintptr_t addr) if(box64_jmptbl3[idx3][idx2] == box64_jmptbldefault1) return (addr&~((1LL<<32)-1)|0xffffffffLL)-addr + 1; idx1 = (((uintptr_t)addr)>>16)&0xffff; - if(box64_jmptbl3[idx3][idx2][idx1] == box64_jmptbldefault0) + uintptr_t* block = box64_jmptbl3[idx3][idx2][idx1]; + if(block == box64_jmptbldefault0) return (addr&~((1LL<<16)-1)|0xffffLL)-addr + 1; idx0 = addr&0xffff; - while(idx0<0x10000 && box64_jmptbl3[idx3][idx2][idx1][idx0]==(uintptr_t)native_next) + if (maxsize>0x10000) + maxsize = 0x10000; + while(idx0