mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-08-12 22:16:21 +00:00
avcodec/x86/vc1dsp_mc: Add size 16 horizontal SSSE3 mc functions
vc1dsp.avg_vc1_mspel_pixels_tab_mc10_16_c: 309.1 ( 1.00x) vc1dsp.avg_vc1_mspel_pixels_tab_mc10_16_mmxext: 177.3 ( 1.74x) vc1dsp.avg_vc1_mspel_pixels_tab_mc10_16_ssse3: 52.3 ( 5.91x) vc1dsp.avg_vc1_mspel_pixels_tab_mc20_16_c: 279.6 ( 1.00x) vc1dsp.avg_vc1_mspel_pixels_tab_mc20_16_mmxext: 148.8 ( 1.88x) vc1dsp.avg_vc1_mspel_pixels_tab_mc20_16_ssse3: 52.1 ( 5.37x) vc1dsp.avg_vc1_mspel_pixels_tab_mc30_16_c: 332.6 ( 1.00x) vc1dsp.avg_vc1_mspel_pixels_tab_mc30_16_mmxext: 177.3 ( 1.88x) vc1dsp.avg_vc1_mspel_pixels_tab_mc30_16_ssse3: 52.5 ( 6.33x) vc1dsp.put_vc1_mspel_pixels_tab_mc10_16_c: 288.8 ( 1.00x) vc1dsp.put_vc1_mspel_pixels_tab_mc10_16_mmx: 170.3 ( 1.70x) vc1dsp.put_vc1_mspel_pixels_tab_mc10_16_ssse3: 51.3 ( 5.63x) vc1dsp.put_vc1_mspel_pixels_tab_mc20_16_c: 236.2 ( 1.00x) vc1dsp.put_vc1_mspel_pixels_tab_mc20_16_mmx: 144.1 ( 1.64x) vc1dsp.put_vc1_mspel_pixels_tab_mc20_16_ssse3: 51.3 ( 4.61x) vc1dsp.put_vc1_mspel_pixels_tab_mc30_16_c: 286.6 ( 1.00x) vc1dsp.put_vc1_mspel_pixels_tab_mc30_16_mmx: 170.1 ( 1.69x) vc1dsp.put_vc1_mspel_pixels_tab_mc30_16_ssse3: 51.2 ( 5.60x) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
@@ -97,6 +97,9 @@ void ff_vc1_inv_trans_8x8_dc_mmxext(uint8_t *dest, ptrdiff_t linesize,
|
||||
#define MSPEL_FUNCS_SIZE(X, Y, SIZE, XMM) \
|
||||
MSPEL_FUNC(put, X, Y, SIZE, XMM); \
|
||||
MSPEL_FUNC(avg, X, Y, SIZE, XMM)
|
||||
#define MSPEL_FUNCS(X, Y, XMM) \
|
||||
MSPEL_FUNCS_SIZE(X, Y, 8, XMM); \
|
||||
MSPEL_FUNCS_SIZE(X, Y, 16, XMM)
|
||||
|
||||
av_cold void ff_vc1dsp_init_x86(VC1DSPContext *dsp)
|
||||
{
|
||||
@@ -141,9 +144,9 @@ av_cold void ff_vc1dsp_init_x86(VC1DSPContext *dsp)
|
||||
dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_vc1_chroma_mc8_nornd_ssse3;
|
||||
dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_vc1_chroma_mc8_nornd_ssse3;
|
||||
|
||||
MSPEL_FUNCS_SIZE(1, 0, 8, ssse3);
|
||||
MSPEL_FUNCS_SIZE(2, 0, 8, ssse3);
|
||||
MSPEL_FUNCS_SIZE(3, 0, 8, ssse3);
|
||||
MSPEL_FUNCS(1, 0, ssse3);
|
||||
MSPEL_FUNCS(2, 0, ssse3);
|
||||
MSPEL_FUNCS(3, 0, ssse3);
|
||||
}
|
||||
if (EXTERNAL_SSE4(cpu_flags)) {
|
||||
dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_sse4;
|
||||
|
||||
@@ -200,6 +200,7 @@ HOR_16B_SHIFT2 OP_AVG, avg
|
||||
%endif ; HAVE_MMX_INLINE
|
||||
|
||||
%define MOV8 movq
|
||||
%define MOV16 movu
|
||||
|
||||
INIT_XMM ssse3
|
||||
%macro HOR_8B 2
|
||||
@@ -223,7 +224,7 @@ cglobal vc1_%1_mspel_mc30_%2, 4, 4, 6, dst, src, stride, rnd
|
||||
|
||||
vc1_%1_mspel_mc30_%2_after_prologue:
|
||||
movd m0, rndd
|
||||
WIN64_SPILL_XMM 7
|
||||
WIN64_SPILL_XMM 7+(%2>>4)
|
||||
%define hd rndd
|
||||
mov hd, %2
|
||||
SPLATW m0, m0
|
||||
@@ -233,6 +234,7 @@ vc1_%1_mspel_mc30_%2_after_prologue:
|
||||
MOV%2 m5, [srcq+1]
|
||||
MOV%2 m6, [srcq+2]
|
||||
|
||||
%if %2 == 8
|
||||
punpcklbw m3, m4
|
||||
pmaddubsw m3, m1
|
||||
%ifidn %1,avg
|
||||
@@ -249,6 +251,26 @@ vc1_%1_mspel_mc30_%2_after_prologue:
|
||||
pavgb m3, m4
|
||||
%endif
|
||||
movq [dstq], m3
|
||||
%else
|
||||
SBUTTERFLY bw, 3, 4, 7
|
||||
pmaddubsw m3, m1
|
||||
pmaddubsw m4, m1
|
||||
SBUTTERFLY bw, 6, 5, 7
|
||||
pmaddubsw m6, m2
|
||||
pmaddubsw m5, m2
|
||||
add srcq, strideq
|
||||
psubw m3, m0
|
||||
psubw m4, m0
|
||||
paddw m3, m6
|
||||
paddw m4, m5
|
||||
psraw m3, 6
|
||||
psraw m4, 6
|
||||
packuswb m3, m4
|
||||
%ifidn %1, avg
|
||||
pavgb m3, [dstq]
|
||||
%endif
|
||||
mova [dstq], m3
|
||||
%endif
|
||||
add dstq, strideq
|
||||
dec hd
|
||||
jnz .loop
|
||||
@@ -257,3 +279,6 @@ vc1_%1_mspel_mc30_%2_after_prologue:
|
||||
|
||||
HOR_8B put, 8
|
||||
HOR_8B avg, 8
|
||||
|
||||
HOR_8B put, 16
|
||||
HOR_8B avg, 16
|
||||
|
||||
Reference in New Issue
Block a user