From 5e9e1faedc97194e46f3fb4b3665ec416ce7efbf Mon Sep 17 00:00:00 2001 From: rajdakin Date: Sun, 31 Dec 2023 15:49:57 +0100 Subject: [MEMORY] Switched from a sparse array to a red-black tree (#1180) * [MEMORY] Switched from a sparse array to an RB tree * [RBTREE] Fixed the Android build --- src/dynarec/dynablock.c | 18 ------------------ src/dynarec/dynarec_native.c | 7 ------- 2 files changed, 25 deletions(-) (limited to 'src/dynarec') diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 3cfd871c..c5fa1dc5 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -246,24 +246,6 @@ dynablock_t* DBGetBlock(x64emu_t* emu, uintptr_t addr, int create, int is32bits) if(db && db->done && db->block && getNeedTest(addr)) { if(db->always_test) sched_yield(); // just calm down... - if(AreaInHotPage((uintptr_t)db->x64_addr, (uintptr_t)db->x64_addr + db->x64_size - 1)) { - 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 - 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! - FreeDynablock(db, 1); - return NULL; // not building a new one, it's still a hotpage - } else { - dynarec_log(LOG_INFO, "Not running block %p from %p:%p with for %p because it's in a hotpage\n", db, db->x64_addr, db->x64_addr+db->x64_size-1, (void*)addr); - return NULL; - } - } uint32_t hash = X31_hash_code(db->x64_addr, db->x64_size); int need_lock = mutex_trylock(&my_context->mutex_dyndump); if(hash!=db->hash) { diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index 94898c27..6dfc9c89 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -463,10 +463,6 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit B+32 .. B+32+sz : instsize (compressed array with each instruction length on x64 and native side) */ - if(IsInHotPage(addr)) { - dynarec_log(LOG_DEBUG, "Canceling dynarec FillBlock on hotpage for %p\n", (void*)addr); - return NULL; - } if(addr>=box64_nodynarec_start && addrhash != hash)) { dynarec_log(LOG_DEBUG, "Warning, a block changed while being processed hash(%p:%ld)=%x/%x\n", block->x64_addr, block->x64_size, block->hash, hash); - AddHotPage(addr); CancelBlock64(0); return NULL; } @@ -658,7 +652,6 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit } if(!isprotectedDB(addr, end-addr)) { dynarec_log(LOG_DEBUG, "Warning, block unprotected while being processed %p:%ld, marking as need_test\n", block->x64_addr, block->x64_size); - AddHotPage(addr); block->dirty = 1; //protectDB(addr, end-addr); } -- cgit 1.4.1