1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * This file is part of FFmpeg.
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or modify
5cabdff1aSopenharmony_ci * it under the terms of the GNU General Public License as published by
6cabdff1aSopenharmony_ci * the Free Software Foundation; either version 2 of the License, or
7cabdff1aSopenharmony_ci * (at your option) any later version.
8cabdff1aSopenharmony_ci *
9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12cabdff1aSopenharmony_ci * GNU General Public License for more details.
13cabdff1aSopenharmony_ci *
14cabdff1aSopenharmony_ci * You should have received a copy of the GNU General Public License along
15cabdff1aSopenharmony_ci * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
16cabdff1aSopenharmony_ci * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17cabdff1aSopenharmony_ci */
18cabdff1aSopenharmony_ci
19cabdff1aSopenharmony_ci#include "config.h"
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci#include <float.h>
22cabdff1aSopenharmony_ci#include <stdint.h>
23cabdff1aSopenharmony_ci
24cabdff1aSopenharmony_ci#include "libavutil/float_dsp.h"
25cabdff1aSopenharmony_ci#include "libavutil/internal.h"
26cabdff1aSopenharmony_ci#include "libavutil/mem_internal.h"
27cabdff1aSopenharmony_ci
28cabdff1aSopenharmony_ci#include "checkasm.h"
29cabdff1aSopenharmony_ci
30cabdff1aSopenharmony_ci#define LEN 256
31cabdff1aSopenharmony_ci
32cabdff1aSopenharmony_ci#define randomize_buffer(buf)                 \
33cabdff1aSopenharmony_cido {                                          \
34cabdff1aSopenharmony_ci    int i;                                    \
35cabdff1aSopenharmony_ci    double bmg[2], stddev = 10.0, mean = 0.0; \
36cabdff1aSopenharmony_ci                                              \
37cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i += 2) {            \
38cabdff1aSopenharmony_ci        av_bmg_get(&checkasm_lfg, bmg);       \
39cabdff1aSopenharmony_ci        buf[i]     = bmg[0] * stddev + mean;  \
40cabdff1aSopenharmony_ci        buf[i + 1] = bmg[1] * stddev + mean;  \
41cabdff1aSopenharmony_ci    }                                         \
42cabdff1aSopenharmony_ci} while(0);
43cabdff1aSopenharmony_ci
44cabdff1aSopenharmony_cistatic void test_vector_fmul(const float *src0, const float *src1)
45cabdff1aSopenharmony_ci{
46cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float, cdst, [LEN]);
47cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float, odst, [LEN]);
48cabdff1aSopenharmony_ci    int i;
49cabdff1aSopenharmony_ci
50cabdff1aSopenharmony_ci    declare_func(void, float *dst, const float *src0, const float *src1,
51cabdff1aSopenharmony_ci                 int len);
52cabdff1aSopenharmony_ci
53cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1, LEN);
54cabdff1aSopenharmony_ci    call_new(odst, src0, src1, LEN);
55cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
56cabdff1aSopenharmony_ci        double t = fabs(src0[i]) + fabs(src1[i]) + fabs(src0[i] * src1[i]) + 1.0;
57cabdff1aSopenharmony_ci        if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) {
58cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
59cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
60cabdff1aSopenharmony_ci            fail();
61cabdff1aSopenharmony_ci            break;
62cabdff1aSopenharmony_ci        }
63cabdff1aSopenharmony_ci    }
64cabdff1aSopenharmony_ci    bench_new(odst, src0, src1, LEN);
65cabdff1aSopenharmony_ci}
66cabdff1aSopenharmony_ci
67cabdff1aSopenharmony_cistatic void test_vector_dmul(const double *src0, const double *src1)
68cabdff1aSopenharmony_ci{
69cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, cdst, [LEN]);
70cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, odst, [LEN]);
71cabdff1aSopenharmony_ci    int i;
72cabdff1aSopenharmony_ci
73cabdff1aSopenharmony_ci    declare_func(void, double *dst, const double *src0, const double *src1,
74cabdff1aSopenharmony_ci                 int len);
75cabdff1aSopenharmony_ci
76cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1, LEN);
77cabdff1aSopenharmony_ci    call_new(odst, src0, src1, LEN);
78cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
79cabdff1aSopenharmony_ci        double t = fabs(src0[i]) + fabs(src1[i]) + fabs(src0[i] * src1[i]) + 1.0;
80cabdff1aSopenharmony_ci        if (!double_near_abs_eps(cdst[i], odst[i], t * 2 * DBL_EPSILON)) {
81cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
82cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
83cabdff1aSopenharmony_ci            fail();
84cabdff1aSopenharmony_ci            break;
85cabdff1aSopenharmony_ci        }
86cabdff1aSopenharmony_ci    }
87cabdff1aSopenharmony_ci    bench_new(odst, src0, src1, LEN);
88cabdff1aSopenharmony_ci}
89cabdff1aSopenharmony_ci
90cabdff1aSopenharmony_ci#define ARBITRARY_FMUL_ADD_CONST 0.005
91cabdff1aSopenharmony_cistatic void test_vector_fmul_add(const float *src0, const float *src1, const float *src2)
92cabdff1aSopenharmony_ci{
93cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float, cdst, [LEN]);
94cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float, odst, [LEN]);
95cabdff1aSopenharmony_ci    int i;
96cabdff1aSopenharmony_ci
97cabdff1aSopenharmony_ci    declare_func(void, float *dst, const float *src0, const float *src1,
98cabdff1aSopenharmony_ci                     const float *src2, int len);
99cabdff1aSopenharmony_ci
100cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1, src2, LEN);
101cabdff1aSopenharmony_ci    call_new(odst, src0, src1, src2, LEN);
102cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
103cabdff1aSopenharmony_ci        if (!float_near_abs_eps(cdst[i], odst[i], ARBITRARY_FMUL_ADD_CONST)) {
104cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
105cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
106cabdff1aSopenharmony_ci            fail();
107cabdff1aSopenharmony_ci            break;
108cabdff1aSopenharmony_ci        }
109cabdff1aSopenharmony_ci    }
110cabdff1aSopenharmony_ci    bench_new(odst, src0, src1, src2, LEN);
111cabdff1aSopenharmony_ci}
112cabdff1aSopenharmony_ci
113cabdff1aSopenharmony_cistatic void test_vector_fmul_scalar(const float *src0, const float *src1)
114cabdff1aSopenharmony_ci{
115cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float, cdst, [LEN]);
116cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float, odst, [LEN]);
117cabdff1aSopenharmony_ci    int i;
118cabdff1aSopenharmony_ci
119cabdff1aSopenharmony_ci    declare_func(void, float *dst, const float *src, float mul, int len);
120cabdff1aSopenharmony_ci
121cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1[0], LEN);
122cabdff1aSopenharmony_ci    call_new(odst, src0, src1[0], LEN);
123cabdff1aSopenharmony_ci        for (i = 0; i < LEN; i++) {
124cabdff1aSopenharmony_ci            double t = fabs(src0[i]) + fabs(src1[0]) + fabs(src0[i] * src1[0]) + 1.0;
125cabdff1aSopenharmony_ci            if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) {
126cabdff1aSopenharmony_ci                fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
127cabdff1aSopenharmony_ci                        i, cdst[i], odst[i], cdst[i] - odst[i]);
128cabdff1aSopenharmony_ci                fail();
129cabdff1aSopenharmony_ci                break;
130cabdff1aSopenharmony_ci            }
131cabdff1aSopenharmony_ci        }
132cabdff1aSopenharmony_ci    bench_new(odst, src0, src1[0], LEN);
133cabdff1aSopenharmony_ci}
134cabdff1aSopenharmony_ci
135cabdff1aSopenharmony_ci#define ARBITRARY_FMUL_WINDOW_CONST 0.008
136cabdff1aSopenharmony_cistatic void test_vector_fmul_window(const float *src0, const float *src1, const float *win)
137cabdff1aSopenharmony_ci{
138cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float, cdst, [LEN]);
139cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float, odst, [LEN]);
140cabdff1aSopenharmony_ci    int i;
141cabdff1aSopenharmony_ci
142cabdff1aSopenharmony_ci    declare_func(void, float *dst, const float *src0, const float *src1,
143cabdff1aSopenharmony_ci                 const float *win, int len);
144cabdff1aSopenharmony_ci
145cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1, win, LEN / 2);
146cabdff1aSopenharmony_ci    call_new(odst, src0, src1, win, LEN / 2);
147cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
148cabdff1aSopenharmony_ci        if (!float_near_abs_eps(cdst[i], odst[i], ARBITRARY_FMUL_WINDOW_CONST)) {
149cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
150cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
151cabdff1aSopenharmony_ci            fail();
152cabdff1aSopenharmony_ci            break;
153cabdff1aSopenharmony_ci        }
154cabdff1aSopenharmony_ci    }
155cabdff1aSopenharmony_ci    bench_new(odst, src0, src1, win, LEN / 2);
156cabdff1aSopenharmony_ci}
157cabdff1aSopenharmony_ci
158cabdff1aSopenharmony_ci#define ARBITRARY_FMAC_SCALAR_CONST 0.005
159cabdff1aSopenharmony_cistatic void test_vector_fmac_scalar(const float *src0, const float *src1, const float *src2)
160cabdff1aSopenharmony_ci{
161cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float, cdst, [LEN]);
162cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float, odst, [LEN]);
163cabdff1aSopenharmony_ci    int i;
164cabdff1aSopenharmony_ci
165cabdff1aSopenharmony_ci    declare_func(void, float *dst, const float *src, float mul, int len);
166cabdff1aSopenharmony_ci
167cabdff1aSopenharmony_ci    memcpy(cdst, src2, LEN * sizeof(*src2));
168cabdff1aSopenharmony_ci    memcpy(odst, src2, LEN * sizeof(*src2));
169cabdff1aSopenharmony_ci
170cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1[0], LEN);
171cabdff1aSopenharmony_ci    call_new(odst, src0, src1[0], LEN);
172cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
173cabdff1aSopenharmony_ci        if (!float_near_abs_eps(cdst[i], odst[i], ARBITRARY_FMAC_SCALAR_CONST)) {
174cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
175cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
176cabdff1aSopenharmony_ci            fail();
177cabdff1aSopenharmony_ci            break;
178cabdff1aSopenharmony_ci        }
179cabdff1aSopenharmony_ci    }
180cabdff1aSopenharmony_ci    memcpy(odst, src2, LEN * sizeof(*src2));
181cabdff1aSopenharmony_ci    bench_new(odst, src0, src1[0], LEN);
182cabdff1aSopenharmony_ci}
183cabdff1aSopenharmony_ci
184cabdff1aSopenharmony_cistatic void test_vector_dmul_scalar(const double *src0, const double *src1)
185cabdff1aSopenharmony_ci{
186cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, cdst, [LEN]);
187cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, odst, [LEN]);
188cabdff1aSopenharmony_ci    int i;
189cabdff1aSopenharmony_ci
190cabdff1aSopenharmony_ci    declare_func(void, double *dst, const double *src, double mul, int len);
191cabdff1aSopenharmony_ci
192cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1[0], LEN);
193cabdff1aSopenharmony_ci    call_new(odst, src0, src1[0], LEN);
194cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
195cabdff1aSopenharmony_ci        double t = fabs(src1[0]) + fabs(src0[i]) + fabs(src1[0] * src0[i]) + 1.0;
196cabdff1aSopenharmony_ci        if (!double_near_abs_eps(cdst[i], odst[i], t * 2 * DBL_EPSILON)) {
197cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", i,
198cabdff1aSopenharmony_ci                    cdst[i], odst[i], cdst[i] - odst[i]);
199cabdff1aSopenharmony_ci            fail();
200cabdff1aSopenharmony_ci            break;
201cabdff1aSopenharmony_ci        }
202cabdff1aSopenharmony_ci    }
203cabdff1aSopenharmony_ci    bench_new(odst, src0, src1[0], LEN);
204cabdff1aSopenharmony_ci}
205cabdff1aSopenharmony_ci
206cabdff1aSopenharmony_ci#define ARBITRARY_DMAC_SCALAR_CONST 0.005
207cabdff1aSopenharmony_cistatic void test_vector_dmac_scalar(const double *src0, const double *src1, const double *src2)
208cabdff1aSopenharmony_ci{
209cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, cdst, [LEN]);
210cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, odst, [LEN]);
211cabdff1aSopenharmony_ci    int i;
212cabdff1aSopenharmony_ci
213cabdff1aSopenharmony_ci    declare_func(void, double *dst, const double *src, double mul, int len);
214cabdff1aSopenharmony_ci
215cabdff1aSopenharmony_ci    memcpy(cdst, src2, LEN * sizeof(*src2));
216cabdff1aSopenharmony_ci    memcpy(odst, src2, LEN * sizeof(*src2));
217cabdff1aSopenharmony_ci    call_ref(cdst, src0, src1[0], LEN);
218cabdff1aSopenharmony_ci    call_new(odst, src0, src1[0], LEN);
219cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
220cabdff1aSopenharmony_ci        if (!double_near_abs_eps(cdst[i], odst[i], ARBITRARY_DMAC_SCALAR_CONST)) {
221cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
222cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
223cabdff1aSopenharmony_ci            fail();
224cabdff1aSopenharmony_ci            break;
225cabdff1aSopenharmony_ci        }
226cabdff1aSopenharmony_ci    }
227cabdff1aSopenharmony_ci    memcpy(odst, src2, LEN * sizeof(*src2));
228cabdff1aSopenharmony_ci    bench_new(odst, src0, src1[0], LEN);
229cabdff1aSopenharmony_ci}
230cabdff1aSopenharmony_ci
231cabdff1aSopenharmony_cistatic void test_butterflies_float(const float *src0, const float *src1)
232cabdff1aSopenharmony_ci{
233cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  cdst,  [LEN]);
234cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  odst,  [LEN]);
235cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  cdst1, [LEN]);
236cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  odst1, [LEN]);
237cabdff1aSopenharmony_ci    int i;
238cabdff1aSopenharmony_ci
239cabdff1aSopenharmony_ci    declare_func(void, float *av_restrict src0, float *av_restrict src1,
240cabdff1aSopenharmony_ci    int len);
241cabdff1aSopenharmony_ci
242cabdff1aSopenharmony_ci    memcpy(cdst,  src0, LEN * sizeof(*src0));
243cabdff1aSopenharmony_ci    memcpy(cdst1, src1, LEN * sizeof(*src1));
244cabdff1aSopenharmony_ci    memcpy(odst,  src0, LEN * sizeof(*src0));
245cabdff1aSopenharmony_ci    memcpy(odst1, src1, LEN * sizeof(*src1));
246cabdff1aSopenharmony_ci
247cabdff1aSopenharmony_ci    call_ref(cdst, cdst1, LEN);
248cabdff1aSopenharmony_ci    call_new(odst, odst1, LEN);
249cabdff1aSopenharmony_ci    for (i = 0; i < LEN; i++) {
250cabdff1aSopenharmony_ci        if (!float_near_abs_eps(cdst[i],  odst[i],  FLT_EPSILON) ||
251cabdff1aSopenharmony_ci            !float_near_abs_eps(cdst1[i], odst1[i], FLT_EPSILON)) {
252cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
253cabdff1aSopenharmony_ci                    i, cdst[i], odst[i], cdst[i] - odst[i]);
254cabdff1aSopenharmony_ci            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
255cabdff1aSopenharmony_ci                    i, cdst1[i], odst1[i], cdst1[i] - odst1[i]);
256cabdff1aSopenharmony_ci            fail();
257cabdff1aSopenharmony_ci            break;
258cabdff1aSopenharmony_ci        }
259cabdff1aSopenharmony_ci    }
260cabdff1aSopenharmony_ci    memcpy(odst,  src0, LEN * sizeof(*src0));
261cabdff1aSopenharmony_ci    memcpy(odst1, src1, LEN * sizeof(*src1));
262cabdff1aSopenharmony_ci    bench_new(odst, odst1, LEN);
263cabdff1aSopenharmony_ci}
264cabdff1aSopenharmony_ci
265cabdff1aSopenharmony_ci#define ARBITRARY_SCALARPRODUCT_CONST 0.2
266cabdff1aSopenharmony_cistatic void test_scalarproduct_float(const float *src0, const float *src1)
267cabdff1aSopenharmony_ci{
268cabdff1aSopenharmony_ci    float cprod, oprod;
269cabdff1aSopenharmony_ci
270cabdff1aSopenharmony_ci    declare_func_float(float, const float *src0, const float *src1, int len);
271cabdff1aSopenharmony_ci
272cabdff1aSopenharmony_ci    cprod = call_ref(src0, src1, LEN);
273cabdff1aSopenharmony_ci    oprod = call_new(src0, src1, LEN);
274cabdff1aSopenharmony_ci    if (!float_near_abs_eps(cprod, oprod, ARBITRARY_SCALARPRODUCT_CONST)) {
275cabdff1aSopenharmony_ci        fprintf(stderr, "%- .12f - %- .12f = % .12g\n",
276cabdff1aSopenharmony_ci                cprod, oprod, cprod - oprod);
277cabdff1aSopenharmony_ci        fail();
278cabdff1aSopenharmony_ci    }
279cabdff1aSopenharmony_ci    bench_new(src0, src1, LEN);
280cabdff1aSopenharmony_ci}
281cabdff1aSopenharmony_ci
282cabdff1aSopenharmony_civoid checkasm_check_float_dsp(void)
283cabdff1aSopenharmony_ci{
284cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float,  src0,     [LEN]);
285cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float,  src1,     [LEN]);
286cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(float,  src2,     [LEN]);
287cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  src3,     [LEN]);
288cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  src4,     [LEN]);
289cabdff1aSopenharmony_ci    LOCAL_ALIGNED_16(float,  src5,     [LEN]);
290cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, dbl_src0, [LEN]);
291cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, dbl_src1, [LEN]);
292cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(double, dbl_src2, [LEN]);
293cabdff1aSopenharmony_ci    AVFloatDSPContext *fdsp = avpriv_float_dsp_alloc(1);
294cabdff1aSopenharmony_ci
295cabdff1aSopenharmony_ci    if (!fdsp) {
296cabdff1aSopenharmony_ci        fprintf(stderr, "floatdsp: Out of memory error\n");
297cabdff1aSopenharmony_ci        return;
298cabdff1aSopenharmony_ci    }
299cabdff1aSopenharmony_ci
300cabdff1aSopenharmony_ci    randomize_buffer(src0);
301cabdff1aSopenharmony_ci    randomize_buffer(src1);
302cabdff1aSopenharmony_ci    randomize_buffer(src2);
303cabdff1aSopenharmony_ci    randomize_buffer(src3);
304cabdff1aSopenharmony_ci    randomize_buffer(src4);
305cabdff1aSopenharmony_ci    randomize_buffer(src5);
306cabdff1aSopenharmony_ci    randomize_buffer(dbl_src0);
307cabdff1aSopenharmony_ci    randomize_buffer(dbl_src1);
308cabdff1aSopenharmony_ci    randomize_buffer(dbl_src2);
309cabdff1aSopenharmony_ci
310cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_fmul, "vector_fmul"))
311cabdff1aSopenharmony_ci        test_vector_fmul(src0, src1);
312cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_fmul_add, "vector_fmul_add"))
313cabdff1aSopenharmony_ci        test_vector_fmul_add(src0, src1, src2);
314cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_fmul_scalar, "vector_fmul_scalar"))
315cabdff1aSopenharmony_ci        test_vector_fmul_scalar(src3, src4);
316cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_fmul_reverse, "vector_fmul_reverse"))
317cabdff1aSopenharmony_ci        test_vector_fmul(src0, src1);
318cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_fmul_window, "vector_fmul_window"))
319cabdff1aSopenharmony_ci        test_vector_fmul_window(src3, src4, src5);
320cabdff1aSopenharmony_ci    report("vector_fmul");
321cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_fmac_scalar, "vector_fmac_scalar"))
322cabdff1aSopenharmony_ci        test_vector_fmac_scalar(src0, src1, src2);
323cabdff1aSopenharmony_ci    report("vector_fmac");
324cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_dmul, "vector_dmul"))
325cabdff1aSopenharmony_ci        test_vector_dmul(dbl_src0, dbl_src1);
326cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_dmul_scalar, "vector_dmul_scalar"))
327cabdff1aSopenharmony_ci        test_vector_dmul_scalar(dbl_src0, dbl_src1);
328cabdff1aSopenharmony_ci    report("vector_dmul");
329cabdff1aSopenharmony_ci    if (check_func(fdsp->vector_dmac_scalar, "vector_dmac_scalar"))
330cabdff1aSopenharmony_ci        test_vector_dmac_scalar(dbl_src0, dbl_src1, dbl_src2);
331cabdff1aSopenharmony_ci    report("vector_dmac");
332cabdff1aSopenharmony_ci    if (check_func(fdsp->butterflies_float, "butterflies_float"))
333cabdff1aSopenharmony_ci        test_butterflies_float(src3, src4);
334cabdff1aSopenharmony_ci    report("butterflies_float");
335cabdff1aSopenharmony_ci    if (check_func(fdsp->scalarproduct_float, "scalarproduct_float"))
336cabdff1aSopenharmony_ci        test_scalarproduct_float(src3, src4);
337cabdff1aSopenharmony_ci    report("scalarproduct_float");
338cabdff1aSopenharmony_ci
339cabdff1aSopenharmony_ci    av_freep(&fdsp);
340cabdff1aSopenharmony_ci}
341