[svn] / branches / dev-api-4 / xvidcore / src / quant / x86_asm / quantize_h263_mmx.asm Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/src/quant/x86_asm/quantize_h263_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1175, Tue Oct 7 14:16:29 2003 UTC revision 1176, Thu Oct 9 18:50:22 2003 UTC
# Line 1  Line 1 
1  ;/**************************************************************************  ;/*****************************************************************************
2  ; *  ; *
3  ; *     XVID MPEG-4 VIDEO CODEC  ; *     XVID MPEG-4 VIDEO CODEC
4  ; *     mmx quantization/dequantization  ; *  - MPEG4 Quantization H263 implementation / MMX optimized -
5  ; *  ; *
6  ; *     This program is an implementation of a part of one or more MPEG-4  ; *  Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>
7  ; *     Video tools as specified in ISO/IEC 14496-2 standard.  Those intending  ; *               2002-2003 Pascal Massimino <skal@planet-d.net>
 ; *     to use this software module in hardware or software products are  
 ; *     advised that its use may infringe existing patents or copyrights, and  
 ; *     any such use would be at such party's own risk.  The original  
 ; *     developer of this software module and his/her company, and subsequent  
 ; *     editors and their companies, will have no liability for use of this  
 ; *     software or modifications or derivatives thereof.  
8  ; *  ; *
9  ; *     This program is free software; you can redistribute it and/or modify  ; *     This program is free software; you can redistribute it and/or modify
10  ; *     it under the terms of the GNU General Public License as published by  ; *     it under the terms of the GNU General Public License as published by
# Line 24  Line 18 
18  ; *  ; *
19  ; *     You should have received a copy of the GNU General Public License  ; *     You should have received a copy of the GNU General Public License
20  ; *     along with this program; if not, write to the Free Software  ; *     along with this program; if not, write to the Free Software
21  ; *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
22  ; *  ; *
23  ; *************************************************************************/  ; * $Id: quantize_h263_mmx.asm,v 1.1.2.2 2003-10-09 18:50:22 edgomez Exp $
   
 ;/**************************************************************************  
 ; *  
 ; *     History:  
24  ; *  ; *
25  ; * 09.08.2002  sse2 dequant funcs revamped  ; ****************************************************************************/
 ; * 14.06.2002  mmx+xmm dequant_* funcs revamped  -Skal-  
 ; * 24.02.2002  sse2 quant_intra / dequant_intra (have to use movdqu ???)  
 ; * 17.04.2002  sse2 quant_inter / dequant_inter  
 ; * 26.12.2001  minor bug fixes, dequant saturate, further optimization  
 ; * 19.11.2001  quant_inter_mmx now returns sum of abs. coefficient values  
 ; *     04.11.2001      nasm version; (c)2001 peter ross <pross@cs.rmit.edu.au>  
 ; *  
 ; *************************************************************************/  
26    
27  ; enable dequant saturate [-2048,2047], test purposes only.  ; enable dequant saturate [-2048,2047], test purposes only.
28  %define SATURATE  %define SATURATE
# Line 50  Line 32 
32    
33  bits 32  bits 32
34    
 section .data  
   
   
35  %macro cglobal 1  %macro cglobal 1
36          %ifdef PREFIX          %ifdef PREFIX
37                  global _%1                  global _%1
# Line 62  Line 41 
41          %endif          %endif
42  %endmacro  %endmacro
43    
44  align 16  ;***************************************************************************
45    ; Local data
46    ;***************************************************************************
47    
48  plus_one times 8        dw       1  %ifdef FORMAT_COFF
49    section .data data
50    %else
51    section .data data align=16
52    %endif
53    
54    align 16
55    plus_one:
56            times 8 dw 1
57    
58  ;===========================================================================  ;===========================================================================
59  ;  ;
# Line 72  Line 61 
61  ;  ;
62  ;===========================================================================  ;===========================================================================
63    
 %macro MMX_SUB  1  
 times 4 dw %1 / 2  
 %endmacro  
   
