cache clean fix
authornotaz <notaz@pixelinis>
Sun, 21 Jun 2009 18:16:51 +0000 (21:16 +0300)
committernotaz <notaz@pixelinis>
Sun, 21 Jun 2009 18:16:51 +0000 (21:16 +0300)
cpu_threaded.c
gp2x/arm_emit.h

index a753c17..4ff1548 100644 (file)
@@ -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);
 }
 
index 522bf48..5d2eee0 100644 (file)
@@ -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)                                  \