summaryrefslogtreecommitdiff
path: root/libavcodec/x86/sbrdsp.asm
diff options
context:
space:
mode:
authorChristophe Gisquet <christophe.gisquet@gmail.com>2012-12-07 18:26:30 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-05-15 23:11:18 +0200
commitd1310c591eb24202ecc28af4adb28cce690109e5 (patch)
tree6a36bacd687337295d79f667d0dcb7fb84c70b06 /libavcodec/x86/sbrdsp.asm
parent7a4424e5ed3a60939126914ee5ddc32226a56cff (diff)
x86: sbrdsp: implement SSE qmf_deint_neg
From 133 (unrolled av_intfloat32 C) to 59 cycles on Arrandale/Win64. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/x86/sbrdsp.asm')
-rw-r--r--libavcodec/x86/sbrdsp.asm22
1 files changed, 22 insertions, 0 deletions
diff --git a/libavcodec/x86/sbrdsp.asm b/libavcodec/x86/sbrdsp.asm
index af774e1a5c..d556f27112 100644
--- a/libavcodec/x86/sbrdsp.asm
+++ b/libavcodec/x86/sbrdsp.asm
@@ -423,3 +423,25 @@ 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