00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "config.h"
00020
00021 #include "libavutil/cpu.h"
00022 #include "libavutil/float_dsp.h"
00023 #include "cpu.h"
00024
00025 extern void ff_vector_fmul_sse(float *dst, const float *src0, const float *src1,
00026 int len);
00027 extern void ff_vector_fmul_avx(float *dst, const float *src0, const float *src1,
00028 int len);
00029
00030 extern void ff_vector_fmac_scalar_sse(float *dst, const float *src, float mul,
00031 int len);
00032 extern void ff_vector_fmac_scalar_avx(float *dst, const float *src, float mul,
00033 int len);
00034
00035 extern void ff_vector_fmul_scalar_sse(float *dst, const float *src, float mul,
00036 int len);
00037
00038 extern void ff_vector_dmul_scalar_sse2(double *dst, const double *src,
00039 double mul, int len);
00040 extern void ff_vector_dmul_scalar_avx(double *dst, const double *src,
00041 double mul, int len);
00042
00043 void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp)
00044 {
00045 int mm_flags = av_get_cpu_flags();
00046
00047 if (EXTERNAL_SSE(mm_flags)) {
00048 fdsp->vector_fmul = ff_vector_fmul_sse;
00049 fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_sse;
00050 fdsp->vector_fmul_scalar = ff_vector_fmul_scalar_sse;
00051 }
00052 if (EXTERNAL_SSE2(mm_flags)) {
00053 fdsp->vector_dmul_scalar = ff_vector_dmul_scalar_sse2;
00054 }
00055 if (EXTERNAL_AVX(mm_flags)) {
00056 fdsp->vector_fmul = ff_vector_fmul_avx;
00057 fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_avx;
00058 fdsp->vector_dmul_scalar = ff_vector_dmul_scalar_avx;
00059 }
00060 }