X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=gpsp.git;a=blobdiff_plain;f=gp2x%2Farm_emit.h;h=522bf482106dc677dbe68da1482c35b8acbd2b85;hp=1d8040f3057934507314782abc49a9a7d3309ce8;hb=4c8082789e5c04ad4e2e4799994c27a1ff77e8bd;hpb=638cc6264cf3e8d1f046885fb68b5a1e22729d06 diff --git a/gp2x/arm_emit.h b/gp2x/arm_emit.h index 1d8040f..522bf48 100644 --- a/gp2x/arm_emit.h +++ b/gp2x/arm_emit.h @@ -641,15 +641,34 @@ u32 arm_disect_imm_32bit(u32 imm, u32 *stores, u32 *rotations) } \ } \ +u8 *last_rom_translation_ptr = rom_translation_cache; +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_I_INVALIDATE, last_##which##_translation_ptr, 32);\ + last_##which##_translation_ptr = which##_translation_ptr; \ + } + #define translate_invalidate_dcache() \ { \ - invalidate_cache_region(rom_translation_cache, \ - rom_translation_cache + ROM_TRANSLATION_CACHE_SIZE); \ - invalidate_cache_region(ram_translation_cache, \ - ram_translation_cache + RAM_TRANSLATION_CACHE_SIZE); \ - invalidate_cache_region(bios_translation_cache, \ - bios_translation_cache + BIOS_TRANSLATION_CACHE_SIZE); \ -} \ + 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) \ + warm_cache_op_range(WOP_I_INVALIDATE, addr, size) + #define block_prologue_size 0