[svn] / trunk / xvidcore / src / image / x86_asm / colorspace_yuv_mmx.asm Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/x86_asm/colorspace_yuv_mmx.asm

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

revision 1794, Fri Nov 14 15:43:28 2008 UTC revision 1795, Wed Nov 26 01:04:34 2008 UTC
# Line 3  Line 3 
3  ; *  XVID MPEG-4 VIDEO CODEC  ; *  XVID MPEG-4 VIDEO CODEC
4  ; *  - MMX and XMM YV12->YV12 conversion -  ; *  - MMX and XMM YV12->YV12 conversion -
5  ; *  ; *
6  ; *  Copyright(C) 2001 Michael Militzer <isibaar@xvid.org>  ; *  Copyright(C) 2001-2008 Michael Militzer <michael@xvid.org>
7  ; *  ; *
8  ; *  This program is free software; you can redistribute it and/or modify it  ; *  This program is free software; you can redistribute it and/or modify it
9  ; *  under the terms of the GNU General Public License as published by  ; *  under the terms of the GNU General Public License as published by
# Line 19  Line 19 
19  ; *  along with this program; if not, write to the Free Software  ; *  along with this program; if not, write to the Free Software
20  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ; *  ; *
22  ; * $Id: colorspace_yuv_mmx.asm,v 1.8 2008-11-11 20:46:24 Isibaar Exp $  ; * $Id: colorspace_yuv_mmx.asm,v 1.9 2008-11-26 01:04:34 Isibaar Exp $
23  ; *  ; *
24  ; ***************************************************************************/  ; ***************************************************************************/
25    
26  BITS 32  %include "nasm.inc"
   
 %macro cglobal 1  
         %ifdef PREFIX  
                 %ifdef MARK_FUNCS  
                         global _%1:function %1.endfunc-%1  
                         %define %1 _%1:function %1.endfunc-%1  
                         %define ENDFUNC .endfunc  
                 %else  
                         global _%1  
                         %define %1 _%1  
                         %define ENDFUNC  
                 %endif  
         %else  
                 %ifdef MARK_FUNCS  
                         global %1:function %1.endfunc-%1  
                         %define ENDFUNC .endfunc  
                 %else  
                         global %1  
                         %define ENDFUNC  
                 %endif  
         %endif  
 %endmacro  
27    
28  ;=============================================================================  ;=============================================================================
29  ; Helper macros  ; Helper macros
# Line 60  Line 38 
38  ; WIDTH         width  ; WIDTH         width
39  ; HEIGHT        height  ; HEIGHT        height
40  ; OPT           0=plain mmx, 1=xmm  ; OPT           0=plain mmx, 1=xmm
41    ;
42    ;
43    ; Trashes: DST, SRC, WIDTH, HEIGHT, _EBX, _ECX, _EDX
44  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
45    
46  %macro  PLANE_COPY      7  %macro  PLANE_COPY      7
# Line 71  Line 52 
52  %define HEIGHT          %6  %define HEIGHT          %6
53  %define OPT             %7  %define OPT             %7
54    
55    mov eax, WIDTH    mov _EBX, WIDTH
56    mov ebp, HEIGHT           ; $ebp$ = height    shr WIDTH, 6              ; $_EAX$ = width / 64
57    mov esi, SRC    and _EBX, 63              ; remainder = width % 64
58    mov edi, DST    mov _EDX, _EBX
59      shr _EBX, 4               ; $_EBX$ = remainder / 16
60    mov ebx, eax    and _EDX, 15              ; $_EDX$ = remainder % 16
   shr eax, 6                ; $eax$ = width / 64  
   and ebx, 63               ; remainder = width % 64  
   mov edx, ebx  
   shr ebx, 4                ; $ebx$ = remainder / 16  
   and edx, 15               ; $edx$ = remainder % 16  
