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

Reply via email to