[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 1742, Mon Oct 30 10:52:00 2006 UTC revision 1836, Mon Dec 1 15:22:37 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.6 2006-10-30 10:52:00 Skal Exp $  ; * $Id: colorspace_yuv_mmx.asm,v 1.12 2008-12-01 15:22:37 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  
                 %else  
                         global _%1  
                         %define %1 _%1  
                 %endif  
         %else  
                 %ifdef MARK_FUNCS  
                         global %1:function %1.endfunc-%1  
                 %else  
                         global %1  
                 %endif  
         %endif  
 %endmacro  
27    
28  ;=============================================================================  ;=============================================================================
29  ; Helper macros  ; Helper macros
30  ;=============================================================================  ;=============================================================================
31    
32    %macro _MOVQ        3
33    %if %1 == 1
34            movntq  %2, %3      ; xmm
35    %else
36            movq    %2, %3      ; plain mmx
37    %endif
38    %endmacro
39    
40  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
41  ; PLANE_COPY ( DST, DST_STRIDE, SRC, SRC_STRIDE, WIDTH, HEIGHT, OPT )  ; PLANE_COPY ( DST, DST_STRIDE, SRC, SRC_STRIDE, WIDTH, HEIGHT, OPT )
42  ; DST           dst buffer  ; DST           dst buffer
# Line 56  Line 46 
46  ; WIDTH         width  ; WIDTH         width
47  ; HEIGHT        height  ; HEIGHT        height
48  ; OPT           0=plain mmx, 1=xmm  ; OPT           0=plain mmx, 1=xmm
49    ;
50    ;
51    ; Trashes: DST, SRC, WIDTH, HEIGHT, _EBX, _ECX, _EDX
52  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
53    
54  %macro  PLANE_COPY      7  %macro  PLANE_COPY      7
# Line 67  Line 60 
60  %define HEIGHT          %6  %define HEIGHT          %6
61  %define OPT             %7  %define OPT             %7
62    
63    mov eax, WIDTH    mov _EBX, WIDTH
64    mov ebp, HEIGHT           ; $ebp$ = height    shr WIDTH, 6              ; $_EAX$ = width / 64
65    mov esi, SRC    and _EBX, 63              ; remainder = width % 64
66    mov edi, DST    mov _EDX, _EBX
67      shr _EBX, 4               ; $_EBX$ = remainder / 16
68    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  
69    
70  %%loop64_start_pc:  %%loop64_start_pc:
71    push edi    push DST
72    push esi    push SRC
73    mov  ecx, eax              ; width64  
74    test eax, eax    mov  _ECX, WIDTH          ; width64
75      test WIDTH, WIDTH
76    jz %%loop16_start_pc    jz %%loop16_start_pc
77    
78  %%loop64_pc:  %%loop64_pc:
79  %if OPT == 1                ; xmm  %if OPT == 1                ; xmm
80    prefetchnta [esi + 64]    ; non temporal prefetch    prefetchnta [SRC + 64]    ; non temporal prefetch
81    prefetchnta [esi + 96]    prefetchnta [SRC + 96]
 %endif  
   movq mm1, [esi     ]           ; read from src  
   movq mm2, [esi +  8]  
   movq mm3, [esi + 16]  
   movq mm4, [esi + 24]  
   movq mm5, [esi + 32]  
   movq mm6, [esi + 40]  
   movq mm7, [esi + 48]  
   movq mm0, [esi + 56]  
   
 %if OPT == 0                ; plain mmx  
   movq [edi     ], mm1           ; write to y_out  
   movq [edi +  8], mm2  
   movq [edi + 16], mm3  
   movq [edi + 24], mm4  
   movq [edi + 32], mm5  
   movq [edi + 40], mm6  
   movq [edi + 48], mm7  
   movq [edi + 56], mm0  
 %else  
   movntq [edi     ], mm1         ; write to y_out  
   movntq [edi +  8], mm2  
   movntq [edi + 16], mm3  
   movntq [edi + 24], mm4  
   movntq [edi + 32], mm5  
   movntq [edi + 40], mm6  
   movntq [edi + 48], mm7  
   movntq [edi + 56], mm0  
82  %endif  %endif
83      movq mm1, [SRC     ]      ; read from src
84      movq mm2, [SRC +  8]
85      movq mm3, [SRC + 16]
86      movq mm4, [SRC + 24]
87      movq mm5, [SRC + 32]
88      movq mm6, [SRC + 40]
89      movq mm7, [SRC + 48]
90      movq mm0, [SRC + 56]
91    
92      _MOVQ OPT, [DST     ], mm1      ; write to y_out
93      _MOVQ OPT, [DST +  8], mm2
94      _MOVQ OPT, [DST + 16], mm3
95      _MOVQ OPT, [DST + 24], mm4
96      _MOVQ OPT, [DST + 32], mm5
97      _MOVQ OPT, [DST + 40], mm6
98      _MOVQ OPT, [DST + 48], mm7
99      _MOVQ OPT, [DST + 56], mm0
100    
101    add esi, 64    add SRC, 64
102    add edi, 64    add DST, 64
103    loop %%loop64_pc    loop %%loop64_pc
104    
   
105  %%loop16_start_pc:  %%loop16_start_pc:
106    mov  ecx, ebx              ; width16    mov  _ECX, _EBX           ; width16
107    test ebx, ebx    test _EBX, _EBX
108    jz %%loop1_start_pc    jz %%loop1_start_pc
109    
110  %%loop16_pc:  %%loop16_pc:
111    movq mm1, [esi]    movq mm1, [SRC]
112    movq mm2, [esi + 8]    movq mm2, [SRC + 8]
 %if OPT == 0                ; plain mmx  
   movq [edi], mm1  
   movq [edi + 8], mm2  
 %else  
   movntq [edi], mm1  
   movntq [edi + 8], mm2  
 %endif  
113    
114    add esi, 16    _MOVQ OPT, [DST], mm1
115    add edi, 16    _MOVQ OPT, [DST + 8], mm2
   loop %%loop16_pc  
116    
117      add SRC, 16
118      add DST, 16
119      loop %%loop16_pc
120    
121  %%loop1_start_pc:  %%loop1_start_pc:
122    mov ecx, edx    mov _ECX, _EDX
123    rep movsb    rep movsb
124    
125    pop esi    pop SRC
126    pop edi    pop DST
127    add esi, SRC_STRIDE  
128    add edi, DST_STRIDE  %ifdef ARCH_IS_X86_64
129    dec ebp    movsx _ECX, SRC_STRIDE
130      add SRC, _ECX
131      mov ecx, DST_STRIDE
132      add DST, _ECX
133    %else
134      add SRC, SRC_STRIDE
135      add DST, DST_STRIDE
136    %endif
137    
138      dec HEIGHT
139    jg near %%loop64_start_pc    jg near %%loop64_start_pc
140    
141    %undef DST
142    %undef DST_STRIDE
143    %undef SRC
144    %undef SRC_STRIDE
145    %undef WIDTH
146    %undef HEIGHT
147    %undef OPT
148  %endmacro  %endmacro
149    
150  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
# Line 165  Line 154 
154  ; WIDTH         width  ; WIDTH         width
155  ; HEIGHT        height  ; HEIGHT        height
156  ; OPT           0=plain mmx, 1=xmm  ; OPT           0=plain mmx, 1=xmm
157    ;
158    ; Trashes: DST, WIDTH, HEIGHT, _EBX, _ECX, _EDX, _EAX
159  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
160    
161  %macro  PLANE_FILL      5  %macro  PLANE_FILL      5
# Line 174  Line 165 
165  %define HEIGHT          %4  %define HEIGHT          %4
166  %define OPT             %5  %define OPT             %5
167    
168    mov esi, WIDTH    mov _EAX, 0x80808080
169    mov ebp, HEIGHT           ; $ebp$ = height    mov _EBX, WIDTH
170    mov edi, DST    shr WIDTH, 6               ; $_ESI$ = width / 64
171      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  
172    movd mm0, eax    movd mm0, eax
173    mov edx, ebx    mov _EDX, _EBX
174    shr ebx, 4                ; $ebx$ = remainder / 16    shr _EBX, 4                ; $_EBX$ = remainder / 16
175    and edx, 15               ; $edx$ = remainder % 16    and _EDX, 15               ; $_EDX$ = remainder % 16
176    punpckldq mm0, mm0    punpckldq mm0, mm0
177    
178  %%loop64_start_pf:  %%loop64_start_pf:
179    push edi    push DST
180    mov  ecx, esi              ; width64    mov  _ECX, WIDTH           ; width64
181    test esi, esi    test WIDTH, WIDTH
182    jz %%loop16_start_pf    jz %%loop16_start_pf
183    
184  %%loop64_pf:  %%loop64_pf:
185    
186  %if OPT == 0                ; plain mmx    _MOVQ OPT, [DST     ], mm0      ; write to y_out
187    movq [edi     ], mm0          ; write to y_out    _MOVQ OPT, [DST +  8], mm0
188    movq [edi +  8], mm0    _MOVQ OPT, [DST + 16], mm0
189    movq [edi + 16], mm0    _MOVQ OPT, [DST + 24], mm0
190    movq [edi + 24], mm0    _MOVQ OPT, [DST + 32], mm0
191    movq [edi + 32], mm0    _MOVQ OPT, [DST + 40], mm0
192    movq [edi + 40], mm0    _MOVQ OPT, [DST + 48], mm0
193    movq [edi + 48], mm0    _MOVQ OPT, [DST + 56], mm0
   movq [edi + 56], mm0  
 %else  
   movntq [edi     ], mm0        ; write to y_out  
   movntq [edi +  8], mm0  
   movntq [edi + 16], mm0  
   movntq [edi + 24], mm0  
   movntq [edi + 32], mm0  
   movntq [edi + 40], mm0  
   movntq [edi + 48], mm0  
   movntq [edi + 56], mm0  
 %endif  
194    
195    add edi, 64    add DST, 64
196    loop %%loop64_pf    loop %%loop64_pf
197    
198  %%loop16_start_pf:  %%loop16_start_pf:
199    mov  ecx, ebx              ; width16    mov  _ECX, _EBX            ; width16
200    test ebx, ebx    test _EBX, _EBX
201    jz %%loop1_start_pf    jz %%loop1_start_pf
202    
203  %%loop16_pf:  %%loop16_pf:
204  %if OPT == 0                ; plain mmx    _MOVQ OPT, [DST    ], mm0
205    movq [edi    ], mm0    _MOVQ OPT, [DST + 8], mm0
   movq [edi + 8], mm0  
 %else  
   movntq [edi    ], mm0  
   movntq [edi + 8], mm0  
 %endif  
206    
207    add edi, 16    add DST, 16
208    loop %%loop16_pf    loop %%loop16_pf
209    
210  %%loop1_start_pf:  %%loop1_start_pf:
211    mov ecx, edx    mov _ECX, _EDX
212    rep stosb    rep stosb
213    
214    pop edi    pop DST
215    add edi, DST_STRIDE  
216    dec ebp  %ifdef ARCH_IS_X86_64
217      mov ecx, DST_STRIDE
218      add DST, _ECX
219    %else
220      add DST, DST_STRIDE
221    %endif
222    
223      dec HEIGHT
224    jg near %%loop64_start_pf    jg near %%loop64_start_pf
225    
226    %undef DST
227    %undef DST_STRIDE
228    %undef WIDTH
229    %undef HEIGHT
230    %undef OPT
231  %endmacro  %endmacro
232    
233  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
# Line 259  Line 243 
243  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
244  %macro  MAKE_YV12_TO_YV12       2  %macro  MAKE_YV12_TO_YV12       2
245  %define NAME            %1  %define NAME            %1
246  %define OPT             %2  %define XMM_OPT         %2
247  ALIGN 16  ALIGN SECTION_ALIGN
248  cglobal NAME  cglobal NAME
249  NAME:  NAME:
 %define pushsize        16  
 %define localsize       12  
250    
251  %define vflip           esp + localsize + pushsize + 52    push _EBX     ;       _ESP + localsize + 3*PTR_SIZE
 %define height          esp + localsize + pushsize + 48  
 %define width           esp + localsize + pushsize + 44  
 %define uv_src_stride   esp + localsize + pushsize + 40  
 %define y_src_stride    esp + localsize + pushsize + 36  
 %define v_src           esp + localsize + pushsize + 32  
 %define u_src           esp + localsize + pushsize + 28  
 %define y_src           esp + localsize + pushsize + 24  
 %define uv_dst_stride   esp + localsize + pushsize + 20  
 %define y_dst_stride    esp + localsize + pushsize + 16  
 %define v_dst           esp + localsize + pushsize + 12  
 %define u_dst           esp + localsize + pushsize + 8  
 %define y_dst           esp + localsize + pushsize + 4  
 %define _ip             esp + localsize + pushsize + 0  
   
   push ebx      ;       esp + localsize + 16  
   push esi      ;       esp + localsize + 8  
   push edi      ;       esp + localsize + 4  
   push ebp      ;       esp + localsize + 0  
252    
253  %define width2                  esp + localsize - 4  %define localsize       2*4
 %define height2                 esp + localsize - 8  
254    
255    sub esp, localsize  %ifdef ARCH_IS_X86_64
256    
257    mov eax, [width]  %ifndef WINDOWS
258    mov ebx, [height]  %define pushsize        2*PTR_SIZE
259    %define shadow          0
260    %else
261    %define pushsize        4*PTR_SIZE
262    %define shadow          32 + 2*PTR_SIZE
263    %endif
264    
265    %define prm_vflip               dword [_ESP + localsize + pushsize + shadow + 7*PTR_SIZE]
266    %define prm_height              dword [_ESP + localsize + pushsize + shadow + 6*PTR_SIZE]
267    %define prm_width               dword [_ESP + localsize + pushsize + shadow + 5*PTR_SIZE]
268    %define prm_uv_src_stride       dword [_ESP + localsize + pushsize + shadow + 4*PTR_SIZE]
269    %define prm_y_src_stride        dword [_ESP + localsize + pushsize + shadow + 3*PTR_SIZE]
270    %define prm_v_src                     [_ESP + localsize + pushsize + shadow + 2*PTR_SIZE]
271    %define prm_u_src                     [_ESP + localsize + pushsize + shadow + 1*PTR_SIZE]
272    
273    %ifdef WINDOWS
274      push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
275      push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
276      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
277    
278      sub _ESP, localsize
279    
280    %define prm_y_src               _ESI
281    %define prm_uv_dst_stride       TMP0d
282    %define prm_y_dst_stride        prm4d
283    %define prm_v_dst               prm3
284    %define prm_u_dst               TMP1
285    %define prm_y_dst               _EDI
286    
287      mov _EDI, prm1
288      mov TMP1, prm2
289    
290      mov _ESI, [_ESP + localsize + pushsize + shadow + 0*PTR_SIZE]
291      mov TMP0d, dword [_ESP + localsize + pushsize + shadow - 1*PTR_SIZE]
292    
293    %else
294      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
295    
296      sub _ESP, localsize
297    
298    %define prm_y_src               _ESI
299    %define prm_uv_dst_stride       prm5d
300    %define prm_y_dst_stride        TMP1d
301    %define prm_v_dst               prm6
302    %define prm_u_dst               TMP0
303    %define prm_y_dst               _EDI
304    
305      mov TMP0, prm2
306      mov _ESI, prm6
307    
308      mov prm6, prm3
309      mov TMP1d, prm4d
310    %endif
311    
312    %define _ip             _ESP + localsize + pushsize + 0
313    
314    %else
315    
316    %define pushsize        4*PTR_SIZE
317    
318    %define prm_vflip               [_ESP + localsize + pushsize + 13*PTR_SIZE]
319    %define prm_height              [_ESP + localsize + pushsize + 12*PTR_SIZE]
320    %define prm_width               [_ESP + localsize + pushsize + 11*PTR_SIZE]
321    %define prm_uv_src_stride       [_ESP + localsize + pushsize + 10*PTR_SIZE]
322    %define prm_y_src_stride        [_ESP + localsize + pushsize + 9*PTR_SIZE]
323    %define prm_v_src               [_ESP + localsize + pushsize + 8*PTR_SIZE]
324    %define prm_u_src               [_ESP + localsize + pushsize + 7*PTR_SIZE]
325    
326    %define prm_y_src               _ESI
327    %define prm_uv_dst_stride       [_ESP + localsize + pushsize + 5*PTR_SIZE]
328    %define prm_y_dst_stride        [_ESP + localsize + pushsize + 4*PTR_SIZE]
329    %define prm_v_dst               [_ESP + localsize + pushsize + 3*PTR_SIZE]
330    %define prm_u_dst               [_ESP + localsize + pushsize + 2*PTR_SIZE]
331    %define prm_y_dst               _EDI
332    
333    %define _ip             _ESP + localsize + pushsize + 0
334    
335      push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
336      push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
337      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
338    
339      sub _ESP, localsize
340    
341      mov _ESI, [_ESP + localsize + pushsize + 6*PTR_SIZE]
342      mov _EDI, [_ESP + localsize + pushsize + 1*PTR_SIZE]
343    
344    %endif
345    
346    %define width2                  dword [_ESP + localsize - 1*4]
347    %define height2                 dword [_ESP + localsize - 2*4]
348    
349      mov eax, prm_width
350      mov ebx, prm_height
351    shr eax, 1                    ; calculate widht/2, heigh/2    shr eax, 1                    ; calculate widht/2, heigh/2
352    shr ebx, 1    shr ebx, 1
353    mov [width2], eax    mov width2, eax
354    mov [height2], ebx    mov height2, ebx
355    
356    mov eax, [vflip]    mov eax, prm_vflip
357    test eax, eax    test eax, eax
358    jz near .go    jz near .go
359    
360          ; flipping support          ; flipping support
361    mov eax, [height]    mov eax, prm_height
362    mov esi, [y_src]    mov ecx, prm_y_src_stride
   mov ecx, [y_src_stride]  
363    sub eax, 1    sub eax, 1
364    imul eax, ecx    imul eax, ecx
365    add esi, eax                  ; y_src += (height-1) * y_src_stride    add _ESI, _EAX                ; y_src += (height-1) * y_src_stride
366    neg ecx    neg ecx
367    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  
368    
369    mov eax, [height2]    mov eax, height2
370    mov esi, [u_src]    mov _EDX, prm_u_src
371    mov edi, [v_src]    mov _EBP, prm_v_src
372    mov ecx, [uv_src_stride]    mov ecx, prm_uv_src_stride
373    test esi, esi    test _EDX, _EDX
374    jz .go    jz .go
375    test edi, edi    test _EBP, _EBP
376    jz .go    jz .go
377    sub eax, 1                    ; eax = height2 - 1    sub eax, 1                     ; _EAX = height2 - 1
378    imul eax, ecx    imul eax, ecx
379    add esi, eax                  ; u_src += (height2-1) * uv_src_stride    add _EDX, _EAX                 ; u_src += (height2-1) * uv_src_stride
380    add edi, eax                  ; v_src += (height2-1) * uv_src_stride    add _EBP, _EAX                 ; v_src += (height2-1) * uv_src_stride
381    neg ecx    neg ecx
382    mov [u_src], esi    mov prm_u_src, _EDX
383    mov [v_src], edi    mov prm_v_src, _EBP
384    mov [uv_src_stride], ecx      ; uv_src_stride = -uv_src_stride    mov prm_uv_src_stride, ecx     ; uv_src_stride = -uv_src_stride
385    
386  .go:  .go:
387      mov eax, prm_width
388      mov ebp, prm_height
389      PLANE_COPY _EDI, prm_y_dst_stride,  _ESI, prm_y_src_stride,  _EAX,  _EBP, XMM_OPT
390    
391    PLANE_COPY [y_dst], [y_dst_stride],  [y_src], [y_src_stride],  [width],  [height], OPT    mov _EAX, prm_u_src
392      or  _EAX, prm_v_src
   mov eax, [u_src]  
   or  eax, [v_src]  
393    jz near .UVFill_0x80    jz near .UVFill_0x80
394    PLANE_COPY [u_dst], [uv_dst_stride], [u_src], [uv_src_stride], [width2], [height2], OPT  
395    PLANE_COPY [v_dst], [uv_dst_stride], [v_src], [uv_src_stride], [width2], [height2], OPT    mov eax, width2
396      mov ebp, height2
397      mov _ESI, prm_u_src
398      mov _EDI, prm_u_dst
399      PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
400    
401      mov eax, width2
402      mov ebp, height2
403      mov _ESI, prm_v_src
404      mov _EDI, prm_v_dst
405      PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
406    
407  .Done_UVPlane:  .Done_UVPlane:
408    add esp, localsize    add _ESP, localsize
409    pop ebp  
410    pop edi    pop _EBP
411    pop esi  %ifndef ARCH_IS_X86_64
412    pop ebx    pop _EDI
413      pop _ESI
414    %else
415    %ifdef WINDOWS
416      pop _EDI
417      pop _ESI
418    %endif
419    %endif
420      pop _EBX
421    
422    ret    ret
423    
424  .UVFill_0x80:  .UVFill_0x80:
425    PLANE_FILL [u_dst], [uv_dst_stride], [width2], [height2], OPT  
426    PLANE_FILL [v_dst], [uv_dst_stride], [width2], [height2], OPT    mov esi, width2
427      mov ebp, height2
428      mov _EDI, prm_u_dst
429      PLANE_FILL _EDI, prm_uv_dst_stride, _ESI, _EBP, XMM_OPT
430    
431      mov esi, width2
432      mov ebp, height2
433      mov _EDI, prm_v_dst
434      PLANE_FILL _EDI, prm_uv_dst_stride, _ESI, _EBP, XMM_OPT
435    
436    jmp near .Done_UVPlane    jmp near .Done_UVPlane
437  .endfunc  
438    ENDFUNC
439    
440    %undef NAME
441    %undef XMM_OPT
442  %endmacro  %endmacro
443    
444  ;=============================================================================  ;=============================================================================
445  ; Code  ; Code
446  ;=============================================================================  ;=============================================================================
447    
448  SECTION .text  SECTION .rotext align=SECTION_ALIGN
449    
450  MAKE_YV12_TO_YV12       yv12_to_yv12_mmx, 0  MAKE_YV12_TO_YV12       yv12_to_yv12_mmx, 0
451    
452  MAKE_YV12_TO_YV12       yv12_to_yv12_xmm, 1  MAKE_YV12_TO_YV12       yv12_to_yv12_xmm, 1
453    
454    %ifidn __OUTPUT_FORMAT__,elf
455    section ".note.GNU-stack" noalloc noexec nowrite progbits
456    %endif
457    

Legend:
Removed from v.1742  
changed lines
  Added in v.1836

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