diff x86/vp8dsp-init.c @ 12334:435319d67bd8 libavcodec

Use word-writing instead of dword-writing (with two cached but otherwise unchanged bytes) in the horizontal simple loopfilter. This makes the filter quite a bit faster in itself (~30 cycles less on Core1), probably mostly because we don't need a complex 4x4 transpose, but only a simple byte interleave. Also allows using pextrw on SSE4, which speeds up even more (e.g. 25% faster on Core i7).
author rbultje
date Sat, 31 Jul 2010 23:13:15 +0000
parents c7f6ddcc5c01
children 2d15f62f4f8a
line wrap: on
line diff
--- a/x86/vp8dsp-init.c	Sat Jul 31 22:15:59 2010 +0000
+++ b/x86/vp8dsp-init.c	Sat Jul 31 23:13:15 2010 +0000
@@ -346,7 +346,6 @@
         VP8_BILINEAR_MC_FUNC(1, 8, sse2);
 
         c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_sse2;
-        c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse2;
 
         c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_sse2;
         c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_sse2;
@@ -358,6 +357,8 @@
     if (mm_flags & FF_MM_SSE2) {
         c->vp8_idct_dc_add4y          = ff_vp8_idct_dc_add4y_sse2;
 
+        c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse2;
+
         c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_sse2;
         c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_sse2;
 
@@ -390,6 +391,7 @@
     if (mm_flags & FF_MM_SSE4) {
         c->vp8_idct_dc_add                  = ff_vp8_idct_dc_add_sse4;
 
+        c->vp8_h_loop_filter_simple   = ff_vp8_h_loop_filter_simple_sse4;
         c->vp8_h_loop_filter16y       = ff_vp8_h_loop_filter16y_mbedge_sse4;
         c->vp8_h_loop_filter8uv       = ff_vp8_h_loop_filter8uv_mbedge_sse4;
     }