aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorChristophe Gisquet <christophe.gisquet@gmail.com>2014-04-04 14:21:40 -0300
committerMichael Niedermayer <michaelni@gmx.at>2014-04-04 22:35:45 +0200
commitdfd865e51b890d9be394804bccddf55198f4a251 (patch)
tree9d634104e21241bd01a7ab1b5f4b69a1a4ae0a33 /libavcodec
parent3aac5fcfa9d3748659d78ab2a66d0ccce22cfd4f (diff)
downloadffmpeg-dfd865e51b890d9be394804bccddf55198f4a251.tar.gz
x86/synth_filter: remove the main loop when it's not needed
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/x86/dcadsp.asm11
1 files changed, 11 insertions, 0 deletions
diff --git a/libavcodec/x86/dcadsp.asm b/libavcodec/x86/dcadsp.asm
index c5a1e77bc2..10cb2983aa 100644
--- a/libavcodec/x86/dcadsp.asm
+++ b/libavcodec/x86/dcadsp.asm
@@ -311,9 +311,14 @@ cglobal synth_filter_inner, 0, 6 + 4 * ARCH_X86_64, 7 + 6 * ARCH_X86_64, \
sub r5q, offmp
and r5q, -64
shl r5q, 2
+%if ARCH_X86_32 || mmsize < 32
mov OFFQ, r5q
%define i r5q
mov i, 16 * 4 - (ARCH_X86_64 + 1) * mmsize ; main loop counter
+%else
+%define i 0
+%define OFFQ r5q
+%endif
%define buf2 synth_buf2q
%if ARCH_X86_32
@@ -332,8 +337,10 @@ cglobal synth_filter_inner, 0, 6 + 4 * ARCH_X86_64, 7 + 6 * ARCH_X86_64, \
%define j r3q
mov win, windowm
mov ptr1, synth_bufm
+%if ARCH_X86_32 || mmsize < 32
add win, i
add ptr1, i
+%endif
%else ; ARCH_X86_64
%define ptr1 r6q
%define ptr2 r7q ; must be loaded
@@ -349,7 +356,9 @@ cglobal synth_filter_inner, 0, 6 + 4 * ARCH_X86_64, 7 + 6 * ARCH_X86_64, \
mov ptr2, synth_bufmp
; prepare the inner loop counter
mov j, OFFQ
+%if ARCH_X86_32 || mmsize < 32
sub ptr2, i
+%endif
.loop1:
INNER_LOOP 0
jge .loop1
@@ -394,8 +403,10 @@ cglobal synth_filter_inner, 0, 6 + 4 * ARCH_X86_64, 7 + 6 * ARCH_X86_64, \
mova [outq + i + 0 * 4 + mmsize], m7
mova [outq + i + 16 * 4 + mmsize], m8
%endif
+%if ARCH_X86_32 || mmsize < 32
sub i, (ARCH_X86_64 + 1) * mmsize
jge .mainloop
+%endif
RET
%endmacro