64  align 16  align 16
65  mmx_sub  mmx_sub:
66                  MMX_SUB 1  %assign quant 1
67                  MMX_SUB 2  %rep 31
68                  MMX_SUB 3          times 4 dw  quant / 2
69                  MMX_SUB 4          %assign quant quant+1
70                  MMX_SUB 5  %endrep
                 MMX_SUB 6  
                 MMX_SUB 7  
                 MMX_SUB 8  
                 MMX_SUB 9  
                 MMX_SUB 10  
                 MMX_SUB 11  
                 MMX_SUB 12  
                 MMX_SUB 13  
                 MMX_SUB 14  
                 MMX_SUB 15  
                 MMX_SUB 16  
                 MMX_SUB 17  
                 MMX_SUB 18  
                 MMX_SUB 19  
                 MMX_SUB 20  
                 MMX_SUB 21  
                 MMX_SUB 22  
                 MMX_SUB 23  
                 MMX_SUB 24  
                 MMX_SUB 25  
                 MMX_SUB 26  
                 MMX_SUB 27  
                 MMX_SUB 28  
                 MMX_SUB 29  
                 MMX_SUB 30  
                 MMX_SUB 31  
   
   
71    
72  ;===========================================================================  ;===========================================================================
73  ;  ;
# Line 122  Line 79 
79  ;  ;
80  ;===========================================================================  ;===========================================================================
81    
 %macro MMX_DIV  1  
 times 4 dw  (1 << 16) / (%1 * 2) + 1  
 %endmacro  
   
82  align 16  align 16
83  mmx_div  mmx_div:
84                  MMX_DIV 1  %assign quant 1
85                  MMX_DIV 2  %rep 31
86                  MMX_DIV 3          times 4 dw  (1<<16) / (quant*2) + 1
87                  MMX_DIV 4          %assign quant quant+1
88                  MMX_DIV 5  %endrep
                 MMX_DIV 6  
                 MMX_DIV 7  
                 MMX_DIV 8  
                 MMX_DIV 9  
                 MMX_DIV 10  
                 MMX_DIV 11  
                 MMX_DIV 12  
                 MMX_DIV 13  
                 MMX_DIV 14  
                 MMX_DIV 15  
                 MMX_DIV 16  
                 MMX_DIV 17  
                 MMX_DIV 18  
                 MMX_DIV 19  
                 MMX_DIV 20  
                 MMX_DIV 21  
                 MMX_DIV 22  
                 MMX_DIV 23  
                 MMX_DIV 24  
                 MMX_DIV 25  
                 MMX_DIV 26  
                 MMX_DIV 27  
                 MMX_DIV 28  
                 MMX_DIV 29  
                 MMX_DIV 30  
                 MMX_DIV 31  
   
   
89    
90  ;===========================================================================  ;===========================================================================
91  ;  ;
# Line 168  Line 93 
93  ;  ;
94  ;===========================================================================  ;===========================================================================
95    
96  %macro MMX_ADD  1  align 16
97  %if %1 % 2 != 0  mmx_add:
98  times 4 dw %1  %assign quant 1
99    %rep 31
100            %if quant % 2 != 0
101            times 4 dw  quant
102  %else  %else
103  times 4 dw %1 - 1          times 4 dw quant - 1
104  %endif  %endif
105  %endmacro          %assign quant quant+1
106    %endrep
 align 16  
 mmx_add  
                 MMX_ADD 1  
                 MMX_ADD 2  
                 MMX_ADD 3  
                 MMX_ADD 4  
                 MMX_ADD 5  
                 MMX_ADD 6  
                 MMX_ADD 7  
                 MMX_ADD 8  
                 MMX_ADD 9  
                 MMX_ADD 10  
                 MMX_ADD 11  
                 MMX_ADD 12  
                 MMX_ADD 13  
                 MMX_ADD 14  
                 MMX_ADD 15  
                 MMX_ADD 16  
                 MMX_ADD 17  
                 MMX_ADD 18  
                 MMX_ADD 19  
                 MMX_ADD 20  
                 MMX_ADD 21  
                 MMX_ADD 22  
                 MMX_ADD 23  
                 MMX_ADD 24  
                 MMX_ADD 25  
                 MMX_ADD 26  
                 MMX_ADD 27  
                 MMX_ADD 28  
                 MMX_ADD 29  
                 MMX_ADD 30  
                 MMX_ADD 31  
   
