Hi, 2013-04-13 0:46 GMT+02:00 Christophe Gisquet <[email protected]>: >> Do any of the ISO reference vectors test it? It seems almost pointless >> to optimize a function that is literally never used.
At least fate sample al_sbr_hq_sr_48_2_fsaac48 evaluates this patch, with success. -- Christophe
From 5501f9603dd372e0bd9a7ebfa186ef84157d2177 Mon Sep 17 00:00:00 2001 From: Christophe Gisquet <[email protected]> Date: Fri, 7 Dec 2012 18:26:30 +0100 Subject: [PATCH 2/3] x86: sbrdsp: implement SSE qmf_deint_neg From 133 to 59 cycles on Arrandale/Win64. --- libavcodec/x86/sbrdsp.asm | 23 +++++++++++++++++++++++ libavcodec/x86/sbrdsp_init.c | 2 ++ 2 files changed, 25 insertions(+) diff --git a/libavcodec/x86/sbrdsp.asm b/libavcodec/x86/sbrdsp.asm index 2cac8a8..690165f 100644 --- a/libavcodec/x86/sbrdsp.asm +++ b/libavcodec/x86/sbrdsp.asm @@ -412,3 +412,26 @@ apply_noise_main: add count, mmsize jl .loop RET + +INIT_XMM sse +cglobal sbr_qmf_deint_neg, 2,4,4,v,src,vrev,c +%define COUNT 32*4 +%define OFFSET 32*4 + mov cq, -COUNT + lea vrevq, [vq + OFFSET + COUNT] + add vq, OFFSET-mmsize + add srcq, 2*COUNT + mova m3, [ps_neg] +.loop: + mova m0, [srcq + 2*cq + 0*mmsize] + mova m1, [srcq + 2*cq + 1*mmsize] + shufps m2, m0, m1, q2020 + shufps m1, m0, q1313 + xorps m2, m3 + mova [vq], m1 + mova [vrevq + cq], m2 + sub vq, mmsize + add cq, mmsize + jl .loop + REP_RET + diff --git a/libavcodec/x86/sbrdsp_init.c b/libavcodec/x86/sbrdsp_init.c index f08bfb1..f8c2b86 100644 --- a/libavcodec/x86/sbrdsp_init.c +++ b/libavcodec/x86/sbrdsp_init.c @@ -48,6 +48,7 @@ void ff_sbr_hf_apply_noise_2_sse2(float (*Y)[2], const float *s_m, void ff_sbr_hf_apply_noise_3_sse2(float (*Y)[2], const float *s_m, const float *q_filt, int noise, int kx, int m_max); +void ff_sbr_qmf_deint_neg_sse(float *v, const float *src); av_cold void ff_sbrdsp_init_x86(SBRDSPContext *s) { @@ -60,6 +61,7 @@ av_cold void ff_sbrdsp_init_x86(SBRDSPContext *s) s->hf_g_filt = ff_sbr_hf_g_filt_sse; s->hf_gen = ff_sbr_hf_gen_sse; s->qmf_post_shuffle = ff_sbr_qmf_post_shuffle_sse; + s->qmf_deint_neg = ff_sbr_qmf_deint_neg_sse; } if (EXTERNAL_SSE2(cpu_flags)) { -- 1.8.0.msysgit.0
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
