From: notaz Date: Sun, 21 Jun 2009 18:16:51 +0000 (+0300) Subject: cache clean fix X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=gpsp.git;a=commitdiff_plain;h=f50ad10a9b620788f189f0c44fa79b295f52dab4 cache clean fix --- diff --git a/cpu_threaded.c b/cpu_threaded.c index a753c17..4ff1548 100644 --- a/cpu_threaded.c +++ b/cpu_threaded.c @@ -3412,6 +3412,7 @@ void flush_translation_cache_ram() (ram_translation_ptr - ram_translation_cache) + 0x100); #endif ram_translation_ptr = ram_translation_cache; + last_ram_translation_ptr = ram_translation_cache; ram_block_tag_top = 0x0101; if(iwram_code_min != 0xFFFFFFFF) { @@ -3467,6 +3468,7 @@ void flush_translation_cache_rom() #endif rom_translation_ptr = rom_translation_cache; + last_rom_translation_ptr = rom_translation_cache; memset(rom_branch_hash, 0, sizeof(rom_branch_hash)); } @@ -3479,6 +3481,7 @@ void flush_translation_cache_bios() bios_block_tag_top = 0x0101; bios_translation_ptr = bios_translation_cache; + last_bios_translation_ptr = bios_translation_cache; memset(bios_rom + 0x4000, 0, 0x4000); } diff --git a/gp2x/arm_emit.h b/gp2x/arm_emit.h index 522bf48..5d2eee0 100644 --- a/gp2x/arm_emit.h +++ b/gp2x/arm_emit.h @@ -646,12 +646,10 @@ u8 *last_ram_translation_ptr = ram_translation_cache; u8 *last_bios_translation_ptr = bios_translation_cache; #define translate_invalidate_dcache_one(which) \ - if (which##_translation_ptr < last_##which##_translation_ptr) \ - last_##which##_translation_ptr = which##_translation_cache; \ if (which##_translation_ptr > last_##which##_translation_ptr) \ { \ - /*warm_cache_op_range(WOP_D_CLEAN, last_##which##_translation_ptr, \ - which##_translation_ptr - last_##which##_translation_ptr);*/ \ + warm_cache_op_range(WOP_D_CLEAN, last_##which##_translation_ptr, \ + which##_translation_ptr - last_##which##_translation_ptr); \ warm_cache_op_range(WOP_I_INVALIDATE, last_##which##_translation_ptr, 32);\ last_##which##_translation_ptr = which##_translation_ptr; \ } @@ -661,9 +659,6 @@ u8 *last_bios_translation_ptr = bios_translation_cache; translate_invalidate_dcache_one(rom) \ translate_invalidate_dcache_one(ram) \ translate_invalidate_dcache_one(bios) \ - /* notaz: tried cleaning dcache ranges, but it doesn't work for every game, \ - * don't know why */ \ - warm_cache_op_all(WOP_D_CLEAN); \ } #define invalidate_icache_region(addr, size) \