1;hq2x filter
2;16bpp output
3;----------------------------------------------------------
4;Copyright (C) 2003 MaxSt ( maxst@hiend3d.com )
5;
6;This program is free software; you can redistribute it and/or
7;modify it under the terms of the GNU General Public License
8;as published by the Free Software Foundation; either
9;version 2 of the License, or (at your option) any later
10;version.
11;
12;This program is distributed in the hope that it will be useful,
13;but WITHOUT ANY WARRANTY; without even the implied warranty of
14;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15;GNU General Public License for more details.
16;
17;You should have received a copy of the GNU General Public License
18;along with this program; if not, write to the Free Software
19;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21GLOBAL hq2x_16_i386
22
23EXTERN LUT16to32
24EXTERN RGBtoYUV
25
26SECTION .bss
27linesleft resd 1
28xcounter  resd 1
29cross     resd 1
30nextline  resd 1
31prevline  resd 1
32w1        resd 1
33w2        resd 1
34w3        resd 1
35w4        resd 1
36w5        resd 1
37w6        resd 1
38w7        resd 1
39w8        resd 1
40w9        resd 1
41
42SECTION .data
43
44reg_blank    dd  0,0
45const3       dd  0x00030003,0x00000003
46const5       dd  0x00050005,0x00000005
47const6       dd  0x00060006,0x00000006
48const14      dd  0x000E000E,0x0000000E
49threshold    dd  0x00300706,0x00000000
50zerolowbits  dd  0xF7DEF7DE
51
52SECTION .text
53
54
55%macro TestDiff 2
56    xor     ecx,ecx
57    mov     edx,[%1]
58    cmp     edx,[%2]
59    je      %%fin
60    mov     ecx,RGBtoYUV
61    movd    mm1,[ecx+edx*4]
62    movq    mm5,mm1
63    mov     edx,[%2]
64    movd    mm2,[ecx+edx*4]
65    psubusb mm1,mm2
66    psubusb mm2,mm5
67    por     mm1,mm2
68    psubusb mm1,[threshold]
69    movd    ecx,mm1
70%%fin:
71%endmacro
72
73%macro DiffOrNot 4
74   TestDiff %1,%2
75   test ecx,ecx
76   jz   %%same
77   %3
78   jmp %%fin
79%%same:
80   %4
81%%fin
82%endmacro
83
84%macro DiffOrNot 6
85   TestDiff %1,%2
86   test ecx,ecx
87   jz   %%same
88   %3
89   %4
90   jmp %%fin
91%%same:
92   %5
93   %6
94%%fin
95%endmacro
96
97%macro DiffOrNot 8
98   TestDiff %1,%2
99   test ecx,ecx
100   jz   %%same
101   %3
102   %4
103   %5
104   jmp %%fin
105%%same:
106   %6
107   %7
108   %8
109%%fin
110%endmacro
111
112%macro DiffOrNot 10
113   TestDiff %1,%2
114   test ecx,ecx
115   jz %%same
116   %3
117   %4
118   %5
119   %6
120   jmp %%fin
121%%same:
122   %7
123   %8
124   %9
125   %10
126%%fin
127%endmacro
128
129%macro Interp1 3
130    mov edx,%2
131    mov ecx,%3
132    cmp edx,ecx
133    je  %%fin
134    and edx,[zerolowbits]
135    and ecx,[zerolowbits]
136    add ecx,edx
137    shr ecx,1
138    add ecx,0x0821
139    and ecx,[zerolowbits]
140    add edx,ecx
141    shr edx,1
142%%fin
143    mov %1,dx
144%endmacro
145
146%macro Interp2 4
147    mov edx,%3
148    mov ecx,%4
149    cmp edx,ecx
150    je  %%fin1
151    and edx,[zerolowbits]
152    and ecx,[zerolowbits]
153    add ecx,edx
154    shr ecx,1
155    add ecx,0x0821
156%%fin1
157    mov edx,%2
158    cmp edx,ecx
159    je  %%fin2
160    and ecx,[zerolowbits]
161    and edx,[zerolowbits]
162    add edx,ecx
163    shr edx,1
164%%fin2
165    mov %1,dx
166%endmacro
167
168%macro Interp5 3
169    mov edx,%2
170    mov ecx,%3
171    cmp edx,ecx
172    je  %%fin
173    and edx,[zerolowbits]
174    and ecx,[zerolowbits]
175    add edx,ecx
176    shr edx,1
177%%fin
178    mov %1,dx
179%endmacro
180
181%macro Interp6 3
182    mov        ecx, LUT16to32
183    movd       mm4, [reg_blank]
184    movd       mm1, [ecx+eax*4]
185    mov        edx, %2
186    movd       mm2, [ecx+edx*4]
187    mov        edx, %3
188    movd       mm3, [ecx+edx*4]
189    punpcklbw  mm1, mm4
190    punpcklbw  mm2, mm4
191    punpcklbw  mm3, mm4
192    pmullw     mm1, [const5]
193    psllw      mm2, 1
194    paddw      mm1, mm3
195    paddw      mm1, mm2
196    psrlw      mm1, 5
197    packuswb   mm1, mm4
198    movd       edx, mm1
199    shl        dl,  2
200    shr        edx, 1
201    shl        dx,  3
202    shr        edx, 5
203    mov        %1,  dx
204%endmacro
205
206%macro Interp7 3
207    mov        ecx, LUT16to32
208    movd       mm4, [reg_blank]
209    movd       mm1, [ecx+eax*4]
210    mov        edx, %2
211    movd       mm2, [ecx+edx*4]
212    mov        edx, %3
213    movd       mm3, [ecx+edx*4]
214    punpcklbw  mm1, mm4
215    punpcklbw  mm2, mm4
216    punpcklbw  mm3, mm4
217    pmullw     mm1, [const6]
218    paddw      mm2, mm3
219    paddw      mm1, mm2
220    psrlw      mm1, 5
221    packuswb   mm1, mm4
222    movd       edx, mm1
223    shl        dl,  2
224    shr        edx, 1
225    shl        dx,  3
226    shr        edx, 5
227    mov        %1,  dx
228%endmacro
229
230%macro Interp9 3
231    mov        ecx, LUT16to32
232    movd       mm4, [reg_blank]
233    movd       mm1, [ecx+eax*4]
234    mov        edx, %2
235    movd       mm2, [ecx+edx*4]
236    mov        edx, %3
237    movd       mm3, [ecx+edx*4]
238    punpcklbw  mm1, mm4
239    punpcklbw  mm2, mm4
240    punpcklbw  mm3, mm4
241    psllw      mm1, 1
242    paddw      mm2, mm3
243    pmullw     mm2, [const3]
244    paddw      mm1, mm2
245    psrlw      mm1, 5
246    packuswb   mm1, mm4
247    movd       edx, mm1
248    shl        dl,  2
249    shr        edx, 1
250    shl        dx,  3
251    shr        edx, 5
252    mov        %1,  dx
253%endmacro
254
255%macro Interp10 3
256    mov        ecx, LUT16to32
257    movd       mm4, [reg_blank]
258    movd       mm1, [ecx+eax*4]
259    mov        edx, %2
260    movd       mm2, [ecx+edx*4]
261    mov        edx, %3
262    movd       mm3, [ecx+edx*4]
263    punpcklbw  mm1, mm4
264    punpcklbw  mm2, mm4
265    punpcklbw  mm3, mm4
266    pmullw     mm1, [const14]
267    paddw      mm2, mm3
268    paddw      mm1, mm2
269    psrlw      mm1, 6
270    packuswb   mm1, mm4
271    movd       edx, mm1
272    shl        dl,  2
273    shr        edx, 1
274    shl        dx,  3
275    shr        edx, 5
276    mov        %1,  dx
277%endmacro
278
279%macro PIXEL00_0 0
280    mov [edi],ax
281%endmacro
282
283%macro PIXEL00_10 0
284    Interp1 [edi],eax,[w1]
285%endmacro
286
287%macro PIXEL00_11 0
288    Interp1 [edi],eax,[w4]
289%endmacro
290
291%macro PIXEL00_12 0
292    Interp1 [edi],eax,[w2]
293%endmacro
294
295%macro PIXEL00_20 0
296    Interp2 [edi],eax,[w4],[w2]
297%endmacro
298
299%macro PIXEL00_21 0
300    Interp2 [edi],eax,[w1],[w2]
301%endmacro
302
303%macro PIXEL00_22 0
304    Interp2 [edi],eax,[w1],[w4]
305%endmacro
306
307%macro PIXEL00_60 0
308    Interp6 [edi],[w2],[w4]
309%endmacro
310
311%macro PIXEL00_61 0
312    Interp6 [edi],[w4],[w2]
313%endmacro
314
315%macro PIXEL00_70 0
316    Interp7 [edi],[w4],[w2]
317%endmacro
318
319%macro PIXEL00_90 0
320    Interp9 [edi],[w4],[w2]
321%endmacro
322
323%macro PIXEL00_100 0
324    Interp10 [edi],[w4],[w2]
325%endmacro
326
327%macro PIXEL01_0 0
328    mov [edi+2],ax
329%endmacro
330
331%macro PIXEL01_10 0
332    Interp1 [edi+2],eax,[w3]
333%endmacro
334
335%macro PIXEL01_11 0
336    Interp1 [edi+2],eax,[w2]
337%endmacro
338
339%macro PIXEL01_12 0
340    Interp1 [edi+2],eax,[w6]
341%endmacro
342
343%macro PIXEL01_20 0
344    Interp2 [edi+2],eax,[w2],[w6]
345%endmacro
346
347%macro PIXEL01_21 0
348    Interp2 [edi+2],eax,[w3],[w6]
349%endmacro
350
351%macro PIXEL01_22 0
352    Interp2 [edi+2],eax,[w3],[w2]
353%endmacro
354
355%macro PIXEL01_60 0
356    Interp6 [edi+2],[w6],[w2]
357%endmacro
358
359%macro PIXEL01_61 0
360    Interp6 [edi+2],[w2],[w6]
361%endmacro
362
363%macro PIXEL01_70 0
364    Interp7 [edi+2],[w2],[w6]
365%endmacro
366
367%macro PIXEL01_90 0
368    Interp9 [edi+2],[w2],[w6]
369%endmacro
370
371%macro PIXEL01_100 0
372    Interp10 [edi+2],[w2],[w6]
373%endmacro
374
375%macro PIXEL10_0 0
376    mov [edi+ebx],ax
377%endmacro
378
379%macro PIXEL10_10 0
380    Interp1 [edi+ebx],eax,[w7]
381%endmacro
382
383%macro PIXEL10_11 0
384    Interp1 [edi+ebx],eax,[w8]
385%endmacro
386
387%macro PIXEL10_12 0
388    Interp1 [edi+ebx],eax,[w4]
389%endmacro
390
391%macro PIXEL10_20 0
392    Interp2 [edi+ebx],eax,[w8],[w4]
393%endmacro
394
395%macro PIXEL10_21 0
396    Interp2 [edi+ebx],eax,[w7],[w4]
397%endmacro
398
399%macro PIXEL10_22 0
400    Interp2 [edi+ebx],eax,[w7],[w8]
401%endmacro
402
403%macro PIXEL10_60 0
404    Interp6 [edi+ebx],[w4],[w8]
405%endmacro
406
407%macro PIXEL10_61 0
408    Interp6 [edi+ebx],[w8],[w4]
409%endmacro
410
411%macro PIXEL10_70 0
412    Interp7 [edi+ebx],[w8],[w4]
413%endmacro
414
415%macro PIXEL10_90 0
416    Interp9 [edi+ebx],[w8],[w4]
417%endmacro
418
419%macro PIXEL10_100 0
420    Interp10 [edi+ebx],[w8],[w4]
421%endmacro
422
423%macro PIXEL11_0 0
424    mov [edi+ebx+2],ax
425%endmacro
426
427%macro PIXEL11_10 0
428    Interp1 [edi+ebx+2],eax,[w9]
429%endmacro
430
431%macro PIXEL11_11 0
432    Interp1 [edi+ebx+2],eax,[w6]
433%endmacro
434
435%macro PIXEL11_12 0
436    Interp1 [edi+ebx+2],eax,[w8]
437%endmacro
438
439%macro PIXEL11_20 0
440    Interp2 [edi+ebx+2],eax,[w6],[w8]
441%endmacro
442
443%macro PIXEL11_21 0
444    Interp2 [edi+ebx+2],eax,[w9],[w8]
445%endmacro
446
447%macro PIXEL11_22 0
448    Interp2 [edi+ebx+2],eax,[w9],[w6]
449%endmacro
450
451%macro PIXEL11_60 0
452    Interp6 [edi+ebx+2],[w8],[w6]
453%endmacro
454
455%macro PIXEL11_61 0
456    Interp6 [edi+ebx+2],[w6],[w8]
457%endmacro
458
459%macro PIXEL11_70 0
460    Interp7 [edi+ebx+2],[w6],[w8]
461%endmacro
462
463%macro PIXEL11_90 0
464    Interp9 [edi+ebx+2],[w6],[w8]
465%endmacro
466
467%macro PIXEL11_100 0
468    Interp10 [edi+ebx+2],[w6],[w8]
469%endmacro
470
471inbuffer     equ 8
472outbuffer    equ 12
473Xres         equ 16
474Yres         equ 20
475pitch        equ 24
476
477hq2x_16_i386:
478    push ebp
479    mov ebp,esp
480    pushad
481
482    mov     esi,[ebp+inbuffer]
483    mov     edi,[ebp+outbuffer]
484    mov     edx,[ebp+Yres]
485    mov     [linesleft],edx
486    mov     ebx,[ebp+Xres]
487    shl     ebx,1
488    mov     dword[prevline],0
489    mov     dword[nextline],ebx
490.loopy
491    mov     ecx,[ebp+Xres]
492    sub     ecx,2                 ; x={Xres-2, Xres-1} are special cases.
493    mov     dword[xcounter],ecx
494    ; x=0 - special case
495    mov     ebx,[prevline]
496    movq    mm5,[esi+ebx]
497    movq    mm6,[esi]
498    mov     ebx,[nextline]
499    movq    mm7,[esi+ebx]
500    movd    eax,mm5
501    movzx   edx,ax
502    mov     [w1],edx
503    mov     [w2],edx
504    shr     eax,16
505    mov     [w3],eax
506    movd    eax,mm6
507    movzx   edx,ax
508    mov     [w4],edx
509    mov     [w5],edx
510    shr     eax,16
511    mov     [w6],eax
512    movd    eax,mm7
513    movzx   edx,ax
514    mov     [w7],edx
515    mov     [w8],edx
516    shr     eax,16
517    mov     [w9],eax
518    jmp     .flags
519.loopx
520    mov     ebx,[prevline]
521    movq    mm5,[esi+ebx-2]
522    movq    mm6,[esi-2]
523    mov     ebx,[nextline]
524    movq    mm7,[esi+ebx-2]
525    movd    eax,mm5
526    movzx   edx,ax
527    mov     [w1],edx
528    shr     eax,16
529    mov     [w2],eax
530    psrlq   mm5,32
531    movd    eax,mm5
532    movzx   edx,ax
533    mov     [w3],edx
534    movd    eax,mm6
535    movzx   edx,ax
536    mov     [w4],edx
537    shr     eax,16
538    mov     [w5],eax
539    psrlq   mm6,32
540    movd    eax,mm6
541    movzx   edx,ax
542    mov     [w6],edx
543    movd    eax,mm7
544    movzx   edx,ax
545    mov     [w7],edx
546    shr     eax,16
547    mov     [w8],eax
548    psrlq   mm7,32
549    movd    eax,mm7
550    movzx   edx,ax
551    mov     [w9],edx
552.flags
553    mov     ebx,RGBtoYUV
554    mov     eax,[w5]
555    xor     ecx,ecx
556    movd    mm5,[ebx+eax*4]
557    mov     dword[cross],0
558
559    mov     edx,[w2]
560    cmp     eax,edx
561    je      .noflag2
562    or      dword[cross],1
563    movq    mm1,mm5
564    movd    mm2,[ebx+edx*4]
565    psubusb mm1,mm2
566    psubusb mm2,mm5
567    por     mm1,mm2
568    psubusb mm1,[threshold]
569    movd    edx,mm1
570    test    edx,edx
571    jz      .noflag2
572    or      ecx,2
573.noflag2
574    mov     edx,[w4]
575    cmp     eax,edx
576    je      .noflag4
577    or      dword[cross],2
578    movq    mm1,mm5
579    movd    mm2,[ebx+edx*4]
580    psubusb mm1,mm2
581    psubusb mm2,mm5
582    por     mm1,mm2
583    psubusb mm1,[threshold]
584    movd    edx,mm1
585    test    edx,edx
586    jz      .noflag4
587    or      ecx,8
588.noflag4
589    mov     edx,[w6]
590    cmp     eax,edx
591    je      .noflag6
592    or      dword[cross],4
593    movq    mm1,mm5
594    movd    mm2,[ebx+edx*4]
595    psubusb mm1,mm2
596    psubusb mm2,mm5
597    por     mm1,mm2
598    psubusb mm1,[threshold]
599    movd    edx,mm1
600    test    edx,edx
601    jz      .noflag6
602    or      ecx,16
603.noflag6
604    mov     edx,[w8]
605    cmp     eax,edx
606    je      .noflag8
607    or      dword[cross],8
608    movq    mm1,mm5
609    movd    mm2,[ebx+edx*4]
610    psubusb mm1,mm2
611    psubusb mm2,mm5
612    por     mm1,mm2
613    psubusb mm1,[threshold]
614    movd    edx,mm1
615    test    edx,edx
616    jz      .noflag8
617    or      ecx,64
618.noflag8
619    test    ecx,ecx
620    jnz     .testflag1
621    mov     ecx,[cross]
622    mov     ebx,[ebp+pitch]
623    jmp     [FuncTable2+ecx*4]
624.testflag1
625    mov     edx,[w1]
626    cmp     eax,edx
627    je      .noflag1
628    movq    mm1,mm5
629    movd    mm2,[ebx+edx*4]
630    psubusb mm1,mm2
631    psubusb mm2,mm5
632    por     mm1,mm2
633    psubusb mm1,[threshold]
634    movd    edx,mm1
635    test    edx,edx
636    jz      .noflag1
637    or      ecx,1
638.noflag1
639    mov     edx,[w3]
640    cmp     eax,edx
641    je      .noflag3
642    movq    mm1,mm5
643    movd    mm2,[ebx+edx*4]
644    psubusb mm1,mm2
645    psubusb mm2,mm5
646    por     mm1,mm2
647    psubusb mm1,[threshold]
648    movd    edx,mm1
649    test    edx,edx
650    jz      .noflag3
651    or      ecx,4
652.noflag3
653    mov     edx,[w7]
654    cmp     eax,edx
655    je      .noflag7
656    movq    mm1,mm5
657    movd    mm2,[ebx+edx*4]
658    psubusb mm1,mm2
659    psubusb mm2,mm5
660    por     mm1,mm2
661    psubusb mm1,[threshold]
662    movd    edx,mm1
663    test    edx,edx
664    jz      .noflag7
665    or      ecx,32
666.noflag7
667    mov     edx,[w9]
668    cmp     eax,edx
669    je      .noflag9
670    movq    mm1,mm5
671    movd    mm2,[ebx+edx*4]
672    psubusb mm1,mm2
673    psubusb mm2,mm5
674    por     mm1,mm2
675    psubusb mm1,[threshold]
676    movd    edx,mm1
677    test    edx,edx
678    jz      .noflag9
679    or      ecx,128
680.noflag9
681    mov  ebx,[ebp+pitch]
682    jmp  [FuncTable+ecx*4]
683
684..@flag0
685..@flag1
686..@flag4
687..@flag32
688..@flag128
689..@flag5
690..@flag132
691..@flag160
692..@flag33
693..@flag129
694..@flag36
695..@flag133
696..@flag164
697..@flag161
698..@flag37
699..@flag165
700    PIXEL00_20
701    PIXEL01_20
702    PIXEL10_20
703    PIXEL11_20
704    jmp .loopx_end
705..@flag2
706..@flag34
707..@flag130
708..@flag162
709    PIXEL00_22
710    PIXEL01_21
711    PIXEL10_20
712    PIXEL11_20
713    jmp .loopx_end
714..@flag16
715..@flag17
716..@flag48
717..@flag49
718    PIXEL00_20
719    PIXEL01_22
720    PIXEL10_20
721    PIXEL11_21
722    jmp .loopx_end
723..@flag64
724..@flag65
725..@flag68
726..@flag69
727    PIXEL00_20
728    PIXEL01_20
729    PIXEL10_21
730    PIXEL11_22
731    jmp .loopx_end
732..@flag8
733..@flag12
734..@flag136
735..@flag140
736    PIXEL00_21
737    PIXEL01_20
738    PIXEL10_22
739    PIXEL11_20
740    jmp .loopx_end
741..@flag3
742..@flag35
743..@flag131
744..@flag163
745    PIXEL00_11
746    PIXEL01_21
747    PIXEL10_20
748    PIXEL11_20
749    jmp .loopx_end
750..@flag6
751..@flag38
752..@flag134
753..@flag166
754    PIXEL00_22
755    PIXEL01_12
756    PIXEL10_20
757    PIXEL11_20
758    jmp .loopx_end
759..@flag20
760..@flag21
761..@flag52
762..@flag53
763    PIXEL00_20
764    PIXEL01_11
765    PIXEL10_20
766    PIXEL11_21
767    jmp .loopx_end
768..@flag144
769..@flag145
770..@flag176
771..@flag177
772    PIXEL00_20
773    PIXEL01_22
774    PIXEL10_20
775    PIXEL11_12
776    jmp .loopx_end
777..@flag192
778..@flag193
779..@flag196
780..@flag197
781    PIXEL00_20
782    PIXEL01_20
783    PIXEL10_21
784    PIXEL11_11
785    jmp .loopx_end
786..@flag96
787..@flag97
788..@flag100
789..@flag101
790    PIXEL00_20
791    PIXEL01_20
792    PIXEL10_12
793    PIXEL11_22
794    jmp .loopx_end
795..@flag40
796..@flag44
797..@flag168
798..@flag172
799    PIXEL00_21
800    PIXEL01_20
801    PIXEL10_11
802    PIXEL11_20
803    jmp .loopx_end
804..@flag9
805..@flag13
806..@flag137
807..@flag141
808    PIXEL00_12
809    PIXEL01_20
810    PIXEL10_22
811    PIXEL11_20
812    jmp .loopx_end
813..@flag18
814..@flag50
815    PIXEL00_22
816    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_20
817    PIXEL10_20
818    PIXEL11_21
819    jmp .loopx_end
820..@flag80
821..@flag81
822    PIXEL00_20
823    PIXEL01_22
824    PIXEL10_21
825    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_20
826    jmp .loopx_end
827..@flag72
828..@flag76
829    PIXEL00_21
830    PIXEL01_20
831    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_20
832    PIXEL11_22
833    jmp .loopx_end
834..@flag10
835..@flag138
836    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_20
837    PIXEL01_21
838    PIXEL10_22
839    PIXEL11_20
840    jmp .loopx_end
841..@flag66
842    PIXEL00_22
843    PIXEL01_21
844    PIXEL10_21
845    PIXEL11_22
846    jmp .loopx_end
847..@flag24
848    PIXEL00_21
849    PIXEL01_22
850    PIXEL10_22
851    PIXEL11_21
852    jmp .loopx_end
853..@flag7
854..@flag39
855..@flag135
856    PIXEL00_11
857    PIXEL01_12
858    PIXEL10_20
859    PIXEL11_20
860    jmp .loopx_end
861..@flag148
862..@flag149
863..@flag180
864    PIXEL00_20
865    PIXEL01_11
866    PIXEL10_20
867    PIXEL11_12
868    jmp .loopx_end
869..@flag224
870..@flag228
871..@flag225
872    PIXEL00_20
873    PIXEL01_20
874    PIXEL10_12
875    PIXEL11_11
876    jmp .loopx_end
877..@flag41
878..@flag169
879..@flag45
880    PIXEL00_12
881    PIXEL01_20
882    PIXEL10_11
883    PIXEL11_20
884    jmp .loopx_end
885..@flag22
886..@flag54
887    PIXEL00_22
888    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
889    PIXEL10_20
890    PIXEL11_21
891    jmp .loopx_end
892..@flag208
893..@flag209
894    PIXEL00_20
895    PIXEL01_22
896    PIXEL10_21
897    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
898    jmp .loopx_end
899..@flag104
900..@flag108
901    PIXEL00_21
902    PIXEL01_20
903    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
904    PIXEL11_22
905    jmp .loopx_end
906..@flag11
907..@flag139
908    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
909    PIXEL01_21
910    PIXEL10_22
911    PIXEL11_20
912    jmp .loopx_end
913..@flag19
914..@flag51
915    DiffOrNot w2,w6,PIXEL00_11,PIXEL01_10,PIXEL00_60,PIXEL01_90
916    PIXEL10_20
917    PIXEL11_21
918    jmp .loopx_end
919..@flag146
920..@flag178
921    PIXEL00_22
922    DiffOrNot w2,w6,PIXEL01_10,PIXEL11_12,PIXEL01_90,PIXEL11_61
923    PIXEL10_20
924    jmp .loopx_end
925..@flag84
926..@flag85
927    PIXEL00_20
928    DiffOrNot w6,w8,PIXEL01_11,PIXEL11_10,PIXEL01_60,PIXEL11_90
929    PIXEL10_21
930    jmp .loopx_end
931..@flag112
932..@flag113
933    PIXEL00_20
934    PIXEL01_22
935    DiffOrNot w6,w8,PIXEL10_12,PIXEL11_10,PIXEL10_61,PIXEL11_90
936    jmp .loopx_end
937..@flag200
938..@flag204
939    PIXEL00_21
940    PIXEL01_20
941    DiffOrNot w8,w4,PIXEL10_10,PIXEL11_11,PIXEL10_90,PIXEL11_60
942    jmp .loopx_end
943..@flag73
944..@flag77
945    DiffOrNot w8,w4,PIXEL00_12,PIXEL10_10,PIXEL00_61,PIXEL10_90
946    PIXEL01_20
947    PIXEL11_22
948    jmp .loopx_end
949..@flag42
950..@flag170
951    DiffOrNot w4,w2,PIXEL00_10,PIXEL10_11,PIXEL00_90,PIXEL10_60
952    PIXEL01_21
953    PIXEL11_20
954    jmp .loopx_end
955..@flag14
956..@flag142
957    DiffOrNot w4,w2,PIXEL00_10,PIXEL01_12,PIXEL00_90,PIXEL01_61
958    PIXEL10_22
959    PIXEL11_20
960    jmp .loopx_end
961..@flag67
962    PIXEL00_11
963    PIXEL01_21
964    PIXEL10_21
965    PIXEL11_22
966    jmp .loopx_end
967..@flag70
968    PIXEL00_22
969    PIXEL01_12
970    PIXEL10_21
971    PIXEL11_22
972    jmp .loopx_end
973..@flag28
974    PIXEL00_21
975    PIXEL01_11
976    PIXEL10_22
977    PIXEL11_21
978    jmp .loopx_end
979..@flag152
980    PIXEL00_21
981    PIXEL01_22
982    PIXEL10_22
983    PIXEL11_12
984    jmp .loopx_end
985..@flag194
986    PIXEL00_22
987    PIXEL01_21
988    PIXEL10_21
989    PIXEL11_11
990    jmp .loopx_end
991..@flag98
992    PIXEL00_22
993    PIXEL01_21
994    PIXEL10_12
995    PIXEL11_22
996    jmp .loopx_end
997..@flag56
998    PIXEL00_21
999    PIXEL01_22
1000    PIXEL10_11
1001    PIXEL11_21
1002    jmp .loopx_end
1003..@flag25
1004    PIXEL00_12
1005    PIXEL01_22
1006    PIXEL10_22
1007    PIXEL11_21
1008    jmp .loopx_end
1009..@flag26
1010..@flag31
1011    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1012    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1013    PIXEL10_22
1014    PIXEL11_21
1015    jmp .loopx_end
1016..@flag82
1017..@flag214
1018    PIXEL00_22
1019    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1020    PIXEL10_21
1021    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1022    jmp .loopx_end
1023..@flag88
1024..@flag248
1025    PIXEL00_21
1026    PIXEL01_22
1027    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1028    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1029    jmp .loopx_end
1030..@flag74
1031..@flag107
1032    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1033    PIXEL01_21
1034    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1035    PIXEL11_22
1036    jmp .loopx_end
1037..@flag27
1038    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1039    PIXEL01_10
1040    PIXEL10_22
1041    PIXEL11_21
1042    jmp .loopx_end
1043..@flag86
1044    PIXEL00_22
1045    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1046    PIXEL10_21
1047    PIXEL11_10
1048    jmp .loopx_end
1049..@flag216
1050    PIXEL00_21
1051    PIXEL01_22
1052    PIXEL10_10
1053    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1054    jmp .loopx_end
1055..@flag106
1056    PIXEL00_10
1057    PIXEL01_21
1058    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1059    PIXEL11_22
1060    jmp .loopx_end
1061..@flag30
1062    PIXEL00_10
1063    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1064    PIXEL10_22
1065    PIXEL11_21
1066    jmp .loopx_end
1067..@flag210
1068    PIXEL00_22
1069    PIXEL01_10
1070    PIXEL10_21
1071    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1072    jmp .loopx_end
1073..@flag120
1074    PIXEL00_21
1075    PIXEL01_22
1076    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1077    PIXEL11_10
1078    jmp .loopx_end
1079..@flag75
1080    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1081    PIXEL01_21
1082    PIXEL10_10
1083    PIXEL11_22
1084    jmp .loopx_end
1085..@flag29
1086    PIXEL00_12
1087    PIXEL01_11
1088    PIXEL10_22
1089    PIXEL11_21
1090    jmp .loopx_end
1091..@flag198
1092    PIXEL00_22
1093    PIXEL01_12
1094    PIXEL10_21
1095    PIXEL11_11
1096    jmp .loopx_end
1097..@flag184
1098    PIXEL00_21
1099    PIXEL01_22
1100    PIXEL10_11
1101    PIXEL11_12
1102    jmp .loopx_end
1103..@flag99
1104    PIXEL00_11
1105    PIXEL01_21
1106    PIXEL10_12
1107    PIXEL11_22
1108    jmp .loopx_end
1109..@flag57
1110    PIXEL00_12
1111    PIXEL01_22
1112    PIXEL10_11
1113    PIXEL11_21
1114    jmp .loopx_end
1115..@flag71
1116    PIXEL00_11
1117    PIXEL01_12
1118    PIXEL10_21
1119    PIXEL11_22
1120    jmp .loopx_end
1121..@flag156
1122    PIXEL00_21
1123    PIXEL01_11
1124    PIXEL10_22
1125    PIXEL11_12
1126    jmp .loopx_end
1127..@flag226
1128    PIXEL00_22
1129    PIXEL01_21
1130    PIXEL10_12
1131    PIXEL11_11
1132    jmp .loopx_end
1133..@flag60
1134    PIXEL00_21
1135    PIXEL01_11
1136    PIXEL10_11
1137    PIXEL11_21
1138    jmp .loopx_end
1139..@flag195
1140    PIXEL00_11
1141    PIXEL01_21
1142    PIXEL10_21
1143    PIXEL11_11
1144    jmp .loopx_end
1145..@flag102
1146    PIXEL00_22
1147    PIXEL01_12
1148    PIXEL10_12
1149    PIXEL11_22
1150    jmp .loopx_end
1151..@flag153
1152    PIXEL00_12
1153    PIXEL01_22
1154    PIXEL10_22
1155    PIXEL11_12
1156    jmp .loopx_end
1157..@flag58
1158    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1159    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1160    PIXEL10_11
1161    PIXEL11_21
1162    jmp .loopx_end
1163..@flag83
1164    PIXEL00_11
1165    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1166    PIXEL10_21
1167    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1168    jmp .loopx_end
1169..@flag92
1170    PIXEL00_21
1171    PIXEL01_11
1172    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1173    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1174    jmp .loopx_end
1175..@flag202
1176    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1177    PIXEL01_21
1178    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1179    PIXEL11_11
1180    jmp .loopx_end
1181..@flag78
1182    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1183    PIXEL01_12
1184    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1185    PIXEL11_22
1186    jmp .loopx_end
1187..@flag154
1188    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1189    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1190    PIXEL10_22
1191    PIXEL11_12
1192    jmp .loopx_end
1193..@flag114
1194    PIXEL00_22
1195    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1196    PIXEL10_12
1197    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1198    jmp .loopx_end
1199..@flag89
1200    PIXEL00_12
1201    PIXEL01_22
1202    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1203    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1204    jmp .loopx_end
1205..@flag90
1206    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1207    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1208    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1209    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1210    jmp .loopx_end
1211..@flag55
1212..@flag23
1213    DiffOrNot w2,w6,PIXEL00_11,PIXEL01_0,PIXEL00_60,PIXEL01_90
1214    PIXEL10_20
1215    PIXEL11_21
1216    jmp .loopx_end
1217..@flag182
1218..@flag150
1219    PIXEL00_22
1220    DiffOrNot w2,w6,PIXEL01_0,PIXEL11_12,PIXEL01_90,PIXEL11_61
1221    PIXEL10_20
1222    jmp .loopx_end
1223..@flag213
1224..@flag212
1225    PIXEL00_20
1226    DiffOrNot w6,w8,PIXEL01_11,PIXEL11_0,PIXEL01_60,PIXEL11_90
1227    PIXEL10_21
1228    jmp .loopx_end
1229..@flag241
1230..@flag240
1231    PIXEL00_20
1232    PIXEL01_22
1233    DiffOrNot w6,w8,PIXEL10_12,PIXEL11_0,PIXEL10_61,PIXEL11_90
1234    jmp .loopx_end
1235..@flag236
1236..@flag232
1237    PIXEL00_21
1238    PIXEL01_20
1239    DiffOrNot w8,w4,PIXEL10_0,PIXEL11_11,PIXEL10_90,PIXEL11_60
1240    jmp .loopx_end
1241..@flag109
1242..@flag105
1243    DiffOrNot w8,w4,PIXEL00_12,PIXEL10_0,PIXEL00_61,PIXEL10_90
1244    PIXEL01_20
1245    PIXEL11_22
1246    jmp .loopx_end
1247..@flag171
1248..@flag43
1249    DiffOrNot w4,w2,PIXEL00_0,PIXEL10_11,PIXEL00_90,PIXEL10_60
1250    PIXEL01_21
1251    PIXEL11_20
1252    jmp .loopx_end
1253..@flag143
1254..@flag15
1255    DiffOrNot w4,w2,PIXEL00_0,PIXEL01_12,PIXEL00_90,PIXEL01_61
1256    PIXEL10_22
1257    PIXEL11_20
1258    jmp .loopx_end
1259..@flag124
1260    PIXEL00_21
1261    PIXEL01_11
1262    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1263    PIXEL11_10
1264    jmp .loopx_end
1265..@flag203
1266    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1267    PIXEL01_21
1268    PIXEL10_10
1269    PIXEL11_11
1270    jmp .loopx_end
1271..@flag62
1272    PIXEL00_10
1273    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1274    PIXEL10_11
1275    PIXEL11_21
1276    jmp .loopx_end
1277..@flag211
1278    PIXEL00_11
1279    PIXEL01_10
1280    PIXEL10_21
1281    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1282    jmp .loopx_end
1283..@flag118
1284    PIXEL00_22
1285    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1286    PIXEL10_12
1287    PIXEL11_10
1288    jmp .loopx_end
1289..@flag217
1290    PIXEL00_12
1291    PIXEL01_22
1292    PIXEL10_10
1293    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1294    jmp .loopx_end
1295..@flag110
1296    PIXEL00_10
1297    PIXEL01_12
1298    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1299    PIXEL11_22
1300    jmp .loopx_end
1301..@flag155
1302    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1303    PIXEL01_10
1304    PIXEL10_22
1305    PIXEL11_12
1306    jmp .loopx_end
1307..@flag188
1308    PIXEL00_21
1309    PIXEL01_11
1310    PIXEL10_11
1311    PIXEL11_12
1312    jmp .loopx_end
1313..@flag185
1314    PIXEL00_12
1315    PIXEL01_22
1316    PIXEL10_11
1317    PIXEL11_12
1318    jmp .loopx_end
1319..@flag61
1320    PIXEL00_12
1321    PIXEL01_11
1322    PIXEL10_11
1323    PIXEL11_21
1324    jmp .loopx_end
1325..@flag157
1326    PIXEL00_12
1327    PIXEL01_11
1328    PIXEL10_22
1329    PIXEL11_12
1330    jmp .loopx_end
1331..@flag103
1332    PIXEL00_11
1333    PIXEL01_12
1334    PIXEL10_12
1335    PIXEL11_22
1336    jmp .loopx_end
1337..@flag227
1338    PIXEL00_11
1339    PIXEL01_21
1340    PIXEL10_12
1341    PIXEL11_11
1342    jmp .loopx_end
1343..@flag230
1344    PIXEL00_22
1345    PIXEL01_12
1346    PIXEL10_12
1347    PIXEL11_11
1348    jmp .loopx_end
1349..@flag199
1350    PIXEL00_11
1351    PIXEL01_12
1352    PIXEL10_21
1353    PIXEL11_11
1354    jmp .loopx_end
1355..@flag220
1356    PIXEL00_21
1357    PIXEL01_11
1358    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1359    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1360    jmp .loopx_end
1361..@flag158
1362    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1363    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1364    PIXEL10_22
1365    PIXEL11_12
1366    jmp .loopx_end
1367..@flag234
1368    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1369    PIXEL01_21
1370    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1371    PIXEL11_11
1372    jmp .loopx_end
1373..@flag242
1374    PIXEL00_22
1375    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1376    PIXEL10_12
1377    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1378    jmp .loopx_end
1379..@flag59
1380    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1381    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1382    PIXEL10_11
1383    PIXEL11_21
1384    jmp .loopx_end
1385..@flag121
1386    PIXEL00_12
1387    PIXEL01_22
1388    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1389    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1390    jmp .loopx_end
1391..@flag87
1392    PIXEL00_11
1393    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1394    PIXEL10_21
1395    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1396    jmp .loopx_end
1397..@flag79
1398    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1399    PIXEL01_12
1400    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1401    PIXEL11_22
1402    jmp .loopx_end
1403..@flag122
1404    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1405    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1406    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1407    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1408    jmp .loopx_end
1409..@flag94
1410    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1411    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1412    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1413    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1414    jmp .loopx_end
1415..@flag218
1416    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1417    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1418    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1419    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1420    jmp .loopx_end
1421..@flag91
1422    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1423    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1424    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1425    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1426    jmp .loopx_end
1427..@flag229
1428    PIXEL00_20
1429    PIXEL01_20
1430    PIXEL10_12
1431    PIXEL11_11
1432    jmp .loopx_end
1433..@flag167
1434    PIXEL00_11
1435    PIXEL01_12
1436    PIXEL10_20
1437    PIXEL11_20
1438    jmp .loopx_end
1439..@flag173
1440    PIXEL00_12
1441    PIXEL01_20
1442    PIXEL10_11
1443    PIXEL11_20
1444    jmp .loopx_end
1445..@flag181
1446    PIXEL00_20
1447    PIXEL01_11
1448    PIXEL10_20
1449    PIXEL11_12
1450    jmp .loopx_end
1451..@flag186
1452    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1453    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1454    PIXEL10_11
1455    PIXEL11_12
1456    jmp .loopx_end
1457..@flag115
1458    PIXEL00_11
1459    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1460    PIXEL10_12
1461    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1462    jmp .loopx_end
1463..@flag93
1464    PIXEL00_12
1465    PIXEL01_11
1466    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1467    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1468    jmp .loopx_end
1469..@flag206
1470    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1471    PIXEL01_12
1472    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1473    PIXEL11_11
1474    jmp .loopx_end
1475..@flag205
1476..@flag201
1477    PIXEL00_12
1478    PIXEL01_20
1479    DiffOrNot w8,w4,PIXEL10_10,PIXEL10_70
1480    PIXEL11_11
1481    jmp .loopx_end
1482..@flag174
1483..@flag46
1484    DiffOrNot w4,w2,PIXEL00_10,PIXEL00_70
1485    PIXEL01_12
1486    PIXEL10_11
1487    PIXEL11_20
1488    jmp .loopx_end
1489..@flag179
1490..@flag147
1491    PIXEL00_11
1492    DiffOrNot w2,w6,PIXEL01_10,PIXEL01_70
1493    PIXEL10_20
1494    PIXEL11_12
1495    jmp .loopx_end
1496..@flag117
1497..@flag116
1498    PIXEL00_20
1499    PIXEL01_11
1500    PIXEL10_12
1501    DiffOrNot w6,w8,PIXEL11_10,PIXEL11_70
1502    jmp .loopx_end
1503..@flag189
1504    PIXEL00_12
1505    PIXEL01_11
1506    PIXEL10_11
1507    PIXEL11_12
1508    jmp .loopx_end
1509..@flag231
1510    PIXEL00_11
1511    PIXEL01_12
1512    PIXEL10_12
1513    PIXEL11_11
1514    jmp .loopx_end
1515..@flag126
1516    PIXEL00_10
1517    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1518    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1519    PIXEL11_10
1520    jmp .loopx_end
1521..@flag219
1522    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1523    PIXEL01_10
1524    PIXEL10_10
1525    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1526    jmp .loopx_end
1527..@flag125
1528    DiffOrNot w8,w4,PIXEL00_12,PIXEL10_0,PIXEL00_61,PIXEL10_90
1529    PIXEL01_11
1530    PIXEL11_10
1531    jmp .loopx_end
1532..@flag221
1533    PIXEL00_12
1534    DiffOrNot w6,w8,PIXEL01_11,PIXEL11_0,PIXEL01_60,PIXEL11_90
1535    PIXEL10_10
1536    jmp .loopx_end
1537..@flag207
1538    DiffOrNot w4,w2,PIXEL00_0,PIXEL01_12,PIXEL00_90,PIXEL01_61
1539    PIXEL10_10
1540    PIXEL11_11
1541    jmp .loopx_end
1542..@flag238
1543    PIXEL00_10
1544    PIXEL01_12
1545    DiffOrNot w8,w4,PIXEL10_0,PIXEL11_11,PIXEL10_90,PIXEL11_60
1546    jmp .loopx_end
1547..@flag190
1548    PIXEL00_10
1549    DiffOrNot w2,w6,PIXEL01_0,PIXEL11_12,PIXEL01_90,PIXEL11_61
1550    PIXEL10_11
1551    jmp .loopx_end
1552..@flag187
1553    DiffOrNot w4,w2,PIXEL00_0,PIXEL10_11,PIXEL00_90,PIXEL10_60
1554    PIXEL01_10
1555    PIXEL11_12
1556    jmp .loopx_end
1557..@flag243
1558    PIXEL00_11
1559    PIXEL01_10
1560    DiffOrNot w6,w8,PIXEL10_12,PIXEL11_0,PIXEL10_61,PIXEL11_90
1561    jmp .loopx_end
1562..@flag119
1563    DiffOrNot w2,w6,PIXEL00_11,PIXEL01_0,PIXEL00_60,PIXEL01_90
1564    PIXEL10_12
1565    PIXEL11_10
1566    jmp .loopx_end
1567..@flag237
1568..@flag233
1569    PIXEL00_12
1570    PIXEL01_20
1571    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1572    PIXEL11_11
1573    jmp .loopx_end
1574..@flag175
1575..@flag47
1576    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1577    PIXEL01_12
1578    PIXEL10_11
1579    PIXEL11_20
1580    jmp .loopx_end
1581..@flag183
1582..@flag151
1583    PIXEL00_11
1584    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1585    PIXEL10_20
1586    PIXEL11_12
1587    jmp .loopx_end
1588..@flag245
1589..@flag244
1590    PIXEL00_20
1591    PIXEL01_11
1592    PIXEL10_12
1593    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1594    jmp .loopx_end
1595..@flag250
1596    PIXEL00_10
1597    PIXEL01_10
1598    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1599    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1600    jmp .loopx_end
1601..@flag123
1602    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1603    PIXEL01_10
1604    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1605    PIXEL11_10
1606    jmp .loopx_end
1607..@flag95
1608    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1609    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1610    PIXEL10_10
1611    PIXEL11_10
1612    jmp .loopx_end
1613..@flag222
1614    PIXEL00_10
1615    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1616    PIXEL10_10
1617    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1618    jmp .loopx_end
1619..@flag252
1620    PIXEL00_21
1621    PIXEL01_11
1622    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1623    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1624    jmp .loopx_end
1625..@flag249
1626    PIXEL00_12
1627    PIXEL01_22
1628    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1629    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1630    jmp .loopx_end
1631..@flag235
1632    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1633    PIXEL01_21
1634    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1635    PIXEL11_11
1636    jmp .loopx_end
1637..@flag111
1638    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1639    PIXEL01_12
1640    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1641    PIXEL11_22
1642    jmp .loopx_end
1643..@flag63
1644    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1645    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1646    PIXEL10_11
1647    PIXEL11_21
1648    jmp .loopx_end
1649..@flag159
1650    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1651    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1652    PIXEL10_22
1653    PIXEL11_12
1654    jmp .loopx_end
1655..@flag215
1656    PIXEL00_11
1657    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1658    PIXEL10_21
1659    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1660    jmp .loopx_end
1661..@flag246
1662    PIXEL00_22
1663    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1664    PIXEL10_12
1665    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1666    jmp .loopx_end
1667..@flag254
1668    PIXEL00_10
1669    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1670    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1671    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1672    jmp .loopx_end
1673..@flag253
1674    PIXEL00_12
1675    PIXEL01_11
1676    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1677    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1678    jmp .loopx_end
1679..@flag251
1680    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1681    PIXEL01_10
1682    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1683    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1684    jmp .loopx_end
1685..@flag239
1686    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1687    PIXEL01_12
1688    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1689    PIXEL11_11
1690    jmp .loopx_end
1691..@flag127
1692    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1693    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_20
1694    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_20
1695    PIXEL11_10
1696    jmp .loopx_end
1697..@flag191
1698    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1699    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1700    PIXEL10_11
1701    PIXEL11_12
1702    jmp .loopx_end
1703..@flag223
1704    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_20
1705    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1706    PIXEL10_10
1707    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_20
1708    jmp .loopx_end
1709..@flag247
1710    PIXEL00_11
1711    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1712    PIXEL10_12
1713    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1714    jmp .loopx_end
1715..@flag255
1716    DiffOrNot w4,w2,PIXEL00_0,PIXEL00_100
1717    DiffOrNot w2,w6,PIXEL01_0,PIXEL01_100
1718    DiffOrNot w8,w4,PIXEL10_0,PIXEL10_100
1719    DiffOrNot w6,w8,PIXEL11_0,PIXEL11_100
1720    jmp .loopx_end
1721
1722
1723..@cross0
1724    mov     edx,eax
1725    shl     eax,16
1726    or      eax,edx
1727    mov     [edi],eax
1728    mov     [edi+ebx],eax
1729    jmp     .loopx_end
1730..@cross1
1731    mov     edx,eax
1732    shl     eax,16
1733    or      eax,edx
1734    mov     ecx,[w2]
1735    and     edx,[zerolowbits]
1736    and     ecx,[zerolowbits]
1737    add     ecx,edx
1738    shr     ecx,1
1739    add     ecx,0x0821
1740    and     ecx,[zerolowbits]
1741    add     edx,ecx
1742    shr     edx,1
1743    mov     ecx,edx
1744    shl     edx,16
1745    or      edx,ecx
1746    mov     [edi],edx
1747    mov     [edi+ebx],eax
1748    jmp     .loopx_end
1749..@cross2
1750    shl     eax,16
1751    mov     ecx,[w4]
1752    and     edx,[zerolowbits]
1753    and     ecx,[zerolowbits]
1754    add     ecx,edx
1755    shr     ecx,1
1756    add     ecx,0x0821
1757    and     ecx,[zerolowbits]
1758    add     edx,ecx
1759    shr     edx,1
1760    or      eax,edx
1761    mov     [edi],eax
1762    mov     [edi+ebx],eax
1763    jmp     .loopx_end
1764..@cross4
1765    mov     ecx,[w6]
1766    and     edx,[zerolowbits]
1767    and     ecx,[zerolowbits]
1768    add     ecx,edx
1769    shr     ecx,1
1770    add     ecx,0x0821
1771    and     ecx,[zerolowbits]
1772    add     edx,ecx
1773    shr     edx,1
1774    shl     edx,16
1775    or      eax,edx
1776    mov     [edi],eax
1777    mov     [edi+ebx],eax
1778    jmp     .loopx_end
1779..@cross8
1780    mov     edx,eax
1781    shl     eax,16
1782    or      eax,edx
1783    mov     ecx,[w8]
1784    and     edx,[zerolowbits]
1785    and     ecx,[zerolowbits]
1786    add     ecx,edx
1787    shr     ecx,1
1788    add     ecx,0x0821
1789    and     ecx,[zerolowbits]
1790    add     edx,ecx
1791    shr     edx,1
1792    mov     ecx,edx
1793    shl     edx,16
1794    or      edx,ecx
1795    mov     [edi],eax
1796    mov     [edi+ebx],edx
1797    jmp     .loopx_end
1798
1799.loopx_end
1800    add     esi,2
1801    add     edi,4
1802    dec     dword[xcounter]
1803    jle     .xres_2
1804    jmp     .loopx
1805.xres_2
1806    ; x=Xres-2 - special case
1807    jl      NEAR .xres_1
1808    mov     ebx,[prevline]
1809    movq    mm5,[esi+ebx-4]
1810    movq    mm6,[esi-4]
1811    mov     ebx,[nextline]
1812    movq    mm7,[esi+ebx-4]
1813    psrlq   mm5,16
1814    psrlq   mm6,16
1815    psrlq   mm7,16
1816    movd    eax,mm5
1817    movzx   edx,ax
1818    mov     [w1],edx
1819    shr     eax,16
1820    mov     [w2],eax
1821    psrlq   mm5,32
1822    movd    eax,mm5
1823    mov     [w3],eax
1824    movd    eax,mm6
1825    movzx   edx,ax
1826    mov     [w4],edx
1827    shr     eax,16
1828    mov     [w5],eax
1829    psrlq   mm6,32
1830    movd    eax,mm6
1831    mov     [w6],eax
1832    movd    eax,mm7
1833    movzx   edx,ax
1834    mov     [w7],edx
1835    shr     eax,16
1836    mov     [w8],eax
1837    psrlq   mm7,32
1838    movd    eax,mm7
1839    mov     [w9],eax
1840    jmp     .flags
1841.xres_1
1842    cmp     dword[xcounter],-1
1843    jl      .nexty
1844    ; x=Xres-1 - special case
1845    mov     ebx,[prevline]
1846    movq    mm5,[esi+ebx-6]
1847    movq    mm6,[esi-6]
1848    mov     ebx,[nextline]
1849    movq    mm7,[esi+ebx-6]
1850    psrlq   mm5,32
1851    psrlq   mm6,32
1852    psrlq   mm7,32
1853    movd    eax,mm5
1854    movzx   edx,ax
1855    mov     [w1],edx
1856    shr     eax,16
1857    mov     [w2],eax
1858    mov     [w3],eax
1859    movd    eax,mm6
1860    movzx   edx,ax
1861    mov     [w4],edx
1862    shr     eax,16
1863    mov     [w5],eax
1864    mov     [w6],eax
1865    movd    eax,mm7
1866    movzx   edx,ax
1867    mov     [w7],edx
1868    shr     eax,16
1869    mov     [w8],eax
1870    mov     [w9],eax
1871    jmp     .flags
1872.nexty
1873
1874    add     edi,ebx
1875    dec     dword[linesleft]
1876    jz      .fin
1877    mov     ebx,[ebp+Xres]
1878    shl     ebx,1
1879    cmp     dword[linesleft],1
1880    je      .lastline
1881    mov     dword[nextline],ebx
1882    neg     ebx
1883    mov     dword[prevline],ebx
1884    jmp     .loopy
1885.lastline
1886    mov     dword[nextline],0
1887    neg     ebx
1888    mov     dword[prevline],ebx
1889    jmp     .loopy
1890.fin
1891    emms
1892    popad
1893    mov esp,ebp
1894    pop ebp
1895    ret
1896
1897SECTION .data
1898FuncTable
1899    dd ..@flag0, ..@flag1, ..@flag2, ..@flag3, ..@flag4, ..@flag5, ..@flag6, ..@flag7
1900    dd ..@flag8, ..@flag9, ..@flag10, ..@flag11, ..@flag12, ..@flag13, ..@flag14, ..@flag15
1901    dd ..@flag16, ..@flag17, ..@flag18, ..@flag19, ..@flag20, ..@flag21, ..@flag22, ..@flag23
1902    dd ..@flag24, ..@flag25, ..@flag26, ..@flag27, ..@flag28, ..@flag29, ..@flag30, ..@flag31
1903    dd ..@flag32, ..@flag33, ..@flag34, ..@flag35, ..@flag36, ..@flag37, ..@flag38, ..@flag39
1904    dd ..@flag40, ..@flag41, ..@flag42, ..@flag43, ..@flag44, ..@flag45, ..@flag46, ..@flag47
1905    dd ..@flag48, ..@flag49, ..@flag50, ..@flag51, ..@flag52, ..@flag53, ..@flag54, ..@flag55
1906    dd ..@flag56, ..@flag57, ..@flag58, ..@flag59, ..@flag60, ..@flag61, ..@flag62, ..@flag63
1907    dd ..@flag64, ..@flag65, ..@flag66, ..@flag67, ..@flag68, ..@flag69, ..@flag70, ..@flag71
1908    dd ..@flag72, ..@flag73, ..@flag74, ..@flag75, ..@flag76, ..@flag77, ..@flag78, ..@flag79
1909    dd ..@flag80, ..@flag81, ..@flag82, ..@flag83, ..@flag84, ..@flag85, ..@flag86, ..@flag87
1910    dd ..@flag88, ..@flag89, ..@flag90, ..@flag91, ..@flag92, ..@flag93, ..@flag94, ..@flag95
1911    dd ..@flag96, ..@flag97, ..@flag98, ..@flag99, ..@flag100, ..@flag101, ..@flag102, ..@flag103
1912    dd ..@flag104, ..@flag105, ..@flag106, ..@flag107, ..@flag108, ..@flag109, ..@flag110, ..@flag111
1913    dd ..@flag112, ..@flag113, ..@flag114, ..@flag115, ..@flag116, ..@flag117, ..@flag118, ..@flag119
1914    dd ..@flag120, ..@flag121, ..@flag122, ..@flag123, ..@flag124, ..@flag125, ..@flag126, ..@flag127
1915    dd ..@flag128, ..@flag129, ..@flag130, ..@flag131, ..@flag132, ..@flag133, ..@flag134, ..@flag135
1916    dd ..@flag136, ..@flag137, ..@flag138, ..@flag139, ..@flag140, ..@flag141, ..@flag142, ..@flag143
1917    dd ..@flag144, ..@flag145, ..@flag146, ..@flag147, ..@flag148, ..@flag149, ..@flag150, ..@flag151
1918    dd ..@flag152, ..@flag153, ..@flag154, ..@flag155, ..@flag156, ..@flag157, ..@flag158, ..@flag159
1919    dd ..@flag160, ..@flag161, ..@flag162, ..@flag163, ..@flag164, ..@flag165, ..@flag166, ..@flag167
1920    dd ..@flag168, ..@flag169, ..@flag170, ..@flag171, ..@flag172, ..@flag173, ..@flag174, ..@flag175
1921    dd ..@flag176, ..@flag177, ..@flag178, ..@flag179, ..@flag180, ..@flag181, ..@flag182, ..@flag183
1922    dd ..@flag184, ..@flag185, ..@flag186, ..@flag187, ..@flag188, ..@flag189, ..@flag190, ..@flag191
1923    dd ..@flag192, ..@flag193, ..@flag194, ..@flag195, ..@flag196, ..@flag197, ..@flag198, ..@flag199
1924    dd ..@flag200, ..@flag201, ..@flag202, ..@flag203, ..@flag204, ..@flag205, ..@flag206, ..@flag207
1925    dd ..@flag208, ..@flag209, ..@flag210, ..@flag211, ..@flag212, ..@flag213, ..@flag214, ..@flag215
1926    dd ..@flag216, ..@flag217, ..@flag218, ..@flag219, ..@flag220, ..@flag221, ..@flag222, ..@flag223
1927    dd ..@flag224, ..@flag225, ..@flag226, ..@flag227, ..@flag228, ..@flag229, ..@flag230, ..@flag231
1928    dd ..@flag232, ..@flag233, ..@flag234, ..@flag235, ..@flag236, ..@flag237, ..@flag238, ..@flag239
1929    dd ..@flag240, ..@flag241, ..@flag242, ..@flag243, ..@flag244, ..@flag245, ..@flag246, ..@flag247
1930    dd ..@flag248, ..@flag249, ..@flag250, ..@flag251, ..@flag252, ..@flag253, ..@flag254, ..@flag255
1931
1932FuncTable2
1933    dd ..@cross0, ..@cross1, ..@cross2, ..@flag0,
1934    dd ..@cross4, ..@flag0,  ..@flag0,  ..@flag0,
1935    dd ..@cross8, ..@flag0,  ..@flag0,  ..@flag0,
1936    dd ..@flag0,  ..@flag0,  ..@flag0,  ..@flag0
1937
1938