61    
62  %%loop64_start_pc:  %%loop64_start_pc:
63    push edi    push DST
64    push esi    push SRC
65    mov  ecx, eax              ; width64  
66    test eax, eax    mov  _ECX, WIDTH          ; width64
67      test WIDTH, WIDTH
68    jz %%loop16_start_pc    jz %%loop16_start_pc
69    
70  %%loop64_pc:  %%loop64_pc:
71  %if OPT == 1                ; xmm  %if OPT == 1                ; xmm
72    prefetchnta [esi + 64]    ; non temporal prefetch    prefetchnta [SRC + 64]    ; non temporal prefetch
73    prefetchnta [esi + 96]    prefetchnta [SRC + 96]
74  %endif  %endif
75    movq mm1, [esi     ]           ; read from src    movq mm1, [SRC     ]      ; read from src
76    movq mm2, [esi +  8]    movq mm2, [SRC +  8]
77    movq mm3, [esi + 16]    movq mm3, [SRC + 16]
78    movq mm4, [esi + 24]    movq mm4, [SRC + 24]
79    movq mm5, [esi + 32]    movq mm5, [SRC + 32]
80    movq mm6, [esi + 40]    movq mm6, [SRC + 40]
81    movq mm7, [esi + 48]    movq mm7, [SRC + 48]
82    movq mm0, [esi + 56]    movq mm0, [SRC + 56]
83    
84  %if OPT == 0                ; plain mmx  %if OPT == 0                ; plain mmx
85    movq [edi     ], mm1           ; write to y_out    movq [DST     ], mm1      ; write to y_out
86    movq [edi +  8], mm2    movq [DST +  8], mm2
87    movq [edi + 16], mm3    movq [DST + 16], mm3
88    movq [edi + 24], mm4    movq [DST + 24], mm4
89    movq [edi + 32], mm5    movq [DST + 32], mm5
90    movq [edi + 40], mm6    movq [DST + 40], mm6
91    movq [edi + 48], mm7    movq [DST + 48], mm7
92    movq [edi + 56], mm0    movq [DST + 56], mm0
93  %else  %else
94    movntq [edi     ], mm1         ; write to y_out    movntq [DST     ], mm1    ; write to y_out
95    movntq [edi +  8], mm2    movntq [DST +  8], mm2
96    movntq [edi + 16], mm3    movntq [DST + 16], mm3
97    movntq [edi + 24], mm4    movntq [DST + 24], mm4
98    movntq [edi + 32], mm5    movntq [DST + 32], mm5
99    movntq [edi + 40], mm6    movntq [DST + 40], mm6
100    movntq [edi + 48], mm7    movntq [DST + 48], mm7
101    movntq [edi + 56], mm0    movntq [DST + 56], mm0
102  %endif  %endif
103    
104    add esi, 64    add SRC, 64
105    add edi, 64    add DST, 64
106    loop %%loop64_pc    loop %%loop64_pc
107    
   
108  %%loop16_start_pc:  %%loop16_start_pc:
109    mov  ecx, ebx              ; width16    mov  _ECX, _EBX           ; width16
110    test ebx, ebx    test _EBX, _EBX
111    jz %%loop1_start_pc    jz %%loop1_start_pc
112    
113  %%loop16_pc:  %%loop16_pc:
114    movq mm1, [esi]    movq mm1, [SRC]
115    movq mm2, [esi + 8]    movq mm2, [SRC + 8]
116  %if OPT == 0                ; plain mmx  %if OPT == 0                ; plain mmx
117    movq [edi], mm1    movq [DST], mm1
118    movq [edi + 8], mm2    movq [DST + 8], mm2
119  %else  %else
120    movntq [edi], mm1    movntq [DST], mm1
121    movntq [edi + 8], mm2    movntq [DST + 8], mm2
122  %endif  %endif
123    
124    add esi, 16    add SRC, 16
125    add edi, 16    add DST, 16
126    loop %%loop16_pc    loop %%loop16_pc
127    
   
128  %%loop1_start_pc:  %%loop1_start_pc:
129    mov ecx, edx    mov _ECX, _EDX
130    rep movsb    rep movsb
131    
132    pop esi    pop SRC
133    pop edi    pop DST
134    add esi, SRC_STRIDE  
135    add edi, DST_STRIDE  %ifdef ARCH_IS_X86_64
136    dec ebp    movsx _ECX, SRC_STRIDE
137      add SRC, _ECX
138      mov ecx, DST_STRIDE
139      add DST, _ECX
140    %else
141      add SRC, SRC_STRIDE
142      add DST, DST_STRIDE
143    %endif
144      dec HEIGHT
145    jg near %%loop64_start_pc    jg near %%loop64_start_pc
146    
147    %undef DST
148    %undef DST_STRIDE
149    %undef SRC
150    %undef SRC_STRIDE
151    %undef WIDTH
152    %undef HEIGHT
153    %undef OPT
154  %endmacro  %endmacro
155    
156  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
# Line 169  Line 160 
160  ; WIDTH         width  ; WIDTH         width
161  ; HEIGHT        height  ; HEIGHT        height
162  ; OPT           0=plain mmx, 1=xmm  ; OPT           0=plain mmx, 1=xmm
163    ;
164    ; Trashes: DST, WIDTH, HEIGHT, _EBX, _ECX, _EDX, _EAX
165  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
166    
167  %macro  PLANE_FILL      5  %macro  PLANE_FILL      5
# Line 178  Line 171 
171  %define HEIGHT          %4  %define HEIGHT          %4
172  %define OPT             %5  %define OPT             %5
173    
174    mov esi, WIDTH    mov _EAX, 0x80808080
175    mov ebp, HEIGHT           ; $ebp$ = height    mov _EBX, WIDTH
176    mov edi, DST    shr WIDTH, 6               ; $_ESI$ = width / 64
177      and _EBX, 63               ; _EBX = remainder = width % 64
   mov eax, 0x80808080  
   mov ebx, esi  
   shr esi, 6                ; $esi$ = width / 64  
   and ebx, 63               ; ebx = remainder = width % 64  
178    movd mm0, eax    movd mm0, eax
179    mov edx, ebx    mov _EDX, _EBX
180    shr ebx, 4                ; $ebx$ = remainder / 16    shr _EBX, 4                ; $_EBX$ = remainder / 16
181    and edx, 15               ; $edx$ = remainder % 16    and _EDX, 15               ; $_EDX$ = remainder % 16
182    punpckldq mm0, mm0    punpckldq mm0, mm0
183    
184  %%loop64_start_pf:  %%loop64_start_pf:
185    push edi    push DST
186    mov  ecx, esi              ; width64    mov  _ECX, WIDTH           ; width64
187    test esi, esi    test WIDTH, WIDTH
188    jz %%loop16_start_pf    jz %%loop16_start_pf
189    
190  %%loop64_pf:  %%loop64_pf:
191    
192  %if OPT == 0                ; plain mmx  %if OPT == 0                ; plain mmx
193    movq [edi     ], mm0          ; write to y_out    movq [DST     ], mm0       ; write to y_out
194    movq [edi +  8], mm0    movq [DST +  8], mm0
195    movq [edi + 16], mm0    movq [DST + 16], mm0
196    movq [edi + 24], mm0    movq [DST + 24], mm0
197    movq [edi + 32], mm0    movq [DST + 32], mm0
198    movq [edi + 40], mm0    movq [DST + 40], mm0
199    movq [edi + 48], mm0    movq [DST + 48], mm0
200    movq [edi + 56], mm0    movq [DST + 56], mm0
201  %else  %else
202    movntq [edi     ], mm0        ; write to y_out    movntq [DST     ], mm0     ; write to y_out
203    movntq [edi +  8], mm0    movntq [DST +  8], mm0
204    movntq [edi + 16], mm0    movntq [DST + 16], mm0
205    movntq [edi + 24], mm0    movntq [DST + 24], mm0
206    movntq [edi + 32], mm0    movntq [DST + 32], mm0
207    movntq [edi + 40], mm0    movntq [DST + 40], mm0
208    movntq [edi + 48], mm0    movntq [DST + 48], mm0
209    movntq [edi + 56], mm0    movntq [DST + 56], mm0
210  %endif  %endif
211    
212    add edi, 64    add DST, 64
213    loop %%loop64_pf    loop %%loop64_pf
214    
215  %%loop16_start_pf:  %%loop16_start_pf:
216    mov  ecx, ebx              ; width16    mov  _ECX, _EBX            ; width16
217    test ebx, ebx    test _EBX, _EBX
218    jz %%loop1_start_pf    jz %%loop1_start_pf
219    
220  %%loop16_pf:  %%loop16_pf:
221  %if OPT == 0                ; plain mmx  %if OPT == 0                ; plain mmx
222    movq [edi    ], mm0    movq [DST    ], mm0
223    movq [edi + 8], mm0    movq [DST + 8], mm0
224  %else  %else
225    movntq [edi    ], mm0    movntq [DST    ], mm0
226    movntq [edi + 8], mm0    movntq [DST + 8], mm0
227  %endif  %endif
228    
229    add edi, 16    add DST, 16
230    loop %%loop16_pf    loop %%loop16_pf
231    
232  %%loop1_start_pf:  %%loop1_start_pf:
233    mov ecx, edx    mov _ECX, _EDX
234    rep stosb    rep stosb
235    
236    pop edi    pop DST
237    add edi, DST_STRIDE  
238    dec ebp  %ifdef ARCH_IS_X86_64
239      mov ecx, DST_STRIDE
240      add DST, _ECX
241    %else
242      add DST, DST_STRIDE
243    %endif
244    
245      dec HEIGHT
246    jg near %%loop64_start_pf    jg near %%loop64_start_pf
247    
248    %undef DST
249    %undef DST_STRIDE
250    %undef WIDTH
251    %undef HEIGHT
252    %undef OPT
253  %endmacro  %endmacro
254    
255  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
# Line 263  Line 265 
265  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
266  %macro  MAKE_YV12_TO_YV12       2  %macro  MAKE_YV12_TO_YV12       2
267  %define NAME            %1  %define NAME            %1
268  %define OPT             %2  %define XMM_OPT         %2
269  ALIGN 16  ALIGN SECTION_ALIGN
270  cglobal NAME  cglobal NAME
271  NAME:  NAME:
 %define pushsize        16  
 %define localsize       12  
