[cvs] / xvidcore / src / utils / x86_asm / mem_transfer_mmx.asm Repository:
ViewVC logotype

Annotation of /xvidcore/src/utils/x86_asm/mem_transfer_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (view) (download)

1 : edgomez 1.10 ;/****************************************************************************
2 : Isibaar 1.1 ; *
3 : edgomez 1.10 ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - 8<->16 bit transfer functions -
5 : Isibaar 1.1 ; *
6 : edgomez 1.10 ; * Copyright (C) 2001 Peter Ross <pross@xvid.org>
7 :     ; * 2001 Michael Militzer <isibaar@xvid.org>
8 :     ; * 2002 Pascal Massimino <skal@planet-d.net>
9 : edgomez 1.9 ; *
10 : edgomez 1.10 ; * This program is free software ; you can redistribute it and/or modify
11 :     ; * it under the terms of the GNU General Public License as published by
12 :     ; * the Free Software Foundation ; either version 2 of the License, or
13 :     ; * (at your option) any later version.
14 : edgomez 1.9 ; *
15 : edgomez 1.10 ; * This program is distributed in the hope that it will be useful,
16 :     ; * but WITHOUT ANY WARRANTY ; without even the implied warranty of
17 :     ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 :     ; * GNU General Public License for more details.
19 : edgomez 1.9 ; *
20 : edgomez 1.10 ; * You should have received a copy of the GNU General Public License
21 :     ; * along with this program ; if not, write to the Free Software
22 :     ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 : Isibaar 1.1 ; *
24 : syskin 1.16 ; * $Id: mem_transfer_mmx.asm,v 1.15 2004/08/29 10:02:38 edgomez Exp $
25 : Isibaar 1.1 ; *
26 : edgomez 1.10 ; ***************************************************************************/
27 : Isibaar 1.1
28 : edgomez 1.10 BITS 32
29 : Isibaar 1.1
30 : edgomez 1.10 %macro cglobal 1
31 : Isibaar 1.1 %ifdef PREFIX
32 : edgomez 1.14 %ifdef MARK_FUNCS
33 : edgomez 1.15 global _%1:function %1.endfunc-%1
34 :     %define %1 _%1:function %1.endfunc-%1
35 : edgomez 1.14 %else
36 :     global _%1
37 :     %define %1 _%1
38 :     %endif
39 : Isibaar 1.1 %else
40 : edgomez 1.14 %ifdef MARK_FUNCS
41 : edgomez 1.15 global %1:function %1.endfunc-%1
42 : edgomez 1.14 %else
43 :     global %1
44 :     %endif
45 : Isibaar 1.1 %endif
46 :     %endmacro
47 :    
48 : edgomez 1.10 ;=============================================================================
49 :     ; Read only data
50 :     ;=============================================================================
51 :    
52 :     %ifdef FORMAT_COFF
53 : edgomez 1.13 SECTION .rodata
54 : edgomez 1.10 %else
55 : edgomez 1.13 SECTION .rodata align=16
56 : edgomez 1.10 %endif
57 :    
58 :     ALIGN 16
59 :     mmx_one:
60 :     dw 1, 1, 1, 1
61 :    
62 :     ;=============================================================================
63 :     ; Code
64 :     ;=============================================================================
65 : Isibaar 1.1
66 : edgomez 1.10 SECTION .text
67 : Isibaar 1.1
68 : Isibaar 1.5 cglobal transfer_8to16copy_mmx
69 :     cglobal transfer_16to8copy_mmx
70 :     cglobal transfer_8to16sub_mmx
71 : edgomez 1.9 cglobal transfer_8to16subro_mmx
72 : Isibaar 1.5 cglobal transfer_8to16sub2_mmx
73 :     cglobal transfer_8to16sub2_xmm
74 : syskin 1.16 cglobal transfer_8to16sub2ro_xmm
75 : Isibaar 1.5 cglobal transfer_16to8add_mmx
76 :     cglobal transfer8x8_copy_mmx
77 : Isibaar 1.1
78 : edgomez 1.10 ;-----------------------------------------------------------------------------
79 : Isibaar 1.1 ;
80 :     ; void transfer_8to16copy_mmx(int16_t * const dst,
81 :     ; const uint8_t * const src,
82 :     ; uint32_t stride);
83 :     ;
84 : edgomez 1.10 ;-----------------------------------------------------------------------------
85 : Isibaar 1.1
86 : Isibaar 1.5 %macro COPY_8_TO_16 1
87 :     movq mm0, [eax]
88 :     movq mm1, [eax+edx]
89 :     movq mm2, mm0
90 :     movq mm3, mm1
91 :     punpcklbw mm0, mm7
92 :     movq [ecx+%1*32], mm0
93 :     punpcklbw mm1, mm7
94 :     movq [ecx+%1*32+16], mm1
95 :     punpckhbw mm2, mm7
96 :     punpckhbw mm3, mm7
97 : edgomez 1.10 lea eax, [eax+2*edx]
98 : Isibaar 1.5 movq [ecx+%1*32+8], mm2
99 :     movq [ecx+%1*32+24], mm3
100 :     %endmacro
101 :    
102 : edgomez 1.10 ALIGN 16
103 : Isibaar 1.5 transfer_8to16copy_mmx:
104 : Isibaar 1.1
105 : Isibaar 1.5 mov ecx, [esp+ 4] ; Dst
106 :     mov eax, [esp+ 8] ; Src
107 :     mov edx, [esp+12] ; Stride
108 : edgomez 1.10 pxor mm7, mm7
109 : Isibaar 1.5
110 :     COPY_8_TO_16 0
111 :     COPY_8_TO_16 1
112 :     COPY_8_TO_16 2
113 :     COPY_8_TO_16 3
114 :     ret
115 : edgomez 1.15 .endfunc
116 : Isibaar 1.1
117 : edgomez 1.10 ;-----------------------------------------------------------------------------
118 : Isibaar 1.1 ;
119 :     ; void transfer_16to8copy_mmx(uint8_t * const dst,
120 :     ; const int16_t * const src,
121 :     ; uint32_t stride);
122 :     ;
123 : edgomez 1.10 ;-----------------------------------------------------------------------------
124 : Isibaar 1.1
125 : Isibaar 1.5 %macro COPY_16_TO_8 1
126 :     movq mm0, [eax+%1*32]
127 :     movq mm1, [eax+%1*32+8]
128 :     packuswb mm0, mm1
129 :     movq [ecx], mm0
130 :     movq mm2, [eax+%1*32+16]
131 :     movq mm3, [eax+%1*32+24]
132 :     packuswb mm2, mm3
133 :     movq [ecx+edx], mm2
134 :     %endmacro
135 :    
136 : edgomez 1.10 ALIGN 16
137 : Isibaar 1.5 transfer_16to8copy_mmx:
138 : Isibaar 1.1
139 : Isibaar 1.5 mov ecx, [esp+ 4] ; Dst
140 :     mov eax, [esp+ 8] ; Src
141 :     mov edx, [esp+12] ; Stride
142 :    
143 :     COPY_16_TO_8 0
144 :     lea ecx,[ecx+2*edx]
145 :     COPY_16_TO_8 1
146 :     lea ecx,[ecx+2*edx]
147 :     COPY_16_TO_8 2
148 :     lea ecx,[ecx+2*edx]
149 :     COPY_16_TO_8 3
150 :     ret
151 : edgomez 1.15 .endfunc
152 : Isibaar 1.1
153 : edgomez 1.10 ;-----------------------------------------------------------------------------
154 : Isibaar 1.1 ;
155 :     ; void transfer_8to16sub_mmx(int16_t * const dct,
156 :     ; uint8_t * const cur,
157 :     ; const uint8_t * const ref,
158 :     ; const uint32_t stride);
159 :     ;
160 : edgomez 1.10 ;-----------------------------------------------------------------------------
161 : Isibaar 1.1
162 : edgomez 1.9 ; when second argument == 1, reference (ebx) block is to current (eax)
163 :     %macro COPY_8_TO_16_SUB 2
164 : Isibaar 1.5 movq mm0, [eax] ; cur
165 :     movq mm2, [eax+edx]
166 : edgomez 1.12 movq mm1, mm0
167 :     movq mm3, mm2
168 : Isibaar 1.5
169 : edgomez 1.12 punpcklbw mm0, mm7
170 :     punpcklbw mm2, mm7
171 : Isibaar 1.5 movq mm4, [ebx] ; ref
172 : edgomez 1.12 punpckhbw mm1, mm7
173 :     punpckhbw mm3, mm7
174 : Isibaar 1.5 movq mm5, [ebx+edx] ; ref
175 :    
176 : edgomez 1.12 movq mm6, mm4
177 : edgomez 1.9 %if %2 == 1
178 : Isibaar 1.5 movq [eax], mm4
179 :     movq [eax+edx], mm5
180 : edgomez 1.9 %endif
181 : edgomez 1.12 punpcklbw mm4, mm7
182 :     punpckhbw mm6, mm7
183 :     psubsw mm0, mm4
184 :     psubsw mm1, mm6
185 :     movq mm6, mm5
186 :     punpcklbw mm5, mm7
187 :     punpckhbw mm6, mm7
188 :     psubsw mm2, mm5
189 : edgomez 1.10 lea eax, [eax+2*edx]
190 : edgomez 1.12 psubsw mm3, mm6
191 : Isibaar 1.5 lea ebx,[ebx+2*edx]
192 :    
193 :     movq [ecx+%1*32+ 0], mm0 ; dst
194 : edgomez 1.9 movq [ecx+%1*32+ 8], mm1
195 :     movq [ecx+%1*32+16], mm2
196 :     movq [ecx+%1*32+24], mm3
197 : Isibaar 1.5 %endmacro
198 :    
199 : edgomez 1.10 ALIGN 16
200 : Isibaar 1.5 transfer_8to16sub_mmx:
201 :     mov ecx, [esp + 4] ; Dst
202 :     mov eax, [esp + 8] ; Cur
203 :     push ebx
204 :     mov ebx, [esp+4+12] ; Ref
205 :     mov edx, [esp+4+16] ; Stride
206 :     pxor mm7, mm7
207 : Isibaar 1.1
208 : edgomez 1.9 COPY_8_TO_16_SUB 0, 1
209 :     COPY_8_TO_16_SUB 1, 1
210 :     COPY_8_TO_16_SUB 2, 1
211 :     COPY_8_TO_16_SUB 3, 1
212 :    
213 :     pop ebx
214 :     ret
215 : edgomez 1.15 .endfunc
216 : edgomez 1.9
217 :    
218 : edgomez 1.10 ALIGN 16
219 : edgomez 1.9 transfer_8to16subro_mmx:
220 :     mov ecx, [esp + 4] ; Dst
221 :     mov eax, [esp + 8] ; Cur
222 :     push ebx
223 :     mov ebx, [esp+4+12] ; Ref
224 :     mov edx, [esp+4+16] ; Stride
225 :     pxor mm7, mm7
226 :    
227 :     COPY_8_TO_16_SUB 0, 0
228 :     COPY_8_TO_16_SUB 1, 0
229 :     COPY_8_TO_16_SUB 2, 0
230 :     COPY_8_TO_16_SUB 3, 0
231 : Isibaar 1.1
232 : Isibaar 1.5 pop ebx
233 :     ret
234 : edgomez 1.15 .endfunc
235 : edgomez 1.9
236 : Isibaar 1.1
237 : edgomez 1.10 ;-----------------------------------------------------------------------------
238 : Isibaar 1.5 ;
239 :     ; void transfer_8to16sub2_mmx(int16_t * const dct,
240 :     ; uint8_t * const cur,
241 :     ; const uint8_t * ref1,
242 :     ; const uint8_t * ref2,
243 :     ; const uint32_t stride)
244 :     ;
245 : edgomez 1.10 ;-----------------------------------------------------------------------------
246 : Isibaar 1.5
247 :     %macro COPY_8_TO_16_SUB2_MMX 1
248 :     movq mm0, [eax] ; cur
249 :     movq mm2, [eax+edx]
250 : edgomez 1.12
251 : edgomez 1.10 ; mm4 <- (ref1+ref2+1) / 2
252 : Isibaar 1.5 movq mm4, [ebx] ; ref1
253 :     movq mm1, [esi] ; ref2
254 : edgomez 1.12 movq mm6, mm4
255 :     movq mm3, mm1
256 :     punpcklbw mm4, mm7
257 :     punpcklbw mm1, mm7
258 :     punpckhbw mm6, mm7
259 :     punpckhbw mm3, mm7
260 :     paddusw mm4, mm1
261 :     paddusw mm6, mm3
262 :     paddusw mm4, [mmx_one]
263 :     paddusw mm6, [mmx_one]
264 :     psrlw mm4, 1
265 :     psrlw mm6, 1
266 :     packuswb mm4, mm6
267 :     movq [eax], mm4
268 :    
269 :     ; mm5 <- (ref1+ref2+1) / 2
270 : Isibaar 1.5 movq mm5, [ebx+edx] ; ref1
271 :     movq mm1, [esi+edx] ; ref2
272 : edgomez 1.12 movq mm6, mm5
273 :     movq mm3, mm1
274 :     punpcklbw mm5, mm7
275 :     punpcklbw mm1, mm7
276 :     punpckhbw mm6, mm7
277 :     punpckhbw mm3, mm7
278 :     paddusw mm5, mm1
279 :     paddusw mm6, mm3
280 :     paddusw mm5, [mmx_one]
281 :     paddusw mm6, [mmx_one]
282 : edgomez 1.10 lea esi, [esi+2*edx]
283 : edgomez 1.12 psrlw mm5, 1
284 :     psrlw mm6, 1
285 :     packuswb mm5, mm6
286 :     movq [eax+edx], mm5
287 :    
288 :     movq mm1, mm0
289 :     movq mm3, mm2
290 :     punpcklbw mm0, mm7
291 :     punpcklbw mm2, mm7
292 :     punpckhbw mm1, mm7
293 :     punpckhbw mm3, mm7
294 :    
295 :     movq mm6, mm4
296 :     punpcklbw mm4, mm7
297 :     punpckhbw mm6, mm7
298 :     psubsw mm0, mm4
299 :     psubsw mm1, mm6
300 :     movq mm6, mm5
301 :     punpcklbw mm5, mm7
302 :     punpckhbw mm6, mm7
303 :     psubsw mm2, mm5
304 : edgomez 1.10 lea eax, [eax+2*edx]
305 : edgomez 1.12 psubsw mm3, mm6
306 : edgomez 1.10 lea ebx, [ebx+2*edx]
307 : edgomez 1.12
308 : Isibaar 1.5 movq [ecx+%1*32+ 0], mm0 ; dst
309 : edgomez 1.10 movq [ecx+%1*32+ 8], mm1
310 :     movq [ecx+%1*32+16], mm2
311 :     movq [ecx+%1*32+24], mm3
312 : Isibaar 1.5 %endmacro
313 : Isibaar 1.1
314 : edgomez 1.10 ALIGN 16
315 : Isibaar 1.5 transfer_8to16sub2_mmx:
316 :     mov ecx, [esp + 4] ; Dst
317 :     mov eax, [esp + 8] ; Cur
318 :     push ebx
319 :     mov ebx, [esp+4+12] ; Ref1
320 :     push esi
321 :     mov esi, [esp+8+16] ; Ref2
322 :     mov edx, [esp+8+20] ; Stride
323 :     pxor mm7, mm7
324 :    
325 :     COPY_8_TO_16_SUB2_MMX 0
326 :     COPY_8_TO_16_SUB2_MMX 1
327 :     COPY_8_TO_16_SUB2_MMX 2
328 :     COPY_8_TO_16_SUB2_MMX 3
329 :    
330 :     pop esi
331 :     pop ebx
332 :     ret
333 : edgomez 1.15 .endfunc
334 : Isibaar 1.1
335 : edgomez 1.10 ;-----------------------------------------------------------------------------
336 : edgomez 1.2 ;
337 :     ; void transfer_8to16sub2_xmm(int16_t * const dct,
338 : Isibaar 1.5 ; uint8_t * const cur,
339 :     ; const uint8_t * ref1,
340 :     ; const uint8_t * ref2,
341 :     ; const uint32_t stride)
342 : edgomez 1.2 ;
343 : edgomez 1.10 ;-----------------------------------------------------------------------------
344 : edgomez 1.2
345 : Isibaar 1.5 %macro COPY_8_TO_16_SUB2_SSE 1
346 :     movq mm0, [eax] ; cur
347 :     movq mm2, [eax+edx]
348 : edgomez 1.12 movq mm1, mm0
349 :     movq mm3, mm2
350 : Isibaar 1.5
351 : edgomez 1.12 punpcklbw mm0, mm7
352 :     punpcklbw mm2, mm7
353 : edgomez 1.10 movq mm4, [ebx] ; ref1
354 : Isibaar 1.5 pavgb mm4, [esi] ; ref2
355 : edgomez 1.12 movq [eax], mm4
356 :     punpckhbw mm1, mm7
357 :     punpckhbw mm3, mm7
358 : edgomez 1.10 movq mm5, [ebx+edx] ; ref
359 : Isibaar 1.5 pavgb mm5, [esi+edx] ; ref2
360 : edgomez 1.12 movq [eax+edx], mm5
361 : Isibaar 1.5
362 : edgomez 1.12 movq mm6, mm4
363 :     punpcklbw mm4, mm7
364 :     punpckhbw mm6, mm7
365 :     psubsw mm0, mm4
366 :     psubsw mm1, mm6
367 : edgomez 1.10 lea esi, [esi+2*edx]
368 : edgomez 1.12 movq mm6, mm5
369 :     punpcklbw mm5, mm7
370 :     punpckhbw mm6, mm7
371 :     psubsw mm2, mm5
372 : edgomez 1.10 lea eax, [eax+2*edx]
373 : edgomez 1.12 psubsw mm3, mm6
374 : edgomez 1.10 lea ebx, [ebx+2*edx]
375 : edgomez 1.12
376 : Isibaar 1.5 movq [ecx+%1*32+ 0], mm0 ; dst
377 : edgomez 1.10 movq [ecx+%1*32+ 8], mm1
378 :     movq [ecx+%1*32+16], mm2
379 :     movq [ecx+%1*32+24], mm3
380 : Isibaar 1.5 %endmacro
381 :    
382 : edgomez 1.10 ALIGN 16
383 : Isibaar 1.5 transfer_8to16sub2_xmm:
384 :     mov ecx, [esp + 4] ; Dst
385 :     mov eax, [esp + 8] ; Cur
386 :     push ebx
387 :     mov ebx, [esp+4+12] ; Ref1
388 :     push esi
389 :     mov esi, [esp+8+16] ; Ref2
390 :     mov edx, [esp+8+20] ; Stride
391 :     pxor mm7, mm7
392 :    
393 :     COPY_8_TO_16_SUB2_SSE 0
394 :     COPY_8_TO_16_SUB2_SSE 1
395 :     COPY_8_TO_16_SUB2_SSE 2
396 :     COPY_8_TO_16_SUB2_SSE 3
397 :    
398 :     pop esi
399 :     pop ebx
400 :     ret
401 : edgomez 1.15 .endfunc
402 : Isibaar 1.1
403 : syskin 1.16
404 :     ;-----------------------------------------------------------------------------
405 :     ;
406 :     ; void transfer_8to16sub2ro_xmm(int16_t * const dct,
407 :     ; const uint8_t * const cur,
408 :     ; const uint8_t * ref1,
409 :     ; const uint8_t * ref2,
410 :     ; const uint32_t stride)
411 :     ;
412 :     ;-----------------------------------------------------------------------------
413 :    
414 :     %macro COPY_8_TO_16_SUB2RO_SSE 1
415 :     movq mm0, [eax] ; cur
416 :     movq mm2, [eax+edx]
417 :     movq mm1, mm0
418 :     movq mm3, mm2
419 :    
420 :     punpcklbw mm0, mm7
421 :     punpcklbw mm2, mm7
422 :     movq mm4, [ebx] ; ref1
423 :     pavgb mm4, [esi] ; ref2
424 :     punpckhbw mm1, mm7
425 :     punpckhbw mm3, mm7
426 :     movq mm5, [ebx+edx] ; ref
427 :     pavgb mm5, [esi+edx] ; ref2
428 :    
429 :     movq mm6, mm4
430 :     punpcklbw mm4, mm7
431 :     punpckhbw mm6, mm7
432 :     psubsw mm0, mm4
433 :     psubsw mm1, mm6
434 :     lea esi, [esi+2*edx]
435 :     movq mm6, mm5
436 :     punpcklbw mm5, mm7
437 :     punpckhbw mm6, mm7
438 :     psubsw mm2, mm5
439 :     lea eax, [eax+2*edx]
440 :     psubsw mm3, mm6
441 :     lea ebx, [ebx+2*edx]
442 :    
443 :     movq [ecx+%1*32+ 0], mm0 ; dst
444 :     movq [ecx+%1*32+ 8], mm1
445 :     movq [ecx+%1*32+16], mm2
446 :     movq [ecx+%1*32+24], mm3
447 :     %endmacro
448 :    
449 :     ALIGN 16
450 :     transfer_8to16sub2ro_xmm:
451 :     pxor mm7, mm7
452 :     mov ecx, [esp + 4] ; Dst
453 :     mov eax, [esp + 8] ; Cur
454 :     push ebx
455 :     mov ebx, [esp+4+12] ; Ref1
456 :     push esi
457 :     mov esi, [esp+8+16] ; Ref2
458 :     mov edx, [esp+8+20] ; Stride
459 :    
460 :     COPY_8_TO_16_SUB2RO_SSE 0
461 :     COPY_8_TO_16_SUB2RO_SSE 1
462 :     COPY_8_TO_16_SUB2RO_SSE 2
463 :     COPY_8_TO_16_SUB2RO_SSE 3
464 :    
465 :     pop esi
466 :     pop ebx
467 :     ret
468 :     .endfunc
469 :    
470 :    
471 : edgomez 1.10 ;-----------------------------------------------------------------------------
472 : Isibaar 1.1 ;
473 :     ; void transfer_16to8add_mmx(uint8_t * const dst,
474 :     ; const int16_t * const src,
475 :     ; uint32_t stride);
476 :     ;
477 : edgomez 1.10 ;-----------------------------------------------------------------------------
478 : Isibaar 1.1
479 : Isibaar 1.5 %macro COPY_16_TO_8_ADD 1
480 : edgomez 1.12 movq mm0, [ecx]
481 :     movq mm2, [ecx+edx]
482 :     movq mm1, mm0
483 :     movq mm3, mm2
484 :     punpcklbw mm0, mm7
485 :     punpcklbw mm2, mm7
486 :     punpckhbw mm1, mm7
487 :     punpckhbw mm3, mm7
488 :     paddsw mm0, [eax+%1*32+ 0]
489 :     paddsw mm1, [eax+%1*32+ 8]
490 :     paddsw mm2, [eax+%1*32+16]
491 :     paddsw mm3, [eax+%1*32+24]
492 :     packuswb mm0, mm1
493 :     movq [ecx], mm0
494 :     packuswb mm2, mm3
495 :     movq [ecx+edx], mm2
496 : Isibaar 1.5 %endmacro
497 : Isibaar 1.1
498 :    
499 : edgomez 1.10 ALIGN 16
500 : Isibaar 1.5 transfer_16to8add_mmx:
501 :     mov ecx, [esp+ 4] ; Dst
502 :     mov eax, [esp+ 8] ; Src
503 :     mov edx, [esp+12] ; Stride
504 : edgomez 1.12 pxor mm7, mm7
505 : Isibaar 1.5
506 :     COPY_16_TO_8_ADD 0
507 :     lea ecx,[ecx+2*edx]
508 :     COPY_16_TO_8_ADD 1
509 :     lea ecx,[ecx+2*edx]
510 :     COPY_16_TO_8_ADD 2
511 :     lea ecx,[ecx+2*edx]
512 :     COPY_16_TO_8_ADD 3
513 :     ret
514 : edgomez 1.15 .endfunc
515 : Isibaar 1.1
516 : edgomez 1.10 ;-----------------------------------------------------------------------------
517 : Isibaar 1.1 ;
518 :     ; void transfer8x8_copy_mmx(uint8_t * const dst,
519 :     ; const uint8_t * const src,
520 :     ; const uint32_t stride);
521 :     ;
522 :     ;
523 : edgomez 1.10 ;-----------------------------------------------------------------------------
524 : Isibaar 1.1
525 : edgomez 1.12 %macro COPY_8_TO_8 0
526 :     movq mm0, [eax]
527 :     movq mm1, [eax+edx]
528 :     movq [ecx], mm0
529 :     lea eax, [eax+2*edx]
530 :     movq [ecx+edx], mm1
531 :     %endmacro
532 :    
533 : edgomez 1.10 ALIGN 16
534 : Isibaar 1.5 transfer8x8_copy_mmx:
535 : edgomez 1.12 mov ecx, [esp+ 4] ; Dst
536 : edgomez 1.11 mov eax, [esp+ 8] ; Src
537 : Isibaar 1.5 mov edx, [esp+12] ; Stride
538 : edgomez 1.12
539 :     COPY_8_TO_8
540 :     lea ecx,[ecx+2*edx]
541 :     COPY_8_TO_8
542 :     lea ecx,[ecx+2*edx]
543 :     COPY_8_TO_8
544 :     lea ecx,[ecx+2*edx]
545 :     COPY_8_TO_8
546 :     ret
547 : edgomez 1.15 .endfunc
548 :    

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