107    
108  ;===========================================================================  ;===========================================================================
109  ;  ;
# Line 217  Line 111 
111  ;  ;
112  ;===========================================================================  ;===========================================================================
113    
 %macro MMX_MUL  1  
 times 4 dw %1 * 2  
 %endmacro  
   
114  align 16  align 16
115  mmx_mul  mmx_mul:
116                  MMX_MUL 1  %assign quant 1
117                  MMX_MUL 2  %rep 31
118                  MMX_MUL 3          times 4 dw  quant*2
119                  MMX_MUL 4          %assign quant quant+1
120                  MMX_MUL 5  %endrep
                 MMX_MUL 6  
                 MMX_MUL 7  
                 MMX_MUL 8  
                 MMX_MUL 9  
                 MMX_MUL 10  
                 MMX_MUL 11  
                 MMX_MUL 12  
                 MMX_MUL 13  
                 MMX_MUL 14  
                 MMX_MUL 15  
                 MMX_MUL 16  
                 MMX_MUL 17  
                 MMX_MUL 18  
                 MMX_MUL 19  
                 MMX_MUL 20  
                 MMX_MUL 21  
                 MMX_MUL 22  
                 MMX_MUL 23  
                 MMX_MUL 24  
                 MMX_MUL 25  
                 MMX_MUL 26  
                 MMX_MUL 27  
                 MMX_MUL 28  
                 MMX_MUL 29  
                 MMX_MUL 30  
                 MMX_MUL 31  
   
121    
122  ;===========================================================================  ;===========================================================================
123  ;  ;
# Line 263  Line 126 
126  ;===========================================================================  ;===========================================================================
127    
128  align 16  align 16
129  sse2_2047       times 8 dw 2047  sse2_2047:
130            times 8 dw 2047
131    
132  align 16  align 16
133  mmx_2047        times 4 dw 2047  mmx_2047:
134            times 4 dw 2047
135    
136  align 8  align 8
137  mmx_32768_minus_2048                            times 4 dw (32768-2048)  mmx_32768_minus_2048:
138  mmx_32767_minus_2047                            times 4 dw (32767-2047)          times 4 dw (32768-2048)
139    
140    mmx_32767_minus_2047:
141            times 4 dw (32767-2047)
142    
143    
144    ;***************************************************************************
145    ; Code
146    ;***************************************************************************
147    
148  section .text  section .text
149    
150    
151  ;===========================================================================  ;===========================================================================
152  ;  ;
153  ; void quant_intra_mmx(int16_t * coeff,  ; uint32_t quant_h263_intra_mmx(int16_t * coeff,
154  ;                                       const int16_t const * data,  ;                                       const int16_t const * data,
155  ;                                       const uint32_t quant,  ;                                       const uint32_t quant,
156  ;                                       const uint32_t dcscalar);  ;                                       const uint32_t dcscalar);
# Line 302  Line 174 
174                  jz      .q1loop                  jz      .q1loop
175    
176                  movq    mm7, [mmx_div + eax * 8 - 8]                  movq    mm7, [mmx_div + eax * 8 - 8]
177    
178  align ALIGN  align ALIGN
179  .loop  .loop
180                  movq    mm0, [esi + 8*ecx]              ; mm0 = [1st]                  movq    mm0, [esi + 8*ecx]              ; mm0 = [1st]
181                  movq    mm3, [esi + 8*ecx + 8]  ;          movq    mm3, [esi + 8*ecx + 8]
182                  pxor    mm1, mm1                ; mm1 = 0                  pxor    mm1, mm1                ; mm1 = 0
183                  pxor    mm4, mm4                ;                  pxor    mm4, mm4                ;
184                  pcmpgtw mm1, mm0                ; mm1 = (0 > mm0)                  pcmpgtw mm1, mm0                ; mm1 = (0 > mm0)
# Line 328  Line 201 
201                  jnz     .loop                  jnz     .loop
202    
203  .done  .done
         ; caclulate  data[0] // (int32_t)dcscalar)  
