drc: end block on syscall and hlecall, not insn after them
authornotaz <notasas@gmail.com>
Sat, 18 Dec 2010 17:51:06 +0000 (19:51 +0200)
committernotaz <notasas@gmail.com>
Sat, 18 Dec 2010 17:51:06 +0000 (19:51 +0200)
..or else we might get jump there, which causes it to abort.
Also remove assert that's hit occasionally.

libpcsxcore/new_dynarec/new_dynarec.c

index 2f42f43..2e7f75a 100644 (file)
@@ -8104,7 +8104,7 @@ int new_recompile_block(int addr)
       case 0x3B: strcpy(insn[i],"HLECALL"); type=HLECALL; break;
 #endif
       default: strcpy(insn[i],"???"); type=NI;
-        printf("NI %08x @%08x\n", source[i], addr + i*4);
+        printf("NI %08x @%08x (%08x)\n", source[i], addr + i*4, addr);
         break;
     }
     itype[i]=type;
@@ -8359,9 +8359,9 @@ int new_recompile_block(int addr)
       // Don't get too close to the limit
       if(i>MAXBLOCK/2) done=1;
     }
-    if(i>0&&itype[i-1]==SYSCALL&&stop_after_jal) done=1;
-    if(itype[i-1]==HLECALL) done=1;
-    assert(i<MAXBLOCK-1);
+    if(itype[i]==SYSCALL&&stop_after_jal) done=1;
+    if(itype[i]==HLECALL) done=1;
+    //assert(i<MAXBLOCK-1);
     if(start+i*4==pagelimit-4) done=1;
     assert(start+i*4<pagelimit);
     if (i==MAXBLOCK-1) done=1;