30 #define randomize_buffer(buf) \ 33 double bmg[2], stddev = 10.0, mean = 0.0; \ 35 for (i = 0; i < LEN; i += 2) { \ 36 av_bmg_get(&checkasm_lfg, bmg); \ 37 buf[i] = bmg[0] * stddev + mean; \ 38 buf[i + 1] = bmg[1] * stddev + mean; \ 48 declare_func(
void,
float *dst,
const float *src0,
const float *src1,
53 for (i = 0; i <
LEN; i++) {
54 double t = fabs(src0[i]) + fabs(src1[i]) + fabs(src0[i] * src1[i]) + 1.0;
56 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
57 i, cdst[i], odst[i], cdst[i] - odst[i]);
71 declare_func(
void,
double *dst,
const double *src0,
const double *src1,
76 for (i = 0; i <
LEN; i++) {
77 double t = fabs(src0[i]) + fabs(src1[i]) + fabs(src0[i] * src1[i]) + 1.0;
79 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
80 i, cdst[i], odst[i], cdst[i] - odst[i]);
88 #define ARBITRARY_FMUL_ADD_CONST 0.005 95 declare_func(
void,
float *dst,
const float *src0,
const float *src1,
96 const float *src2,
int len);
100 for (i = 0; i <
LEN; i++) {
102 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
103 i, cdst[i], odst[i], cdst[i] - odst[i]);
121 for (i = 0; i <
LEN; i++) {
122 double t = fabs(src0[i]) + fabs(src1[0]) + fabs(src0[i] * src1[0]) + 1.0;
124 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
125 i, cdst[i], odst[i], cdst[i] - odst[i]);
133 #define ARBITRARY_FMUL_WINDOW_CONST 0.008 140 declare_func(
void,
float *dst,
const float *src0,
const float *src1,
141 const float *win,
int len);
145 for (i = 0; i <
LEN; i++) {
147 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
148 i, cdst[i], odst[i], cdst[i] - odst[i]);
153 bench_new(odst, src0, src1, win, LEN / 2);
156 #define ARBITRARY_FMAC_SCALAR_CONST 0.005 165 memcpy(cdst, src2,
LEN *
sizeof(*src2));
166 memcpy(odst, src2,
LEN *
sizeof(*src2));
170 for (i = 0; i <
LEN; i++) {
172 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
173 i, cdst[i], odst[i], cdst[i] - odst[i]);
178 memcpy(odst, src2, LEN *
sizeof(*src2));
192 for (i = 0; i <
LEN; i++) {
193 double t = fabs(src1[0]) + fabs(src0[i]) + fabs(src1[0] * src0[i]) + 1.0;
195 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n", i,
196 cdst[i], odst[i], cdst[i] - odst[i]);
204 #define ARBITRARY_DMAC_SCALAR_CONST 0.005 213 memcpy(cdst, src2,
LEN *
sizeof(*src2));
214 memcpy(odst, src2,
LEN *
sizeof(*src2));
217 for (i = 0; i <
LEN; i++) {
219 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
220 i, cdst[i], odst[i], cdst[i] - odst[i]);
225 memcpy(odst, src2, LEN *
sizeof(*src2));
240 memcpy(cdst, src0,
LEN *
sizeof(*src0));
241 memcpy(cdst1, src1,
LEN *
sizeof(*src1));
242 memcpy(odst, src0,
LEN *
sizeof(*src0));
243 memcpy(odst1, src1,
LEN *
sizeof(*src1));
247 for (i = 0; i <
LEN; i++) {
250 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
251 i, cdst[i], odst[i], cdst[i] - odst[i]);
252 fprintf(stderr,
"%d: %- .12f - %- .12f = % .12g\n",
253 i, cdst1[i], odst1[i], cdst1[i] - odst1[i]);
258 memcpy(odst, src0, LEN *
sizeof(*src0));
259 memcpy(odst1, src1, LEN *
sizeof(*src1));
263 #define ARBITRARY_SCALARPRODUCT_CONST 0.2 273 fprintf(stderr,
"%- .12f - %- .12f = % .12g\n",
274 cprod, oprod, cprod - oprod);
294 fprintf(stderr,
"floatdsp: Out of memory error\n");
332 report(
"butterflies_float");
335 report(
"scalarproduct_float");
float(* scalarproduct_float)(const float *v1, const float *v2, int len)
Calculate the scalar product of two vectors of floats.
static void test_vector_dmac_scalar(const double *src0, const double *src1, const double *src2)
static void test_vector_fmul_scalar(const float *src0, const float *src1)
static float win(SuperEqualizerContext *s, float n, int N)
#define ARBITRARY_FMUL_ADD_CONST
static void test_vector_fmul(const float *src0, const float *src1)
int float_near_abs_eps(float a, float b, float eps)
void checkasm_check_float_dsp(void)
void(* vector_fmac_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float and add to destination vector.
#define ARBITRARY_DMAC_SCALAR_CONST
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats and store the result in a vector of floats...
void(* vector_dmac_scalar)(double *dst, const double *src, double mul, int len)
Multiply a vector of doubles by a scalar double and add to destination vector.
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
void(* vector_dmul_scalar)(double *dst, const double *src, double mul, int len)
Multiply a vector of double by a scalar double.
#define i(width, name, range_min, range_max)
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
#define declare_func(ret,...)
static void test_vector_fmul_window(const float *src0, const float *src1, const float *win)
common internal API header
int double_near_abs_eps(double a, double b, double eps)
#define randomize_buffer(buf)
#define declare_func_float(ret,...)
#define ARBITRARY_FMUL_WINDOW_CONST
static void test_vector_dmul_scalar(const double *src0, const double *src1)
static void test_butterflies_float(const float *src0, const float *src1)
void(* butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
static void test_vector_fmac_scalar(const float *src0, const float *src1, const float *src2)
#define check_func(func,...)
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
static void test_scalarproduct_float(const float *src0, const float *src1)
#define ARBITRARY_FMAC_SCALAR_CONST
#define LOCAL_ALIGNED_32(t, v,...)
#define ARBITRARY_SCALARPRODUCT_CONST
void(* vector_fmul_add)(float *dst, const float *src0, const float *src1, const float *src2, int len)
Calculate the entry wise product of two vectors of floats, add a third vector of floats and store the...
static void test_vector_dmul(const double *src0, const double *src1)
void(* vector_dmul)(double *dst, const double *src0, const double *src1, int len)
Calculate the entry wise product of two vectors of doubles and store the result in a vector of double...
#define LOCAL_ALIGNED_16(t, v,...)
static void test_vector_fmul_add(const float *src0, const float *src1, const float *src2)
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats, and store the result in a vector of floats...