mirror of https://git.ffmpeg.org/ffmpeg.git
r5954 broke fft on cpus with 3dnow but without mm3dnow.h
Originally committed as revision 5974 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ffad4ed154
commit
60ae06e77e
|
@ -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 defined(HAVE_MMX)
|
||||
has_vectors = mm_support() & (MM_3DNOW | MM_3DNOWEXT | MM_SSE | MM_SSE2);
|
||||
#endif
|
||||
#if defined(HAVE_ALTIVEC) && !defined(ALTIVEC_USE_REFERENCE_C_CODE)
|
||||
has_vectors = mm_support() & MM_ALTIVEC;
|
||||
#endif
|
||||
if (has_vectors) {
|
||||
#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 */
|
||||
if (has_vectors & MM_ALTIVEC)
|
||||
s->fft_calc = ff_fft_calc_altivec;
|
||||
#endif
|
||||
}
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue