[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 851, Sat Feb 15 15:22:19 2003 UTC revision 1845, Thu Dec 4 18:30:36 2008 UTC
# Line 1  Line 1 
1  ;------------------------------------------------------------------------------  ;/****************************************************************************
2  ;  ; *
3  ;  This file is part of XviD, a free MPEG-4 video encoder/decoder  ; *  XVID MPEG-4 VIDEO CODEC
4  ;  ; *  - MMX and XMM YV12->YV12 conversion -
5  ;  This program is free software; you can redistribute it and/or modify it  ; *
6  ;  under the terms of the GNU General Public License as published by  ; *  Copyright(C) 2001-2008 Michael Militzer <michael@xvid.org>
7  ;  the Free Software Foundation; either version 2 of the License, or  ; *
8  ;  (at your option) any later version.  ; *  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
10  ;  This program is distributed in the hope that it will be useful, but  ; *  the Free Software Foundation; either version 2 of the License, or
11  ;  WITHOUT ANY WARRANTY; without even the implied warranty of  ; *  (at your option) any later version.
12  ;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  ; *
13  ;  GNU General Public License for more details.  ; *  This program is distributed in the hope that it will be useful,
14  ;  ; *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  ;  You should have received a copy of the GNU General Public License  ; *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  ;  along with this program; if not, write to the Free Software  ; *  GNU General Public License for more details.
17  ;  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *
18  ;  ; *  You should have received a copy of the GNU General Public License
19  ;------------------------------------------------------------------------------  ; *  along with this program; if not, write to the Free Software
20  ;------------------------------------------------------------------------------  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ;  ; *
22  ;  yuv_to_yuv.asm, MMX optimized color conversion  ; * $Id: colorspace_yuv_mmx.asm,v 1.14 2008-12-04 18:30:36 Isibaar Exp $
23  ;  ; *
24  ;  Copyright (C) 2001 - Michael Militzer <isibaar@xvid.org>  ; ***************************************************************************/
25  ;  
26  ;  For more information visit the XviD homepage: http://www.xvid.org  %include "nasm.inc"
27  ;  
28  ;------------------------------------------------------------------------------  ;=============================================================================
29  ;------------------------------------------------------------------------------  ; Helper macros
30  ;  ;=============================================================================
31  ;  Revision history:  
32  ;  %macro _MOVQ        3
33  ;  24.11.2001 initial version  (Isibaar)  %if %1 == 1
34  ;  23.07.2002 thread safe (edgomez)          movntq  %2, %3      ; xmm
 ;  
 ;  $Id: colorspace_yuv_mmx.asm,v 1.2 2003-02-15 15:22:18 edgomez Exp $  
 ;  
 ;------------------------------------------------------------------------------  
   
 BITS 32  
   
 %macro cglobal 1  
 %ifdef PREFIX  
         global _%1  
                 %define %1 _%1  
35          %else          %else
36                  global %1          movq    %2, %3      ; plain mmx
37          %endif          %endif
38  %endmacro  %endmacro
39    
 SECTION .text  
   
 ALIGN 64  
   
40  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
41  ; PLANE_COPY ( DST, DST_DIF, SRC, SRC_DIF, WIDTH, HEIGHT, OPT )  ; PLANE_COPY ( DST, DST_STRIDE, SRC, SRC_STRIDE, WIDTH, HEIGHT, OPT )
42  ; DST           dst buffer  ; DST           dst buffer
43  ; DST_DIF       dst stride difference (e.g. stride - width)  ; DST_STRIDE    dst stride
44  ; SRC           src destination buffer  ; SRC           src destination buffer
45  ; SRC_DIF       src stride difference (e.g. stride - width)  ; SRC_STRIDE    src stride
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
55  %define DST                     %1  %define DST                     %1
56  %define DST_DIF         %2  %define DST_STRIDE              %2
57  %define SRC                     %3  %define SRC                     %3
58  %define SRC_DIF         %4  %define SRC_STRIDE              %4
59  %define WIDTH           %5  %define WIDTH           %5
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
69          shr eax, 6                      ; $eax$ = width / 64  
70          and ebx, 63                     ; remainder = width % 64  %%loop64_start_pc:
71          mov edx, ebx    push DST
72          shr ebx, 4                      ; $ebx$ = reaminder / 16    push SRC
73          and edx, 15                     ; $edx$ = remainder % 16  
74      mov  _ECX, WIDTH          ; width64
75  %%loop64_start    test WIDTH, WIDTH
76          or eax, eax    jz %%loop16_start_pc
77          jz %%loop16_start  
78          mov ecx, eax            ; width64  %%loop64_pc:
 %%loop64:  
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 SRC, 64
102      add DST, 64
103      loop %%loop64_pc
104    
105    %%loop16_start_pc:
106      mov  _ECX, _EBX           ; width16
107      test _EBX, _EBX
108      jz %%loop1_start_pc
109    
110    %%loop16_pc:
111      movq mm1, [SRC]
112      movq mm2, [SRC + 8]
113    
114      _MOVQ OPT, [DST], mm1
115      _MOVQ OPT, [DST + 8], mm2
116    
117      add SRC, 16
118      add DST, 16
119      loop %%loop16_pc
120    
121          add esi, 64  %%loop1_start_pc:
122          add edi, 64    mov _ECX, _EDX
123          dec ecx    rep movsb
         jnz %%loop64  
   
   
 %%loop16_start  
         or ebx, ebx  
         jz %%loop1_start  
         mov ecx, ebx            ; width16  
 %%loop16:  
         movq mm1, [esi]  
         movq mm2, [esi + 8]  
 %if OPT == 0                    ; plain mmx  
         movq [edi], mm1  
         movq [edi + 8], mm2  
 %else  
         movntq [edi], mm1  
         movntq [edi + 8], mm2  
 %endif  
124    
125          add esi, 16    pop SRC
126          add edi, 16    pop DST
         dec ecx  
         jnz %%loop16  
127    
128    %ifdef ARCH_IS_X86_64
129      XVID_MOVSXD _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  %%loop1_start    dec HEIGHT
139          mov ecx, edx    jg near %%loop64_start_pc
         rep movsb  
140    
141          add esi, SRC_DIF  %undef DST
142          add edi, DST_DIF  %undef DST_STRIDE
143          dec ebp  %undef SRC
144          jnz near %%loop64_start  %undef SRC_STRIDE
145    %undef WIDTH
146    %undef HEIGHT
147    %undef OPT
148  %endmacro  %endmacro
149    
150    ;------------------------------------------------------------------------------
151    ; PLANE_FILL ( DST, DST_STRIDE, WIDTH, HEIGHT, OPT )
152    ; DST           dst buffer
153    ; DST_STRIDE    dst stride
154    ; WIDTH         width
155    ; HEIGHT        height
156    ; OPT           0=plain mmx, 1=xmm
157    ;
158    ; Trashes: DST, WIDTH, HEIGHT, _EBX, _ECX, _EDX, _EAX
159  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
160    
161    %macro  PLANE_FILL      5
162    %define DST             %1
163    %define DST_STRIDE      %2
164    %define WIDTH           %3
165    %define HEIGHT          %4
166    %define OPT             %5
167    
168      mov _EAX, 0x80808080
169      mov _EBX, WIDTH
170      shr WIDTH, 6               ; $_ESI$ = width / 64
171      and _EBX, 63               ; _EBX = remainder = width % 64
172      movd mm0, eax
173      mov _EDX, _EBX
174      shr _EBX, 4                ; $_EBX$ = remainder / 16
175      and _EDX, 15               ; $_EDX$ = remainder % 16
176      punpckldq mm0, mm0
177    
178    %%loop64_start_pf:
179      push DST
180      mov  _ECX, WIDTH           ; width64
181      test WIDTH, WIDTH
182      jz %%loop16_start_pf
183    
184    %%loop64_pf:
185    
186      _MOVQ OPT, [DST     ], mm0      ; write to y_out
187      _MOVQ OPT, [DST +  8], mm0
188      _MOVQ OPT, [DST + 16], mm0
189      _MOVQ OPT, [DST + 24], mm0
190      _MOVQ OPT, [DST + 32], mm0
191      _MOVQ OPT, [DST + 40], mm0
192      _MOVQ OPT, [DST + 48], mm0
193      _MOVQ OPT, [DST + 56], mm0
194    
195      add DST, 64
196      loop %%loop64_pf
197    
198    %%loop16_start_pf:
199      mov  _ECX, _EBX            ; width16
200      test _EBX, _EBX
201      jz %%loop1_start_pf
202    
203    %%loop16_pf:
204      _MOVQ OPT, [DST    ], mm0
205      _MOVQ OPT, [DST + 8], mm0
206    
207      add DST, 16
208      loop %%loop16_pf
209    
210    %%loop1_start_pf:
211      mov _ECX, _EDX
212      rep stosb
213    
214      pop DST
215    
216    %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
225    
226    %undef DST
227    %undef DST_STRIDE
228    %undef WIDTH
229    %undef HEIGHT
230    %undef OPT
231    %endmacro
232    
233  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
234  ; MAKE_YV12_TO_YV12( NAME, OPT )  ; MAKE_YV12_TO_YV12( NAME, OPT )
# Line 174  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:
250  %define pushsize        16  
251  %define localsize       24    push _EBX     ;       _ESP + localsize + 3*PTR_SIZE
252    
253  %define vflip                   esp + localsize + pushsize + 52  %define localsize       2*4
254  %define height                  esp + localsize + pushsize + 48  
255  %define width           esp + localsize + pushsize + 44  %ifdef ARCH_IS_X86_64
256  %define uv_src_stride   esp + localsize + pushsize + 40  
257  %define y_src_stride    esp + localsize + pushsize + 36  %ifndef WINDOWS
258  %define v_src                   esp     + localsize + pushsize + 32  %define pushsize        2*PTR_SIZE
259  %define u_src                   esp + localsize + pushsize + 28  %define shadow          0
260  %define y_src               esp + localsize + pushsize + 24  %else
261  %define uv_dst_stride   esp + localsize + pushsize + 20  %define pushsize        4*PTR_SIZE
262  %define y_dst_stride    esp + localsize + pushsize + 16  %define shadow          32 + 2*PTR_SIZE
263  %define v_dst                   esp     + localsize + pushsize + 12  %endif
264  %define u_dst                   esp + localsize + pushsize + 8  
265  %define y_dst               esp + localsize + pushsize + 4  %define prm_vflip               dword [_ESP + localsize + pushsize + shadow + 7*PTR_SIZE]
266  %define _ip                             esp + localsize + pushsize + 0  %define prm_height              dword [_ESP + localsize + pushsize + shadow + 6*PTR_SIZE]
267    %define prm_width               dword [_ESP + localsize + pushsize + shadow + 5*PTR_SIZE]
268          push ebx        ;       esp + localsize + 16  %define prm_uv_src_stride       dword [_ESP + localsize + pushsize + shadow + 4*PTR_SIZE]
269          push esi        ;       esp + localsize + 8  %define prm_y_src_stride        dword [_ESP + localsize + pushsize + shadow + 3*PTR_SIZE]
270          push edi        ;       esp + localsize + 4  %define prm_v_src                     [_ESP + localsize + pushsize + shadow + 2*PTR_SIZE]
271          push ebp        ;       esp + localsize + 0  %define prm_u_src                     [_ESP + localsize + pushsize + shadow + 1*PTR_SIZE]
272    
273  %define width2                  esp + localsize - 4  %ifdef WINDOWS
274  %define height2                 esp + localsize - 8    push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
275  %define y_src_dif               esp + localsize - 12    push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
276  %define y_dst_dif               esp + localsize - 16    push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
277  %define uv_src_dif              esp + localsize - 20  
278  %define uv_dst_dif              esp + localsize - 24    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          sub esp, localsize  %define pushsize        4*PTR_SIZE
317    
318          mov eax, [width]  %define prm_vflip               [_ESP + localsize + pushsize + 13*PTR_SIZE]
319          mov ebx, [height]  %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 ebp, [vflip]    mov eax, prm_vflip
357          or ebp, ebp    test eax, eax
358          jz near .dont_flip    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
363          mov edx, [y_src_stride]    sub eax, 1
364          push edx    imul eax, ecx
365          mul edx    add _ESI, _EAX                ; y_src += (height-1) * y_src_stride
366          pop edx    neg ecx
367          add esi, eax                            ; y_src += (height-1) * y_src_stride    mov prm_y_src_stride, ecx     ; y_src_stride = -y_src_stride
368          neg edx  
369          mov [y_src], esi    mov eax, height2
370          mov [y_src_stride], edx         ; y_src_stride = -y_src_stride    mov _EDX, prm_u_src
371      mov _EBP, prm_v_src
372          mov eax, [height2]    mov ecx, prm_uv_src_stride
373          mov esi, [u_src]    test _EDX, _EDX
374          mov edi, [v_src]    jz .go
375          mov edx, [uv_src_stride]    test _EBP, _EBP
376          sub eax, 1                                      ; ebp = height2 - 1    jz .go
377          push edx    sub eax, 1                     ; _EAX = height2 - 1
378          mul edx    imul eax, ecx
379          pop edx    add _EDX, _EAX                 ; u_src += (height2-1) * uv_src_stride
380          add esi, eax                            ; u_src += (height2-1) * uv_src_stride    add _EBP, _EAX                 ; v_src += (height2-1) * uv_src_stride
381          add edi, eax                            ; v_src += (height2-1) * uv_src_stride    neg ecx
382          neg edx    mov prm_u_src, _EDX
383          mov [u_src], esi    mov prm_v_src, _EBP
384          mov [v_src], edi    mov prm_uv_src_stride, ecx     ; uv_src_stride = -uv_src_stride
385          mov [uv_src_stride], edx        ; uv_src_stride = -uv_src_stride  
386    .go:
387  .dont_flip    mov eax, prm_width
388      mov ebp, prm_height
389          mov eax, [y_src_stride]    PLANE_COPY _EDI, prm_y_dst_stride,  _ESI, prm_y_src_stride,  _EAX,  _EBP, XMM_OPT
390          mov ebx, [y_dst_stride]  
391          mov ecx, [uv_src_stride]    mov _EAX, prm_u_src
392          mov edx, [uv_dst_stride]    or  _EAX, prm_v_src
393          sub eax, [width]    jz near .UVFill_0x80
394          sub ebx, [width]  
395          sub ecx, [width2]    mov eax, width2
396          sub edx, [width2]    mov ebp, height2
397          mov [y_src_dif], eax            ; y_src_dif = y_src_stride - width    mov _ESI, prm_u_src
398          mov [y_dst_dif], ebx            ; y_dst_dif = y_dst_stride - width    mov _EDI, prm_u_dst
399          mov [uv_src_dif], ecx           ; uv_src_dif = uv_src_stride - width2    PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
400          mov [uv_dst_dif], edx           ; uv_dst_dif = uv_dst_stride - width2  
401      mov eax, width2
402          PLANE_COPY      [y_dst], [y_dst_dif],  [y_src], [y_src_dif],  [width],  [height], OPT    mov ebp, height2
403          PLANE_COPY      [u_dst], [uv_dst_dif], [u_src], [uv_src_dif], [width2], [height2], OPT    mov _ESI, prm_v_src
404          PLANE_COPY      [v_dst], [uv_dst_dif], [v_src], [uv_src_dif], [width2], [height2], OPT    mov _EDI, prm_v_dst
405      PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
406          add esp, localsize  
407          pop ebp  .Done_UVPlane:
408          pop edi    add _ESP, localsize
409          pop esi  
410          pop ebx    pop _EBP
411    %ifndef ARCH_IS_X86_64
412      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:
425    
426      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
437    
438    ENDFUNC
439    
440    %undef NAME
441    %undef XMM_OPT
442  %endmacro  %endmacro
 ;------------------------------------------------------------------------------  
443    
444    ;=============================================================================
445    ; Code
446    ;=============================================================================
447    
448    TEXT
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.851  
changed lines
  Added in v.1845

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