[svn] / trunk / xvidcore / src / image / x86_64_asm / interpolate8x8_mmx.asm Repository:
ViewVC logotype

Annotation of /trunk/xvidcore/src/image/x86_64_asm/interpolate8x8_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1586 - (view) (download)

1 : edgomez 1586 ;/*****************************************************************************
2 :     ; *
3 :     ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - mmx 8x8 block-based halfpel interpolation -
5 :     ; *
6 :     ; * Copyright(C) 2001 Peter Ross <pross@xvid.org>
7 :     ; * 2002 Michael Militzer <isibaar@xvid.org>
8 :     ; * 2004 Andre Werthmann <wertmann@aei.mpg.de> (amd64 conversation)
9 :     ; *
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 :     ; *
15 :     ; * 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 :     ; *
20 :     ; * 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 :     ; *
24 :     ; ****************************************************************************/
25 :    
26 :     BITS 64
27 :    
28 :     %macro cglobal 1
29 :     %ifdef PREFIX
30 :     %ifdef MARK_FUNCS
31 :     global _%1:function %1.endfunc-%1
32 :     %define %1 _%1:function %1.endfunc-%1
33 :     %else
34 :     global _%1
35 :     %define %1 _%1
36 :     %endif
37 :     %else
38 :     %ifdef MARK_FUNCS
39 :     global %1:function %1.endfunc-%1
40 :     %else
41 :     global %1
42 :     %endif
43 :     %endif
44 :     %endmacro
45 :    
46 :     ;=============================================================================
47 :     ; Read only data
48 :     ;=============================================================================
49 :    
50 :     %ifdef FORMAT_COFF
51 :     SECTION .rodata
52 :     %else
53 :     SECTION .rodata align=16
54 :     %endif
55 :    
56 :     ;-----------------------------------------------------------------------------
57 :     ; (16 - r) rounding table
58 :     ;-----------------------------------------------------------------------------
59 :    
60 :     ALIGN 16
61 :     rounding_lowpass_mmx:
62 :     times 4 dw 16
63 :     times 4 dw 15
64 :    
65 :     ;-----------------------------------------------------------------------------
66 :     ; (1 - r) rounding table
67 :     ;-----------------------------------------------------------------------------
68 :    
69 :     rounding1_mmx:
70 :     times 4 dw 1
71 :     times 4 dw 0
72 :    
73 :     ;-----------------------------------------------------------------------------
74 :     ; (2 - r) rounding table
75 :     ;-----------------------------------------------------------------------------
76 :    
77 :     rounding2_mmx:
78 :     times 4 dw 2
79 :     times 4 dw 1
80 :    
81 :     mmx_one:
82 :     times 8 db 1
83 :    
84 :     mmx_two:
85 :     times 8 db 2
86 :    
87 :     mmx_three:
88 :     times 8 db 3
89 :    
90 :     mmx_five:
91 :     times 4 dw 5
92 :    
93 :     mmx_mask:
94 :     times 8 db 254
95 :    
96 :     mmx_mask2:
97 :     times 8 db 252
98 :    
99 :     ;=============================================================================
100 :     ; Code
101 :     ;=============================================================================
102 :    
103 :     SECTION .text align=16
104 :    
105 :     cglobal interpolate8x8_avg2_x86_64
106 :     cglobal interpolate8x8_avg4_x86_64
107 :     cglobal interpolate8x8_6tap_lowpass_h_x86_64
108 :     cglobal interpolate8x8_6tap_lowpass_v_x86_64
109 :    
110 :     %macro CALC_AVG 6
111 :     punpcklbw %3, %6
112 :     punpckhbw %4, %6
113 :    
114 :     paddusw %1, %3 ; mm01 += mm23
115 :     paddusw %2, %4
116 :     paddusw %1, %5 ; mm01 += rounding
117 :     paddusw %2, %5
118 :    
119 :     psrlw %1, 1 ; mm01 >>= 1
120 :     psrlw %2, 1
121 :     %endmacro
122 :    
123 :     ;-----------------------------------------------------------------------------
124 :     ;
125 :     ; void interpolate8x8_avg2_x86_64(uint8_t const *dst,
126 :     ; const uint8_t * const src1,
127 :     ; const uint8_t * const src2,
128 :     ; const uint32_t stride,
129 :     ; const uint32_t rounding,
130 :     ; const uint32_t height);
131 :     ;
132 :     ;-----------------------------------------------------------------------------
133 :    
134 :     %macro AVG2_MMX_RND0 0
135 :     movq mm0, [rax] ; src1 -> mm0
136 :     movq mm1, [rbx] ; src2 -> mm1
137 :    
138 :     movq mm4, [rax+rdx]
139 :     movq mm5, [rbx+rdx]
140 :    
141 :     movq mm2, mm0 ; src1 -> mm2
142 :     movq mm3, mm1 ; src2 -> mm3
143 :    
144 :     pand mm2, mm7 ; isolate the lsb
145 :     pand mm3, mm7 ; isolate the lsb
146 :    
147 :     por mm2, mm3 ; ODD(src1) OR ODD(src2) -> mm2
148 :    
149 :     movq mm3, mm4
150 :     movq mm6, mm5
151 :    
152 :     pand mm3, mm7
153 :     pand mm6, mm7
154 :    
155 :     por mm3, mm6
156 :    
157 :     pand mm0, [mmx_mask wrt rip]
158 :     pand mm1, [mmx_mask wrt rip]
159 :     pand mm4, [mmx_mask wrt rip]
160 :     pand mm5, [mmx_mask wrt rip]
161 :    
162 :     psrlq mm0, 1 ; src1 / 2
163 :     psrlq mm1, 1 ; src2 / 2
164 :    
165 :     psrlq mm4, 1
166 :     psrlq mm5, 1
167 :    
168 :     paddb mm0, mm1 ; src1/2 + src2/2 -> mm0
169 :     paddb mm0, mm2 ; correct rounding error
170 :    
171 :     paddb mm4, mm5
172 :     paddb mm4, mm3
173 :    
174 :     lea rax, [rax+2*rdx]
175 :     lea rbx, [rbx+2*rdx]
176 :    
177 :     movq [rcx], mm0 ; (src1 + src2 + 1) / 2 -> dst
178 :     movq [rcx+rdx], mm4
179 :     %endmacro
180 :    
181 :     %macro AVG2_MMX_RND1 0
182 :     movq mm0, [rax] ; src1 -> mm0
183 :     movq mm1, [rbx] ; src2 -> mm1
184 :    
185 :     movq mm4, [rax+rdx]
186 :     movq mm5, [rbx+rdx]
187 :    
188 :     movq mm2, mm0 ; src1 -> mm2
189 :     movq mm3, mm1 ; src2 -> mm3
190 :    
191 :     pand mm2, mm7 ; isolate the lsb
192 :     pand mm3, mm7 ; isolate the lsb
193 :    
194 :     pand mm2, mm3 ; ODD(src1) AND ODD(src2) -> mm2
195 :    
196 :     movq mm3, mm4
197 :     movq mm6, mm5
198 :    
199 :     pand mm3, mm7
200 :     pand mm6, mm7
201 :    
202 :     pand mm3, mm6
203 :    
204 :     pand mm0, [mmx_mask wrt rip]
205 :     pand mm1, [mmx_mask wrt rip]
206 :     pand mm4, [mmx_mask wrt rip]
207 :     pand mm5, [mmx_mask wrt rip]
208 :    
209 :     psrlq mm0, 1 ; src1 / 2
210 :     psrlq mm1, 1 ; src2 / 2
211 :    
212 :     psrlq mm4, 1
213 :     psrlq mm5, 1
214 :    
215 :     paddb mm0, mm1 ; src1/2 + src2/2 -> mm0
216 :     paddb mm0, mm2 ; correct rounding error
217 :    
218 :     paddb mm4, mm5
219 :     paddb mm4, mm3
220 :    
221 :     lea rax, [rax+2*rdx]
222 :     lea rbx, [rbx+2*rdx]
223 :    
224 :     movq [rcx], mm0 ; (src1 + src2 + 1) / 2 -> dst
225 :     movq [rcx+rdx], mm4
226 :     %endmacro
227 :    
228 :     ALIGN 16
229 :     interpolate8x8_avg2_x86_64:
230 :    
231 :     push rbx
232 :    
233 :     mov rax, r8 ; 5. par
234 :     test rax, rax
235 :    
236 :     jnz near .rounding1
237 :    
238 :     mov rax, r9 ; 6. par (height)
239 :     sub rax, 8
240 :     test rax, rax
241 :    
242 :     mov rbx, rdx ; src2
243 :     mov rdx, rcx ; stride
244 :     mov rax, rsi ; src1
245 :     mov rcx, rdi ; dst
246 :    
247 :     movq mm7, [mmx_one wrt rip]
248 :    
249 :     jz near .start0
250 :    
251 :     AVG2_MMX_RND0
252 :     lea rcx, [rcx+2*rdx]
253 :    
254 :     .start0
255 :    
256 :     AVG2_MMX_RND0
257 :     lea rcx, [rcx+2*rdx]
258 :     AVG2_MMX_RND0
259 :     lea rcx, [rcx+2*rdx]
260 :     AVG2_MMX_RND0
261 :     lea rcx, [rcx+2*rdx]
262 :     AVG2_MMX_RND0
263 :    
264 :     pop rbx
265 :     ret
266 :    
267 :     .rounding1
268 :     mov rax, r9 ; 6. par (height)
269 :     sub rax, 8
270 :     test rax, rax
271 :    
272 :     mov rbx, rdx ; src2
273 :     mov rdx, rcx ; stride
274 :     mov rax, rsi ; src1
275 :     mov rcx, rdi ; dst
276 :    
277 :     movq mm7, [mmx_one wrt rip]
278 :    
279 :     jz near .start1
280 :    
281 :     AVG2_MMX_RND1
282 :     lea rcx, [rcx+2*rdx]
283 :    
284 :     .start1
285 :    
286 :     AVG2_MMX_RND1
287 :     lea rcx, [rcx+2*rdx]
288 :     AVG2_MMX_RND1
289 :     lea rcx, [rcx+2*rdx]
290 :     AVG2_MMX_RND1
291 :     lea rcx, [rcx+2*rdx]
292 :     AVG2_MMX_RND1
293 :    
294 :     pop rbx
295 :     ret
296 :     .endfunc
297 :    
298 :    
299 :     ;-----------------------------------------------------------------------------
300 :     ;
301 :     ; void interpolate8x8_avg4_x86_64(uint8_t const *dst,
302 :     ; const uint8_t * const src1,
303 :     ; const uint8_t * const src2,
304 :     ; const uint8_t * const src3,
305 :     ; const uint8_t * const src4,
306 :     ; const uint32_t stride,
307 :     ; const uint32_t rounding);
308 :     ;
309 :     ;-----------------------------------------------------------------------------
310 :    
311 :     %macro AVG4_MMX_RND0 0
312 :     movq mm0, [rax] ; src1 -> mm0
313 :     movq mm1, [rbx] ; src2 -> mm1
314 :    
315 :     movq mm2, mm0
316 :     movq mm3, mm1
317 :    
318 :     pand mm2, [mmx_three wrt rip]
319 :     pand mm3, [mmx_three wrt rip]
320 :    
321 :     pand mm0, [mmx_mask2 wrt rip]
322 :     pand mm1, [mmx_mask2 wrt rip]
323 :    
324 :     psrlq mm0, 2
325 :     psrlq mm1, 2
326 :    
327 :     lea rax, [rax+rdx]
328 :     lea rbx, [rbx+rdx]
329 :    
330 :     paddb mm0, mm1
331 :     paddb mm2, mm3
332 :    
333 :     movq mm4, [rsi] ; src3 -> mm0
334 :     movq mm5, [rdi] ; src4 -> mm1
335 :    
336 :     movq mm1, mm4
337 :     movq mm3, mm5
338 :    
339 :     pand mm1, [mmx_three wrt rip]
340 :     pand mm3, [mmx_three wrt rip]
341 :    
342 :     pand mm4, [mmx_mask2 wrt rip]
343 :     pand mm5, [mmx_mask2 wrt rip]
344 :    
345 :     psrlq mm4, 2
346 :     psrlq mm5, 2
347 :    
348 :     paddb mm4, mm5
349 :     paddb mm0, mm4
350 :    
351 :     paddb mm1, mm3
352 :     paddb mm2, mm1
353 :    
354 :     paddb mm2, [mmx_two wrt rip]
355 :     pand mm2, [mmx_mask2 wrt rip]
356 :    
357 :     psrlq mm2, 2
358 :     paddb mm0, mm2
359 :    
360 :     lea rsi, [rsi+rdx]
361 :     lea rdi, [rdi+rdx]
362 :    
363 :     movq [rcx], mm0 ; (src1 + src2 + src3 + src4 + 2) / 4 -> dst
364 :     %endmacro
365 :    
366 :     %macro AVG4_MMX_RND1 0
367 :     movq mm0, [rax] ; src1 -> mm0
368 :     movq mm1, [rbx] ; src2 -> mm1
369 :    
370 :     movq mm2, mm0
371 :     movq mm3, mm1
372 :    
373 :     pand mm2, [mmx_three wrt rip]
374 :     pand mm3, [mmx_three wrt rip]
375 :    
376 :     pand mm0, [mmx_mask2 wrt rip]
377 :     pand mm1, [mmx_mask2 wrt rip]
378 :    
379 :     psrlq mm0, 2
380 :     psrlq mm1, 2
381 :    
382 :     lea rax,[rax+rdx]
383 :     lea rbx,[rbx+rdx]
384 :    
385 :     paddb mm0, mm1
386 :     paddb mm2, mm3
387 :    
388 :     movq mm4, [rsi] ; src3 -> mm0
389 :     movq mm5, [rdi] ; src4 -> mm1
390 :    
391 :     movq mm1, mm4
392 :     movq mm3, mm5
393 :    
394 :     pand mm1, [mmx_three wrt rip]
395 :     pand mm3, [mmx_three wrt rip]
396 :    
397 :     pand mm4, [mmx_mask2 wrt rip]
398 :     pand mm5, [mmx_mask2 wrt rip]
399 :    
400 :     psrlq mm4, 2
401 :     psrlq mm5, 2
402 :    
403 :     paddb mm4, mm5
404 :     paddb mm0, mm4
405 :    
406 :     paddb mm1, mm3
407 :     paddb mm2, mm1
408 :    
409 :     paddb mm2, [mmx_one wrt rip]
410 :     pand mm2, [mmx_mask2 wrt rip]
411 :    
412 :     psrlq mm2, 2
413 :     paddb mm0, mm2
414 :    
415 :     lea rsi,[rsi+rdx]
416 :     lea rdi,[rdi+rdx]
417 :    
418 :     movq [rcx], mm0 ; (src1 + src2 + src3 + src4 + 2) / 4 -> dst
419 :     %endmacro
420 :    
421 :     ALIGN 16
422 :     interpolate8x8_avg4_x86_64:
423 :    
424 :     push rbx
425 :    
426 :     mov rax, [rsp + 8 + 8] ; rounding
427 :    
428 :     test rax, rax
429 :    
430 :     mov rbx, rdx ; src2
431 :     mov rdx, r9 ; stride
432 :     mov rax, rsi ; src1
433 :     mov rsi, rcx ; src3
434 :     mov rcx, rdi ; dst
435 :     mov rdi, r8 ; src4
436 :    
437 :     movq mm7, [mmx_one wrt rip]
438 :    
439 :     jnz near .rounding1
440 :    
441 :     AVG4_MMX_RND0
442 :     lea rcx, [rcx+rdx]
443 :     AVG4_MMX_RND0
444 :     lea rcx, [rcx+rdx]
445 :     AVG4_MMX_RND0
446 :     lea rcx, [rcx+rdx]
447 :     AVG4_MMX_RND0
448 :     lea rcx, [rcx+rdx]
449 :     AVG4_MMX_RND0
450 :     lea rcx, [rcx+rdx]
451 :     AVG4_MMX_RND0
452 :     lea rcx, [rcx+rdx]
453 :     AVG4_MMX_RND0
454 :     lea rcx, [rcx+rdx]
455 :     AVG4_MMX_RND0
456 :    
457 :     pop rbx
458 :     ret
459 :    
460 :     .rounding1
461 :     AVG4_MMX_RND1
462 :     lea rcx, [rcx+rdx]
463 :     AVG4_MMX_RND1
464 :     lea rcx, [rcx+rdx]
465 :     AVG4_MMX_RND1
466 :     lea rcx, [rcx+rdx]
467 :     AVG4_MMX_RND1
468 :     lea rcx, [rcx+rdx]
469 :     AVG4_MMX_RND1
470 :     lea rcx, [rcx+rdx]
471 :     AVG4_MMX_RND1
472 :     lea rcx, [rcx+rdx]
473 :     AVG4_MMX_RND1
474 :     lea rcx, [rcx+rdx]
475 :     AVG4_MMX_RND1
476 :    
477 :     pop rbx
478 :     ret
479 :     .endfunc
480 :    
481 :     ;-----------------------------------------------------------------------------
482 :     ;
483 :     ; void interpolate8x8_6tap_lowpass_h_x86_64(uint8_t const *dst,
484 :     ; const uint8_t * const src,
485 :     ; const uint32_t stride,
486 :     ; const uint32_t rounding);
487 :     ;
488 :     ;-----------------------------------------------------------------------------
489 :    
490 :     %macro LOWPASS_6TAP_H_MMX 0
491 :     movq mm0, [rax]
492 :     movq mm2, [rax+1]
493 :    
494 :     movq mm1, mm0
495 :     movq mm3, mm2
496 :    
497 :     punpcklbw mm0, mm7
498 :     punpcklbw mm2, mm7
499 :    
500 :     punpckhbw mm1, mm7
501 :     punpckhbw mm3, mm7
502 :    
503 :     paddw mm0, mm2
504 :     paddw mm1, mm3
505 :    
506 :     psllw mm0, 2
507 :     psllw mm1, 2
508 :    
509 :     movq mm2, [rax-1]
510 :     movq mm4, [rax+2]
511 :    
512 :     movq mm3, mm2
513 :     movq mm5, mm4
514 :    
515 :     punpcklbw mm2, mm7
516 :     punpcklbw mm4, mm7
517 :    
518 :     punpckhbw mm3, mm7
519 :     punpckhbw mm5, mm7
520 :    
521 :     paddw mm2, mm4
522 :     paddw mm3, mm5
523 :    
524 :     psubsw mm0, mm2
525 :     psubsw mm1, mm3
526 :    
527 :     pmullw mm0, [mmx_five wrt rip]
528 :     pmullw mm1, [mmx_five wrt rip]
529 :    
530 :     movq mm2, [rax-2]
531 :     movq mm4, [rax+3]
532 :    
533 :     movq mm3, mm2
534 :     movq mm5, mm4
535 :    
536 :     punpcklbw mm2, mm7
537 :     punpcklbw mm4, mm7
538 :    
539 :     punpckhbw mm3, mm7
540 :     punpckhbw mm5, mm7
541 :    
542 :     paddw mm2, mm4
543 :     paddw mm3, mm5
544 :    
545 :     paddsw mm0, mm2
546 :     paddsw mm1, mm3
547 :    
548 :     paddsw mm0, mm6
549 :     paddsw mm1, mm6
550 :    
551 :     psraw mm0, 5
552 :     psraw mm1, 5
553 :    
554 :     lea rax, [rax+rdx]
555 :     packuswb mm0, mm1
556 :     movq [rcx], mm0
557 :     %endmacro
558 :    
559 :     ALIGN 16
560 :     interpolate8x8_6tap_lowpass_h_x86_64:
561 :    
562 :     mov rax, rcx ; rounding
563 :    
564 :     lea r8, [rounding_lowpass_mmx wrt rip]
565 :     movq mm6, [r8 + rax * 8]
566 :    
567 :     ; rdx is stride
568 :     mov rax, rsi ; src
569 :     mov rcx, rdi ; dst
570 :    
571 :     pxor mm7, mm7
572 :    
573 :     LOWPASS_6TAP_H_MMX
574 :     lea rcx, [rcx+rdx]
575 :     LOWPASS_6TAP_H_MMX
576 :     lea rcx, [rcx+rdx]
577 :     LOWPASS_6TAP_H_MMX
578 :     lea rcx, [rcx+rdx]
579 :     LOWPASS_6TAP_H_MMX
580 :     lea rcx, [rcx+rdx]
581 :     LOWPASS_6TAP_H_MMX
582 :     lea rcx, [rcx+rdx]
583 :     LOWPASS_6TAP_H_MMX
584 :     lea rcx, [rcx+rdx]
585 :     LOWPASS_6TAP_H_MMX
586 :     lea rcx, [rcx+rdx]
587 :     LOWPASS_6TAP_H_MMX
588 :    
589 :     ret
590 :     .endfunc
591 :    
592 :     ;-----------------------------------------------------------------------------
593 :     ;
594 :     ; void interpolate8x8_6tap_lowpass_v_x86_64(uint8_t const *dst,
595 :     ; const uint8_t * const src,
596 :     ; const uint32_t stride,
597 :     ; const uint32_t rounding);
598 :     ;
599 :     ;-----------------------------------------------------------------------------
600 :    
601 :     %macro LOWPASS_6TAP_V_MMX 0
602 :     movq mm0, [rax]
603 :     movq mm2, [rax+rdx]
604 :    
605 :     movq mm1, mm0
606 :     movq mm3, mm2
607 :    
608 :     punpcklbw mm0, mm7
609 :     punpcklbw mm2, mm7
610 :    
611 :     punpckhbw mm1, mm7
612 :     punpckhbw mm3, mm7
613 :    
614 :     paddw mm0, mm2
615 :     paddw mm1, mm3
616 :    
617 :     psllw mm0, 2
618 :     psllw mm1, 2
619 :    
620 :     movq mm4, [rax+2*rdx]
621 :     sub rax, rbx
622 :     movq mm2, [rax+2*rdx]
623 :    
624 :     movq mm3, mm2
625 :     movq mm5, mm4
626 :    
627 :     punpcklbw mm2, mm7
628 :     punpcklbw mm4, mm7
629 :    
630 :     punpckhbw mm3, mm7
631 :     punpckhbw mm5, mm7
632 :    
633 :     paddw mm2, mm4
634 :     paddw mm3, mm5
635 :    
636 :     psubsw mm0, mm2
637 :     psubsw mm1, mm3
638 :    
639 :     pmullw mm0, [mmx_five wrt rip]
640 :     pmullw mm1, [mmx_five wrt rip]
641 :    
642 :     movq mm2, [rax+rdx]
643 :     movq mm4, [rax+2*rbx]
644 :    
645 :     movq mm3, mm2
646 :     movq mm5, mm4
647 :    
648 :     punpcklbw mm2, mm7
649 :     punpcklbw mm4, mm7
650 :    
651 :     punpckhbw mm3, mm7
652 :     punpckhbw mm5, mm7
653 :    
654 :     paddw mm2, mm4
655 :     paddw mm3, mm5
656 :    
657 :     paddsw mm0, mm2
658 :     paddsw mm1, mm3
659 :    
660 :     paddsw mm0, mm6
661 :     paddsw mm1, mm6
662 :    
663 :     psraw mm0, 5
664 :     psraw mm1, 5
665 :    
666 :     lea rax, [rax+4*rdx]
667 :     packuswb mm0, mm1
668 :     movq [rcx], mm0
669 :     %endmacro
670 :    
671 :     ALIGN 16
672 :     interpolate8x8_6tap_lowpass_v_x86_64:
673 :    
674 :     push rbx
675 :    
676 :     mov rax, rcx ; rounding
677 :    
678 :     lea r8, [rounding_lowpass_mmx wrt rip]
679 :     movq mm6, [r8 + rax * 8]
680 :    
681 :     ; rdx is stride
682 :     mov rax, rsi ; src
683 :     mov rcx, rdi ; dst
684 :    
685 :     mov rbx, rdx
686 :     shl rbx, 1
687 :     add rbx, rdx
688 :    
689 :     pxor mm7, mm7
690 :    
691 :     LOWPASS_6TAP_V_MMX
692 :     lea rcx, [rcx+rdx]
693 :     LOWPASS_6TAP_V_MMX
694 :     lea rcx, [rcx+rdx]
695 :     LOWPASS_6TAP_V_MMX
696 :     lea rcx, [rcx+rdx]
697 :     LOWPASS_6TAP_V_MMX
698 :     lea rcx, [rcx+rdx]
699 :     LOWPASS_6TAP_V_MMX
700 :     lea rcx, [rcx+rdx]
701 :     LOWPASS_6TAP_V_MMX
702 :     lea rcx, [rcx+rdx]
703 :     LOWPASS_6TAP_V_MMX
704 :     lea rcx, [rcx+rdx]
705 :     LOWPASS_6TAP_V_MMX
706 :    
707 :     pop rbx
708 :     ret
709 :     .endfunc

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