272    
273  %define vflip           esp + localsize + pushsize + 52    push _EBX     ;       _ESP + localsize + 3*PTR_SIZE
274  %define height          esp + localsize + pushsize + 48  
275  %define width           esp + localsize + pushsize + 44  %define localsize       2*4
276  %define uv_src_stride   esp + localsize + pushsize + 40  
277  %define y_src_stride    esp + localsize + pushsize + 36  %ifdef ARCH_IS_X86_64
278  %define v_src           esp + localsize + pushsize + 32  
279  %define u_src           esp + localsize + pushsize + 28  %ifndef WINDOWS
280  %define y_src           esp + localsize + pushsize + 24  %define pushsize        2*PTR_SIZE
281  %define uv_dst_stride   esp + localsize + pushsize + 20  %define shadow          0
282  %define y_dst_stride    esp + localsize + pushsize + 16  %else
283  %define v_dst           esp + localsize + pushsize + 12  %define pushsize        4*PTR_SIZE
284  %define u_dst           esp + localsize + pushsize + 8  %define shadow          32 + 16
285  %define y_dst           esp + localsize + pushsize + 4  %endif
286  %define _ip             esp + localsize + pushsize + 0  
287    %define prm_vflip               dword [_ESP + localsize + pushsize + shadow + 7*PTR_SIZE]
288    push ebx      ;       esp + localsize + 16  %define prm_height              dword [_ESP + localsize + pushsize + shadow + 6*PTR_SIZE]
289    push esi      ;       esp + localsize + 8  %define prm_width               dword [_ESP + localsize + pushsize + shadow + 5*PTR_SIZE]
290    push edi      ;       esp + localsize + 4  %define prm_uv_src_stride       dword [_ESP + localsize + pushsize + shadow + 4*PTR_SIZE]
291    push ebp      ;       esp + localsize + 0  %define prm_y_src_stride        dword [_ESP + localsize + pushsize + shadow + 3*PTR_SIZE]
292    %define prm_v_src                     [_ESP + localsize + pushsize + shadow + 2*PTR_SIZE]
293    %define prm_u_src                     [_ESP + localsize + pushsize + shadow + 1*PTR_SIZE]
294    
295    %ifdef WINDOWS
296      push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
297      push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
298      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
299    
300      sub _ESP, localsize
301    
302    %define prm_y_src               _ESI
303    %define prm_uv_dst_stride       TMP0d
304    %define prm_y_dst_stride        prm4d
305    %define prm_v_dst               prm3
306    %define prm_u_dst               TMP1
307    %define prm_y_dst               _EDI
308    
309      mov _EDI, prm1
310      mov TMP1, prm2
311    
312      mov _ESI, [_ESP + localsize + pushsize + shadow - 1*PTR_SIZE]
313      mov TMP0d, dword [_ESP + localsize + pushsize + shadow - 2*PTR_SIZE]
314    
315    %else
316      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
317    
318      sub _ESP, localsize
319    
320    %define prm_y_src               _ESI
321    %define prm_uv_dst_stride       prm5d
322    %define prm_y_dst_stride        TMP1d
323    %define prm_v_dst               prm6
324    %define prm_u_dst               TMP0
325    %define prm_y_dst               _EDI
326    
327      mov TMP0, prm2
328      mov _ESI, prm6
329    
330      mov prm6, prm3
331      mov TMP1d, prm4d
332    %endif
333    
334    %define _ip             _ESP + localsize + pushsize + 0
335    
336    %else
337    
338    %define pushsize        4*PTR_SIZE
339    
340    %define prm_vflip               [_ESP + localsize + pushsize + 13*PTR_SIZE]
341    %define prm_height              [_ESP + localsize + pushsize + 12*PTR_SIZE]
342    %define prm_width               [_ESP + localsize + pushsize + 11*PTR_SIZE]
343    %define prm_uv_src_stride       [_ESP + localsize + pushsize + 10*PTR_SIZE]
344    %define prm_y_src_stride        [_ESP + localsize + pushsize + 9*PTR_SIZE]
345    %define prm_v_src               [_ESP + localsize + pushsize + 8*PTR_SIZE]
346    %define prm_u_src               [_ESP + localsize + pushsize + 7*PTR_SIZE]
347    
348    %define prm_y_src               _ESI
349    %define prm_uv_dst_stride       [_ESP + localsize + pushsize + 5*PTR_SIZE]
350    %define prm_y_dst_stride        [_ESP + localsize + pushsize + 4*PTR_SIZE]
351    %define prm_v_dst               [_ESP + localsize + pushsize + 3*PTR_SIZE]
352    %define prm_u_dst               [_ESP + localsize + pushsize + 2*PTR_SIZE]
353    %define prm_y_dst               _EDI
354    
355    %define _ip             _ESP + localsize + pushsize + 0
356    
357      push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
358      push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
359      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
360    
361  %define width2                  esp + localsize - 4    sub _ESP, localsize
 %define height2                 esp + localsize - 8  
