[FFmpeg-cvslog] r24513 - trunk/libavcodec/x86/vp8dsp.asm
darkshikari
subversion
Mon Jul 26 21:34:00 CEST 2010
Author: darkshikari
Date: Mon Jul 26 21:34:00 2010
New Revision: 24513
Log:
VP8: Much faster SSE2 MC
5-10% faster or more on Phenom, Athlon 64, and some others.
Helps some on pre-SSSE3 Intel chips as well, but not as much.
Modified:
trunk/libavcodec/x86/vp8dsp.asm
Modified: trunk/libavcodec/x86/vp8dsp.asm
==============================================================================
--- trunk/libavcodec/x86/vp8dsp.asm Mon Jul 26 16:30:47 2010 (r24512)
+++ trunk/libavcodec/x86/vp8dsp.asm Mon Jul 26 21:34:00 2010 (r24513)
@@ -438,48 +438,43 @@ cglobal put_vp8_epel4_h6_mmxext, 6, 6
jg .nextrow
REP_RET
-; 4x4 block, H-only 4-tap filter
INIT_XMM
-cglobal put_vp8_epel8_h4_sse2, 6, 6, 8
- shl r5d, 4
+cglobal put_vp8_epel8_h4_sse2, 6, 6, 10
+ shl r5d, 5
%ifdef PIC
- lea r11, [fourtap_filter_hw_m]
+ lea r11, [fourtap_filter_v_m]
%endif
- mova m5, [fourtap_filter_hw+r5-16] ; set up 4tap filter in words
- mova m6, [fourtap_filter_hw+r5]
+ lea r5, [fourtap_filter_v+r5-32]
pxor m7, m7
-
+ mova m4, [pw_64]
+ mova m5, [r5+ 0]
+ mova m6, [r5+16]
+%ifdef m8
+ mova m8, [r5+32]
+ mova m9, [r5+48]
+%endif
.nextrow
- movh m0, [r2-1]
- punpcklbw m0, m7 ; ABCDEFGH
- mova m1, m0
- mova m2, m0
- mova m3, m0
- psrldq m1, 2 ; BCDEFGH
- psrldq m2, 4 ; CDEFGH
- psrldq m3, 6 ; DEFGH
- punpcklwd m0, m1 ; ABBCCDDE
- punpcklwd m2, m3 ; CDDEEFFG
- pmaddwd m0, m5
- pmaddwd m2, m6
- paddd m0, m2
-
- movh m1, [r2+3]
- punpcklbw m1, m7 ; ABCDEFGH
- mova m2, m1
- mova m3, m1
- mova m4, m1
- psrldq m2, 2 ; BCDEFGH
- psrldq m3, 4 ; CDEFGH
- psrldq m4, 6 ; DEFGH
- punpcklwd m1, m2 ; ABBCCDDE
- punpcklwd m3, m4 ; CDDEEFFG
- pmaddwd m1, m5
- pmaddwd m3, m6
- paddd m1, m3
-
- packssdw m0, m1
- paddsw m0, [pw_64]
+ movq m0, [r2-1]
+ movq m1, [r2-0]
+ movq m2, [r2+1]
+ movq m3, [r2+2]
+ punpcklbw m0, m7
+ punpcklbw m1, m7
+ punpcklbw m2, m7
+ punpcklbw m3, m7
+ pmullw m0, m5
+ pmullw m1, m6
+%ifdef m8
+ pmullw m2, m8
+ pmullw m3, m9
+%else
+ pmullw m2, [r5+32]
+ pmullw m3, [r5+48]
+%endif
+ paddsw m0, m1
+ paddsw m2, m3
+ paddsw m0, m2
+ paddsw m0, m4
psraw m0, 7
packuswb m0, m7
movh [r0], m0 ; store
@@ -491,62 +486,57 @@ cglobal put_vp8_epel8_h4_sse2, 6, 6, 8
jg .nextrow
REP_RET
-cglobal put_vp8_epel8_h6_sse2, 6, 6, 8
+cglobal put_vp8_epel8_h6_sse2, 6, 6, 14
lea r5d, [r5*3]
+ shl r5d, 4
%ifdef PIC
- lea r11, [sixtap_filter_hw_m]
+ lea r11, [sixtap_filter_v_m]
%endif
- lea r5, [sixtap_filter_hw+r5*8]
+ lea r5, [sixtap_filter_v+r5-96]
pxor m7, m7
-
+ mova m6, [pw_64]
+%ifdef m8
+ mova m8, [r5+ 0]
+ mova m9, [r5+16]
+ mova m10, [r5+32]
+ mova m11, [r5+48]
+ mova m12, [r5+64]
+ mova m13, [r5+80]
+%endif
.nextrow
- movu m0, [r2-2]
- mova m6, m0
- mova m4, m0
- punpcklbw m0, m7 ; ABCDEFGHI
- mova m1, m0
- mova m2, m0
- mova m3, m0
- psrldq m1, 2 ; BCDEFGH
- psrldq m2, 4 ; CDEFGH
- psrldq m3, 6 ; DEFGH
- psrldq m4, 4
- punpcklbw m4, m7 ; EFGH
- mova m5, m4
- psrldq m5, 2 ; FGH
- punpcklwd m0, m1 ; ABBCCDDE
- punpcklwd m2, m3 ; CDDEEFFG
- punpcklwd m4, m5 ; EFFGGHHI
- pmaddwd m0, [r5-48]
- pmaddwd m2, [r5-32]
- pmaddwd m4, [r5-16]
- paddd m0, m2
- paddd m0, m4
-
- psrldq m6, 4
- mova m4, m6
- punpcklbw m6, m7 ; ABCDEFGHI
- mova m1, m6
- mova m2, m6
- mova m3, m6
- psrldq m1, 2 ; BCDEFGH
- psrldq m2, 4 ; CDEFGH
- psrldq m3, 6 ; DEFGH
- psrldq m4, 4
- punpcklbw m4, m7 ; EFGH
- mova m5, m4
- psrldq m5, 2 ; FGH
- punpcklwd m6, m1 ; ABBCCDDE
- punpcklwd m2, m3 ; CDDEEFFG
- punpcklwd m4, m5 ; EFFGGHHI
- pmaddwd m6, [r5-48]
- pmaddwd m2, [r5-32]
- pmaddwd m4, [r5-16]
- paddd m6, m2
- paddd m6, m4
-
- packssdw m0, m6
- paddsw m0, [pw_64]
+ movq m0, [r2-2]
+ movq m1, [r2-1]
+ movq m2, [r2-0]
+ movq m3, [r2+1]
+ movq m4, [r2+2]
+ movq m5, [r2+3]
+ punpcklbw m0, m7
+ punpcklbw m1, m7
+ punpcklbw m2, m7
+ punpcklbw m3, m7
+ punpcklbw m4, m7
+ punpcklbw m5, m7
+%ifdef m8
+ pmullw m0, m8
+ pmullw m1, m9
+ pmullw m2, m10
+ pmullw m3, m11
+ pmullw m4, m12
+ pmullw m5, m13
+%else
+ pmullw m0, [r5+ 0]
+ pmullw m1, [r5+16]
+ pmullw m2, [r5+32]
+ pmullw m3, [r5+48]
+ pmullw m4, [r5+64]
+ pmullw m5, [r5+80]
+%endif
+ paddsw m1, m4
+ paddsw m0, m5
+ paddsw m1, m2
+ paddsw m0, m3
+ paddsw m0, m1
+ paddsw m0, m6
psraw m0, 7
packuswb m0, m7
movh [r0], m0 ; store
More information about the ffmpeg-cvslog
mailing list