rendered paste bodyIndex: pcsx2/x86/ix86-32/iR5900-32.cpp===================================================================--- pcsx2/x86/ix86-32/iR5900-32.cpp (revision 1088)+++ pcsx2/x86/ix86-32/iR5900-32.cpp (working copy)@@ -751,6 +751,14 @@ return; addr = HWADDR(addr); + addr -= addr % 16;+ size += 3;+ size -= size % 3;++ for (u32 a = addr / 16; a < addr / 16 + size / 4; a++)+ //vtlb_private::vtlbdata.alloc_bits[a / 32] &= ~(1 << (a & 31));+ vtlb_private::vtlbdata.alloc_bits[a / 32] = 0;+ int blockidx = recBlocks.LastIndex(addr + size * 4 - 4); if (blockidx == -1)@@ -1544,66 +1552,29 @@ } else {- // import the vtlbdata (alloc_bits and alloc_base and stuff): using namespace vtlb_private;- + MOV32ItoR(ECX, inpage_ptr);- MOV32ItoR(EDX, pgsz);- - u32 mask=0;- u32 writen=0;- u32 writen_start=0;+ MOV32ItoR(EDX, pgsz / 4); - u32 lpc=inpage_ptr;- u32 stg=pgsz;+ u32 index = (psM - vtlbdata.alloc_base + inpage_ptr) / 512;+ u32 mask = 0; - while(stg>0)- {- u32 bit = (lpc>>4) & 7;- if (mask==0)- {- //writen=bit;- writen_start=(((u8*)PSM(lpc)-vtlbdata.alloc_base)>>4)/8;- }- mask |= 1 << bit;-- if (bit==31)- {- vtlbdata.alloc_bits[writen_start]&=~mask;- xTEST( ptr32[&vtlbdata.alloc_bits[writen_start]], mask ); // auto-optimizes to imm8 when applicable.- xJNZ( dyna_block_discard );- //SysPrintf("%08X %d %d\n",mask,pgsz,pgsz>>4);+ for (u32 bitpos = inpage_ptr / 16, bit = 0; bitpos < (inpage_ptr + pgsz + 15) / 16; bitpos++, bit++) {+ if (bit == 32) {+ bit = 0; mask = 0;+ xTEST(ptr32[&vtlbdata.alloc_bits[index]], mask);+ xJNZ(dyna_block_discard);+ index++; }-- //writen++;-- if (stg<=16)- {- lpc += stg;- stg = 0;- }- else- {- lpc += 16;- stg -= 16;- }+ mask |= 1 << bit; }+ xTEST(ptr32[&vtlbdata.alloc_bits[index]], mask);+ xJNZ(dyna_block_discard); - if (mask)+ if (manual_counter[inpage_ptr >> 12] <= 4) {- vtlbdata.alloc_bits[writen_start] &= ~mask;- xTEST( ptr32[&vtlbdata.alloc_bits[writen_start]], mask ); // auto-optimizes to imm8 when applicable.- xJNZ( dyna_block_discard );- //SysPrintf("%08X %d %d\n",mask,pgsz,pgsz>>4);- mask = 0;- }-- if( startpc != 0x81fc0 && manual_counter[inpage_ptr >> 12] <= 4 )- {- // Commented out until we replace it with a smarter algo that only- // recompiles blocks a limited number of times.- xADD(ptr16[&manual_page[inpage_ptr >> 12]], 1); xJC( dyna_page_reset ); }