;Copyright (C) 1997-2005 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach ) ; ;http://www.zsnes.com ;http://sourceforge.net/projects/zsnes ; ;This program is free software; you can redistribute it and/or ;modify it under the terms of the GNU General Public License ;as published by the Free Software Foundation; either ;version 2 of the License, or (at your option) any later ;version. ; ;This program is distributed in the hope that it will be useful, ;but WITHOUT ANY WARRANTY; without even the implied warranty of ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;GNU General Public License for more details. ; ;You should have received a copy of the GNU General Public License ;along with this program; if not, write to the Free Software ;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ;---------------------------------------------------------- ;hq2x filter ;Copyright (C) 2003 MaxSt ( maxst@hiend3d.com ) ;---------------------------------------------------------- %include "macros.mac" EXTSYM vidbuffer,curblank,MMXSupport,GUIOn,GUIOn2, EXTSYM vidbufferofsb EXTSYM FilteredGUI,resolutn,lineleft,cfield EXTSYM hirestiledat,newengen,SpecialLine EXTSYM hqFilter EXTSYM AddEndBytes EXTSYM NumBytesPerLine EXTSYM WinVidMemStart EXTSYM BitConv32Ptr EXTSYM RGBtoYUVPtr EXTSYM prevline, nextline, deltaptr, xcounter EXTSYM w1, w2, w3, w4, w5, w6, w7, w8, w9 EXTSYM reg_blank, const3, const5, const6, const14, cross, threshold SECTION .bss NEWSYM c1, resd 1 NEWSYM c2, resd 1 NEWSYM c3, resd 1 NEWSYM c4, resd 1 NEWSYM c5, resd 1 NEWSYM c6, resd 1 NEWSYM c7, resd 1 NEWSYM c8, resd 1 NEWSYM c9, resd 1 SECTION .text %macro TestDiff 2 xor ecx,ecx mov edx,[%1] cmp edx,[%2] je %%fin mov ecx,[RGBtoYUVPtr] movd mm1,[ecx+edx*4] movq mm5,mm1 mov edx,[%2] movd mm2,[ecx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd ecx,mm1 %%fin: %endmacro %macro DiffOrNot 4 TestDiff %1,%2 test ecx,ecx jz %%same %3 jmp %%fin %%same: %4 %%fin %endmacro %macro DiffOrNot 6 TestDiff %1,%2 test ecx,ecx jz %%same %3 %4 jmp %%fin %%same: %5 %6 %%fin %endmacro %macro DiffOrNot 8 TestDiff %1,%2 test ecx,ecx jz %%same %3 %4 %5 jmp %%fin %%same: %6 %7 %8 %%fin %endmacro %macro DiffOrNot 10 TestDiff %1,%2 test ecx,ecx jz %%same %3 %4 %5 %6 jmp %%fin %%same: %7 %8 %9 %10 %%fin %endmacro %macro Interp1 3 mov edx,%2 shl edx,2 add edx,%3 sub edx,%2 shr edx,2 mov %1,edx %endmacro %macro Interp2 4 mov edx,%2 shl edx,1 add edx,%3 add edx,%4 shr edx,2 mov %1,edx %endmacro %macro Interp5 3 mov edx,%2 add edx,%3 shr edx,1 mov %1,edx %endmacro %macro Interp6 3 movd mm1, eax movd mm2, %2 movd mm3, %3 punpcklbw mm1, [reg_blank] punpcklbw mm2, [reg_blank] punpcklbw mm3, [reg_blank] pmullw mm1, [const5] psllw mm2, 1 paddw mm1, mm3 paddw mm1, mm2 psrlw mm1, 3 packuswb mm1, [reg_blank] movd %1, mm1 %endmacro %macro Interp7 3 movd mm1, eax movd mm2, %2 movd mm3, %3 punpcklbw mm1, [reg_blank] punpcklbw mm2, [reg_blank] punpcklbw mm3, [reg_blank] pmullw mm1, [const6] paddw mm2, mm3 paddw mm1, mm2 psrlw mm1, 3 packuswb mm1, [reg_blank] movd %1, mm1 %endmacro %macro Interp9 3 movd mm1, eax movd mm2, %2 movd mm3, %3 punpcklbw mm1, [reg_blank] punpcklbw mm2, [reg_blank] punpcklbw mm3, [reg_blank] psllw mm1, 1 paddw mm2, mm3 pmullw mm2, [const3] paddw mm1, mm2 psrlw mm1, 3 packuswb mm1, [reg_blank] movd %1, mm1 %endmacro %macro Interp10 3 movd mm1, eax movd mm2, %2 movd mm3, %3 punpcklbw mm1, [reg_blank] punpcklbw mm2, [reg_blank] punpcklbw mm3, [reg_blank] pmullw mm1, [const14] paddw mm2, mm3 paddw mm1, mm2 psrlw mm1, 4 packuswb mm1, [reg_blank] movd %1, mm1 %endmacro %macro PIXEL00_0 0 mov [edi],eax %endmacro %macro PIXEL00_10 0 Interp1 [edi],eax,[c1] %endmacro %macro PIXEL00_11 0 Interp1 [edi],eax,[c4] %endmacro %macro PIXEL00_12 0 Interp1 [edi],eax,[c2] %endmacro %macro PIXEL00_20 0 Interp2 [edi],eax,[c4],[c2] %endmacro %macro PIXEL00_21 0 Interp2 [edi],eax,[c1],[c2] %endmacro %macro PIXEL00_22 0 Interp2 [edi],eax,[c1],[c4] %endmacro %macro PIXEL00_60 0 Interp6 [edi],[c2],[c4] %endmacro %macro PIXEL00_61 0 Interp6 [edi],[c4],[c2] %endmacro %macro PIXEL00_70 0 Interp7 [edi],[c4],[c2] %endmacro %macro PIXEL00_90 0 Interp9 [edi],[c4],[c2] %endmacro %macro PIXEL00_100 0 Interp10 [edi],[c4],[c2] %endmacro %macro PIXEL01_0 0 mov [edi+4],eax %endmacro %macro PIXEL01_10 0 Interp1 [edi+4],eax,[c3] %endmacro %macro PIXEL01_11 0 Interp1 [edi+4],eax,[c2] %endmacro %macro PIXEL01_12 0 Interp1 [edi+4],eax,[c6] %endmacro %macro PIXEL01_20 0 Interp2 [edi+4],eax,[c2],[c6] %endmacro %macro PIXEL01_21 0 Interp2 [edi+4],eax,[c3],[c6] %endmacro %macro PIXEL01_22 0 Interp2 [edi+4],eax,[c3],[c2] %endmacro %macro PIXEL01_60 0 Interp6 [edi+4],[c6],[c2] %endmacro %macro PIXEL01_61 0 Interp6 [edi+4],[c2],[c6] %endmacro %macro PIXEL01_70 0 Interp7 [edi+4],[c2],[c6] %endmacro %macro PIXEL01_90 0 Interp9 [edi+4],[c2],[c6] %endmacro %macro PIXEL01_100 0 Interp10 [edi+4],[c2],[c6] %endmacro %macro PIXEL10_0 0 mov [edi+ebx],eax %endmacro %macro PIXEL10_10 0 Interp1 [edi+ebx],eax,[c7] %endmacro %macro PIXEL10_11 0 Interp1 [edi+ebx],eax,[c8] %endmacro %macro PIXEL10_12 0 Interp1 [edi+ebx],eax,[c4] %endmacro %macro PIXEL10_20 0 Interp2 [edi+ebx],eax,[c8],[c4] %endmacro %macro PIXEL10_21 0 Interp2 [edi+ebx],eax,[c7],[c4] %endmacro %macro PIXEL10_22 0 Interp2 [edi+ebx],eax,[c7],[c8] %endmacro %macro PIXEL10_60 0 Interp6 [edi+ebx],[c4],[c8] %endmacro %macro PIXEL10_61 0 Interp6 [edi+ebx],[c8],[c4] %endmacro %macro PIXEL10_70 0 Interp7 [edi+ebx],[c8],[c4] %endmacro %macro PIXEL10_90 0 Interp9 [edi+ebx],[c8],[c4] %endmacro %macro PIXEL10_100 0 Interp10 [edi+ebx],[c8],[c4] %endmacro %macro PIXEL11_0 0 mov [edi+ebx+4],eax %endmacro %macro PIXEL11_10 0 Interp1 [edi+ebx+4],eax,[c9] %endmacro %macro PIXEL11_11 0 Interp1 [edi+ebx+4],eax,[c6] %endmacro %macro PIXEL11_12 0 Interp1 [edi+ebx+4],eax,[c8] %endmacro %macro PIXEL11_20 0 Interp2 [edi+ebx+4],eax,[c6],[c8] %endmacro %macro PIXEL11_21 0 Interp2 [edi+ebx+4],eax,[c9],[c8] %endmacro %macro PIXEL11_22 0 Interp2 [edi+ebx+4],eax,[c9],[c6] %endmacro %macro PIXEL11_60 0 Interp6 [edi+ebx+4],[c8],[c6] %endmacro %macro PIXEL11_61 0 Interp6 [edi+ebx+4],[c6],[c8] %endmacro %macro PIXEL11_70 0 Interp7 [edi+ebx+4],[c6],[c8] %endmacro %macro PIXEL11_90 0 Interp9 [edi+ebx+4],[c6],[c8] %endmacro %macro PIXEL11_100 0 Interp10 [edi+ebx+4],[c6],[c8] %endmacro NEWSYM hq2x_32b cmp byte[curblank],40h jne .startcopy ret .startcopy pushad mov ax,ds mov es,ax mov esi,[vidbuffer] mov edi,[WinVidMemStart] add esi,16*2+256*2+32*2 mov ecx,[vidbufferofsb] mov [deltaptr],ecx cmp byte[FilteredGUI],0 jne .filtergui cmp byte[GUIOn2],1 je nointerp .filtergui cmp byte[MMXSupport],0 je nointerp cmp byte[hqFilter],0 jne hq2x ;----------------------------; nointerp: mov dl,[resolutn] mov byte[lineleft],dl mov ebx,[NumBytesPerLine] mov edx,[BitConv32Ptr] .loopy mov ecx,256 .loopx movzx eax,word[esi] mov eax,[edx+eax*4] mov [edi],eax mov [edi+4],eax mov [edi+ebx],eax mov [edi+ebx+4],eax add esi,2 add edi,8 dec ecx jnz .loopx add edi,[AddEndBytes] add edi,ebx add esi,64 dec byte[lineleft] jnz near .loopy popad ret ;----------------------------; hq2x: mov dl,[resolutn] mov byte[lineleft],dl mov dword[prevline],0 mov dword[nextline],576 mov ebx,hirestiledat+1 cmp byte[GUIOn],1 je .loopy cmp byte[newengen],0 je .loopy mov ebx,SpecialLine+1 .loopy mov [InterPtr],ebx cmp byte[ebx],1 jbe .nohires call HighResProc mov edx,[deltaptr] mov ecx,128 mov eax,0xAAAAAAAA .a mov [edx],eax add edx,4 dec ecx jnz .a mov [deltaptr],edx jmp .nexty .nohires mov dword[xcounter],254 ; x={Xres-2, Xres-1} are special cases. ; x=0 - special case mov edx,[deltaptr] mov ecx,[prevline] mov eax,[nextline] movq mm2,[esi+ecx] movq mm3,[esi] movq mm4,[esi+eax] movq mm5,mm2 movq mm6,mm3 movq mm7,mm4 pcmpeqw mm2,[edx+ecx] pcmpeqw mm3,[edx] pcmpeqw mm4,[edx+eax] pand mm2,mm3 pand mm2,mm4 movd eax,mm2 inc eax jz near .loopx_end movd eax,mm5 movzx edx,ax mov [w1],edx mov [w2],edx shr eax,16 mov [w3],eax movd eax,mm6 movzx edx,ax mov [w4],edx mov [w5],edx shr eax,16 mov [w6],eax movd eax,mm7 movzx edx,ax mov [w7],edx mov [w8],edx shr eax,16 mov [w9],eax jmp .flags .loopx mov edx,[deltaptr] mov ecx,[prevline] mov eax,[nextline] movq mm2,[esi+ecx-2] movq mm3,[esi-2] movq mm4,[esi+eax-2] movq mm5,mm2 movq mm6,mm3 movq mm7,mm4 pcmpeqw mm2,[edx+ecx-2] pcmpeqw mm3,[edx-2] pcmpeqw mm4,[edx+eax-2] pand mm2,mm3 pand mm2,mm4 movd ebx,mm2 psrlq mm2,32 movd eax,mm2 cwde and eax,ebx inc eax jz near .loopx_end movd eax,mm5 mov [edx+ecx-2],ax movzx edx,ax mov [w1],edx shr eax,16 mov [w2],eax psrlq mm5,32 movd eax,mm5 movzx edx,ax mov [w3],edx movd eax,mm6 movzx edx,ax mov [w4],edx shr eax,16 mov [w5],eax psrlq mm6,32 movd eax,mm6 movzx edx,ax mov [w6],edx movd eax,mm7 movzx edx,ax mov [w7],edx shr eax,16 mov [w8],eax psrlq mm7,32 movd eax,mm7 movzx edx,ax mov [w9],edx .flags mov ebx,[RGBtoYUVPtr] mov eax,[w5] xor ecx,ecx movd mm5,[ebx+eax*4] mov dword[cross],0 mov edx,[w2] cmp eax,edx je .noflag2 or dword[cross],1 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag2 or ecx,2 .noflag2 mov edx,[w4] cmp eax,edx je .noflag4 or dword[cross],2 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag4 or ecx,8 .noflag4 mov edx,[w6] cmp eax,edx je .noflag6 or dword[cross],4 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag6 or ecx,16 .noflag6 mov edx,[w8] cmp eax,edx je .noflag8 or dword[cross],8 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag8 or ecx,64 .noflag8 test ecx,ecx jnz .testflag1 mov ecx,[cross] mov ebx,[BitConv32Ptr] mov eax,[ebx+eax*4] jmp [FuncTable2+ecx*4] .testflag1 mov edx,[w1] cmp eax,edx je .noflag1 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag1 or ecx,1 .noflag1 mov edx,[w3] cmp eax,edx je .noflag3 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag3 or ecx,4 .noflag3 mov edx,[w7] cmp eax,edx je .noflag7 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag7 or ecx,32 .noflag7 mov edx,[w9] cmp eax,edx je .noflag9 movq mm1,mm5 movd mm2,[ebx+edx*4] psubusb mm1,mm2 psubusb mm2,mm5 por mm1,mm2 psubusb mm1,[threshold] movd edx,mm1 test edx,edx jz .noflag9 or ecx,128 .noflag9 mov ebx,[BitConv32Ptr] mov eax,[ebx+eax*4] mov edx,[w2] mov edx,[ebx+edx*4] mov [c2],edx mov edx,[w4] mov edx,[ebx+edx*4] mov [c4],edx mov edx,[w6] mov edx,[ebx+edx*4] mov [c6],edx mov edx,[w8] mov edx,[ebx+edx*4] mov [c8],edx test ecx,0x005A jz .switch mov edx,[w1] mov edx,[ebx+edx*4] mov [c1],edx mov edx,[w3] mov edx,[ebx+edx*4] mov [c3],edx mov edx,[w7] mov edx,[ebx+edx*4] mov [c7],edx mov edx,[w9] mov edx,[ebx+edx*4] mov [c9],edx .switch mov ebx,[NumBytesPerLine] jmp [FuncTable+ecx*4] ..@flag0 ..@flag1 ..@flag4 ..@flag32 ..@flag128 ..@flag5 ..@flag132 ..@flag160 ..@flag33 ..@flag129 ..@flag36 ..@flag133 ..@flag164 ..@flag161 ..@flag37 ..@flag165 ; PIXEL00_20 ; PIXEL01_20 ; PIXEL10_20 ; PIXEL11_20 ; the same, only optimized shl eax,1 mov ecx,eax add ecx,[c2] mov edx,ecx add edx,[c4] shr edx,2 mov [edi],edx add ecx,[c6] shr ecx,2 mov [edi+4],ecx mov ecx,eax add ecx,[c8] mov edx,ecx add edx,[c4] shr edx,2 mov [edi+ebx],edx add ecx,[c6] shr ecx,2 mov [edi+ebx+4],ecx jmp .loopx_end ..@flag2 ..@flag34 ..@flag130 ..@flag162 PIXEL00_22 PIXEL01_21 PIXEL10_20 PIXEL11_20 jmp .loopx_end ..@flag16 ..@flag17 ..@flag48 ..@flag49 PIXEL00_20 PIXEL01_22 PIXEL10_20 PIXEL11_21 jmp .loopx_end ..@flag64 ..@flag65 ..@flag68 ..@flag69 PIXEL00_20 PIXEL01_20 PIXEL10_21 PIXEL11_22 jmp .loopx_end ..@flag8 ..@flag12 ..@flag136 ..@flag140 PIXEL00_21 PIXEL01_20 PIXEL10_22 PIXEL11_20 jmp .loopx_end ..@flag3 ..@flag35 ..@flag131 ..@flag163 PIXEL00_11 PIXEL01_21 PIXEL10_20 PIXEL11_20 jmp .loopx_end ..@flag6 ..@flag38 ..@flag134 ..@flag166 PIXEL00_22 PIXEL01_12 PIXEL10_20 PIXEL11_20 jmp .loopx_end ..@flag20 ..@flag21 ..@flag52 ..@flag53 PIXEL00_20 PIXEL01_11 PIXEL10_20 PIXEL11_21 jmp .loopx_end ..@flag144 ..@flag145 ..@flag176 ..@flag177 PIXEL00_20 PIXEL01_22 PIXEL10_20 PIXEL11_12 jmp .loopx_end ..@flag192 ..@flag193 ..@flag196 ..@flag197 PIXEL00_20 PIXEL01_20 PIXEL10_21 PIXEL11_11 jmp .loopx_end ..@flag96 ..@flag97 ..@flag100 ..@flag101 PIXEL00_20 PIXEL01_20 PIXEL10_12 PIXEL11_22 jmp .loopx_end ..@flag40 ..@flag44 ..@flag168 ..@flag172 PIXEL00_21 PIXEL01_20 PIXEL10_11 PIXEL11_20 jmp .loopx_end ..@flag9 ..@flag13 ..@flag137 ..@flag141 PIXEL00_12 PIXEL01_20 PIXEL10_22 PIXEL11_20 jmp .loopx_end ..@flag18 ..@flag50 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_20 PIXEL10_20 PIXEL11_21 jmp .loopx_end ..@flag80 ..@flag81 PIXEL00_20 PIXEL01_22 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_20 jmp .loopx_end ..@flag72 ..@flag76 PIXEL00_21 PIXEL01_20 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_20 PIXEL11_22 jmp .loopx_end ..@flag10 ..@flag138 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_20 PIXEL01_21 PIXEL10_22 PIXEL11_20 jmp .loopx_end ..@flag66 PIXEL00_22 PIXEL01_21 PIXEL10_21 PIXEL11_22 jmp .loopx_end ..@flag24 PIXEL00_21 PIXEL01_22 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag7 ..@flag39 ..@flag135 PIXEL00_11 PIXEL01_12 PIXEL10_20 PIXEL11_20 jmp .loopx_end ..@flag148 ..@flag149 ..@flag180 PIXEL00_20 PIXEL01_11 PIXEL10_20 PIXEL11_12 jmp .loopx_end ..@flag224 ..@flag228 ..@flag225 PIXEL00_20 PIXEL01_20 PIXEL10_12 PIXEL11_11 jmp .loopx_end ..@flag41 ..@flag169 ..@flag45 PIXEL00_12 PIXEL01_20 PIXEL10_11 PIXEL11_20 jmp .loopx_end ..@flag22 ..@flag54 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_20 PIXEL11_21 jmp .loopx_end ..@flag208 ..@flag209 PIXEL00_20 PIXEL01_22 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag104 ..@flag108 PIXEL00_21 PIXEL01_20 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_22 jmp .loopx_end ..@flag11 ..@flag139 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_21 PIXEL10_22 PIXEL11_20 jmp .loopx_end ..@flag19 ..@flag51 DiffOrNot w2,w6,PIXEL00_11,PIXEL01_10,PIXEL00_60,PIXEL01_90 PIXEL10_20 PIXEL11_21 jmp .loopx_end ..@flag146 ..@flag178 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_10,PIXEL11_12,PIXEL01_90,PIXEL11_61 PIXEL10_20 jmp .loopx_end ..@flag84 ..@flag85 PIXEL00_20 DiffOrNot w6,w8,PIXEL01_11,PIXEL11_10,PIXEL01_60,PIXEL11_90 PIXEL10_21 jmp .loopx_end ..@flag112 ..@flag113 PIXEL00_20 PIXEL01_22 DiffOrNot w6,w8,PIXEL10_12,PIXEL11_10,PIXEL10_61,PIXEL11_90 jmp .loopx_end ..@flag200 ..@flag204 PIXEL00_21 PIXEL01_20 DiffOrNot w8,w4,PIXEL10_10,PIXEL11_11,PIXEL10_90,PIXEL11_60 jmp .loopx_end ..@flag73 ..@flag77 DiffOrNot w8,w4,PIXEL00_12,PIXEL10_10,PIXEL00_61,PIXEL10_90 PIXEL01_20 PIXEL11_22 jmp .loopx_end ..@flag42 ..@flag170 DiffOrNot w4,w2,PIXEL00_10,PIXEL10_11,PIXEL00_90,PIXEL10_60 PIXEL01_21 PIXEL11_20 jmp .loopx_end ..@flag14 ..@flag142 DiffOrNot w4,w2,PIXEL00_10,PIXEL01_12,PIXEL00_90,PIXEL01_61 PIXEL10_22 PIXEL11_20 jmp .loopx_end ..@flag67 PIXEL00_11 PIXEL01_21 PIXEL10_21 PIXEL11_22 jmp .loopx_end ..@flag70 PIXEL00_22 PIXEL01_12 PIXEL10_21 PIXEL11_22 jmp .loopx_end ..@flag28 PIXEL00_21 PIXEL01_11 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag152 PIXEL00_21 PIXEL01_22 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag194 PIXEL00_22 PIXEL01_21 PIXEL10_21 PIXEL11_11 jmp .loopx_end ..@flag98 PIXEL00_22 PIXEL01_21 PIXEL10_12 PIXEL11_22 jmp .loopx_end ..@flag56 PIXEL00_21 PIXEL01_22 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag25 PIXEL00_12 PIXEL01_22 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag26 ..@flag31 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag82 ..@flag214 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag88 ..@flag248 PIXEL00_21 PIXEL01_22 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag74 ..@flag107 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_21 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_22 jmp .loopx_end ..@flag27 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_10 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag86 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_21 PIXEL11_10 jmp .loopx_end ..@flag216 PIXEL00_21 PIXEL01_22 PIXEL10_10 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag106 PIXEL00_10 PIXEL01_21 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_22 jmp .loopx_end ..@flag30 PIXEL00_10 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag210 PIXEL00_22 PIXEL01_10 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag120 PIXEL00_21 PIXEL01_22 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_10 jmp .loopx_end ..@flag75 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_21 PIXEL10_10 PIXEL11_22 jmp .loopx_end ..@flag29 PIXEL00_12 PIXEL01_11 PIXEL10_22 PIXEL11_21 jmp .loopx_end ..@flag198 PIXEL00_22 PIXEL01_12 PIXEL10_21 PIXEL11_11 jmp .loopx_end ..@flag184 PIXEL00_21 PIXEL01_22 PIXEL10_11 PIXEL11_12 jmp .loopx_end ..@flag99 PIXEL00_11 PIXEL01_21 PIXEL10_12 PIXEL11_22 jmp .loopx_end ..@flag57 PIXEL00_12 PIXEL01_22 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag71 PIXEL00_11 PIXEL01_12 PIXEL10_21 PIXEL11_22 jmp .loopx_end ..@flag156 PIXEL00_21 PIXEL01_11 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag226 PIXEL00_22 PIXEL01_21 PIXEL10_12 PIXEL11_11 jmp .loopx_end ..@flag60 PIXEL00_21 PIXEL01_11 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag195 PIXEL00_11 PIXEL01_21 PIXEL10_21 PIXEL11_11 jmp .loopx_end ..@flag102 PIXEL00_22 PIXEL01_12 PIXEL10_12 PIXEL11_22 jmp .loopx_end ..@flag153 PIXEL00_12 PIXEL01_22 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag58 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag83 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag92 PIXEL00_21 PIXEL01_11 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag202 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 PIXEL01_21 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 PIXEL11_11 jmp .loopx_end ..@flag78 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 PIXEL11_22 jmp .loopx_end ..@flag154 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag114 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag89 PIXEL00_12 PIXEL01_22 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag90 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag55 ..@flag23 DiffOrNot w2,w6,PIXEL00_11,PIXEL01_0,PIXEL00_60,PIXEL01_90 PIXEL10_20 PIXEL11_21 jmp .loopx_end ..@flag182 ..@flag150 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_0,PIXEL11_12,PIXEL01_90,PIXEL11_61 PIXEL10_20 jmp .loopx_end ..@flag213 ..@flag212 PIXEL00_20 DiffOrNot w6,w8,PIXEL01_11,PIXEL11_0,PIXEL01_60,PIXEL11_90 PIXEL10_21 jmp .loopx_end ..@flag241 ..@flag240 PIXEL00_20 PIXEL01_22 DiffOrNot w6,w8,PIXEL10_12,PIXEL11_0,PIXEL10_61,PIXEL11_90 jmp .loopx_end ..@flag236 ..@flag232 PIXEL00_21 PIXEL01_20 DiffOrNot w8,w4,PIXEL10_0,PIXEL11_11,PIXEL10_90,PIXEL11_60 jmp .loopx_end ..@flag109 ..@flag105 DiffOrNot w8,w4,PIXEL00_12,PIXEL10_0,PIXEL00_61,PIXEL10_90 PIXEL01_20 PIXEL11_22 jmp .loopx_end ..@flag171 ..@flag43 DiffOrNot w4,w2,PIXEL00_0,PIXEL10_11,PIXEL00_90,PIXEL10_60 PIXEL01_21 PIXEL11_20 jmp .loopx_end ..@flag143 ..@flag15 DiffOrNot w4,w2,PIXEL00_0,PIXEL01_12,PIXEL00_90,PIXEL01_61 PIXEL10_22 PIXEL11_20 jmp .loopx_end ..@flag124 PIXEL00_21 PIXEL01_11 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_10 jmp .loopx_end ..@flag203 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_21 PIXEL10_10 PIXEL11_11 jmp .loopx_end ..@flag62 PIXEL00_10 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag211 PIXEL00_11 PIXEL01_10 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag118 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_12 PIXEL11_10 jmp .loopx_end ..@flag217 PIXEL00_12 PIXEL01_22 PIXEL10_10 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag110 PIXEL00_10 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_22 jmp .loopx_end ..@flag155 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_10 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag188 PIXEL00_21 PIXEL01_11 PIXEL10_11 PIXEL11_12 jmp .loopx_end ..@flag185 PIXEL00_12 PIXEL01_22 PIXEL10_11 PIXEL11_12 jmp .loopx_end ..@flag61 PIXEL00_12 PIXEL01_11 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag157 PIXEL00_12 PIXEL01_11 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag103 PIXEL00_11 PIXEL01_12 PIXEL10_12 PIXEL11_22 jmp .loopx_end ..@flag227 PIXEL00_11 PIXEL01_21 PIXEL10_12 PIXEL11_11 jmp .loopx_end ..@flag230 PIXEL00_22 PIXEL01_12 PIXEL10_12 PIXEL11_11 jmp .loopx_end ..@flag199 PIXEL00_11 PIXEL01_12 PIXEL10_21 PIXEL11_11 jmp .loopx_end ..@flag220 PIXEL00_21 PIXEL01_11 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag158 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag234 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 PIXEL01_21 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_11 jmp .loopx_end ..@flag242 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag59 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag121 PIXEL00_12 PIXEL01_22 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag87 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag79 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 PIXEL11_22 jmp .loopx_end ..@flag122 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag94 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag218 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag91 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag229 PIXEL00_20 PIXEL01_20 PIXEL10_12 PIXEL11_11 jmp .loopx_end ..@flag167 PIXEL00_11 PIXEL01_12 PIXEL10_20 PIXEL11_20 jmp .loopx_end ..@flag173 PIXEL00_12 PIXEL01_20 PIXEL10_11 PIXEL11_20 jmp .loopx_end ..@flag181 PIXEL00_20 PIXEL01_11 PIXEL10_20 PIXEL11_12 jmp .loopx_end ..@flag186 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_11 PIXEL11_12 jmp .loopx_end ..@flag115 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag93 PIXEL00_12 PIXEL01_11 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag206 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 PIXEL11_11 jmp .loopx_end ..@flag205 ..@flag201 PIXEL00_12 PIXEL01_20 DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70 PIXEL11_11 jmp .loopx_end ..@flag174 ..@flag46 DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70 PIXEL01_12 PIXEL10_11 PIXEL11_20 jmp .loopx_end ..@flag179 ..@flag147 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70 PIXEL10_20 PIXEL11_12 jmp .loopx_end ..@flag117 ..@flag116 PIXEL00_20 PIXEL01_11 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70 jmp .loopx_end ..@flag189 PIXEL00_12 PIXEL01_11 PIXEL10_11 PIXEL11_12 jmp .loopx_end ..@flag231 PIXEL00_11 PIXEL01_12 PIXEL10_12 PIXEL11_11 jmp .loopx_end ..@flag126 PIXEL00_10 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_10 jmp .loopx_end ..@flag219 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_10 PIXEL10_10 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag125 DiffOrNot w8,w4,PIXEL00_12,PIXEL10_0,PIXEL00_61,PIXEL10_90 PIXEL01_11 PIXEL11_10 jmp .loopx_end ..@flag221 PIXEL00_12 DiffOrNot w6,w8,PIXEL01_11,PIXEL11_0,PIXEL01_60,PIXEL11_90 PIXEL10_10 jmp .loopx_end ..@flag207 DiffOrNot w4,w2,PIXEL00_0,PIXEL01_12,PIXEL00_90,PIXEL01_61 PIXEL10_10 PIXEL11_11 jmp .loopx_end ..@flag238 PIXEL00_10 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_0,PIXEL11_11,PIXEL10_90,PIXEL11_60 jmp .loopx_end ..@flag190 PIXEL00_10 DiffOrNot w2,w6,PIXEL01_0,PIXEL11_12,PIXEL01_90,PIXEL11_61 PIXEL10_11 jmp .loopx_end ..@flag187 DiffOrNot w4,w2,PIXEL00_0,PIXEL10_11,PIXEL00_90,PIXEL10_60 PIXEL01_10 PIXEL11_12 jmp .loopx_end ..@flag243 PIXEL00_11 PIXEL01_10 DiffOrNot w6,w8,PIXEL10_12,PIXEL11_0,PIXEL10_61,PIXEL11_90 jmp .loopx_end ..@flag119 DiffOrNot w2,w6,PIXEL00_11,PIXEL01_0,PIXEL00_60,PIXEL01_90 PIXEL10_12 PIXEL11_10 jmp .loopx_end ..@flag237 ..@flag233 PIXEL00_12 PIXEL01_20 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 PIXEL11_11 jmp .loopx_end ..@flag175 ..@flag47 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 PIXEL01_12 PIXEL10_11 PIXEL11_20 jmp .loopx_end ..@flag183 ..@flag151 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 PIXEL10_20 PIXEL11_12 jmp .loopx_end ..@flag245 ..@flag244 PIXEL00_20 PIXEL01_11 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@flag250 PIXEL00_10 PIXEL01_10 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag123 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_10 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_10 jmp .loopx_end ..@flag95 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_10 PIXEL11_10 jmp .loopx_end ..@flag222 PIXEL00_10 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_10 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag252 PIXEL00_21 PIXEL01_11 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@flag249 PIXEL00_12 PIXEL01_22 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag235 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_21 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 PIXEL11_11 jmp .loopx_end ..@flag111 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_22 jmp .loopx_end ..@flag63 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_11 PIXEL11_21 jmp .loopx_end ..@flag159 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 PIXEL10_22 PIXEL11_12 jmp .loopx_end ..@flag215 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 PIXEL10_21 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag246 PIXEL00_22 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@flag254 PIXEL00_10 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@flag253 PIXEL00_12 PIXEL01_11 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@flag251 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 PIXEL01_10 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag239 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 PIXEL01_12 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 PIXEL11_11 jmp .loopx_end ..@flag127 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20 PIXEL11_10 jmp .loopx_end ..@flag191 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 PIXEL10_11 PIXEL11_12 jmp .loopx_end ..@flag223 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 PIXEL10_10 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20 jmp .loopx_end ..@flag247 PIXEL00_11 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 PIXEL10_12 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@flag255 DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100 DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100 DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100 DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100 jmp .loopx_end ..@cross0 mov ebx,[NumBytesPerLine] mov [edi],eax mov [edi+4],eax mov [edi+ebx],eax mov [edi+ebx+4],eax jmp .loopx_end ..@cross1 mov ecx,[w2] mov edx,eax shl edx,2 add edx,[ebx+ecx*4] sub edx,eax shr edx,2 mov ebx,[NumBytesPerLine] mov [edi],edx mov [edi+4],edx mov [edi+ebx],eax mov [edi+ebx+4],eax jmp .loopx_end ..@cross2 mov ecx,[w4] mov edx,eax shl edx,2 add edx,[ebx+ecx*4] sub edx,eax shr edx,2 mov ebx,[NumBytesPerLine] mov [edi],edx mov [edi+4],eax mov [edi+ebx],edx mov [edi+ebx+4],eax jmp .loopx_end ..@cross4 mov ecx,[w6] mov edx,eax shl edx,2 add edx,[ebx+ecx*4] sub edx,eax shr edx,2 mov ebx,[NumBytesPerLine] mov [edi],eax mov [edi+4],edx mov [edi+ebx],eax mov [edi+ebx+4],edx jmp .loopx_end ..@cross8 mov ecx,[w8] mov edx,eax shl edx,2 add edx,[ebx+ecx*4] sub edx,eax shr edx,2 mov ebx,[NumBytesPerLine] mov [edi],eax mov [edi+4],eax mov [edi+ebx],edx mov [edi+ebx+4],edx jmp .loopx_end ..@crossN mov edx,[w2] mov ecx,[ebx+edx*4] mov [c2],ecx mov edx,[w4] mov ecx,[ebx+edx*4] mov [c4],ecx mov edx,[w6] mov ecx,[ebx+edx*4] mov [c6],ecx mov edx,[w8] mov ecx,[ebx+edx*4] mov [c8],ecx mov ebx,[NumBytesPerLine] jmp ..@flag0 .loopx_end add esi,2 add dword[deltaptr],2 add edi,8 dec dword[xcounter] jle .xres_2 jmp .loopx .xres_2 ; x=Xres-2 - special case jl near .xres_1 mov edx,[deltaptr] mov ecx,[prevline] mov eax,[nextline] movq mm2,[esi+ecx-4] movq mm3,[esi-4] movq mm4,[esi+eax-4] movq mm5,mm2 movq mm6,mm3 movq mm7,mm4 pcmpeqw mm2,[edx+ecx-4] pcmpeqw mm3,[edx-4] pcmpeqw mm4,[edx+eax-4] pand mm2,mm3 pand mm2,mm4 psrlq mm2,16 movd ebx,mm2 psrlq mm2,32 movd eax,mm2 cwde and eax,ebx inc eax jz .loopx_end psrlq mm5,16 psrlq mm6,16 psrlq mm7,16 movd eax,mm5 mov [edx+ecx-2],ax movzx edx,ax mov [w1],edx shr eax,16 mov [w2],eax psrlq mm5,32 movd eax,mm5 mov [w3],eax movd eax,mm6 movzx edx,ax mov [w4],edx shr eax,16 mov [w5],eax psrlq mm6,32 movd eax,mm6 mov [w6],eax movd eax,mm7 movzx edx,ax mov [w7],edx shr eax,16 mov [w8],eax psrlq mm7,32 movd eax,mm7 mov [w9],eax jmp .flags .xres_1 cmp dword[xcounter],-1 jl near .endofline ; x=Xres-1 - special case mov edx,[deltaptr] mov ecx,[prevline] mov eax,[nextline] movq mm2,[esi+ecx-6] movq mm3,[esi-6] movq mm4,[esi+eax-6] movq mm5,mm2 movq mm6,mm3 movq mm7,mm4 pcmpeqw mm2,[edx+ecx-6] pcmpeqw mm3,[edx-6] pcmpeqw mm4,[edx+eax-6] pand mm2,mm3 pand mm2,mm4 psrlq mm2,32 movd eax,mm2 inc eax jz .loopx_end psrlq mm5,32 psrlq mm6,32 psrlq mm7,32 movd eax,mm5 mov [edx+ecx-2],eax movzx edx,ax mov [w1],edx shr eax,16 mov [w2],eax mov [w3],eax movd eax,mm6 movzx edx,ax mov [w4],edx shr eax,16 mov [w5],eax mov [w6],eax movd eax,mm7 movzx edx,ax mov [w7],edx shr eax,16 mov [w8],eax mov [w9],eax jmp .flags .endofline mov ebx,[NumBytesPerLine] .nexty add esi,64 add dword[deltaptr],64 add edi,[AddEndBytes] add edi,ebx mov ebx,[InterPtr] inc ebx dec byte[lineleft] jz .fin cmp byte[lineleft],1 je .lastline mov dword[nextline],576 mov dword[prevline],-576 jmp .loopy .lastline mov dword[nextline],0 mov dword[prevline],-576 jmp .loopy .fin emms popad ret HighResProc: mov ecx,256 mov edx,[BitConv32Ptr] cmp byte[ebx],3 je near .hiresmode7 cmp byte[ebx],7 je near .hiresmode7 test byte[ebx],3 jnz near .hires mov ebx,[NumBytesPerLine] test byte[cfield],1 jnz .cfield1 .cfield0 movzx eax, word[esi] mov eax,[edx+eax*4] mov [edi],eax mov [edi+4],eax add esi,2 add edi,8 dec ecx jnz .cfield0 ret .cfield1 movzx eax, word[esi] mov eax,[edx+eax*4] mov [edi+ebx],eax mov [edi+ebx+4],eax add esi,2 add edi,8 dec ecx jnz .cfield1 ret .hiresmode7 mov ebx,[NumBytesPerLine] .a movzx eax, word[esi] mov eax,[edx+eax*4] mov [edi],eax mov [edi+4],eax movzx eax, word[esi+75036*4] mov eax,[edx+eax*4] mov [edi+ebx],eax mov [edi+ebx+4],eax add esi,2 add edi,8 dec ecx jnz .a ret .hires test byte[ebx],4 jnz .m56 mov ebx,[NumBytesPerLine] .bng movzx eax, word[esi] mov eax,[edx+eax*4] mov [edi],eax mov [edi+ebx],eax movzx eax, word[esi+75036*4] mov eax,[edx+eax*4] mov [edi+4],eax mov [edi+ebx+4],eax add esi,2 add edi,8 dec ecx jnz .bng ret .m56 mov ebx,[NumBytesPerLine] test byte[cfield],1 jnz .cfield1hr .cfield0hr movzx eax, word[esi] mov eax,[edx+eax*4] mov [edi],eax movzx eax, word[esi+75036*4] mov eax,[edx+eax*4] mov [edi+4],eax add esi,2 add edi,8 dec ecx jnz .cfield0hr ret .cfield1hr movzx eax, word[esi] mov eax,[edx+eax*4] mov [edi+ebx],eax movzx eax, word[esi+75036*4] mov eax,[edx+eax*4] mov [edi+ebx+4],eax add esi,2 add edi,8 dec ecx jnz .cfield1hr ret SECTION .data FuncTable dd ..@flag0, ..@flag1, ..@flag2, ..@flag3, ..@flag4, ..@flag5, ..@flag6, ..@flag7 dd ..@flag8, ..@flag9, ..@flag10, ..@flag11, ..@flag12, ..@flag13, ..@flag14, ..@flag15 dd ..@flag16, ..@flag17, ..@flag18, ..@flag19, ..@flag20, ..@flag21, ..@flag22, ..@flag23 dd ..@flag24, ..@flag25, ..@flag26, ..@flag27, ..@flag28, ..@flag29, ..@flag30, ..@flag31 dd ..@flag32, ..@flag33, ..@flag34, ..@flag35, ..@flag36, ..@flag37, ..@flag38, ..@flag39 dd ..@flag40, ..@flag41, ..@flag42, ..@flag43, ..@flag44, ..@flag45, ..@flag46, ..@flag47 dd ..@flag48, ..@flag49, ..@flag50, ..@flag51, ..@flag52, ..@flag53, ..@flag54, ..@flag55 dd ..@flag56, ..@flag57, ..@flag58, ..@flag59, ..@flag60, ..@flag61, ..@flag62, ..@flag63 dd ..@flag64, ..@flag65, ..@flag66, ..@flag67, ..@flag68, ..@flag69, ..@flag70, ..@flag71 dd ..@flag72, ..@flag73, ..@flag74, ..@flag75, ..@flag76, ..@flag77, ..@flag78, ..@flag79 dd ..@flag80, ..@flag81, ..@flag82, ..@flag83, ..@flag84, ..@flag85, ..@flag86, ..@flag87 dd ..@flag88, ..@flag89, ..@flag90, ..@flag91, ..@flag92, ..@flag93, ..@flag94, ..@flag95 dd ..@flag96, ..@flag97, ..@flag98, ..@flag99, ..@flag100, ..@flag101, ..@flag102, ..@flag103 dd ..@flag104, ..@flag105, ..@flag106, ..@flag107, ..@flag108, ..@flag109, ..@flag110, ..@flag111 dd ..@flag112, ..@flag113, ..@flag114, ..@flag115, ..@flag116, ..@flag117, ..@flag118, ..@flag119 dd ..@flag120, ..@flag121, ..@flag122, ..@flag123, ..@flag124, ..@flag125, ..@flag126, ..@flag127 dd ..@flag128, ..@flag129, ..@flag130, ..@flag131, ..@flag132, ..@flag133, ..@flag134, ..@flag135 dd ..@flag136, ..@flag137, ..@flag138, ..@flag139, ..@flag140, ..@flag141, ..@flag142, ..@flag143 dd ..@flag144, ..@flag145, ..@flag146, ..@flag147, ..@flag148, ..@flag149, ..@flag150, ..@flag151 dd ..@flag152, ..@flag153, ..@flag154, ..@flag155, ..@flag156, ..@flag157, ..@flag158, ..@flag159 dd ..@flag160, ..@flag161, ..@flag162, ..@flag163, ..@flag164, ..@flag165, ..@flag166, ..@flag167 dd ..@flag168, ..@flag169, ..@flag170, ..@flag171, ..@flag172, ..@flag173, ..@flag174, ..@flag175 dd ..@flag176, ..@flag177, ..@flag178, ..@flag179, ..@flag180, ..@flag181, ..@flag182, ..@flag183 dd ..@flag184, ..@flag185, ..@flag186, ..@flag187, ..@flag188, ..@flag189, ..@flag190, ..@flag191 dd ..@flag192, ..@flag193, ..@flag194, ..@flag195, ..@flag196, ..@flag197, ..@flag198, ..@flag199 dd ..@flag200, ..@flag201, ..@flag202, ..@flag203, ..@flag204, ..@flag205, ..@flag206, ..@flag207 dd ..@flag208, ..@flag209, ..@flag210, ..@flag211, ..@flag212, ..@flag213, ..@flag214, ..@flag215 dd ..@flag216, ..@flag217, ..@flag218, ..@flag219, ..@flag220, ..@flag221, ..@flag222, ..@flag223 dd ..@flag224, ..@flag225, ..@flag226, ..@flag227, ..@flag228, ..@flag229, ..@flag230, ..@flag231 dd ..@flag232, ..@flag233, ..@flag234, ..@flag235, ..@flag236, ..@flag237, ..@flag238, ..@flag239 dd ..@flag240, ..@flag241, ..@flag242, ..@flag243, ..@flag244, ..@flag245, ..@flag246, ..@flag247 dd ..@flag248, ..@flag249, ..@flag250, ..@flag251, ..@flag252, ..@flag253, ..@flag254, ..@flag255 FuncTable2 dd ..@cross0, ..@cross1, ..@cross2, ..@crossN, dd ..@cross4, ..@crossN, ..@crossN, ..@crossN, dd ..@cross8, ..@crossN, ..@crossN, ..@crossN, dd ..@crossN, ..@crossN, ..@crossN, ..@crossN SECTION .bss InterPtr resd 1 SECTION .text