204    
205            ; caclulate  data[0] // (int32_t)dcscalar)
206                  mov     ecx, [esp + 12 + 16]    ; dcscalar                  mov     ecx, [esp + 12 + 16]    ; dcscalar
207                  mov     edx, ecx                  mov     edx, ecx
208                  movsx   eax, word [esi] ; data[0]                  movsx   eax, word [esi] ; data[0]
# Line 339  Line 212 
212    
213                  sub             eax, edx                  sub             eax, edx
214                  jmp             short .mul                  jmp             short .mul
215    
216  .gtzero  .gtzero
217                  add             eax, edx                  add             eax, edx
218  .mul  .mul
219                  cdq                             ; expand eax -> edx:eax                  cdq                             ; expand eax -> edx:eax
220                  idiv    ecx                     ; eax = edx:eax / dcscalar                  idiv    ecx                     ; eax = edx:eax / dcscalar
   
221                  mov     [edi], ax               ; coeff[0] = ax                  mov     [edi], ax               ; coeff[0] = ax
222    
223            xor             eax, eax    ; return(0);
224                  pop     edi                  pop     edi
225                  pop     esi                  pop     esi
226                  pop     ecx                  pop     ecx
# Line 356  Line 230 
230  align ALIGN  align ALIGN
231  .q1loop  .q1loop
232                  movq    mm0, [esi + 8*ecx]              ; mm0 = [1st]                  movq    mm0, [esi + 8*ecx]              ; mm0 = [1st]
233                  movq    mm3, [esi + 8*ecx + 8]  ;          movq    mm3, [esi + 8*ecx + 8]
234                  pxor    mm1, mm1                ; mm1 = 0                  pxor    mm1, mm1                ; mm1 = 0
235                  pxor    mm4, mm4                ;                  pxor    mm4, mm4                ;
236                  pcmpgtw mm1, mm0                ; mm1 = (0 > mm0)                  pcmpgtw mm1, mm0                ; mm1 = (0 > mm0)
# Line 368  Line 242 
242                  psrlw   mm0, 1                  ; mm0 >>= 1   (/2)                  psrlw   mm0, 1                  ; mm0 >>= 1   (/2)
243                  psrlw   mm3, 1                  ;                  psrlw   mm3, 1                  ;
244                  pxor    mm0, mm1                ; mm0 *= sign(mm0)                  pxor    mm0, mm1                ; mm0 *= sign(mm0)
245                  pxor    mm3, mm4        ;          pxor    mm3, mm4
246                  psubw   mm0, mm1                ; undisplace                  psubw   mm0, mm1                ; undisplace
247                  psubw   mm3, mm4                ;                  psubw   mm3, mm4                ;
248                  movq    [edi + 8*ecx], mm0                  movq    [edi + 8*ecx], mm0
# Line 383  Line 257 
257    
258  ;===========================================================================  ;===========================================================================
259  ;  ;
260  ; void quant_intra_sse2(int16_t * coeff,  ; uint32_t quant_h263_intra_sse2(int16_t * coeff,
261  ;                                       const int16_t const * data,  ;                                       const int16_t const * data,
262  ;                                       const uint32_t quant,  ;                                       const uint32_t quant,
263  ;                                       const uint32_t dcscalar);  ;                                       const uint32_t dcscalar);
# Line 445  Line 319 
319    
320                  sub             eax, edx                  sub             eax, edx
321                  jmp             short .qas2_mul                  jmp             short .qas2_mul
322    
323  .qas2_gtzero  .qas2_gtzero
324                  add             eax, edx                  add             eax, edx
325    
326  .qas2_mul  .qas2_mul
327                  cdq                  cdq
328                  idiv    ecx                  idiv    ecx
329    
330                  mov             [edi], ax                  mov             [edi], ax
331    
332            xor             eax, eax                ; return(0);
333                  pop             edi                  pop             edi
334                  pop             esi                  pop             esi
335    
# Line 488  Line 365 
365    
366  ;===========================================================================  ;===========================================================================
367  ;  ;
368  ; uint32_t quant_inter_mmx(int16_t * coeff,  ; uint32_t quant_h263_inter_mmx(int16_t * coeff,
369  ;                                       const int16_t const * data,  ;                                       const int16_t const * data,
370  ;                                       const uint32_t quant);  ;                                       const uint32_t quant);
371  ;  ;
# Line 519  Line 396 
396  align ALIGN  align ALIGN
397  .loop  .loop
398                  movq    mm0, [esi + 8*ecx]              ; mm0 = [1st]                  movq    mm0, [esi + 8*ecx]              ; mm0 = [1st]
399                  movq    mm3, [esi + 8*ecx + 8]  ;          movq    mm3, [esi + 8*ecx + 8]
400                  pxor    mm1, mm1                ; mm1 = 0                  pxor    mm1, mm1                ; mm1 = 0
401                  pxor    mm4, mm4                ;                  pxor    mm4, mm4                ;
402                  pcmpgtw mm1, mm0                ; mm1 = (0 > mm0)                  pcmpgtw mm1, mm0                ; mm1 = (0 > mm0)
# Line 550  Line 427 
427                  movq    mm0, mm5                  movq    mm0, mm5
428                  psrlq   mm5, 32                  psrlq   mm5, 32
429                  paddd   mm0, mm5                  paddd   mm0, mm5
                 movd    eax, mm0                ; return sum  
