Skip to content
Snippets Groups Projects
Commit 60ae06e7 authored by Loren Merritt's avatar Loren Merritt
Browse files

r5954 broke fft on cpus with 3dnow but without mm3dnow.h

Originally committed as revision 5974 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent ffad4ed1
No related branches found
No related tags found
No related merge requests found
......@@ -58,17 +58,38 @@ int ff_fft_init(FFTContext *s, int nbits, int inverse)
s->exptab1 = NULL;
/* compute constant table for HAVE_SSE version */
#if (defined(HAVE_MMX) && (defined(HAVE_BUILTIN_VECTOR) || defined(HAVE_MM3DNOW))) || defined(HAVE_ALTIVEC)
#if (defined(HAVE_MMX) && (defined(HAVE_BUILTIN_VECTOR) || defined(HAVE_MM3DNOW))) \
|| (defined(HAVE_ALTIVEC) && !defined(ALTIVEC_USE_REFERENCE_C_CODE))
{
int has_vectors = 0;
int has_vectors = mm_support();
if (has_vectors) {
#if defined(HAVE_MMX)
has_vectors = mm_support() & (MM_3DNOW | MM_3DNOWEXT | MM_SSE | MM_SSE2);
if (has_vectors & MM_3DNOWEXT)
s->imdct_calc = ff_imdct_calc_3dn2;
#ifdef HAVE_MM3DNOW
if (has_vectors & MM_3DNOWEXT)
/* 3DNowEx for Athlon(XP) */
s->fft_calc = ff_fft_calc_3dn2;
else if (has_vectors & MM_3DNOW)
/* 3DNow! for K6-2/3 */
s->fft_calc = ff_fft_calc_3dn;
#endif
#ifdef HAVE_BUILTIN_VECTOR
if (has_vectors & MM_SSE2)
/* SSE for P4/K8 */
s->fft_calc = ff_fft_calc_sse;
else if ((has_vectors & MM_SSE) &&
s->fft_calc == ff_fft_calc_c)
/* SSE for P3 */
s->fft_calc = ff_fft_calc_sse;
#endif
#if defined(HAVE_ALTIVEC) && !defined(ALTIVEC_USE_REFERENCE_C_CODE)
has_vectors = mm_support() & MM_ALTIVEC;
#else /* HAVE_MMX */
if (has_vectors & MM_ALTIVEC)
s->fft_calc = ff_fft_calc_altivec;
#endif
if (has_vectors) {
}
if (s->fft_calc != ff_fft_calc_c) {
int np, nblocks, np2, l;
FFTComplex *q;
......@@ -94,29 +115,6 @@ int ff_fft_init(FFTContext *s, int nbits, int inverse)
nblocks = nblocks >> 1;
} while (nblocks != 0);
av_freep(&s->exptab);
#if defined(HAVE_MMX)
if (has_vectors & MM_3DNOWEXT)
s->imdct_calc = ff_imdct_calc_3dn2;
#ifdef HAVE_MM3DNOW
if (has_vectors & MM_3DNOWEXT)
/* 3DNowEx for Athlon(XP) */
s->fft_calc = ff_fft_calc_3dn2;
else if (has_vectors & MM_3DNOW)
/* 3DNow! for K6-2/3 */
s->fft_calc = ff_fft_calc_3dn;
#endif
#ifdef HAVE_BUILTIN_VECTOR
if (has_vectors & MM_SSE2)
/* SSE for P4/K8 */
s->fft_calc = ff_fft_calc_sse;
else if ((has_vectors & MM_SSE) &&
s->fft_calc == ff_fft_calc_c)
/* SSE for P3 */
s->fft_calc = ff_fft_calc_sse;
#endif
#else /* HAVE_MMX */
s->fft_calc = ff_fft_calc_altivec;
#endif
}
}
#endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment