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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (view) (download)

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

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