rv40dsp x86: MMX/MMX2/3DNow/SSE2/SSSE3 implementations of MC
authorChristophe Gisquet <christophe.gisquet@gmail.com>
Thu, 19 Apr 2012 20:36:17 +0000 (22:36 +0200)
committerDiego Biurrun <diego@biurrun.de>
Thu, 10 May 2012 16:42:43 +0000 (18:42 +0200)
commit110d0cdc9d1ec414a658f841a3fbefbf6f796d61
treed2f80a035204c7a75a6daa5c71357e61817ffd54
parent706b998cdcea97c50fad2228f67488de0e06b2a2
rv40dsp x86: MMX/MMX2/3DNow/SSE2/SSSE3 implementations of MC

Code mostly inspired by vp8's MC, however:
- its MMX2 horizontal filter is worse because it can't take advantage of
  the coefficient redundancy
- that same coefficient redundancy allows better code for non-SSSE3 versions

Benchmark (rounded to tens of unit):
        V8x8  H8x8  2D8x8  V16x16  H16x16  2D16x16
C       445    358   985    1785    1559    3280
MMX*    219    271   478     714     929    1443
SSE2    131    158   294     425     515     892
SSSE3   120    122   248     387     390     763

End result is overall around a 15% speedup for SSSE3 version (on 6 sequences);
all loop filter functions now take around 55% of decoding time, while luma MC
dsp functions are around 6%, chroma ones are 1.3% and biweight around 2.3%.

Signed-off-by: Diego Biurrun <diego@biurrun.de>
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/dsputil_mmx.h
libavcodec/x86/rv40dsp.asm
libavcodec/x86/rv40dsp_init.c