362    
363    sub esp, localsize    mov _ESI, [_ESP + localsize + pushsize + 6*PTR_SIZE]
364      mov _EDI, [_ESP + localsize + pushsize + 1*PTR_SIZE]
365    
366    mov eax, [width]  %endif
367    mov ebx, [height]  
368    %define width2                  dword [_ESP + localsize - 1*4]
369    %define height2                 dword [_ESP + localsize - 2*4]
370    
371      mov eax, prm_width
372      mov ebx, prm_height
373    shr eax, 1                    ; calculate widht/2, heigh/2    shr eax, 1                    ; calculate widht/2, heigh/2
374    shr ebx, 1    shr ebx, 1
375    mov [width2], eax    mov width2, eax
376    mov [height2], ebx    mov height2, ebx
377    
378    mov eax, [vflip]    mov eax, prm_vflip
379    test eax, eax    test eax, eax
380    jz near .go    jz near .go
381    
382          ; flipping support          ; flipping support
383    mov eax, [height]    mov eax, prm_height
384    mov esi, [y_src]    mov ecx, prm_y_src_stride
   mov ecx, [y_src_stride]  
385    sub eax, 1    sub eax, 1
386    imul eax, ecx    imul eax, ecx
387    add esi, eax                  ; y_src += (height-1) * y_src_stride    add _ESI, _EAX                 ; y_src += (height-1) * y_src_stride
388    neg ecx    neg ecx
389    mov [y_src], esi    mov prm_y_src_stride, ecx     ; y_src_stride = -y_src_stride
   mov [y_src_stride], ecx       ; y_src_stride = -y_src_stride  
