1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com)
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * This file is part of FFmpeg.
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14cabdff1aSopenharmony_ci * Lesser General Public License for more details.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19cabdff1aSopenharmony_ci */
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci#ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H
22cabdff1aSopenharmony_ci#define AVCODEC_MIPS_HEVCDSP_MIPS_H
23cabdff1aSopenharmony_ci
24cabdff1aSopenharmony_ci#include "libavcodec/hevcdsp.h"
25cabdff1aSopenharmony_ci
26cabdff1aSopenharmony_ci#define MC(PEL, DIR, WIDTH)                                                 \
27cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_msa(int16_t *dst,            \
28cabdff1aSopenharmony_ci                                                     uint8_t *src,          \
29cabdff1aSopenharmony_ci                                                     ptrdiff_t src_stride,  \
30cabdff1aSopenharmony_ci                                                     int height,            \
31cabdff1aSopenharmony_ci                                                     intptr_t mx,           \
32cabdff1aSopenharmony_ci                                                     intptr_t my,           \
33cabdff1aSopenharmony_ci                                                     int width)
34cabdff1aSopenharmony_ci
35cabdff1aSopenharmony_ciMC(pel, pixels, 4);
36cabdff1aSopenharmony_ciMC(pel, pixels, 6);
37cabdff1aSopenharmony_ciMC(pel, pixels, 8);
38cabdff1aSopenharmony_ciMC(pel, pixels, 12);
39cabdff1aSopenharmony_ciMC(pel, pixels, 16);
40cabdff1aSopenharmony_ciMC(pel, pixels, 24);
41cabdff1aSopenharmony_ciMC(pel, pixels, 32);
42cabdff1aSopenharmony_ciMC(pel, pixels, 48);
43cabdff1aSopenharmony_ciMC(pel, pixels, 64);
44cabdff1aSopenharmony_ci
45cabdff1aSopenharmony_ciMC(qpel, h, 4);
46cabdff1aSopenharmony_ciMC(qpel, h, 8);
47cabdff1aSopenharmony_ciMC(qpel, h, 12);
48cabdff1aSopenharmony_ciMC(qpel, h, 16);
49cabdff1aSopenharmony_ciMC(qpel, h, 24);
50cabdff1aSopenharmony_ciMC(qpel, h, 32);
51cabdff1aSopenharmony_ciMC(qpel, h, 48);
52cabdff1aSopenharmony_ciMC(qpel, h, 64);
53cabdff1aSopenharmony_ci
54cabdff1aSopenharmony_ciMC(qpel, v, 4);
55cabdff1aSopenharmony_ciMC(qpel, v, 8);
56cabdff1aSopenharmony_ciMC(qpel, v, 12);
57cabdff1aSopenharmony_ciMC(qpel, v, 16);
58cabdff1aSopenharmony_ciMC(qpel, v, 24);
59cabdff1aSopenharmony_ciMC(qpel, v, 32);
60cabdff1aSopenharmony_ciMC(qpel, v, 48);
61cabdff1aSopenharmony_ciMC(qpel, v, 64);
62cabdff1aSopenharmony_ci
63cabdff1aSopenharmony_ciMC(qpel, hv, 4);
64cabdff1aSopenharmony_ciMC(qpel, hv, 8);
65cabdff1aSopenharmony_ciMC(qpel, hv, 12);
66cabdff1aSopenharmony_ciMC(qpel, hv, 16);
67cabdff1aSopenharmony_ciMC(qpel, hv, 24);
68cabdff1aSopenharmony_ciMC(qpel, hv, 32);
69cabdff1aSopenharmony_ciMC(qpel, hv, 48);
70cabdff1aSopenharmony_ciMC(qpel, hv, 64);
71cabdff1aSopenharmony_ci
72cabdff1aSopenharmony_ciMC(epel, h, 4);
73cabdff1aSopenharmony_ciMC(epel, h, 6);
74cabdff1aSopenharmony_ciMC(epel, h, 8);
75cabdff1aSopenharmony_ciMC(epel, h, 12);
76cabdff1aSopenharmony_ciMC(epel, h, 16);
77cabdff1aSopenharmony_ciMC(epel, h, 24);
78cabdff1aSopenharmony_ciMC(epel, h, 32);
79cabdff1aSopenharmony_ciMC(epel, h, 48);
80cabdff1aSopenharmony_ciMC(epel, h, 64);
81cabdff1aSopenharmony_ci
82cabdff1aSopenharmony_ciMC(epel, v, 4);
83cabdff1aSopenharmony_ciMC(epel, v, 6);
84cabdff1aSopenharmony_ciMC(epel, v, 8);
85cabdff1aSopenharmony_ciMC(epel, v, 12);
86cabdff1aSopenharmony_ciMC(epel, v, 16);
87cabdff1aSopenharmony_ciMC(epel, v, 24);
88cabdff1aSopenharmony_ciMC(epel, v, 32);
89cabdff1aSopenharmony_ciMC(epel, v, 48);
90cabdff1aSopenharmony_ciMC(epel, v, 64);
91cabdff1aSopenharmony_ci
92cabdff1aSopenharmony_ciMC(epel, hv, 4);
93cabdff1aSopenharmony_ciMC(epel, hv, 6);
94cabdff1aSopenharmony_ciMC(epel, hv, 8);
95cabdff1aSopenharmony_ciMC(epel, hv, 12);
96cabdff1aSopenharmony_ciMC(epel, hv, 16);
97cabdff1aSopenharmony_ciMC(epel, hv, 24);
98cabdff1aSopenharmony_ciMC(epel, hv, 32);
99cabdff1aSopenharmony_ciMC(epel, hv, 48);
100cabdff1aSopenharmony_ciMC(epel, hv, 64);
101cabdff1aSopenharmony_ci
102cabdff1aSopenharmony_ci#undef MC
103cabdff1aSopenharmony_ci
104cabdff1aSopenharmony_ci#define UNI_MC(PEL, DIR, WIDTH)                                                \
105cabdff1aSopenharmony_civoid ff_hevc_put_hevc_uni_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst,           \
106cabdff1aSopenharmony_ci                                                         ptrdiff_t dst_stride, \
107cabdff1aSopenharmony_ci                                                         uint8_t *src,         \
108cabdff1aSopenharmony_ci                                                         ptrdiff_t src_stride, \
109cabdff1aSopenharmony_ci                                                         int height,           \
110cabdff1aSopenharmony_ci                                                         intptr_t mx,          \
111cabdff1aSopenharmony_ci                                                         intptr_t my,          \
112cabdff1aSopenharmony_ci                                                         int width)
113cabdff1aSopenharmony_ci
114cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 4);
115cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 6);
116cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 8);
117cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 12);
118cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 16);
119cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 24);
120cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 32);
121cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 48);
122cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 64);
123cabdff1aSopenharmony_ci
124cabdff1aSopenharmony_ciUNI_MC(qpel, h, 4);
125cabdff1aSopenharmony_ciUNI_MC(qpel, h, 8);
126cabdff1aSopenharmony_ciUNI_MC(qpel, h, 12);
127cabdff1aSopenharmony_ciUNI_MC(qpel, h, 16);
128cabdff1aSopenharmony_ciUNI_MC(qpel, h, 24);
129cabdff1aSopenharmony_ciUNI_MC(qpel, h, 32);
130cabdff1aSopenharmony_ciUNI_MC(qpel, h, 48);
131cabdff1aSopenharmony_ciUNI_MC(qpel, h, 64);
132cabdff1aSopenharmony_ci
133cabdff1aSopenharmony_ciUNI_MC(qpel, v, 4);
134cabdff1aSopenharmony_ciUNI_MC(qpel, v, 8);
135cabdff1aSopenharmony_ciUNI_MC(qpel, v, 12);
136cabdff1aSopenharmony_ciUNI_MC(qpel, v, 16);
137cabdff1aSopenharmony_ciUNI_MC(qpel, v, 24);
138cabdff1aSopenharmony_ciUNI_MC(qpel, v, 32);
139cabdff1aSopenharmony_ciUNI_MC(qpel, v, 48);
140cabdff1aSopenharmony_ciUNI_MC(qpel, v, 64);
141cabdff1aSopenharmony_ci
142cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 4);
143cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 8);
144cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 12);
145cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 16);
146cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 24);
147cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 32);
148cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 48);
149cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 64);
150cabdff1aSopenharmony_ci
151cabdff1aSopenharmony_ciUNI_MC(epel, h, 4);
152cabdff1aSopenharmony_ciUNI_MC(epel, h, 6);
153cabdff1aSopenharmony_ciUNI_MC(epel, h, 8);
154cabdff1aSopenharmony_ciUNI_MC(epel, h, 12);
155cabdff1aSopenharmony_ciUNI_MC(epel, h, 16);
156cabdff1aSopenharmony_ciUNI_MC(epel, h, 24);
157cabdff1aSopenharmony_ciUNI_MC(epel, h, 32);
158cabdff1aSopenharmony_ciUNI_MC(epel, h, 48);
159cabdff1aSopenharmony_ciUNI_MC(epel, h, 64);
160cabdff1aSopenharmony_ci
161cabdff1aSopenharmony_ciUNI_MC(epel, v, 4);
162cabdff1aSopenharmony_ciUNI_MC(epel, v, 6);
163cabdff1aSopenharmony_ciUNI_MC(epel, v, 8);
164cabdff1aSopenharmony_ciUNI_MC(epel, v, 12);
165cabdff1aSopenharmony_ciUNI_MC(epel, v, 16);
166cabdff1aSopenharmony_ciUNI_MC(epel, v, 24);
167cabdff1aSopenharmony_ciUNI_MC(epel, v, 32);
168cabdff1aSopenharmony_ciUNI_MC(epel, v, 48);
169cabdff1aSopenharmony_ciUNI_MC(epel, v, 64);
170cabdff1aSopenharmony_ci
171cabdff1aSopenharmony_ciUNI_MC(epel, hv, 4);
172cabdff1aSopenharmony_ciUNI_MC(epel, hv, 6);
173cabdff1aSopenharmony_ciUNI_MC(epel, hv, 8);
174cabdff1aSopenharmony_ciUNI_MC(epel, hv, 12);
175cabdff1aSopenharmony_ciUNI_MC(epel, hv, 16);
176cabdff1aSopenharmony_ciUNI_MC(epel, hv, 24);
177cabdff1aSopenharmony_ciUNI_MC(epel, hv, 32);
178cabdff1aSopenharmony_ciUNI_MC(epel, hv, 48);
179cabdff1aSopenharmony_ciUNI_MC(epel, hv, 64);
180cabdff1aSopenharmony_ci
181cabdff1aSopenharmony_ci#undef UNI_MC
182cabdff1aSopenharmony_ci
183cabdff1aSopenharmony_ci#define UNI_W_MC(PEL, DIR, WIDTH)                                         \
184cabdff1aSopenharmony_civoid ff_hevc_put_hevc_uni_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst,    \
185cabdff1aSopenharmony_ci                                                           ptrdiff_t      \
186cabdff1aSopenharmony_ci                                                           dst_stride,    \
187cabdff1aSopenharmony_ci                                                           uint8_t *src,  \
188cabdff1aSopenharmony_ci                                                           ptrdiff_t      \
189cabdff1aSopenharmony_ci                                                           src_stride,    \
190cabdff1aSopenharmony_ci                                                           int height,    \
191cabdff1aSopenharmony_ci                                                           int denom,     \
192cabdff1aSopenharmony_ci                                                           int weight,    \
193cabdff1aSopenharmony_ci                                                           int offset,    \
194cabdff1aSopenharmony_ci                                                           intptr_t mx,   \
195cabdff1aSopenharmony_ci                                                           intptr_t my,   \
196cabdff1aSopenharmony_ci                                                           int width)
197cabdff1aSopenharmony_ci
198cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 4);
199cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 6);
200cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 8);
201cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 12);
202cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 16);
203cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 24);
204cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 32);
205cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 48);
206cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 64);
207cabdff1aSopenharmony_ci
208cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 4);
209cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 8);
210cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 12);
211cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 16);
212cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 24);
213cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 32);
214cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 48);
215cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 64);
216cabdff1aSopenharmony_ci
217cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 4);
218cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 8);
219cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 12);
220cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 16);
221cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 24);
222cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 32);
223cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 48);
224cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 64);
225cabdff1aSopenharmony_ci
226cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 4);
227cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 8);
228cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 12);
229cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 16);
230cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 24);
231cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 32);
232cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 48);
233cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 64);
234cabdff1aSopenharmony_ci
235cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 4);
236cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 6);
237cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 8);
238cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 12);
239cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 16);
240cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 24);
241cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 32);
242cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 48);
243cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 64);
244cabdff1aSopenharmony_ci
245cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 4);
246cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 6);
247cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 8);
248cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 12);
249cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 16);
250cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 24);
251cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 32);
252cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 48);
253cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 64);
254cabdff1aSopenharmony_ci
255cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 4);
256cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 6);
257cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 8);
258cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 12);
259cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 16);
260cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 24);
261cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 32);
262cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 48);
263cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 64);
264cabdff1aSopenharmony_ci
265cabdff1aSopenharmony_ci#undef UNI_W_MC
266cabdff1aSopenharmony_ci
267cabdff1aSopenharmony_ci#define BI_MC(PEL, DIR, WIDTH)                                                 \
268cabdff1aSopenharmony_civoid ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst,            \
269cabdff1aSopenharmony_ci                                                        ptrdiff_t dst_stride,  \
270cabdff1aSopenharmony_ci                                                        uint8_t *src,          \
271cabdff1aSopenharmony_ci                                                        ptrdiff_t src_stride,  \
272cabdff1aSopenharmony_ci                                                        int16_t *src_16bit,    \
273cabdff1aSopenharmony_ci                                                        int height,            \
274cabdff1aSopenharmony_ci                                                        intptr_t mx,           \
275cabdff1aSopenharmony_ci                                                        intptr_t my,           \
276cabdff1aSopenharmony_ci                                                        int width)
277cabdff1aSopenharmony_ci
278cabdff1aSopenharmony_ciBI_MC(pel, pixels, 4);
279cabdff1aSopenharmony_ciBI_MC(pel, pixels, 6);
280cabdff1aSopenharmony_ciBI_MC(pel, pixels, 8);
281cabdff1aSopenharmony_ciBI_MC(pel, pixels, 12);
282cabdff1aSopenharmony_ciBI_MC(pel, pixels, 16);
283cabdff1aSopenharmony_ciBI_MC(pel, pixels, 24);
284cabdff1aSopenharmony_ciBI_MC(pel, pixels, 32);
285cabdff1aSopenharmony_ciBI_MC(pel, pixels, 48);
286cabdff1aSopenharmony_ciBI_MC(pel, pixels, 64);
287cabdff1aSopenharmony_ci
288cabdff1aSopenharmony_ciBI_MC(qpel, h, 4);
289cabdff1aSopenharmony_ciBI_MC(qpel, h, 8);
290cabdff1aSopenharmony_ciBI_MC(qpel, h, 12);
291cabdff1aSopenharmony_ciBI_MC(qpel, h, 16);
292cabdff1aSopenharmony_ciBI_MC(qpel, h, 24);
293cabdff1aSopenharmony_ciBI_MC(qpel, h, 32);
294cabdff1aSopenharmony_ciBI_MC(qpel, h, 48);
295cabdff1aSopenharmony_ciBI_MC(qpel, h, 64);
296cabdff1aSopenharmony_ci
297cabdff1aSopenharmony_ciBI_MC(qpel, v, 4);
298cabdff1aSopenharmony_ciBI_MC(qpel, v, 8);
299cabdff1aSopenharmony_ciBI_MC(qpel, v, 12);
300cabdff1aSopenharmony_ciBI_MC(qpel, v, 16);
301cabdff1aSopenharmony_ciBI_MC(qpel, v, 24);
302cabdff1aSopenharmony_ciBI_MC(qpel, v, 32);
303cabdff1aSopenharmony_ciBI_MC(qpel, v, 48);
304cabdff1aSopenharmony_ciBI_MC(qpel, v, 64);
305cabdff1aSopenharmony_ci
306cabdff1aSopenharmony_ciBI_MC(qpel, hv, 4);
307cabdff1aSopenharmony_ciBI_MC(qpel, hv, 8);
308cabdff1aSopenharmony_ciBI_MC(qpel, hv, 12);
309cabdff1aSopenharmony_ciBI_MC(qpel, hv, 16);
310cabdff1aSopenharmony_ciBI_MC(qpel, hv, 24);
311cabdff1aSopenharmony_ciBI_MC(qpel, hv, 32);
312cabdff1aSopenharmony_ciBI_MC(qpel, hv, 48);
313cabdff1aSopenharmony_ciBI_MC(qpel, hv, 64);
314cabdff1aSopenharmony_ci
315cabdff1aSopenharmony_ciBI_MC(epel, h, 4);
316cabdff1aSopenharmony_ciBI_MC(epel, h, 6);
317cabdff1aSopenharmony_ciBI_MC(epel, h, 8);
318cabdff1aSopenharmony_ciBI_MC(epel, h, 12);
319cabdff1aSopenharmony_ciBI_MC(epel, h, 16);
320cabdff1aSopenharmony_ciBI_MC(epel, h, 24);
321cabdff1aSopenharmony_ciBI_MC(epel, h, 32);
322cabdff1aSopenharmony_ciBI_MC(epel, h, 48);
323cabdff1aSopenharmony_ciBI_MC(epel, h, 64);
324cabdff1aSopenharmony_ci
325cabdff1aSopenharmony_ciBI_MC(epel, v, 4);
326cabdff1aSopenharmony_ciBI_MC(epel, v, 6);
327cabdff1aSopenharmony_ciBI_MC(epel, v, 8);
328cabdff1aSopenharmony_ciBI_MC(epel, v, 12);
329cabdff1aSopenharmony_ciBI_MC(epel, v, 16);
330cabdff1aSopenharmony_ciBI_MC(epel, v, 24);
331cabdff1aSopenharmony_ciBI_MC(epel, v, 32);
332cabdff1aSopenharmony_ciBI_MC(epel, v, 48);
333cabdff1aSopenharmony_ciBI_MC(epel, v, 64);
334cabdff1aSopenharmony_ci
335cabdff1aSopenharmony_ciBI_MC(epel, hv, 4);
336cabdff1aSopenharmony_ciBI_MC(epel, hv, 6);
337cabdff1aSopenharmony_ciBI_MC(epel, hv, 8);
338cabdff1aSopenharmony_ciBI_MC(epel, hv, 12);
339cabdff1aSopenharmony_ciBI_MC(epel, hv, 16);
340cabdff1aSopenharmony_ciBI_MC(epel, hv, 24);
341cabdff1aSopenharmony_ciBI_MC(epel, hv, 32);
342cabdff1aSopenharmony_ciBI_MC(epel, hv, 48);
343cabdff1aSopenharmony_ciBI_MC(epel, hv, 64);
344cabdff1aSopenharmony_ci
345cabdff1aSopenharmony_ci#undef BI_MC
346cabdff1aSopenharmony_ci
347cabdff1aSopenharmony_ci#define BI_W_MC(PEL, DIR, WIDTH)                                               \
348cabdff1aSopenharmony_civoid ff_hevc_put_hevc_bi_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst,          \
349cabdff1aSopenharmony_ci                                                          ptrdiff_t            \
350cabdff1aSopenharmony_ci                                                          dst_stride,          \
351cabdff1aSopenharmony_ci                                                          uint8_t *src,        \
352cabdff1aSopenharmony_ci                                                          ptrdiff_t            \
353cabdff1aSopenharmony_ci                                                          src_stride,          \
354cabdff1aSopenharmony_ci                                                          int16_t *src_16bit,  \
355cabdff1aSopenharmony_ci                                                          int height,          \
356cabdff1aSopenharmony_ci                                                          int denom,           \
357cabdff1aSopenharmony_ci                                                          int weight0,         \
358cabdff1aSopenharmony_ci                                                          int weight1,         \
359cabdff1aSopenharmony_ci                                                          int offset0,         \
360cabdff1aSopenharmony_ci                                                          int offset1,         \
361cabdff1aSopenharmony_ci                                                          intptr_t mx,         \
362cabdff1aSopenharmony_ci                                                          intptr_t my,         \
363cabdff1aSopenharmony_ci                                                          int width)
364cabdff1aSopenharmony_ci
365cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 4);
366cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 6);
367cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 8);
368cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 12);
369cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 16);
370cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 24);
371cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 32);
372cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 48);
373cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 64);
374cabdff1aSopenharmony_ci
375cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 4);
376cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 8);
377cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 12);
378cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 16);
379cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 24);
380cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 32);
381cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 48);
382cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 64);
383cabdff1aSopenharmony_ci
384cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 4);
385cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 8);
386cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 12);
387cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 16);
388cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 24);
389cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 32);
390cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 48);
391cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 64);
392cabdff1aSopenharmony_ci
393cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 4);
394cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 8);
395cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 12);
396cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 16);
397cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 24);
398cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 32);
399cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 48);
400cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 64);
401cabdff1aSopenharmony_ci
402cabdff1aSopenharmony_ciBI_W_MC(epel, h, 4);
403cabdff1aSopenharmony_ciBI_W_MC(epel, h, 6);
404cabdff1aSopenharmony_ciBI_W_MC(epel, h, 8);
405cabdff1aSopenharmony_ciBI_W_MC(epel, h, 12);
406cabdff1aSopenharmony_ciBI_W_MC(epel, h, 16);
407cabdff1aSopenharmony_ciBI_W_MC(epel, h, 24);
408cabdff1aSopenharmony_ciBI_W_MC(epel, h, 32);
409cabdff1aSopenharmony_ciBI_W_MC(epel, h, 48);
410cabdff1aSopenharmony_ciBI_W_MC(epel, h, 64);
411cabdff1aSopenharmony_ci
412cabdff1aSopenharmony_ciBI_W_MC(epel, v, 4);
413cabdff1aSopenharmony_ciBI_W_MC(epel, v, 6);
414cabdff1aSopenharmony_ciBI_W_MC(epel, v, 8);
415cabdff1aSopenharmony_ciBI_W_MC(epel, v, 12);
416cabdff1aSopenharmony_ciBI_W_MC(epel, v, 16);
417cabdff1aSopenharmony_ciBI_W_MC(epel, v, 24);
418cabdff1aSopenharmony_ciBI_W_MC(epel, v, 32);
419cabdff1aSopenharmony_ciBI_W_MC(epel, v, 48);
420cabdff1aSopenharmony_ciBI_W_MC(epel, v, 64);
421cabdff1aSopenharmony_ci
422cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 4);
423cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 6);
424cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 8);
425cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 12);
426cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 16);
427cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 24);
428cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 32);
429cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 48);
430cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 64);
431cabdff1aSopenharmony_ci
432cabdff1aSopenharmony_ci#undef BI_W_MC
433cabdff1aSopenharmony_ci
434cabdff1aSopenharmony_civoid ff_hevc_loop_filter_luma_h_8_msa(uint8_t *src,
435cabdff1aSopenharmony_ci                                      ptrdiff_t src_stride,
436cabdff1aSopenharmony_ci                                      int32_t beta, int32_t *tc,
437cabdff1aSopenharmony_ci                                      uint8_t *no_p, uint8_t *no_q);
438cabdff1aSopenharmony_ci
439cabdff1aSopenharmony_civoid ff_hevc_loop_filter_luma_v_8_msa(uint8_t *src,
440cabdff1aSopenharmony_ci                                      ptrdiff_t src_stride,
441cabdff1aSopenharmony_ci                                      int32_t beta, int32_t *tc,
442cabdff1aSopenharmony_ci                                      uint8_t *no_p, uint8_t *no_q);
443cabdff1aSopenharmony_ci
444cabdff1aSopenharmony_civoid ff_hevc_loop_filter_chroma_h_8_msa(uint8_t *src,
445cabdff1aSopenharmony_ci                                        ptrdiff_t src_stride,
446cabdff1aSopenharmony_ci                                        int32_t *tc, uint8_t *no_p,
447cabdff1aSopenharmony_ci                                        uint8_t *no_q);
448cabdff1aSopenharmony_ci
449cabdff1aSopenharmony_civoid ff_hevc_loop_filter_chroma_v_8_msa(uint8_t *src,
450cabdff1aSopenharmony_ci                                        ptrdiff_t src_stride,
451cabdff1aSopenharmony_ci                                        int32_t *tc, uint8_t *no_p,
452cabdff1aSopenharmony_ci                                        uint8_t *no_q);
453cabdff1aSopenharmony_ci
454cabdff1aSopenharmony_civoid ff_hevc_sao_band_filter_0_8_msa(uint8_t *dst, uint8_t *src,
455cabdff1aSopenharmony_ci                                     ptrdiff_t stride_dst, ptrdiff_t stride_src,
456cabdff1aSopenharmony_ci                                     int16_t *sao_offset_val, int sao_left_class,
457cabdff1aSopenharmony_ci                                     int width, int height);
458cabdff1aSopenharmony_ci
459cabdff1aSopenharmony_civoid ff_hevc_sao_edge_filter_8_msa(uint8_t *dst, uint8_t *src,
460cabdff1aSopenharmony_ci                                   ptrdiff_t stride_dst,
461cabdff1aSopenharmony_ci                                   int16_t *sao_offset_val,
462cabdff1aSopenharmony_ci                                   int eo, int width, int height);
463cabdff1aSopenharmony_ci
464cabdff1aSopenharmony_civoid ff_hevc_idct_4x4_msa(int16_t *coeffs, int col_limit);
465cabdff1aSopenharmony_civoid ff_hevc_idct_8x8_msa(int16_t *coeffs, int col_limit);
466cabdff1aSopenharmony_civoid ff_hevc_idct_16x16_msa(int16_t *coeffs, int col_limit);
467cabdff1aSopenharmony_civoid ff_hevc_idct_32x32_msa(int16_t *coeffs, int col_limit);
468cabdff1aSopenharmony_civoid ff_hevc_idct_dc_4x4_msa(int16_t *coeffs);
469cabdff1aSopenharmony_civoid ff_hevc_idct_dc_8x8_msa(int16_t *coeffs);
470cabdff1aSopenharmony_civoid ff_hevc_idct_dc_16x16_msa(int16_t *coeffs);
471cabdff1aSopenharmony_civoid ff_hevc_idct_dc_32x32_msa(int16_t *coeffs);
472cabdff1aSopenharmony_civoid ff_hevc_addblk_4x4_msa(uint8_t *dst, int16_t *pi16Coeffs,
473cabdff1aSopenharmony_ci                            ptrdiff_t stride);
474cabdff1aSopenharmony_civoid ff_hevc_addblk_8x8_msa(uint8_t *dst, int16_t *pi16Coeffs,
475cabdff1aSopenharmony_ci                            ptrdiff_t stride);
476cabdff1aSopenharmony_civoid ff_hevc_addblk_16x16_msa(uint8_t *dst, int16_t *pi16Coeffs,
477cabdff1aSopenharmony_ci                              ptrdiff_t stride);
478cabdff1aSopenharmony_civoid ff_hevc_addblk_32x32_msa(uint8_t *dst, int16_t *pi16Coeffs,
479cabdff1aSopenharmony_ci                              ptrdiff_t stride);
480cabdff1aSopenharmony_civoid ff_hevc_idct_luma_4x4_msa(int16_t *pi16Coeffs);
481cabdff1aSopenharmony_ci
482cabdff1aSopenharmony_ci/* Loongson optimization */
483cabdff1aSopenharmony_ci#define L_MC(PEL, DIR, WIDTH, TYPE)                                          \
484cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_##TYPE(int16_t *dst,          \
485cabdff1aSopenharmony_ci                                                      uint8_t *src,          \
486cabdff1aSopenharmony_ci                                                      ptrdiff_t src_stride,  \
487cabdff1aSopenharmony_ci                                                      int height,            \
488cabdff1aSopenharmony_ci                                                      intptr_t mx,           \
489cabdff1aSopenharmony_ci                                                      intptr_t my,           \
490cabdff1aSopenharmony_ci                                                      int width)
491cabdff1aSopenharmony_ciL_MC(qpel, h, 4, mmi);
492cabdff1aSopenharmony_ciL_MC(qpel, h, 8, mmi);
493cabdff1aSopenharmony_ciL_MC(qpel, h, 12, mmi);
494cabdff1aSopenharmony_ciL_MC(qpel, h, 16, mmi);
495cabdff1aSopenharmony_ciL_MC(qpel, h, 24, mmi);
496cabdff1aSopenharmony_ciL_MC(qpel, h, 32, mmi);
497cabdff1aSopenharmony_ciL_MC(qpel, h, 48, mmi);
498cabdff1aSopenharmony_ciL_MC(qpel, h, 64, mmi);
499cabdff1aSopenharmony_ci
500cabdff1aSopenharmony_ciL_MC(qpel, hv, 4, mmi);
501cabdff1aSopenharmony_ciL_MC(qpel, hv, 8, mmi);
502cabdff1aSopenharmony_ciL_MC(qpel, hv, 12, mmi);
503cabdff1aSopenharmony_ciL_MC(qpel, hv, 16, mmi);
504cabdff1aSopenharmony_ciL_MC(qpel, hv, 24, mmi);
505cabdff1aSopenharmony_ciL_MC(qpel, hv, 32, mmi);
506cabdff1aSopenharmony_ciL_MC(qpel, hv, 48, mmi);
507cabdff1aSopenharmony_ciL_MC(qpel, hv, 64, mmi);
508cabdff1aSopenharmony_ci
509cabdff1aSopenharmony_ci#define L_BI_MC(PEL, DIR, WIDTH, TYPE)                                          \
510cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_bi_##DIR##WIDTH##_8_##TYPE(uint8_t *dst,          \
511cabdff1aSopenharmony_ci                                                         ptrdiff_t dst_stride,  \
512cabdff1aSopenharmony_ci                                                         uint8_t *src,          \
513cabdff1aSopenharmony_ci                                                         ptrdiff_t src_stride,  \
514cabdff1aSopenharmony_ci                                                         int16_t *src2,         \
515cabdff1aSopenharmony_ci                                                         int height,            \
516cabdff1aSopenharmony_ci                                                         intptr_t mx,           \
517cabdff1aSopenharmony_ci                                                         intptr_t my,           \
518cabdff1aSopenharmony_ci                                                         int width)
519cabdff1aSopenharmony_ci
520cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 8, mmi);
521cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 16, mmi);
522cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 24, mmi);
523cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 32, mmi);
524cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 48, mmi);
525cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 64, mmi);
526cabdff1aSopenharmony_ci
527cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 4, mmi);
528cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 8, mmi);
529cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 12, mmi);
530cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 16, mmi);
531cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 24, mmi);
532cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 32, mmi);
533cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 48, mmi);
534cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 64, mmi);
535cabdff1aSopenharmony_ci
536cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 4, mmi);
537cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 8, mmi);
538cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 12, mmi);
539cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 16, mmi);
540cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 24, mmi);
541cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 32, mmi);
542cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 48, mmi);
543cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 64, mmi);
544cabdff1aSopenharmony_ci
545cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 4, mmi);
546cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 8, mmi);
547cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 12, mmi);
548cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 16, mmi);
549cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 24, mmi);
550cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 32, mmi);
551cabdff1aSopenharmony_ci#undef L_BI_MC
552cabdff1aSopenharmony_ci
553cabdff1aSopenharmony_ci#define L_UNI_MC(PEL, DIR, WIDTH, TYPE)                                         \
554cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_uni_##DIR##WIDTH##_8_##TYPE(uint8_t *dst,         \
555cabdff1aSopenharmony_ci                                                          ptrdiff_t dst_stride, \
556cabdff1aSopenharmony_ci                                                          uint8_t *src,         \
557cabdff1aSopenharmony_ci                                                          ptrdiff_t src_stride, \
558cabdff1aSopenharmony_ci                                                          int height,           \
559cabdff1aSopenharmony_ci                                                          intptr_t mx,          \
560cabdff1aSopenharmony_ci                                                          intptr_t my,          \
561cabdff1aSopenharmony_ci                                                          int width)
562cabdff1aSopenharmony_ci
563cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 4, mmi);
564cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 8, mmi);
565cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 12, mmi);
566cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 16, mmi);
567cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 24, mmi);
568cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 32, mmi);
569cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 48, mmi);
570cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 64, mmi);
571cabdff1aSopenharmony_ci#undef L_UNI_MC
572cabdff1aSopenharmony_ci
573cabdff1aSopenharmony_ci#endif  // #ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H
574