430    
431            movd    eax, mm0                ; return sum
432                  pop     edi                  pop     edi
433                  pop     esi                  pop     esi
434                  pop ecx                  pop ecx
# Line 593  Line 470 
470    
471  ;===========================================================================  ;===========================================================================
472  ;  ;
473  ; uint32_t quant_inter_sse2(int16_t * coeff,  ; uint32_t quant_h263_inter_sse2(int16_t * coeff,
474  ;                                       const int16_t const * data,  ;                                       const int16_t const * data,
475  ;                                       const uint32_t quant);  ;                                       const uint32_t quant);
476  ;  ;
# Line 665  Line 542 
542                  movq    mm5, mm0                  movq    mm5, mm0
543                  psrlq   mm5, 32                  psrlq   mm5, 32
544                  paddd   mm0, mm5                  paddd   mm0, mm5
545    
546                  movd    eax, mm0                                        ; return sum                  movd    eax, mm0                                        ; return sum
547    
548                  pop             edi                  pop             edi
# Line 705  Line 583 
583    
584  ;===========================================================================  ;===========================================================================
585  ;  ;
586  ; void dequant_intra_mmx(int16_t *data,  ; uint32_t dequant_h263_intra_mmx(int16_t *data,
587  ;                                       const int16_t const *coeff,  ;                                       const int16_t const *coeff,
588  ;                                       const uint32_t quant,  ;                                       const uint32_t quant,
589  ;                                       const uint32_t dcscalar);  ;                                       const uint32_t dcscalar);
# Line 766  Line 644 
644    jnz   near .loop    jnz   near .loop
645    
646      ; deal with DC      ; deal with DC
   
647    movd mm0, [ecx]    movd mm0, [ecx]
648    pmullw mm0, [esp+16]    ; dcscalar    pmullw mm0, [esp+16]    ; dcscalar
649    movq mm2, [mmx_32767_minus_2047]    movq mm2, [mmx_32767_minus_2047]
# Line 778  Line 655 
655    movd eax, mm0    movd eax, mm0
656    mov [edx], ax    mov [edx], ax
657    
658            xor              eax, eax                               ; return(0);
659    ret    ret
660    
661  ;===========================================================================  ;===========================================================================
662  ;  ;
663  ; void dequant_intra_xmm(int16_t *data,  ; uint32_t dequant_h263_intra_xmm(int16_t *data,
664  ;                                       const int16_t const *coeff,  ;                                       const int16_t const *coeff,
665  ;                                       const uint32_t quant,  ;                                       const uint32_t quant,
666  ;                                       const uint32_t dcscalar);  ;                                       const uint32_t dcscalar);
# Line 841  Line 719 
719    jnz   near .loop    jnz   near .loop
720    
721      ; deal with DC      ; deal with DC
   
