x86: use more standard construct for setting ASM functions in FFT code

Signed-off-by: Diego Biurrun <diego@biurrun.de>
This commit is contained in:
Vitor Sessak 2012-05-12 08:59:00 +02:00 committed by Diego Biurrun
parent 09a35f251a
commit fcc456b829

View File

@ -25,30 +25,31 @@ av_cold void ff_fft_init_mmx(FFTContext *s)
{ {
#if HAVE_YASM #if HAVE_YASM
int has_vectors = av_get_cpu_flags(); int has_vectors = av_get_cpu_flags();
if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX && s->nbits >= 5) { if (has_vectors & AV_CPU_FLAG_3DNOW && HAVE_AMD3DNOW) {
/* AVX for SB */ /* 3DNow! for K6-2/3 */
s->imdct_calc = ff_imdct_calc_sse; s->imdct_calc = ff_imdct_calc_3dn;
s->imdct_half = ff_imdct_half_avx; s->imdct_half = ff_imdct_half_3dn;
s->fft_permute = ff_fft_permute_sse; s->fft_calc = ff_fft_calc_3dn;
s->fft_calc = ff_fft_calc_avx; }
s->fft_permutation = FF_FFT_PERM_AVX; if (has_vectors & AV_CPU_FLAG_3DNOWEXT && HAVE_AMD3DNOWEXT) {
} else if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE) { /* 3DNowEx for K7 */
s->imdct_calc = ff_imdct_calc_3dn2;
s->imdct_half = ff_imdct_half_3dn2;
s->fft_calc = ff_fft_calc_3dn2;
}
if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE) {
/* SSE for P3/P4/K8 */ /* SSE for P3/P4/K8 */
s->imdct_calc = ff_imdct_calc_sse; s->imdct_calc = ff_imdct_calc_sse;
s->imdct_half = ff_imdct_half_sse; s->imdct_half = ff_imdct_half_sse;
s->fft_permute = ff_fft_permute_sse; s->fft_permute = ff_fft_permute_sse;
s->fft_calc = ff_fft_calc_sse; s->fft_calc = ff_fft_calc_sse;
s->fft_permutation = FF_FFT_PERM_SWAP_LSBS; s->fft_permutation = FF_FFT_PERM_SWAP_LSBS;
} else if (has_vectors & AV_CPU_FLAG_3DNOWEXT && HAVE_AMD3DNOWEXT) { }
/* 3DNowEx for K7 */ if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX && s->nbits >= 5) {
s->imdct_calc = ff_imdct_calc_3dn2; /* AVX for SB */
s->imdct_half = ff_imdct_half_3dn2; s->imdct_half = ff_imdct_half_avx;
s->fft_calc = ff_fft_calc_3dn2; s->fft_calc = ff_fft_calc_avx;
} else if (has_vectors & AV_CPU_FLAG_3DNOW && HAVE_AMD3DNOW) { s->fft_permutation = FF_FFT_PERM_AVX;
/* 3DNow! for K6-2/3 */
s->imdct_calc = ff_imdct_calc_3dn;
s->imdct_half = ff_imdct_half_3dn;
s->fft_calc = ff_fft_calc_3dn;
} }
#endif #endif
} }
@ -58,12 +59,12 @@ av_cold void ff_dct_init_mmx(DCTContext *s)
{ {
#if HAVE_YASM #if HAVE_YASM
int has_vectors = av_get_cpu_flags(); int has_vectors = av_get_cpu_flags();
if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE)
s->dct32 = ff_dct32_float_sse;
if (has_vectors & AV_CPU_FLAG_SSE2 && HAVE_SSE)
s->dct32 = ff_dct32_float_sse2;
if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX) if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX)
s->dct32 = ff_dct32_float_avx; s->dct32 = ff_dct32_float_avx;
else if (has_vectors & AV_CPU_FLAG_SSE2 && HAVE_SSE)
s->dct32 = ff_dct32_float_sse2;
else if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE)
s->dct32 = ff_dct32_float_sse;
#endif #endif
} }
#endif #endif