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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1583 - (view) (download)

1 : edgomez 1382 ;/****************************************************************************
2 : Isibaar 3 ; *
3 : edgomez 1382 ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - 8<->16 bit transfer functions -
5 : Isibaar 3 ; *
6 : edgomez 1382 ; * Copyright (C) 2001 Peter Ross <pross@xvid.org>
7 :     ; * 2001 Michael Militzer <isibaar@xvid.org>
8 :     ; * 2002 Pascal Massimino <skal@planet-d.net>
9 : Isibaar 3 ; *
10 : edgomez 1382 ; * 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 : Isibaar 3 ; *
15 : edgomez 1382 ; * 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 : Isibaar 3 ; *
20 : edgomez 1382 ; * 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 3 ; *
24 : syskin 1583 ; * $Id: mem_transfer_mmx.asm,v 1.16 2004-12-19 13:16:50 syskin Exp $
25 : Isibaar 3 ; *
26 : edgomez 1382 ; ***************************************************************************/
27 : Isibaar 3
28 : edgomez 1382 BITS 32
29 : Isibaar 3
30 : edgomez 1382 %macro cglobal 1
31 : Isibaar 3 %ifdef PREFIX
32 : edgomez 1535 %ifdef MARK_FUNCS
33 : edgomez 1540 global _%1:function %1.endfunc-%1
34 :     %define %1 _%1:function %1.endfunc-%1
35 : edgomez 1535 %else
36 :     global _%1
37 :     %define %1 _%1
38 :     %endif
39 : Isibaar 3 %else
40 : edgomez 1535 %ifdef MARK_FUNCS
41 : edgomez 1540 global %1:function %1.endfunc-%1
42 : edgomez 1535 %else
43 :     global %1
44 :     %endif
45 : Isibaar 3 %endif
46 :     %endmacro
47 :    
48 : edgomez 1382 ;=============================================================================
49 :     ; Read only data
50 :     ;=============================================================================
51 : Isibaar 3
52 : edgomez 1382 %ifdef FORMAT_COFF
53 : edgomez 1519 SECTION .rodata
54 : edgomez 1382 %else
55 : edgomez 1519 SECTION .rodata align=16
56 : edgomez 1382 %endif
57 : Isibaar 3
58 : edgomez 1382 ALIGN 16
59 :     mmx_one:
60 :     dw 1, 1, 1, 1
61 :    
62 :     ;=============================================================================
63 :     ; Code
64 :     ;=============================================================================
65 :    
66 :     SECTION .text
67 :    
68 : Isibaar 226 cglobal transfer_8to16copy_mmx
69 :     cglobal transfer_16to8copy_mmx
70 :     cglobal transfer_8to16sub_mmx
71 : edgomez 851 cglobal transfer_8to16subro_mmx
72 : Isibaar 226 cglobal transfer_8to16sub2_mmx
73 :     cglobal transfer_8to16sub2_xmm
74 : syskin 1583 cglobal transfer_8to16sub2ro_xmm
75 : Isibaar 226 cglobal transfer_16to8add_mmx
76 :     cglobal transfer8x8_copy_mmx
77 : Isibaar 3
78 : edgomez 1382 ;-----------------------------------------------------------------------------
79 : Isibaar 3 ;
80 :     ; void transfer_8to16copy_mmx(int16_t * const dst,
81 :     ; const uint8_t * const src,
82 :     ; uint32_t stride);
83 :     ;
84 : edgomez 1382 ;-----------------------------------------------------------------------------
85 : Isibaar 3
86 : Isibaar 226 %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 1382 lea eax, [eax+2*edx]
98 : Isibaar 226 movq [ecx+%1*32+8], mm2
99 :     movq [ecx+%1*32+24], mm3
100 :     %endmacro
101 :    
102 : edgomez 1382 ALIGN 16
103 : Isibaar 226 transfer_8to16copy_mmx:
104 : Isibaar 3
105 : Isibaar 226 mov ecx, [esp+ 4] ; Dst
106 :     mov eax, [esp+ 8] ; Src
107 :     mov edx, [esp+12] ; Stride
108 : edgomez 1382 pxor mm7, mm7
109 : Isibaar 3
110 : Isibaar 226 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 1540 .endfunc
116 : Isibaar 3
117 : edgomez 1382 ;-----------------------------------------------------------------------------
118 : Isibaar 3 ;
119 :     ; void transfer_16to8copy_mmx(uint8_t * const dst,
120 :     ; const int16_t * const src,
121 :     ; uint32_t stride);
122 :     ;
123 : edgomez 1382 ;-----------------------------------------------------------------------------
124 : Isibaar 3
125 : Isibaar 226 %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 1382 ALIGN 16
137 : Isibaar 226 transfer_16to8copy_mmx:
138 : Isibaar 3
139 : Isibaar 226 mov ecx, [esp+ 4] ; Dst
140 :     mov eax, [esp+ 8] ; Src
141 :     mov edx, [esp+12] ; Stride
142 : Isibaar 3
143 : Isibaar 226 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 1540 .endfunc
152 : Isibaar 3
153 : edgomez 1382 ;-----------------------------------------------------------------------------
154 : Isibaar 3 ;
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 1382 ;-----------------------------------------------------------------------------
161 : Isibaar 3
162 : edgomez 851 ; when second argument == 1, reference (ebx) block is to current (eax)
163 :     %macro COPY_8_TO_16_SUB 2
164 : Isibaar 226 movq mm0, [eax] ; cur
165 :     movq mm2, [eax+edx]
166 : edgomez 1425 movq mm1, mm0
167 :     movq mm3, mm2
168 : Isibaar 3
169 : edgomez 1425 punpcklbw mm0, mm7
170 :     punpcklbw mm2, mm7
171 : Isibaar 226 movq mm4, [ebx] ; ref
172 : edgomez 1425 punpckhbw mm1, mm7
173 :     punpckhbw mm3, mm7
174 : Isibaar 226 movq mm5, [ebx+edx] ; ref
175 : Isibaar 3
176 : edgomez 1425 movq mm6, mm4
177 : edgomez 851 %if %2 == 1
178 : Isibaar 226 movq [eax], mm4
179 :     movq [eax+edx], mm5
180 : edgomez 851 %endif
181 : edgomez 1425 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 1382 lea eax, [eax+2*edx]
190 : edgomez 1425 psubsw mm3, mm6
191 : Isibaar 226 lea ebx,[ebx+2*edx]
192 : Isibaar 3
193 : Isibaar 226 movq [ecx+%1*32+ 0], mm0 ; dst
194 : edgomez 851 movq [ecx+%1*32+ 8], mm1
195 :     movq [ecx+%1*32+16], mm2
196 :     movq [ecx+%1*32+24], mm3
197 : Isibaar 226 %endmacro
198 : Isibaar 3
199 : edgomez 1382 ALIGN 16
200 : Isibaar 226 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 3
208 : edgomez 851 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 : Isibaar 3
213 : Isibaar 226 pop ebx
214 :     ret
215 : edgomez 1540 .endfunc
216 : Isibaar 3
217 : edgomez 851
218 : edgomez 1382 ALIGN 16
219 : edgomez 851 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 :    
232 :     pop ebx
233 :     ret
234 : edgomez 1540 .endfunc
235 : edgomez 851
236 :    
237 : edgomez 1382 ;-----------------------------------------------------------------------------
238 : Isibaar 226 ;
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 1382 ;-----------------------------------------------------------------------------
246 : Isibaar 3
247 : Isibaar 226 %macro COPY_8_TO_16_SUB2_MMX 1
248 :     movq mm0, [eax] ; cur
249 :     movq mm2, [eax+edx]
250 : edgomez 1425
251 : edgomez 1382 ; mm4 <- (ref1+ref2+1) / 2
252 : Isibaar 226 movq mm4, [ebx] ; ref1
253 :     movq mm1, [esi] ; ref2
254 : edgomez 1425 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 226 movq mm5, [ebx+edx] ; ref1
271 :     movq mm1, [esi+edx] ; ref2
272 : edgomez 1425 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 1382 lea esi, [esi+2*edx]
283 : edgomez 1425 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 1382 lea eax, [eax+2*edx]
305 : edgomez 1425 psubsw mm3, mm6
306 : edgomez 1382 lea ebx, [ebx+2*edx]
307 : edgomez 1425
308 : Isibaar 226 movq [ecx+%1*32+ 0], mm0 ; dst
309 : edgomez 1382 movq [ecx+%1*32+ 8], mm1
310 :     movq [ecx+%1*32+16], mm2
311 :     movq [ecx+%1*32+24], mm3
312 : Isibaar 226 %endmacro
313 : Isibaar 3
314 : edgomez 1382 ALIGN 16
315 : Isibaar 226 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 : Isibaar 3
325 : Isibaar 226 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 : Isibaar 3
330 : Isibaar 226 pop esi
331 :     pop ebx
332 :     ret
333 : edgomez 1540 .endfunc
334 : Isibaar 3
335 : edgomez 1382 ;-----------------------------------------------------------------------------
336 : edgomez 215 ;
337 :     ; void transfer_8to16sub2_xmm(int16_t * const dct,
338 : Isibaar 226 ; uint8_t * const cur,
339 :     ; const uint8_t * ref1,
340 :     ; const uint8_t * ref2,
341 :     ; const uint32_t stride)
342 : edgomez 215 ;
343 : edgomez 1382 ;-----------------------------------------------------------------------------
344 : Isibaar 3
345 : Isibaar 226 %macro COPY_8_TO_16_SUB2_SSE 1
346 :     movq mm0, [eax] ; cur
347 :     movq mm2, [eax+edx]
348 : edgomez 1425 movq mm1, mm0
349 :     movq mm3, mm2
350 : edgomez 215
351 : edgomez 1425 punpcklbw mm0, mm7
352 :     punpcklbw mm2, mm7
353 : edgomez 1382 movq mm4, [ebx] ; ref1
354 : Isibaar 226 pavgb mm4, [esi] ; ref2
355 : edgomez 1425 movq [eax], mm4
356 :     punpckhbw mm1, mm7
357 :     punpckhbw mm3, mm7
358 : edgomez 1382 movq mm5, [ebx+edx] ; ref
359 : Isibaar 226 pavgb mm5, [esi+edx] ; ref2
360 : edgomez 1425 movq [eax+edx], mm5
361 : edgomez 215
362 : edgomez 1425 movq mm6, mm4
363 :     punpcklbw mm4, mm7
364 :     punpckhbw mm6, mm7
365 :     psubsw mm0, mm4
366 :     psubsw mm1, mm6
367 : edgomez 1382 lea esi, [esi+2*edx]
368 : edgomez 1425 movq mm6, mm5
369 :     punpcklbw mm5, mm7
370 :     punpckhbw mm6, mm7
371 :     psubsw mm2, mm5
372 : edgomez 1382 lea eax, [eax+2*edx]
373 : edgomez 1425 psubsw mm3, mm6
374 : edgomez 1382 lea ebx, [ebx+2*edx]
375 : edgomez 1425
376 : Isibaar 226 movq [ecx+%1*32+ 0], mm0 ; dst
377 : edgomez 1382 movq [ecx+%1*32+ 8], mm1
378 :     movq [ecx+%1*32+16], mm2
379 :     movq [ecx+%1*32+24], mm3
380 : Isibaar 226 %endmacro
381 : edgomez 215
382 : edgomez 1382 ALIGN 16
383 : Isibaar 226 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 : edgomez 215
393 : Isibaar 226 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 : edgomez 215
398 : Isibaar 226 pop esi
399 :     pop ebx
400 :     ret
401 : edgomez 1540 .endfunc
402 : edgomez 215
403 : syskin 1583
404 : edgomez 1382 ;-----------------------------------------------------------------------------
405 : Isibaar 3 ;
406 : syskin 1583 ; 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 :     ;-----------------------------------------------------------------------------
472 :     ;
473 : Isibaar 3 ; void transfer_16to8add_mmx(uint8_t * const dst,
474 :     ; const int16_t * const src,
475 :     ; uint32_t stride);
476 :     ;
477 : edgomez 1382 ;-----------------------------------------------------------------------------
478 : Isibaar 3
479 : Isibaar 226 %macro COPY_16_TO_8_ADD 1
480 : edgomez 1425 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 226 %endmacro
497 : Isibaar 3
498 :    
499 : edgomez 1382 ALIGN 16
500 : Isibaar 226 transfer_16to8add_mmx:
501 :     mov ecx, [esp+ 4] ; Dst
502 :     mov eax, [esp+ 8] ; Src
503 :     mov edx, [esp+12] ; Stride
504 : edgomez 1425 pxor mm7, mm7
505 : Isibaar 3
506 : Isibaar 226 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 1540 .endfunc
515 : Isibaar 3
516 : edgomez 1382 ;-----------------------------------------------------------------------------
517 : Isibaar 3 ;
518 :     ; void transfer8x8_copy_mmx(uint8_t * const dst,
519 :     ; const uint8_t * const src,
520 :     ; const uint32_t stride);
521 :     ;
522 :     ;
523 : edgomez 1382 ;-----------------------------------------------------------------------------
524 : Isibaar 3
525 : edgomez 1425 %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 1382 ALIGN 16
534 : Isibaar 226 transfer8x8_copy_mmx:
535 : edgomez 1425 mov ecx, [esp+ 4] ; Dst
536 : Isibaar 226 mov eax, [esp+ 8] ; Src
537 :     mov edx, [esp+12] ; Stride
538 : Isibaar 3
539 : edgomez 1425 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 1540 .endfunc
548 :    

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