x86: hevc_mc: split differently calls
authorChristophe Gisquet <christophe.gisquet@gmail.com>
Sun, 24 Aug 2014 08:46:30 +0000 (08:46 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 24 Aug 2014 10:05:33 +0000 (12:05 +0200)
commit3e892b2bcdb67f9372a5400baba1513e2fcbf3b5
tree0a9df9c2046e067bf99dfd6cc4e98c31d996ebf7
parent38e2aa3759c6f3498637ca6aac4e897f4b2c7e3c
x86: hevc_mc: split differently calls

In some cases, 2 or 3 calls are performed to functions for unusual
widths. Instead, perform 2 calls for different widths to split the
workload.

The 8+16 and 4+8 widths for respectively 8 and more than 8 bits can't
be processed that way without modifications: some calls use unaligned
buffers, and having branches to handle this was resulting in no
micro-benchmark benefit.

For block_w == 12 (around 1% of the pixels of the sequence):
Before:
12758 decicycles in epel_uni, 4093 runs, 3 skips
19389 decicycles in qpel_uni, 8187 runs, 5 skips
22699 decicycles in epel_bi, 32743 runs, 25 skips
34736 decicycles in qpel_bi, 32733 runs, 35 skips

After:
11929 decicycles in epel_uni, 4096 runs, 0 skips
18131 decicycles in qpel_uni, 8184 runs, 8 skips
20065 decicycles in epel_bi, 32750 runs, 18 skips
31458 decicycles in qpel_bi, 32753 runs, 15 skips

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/x86/hevcdsp_init.c