1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2015 Henrik Gramner
3cabdff1aSopenharmony_ci * Copyright (c) 2021 Josh Dekker
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * This file is part of FFmpeg.
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or modify
8cabdff1aSopenharmony_ci * it under the terms of the GNU General Public License as published by
9cabdff1aSopenharmony_ci * the Free Software Foundation; either version 2 of the License, or
10cabdff1aSopenharmony_ci * (at your option) any later version.
11cabdff1aSopenharmony_ci *
12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15cabdff1aSopenharmony_ci * GNU General Public License for more details.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * You should have received a copy of the GNU General Public License along
18cabdff1aSopenharmony_ci * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
19cabdff1aSopenharmony_ci * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20cabdff1aSopenharmony_ci */
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci#include <string.h>
23cabdff1aSopenharmony_ci#include "checkasm.h"
24cabdff1aSopenharmony_ci#include "libavcodec/hevcdsp.h"
25cabdff1aSopenharmony_ci#include "libavutil/common.h"
26cabdff1aSopenharmony_ci#include "libavutil/internal.h"
27cabdff1aSopenharmony_ci#include "libavutil/intreadwrite.h"
28cabdff1aSopenharmony_ci
29cabdff1aSopenharmony_cistatic const uint32_t pixel_mask[] = { 0xffffffff, 0x01ff01ff, 0x03ff03ff, 0x07ff07ff, 0x0fff0fff };
30cabdff1aSopenharmony_cistatic const uint32_t pixel_mask16[] = { 0x00ff00ff, 0x01ff01ff, 0x03ff03ff, 0x07ff07ff, 0x0fff0fff };
31cabdff1aSopenharmony_cistatic const int sizes[] = { -1, 4, 6, 8, 12, 16, 24, 32, 48, 64 };
32cabdff1aSopenharmony_cistatic const int weights[] = { 0, 128, 255, -1 };
33cabdff1aSopenharmony_cistatic const int denoms[] = {0, 7, 12, -1 };
34cabdff1aSopenharmony_cistatic const int offsets[] = {0, 255, -1 };
35cabdff1aSopenharmony_ci
36cabdff1aSopenharmony_ci#define SIZEOF_PIXEL ((bit_depth + 7) / 8)
37cabdff1aSopenharmony_ci#define BUF_SIZE (2 * MAX_PB_SIZE * (2 * 4 + MAX_PB_SIZE))
38cabdff1aSopenharmony_ci
39cabdff1aSopenharmony_ci#define randomize_buffers()                          \
40cabdff1aSopenharmony_ci    do {                                             \
41cabdff1aSopenharmony_ci        uint32_t mask = pixel_mask[bit_depth - 8];   \
42cabdff1aSopenharmony_ci        int k;                                       \
43cabdff1aSopenharmony_ci        for (k = 0; k < BUF_SIZE + SRC_EXTRA; k += 4) { \
44cabdff1aSopenharmony_ci            uint32_t r = rnd() & mask;               \
45cabdff1aSopenharmony_ci            AV_WN32A(buf0 + k, r);                   \
46cabdff1aSopenharmony_ci            AV_WN32A(buf1 + k, r);                   \
47cabdff1aSopenharmony_ci            if (k >= BUF_SIZE)                       \
48cabdff1aSopenharmony_ci                continue;                            \
49cabdff1aSopenharmony_ci            r = rnd();                               \
50cabdff1aSopenharmony_ci            AV_WN32A(dst0 + k, r);                   \
51cabdff1aSopenharmony_ci            AV_WN32A(dst1 + k, r);                   \
52cabdff1aSopenharmony_ci        }                                            \
53cabdff1aSopenharmony_ci    } while (0)
54cabdff1aSopenharmony_ci
55cabdff1aSopenharmony_ci#define randomize_buffers_ref()                      \
56cabdff1aSopenharmony_ci    randomize_buffers();                             \
57cabdff1aSopenharmony_ci    do {                                             \
58cabdff1aSopenharmony_ci        uint32_t mask = pixel_mask16[bit_depth - 8]; \
59cabdff1aSopenharmony_ci        int k;                                       \
60cabdff1aSopenharmony_ci        for (k = 0; k < BUF_SIZE; k += 2) {          \
61cabdff1aSopenharmony_ci            uint32_t r = rnd() & mask;               \
62cabdff1aSopenharmony_ci            AV_WN32A(ref0 + k, r);                   \
63cabdff1aSopenharmony_ci            AV_WN32A(ref1 + k, r);                   \
64cabdff1aSopenharmony_ci        }                                            \
65cabdff1aSopenharmony_ci    } while (0)
66cabdff1aSopenharmony_ci
67cabdff1aSopenharmony_ci#define src0 (buf0 + 2 * 4 * MAX_PB_SIZE) /* hevc qpel functions read data from negative src pointer offsets */
68cabdff1aSopenharmony_ci#define src1 (buf1 + 2 * 4 * MAX_PB_SIZE)
69cabdff1aSopenharmony_ci
70cabdff1aSopenharmony_ci/* FIXME: Does the need for SRC_EXTRA for these tests indicate a bug? */
71cabdff1aSopenharmony_ci#define SRC_EXTRA 8
72cabdff1aSopenharmony_ci
73cabdff1aSopenharmony_cistatic void checkasm_check_hevc_qpel(void)
74cabdff1aSopenharmony_ci{
75cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
76cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
77cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
78cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
79cabdff1aSopenharmony_ci
80cabdff1aSopenharmony_ci    HEVCDSPContext h;
81cabdff1aSopenharmony_ci    int size, bit_depth, i, j, row;
82cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, int16_t *dst, uint8_t *src, ptrdiff_t srcstride,
83cabdff1aSopenharmony_ci                                                                  int height, intptr_t mx, intptr_t my, int width);
84cabdff1aSopenharmony_ci
85cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
86cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
87cabdff1aSopenharmony_ci
88cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
89cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
90cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
91cabdff1aSopenharmony_ci                    const char *type;
92cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
93cabdff1aSopenharmony_ci                    case 0: type = "pel_pixels"; break; // 0 0
94cabdff1aSopenharmony_ci                    case 1: type = "qpel_h"; break; // 0 1
95cabdff1aSopenharmony_ci                    case 2: type = "qpel_v"; break; // 1 0
96cabdff1aSopenharmony_ci                    case 3: type = "qpel_hv"; break; // 1 1
97cabdff1aSopenharmony_ci                    }
98cabdff1aSopenharmony_ci
99cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_qpel[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
100cabdff1aSopenharmony_ci                        int16_t *dstw0 = (int16_t *) dst0, *dstw1 = (int16_t *) dst1;
101cabdff1aSopenharmony_ci                        randomize_buffers();
102cabdff1aSopenharmony_ci                        call_ref(dstw0, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
103cabdff1aSopenharmony_ci                        call_new(dstw1, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
104cabdff1aSopenharmony_ci                        for (row = 0; row < size[sizes]; row++) {
105cabdff1aSopenharmony_ci                            if (memcmp(dstw0 + row * MAX_PB_SIZE, dstw1 + row * MAX_PB_SIZE, sizes[size] * SIZEOF_PIXEL))
106cabdff1aSopenharmony_ci                                fail();
107cabdff1aSopenharmony_ci                        }
108cabdff1aSopenharmony_ci                        bench_new(dstw1, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
109cabdff1aSopenharmony_ci                    }
110cabdff1aSopenharmony_ci                }
111cabdff1aSopenharmony_ci            }
112cabdff1aSopenharmony_ci        }
113cabdff1aSopenharmony_ci    }
114cabdff1aSopenharmony_ci    report("qpel");
115cabdff1aSopenharmony_ci}
116cabdff1aSopenharmony_ci
117cabdff1aSopenharmony_cistatic void checkasm_check_hevc_qpel_uni(void)
118cabdff1aSopenharmony_ci{
119cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
120cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
121cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
122cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
123cabdff1aSopenharmony_ci
124cabdff1aSopenharmony_ci    HEVCDSPContext h;
125cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
126cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
127cabdff1aSopenharmony_ci                                                                  int height, intptr_t mx, intptr_t my, int width);
128cabdff1aSopenharmony_ci
129cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
130cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
131cabdff1aSopenharmony_ci
132cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
133cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
134cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
135cabdff1aSopenharmony_ci                    const char *type;
136cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
137cabdff1aSopenharmony_ci                    case 0: type = "pel_uni_pixels"; break; // 0 0
138cabdff1aSopenharmony_ci                    case 1: type = "qpel_uni_h"; break; // 0 1
139cabdff1aSopenharmony_ci                    case 2: type = "qpel_uni_v"; break; // 1 0
140cabdff1aSopenharmony_ci                    case 3: type = "qpel_uni_hv"; break; // 1 1
141cabdff1aSopenharmony_ci                    }
142cabdff1aSopenharmony_ci
143cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_qpel_uni[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
144cabdff1aSopenharmony_ci                        randomize_buffers();
145cabdff1aSopenharmony_ci                        call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
146cabdff1aSopenharmony_ci                        call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
147cabdff1aSopenharmony_ci                        if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
148cabdff1aSopenharmony_ci                            fail();
149cabdff1aSopenharmony_ci                        bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
150cabdff1aSopenharmony_ci                    }
151cabdff1aSopenharmony_ci                }
152cabdff1aSopenharmony_ci            }
153cabdff1aSopenharmony_ci        }
154cabdff1aSopenharmony_ci    }
155cabdff1aSopenharmony_ci    report("qpel_uni");
156cabdff1aSopenharmony_ci}
157cabdff1aSopenharmony_ci
158cabdff1aSopenharmony_cistatic void checkasm_check_hevc_qpel_uni_w(void)
159cabdff1aSopenharmony_ci{
160cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
161cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
162cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
163cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
164cabdff1aSopenharmony_ci
165cabdff1aSopenharmony_ci    HEVCDSPContext h;
166cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
167cabdff1aSopenharmony_ci    const int *denom, *wx, *ox;
168cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
169cabdff1aSopenharmony_ci                                                                  int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width);
170cabdff1aSopenharmony_ci
171cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
172cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
173cabdff1aSopenharmony_ci
174cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
175cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
176cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
177cabdff1aSopenharmony_ci                    const char *type;
178cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
179cabdff1aSopenharmony_ci                    case 0: type = "pel_uni_w_pixels"; break; // 0 0
180cabdff1aSopenharmony_ci                    case 1: type = "qpel_uni_w_h"; break; // 0 1
181cabdff1aSopenharmony_ci                    case 2: type = "qpel_uni_w_v"; break; // 1 0
182cabdff1aSopenharmony_ci                    case 3: type = "qpel_uni_w_hv"; break; // 1 1
183cabdff1aSopenharmony_ci                    }
184cabdff1aSopenharmony_ci
185cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_qpel_uni_w[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
186cabdff1aSopenharmony_ci                        for (denom = denoms; *denom >= 0; denom++) {
187cabdff1aSopenharmony_ci                            for (wx = weights; *wx >= 0; wx++) {
188cabdff1aSopenharmony_ci                                for (ox = offsets; *ox >= 0; ox++) {
189cabdff1aSopenharmony_ci                                    randomize_buffers();
190cabdff1aSopenharmony_ci                                    call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
191cabdff1aSopenharmony_ci                                    call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
192cabdff1aSopenharmony_ci                                    if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
193cabdff1aSopenharmony_ci                                        fail();
194cabdff1aSopenharmony_ci                                    bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
195cabdff1aSopenharmony_ci                                }
196cabdff1aSopenharmony_ci                            }
197cabdff1aSopenharmony_ci                        }
198cabdff1aSopenharmony_ci                    }
199cabdff1aSopenharmony_ci                }
200cabdff1aSopenharmony_ci            }
201cabdff1aSopenharmony_ci        }
202cabdff1aSopenharmony_ci    }
203cabdff1aSopenharmony_ci    report("qpel_uni_w");
204cabdff1aSopenharmony_ci}
205cabdff1aSopenharmony_ci
206cabdff1aSopenharmony_cistatic void checkasm_check_hevc_qpel_bi(void)
207cabdff1aSopenharmony_ci{
208cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
209cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
210cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
211cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
212cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
213cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
214cabdff1aSopenharmony_ci
215cabdff1aSopenharmony_ci    HEVCDSPContext h;
216cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
217cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
218cabdff1aSopenharmony_ci                                                                  int16_t *src2,
219cabdff1aSopenharmony_ci                                                                  int height, intptr_t mx, intptr_t my, int width);
220cabdff1aSopenharmony_ci
221cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
222cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
223cabdff1aSopenharmony_ci
224cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
225cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
226cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
227cabdff1aSopenharmony_ci                    const char *type;
228cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
229cabdff1aSopenharmony_ci                    case 0: type = "pel_bi_pixels"; break; // 0 0
230cabdff1aSopenharmony_ci                    case 1: type = "qpel_bi_h"; break; // 0 1
231cabdff1aSopenharmony_ci                    case 2: type = "qpel_bi_v"; break; // 1 0
232cabdff1aSopenharmony_ci                    case 3: type = "qpel_bi_hv"; break; // 1 1
233cabdff1aSopenharmony_ci                    }
234cabdff1aSopenharmony_ci
235cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_qpel_bi[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
236cabdff1aSopenharmony_ci                        randomize_buffers_ref();
237cabdff1aSopenharmony_ci                        call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, ref0, sizes[size], i, j, sizes[size]);
238cabdff1aSopenharmony_ci                        call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], i, j, sizes[size]);
239cabdff1aSopenharmony_ci                        if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
240cabdff1aSopenharmony_ci                            fail();
241cabdff1aSopenharmony_ci                        bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], i, j, sizes[size]);
242cabdff1aSopenharmony_ci                    }
243cabdff1aSopenharmony_ci                }
244cabdff1aSopenharmony_ci            }
245cabdff1aSopenharmony_ci        }
246cabdff1aSopenharmony_ci    }
247cabdff1aSopenharmony_ci    report("qpel_bi");
248cabdff1aSopenharmony_ci}
249cabdff1aSopenharmony_ci
250cabdff1aSopenharmony_cistatic void checkasm_check_hevc_qpel_bi_w(void)
251cabdff1aSopenharmony_ci{
252cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE + SRC_EXTRA]);
253cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE + SRC_EXTRA]);
254cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
255cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
256cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
257cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
258cabdff1aSopenharmony_ci
259cabdff1aSopenharmony_ci    HEVCDSPContext h;
260cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
261cabdff1aSopenharmony_ci    const int *denom, *wx, *ox;
262cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
263cabdff1aSopenharmony_ci                                                                  int16_t *src2,
264cabdff1aSopenharmony_ci                                                                  int height, int denom, int wx0, int wx1,
265cabdff1aSopenharmony_ci                                                                  int ox0, int ox1, intptr_t mx, intptr_t my, int width);
266cabdff1aSopenharmony_ci
267cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
268cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
269cabdff1aSopenharmony_ci
270cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
271cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
272cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
273cabdff1aSopenharmony_ci                    const char *type;
274cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
275cabdff1aSopenharmony_ci                    case 0: type = "pel_bi_w_pixels"; break; // 0 0
276cabdff1aSopenharmony_ci                    case 1: type = "qpel_bi_w_h"; break; // 0 1
277cabdff1aSopenharmony_ci                    case 2: type = "qpel_bi_w_v"; break; // 1 0
278cabdff1aSopenharmony_ci                    case 3: type = "qpel_bi_w_hv"; break; // 1 1
279cabdff1aSopenharmony_ci                    }
280cabdff1aSopenharmony_ci
281cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_qpel_bi_w[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
282cabdff1aSopenharmony_ci                        for (denom = denoms; *denom >= 0; denom++) {
283cabdff1aSopenharmony_ci                            for (wx = weights; *wx >= 0; wx++) {
284cabdff1aSopenharmony_ci                                for (ox = offsets; *ox >= 0; ox++) {
285cabdff1aSopenharmony_ci                                    randomize_buffers_ref();
286cabdff1aSopenharmony_ci                                    call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, ref0, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
287cabdff1aSopenharmony_ci                                    call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
288cabdff1aSopenharmony_ci                                    if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
289cabdff1aSopenharmony_ci                                        fail();
290cabdff1aSopenharmony_ci                                    bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
291cabdff1aSopenharmony_ci                                }
292cabdff1aSopenharmony_ci                            }
293cabdff1aSopenharmony_ci                        }
294cabdff1aSopenharmony_ci                    }
295cabdff1aSopenharmony_ci                }
296cabdff1aSopenharmony_ci            }
297cabdff1aSopenharmony_ci        }
298cabdff1aSopenharmony_ci    }
299cabdff1aSopenharmony_ci    report("qpel_bi_w");
300cabdff1aSopenharmony_ci}
301cabdff1aSopenharmony_ci
302cabdff1aSopenharmony_ci#undef SRC_EXTRA
303cabdff1aSopenharmony_ci#define SRC_EXTRA 0
304cabdff1aSopenharmony_ci
305cabdff1aSopenharmony_cistatic void checkasm_check_hevc_epel(void)
306cabdff1aSopenharmony_ci{
307cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
308cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
309cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
310cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
311cabdff1aSopenharmony_ci
312cabdff1aSopenharmony_ci    HEVCDSPContext h;
313cabdff1aSopenharmony_ci    int size, bit_depth, i, j, row;
314cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, int16_t *dst, uint8_t *src, ptrdiff_t srcstride,
315cabdff1aSopenharmony_ci                                                                  int height, intptr_t mx, intptr_t my, int width);
316cabdff1aSopenharmony_ci
317cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
318cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
319cabdff1aSopenharmony_ci
320cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
321cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
322cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
323cabdff1aSopenharmony_ci                    const char *type;
324cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
325cabdff1aSopenharmony_ci                    case 0: type = "pel_pixels"; break; // 0 0
326cabdff1aSopenharmony_ci                    case 1: type = "epel_h"; break; // 0 1
327cabdff1aSopenharmony_ci                    case 2: type = "epel_v"; break; // 1 0
328cabdff1aSopenharmony_ci                    case 3: type = "epel_hv"; break; // 1 1
329cabdff1aSopenharmony_ci                    }
330cabdff1aSopenharmony_ci
331cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_epel[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
332cabdff1aSopenharmony_ci                        int16_t *dstw0 = (int16_t *) dst0, *dstw1 = (int16_t *) dst1;
333cabdff1aSopenharmony_ci                        randomize_buffers();
334cabdff1aSopenharmony_ci                        call_ref(dstw0, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
335cabdff1aSopenharmony_ci                        call_new(dstw1, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
336cabdff1aSopenharmony_ci                        for (row = 0; row < size[sizes]; row++) {
337cabdff1aSopenharmony_ci                            if (memcmp(dstw0 + row * MAX_PB_SIZE, dstw1 + row * MAX_PB_SIZE, sizes[size] * SIZEOF_PIXEL))
338cabdff1aSopenharmony_ci                                fail();
339cabdff1aSopenharmony_ci                        }
340cabdff1aSopenharmony_ci                        bench_new(dstw1, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
341cabdff1aSopenharmony_ci                    }
342cabdff1aSopenharmony_ci                }
343cabdff1aSopenharmony_ci            }
344cabdff1aSopenharmony_ci        }
345cabdff1aSopenharmony_ci    }
346cabdff1aSopenharmony_ci    report("epel");
347cabdff1aSopenharmony_ci}
348cabdff1aSopenharmony_ci
349cabdff1aSopenharmony_cistatic void checkasm_check_hevc_epel_uni(void)
350cabdff1aSopenharmony_ci{
351cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
352cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
353cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
354cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
355cabdff1aSopenharmony_ci
356cabdff1aSopenharmony_ci    HEVCDSPContext h;
357cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
358cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
359cabdff1aSopenharmony_ci                                                                  int height, intptr_t mx, intptr_t my, int width);
360cabdff1aSopenharmony_ci
361cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
362cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
363cabdff1aSopenharmony_ci
364cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
365cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
366cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
367cabdff1aSopenharmony_ci                    const char *type;
368cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
369cabdff1aSopenharmony_ci                    case 0: type = "pel_uni_pixels"; break; // 0 0
370cabdff1aSopenharmony_ci                    case 1: type = "epel_uni_h"; break; // 0 1
371cabdff1aSopenharmony_ci                    case 2: type = "epel_uni_v"; break; // 1 0
372cabdff1aSopenharmony_ci                    case 3: type = "epel_uni_hv"; break; // 1 1
373cabdff1aSopenharmony_ci                    }
374cabdff1aSopenharmony_ci
375cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_epel_uni[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
376cabdff1aSopenharmony_ci                        randomize_buffers();
377cabdff1aSopenharmony_ci                        call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
378cabdff1aSopenharmony_ci                        call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
379cabdff1aSopenharmony_ci                        if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
380cabdff1aSopenharmony_ci                            fail();
381cabdff1aSopenharmony_ci                        bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], i, j, sizes[size]);
382cabdff1aSopenharmony_ci                    }
383cabdff1aSopenharmony_ci                }
384cabdff1aSopenharmony_ci            }
385cabdff1aSopenharmony_ci        }
386cabdff1aSopenharmony_ci    }
387cabdff1aSopenharmony_ci    report("epel_uni");
388cabdff1aSopenharmony_ci}
389cabdff1aSopenharmony_ci
390cabdff1aSopenharmony_cistatic void checkasm_check_hevc_epel_uni_w(void)
391cabdff1aSopenharmony_ci{
392cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
393cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
394cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
395cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
396cabdff1aSopenharmony_ci
397cabdff1aSopenharmony_ci    HEVCDSPContext h;
398cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
399cabdff1aSopenharmony_ci    const int *denom, *wx, *ox;
400cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
401cabdff1aSopenharmony_ci                                                                  int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width);
402cabdff1aSopenharmony_ci
403cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
404cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
405cabdff1aSopenharmony_ci
406cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
407cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
408cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
409cabdff1aSopenharmony_ci                    const char *type;
410cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
411cabdff1aSopenharmony_ci                    case 0: type = "pel_uni_w_pixels"; break; // 0 0
412cabdff1aSopenharmony_ci                    case 1: type = "epel_uni_w_h"; break; // 0 1
413cabdff1aSopenharmony_ci                    case 2: type = "epel_uni_w_v"; break; // 1 0
414cabdff1aSopenharmony_ci                    case 3: type = "epel_uni_w_hv"; break; // 1 1
415cabdff1aSopenharmony_ci                    }
416cabdff1aSopenharmony_ci
417cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_epel_uni_w[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
418cabdff1aSopenharmony_ci                        for (denom = denoms; *denom >= 0; denom++) {
419cabdff1aSopenharmony_ci                            for (wx = weights; *wx >= 0; wx++) {
420cabdff1aSopenharmony_ci                                for (ox = offsets; *ox >= 0; ox++) {
421cabdff1aSopenharmony_ci                                    randomize_buffers();
422cabdff1aSopenharmony_ci                                    call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
423cabdff1aSopenharmony_ci                                    call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
424cabdff1aSopenharmony_ci                                    if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
425cabdff1aSopenharmony_ci                                        fail();
426cabdff1aSopenharmony_ci                                    bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, sizes[size], *denom, *wx, *ox, i, j, sizes[size]);
427cabdff1aSopenharmony_ci                                }
428cabdff1aSopenharmony_ci                            }
429cabdff1aSopenharmony_ci                        }
430cabdff1aSopenharmony_ci                    }
431cabdff1aSopenharmony_ci                }
432cabdff1aSopenharmony_ci            }
433cabdff1aSopenharmony_ci        }
434cabdff1aSopenharmony_ci    }
435cabdff1aSopenharmony_ci    report("epel_uni_w");
436cabdff1aSopenharmony_ci}
437cabdff1aSopenharmony_ci
438cabdff1aSopenharmony_cistatic void checkasm_check_hevc_epel_bi(void)
439cabdff1aSopenharmony_ci{
440cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
441cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
442cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
443cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
444cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
445cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
446cabdff1aSopenharmony_ci
447cabdff1aSopenharmony_ci    HEVCDSPContext h;
448cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
449cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
450cabdff1aSopenharmony_ci                                                                  int16_t *src2,
451cabdff1aSopenharmony_ci                                                                  int height, intptr_t mx, intptr_t my, int width);
452cabdff1aSopenharmony_ci
453cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
454cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
455cabdff1aSopenharmony_ci
456cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
457cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
458cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
459cabdff1aSopenharmony_ci                    const char *type;
460cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
461cabdff1aSopenharmony_ci                    case 0: type = "pel_bi_pixels"; break; // 0 0
462cabdff1aSopenharmony_ci                    case 1: type = "epel_bi_h"; break; // 0 1
463cabdff1aSopenharmony_ci                    case 2: type = "epel_bi_v"; break; // 1 0
464cabdff1aSopenharmony_ci                    case 3: type = "epel_bi_hv"; break; // 1 1
465cabdff1aSopenharmony_ci                    }
466cabdff1aSopenharmony_ci
467cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_epel_bi[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
468cabdff1aSopenharmony_ci                        randomize_buffers_ref();
469cabdff1aSopenharmony_ci                        call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, ref0, sizes[size], i, j, sizes[size]);
470cabdff1aSopenharmony_ci                        call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], i, j, sizes[size]);
471cabdff1aSopenharmony_ci                        if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
472cabdff1aSopenharmony_ci                            fail();
473cabdff1aSopenharmony_ci                        bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], i, j, sizes[size]);
474cabdff1aSopenharmony_ci                    }
475cabdff1aSopenharmony_ci                }
476cabdff1aSopenharmony_ci            }
477cabdff1aSopenharmony_ci        }
478cabdff1aSopenharmony_ci    }
479cabdff1aSopenharmony_ci    report("epel_bi");
480cabdff1aSopenharmony_ci}
481cabdff1aSopenharmony_ci
482cabdff1aSopenharmony_cistatic void checkasm_check_hevc_epel_bi_w(void)
483cabdff1aSopenharmony_ci{
484cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
485cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
486cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst0, [BUF_SIZE]);
487cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(uint8_t, dst1, [BUF_SIZE]);
488cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref0, [BUF_SIZE]);
489cabdff1aSopenharmony_ci    LOCAL_ALIGNED_32(int16_t, ref1, [BUF_SIZE]);
490cabdff1aSopenharmony_ci
491cabdff1aSopenharmony_ci    HEVCDSPContext h;
492cabdff1aSopenharmony_ci    int size, bit_depth, i, j;
493cabdff1aSopenharmony_ci    const int *denom, *wx, *ox;
494cabdff1aSopenharmony_ci    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
495cabdff1aSopenharmony_ci                                                                  int16_t *src2,
496cabdff1aSopenharmony_ci                                                                  int height, int denom, int wx0, int wx1,
497cabdff1aSopenharmony_ci                                                                  int ox0, int ox1, intptr_t mx, intptr_t my, int width);
498cabdff1aSopenharmony_ci
499cabdff1aSopenharmony_ci    for (bit_depth = 8; bit_depth <= 12; bit_depth++) {
500cabdff1aSopenharmony_ci        ff_hevc_dsp_init(&h, bit_depth);
501cabdff1aSopenharmony_ci
502cabdff1aSopenharmony_ci        for (i = 0; i < 2; i++) {
503cabdff1aSopenharmony_ci            for (j = 0; j < 2; j++) {
504cabdff1aSopenharmony_ci                for (size = 1; size < 10; size++) {
505cabdff1aSopenharmony_ci                    const char *type;
506cabdff1aSopenharmony_ci                    switch ((j << 1) | i) {
507cabdff1aSopenharmony_ci                    case 0: type = "pel_bi_w_pixels"; break; // 0 0
508cabdff1aSopenharmony_ci                    case 1: type = "epel_bi_w_h"; break; // 0 1
509cabdff1aSopenharmony_ci                    case 2: type = "epel_bi_w_v"; break; // 1 0
510cabdff1aSopenharmony_ci                    case 3: type = "epel_bi_w_hv"; break; // 1 1
511cabdff1aSopenharmony_ci                    }
512cabdff1aSopenharmony_ci
513cabdff1aSopenharmony_ci                    if (check_func(h.put_hevc_epel_bi_w[size][j][i], "put_hevc_%s%d_%d", type, sizes[size], bit_depth)) {
514cabdff1aSopenharmony_ci                        for (denom = denoms; *denom >= 0; denom++) {
515cabdff1aSopenharmony_ci                            for (wx = weights; *wx >= 0; wx++) {
516cabdff1aSopenharmony_ci                                for (ox = offsets; *ox >= 0; ox++) {
517cabdff1aSopenharmony_ci                                    randomize_buffers_ref();
518cabdff1aSopenharmony_ci                                    call_ref(dst0, sizes[size] * SIZEOF_PIXEL, src0, sizes[size] * SIZEOF_PIXEL, ref0, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
519cabdff1aSopenharmony_ci                                    call_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
520cabdff1aSopenharmony_ci                                    if (memcmp(dst0, dst1, sizes[size] * sizes[size] * SIZEOF_PIXEL))
521cabdff1aSopenharmony_ci                                        fail();
522cabdff1aSopenharmony_ci                                    bench_new(dst1, sizes[size] * SIZEOF_PIXEL, src1, sizes[size] * SIZEOF_PIXEL, ref1, sizes[size], *denom, *wx, *wx, *ox, *ox, i, j, sizes[size]);
523cabdff1aSopenharmony_ci                                }
524cabdff1aSopenharmony_ci                            }
525cabdff1aSopenharmony_ci                        }
526cabdff1aSopenharmony_ci                    }
527cabdff1aSopenharmony_ci                }
528cabdff1aSopenharmony_ci            }
529cabdff1aSopenharmony_ci        }
530cabdff1aSopenharmony_ci    }
531cabdff1aSopenharmony_ci    report("epel_bi_w");
532cabdff1aSopenharmony_ci}
533cabdff1aSopenharmony_ci
534cabdff1aSopenharmony_civoid checkasm_check_hevc_pel(void)
535cabdff1aSopenharmony_ci{
536cabdff1aSopenharmony_ci    checkasm_check_hevc_qpel();
537cabdff1aSopenharmony_ci    checkasm_check_hevc_qpel_uni();
538cabdff1aSopenharmony_ci    checkasm_check_hevc_qpel_uni_w();
539cabdff1aSopenharmony_ci    checkasm_check_hevc_qpel_bi();
540cabdff1aSopenharmony_ci    checkasm_check_hevc_qpel_bi_w();
541cabdff1aSopenharmony_ci    checkasm_check_hevc_epel();
542cabdff1aSopenharmony_ci    checkasm_check_hevc_epel_uni();
543cabdff1aSopenharmony_ci    checkasm_check_hevc_epel_uni_w();
544cabdff1aSopenharmony_ci    checkasm_check_hevc_epel_bi();
545cabdff1aSopenharmony_ci    checkasm_check_hevc_epel_bi_w();
546cabdff1aSopenharmony_ci}
547