sh2 drc: bugfix in block management
authorkub <derkub@gmail.com>
Sat, 12 Oct 2019 09:10:28 +0000 (11:10 +0200)
committerkub <derkub@gmail.com>
Sat, 12 Oct 2019 09:10:28 +0000 (11:10 +0200)
cpu/sh2/compiler.c
pico/32x/memory.c

index 2c1e8cf..b7c57b3 100644 (file)
@@ -769,8 +769,7 @@ static void rm_block_list(struct block_list **blist)
   struct block_list *next, *current = *blist;
   while (current != NULL) {
     next = current->next;
-    current->next = blist_free;
-    blist_free = current;
+    rm_from_block_lists(current->block);
     current = next;
   }
   *blist = NULL;
@@ -5441,7 +5440,6 @@ int sh2_drc_init(SH2 *sh2)
       block_tables[i] = calloc(BLOCK_MAX_COUNT(i), sizeof(*block_tables[0]));
       if (block_tables[i] == NULL)
         goto fail;
-      // max 2 block links (exits) per block
       block_link_pool[i] = calloc(BLOCK_LINK_MAX_COUNT(i),
                           sizeof(*block_link_pool[0]));
       if (block_link_pool[i] == NULL)
index 60820e1..06215a7 100644 (file)
@@ -513,9 +513,9 @@ static void p32x_reg_write8(u32 a, u32 d)
     case 0x2e:
     case 0x2f:
       if (REG8IN16(r, a) != d) {
-        int cycles = SekCyclesDone();
+        unsigned int cycles = SekCyclesDone();
 
-        if (cycles - (int)msh2.m68krcycles_done > 30)
+        if (CYCLES_GT(cycles - msh2.m68krcycles_done, 64))
           p32x_sync_sh2s(cycles);
 
         REG8IN16(r, a) = d;