722    movd mm0, [ecx]    movd mm0, [ecx]
723    pmullw mm0, [esp+16]    ; dcscalar    pmullw mm0, [esp+16]    ; dcscalar
724    movq mm2, [mmx_32767_minus_2047]    movq mm2, [mmx_32767_minus_2047]
# Line 853  Line 730 
730    movd eax, mm0    movd eax, mm0
731    mov [edx], ax    mov [edx], ax
732    
733            xor             eax, eax
734    ret    ret
735    
736    
737  ;===========================================================================  ;===========================================================================
738  ;  ;
739  ; void dequant_intra_sse2(int16_t *data,  ; uint32_t dequant_h263_intra_sse2(int16_t *data,
740  ;                                       const int16_t const *coeff,  ;                                       const int16_t const *coeff,
741  ;                                       const uint32_t quant,  ;                                       const uint32_t quant,
742  ;                                       const uint32_t dcscalar);  ;                                       const uint32_t dcscalar);
743  ;  ;
744  ;===========================================================================  ;===========================================================================
745    
746  align ALIGN  align ALIGN
747  cglobal dequant_h263_intra_sse2  cglobal dequant_h263_intra_sse2
748  dequant_h263_intra_sse2:  dequant_h263_intra_sse2:
# Line 927  Line 806 
806          movd eax, mm0          movd eax, mm0
807          mov [edx], ax          mov [edx], ax
808    
809            xor             eax, eax
810          ret          ret
811    
   
   
   
812  ;===========================================================================  ;===========================================================================
813  ;  ;
814  ; void dequant_inter_mmx(int16_t * data,  ; uint32t dequant_h263_inter_mmx(int16_t * data,
815  ;                                       const int16_t * const coeff,  ;                                       const int16_t * const coeff,
816  ;                                       const uint32_t quant);  ;                                       const uint32_t quant);
817  ;  ;
# Line 975  Line 852 
852    paddw mm3, mm5 ; + offset    paddw mm3, mm5 ; + offset
853    paddw mm0, mm1 ; negate back    paddw mm0, mm1 ; negate back
854    paddw mm3, mm4 ; negate back    paddw mm3, mm4 ; negate back
   
855      ; saturates to +2047      ; saturates to +2047
856    movq mm2, [mmx_32767_minus_2047]    movq mm2, [mmx_32767_minus_2047]
857    add eax, 2    add eax, 2
# Line 990  Line 866 
866    movq [edx + 8*eax + 8*16+8 - 2*8], mm3    movq [edx + 8*eax + 8*16+8 - 2*8], mm3
867    jnz   near .loop    jnz   near .loop
868    
869            xor             eax, eax
870    ret    ret
871    
872  ;===========================================================================  ;===========================================================================
873  ;  ;
874  ; void dequant_inter_xmm(int16_t * data,  ; uint32_t dequant_h263_inter_xmm(int16_t * data,
875  ;                                       const int16_t * const coeff,  ;                                       const int16_t * const coeff,
876  ;                                       const uint32_t quant);  ;                                       const uint32_t quant);
877  ;  ;
# Line 1038  Line 915 
915    paddw mm3, mm5 ; + offset    paddw mm3, mm5 ; + offset
916    paddw mm0, mm1 ; start restoring sign    paddw mm0, mm1 ; start restoring sign
917    paddw mm3, mm4 ; start restoring sign    paddw mm3, mm4 ; start restoring sign
   
918        ; saturates to +2047        ; saturates to +2047
919    movq mm2, [mmx_2047]    movq mm2, [mmx_2047]
920    pminsw mm0, mm2    pminsw mm0, mm2
# Line 1051  Line 927 
927    movq [edx + 8*eax + 8*16+8 - 2*8], mm3    movq [edx + 8*eax + 8*16+8 - 2*8], mm3
928    jnz   near .loop    jnz   near .loop
929    
930            xor             eax, eax
931    ret    ret
932    
933  ;===========================================================================  ;===========================================================================
934  ;  ;
935  ; void dequant_inter_sse2(int16_t * data,  ; uint32_t dequant_h263_inter_sse2(int16_t * data,
936  ;                                       const int16_t * const coeff,  ;                                       const int16_t * const coeff,
937  ;                                       const uint32_t quant);  ;                                       const uint32_t quant);
938  ;  ;
939  ;===========================================================================  ;===========================================================================
940    
941  align ALIGN  align ALIGN
942  cglobal dequant_h263_inter_sse2  cglobal dequant_h263_inter_sse2
943  dequant_h263_inter_sse2:  dequant_h263_inter_sse2:
# Line 1113  Line 991 
991          movdqa [edx + 8*16 - 8*4 + 8*eax + 16], xmm3          movdqa [edx + 8*16 - 8*4 + 8*eax + 16], xmm3
992          jnz     near .loop          jnz     near .loop
993    
994            xor             eax, eax
995          ret          ret

Legend:
Removed from v.1175  
changed lines
  Added in v.1176

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4