00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "config.h"
00023
00024 #include "float_dsp.h"
00025
00026 static void vector_fmul_c(float *dst, const float *src0, const float *src1,
00027 int len)
00028 {
00029 int i;
00030 for (i = 0; i < len; i++)
00031 dst[i] = src0[i] * src1[i];
00032 }
00033
00034 static void vector_fmac_scalar_c(float *dst, const float *src, float mul,
00035 int len)
00036 {
00037 int i;
00038 for (i = 0; i < len; i++)
00039 dst[i] += src[i] * mul;
00040 }
00041
00042 static void vector_fmul_scalar_c(float *dst, const float *src, float mul,
00043 int len)
00044 {
00045 int i;
00046 for (i = 0; i < len; i++)
00047 dst[i] = src[i] * mul;
00048 }
00049
00050 static void vector_dmul_scalar_c(double *dst, const double *src, double mul,
00051 int len)
00052 {
00053 int i;
00054 for (i = 0; i < len; i++)
00055 dst[i] = src[i] * mul;
00056 }
00057
00058 void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
00059 {
00060 fdsp->vector_fmul = vector_fmul_c;
00061 fdsp->vector_fmac_scalar = vector_fmac_scalar_c;
00062 fdsp->vector_fmul_scalar = vector_fmul_scalar_c;
00063 fdsp->vector_dmul_scalar = vector_dmul_scalar_c;
00064
00065 #if ARCH_ARM
00066 ff_float_dsp_init_arm(fdsp);
00067 #elif ARCH_PPC
00068 ff_float_dsp_init_ppc(fdsp, bit_exact);
00069 #elif ARCH_X86
00070 ff_float_dsp_init_x86(fdsp);
00071 #elif ARCH_MIPS
00072 ff_float_dsp_init_mips(fdsp);
00073 #endif
00074 }