390    
391    mov eax, [height2]    mov eax, height2
392    mov esi, [u_src]    mov _EDX, prm_u_src
393    mov edi, [v_src]    mov _EBP, prm_v_src
394    mov ecx, [uv_src_stride]    mov ecx, prm_uv_src_stride
395    test esi, esi    test _EDX, _EDX
396    jz .go    jz .go
397    test edi, edi    test _EBP, _EBP
398    jz .go    jz .go
399    sub eax, 1                    ; eax = height2 - 1    sub eax, 1                     ; _EAX = height2 - 1
400    imul eax, ecx    imul eax, ecx
401    add esi, eax                  ; u_src += (height2-1) * uv_src_stride    add _EDX, _EAX                  ; u_src += (height2-1) * uv_src_stride
402    add edi, eax                  ; v_src += (height2-1) * uv_src_stride    add _EBP, _EAX                  ; v_src += (height2-1) * uv_src_stride
403    neg ecx    neg ecx
404    mov [u_src], esi    mov prm_u_src, _EDX
405    mov [v_src], edi    mov prm_v_src, _EBP
406    mov [uv_src_stride], ecx      ; uv_src_stride = -uv_src_stride    mov prm_uv_src_stride, ecx     ; uv_src_stride = -uv_src_stride
407    
408  .go:  .go:
409      mov eax, prm_width
410      mov ebp, prm_height
411      PLANE_COPY _EDI, prm_y_dst_stride,  _ESI, prm_y_src_stride,  _EAX,  _EBP, XMM_OPT
412    
413    PLANE_COPY [y_dst], [y_dst_stride],  [y_src], [y_src_stride],  [width],  [height], OPT    mov _EAX, prm_u_src
414      or  _EAX, prm_v_src
   mov eax, [u_src]  
   or  eax, [v_src]  
415    jz near .UVFill_0x80    jz near .UVFill_0x80
416    PLANE_COPY [u_dst], [uv_dst_stride], [u_src], [uv_src_stride], [width2], [height2], OPT  
417    PLANE_COPY [v_dst], [uv_dst_stride], [v_src], [uv_src_stride], [width2], [height2], OPT    mov eax, width2
418      mov ebp, height2
419      mov _ESI, prm_u_src
420      mov _EDI, prm_u_dst
421      PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
422    
423      mov eax, width2
424      mov ebp, height2
425      mov _ESI, prm_v_src
426      mov _EDI, prm_v_dst
427      PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
428    
429  .Done_UVPlane:  .Done_UVPlane:
430    add esp, localsize    add _ESP, localsize
431    pop ebp  
432    pop edi    pop _EBP
433    pop esi  %ifndef ARCH_IS_X86_64
434    pop ebx    pop _EDI
435      pop _ESI
436    %else
437    %ifdef WINDOWS
438      pop _EDI
439      pop _ESI
440    %endif
441    %endif
442      pop _EBX
443    
444    ret    ret
445    
446  .UVFill_0x80:  .UVFill_0x80:
447    PLANE_FILL [u_dst], [uv_dst_stride], [width2], [height2], OPT  
448    PLANE_FILL [v_dst], [uv_dst_stride], [width2], [height2], OPT    mov esi, width2
449      mov ebp, height2
450      mov _EDI, prm_u_dst
451      PLANE_FILL _EDI, prm_uv_dst_stride, _ESI, _EBP, XMM_OPT
452    
453      mov esi, width2
454      mov ebp, height2
455      mov _EDI, prm_v_dst
456      PLANE_FILL _EDI, prm_uv_dst_stride, _ESI, _EBP, XMM_OPT
457    
458    jmp near .Done_UVPlane    jmp near .Done_UVPlane
459    
460  ENDFUNC  ENDFUNC
461    
462    %undef NAME
463    %undef XMM_OPT
464  %endmacro  %endmacro
465    
466  ;=============================================================================  ;=============================================================================
467  ; Code  ; Code
468  ;=============================================================================  ;=============================================================================
469    
470  SECTION .text  SECTION .rotext align=SECTION_ALIGN
471    
472  MAKE_YV12_TO_YV12       yv12_to_yv12_mmx, 0  MAKE_YV12_TO_YV12       yv12_to_yv12_mmx, 0
473    

Legend:
Removed from v.1794  
changed lines
  Added in v.1795

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