rendered paste bodyIndex: pcsx2/x86/ix86-32/iR5900-32.cpp===================================================================--- pcsx2/x86/ix86-32/iR5900-32.cpp (revision 912)+++ pcsx2/x86/ix86-32/iR5900-32.cpp (working copy)@@ -1690,7 +1690,7 @@ u32 sz=(s_nEndBlock-startpc)>>2; - u32 inpage_ptr=startpc;+ u32 inpage_ptr=HWADDR(startpc); u32 inpage_sz=sz*4; while(inpage_sz)@@ -1705,20 +1705,32 @@ mmap_MarkCountedRamPage(PSM(inpage_ptr),inpage_ptr&~0xFFF); else {- MOV32ItoR(ECX, startpc); MOV32ItoR(EDX, sz); - u32 lpc=inpage_ptr;- u32 stg=pgsz;- while(stg>0)- {+ if (pgsz < 8) { // fine tuning needed+ u32 lpc=inpage_ptr;+ u32 stg=pgsz;+ while(stg>0)+ {+ // was dyna_block_discard_recmem. See note in recResetEE for details.+ MOV32ItoR(ECX, startpc);+ CMP32ItoM((uptr)PSM(lpc),*(u32*)PSM(lpc));+ JNE32(((u32)&dyna_block_discard)- ( (u32)x86Ptr[0] + 6 ));++ stg-=4;+ lpc+=4;+ }+ } else { // was dyna_block_discard_recmem. See note in recResetEE for details.- CMP32ItoM((uptr)PSM(lpc),*(u32*)PSM(lpc));- JNE32(((u32)&dyna_block_discard)- ( (u32)x86Ptr[0] + 6 ));+ MOV32ItoR(ESI, (u32)PSM(inpage_ptr));+ MOV32ItoR(EDI, (u32)&recRAMCopy[inpage_ptr / 4]);+ MOV32ItoR(ECX, pgsz / 4);+ *x86Ptr[_EmitterId_]++ = 0xF3;+ *x86Ptr[_EmitterId_]++ = 0xA7;+ MOV32ItoR(ECX, startpc);+ JNE32(((u32)&dyna_block_discard) - ( (u32)x86Ptr[0] + 6 ));+ } - stg-=4;- lpc+=4;- } DbgCon::WriteLn("Manual block @ %08X : %08X %d %d %d %d", params startpc,inpage_ptr,pgsz,0x1000-inpage_offs,inpage_sz,sz*4); }