From 7a518516f8c04644e4ca4bb6bf38a8886e4ae42e Mon Sep 17 00:00:00 2001 From: notaz Date: Sat, 7 Jan 2012 21:12:38 +0200 Subject: [PATCH] drc: do basic current block modification detection const writes only.. --- libpcsxcore/new_dynarec/new_dynarec.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libpcsxcore/new_dynarec/new_dynarec.c b/libpcsxcore/new_dynarec/new_dynarec.c index 37706bc3..b6af4c4b 100644 --- a/libpcsxcore/new_dynarec/new_dynarec.c +++ b/libpcsxcore/new_dynarec/new_dynarec.c @@ -3332,10 +3332,24 @@ void store_assemble(int i,struct regstat *i_regs) #endif } } + u_int addr_val=constmap[i][s]+offset; if(jaddr) { add_stub(type,jaddr,(int)out,i,addr,(int)i_regs,ccadj[i],reglist); } else if(c&&!memtarget) { - inline_writestub(type,i,constmap[i][s]+offset,i_regs->regmap,rs2[i],ccadj[i],reglist); + inline_writestub(type,i,addr_val,i_regs->regmap,rs2[i],ccadj[i],reglist); + } + // basic current block modification detection.. + // not looking back as that should be in mips cache already + if(c&&start+i*4regmap==regs[i].regmap); // not delay slot + if(i_regs->regmap==regs[i].regmap) { + load_all_consts(regs[i].regmap_entry,regs[i].was32,regs[i].wasdirty,i); + wb_dirtys(regs[i].regmap_entry,regs[i].was32,regs[i].wasdirty); + emit_movimm(start+i*4+4,0); + emit_writeword(0,(int)&pcaddr); + emit_jmp((int)do_interrupt); + } } //if(opcode[i]==0x2B || opcode[i]==0x3F) //if(opcode[i]==0x2B || opcode[i]==0x28) -- 2.39.5