[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.18 - (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 : Isibaar 1.18 ; * $Id: mem_transfer_mmx.asm,v 1.17 2005/09/13 12:12:15 suxen_drol 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 : suxen_drol 1.17 cglobal transfer8x4_copy_mmx
78 : Isibaar 1.1
79 : edgomez 1.10 ;-----------------------------------------------------------------------------
80 : Isibaar 1.1 ;
81 :     ; void transfer_8to16copy_mmx(int16_t * const dst,
82 :     ; const uint8_t * const src,
83 :     ; uint32_t stride);
84 :     ;
85 : edgomez 1.10 ;-----------------------------------------------------------------------------
86 : Isibaar 1.1
87 : Isibaar 1.5 %macro COPY_8_TO_16 1
88 :     movq mm0, [eax]
89 :     movq mm1, [eax+edx]
90 :     movq mm2, mm0
91 :     movq mm3, mm1
92 :     punpcklbw mm0, mm7
93 :     movq [ecx+%1*32], mm0
94 :     punpcklbw mm1, mm7
95 :     movq [ecx+%1*32+16], mm1
96 :     punpckhbw mm2, mm7
97 :     punpckhbw mm3, mm7
98 : edgomez 1.10 lea eax, [eax+2*edx]
99 : Isibaar 1.5 movq [ecx+%1*32+8], mm2
100 :     movq [ecx+%1*32+24], mm3
101 :     %endmacro
102 :    
103 : edgomez 1.10 ALIGN 16
104 : Isibaar 1.5 transfer_8to16copy_mmx:
105 : Isibaar 1.1
106 : Isibaar 1.5 mov ecx, [esp+ 4] ; Dst
107 :     mov eax, [esp+ 8] ; Src
108 :     mov edx, [esp+12] ; Stride
109 : edgomez 1.10 pxor mm7, mm7
110 : Isibaar 1.5
111 :     COPY_8_TO_16 0
112 :     COPY_8_TO_16 1
113 :     COPY_8_TO_16 2
114 :     COPY_8_TO_16 3
115 :     ret
116 : edgomez 1.15 .endfunc
117 : Isibaar 1.1
118 : edgomez 1.10 ;-----------------------------------------------------------------------------
119 : Isibaar 1.1 ;
120 :     ; void transfer_16to8copy_mmx(uint8_t * const dst,
121 :     ; const int16_t * const src,
122 :     ; uint32_t stride);
123 :     ;
124 : edgomez 1.10 ;-----------------------------------------------------------------------------
125 : Isibaar 1.1
126 : Isibaar 1.5 %macro COPY_16_TO_8 1
127 :     movq mm0, [eax+%1*32]
128 :     movq mm1, [eax+%1*32+8]
129 :     packuswb mm0, mm1
130 :     movq [ecx], mm0
131 :     movq mm2, [eax+%1*32+16]
132 :     movq mm3, [eax+%1*32+24]
133 :     packuswb mm2, mm3
134 :     movq [ecx+edx], mm2
135 :     %endmacro
136 :    
137 : edgomez 1.10 ALIGN 16
138 : Isibaar 1.5 transfer_16to8copy_mmx:
139 : Isibaar 1.1
140 : Isibaar 1.5 mov ecx, [esp+ 4] ; Dst
141 :     mov eax, [esp+ 8] ; Src
142 :     mov edx, [esp+12] ; Stride
143 :    
144 :     COPY_16_TO_8 0
145 :     lea ecx,[ecx+2*edx]
146 :     COPY_16_TO_8 1
147 :     lea ecx,[ecx+2*edx]
148 :     COPY_16_TO_8 2
149 :     lea ecx,[ecx+2*edx]
150 :     COPY_16_TO_8 3
151 :     ret
152 : edgomez 1.15 .endfunc
153 : Isibaar 1.1
154 : edgomez 1.10 ;-----------------------------------------------------------------------------
155 : Isibaar 1.1 ;
156 :     ; void transfer_8to16sub_mmx(int16_t * const dct,
157 :     ; uint8_t * const cur,
158 :     ; const uint8_t * const ref,
159 :     ; const uint32_t stride);
160 :     ;
161 : edgomez 1.10 ;-----------------------------------------------------------------------------
162 : Isibaar 1.1
163 : edgomez 1.9 ; when second argument == 1, reference (ebx) block is to current (eax)
164 :     %macro COPY_8_TO_16_SUB 2
165 : Isibaar 1.5 movq mm0, [eax] ; cur
166 :     movq mm2, [eax+edx]
167 : edgomez 1.12 movq mm1, mm0
168 :     movq mm3, mm2
169 : Isibaar 1.5
170 : edgomez 1.12 punpcklbw mm0, mm7
171 :     punpcklbw mm2, mm7
172 : Isibaar 1.5 movq mm4, [ebx] ; ref
173 : edgomez 1.12 punpckhbw mm1, mm7
174 :     punpckhbw mm3, mm7
175 : Isibaar 1.5 movq mm5, [ebx+edx] ; ref
176 :    
177 : edgomez 1.12 movq mm6, mm4
178 : edgomez 1.9 %if %2 == 1
179 : Isibaar 1.5 movq [eax], mm4
180 :     movq [eax+edx], mm5
181 : edgomez 1.9 %endif
182 : edgomez 1.12 punpcklbw mm4, mm7
183 :     punpckhbw mm6, mm7
184 :     psubsw mm0, mm4
185 :     psubsw mm1, mm6
186 :     movq mm6, mm5
187 :     punpcklbw mm5, mm7
188 :     punpckhbw mm6, mm7
189 :     psubsw mm2, mm5
190 : edgomez 1.10 lea eax, [eax+2*edx]
191 : edgomez 1.12 psubsw mm3, mm6
192 : Isibaar 1.5 lea ebx,[ebx+2*edx]
193 :    
194 :     movq [ecx+%1*32+ 0], mm0 ; dst
195 : edgomez 1.9 movq [ecx+%1*32+ 8], mm1
196 :     movq [ecx+%1*32+16], mm2
197 :     movq [ecx+%1*32+24], mm3
198 : Isibaar 1.5 %endmacro
199 :    
200 : edgomez 1.10 ALIGN 16
201 : Isibaar 1.5 transfer_8to16sub_mmx:
202 :     mov ecx, [esp + 4] ; Dst
203 :     mov eax, [esp + 8] ; Cur
204 :     push ebx
205 :     mov ebx, [esp+4+12] ; Ref
206 :     mov edx, [esp+4+16] ; Stride
207 :     pxor mm7, mm7
208 : Isibaar 1.1
209 : edgomez 1.9 COPY_8_TO_16_SUB 0, 1
210 :     COPY_8_TO_16_SUB 1, 1
211 :     COPY_8_TO_16_SUB 2, 1
212 :     COPY_8_TO_16_SUB 3, 1
213 :    
214 :     pop ebx
215 :     ret
216 : edgomez 1.15 .endfunc
217 : edgomez 1.9
218 :    
219 : edgomez 1.10 ALIGN 16
220 : edgomez 1.9 transfer_8to16subro_mmx:
221 :     mov ecx, [esp + 4] ; Dst
222 :     mov eax, [esp + 8] ; Cur
223 :     push ebx
224 :     mov ebx, [esp+4+12] ; Ref
225 :     mov edx, [esp+4+16] ; Stride
226 :     pxor mm7, mm7
227 :    
228 :     COPY_8_TO_16_SUB 0, 0
229 :     COPY_8_TO_16_SUB 1, 0
230 :     COPY_8_TO_16_SUB 2, 0
231 :     COPY_8_TO_16_SUB 3, 0
232 : Isibaar 1.1
233 : Isibaar 1.5 pop ebx
234 :     ret
235 : edgomez 1.15 .endfunc
236 : edgomez 1.9
237 : Isibaar 1.1
238 : edgomez 1.10 ;-----------------------------------------------------------------------------
239 : Isibaar 1.5 ;
240 :     ; void transfer_8to16sub2_mmx(int16_t * const dct,
241 :     ; uint8_t * const cur,
242 :     ; const uint8_t * ref1,
243 :     ; const uint8_t * ref2,
244 :     ; const uint32_t stride)
245 :     ;
246 : edgomez 1.10 ;-----------------------------------------------------------------------------
247 : Isibaar 1.5
248 :     %macro COPY_8_TO_16_SUB2_MMX 1
249 :     movq mm0, [eax] ; cur
250 :     movq mm2, [eax+edx]
251 : edgomez 1.12
252 : edgomez 1.10 ; mm4 <- (ref1+ref2+1) / 2
253 : Isibaar 1.5 movq mm4, [ebx] ; ref1
254 :     movq mm1, [esi] ; ref2
255 : edgomez 1.12 movq mm6, mm4
256 :     movq mm3, mm1
257 :     punpcklbw mm4, mm7
258 :     punpcklbw mm1, mm7
259 :     punpckhbw mm6, mm7
260 :     punpckhbw mm3, mm7
261 :     paddusw mm4, mm1
262 :     paddusw mm6, mm3
263 :     paddusw mm4, [mmx_one]
264 :     paddusw mm6, [mmx_one]
265 :     psrlw mm4, 1
266 :     psrlw mm6, 1
267 :     packuswb mm4, mm6
268 :     movq [eax], mm4
269 :    
270 :     ; mm5 <- (ref1+ref2+1) / 2
271 : Isibaar 1.5 movq mm5, [ebx+edx] ; ref1
272 :     movq mm1, [esi+edx] ; ref2
273 : edgomez 1.12 movq mm6, mm5
274 :     movq mm3, mm1
275 :     punpcklbw mm5, mm7
276 :     punpcklbw mm1, mm7
277 :     punpckhbw mm6, mm7
278 :     punpckhbw mm3, mm7
279 :     paddusw mm5, mm1
280 :     paddusw mm6, mm3
281 :     paddusw mm5, [mmx_one]
282 :     paddusw mm6, [mmx_one]
283 : edgomez 1.10 lea esi, [esi+2*edx]
284 : edgomez 1.12 psrlw mm5, 1
285 :     psrlw mm6, 1
286 :     packuswb mm5, mm6
287 :     movq [eax+edx], mm5
288 :    
289 :     movq mm1, mm0
290 :     movq mm3, mm2
291 :     punpcklbw mm0, mm7
292 :     punpcklbw mm2, mm7
293 :     punpckhbw mm1, mm7
294 :     punpckhbw mm3, mm7
295 :    
296 :     movq mm6, mm4
297 :     punpcklbw mm4, mm7
298 :     punpckhbw mm6, mm7
299 :     psubsw mm0, mm4
300 :     psubsw mm1, mm6
301 :     movq mm6, mm5
302 :     punpcklbw mm5, mm7
303 :     punpckhbw mm6, mm7
304 :     psubsw mm2, mm5
305 : edgomez 1.10 lea eax, [eax+2*edx]
306 : edgomez 1.12 psubsw mm3, mm6
307 : edgomez 1.10 lea ebx, [ebx+2*edx]
308 : edgomez 1.12
309 : Isibaar 1.5 movq [ecx+%1*32+ 0], mm0 ; dst
310 : edgomez 1.10 movq [ecx+%1*32+ 8], mm1
311 :     movq [ecx+%1*32+16], mm2
312 :     movq [ecx+%1*32+24], mm3
313 : Isibaar 1.5 %endmacro
314 : Isibaar 1.1
315 : edgomez 1.10 ALIGN 16
316 : Isibaar 1.5 transfer_8to16sub2_mmx:
317 :     mov ecx, [esp + 4] ; Dst
318 :     mov eax, [esp + 8] ; Cur
319 :     push ebx
320 :     mov ebx, [esp+4+12] ; Ref1
321 :     push esi
322 :     mov esi, [esp+8+16] ; Ref2
323 :     mov edx, [esp+8+20] ; Stride
324 :     pxor mm7, mm7
325 :    
326 :     COPY_8_TO_16_SUB2_MMX 0
327 :     COPY_8_TO_16_SUB2_MMX 1
328 :     COPY_8_TO_16_SUB2_MMX 2
329 :     COPY_8_TO_16_SUB2_MMX 3
330 :    
331 :     pop esi
332 :     pop ebx
333 :     ret
334 : edgomez 1.15 .endfunc
335 : Isibaar 1.1
336 : edgomez 1.10 ;-----------------------------------------------------------------------------
337 : edgomez 1.2 ;
338 :     ; void transfer_8to16sub2_xmm(int16_t * const dct,
339 : Isibaar 1.5 ; uint8_t * const cur,
340 :     ; const uint8_t * ref1,
341 :     ; const uint8_t * ref2,
342 :     ; const uint32_t stride)
343 : edgomez 1.2 ;
344 : edgomez 1.10 ;-----------------------------------------------------------------------------
345 : edgomez 1.2
346 : Isibaar 1.5 %macro COPY_8_TO_16_SUB2_SSE 1
347 :     movq mm0, [eax] ; cur
348 :     movq mm2, [eax+edx]
349 : edgomez 1.12 movq mm1, mm0
350 :     movq mm3, mm2
351 : Isibaar 1.5
352 : edgomez 1.12 punpcklbw mm0, mm7
353 :     punpcklbw mm2, mm7
354 : edgomez 1.10 movq mm4, [ebx] ; ref1
355 : Isibaar 1.5 pavgb mm4, [esi] ; ref2
356 : edgomez 1.12 movq [eax], mm4
357 :     punpckhbw mm1, mm7
358 :     punpckhbw mm3, mm7
359 : edgomez 1.10 movq mm5, [ebx+edx] ; ref
360 : Isibaar 1.5 pavgb mm5, [esi+edx] ; ref2
361 : edgomez 1.12 movq [eax+edx], mm5
362 : Isibaar 1.5
363 : edgomez 1.12 movq mm6, mm4
364 :     punpcklbw mm4, mm7
365 :     punpckhbw mm6, mm7
366 :     psubsw mm0, mm4
367 :     psubsw mm1, mm6
368 : edgomez 1.10 lea esi, [esi+2*edx]
369 : edgomez 1.12 movq mm6, mm5
370 :     punpcklbw mm5, mm7
371 :     punpckhbw mm6, mm7
372 :     psubsw mm2, mm5
373 : edgomez 1.10 lea eax, [eax+2*edx]
374 : edgomez 1.12 psubsw mm3, mm6
375 : edgomez 1.10 lea ebx, [ebx+2*edx]
376 : edgomez 1.12
377 : Isibaar 1.5 movq [ecx+%1*32+ 0], mm0 ; dst
378 : edgomez 1.10 movq [ecx+%1*32+ 8], mm1
379 :     movq [ecx+%1*32+16], mm2
380 :     movq [ecx+%1*32+24], mm3
381 : Isibaar 1.5 %endmacro
382 :    
383 : edgomez 1.10 ALIGN 16
384 : Isibaar 1.5 transfer_8to16sub2_xmm:
385 :     mov ecx, [esp + 4] ; Dst
386 :     mov eax, [esp + 8] ; Cur
387 :     push ebx
388 :     mov ebx, [esp+4+12] ; Ref1
389 :     push esi
390 :     mov esi, [esp+8+16] ; Ref2
391 :     mov edx, [esp+8+20] ; Stride
392 :     pxor mm7, mm7
393 :    
394 :     COPY_8_TO_16_SUB2_SSE 0
395 :     COPY_8_TO_16_SUB2_SSE 1
396 :     COPY_8_TO_16_SUB2_SSE 2
397 :     COPY_8_TO_16_SUB2_SSE 3
398 :    
399 :     pop esi
400 :     pop ebx
401 :     ret
402 : edgomez 1.15 .endfunc
403 : Isibaar 1.1
404 : syskin 1.16
405 :     ;-----------------------------------------------------------------------------
406 :     ;
407 :     ; void transfer_8to16sub2ro_xmm(int16_t * const dct,
408 :     ; const uint8_t * const cur,
409 :     ; const uint8_t * ref1,
410 :     ; const uint8_t * ref2,
411 :     ; const uint32_t stride)
412 :     ;
413 :     ;-----------------------------------------------------------------------------
414 :    
415 :     %macro COPY_8_TO_16_SUB2RO_SSE 1
416 :     movq mm0, [eax] ; cur
417 :     movq mm2, [eax+edx]
418 :     movq mm1, mm0
419 :     movq mm3, mm2
420 :    
421 :     punpcklbw mm0, mm7
422 :     punpcklbw mm2, mm7
423 :     movq mm4, [ebx] ; ref1
424 :     pavgb mm4, [esi] ; ref2
425 :     punpckhbw mm1, mm7
426 :     punpckhbw mm3, mm7
427 :     movq mm5, [ebx+edx] ; ref
428 :     pavgb mm5, [esi+edx] ; ref2
429 :    
430 :     movq mm6, mm4
431 :     punpcklbw mm4, mm7
432 :     punpckhbw mm6, mm7
433 :     psubsw mm0, mm4
434 :     psubsw mm1, mm6
435 :     lea esi, [esi+2*edx]
436 :     movq mm6, mm5
437 :     punpcklbw mm5, mm7
438 :     punpckhbw mm6, mm7
439 :     psubsw mm2, mm5
440 :     lea eax, [eax+2*edx]
441 :     psubsw mm3, mm6
442 :     lea ebx, [ebx+2*edx]
443 :    
444 :     movq [ecx+%1*32+ 0], mm0 ; dst
445 :     movq [ecx+%1*32+ 8], mm1
446 :     movq [ecx+%1*32+16], mm2
447 :     movq [ecx+%1*32+24], mm3
448 :     %endmacro
449 :    
450 :     ALIGN 16
451 :     transfer_8to16sub2ro_xmm:
452 :     pxor mm7, mm7
453 :     mov ecx, [esp + 4] ; Dst
454 :     mov eax, [esp + 8] ; Cur
455 :     push ebx
456 :     mov ebx, [esp+4+12] ; Ref1
457 :     push esi
458 :     mov esi, [esp+8+16] ; Ref2
459 :     mov edx, [esp+8+20] ; Stride
460 :    
461 :     COPY_8_TO_16_SUB2RO_SSE 0
462 :     COPY_8_TO_16_SUB2RO_SSE 1
463 :     COPY_8_TO_16_SUB2RO_SSE 2
464 :     COPY_8_TO_16_SUB2RO_SSE 3
465 :    
466 :     pop esi
467 :     pop ebx
468 :     ret
469 :     .endfunc
470 :    
471 :    
472 : edgomez 1.10 ;-----------------------------------------------------------------------------
473 : Isibaar 1.1 ;
474 :     ; void transfer_16to8add_mmx(uint8_t * const dst,
475 :     ; const int16_t * const src,
476 :     ; uint32_t stride);
477 :     ;
478 : edgomez 1.10 ;-----------------------------------------------------------------------------
479 : Isibaar 1.1
480 : Isibaar 1.5 %macro COPY_16_TO_8_ADD 1
481 : edgomez 1.12 movq mm0, [ecx]
482 :     movq mm2, [ecx+edx]
483 :     movq mm1, mm0
484 :     movq mm3, mm2
485 :     punpcklbw mm0, mm7
486 :     punpcklbw mm2, mm7
487 :     punpckhbw mm1, mm7
488 :     punpckhbw mm3, mm7
489 :     paddsw mm0, [eax+%1*32+ 0]
490 :     paddsw mm1, [eax+%1*32+ 8]
491 :     paddsw mm2, [eax+%1*32+16]
492 :     paddsw mm3, [eax+%1*32+24]
493 :     packuswb mm0, mm1
494 :     movq [ecx], mm0
495 :     packuswb mm2, mm3
496 :     movq [ecx+edx], mm2
497 : Isibaar 1.5 %endmacro
498 : Isibaar 1.1
499 :    
500 : edgomez 1.10 ALIGN 16
501 : Isibaar 1.5 transfer_16to8add_mmx:
502 :     mov ecx, [esp+ 4] ; Dst
503 :     mov eax, [esp+ 8] ; Src
504 :     mov edx, [esp+12] ; Stride
505 : edgomez 1.12 pxor mm7, mm7
506 : Isibaar 1.5
507 :     COPY_16_TO_8_ADD 0
508 :     lea ecx,[ecx+2*edx]
509 :     COPY_16_TO_8_ADD 1
510 :     lea ecx,[ecx+2*edx]
511 :     COPY_16_TO_8_ADD 2
512 :     lea ecx,[ecx+2*edx]
513 :     COPY_16_TO_8_ADD 3
514 :     ret
515 : edgomez 1.15 .endfunc
516 : Isibaar 1.1
517 : edgomez 1.10 ;-----------------------------------------------------------------------------
518 : Isibaar 1.1 ;
519 :     ; void transfer8x8_copy_mmx(uint8_t * const dst,
520 :     ; const uint8_t * const src,
521 :     ; const uint32_t stride);
522 :     ;
523 :     ;
524 : edgomez 1.10 ;-----------------------------------------------------------------------------
525 : Isibaar 1.1
526 : edgomez 1.12 %macro COPY_8_TO_8 0
527 :     movq mm0, [eax]
528 :     movq mm1, [eax+edx]
529 :     movq [ecx], mm0
530 :     lea eax, [eax+2*edx]
531 :     movq [ecx+edx], mm1
532 :     %endmacro
533 :    
534 : edgomez 1.10 ALIGN 16
535 : Isibaar 1.5 transfer8x8_copy_mmx:
536 : edgomez 1.12 mov ecx, [esp+ 4] ; Dst
537 : edgomez 1.11 mov eax, [esp+ 8] ; Src
538 : Isibaar 1.5 mov edx, [esp+12] ; Stride
539 : edgomez 1.12
540 :     COPY_8_TO_8
541 :     lea ecx,[ecx+2*edx]
542 :     COPY_8_TO_8
543 :     lea ecx,[ecx+2*edx]
544 :     COPY_8_TO_8
545 :     lea ecx,[ecx+2*edx]
546 :     COPY_8_TO_8
547 :     ret
548 : edgomez 1.15 .endfunc
549 :    
550 : suxen_drol 1.17 ;-----------------------------------------------------------------------------
551 :     ;
552 :     ; void transfer8x4_copy_mmx(uint8_t * const dst,
553 :     ; const uint8_t * const src,
554 :     ; const uint32_t stride);
555 :     ;
556 :     ;
557 :     ;-----------------------------------------------------------------------------
558 :    
559 :     ALIGN 16
560 :     transfer8x4_copy_mmx:
561 :     mov ecx, [esp+ 4] ; Dst
562 :     mov eax, [esp+ 8] ; Src
563 :     mov edx, [esp+12] ; Stride
564 :    
565 :     COPY_8_TO_8
566 :     lea ecx,[ecx+2*edx]
567 :     COPY_8_TO_8
568 :     ret
569 :     .endfunc
570 :    
571 : Isibaar 1.18
572 :     %ifidn __OUTPUT_FORMAT__,elf
573 :     section ".note.GNU-stack" noalloc noexec nowrite progbits
574 :     %endif
575 :    

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