drc: don't clear ARM caches on whole translation cache - it's very slow
[pcsx_rearmed.git] / libpcsxcore / new_dynarec / assem_arm.c
index 83b115d..264f9d6 100644 (file)
@@ -142,7 +142,7 @@ add_literal(int addr,int val)
   literalcount++; 
 } 
 
-void kill_pointer(void *stub)
+void *kill_pointer(void *stub)
 {
   int *ptr=(int *)(stub+4);
   assert((*ptr&0x0ff00000)==0x05900000);
@@ -150,6 +150,7 @@ void kill_pointer(void *stub)
   int **l_ptr=(void *)ptr+offset+8;
   int *i_ptr=*l_ptr;
   set_jump_target((int)i_ptr,(int)stub);
+  return i_ptr;
 }
 
 int get_pointer(void *stub)
@@ -1226,13 +1227,12 @@ void emit_orimm(int rs,int imm,int rt)
 
 void emit_xorimm(int rs,int imm,int rt)
 {
-  assert(imm>0&&imm<65536);
   u_int armval;
   if(genimm(imm,&armval)) {
     assem_debug("eor %s,%s,#%d\n",regname[rt],regname[rs],imm);
     output_w32(0xe2200000|rd_rn_rm(rt,rs,0)|armval);
   }else{
-    assert(imm>0);
+    assert(imm>0&&imm<65536);
     assem_debug("eor %s,%s,#%d\n",regname[rt],regname[rs],imm&0xFF00);
     assem_debug("eor %s,%s,#%d\n",regname[rt],regname[rs],imm&0xFF);
     output_w32(0xe2200000|rd_rn_imm_shift(rt,rs,imm>>8,8));
@@ -2554,6 +2554,11 @@ do_readstub(int n)
     rth=get_reg(i_regmap,rt1[i]|64);
     rt=get_reg(i_regmap,rt1[i]);
   }
+#ifdef PCSX
+  if(rt<0)
+    // assume forced dummy read
+    rt=get_reg(i_regmap,-1);
+#endif
   assert(rs>=0);
   assert(rt>=0);
   if(addr<0) addr=rt;