comparison x86/h264_intrapred.asm @ 12004:2002ea7c06f6 libavcodec

MMXEXT version of vp8 4x4 vertical pred
author darkshikari
date Tue, 29 Jun 2010 00:23:52 +0000
parents 3b761226ea35
children 09705b027344
comparison
equal deleted inserted replaced
12003:3b761226ea35 12004:2002ea7c06f6
25 25
26 tm_shuf: times 8 db 0x03, 0x80 26 tm_shuf: times 8 db 0x03, 0x80
27 27
28 SECTION .text 28 SECTION .text
29 29
30 cextern pb_1
30 cextern pb_3 31 cextern pb_3
31 32
32 ;----------------------------------------------------------------------------- 33 ;-----------------------------------------------------------------------------
33 ; void pred16x16_vertical(uint8_t *src, int stride) 34 ; void pred16x16_vertical(uint8_t *src, int stride)
34 ;----------------------------------------------------------------------------- 35 ;-----------------------------------------------------------------------------
570 movd [r0+r2*1], mm2 571 movd [r0+r2*1], mm2
571 movd [r0+r2*2], mm3 572 movd [r0+r2*2], mm3
572 movd [r1+r2*1], mm4 573 movd [r1+r2*1], mm4
573 movd [r1+r2*2], mm5 574 movd [r1+r2*2], mm5
574 RET 575 RET
576
577 ; dest, left, right, src, tmp
578 ; output: %1 = (t[n-1] + t[n]*2 + t[n+1] + 2) >> 2
579 %macro PRED4x4_LOWPASS 5
580 mova %5, %2
581 pavgb %2, %3
582 pxor %3, %5
583 mova %1, %4
584 pand %3, [pb_1]
585 psubusb %2, %3
586 pavgb %1, %2
587 %endmacro
588
589 ;-----------------------------------------------------------------------------
590 ; void pred4x4_vertical_vp8_mmxext(uint8_t *src, const uint8_t *topright, int stride)
591 ;-----------------------------------------------------------------------------
592
593 INIT_MMX
594 cglobal pred4x4_vertical_vp8_mmxext, 3,3
595 sub r0, r2
596 movd m1, [r0-1]
597 movd m0, [r0]
598 mova m2, m0 ;t0 t1 t2 t3
599 punpckldq m0, [r1] ;t0 t1 t2 t3 t4 t5 t6 t7
600 lea r1, [r0+r2*2]
601 psrlq m0, 8 ;t1 t2 t3 t4
602 PRED4x4_LOWPASS m3, m1, m0, m2, m4
603 movd [r0+r2*1], m3
604 movd [r0+r2*2], m3
605 movd [r1+r2*1], m3
606 movd [r1+r2*2], m3
607 RET