summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2012-08-02 12:15:46 -0500
committerJustin Ruggles <justin.ruggles@gmail.com>2012-08-02 13:40:11 -0400
commitc728518b3cbb0daf0d0a65ba7adfcb48c5629b93 (patch)
tree0042b25b0462735fb301e4d679112e50a619accd
parent150adea6da24e5342584b403dc0f901aa79f53c8 (diff)
downloadffmpeg-c728518b3cbb0daf0d0a65ba7adfcb48c5629b93.tar.gz
x86: fft: fix imdct_half() for AVX
Some calculations were changed in b6a3849 to use mmsize, which was not correct for the AVX version, which uses INIT_YMM and therefore has mmsize == 32. Fixes Bug 341. Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
-rw-r--r--libavcodec/x86/fft_mmx.asm13
1 files changed, 10 insertions, 3 deletions
diff --git a/libavcodec/x86/fft_mmx.asm b/libavcodec/x86/fft_mmx.asm
index 81e4411dcb..ac53296f70 100644
--- a/libavcodec/x86/fft_mmx.asm
+++ b/libavcodec/x86/fft_mmx.asm
@@ -1009,7 +1009,11 @@ cglobal imdct_half, 3,12,8; FFTContext *s, FFTSample *output, const FFTSample *i
push rrevtab
%endif
- sub r3, mmsize/4
+%if mmsize == 8
+ sub r3, 2
+%else
+ sub r3, 4
+%endif
%if ARCH_X86_64 || mmsize == 8
xor r4, r4
sub r4, r3
@@ -1036,7 +1040,9 @@ cglobal imdct_half, 3,12,8; FFTContext *s, FFTSample *output, const FFTSample *i
mova [r1+r5*8], m0
mova [r1+r6*8], m2
add r4, 2
-%elif ARCH_X86_64
+ sub r4, 2
+%else
+%if ARCH_X86_64
movzx r5, word [rrevtab+r4-4]
movzx r6, word [rrevtab+r4-2]
movzx r10, word [rrevtab+r3]
@@ -1057,7 +1063,8 @@ cglobal imdct_half, 3,12,8; FFTContext *s, FFTSample *output, const FFTSample *i
movlps [r1+r5*8], xmm1
movhps [r1+r4*8], xmm1
%endif
- sub r3, mmsize/4
+ sub r3, 4
+%endif
jns .pre
mov r5, r0