FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
h264qpel_msa.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Parag Salasakar (Parag.Salasakar@imgtec.com)
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
22 #include "h264dsp_mips.h"
23 
24 #define AVC_CALC_DPADD_H_6PIX_2COEFF_SH(in0, in1, in2, in3, in4, in5) \
25 ( { \
26  v4i32 tmp0_m, tmp1_m; \
27  v8i16 out0_m, out1_m, out2_m, out3_m; \
28  v8i16 minus5h_m = __msa_ldi_h(-5); \
29  v8i16 plus20h_m = __msa_ldi_h(20); \
30  \
31  ILVRL_H2_SW(in5, in0, tmp0_m, tmp1_m); \
32  \
33  tmp0_m = __msa_hadd_s_w((v8i16) tmp0_m, (v8i16) tmp0_m); \
34  tmp1_m = __msa_hadd_s_w((v8i16) tmp1_m, (v8i16) tmp1_m); \
35  \
36  ILVRL_H2_SH(in1, in4, out0_m, out1_m); \
37  DPADD_SH2_SW(out0_m, out1_m, minus5h_m, minus5h_m, tmp0_m, tmp1_m); \
38  ILVRL_H2_SH(in2, in3, out2_m, out3_m); \
39  DPADD_SH2_SW(out2_m, out3_m, plus20h_m, plus20h_m, tmp0_m, tmp1_m); \
40  \
41  SRARI_W2_SW(tmp0_m, tmp1_m, 10); \
42  SAT_SW2_SW(tmp0_m, tmp1_m, 7); \
43  out0_m = __msa_pckev_h((v8i16) tmp1_m, (v8i16) tmp0_m); \
44  \
45  out0_m; \
46 } )
47 
48 #define AVC_HORZ_FILTER_SH(in, mask0, mask1, mask2) \
49 ( { \
50  v8i16 out0_m, out1_m; \
51  v16i8 tmp0_m, tmp1_m; \
52  v16i8 minus5b = __msa_ldi_b(-5); \
53  v16i8 plus20b = __msa_ldi_b(20); \
54  \
55  tmp0_m = __msa_vshf_b((v16i8) mask0, in, in); \
56  out0_m = __msa_hadd_s_h(tmp0_m, tmp0_m); \
57  \
58  tmp0_m = __msa_vshf_b((v16i8) mask1, in, in); \
59  out0_m = __msa_dpadd_s_h(out0_m, minus5b, tmp0_m); \
60  \
61  tmp1_m = __msa_vshf_b((v16i8) (mask2), in, in); \
62  out1_m = __msa_dpadd_s_h(out0_m, plus20b, tmp1_m); \
63  \
64  out1_m; \
65 } )
66 
67 static const uint8_t luma_mask_arr[16 * 8] = {
68  /* 8 width cases */
69  0, 5, 1, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12,
70  1, 4, 2, 5, 3, 6, 4, 7, 5, 8, 6, 9, 7, 10, 8, 11,
71  2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10,
72 
73  /* 4 width cases */
74  0, 5, 1, 6, 2, 7, 3, 8, 16, 21, 17, 22, 18, 23, 19, 24,
75  1, 4, 2, 5, 3, 6, 4, 7, 17, 20, 18, 21, 19, 22, 20, 23,
76  2, 3, 3, 4, 4, 5, 5, 6, 18, 19, 19, 20, 20, 21, 21, 22,
77 
78  2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 24, 25,
79  3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26
80 };
81 
82 #define AVC_CALC_DPADD_B_6PIX_2COEFF_SH(vec0, vec1, vec2, vec3, vec4, vec5, \
83  out1, out2) \
84 { \
85  v16i8 tmp0_m, tmp1_m; \
86  v16i8 minus5b_m = __msa_ldi_b(-5); \
87  v16i8 plus20b_m = __msa_ldi_b(20); \
88  \
89  ILVRL_B2_SB(vec5, vec0, tmp0_m, tmp1_m); \
90  HADD_SB2_SH(tmp0_m, tmp1_m, out1, out2); \
91  ILVRL_B2_SB(vec4, vec1, tmp0_m, tmp1_m); \
92  DPADD_SB2_SH(tmp0_m, tmp1_m, minus5b_m, minus5b_m, out1, out2); \
93  ILVRL_B2_SB(vec3, vec2, tmp0_m, tmp1_m); \
94  DPADD_SB2_SH(tmp0_m, tmp1_m, plus20b_m, plus20b_m, out1, out2); \
95 }
96 
97 #define AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(vec0, vec1, vec2, vec3, vec4, vec5) \
98 ( { \
99  v8i16 tmp1_m; \
100  v16i8 tmp0_m, tmp2_m; \
101  v16i8 minus5b_m = __msa_ldi_b(-5); \
102  v16i8 plus20b_m = __msa_ldi_b(20); \
103  \
104  tmp1_m = (v8i16) __msa_ilvr_b((v16i8) vec5, (v16i8) vec0); \
105  tmp1_m = __msa_hadd_s_h((v16i8) tmp1_m, (v16i8) tmp1_m); \
106  \
107  ILVR_B2_SB(vec4, vec1, vec3, vec2, tmp0_m, tmp2_m); \
108  DPADD_SB2_SH(tmp0_m, tmp2_m, minus5b_m, plus20b_m, tmp1_m, tmp1_m); \
109  \
110  tmp1_m; \
111 } )
112 
113 #define AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(vec0, vec1, vec2, vec3, vec4, vec5) \
114 ( { \
115  v4i32 tmp1_m; \
116  v8i16 tmp2_m, tmp3_m; \
117  v8i16 minus5h_m = __msa_ldi_h(-5); \
118  v8i16 plus20h_m = __msa_ldi_h(20); \
119  \
120  tmp1_m = (v4i32) __msa_ilvr_h((v8i16) vec5, (v8i16) vec0); \
121  tmp1_m = __msa_hadd_s_w((v8i16) tmp1_m, (v8i16) tmp1_m); \
122  \
123  ILVR_H2_SH(vec1, vec4, vec2, vec3, tmp2_m, tmp3_m); \
124  DPADD_SH2_SW(tmp2_m, tmp3_m, minus5h_m, plus20h_m, tmp1_m, tmp1_m); \
125  \
126  tmp1_m = __msa_srari_w(tmp1_m, 10); \
127  tmp1_m = __msa_sat_s_w(tmp1_m, 7); \
128  \
129  tmp2_m = __msa_pckev_h((v8i16) tmp1_m, (v8i16) tmp1_m); \
130  \
131  tmp2_m; \
132 } )
133 
134 #define AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1, \
135  mask0, mask1, mask2) \
136 ( { \
137  v8i16 hz_out_m; \
138  v16i8 vec0_m, vec1_m, vec2_m; \
139  v16i8 minus5b_m = __msa_ldi_b(-5); \
140  v16i8 plus20b_m = __msa_ldi_b(20); \
141  \
142  vec0_m = __msa_vshf_b((v16i8) mask0, (v16i8) src1, (v16i8) src0); \
143  hz_out_m = __msa_hadd_s_h(vec0_m, vec0_m); \
144  \
145  VSHF_B2_SB(src0, src1, src0, src1, mask1, mask2, vec1_m, vec2_m); \
146  DPADD_SB2_SH(vec1_m, vec2_m, minus5b_m, plus20b_m, hz_out_m, hz_out_m); \
147  \
148  hz_out_m; \
149 } )
150 
151 static void avc_luma_hz_4w_msa(const uint8_t *src, int32_t src_stride,
152  uint8_t *dst, int32_t dst_stride,
153  int32_t height)
154 {
155  uint32_t loop_cnt;
156  v16i8 src0, src1, src2, src3;
157  v8i16 res0, res1;
158  v16u8 out;
159  v16i8 mask0, mask1, mask2;
160  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
161  v16i8 minus5b = __msa_ldi_b(-5);
162  v16i8 plus20b = __msa_ldi_b(20);
163 
164  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
165  for (loop_cnt = (height >> 2); loop_cnt--;) {
166  LD_SB4(src, src_stride, src0, src1, src2, src3);
167  src += (4 * src_stride);
168 
169  XORI_B4_128_SB(src0, src1, src2, src3);
170  VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0, vec1);
171  HADD_SB2_SH(vec0, vec1, res0, res1);
172  VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2, vec3);
173  DPADD_SB2_SH(vec2, vec3, minus5b, minus5b, res0, res1);
174  VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4, vec5);
175  DPADD_SB2_SH(vec4, vec5, plus20b, plus20b, res0, res1);
176  SRARI_H2_SH(res0, res1, 5);
177  SAT_SH2_SH(res0, res1, 7);
178  out = PCKEV_XORI128_UB(res0, res1);
179  ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
180  dst += (4 * dst_stride);
181  }
182 }
183 
184 static void avc_luma_hz_8w_msa(const uint8_t *src, int32_t src_stride,
185  uint8_t *dst, int32_t dst_stride,
186  int32_t height)
187 {
188  uint32_t loop_cnt;
189  v16i8 src0, src1, src2, src3;
190  v8i16 res0, res1, res2, res3;
191  v16i8 mask0, mask1, mask2;
192  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
193  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
194  v16i8 minus5b = __msa_ldi_b(-5);
195  v16i8 plus20b = __msa_ldi_b(20);
196  v16u8 out0, out1;
197 
198  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
199 
200  for (loop_cnt = (height >> 2); loop_cnt--;) {
201  LD_SB4(src, src_stride, src0, src1, src2, src3);
202  src += (4 * src_stride);
203 
204  XORI_B4_128_SB(src0, src1, src2, src3);
205  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec1);
206  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2, vec3);
207  HADD_SB4_SH(vec0, vec1, vec2, vec3, res0, res1, res2, res3);
208  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec4, vec5);
209  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec6, vec7);
210  DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b,
211  res0, res1, res2, res3);
212  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec8, vec9);
213  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec10, vec11);
214  DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b,
215  plus20b, res0, res1, res2, res3);
216  SRARI_H4_SH(res0, res1, res2, res3, 5);
217  SAT_SH4_SH(res0, res1, res2, res3, 7);
218  out0 = PCKEV_XORI128_UB(res0, res1);
219  out1 = PCKEV_XORI128_UB(res2, res3);
220  ST8x4_UB(out0, out1, dst, dst_stride);
221  dst += (4 * dst_stride);
222  }
223 }
224 
225 static void avc_luma_hz_16w_msa(const uint8_t *src, int32_t src_stride,
226  uint8_t *dst, int32_t dst_stride,
227  int32_t height)
228 {
229  uint32_t loop_cnt;
230  v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
231  v8i16 res0, res1, res2, res3, res4, res5, res6, res7;
232  v16i8 mask0, mask1, mask2;
233  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
234  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
235  v16i8 minus5b = __msa_ldi_b(-5);
236  v16i8 plus20b = __msa_ldi_b(20);
237 
238  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
239 
240  for (loop_cnt = (height >> 2); loop_cnt--;) {
241  LD_SB2(src, 8, src0, src1);
242  src += src_stride;
243  LD_SB2(src, 8, src2, src3);
244  src += src_stride;
245 
246  XORI_B4_128_SB(src0, src1, src2, src3);
247  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec3);
248  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec6, vec9);
249  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec1, vec4);
250  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec7, vec10);
251  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec2, vec5);
252  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec8, vec11);
253  HADD_SB4_SH(vec0, vec3, vec6, vec9, res0, res1, res2, res3);
254  DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b,
255  minus5b, res0, res1, res2, res3);
256  DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b,
257  plus20b, res0, res1, res2, res3);
258 
259  LD_SB2(src, 8, src4, src5);
260  src += src_stride;
261  LD_SB2(src, 8, src6, src7);
262  src += src_stride;
263 
264  XORI_B4_128_SB(src4, src5, src6, src7);
265  VSHF_B2_SB(src4, src4, src5, src5, mask0, mask0, vec0, vec3);
266  VSHF_B2_SB(src6, src6, src7, src7, mask0, mask0, vec6, vec9);
267  VSHF_B2_SB(src4, src4, src5, src5, mask1, mask1, vec1, vec4);
268  VSHF_B2_SB(src6, src6, src7, src7, mask1, mask1, vec7, vec10);
269  VSHF_B2_SB(src4, src4, src5, src5, mask2, mask2, vec2, vec5);
270  VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec8, vec11);
271  HADD_SB4_SH(vec0, vec3, vec6, vec9, res4, res5, res6, res7);
272  DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b,
273  minus5b, res4, res5, res6, res7);
274  DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b,
275  plus20b, res4, res5, res6, res7);
276  SRARI_H4_SH(res0, res1, res2, res3, 5);
277  SRARI_H4_SH(res4, res5, res6, res7, 5);
278  SAT_SH4_SH(res0, res1, res2, res3, 7);
279  SAT_SH4_SH(res4, res5, res6, res7, 7);
280  PCKEV_B4_SB(res1, res0, res3, res2, res5, res4, res7, res6,
281  vec0, vec1, vec2, vec3);
282  XORI_B4_128_SB(vec0, vec1, vec2, vec3);
283 
284  ST_SB4(vec0, vec1, vec2, vec3, dst, dst_stride);
285  dst += (4 * dst_stride);
286  }
287 }
288 
289 static void avc_luma_hz_qrt_4w_msa(const uint8_t *src, int32_t src_stride,
290  uint8_t *dst, int32_t dst_stride,
291  int32_t height, uint8_t hor_offset)
292 {
293  uint8_t slide;
294  uint32_t loop_cnt;
295  v16i8 src0, src1, src2, src3;
296  v8i16 res0, res1;
297  v16i8 res, mask0, mask1, mask2;
298  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
299  v16i8 minus5b = __msa_ldi_b(-5);
300  v16i8 plus20b = __msa_ldi_b(20);
301 
302  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
303  slide = 2 + hor_offset;
304 
305  for (loop_cnt = (height >> 2); loop_cnt--;) {
306  LD_SB4(src, src_stride, src0, src1, src2, src3);
307  src += (4 * src_stride);
308 
309  XORI_B4_128_SB(src0, src1, src2, src3);
310  VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0, vec1);
311  HADD_SB2_SH(vec0, vec1, res0, res1);
312  VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2, vec3);
313  DPADD_SB2_SH(vec2, vec3, minus5b, minus5b, res0, res1);
314  VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4, vec5);
315  DPADD_SB2_SH(vec4, vec5, plus20b, plus20b, res0, res1);
316  SRARI_H2_SH(res0, res1, 5);
317  SAT_SH2_SH(res0, res1, 7);
318 
319  res = __msa_pckev_b((v16i8) res1, (v16i8) res0);
320  src0 = __msa_sld_b(src0, src0, slide);
321  src1 = __msa_sld_b(src1, src1, slide);
322  src2 = __msa_sld_b(src2, src2, slide);
323  src3 = __msa_sld_b(src3, src3, slide);
324  src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1);
325  src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3);
326  src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1);
327  res = __msa_aver_s_b(res, src0);
328  res = (v16i8) __msa_xori_b((v16u8) res, 128);
329 
330  ST4x4_UB(res, res, 0, 1, 2, 3, dst, dst_stride);
331  dst += (4 * dst_stride);
332  }
333 }
334 
335 static void avc_luma_hz_qrt_8w_msa(const uint8_t *src, int32_t src_stride,
336  uint8_t *dst, int32_t dst_stride,
337  int32_t height, uint8_t hor_offset)
338 {
339  uint8_t slide;
340  uint32_t loop_cnt;
341  v16i8 src0, src1, src2, src3;
342  v16i8 tmp0, tmp1;
343  v8i16 res0, res1, res2, res3;
344  v16i8 mask0, mask1, mask2;
345  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
346  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
347  v16i8 minus5b = __msa_ldi_b(-5);
348  v16i8 plus20b = __msa_ldi_b(20);
349 
350  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
351  slide = 2 + hor_offset;
352 
353  for (loop_cnt = height >> 2; loop_cnt--;) {
354  LD_SB4(src, src_stride, src0, src1, src2, src3);
355  src += (4 * src_stride);
356 
357  XORI_B4_128_SB(src0, src1, src2, src3);
358  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec1);
359  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2, vec3);
360  HADD_SB4_SH(vec0, vec1, vec2, vec3, res0, res1, res2, res3);
361  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec4, vec5);
362  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec6, vec7);
363  DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b,
364  res0, res1, res2, res3);
365  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec8, vec9);
366  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec10, vec11);
367  DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b,
368  plus20b, res0, res1, res2, res3);
369 
370  src0 = __msa_sld_b(src0, src0, slide);
371  src1 = __msa_sld_b(src1, src1, slide);
372  src2 = __msa_sld_b(src2, src2, slide);
373  src3 = __msa_sld_b(src3, src3, slide);
374 
375  SRARI_H4_SH(res0, res1, res2, res3, 5);
376  SAT_SH4_SH(res0, res1, res2, res3, 7);
377  PCKEV_B2_SB(res1, res0, res3, res2, tmp0, tmp1);
378  PCKEV_D2_SB(src1, src0, src3, src2, src0, src1);
379 
380  tmp0 = __msa_aver_s_b(tmp0, src0);
381  tmp1 = __msa_aver_s_b(tmp1, src1);
382 
383  XORI_B2_128_SB(tmp0, tmp1);
384  ST8x4_UB(tmp0, tmp1, dst, dst_stride);
385 
386  dst += (4 * dst_stride);
387  }
388 }
389 
390 static void avc_luma_hz_qrt_16w_msa(const uint8_t *src, int32_t src_stride,
391  uint8_t *dst, int32_t dst_stride,
392  int32_t height, uint8_t hor_offset)
393 {
394  uint32_t loop_cnt;
395  v16i8 dst0, dst1;
396  v16i8 src0, src1, src2, src3;
397  v16i8 mask0, mask1, mask2, vshf;
398  v8i16 res0, res1, res2, res3;
399  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
400  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
401  v16i8 minus5b = __msa_ldi_b(-5);
402  v16i8 plus20b = __msa_ldi_b(20);
403 
404  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
405 
406  if (hor_offset) {
407  vshf = LD_SB(&luma_mask_arr[16 + 96]);
408  } else {
409  vshf = LD_SB(&luma_mask_arr[96]);
410  }
411 
412  for (loop_cnt = height >> 1; loop_cnt--;) {
413  LD_SB2(src, 8, src0, src1);
414  src += src_stride;
415  LD_SB2(src, 8, src2, src3);
416  src += src_stride;
417 
418  XORI_B4_128_SB(src0, src1, src2, src3);
419  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec3);
420  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec6, vec9);
421  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec1, vec4);
422  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec7, vec10);
423  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec2, vec5);
424  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec8, vec11);
425  HADD_SB4_SH(vec0, vec3, vec6, vec9, res0, res1, res2, res3);
426  DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b,
427  minus5b, res0, res1, res2, res3);
428  DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b,
429  plus20b, res0, res1, res2, res3);
430  VSHF_B2_SB(src0, src1, src2, src3, vshf, vshf, src0, src2);
431  SRARI_H4_SH(res0, res1, res2, res3, 5);
432  SAT_SH4_SH(res0, res1, res2, res3, 7);
433  PCKEV_B2_SB(res1, res0, res3, res2, dst0, dst1);
434 
435  dst0 = __msa_aver_s_b(dst0, src0);
436  dst1 = __msa_aver_s_b(dst1, src2);
437 
438  XORI_B2_128_SB(dst0, dst1);
439 
440  ST_SB2(dst0, dst1, dst, dst_stride);
441  dst += (2 * dst_stride);
442  }
443 }
444 
445 static void avc_luma_vt_4w_msa(const uint8_t *src, int32_t src_stride,
446  uint8_t *dst, int32_t dst_stride,
447  int32_t height)
448 {
449  int32_t loop_cnt;
450  int16_t filt_const0 = 0xfb01;
451  int16_t filt_const1 = 0x1414;
452  int16_t filt_const2 = 0x1fb;
453  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
454  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
455  v16i8 src87_r, src2110, src4332, src6554, src8776;
456  v16i8 filt0, filt1, filt2;
457  v8i16 out10, out32;
458  v16u8 out;
459 
460  filt0 = (v16i8) __msa_fill_h(filt_const0);
461  filt1 = (v16i8) __msa_fill_h(filt_const1);
462  filt2 = (v16i8) __msa_fill_h(filt_const2);
463 
464  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
465  src += (5 * src_stride);
466 
467  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
468  src10_r, src21_r, src32_r, src43_r);
469  ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
470  XORI_B2_128_SB(src2110, src4332);
471 
472  for (loop_cnt = (height >> 2); loop_cnt--;) {
473  LD_SB4(src, src_stride, src5, src6, src7, src8);
474  src += (4 * src_stride);
475 
476  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
477  src54_r, src65_r, src76_r, src87_r);
478  ILVR_D2_SB(src65_r, src54_r, src87_r, src76_r, src6554, src8776);
479  XORI_B2_128_SB(src6554, src8776);
480  out10 = DPADD_SH3_SH(src2110, src4332, src6554, filt0, filt1, filt2);
481  out32 = DPADD_SH3_SH(src4332, src6554, src8776, filt0, filt1, filt2);
482  SRARI_H2_SH(out10, out32, 5);
483  SAT_SH2_SH(out10, out32, 7);
484  out = PCKEV_XORI128_UB(out10, out32);
485  ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
486 
487  dst += (4 * dst_stride);
488  src2110 = src6554;
489  src4332 = src8776;
490  src4 = src8;
491  }
492 }
493 
494 static void avc_luma_vt_8w_msa(const uint8_t *src, int32_t src_stride,
495  uint8_t *dst, int32_t dst_stride,
496  int32_t height)
497 {
498  int32_t loop_cnt;
499  int16_t filt_const0 = 0xfb01;
500  int16_t filt_const1 = 0x1414;
501  int16_t filt_const2 = 0x1fb;
502  v16i8 src0, src1, src2, src3, src4, src7, src8, src9, src10;
503  v16i8 src10_r, src32_r, src76_r, src98_r;
504  v16i8 src21_r, src43_r, src87_r, src109_r;
505  v8i16 out0_r, out1_r, out2_r, out3_r;
506  v16i8 filt0, filt1, filt2;
507  v16u8 out0, out1;
508 
509  filt0 = (v16i8) __msa_fill_h(filt_const0);
510  filt1 = (v16i8) __msa_fill_h(filt_const1);
511  filt2 = (v16i8) __msa_fill_h(filt_const2);
512 
513  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
514  src += (5 * src_stride);
515 
516  XORI_B5_128_SB(src0, src1, src2, src3, src4);
517  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
518  src10_r, src21_r, src32_r, src43_r);
519 
520  for (loop_cnt = (height >> 2); loop_cnt--;) {
521  LD_SB4(src, src_stride, src7, src8, src9, src10);
522  src += (4 * src_stride);
523 
524  XORI_B4_128_SB(src7, src8, src9, src10);
525  ILVR_B4_SB(src7, src4, src8, src7, src9, src8, src10, src9,
526  src76_r, src87_r, src98_r, src109_r);
527  out0_r = DPADD_SH3_SH(src10_r, src32_r, src76_r, filt0, filt1, filt2);
528  out1_r = DPADD_SH3_SH(src21_r, src43_r, src87_r, filt0, filt1, filt2);
529  out2_r = DPADD_SH3_SH(src32_r, src76_r, src98_r, filt0, filt1, filt2);
530  out3_r = DPADD_SH3_SH(src43_r, src87_r, src109_r, filt0, filt1, filt2);
531  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
532  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
533  out0 = PCKEV_XORI128_UB(out0_r, out1_r);
534  out1 = PCKEV_XORI128_UB(out2_r, out3_r);
535  ST8x4_UB(out0, out1, dst, dst_stride);
536  dst += (4 * dst_stride);
537 
538  src10_r = src76_r;
539  src32_r = src98_r;
540  src21_r = src87_r;
541  src43_r = src109_r;
542  src4 = src10;
543  }
544 }
545 
546 static void avc_luma_vt_16w_msa(const uint8_t *src, int32_t src_stride,
547  uint8_t *dst, int32_t dst_stride,
548  int32_t height)
549 {
550  int32_t loop_cnt;
551  int16_t filt_const0 = 0xfb01;
552  int16_t filt_const1 = 0x1414;
553  int16_t filt_const2 = 0x1fb;
554  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
555  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
556  v16i8 src87_r, src10_l, src32_l, src54_l, src76_l, src21_l, src43_l;
557  v16i8 src65_l, src87_l;
558  v8i16 out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l;
559  v16u8 res0, res1, res2, res3;
560  v16i8 filt0, filt1, filt2;
561 
562  filt0 = (v16i8) __msa_fill_h(filt_const0);
563  filt1 = (v16i8) __msa_fill_h(filt_const1);
564  filt2 = (v16i8) __msa_fill_h(filt_const2);
565 
566  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
567  src += (5 * src_stride);
568 
569  XORI_B5_128_SB(src0, src1, src2, src3, src4);
570  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
571  src10_r, src21_r, src32_r, src43_r);
572  ILVL_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
573  src10_l, src21_l, src32_l, src43_l);
574 
575  for (loop_cnt = (height >> 2); loop_cnt--;) {
576  LD_SB4(src, src_stride, src5, src6, src7, src8);
577  src += (4 * src_stride);
578 
579  XORI_B4_128_SB(src5, src6, src7, src8);
580  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
581  src54_r, src65_r, src76_r, src87_r);
582  ILVL_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
583  src54_l, src65_l, src76_l, src87_l);
584  out0_r = DPADD_SH3_SH(src10_r, src32_r, src54_r, filt0, filt1, filt2);
585  out1_r = DPADD_SH3_SH(src21_r, src43_r, src65_r, filt0, filt1, filt2);
586  out2_r = DPADD_SH3_SH(src32_r, src54_r, src76_r, filt0, filt1, filt2);
587  out3_r = DPADD_SH3_SH(src43_r, src65_r, src87_r, filt0, filt1, filt2);
588  out0_l = DPADD_SH3_SH(src10_l, src32_l, src54_l, filt0, filt1, filt2);
589  out1_l = DPADD_SH3_SH(src21_l, src43_l, src65_l, filt0, filt1, filt2);
590  out2_l = DPADD_SH3_SH(src32_l, src54_l, src76_l, filt0, filt1, filt2);
591  out3_l = DPADD_SH3_SH(src43_l, src65_l, src87_l, filt0, filt1, filt2);
592  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
593  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
594  SRARI_H4_SH(out0_l, out1_l, out2_l, out3_l, 5);
595  SAT_SH4_SH(out0_l, out1_l, out2_l, out3_l, 7);
596  PCKEV_B4_UB(out0_l, out0_r, out1_l, out1_r, out2_l, out2_r, out3_l,
597  out3_r, res0, res1, res2, res3);
598  XORI_B4_128_UB(res0, res1, res2, res3);
599 
600  ST_UB4(res0, res1, res2, res3, dst, dst_stride);
601  dst += (4 * dst_stride);
602 
603  src10_r = src54_r;
604  src32_r = src76_r;
605  src21_r = src65_r;
606  src43_r = src87_r;
607  src10_l = src54_l;
608  src32_l = src76_l;
609  src21_l = src65_l;
610  src43_l = src87_l;
611  src4 = src8;
612  }
613 }
614 
615 static void avc_luma_vt_qrt_4w_msa(const uint8_t *src, int32_t src_stride,
616  uint8_t *dst, int32_t dst_stride,
617  int32_t height, uint8_t ver_offset)
618 {
619  int32_t loop_cnt;
620  int16_t filt_const0 = 0xfb01;
621  int16_t filt_const1 = 0x1414;
622  int16_t filt_const2 = 0x1fb;
623  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
624  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
625  v16i8 src87_r, src2110, src4332, src6554, src8776;
626  v8i16 out10, out32;
627  v16i8 filt0, filt1, filt2;
628  v16u8 out;
629 
630  filt0 = (v16i8) __msa_fill_h(filt_const0);
631  filt1 = (v16i8) __msa_fill_h(filt_const1);
632  filt2 = (v16i8) __msa_fill_h(filt_const2);
633 
634  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
635  src += (5 * src_stride);
636 
637  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
638  src10_r, src21_r, src32_r, src43_r);
639  ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
640  XORI_B2_128_SB(src2110, src4332);
641 
642  for (loop_cnt = (height >> 2); loop_cnt--;) {
643  LD_SB4(src, src_stride, src5, src6, src7, src8);
644  src += (4 * src_stride);
645 
646  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
647  src54_r, src65_r, src76_r, src87_r);
648  ILVR_D2_SB(src65_r, src54_r, src87_r, src76_r, src6554, src8776);
649  XORI_B2_128_SB(src6554, src8776);
650  out10 = DPADD_SH3_SH(src2110, src4332, src6554, filt0, filt1, filt2);
651  out32 = DPADD_SH3_SH(src4332, src6554, src8776, filt0, filt1, filt2);
652  SRARI_H2_SH(out10, out32, 5);
653  SAT_SH2_SH(out10, out32, 7);
654 
655  out = PCKEV_XORI128_UB(out10, out32);
656 
657  if (ver_offset) {
658  src32_r = (v16i8) __msa_insve_w((v4i32) src3, 1, (v4i32) src4);
659  src54_r = (v16i8) __msa_insve_w((v4i32) src5, 1, (v4i32) src6);
660  } else {
661  src32_r = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3);
662  src54_r = (v16i8) __msa_insve_w((v4i32) src4, 1, (v4i32) src5);
663  }
664 
665  src32_r = (v16i8) __msa_insve_d((v2i64) src32_r, 1, (v2i64) src54_r);
666  out = __msa_aver_u_b(out, (v16u8) src32_r);
667 
668  ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
669  dst += (4 * dst_stride);
670  src2110 = src6554;
671  src4332 = src8776;
672  src2 = src6;
673  src3 = src7;
674  src4 = src8;
675  }
676 }
677 
678 static void avc_luma_vt_qrt_8w_msa(const uint8_t *src, int32_t src_stride,
679  uint8_t *dst, int32_t dst_stride,
680  int32_t height, uint8_t ver_offset)
681 {
682  int32_t loop_cnt;
683  int16_t filt_const0 = 0xfb01;
684  int16_t filt_const1 = 0x1414;
685  int16_t filt_const2 = 0x1fb;
686  v16i8 src0, src1, src2, src3, src4, src7, src8, src9, src10;
687  v16i8 src10_r, src32_r, src76_r, src98_r;
688  v16i8 src21_r, src43_r, src87_r, src109_r;
689  v8i16 out0_r, out1_r, out2_r, out3_r;
690  v16i8 res0, res1;
691  v16i8 filt0, filt1, filt2;
692 
693  filt0 = (v16i8) __msa_fill_h(filt_const0);
694  filt1 = (v16i8) __msa_fill_h(filt_const1);
695  filt2 = (v16i8) __msa_fill_h(filt_const2);
696 
697  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
698  src += (5 * src_stride);
699 
700  XORI_B5_128_SB(src0, src1, src2, src3, src4);
701  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
702  src10_r, src21_r, src32_r, src43_r);
703 
704  for (loop_cnt = (height >> 2); loop_cnt--;) {
705  LD_SB4(src, src_stride, src7, src8, src9, src10);
706  src += (4 * src_stride);
707 
708  XORI_B4_128_SB(src7, src8, src9, src10);
709  ILVR_B4_SB(src7, src4, src8, src7, src9, src8, src10, src9,
710  src76_r, src87_r, src98_r, src109_r);
711  out0_r = DPADD_SH3_SH(src10_r, src32_r, src76_r, filt0, filt1, filt2);
712  out1_r = DPADD_SH3_SH(src21_r, src43_r, src87_r, filt0, filt1, filt2);
713  out2_r = DPADD_SH3_SH(src32_r, src76_r, src98_r, filt0, filt1, filt2);
714  out3_r = DPADD_SH3_SH(src43_r, src87_r, src109_r, filt0, filt1, filt2);
715  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
716  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
717  PCKEV_B2_SB(out1_r, out0_r, out3_r, out2_r, res0, res1);
718 
719  if (ver_offset) {
720  PCKEV_D2_SB(src4, src3, src8, src7, src10_r, src32_r);
721  } else {
722  PCKEV_D2_SB(src3, src2, src7, src4, src10_r, src32_r);
723  }
724 
725  res0 = __msa_aver_s_b(res0, (v16i8) src10_r);
726  res1 = __msa_aver_s_b(res1, (v16i8) src32_r);
727 
728  XORI_B2_128_SB(res0, res1);
729  ST8x4_UB(res0, res1, dst, dst_stride);
730 
731  dst += (4 * dst_stride);
732  src10_r = src76_r;
733  src32_r = src98_r;
734  src21_r = src87_r;
735  src43_r = src109_r;
736  src2 = src8;
737  src3 = src9;
738  src4 = src10;
739  }
740 }
741 
742 static void avc_luma_vt_qrt_16w_msa(const uint8_t *src, int32_t src_stride,
743  uint8_t *dst, int32_t dst_stride,
744  int32_t height, uint8_t ver_offset)
745 {
746  int32_t loop_cnt;
747  int16_t filt_const0 = 0xfb01;
748  int16_t filt_const1 = 0x1414;
749  int16_t filt_const2 = 0x1fb;
750  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
751  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
752  v16i8 src87_r, src10_l, src32_l, src54_l, src76_l, src21_l, src43_l;
753  v16i8 src65_l, src87_l;
754  v8i16 out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l;
755  v16u8 res0, res1, res2, res3;
756  v16i8 filt0, filt1, filt2;
757 
758  filt0 = (v16i8) __msa_fill_h(filt_const0);
759  filt1 = (v16i8) __msa_fill_h(filt_const1);
760  filt2 = (v16i8) __msa_fill_h(filt_const2);
761 
762  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
763  src += (5 * src_stride);
764 
765  XORI_B5_128_SB(src0, src1, src2, src3, src4);
766  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
767  src10_r, src21_r, src32_r, src43_r);
768  ILVL_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
769  src10_l, src21_l, src32_l, src43_l);
770 
771  for (loop_cnt = (height >> 2); loop_cnt--;) {
772  LD_SB4(src, src_stride, src5, src6, src7, src8);
773  src += (4 * src_stride);
774 
775  XORI_B4_128_SB(src5, src6, src7, src8);
776  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
777  src54_r, src65_r, src76_r, src87_r);
778  ILVL_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
779  src54_l, src65_l, src76_l, src87_l);
780  out0_r = DPADD_SH3_SH(src10_r, src32_r, src54_r, filt0, filt1, filt2);
781  out1_r = DPADD_SH3_SH(src21_r, src43_r, src65_r, filt0, filt1, filt2);
782  out2_r = DPADD_SH3_SH(src32_r, src54_r, src76_r, filt0, filt1, filt2);
783  out3_r = DPADD_SH3_SH(src43_r, src65_r, src87_r, filt0, filt1, filt2);
784  out0_l = DPADD_SH3_SH(src10_l, src32_l, src54_l, filt0, filt1, filt2);
785  out1_l = DPADD_SH3_SH(src21_l, src43_l, src65_l, filt0, filt1, filt2);
786  out2_l = DPADD_SH3_SH(src32_l, src54_l, src76_l, filt0, filt1, filt2);
787  out3_l = DPADD_SH3_SH(src43_l, src65_l, src87_l, filt0, filt1, filt2);
788  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
789  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
790  SRARI_H4_SH(out0_l, out1_l, out2_l, out3_l, 5);
791  SAT_SH4_SH(out0_l, out1_l, out2_l, out3_l, 7);
792  PCKEV_B4_UB(out0_l, out0_r, out1_l, out1_r, out2_l, out2_r, out3_l,
793  out3_r, res0, res1, res2, res3);
794 
795  if (ver_offset) {
796  res0 = (v16u8) __msa_aver_s_b((v16i8) res0, src3);
797  res1 = (v16u8) __msa_aver_s_b((v16i8) res1, src4);
798  res2 = (v16u8) __msa_aver_s_b((v16i8) res2, src5);
799  res3 = (v16u8) __msa_aver_s_b((v16i8) res3, src6);
800  } else {
801  res0 = (v16u8) __msa_aver_s_b((v16i8) res0, src2);
802  res1 = (v16u8) __msa_aver_s_b((v16i8) res1, src3);
803  res2 = (v16u8) __msa_aver_s_b((v16i8) res2, src4);
804  res3 = (v16u8) __msa_aver_s_b((v16i8) res3, src5);
805  }
806 
807  XORI_B4_128_UB(res0, res1, res2, res3);
808  ST_UB4(res0, res1, res2, res3, dst, dst_stride);
809 
810  dst += (4 * dst_stride);
811 
812  src10_r = src54_r;
813  src32_r = src76_r;
814  src21_r = src65_r;
815  src43_r = src87_r;
816  src10_l = src54_l;
817  src32_l = src76_l;
818  src21_l = src65_l;
819  src43_l = src87_l;
820  src2 = src6;
821  src3 = src7;
822  src4 = src8;
823  }
824 }
825 
826 static void avc_luma_mid_4w_msa(const uint8_t *src, int32_t src_stride,
827  uint8_t *dst, int32_t dst_stride,
828  int32_t height)
829 {
830  uint32_t loop_cnt;
831  v16i8 src0, src1, src2, src3, src4;
832  v16i8 mask0, mask1, mask2;
833  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
834  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
835  v8i16 dst0, dst1, dst2, dst3;
836 
837  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
838  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
839  src += (5 * src_stride);
840 
841  XORI_B5_128_SB(src0, src1, src2, src3, src4);
842 
843  hz_out0 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
844  mask0, mask1, mask2);
845  hz_out2 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
846  mask0, mask1, mask2);
847 
848  PCKOD_D2_SH(hz_out0, hz_out0, hz_out2, hz_out2, hz_out1, hz_out3);
849 
850  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
851 
852  for (loop_cnt = (height >> 2); loop_cnt--;) {
853  LD_SB4(src, src_stride, src0, src1, src2, src3);
854  src += (4 * src_stride);
855 
856  XORI_B4_128_SB(src0, src1, src2, src3);
857 
858  hz_out5 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
859  mask0, mask1,
860  mask2);
861  hz_out7 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
862  mask0, mask1,
863  mask2);
864 
865  PCKOD_D2_SH(hz_out5, hz_out5, hz_out7, hz_out7, hz_out6, hz_out8);
866 
867  dst0 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out0, hz_out1, hz_out2,
868  hz_out3, hz_out4, hz_out5);
869  dst1 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out1, hz_out2, hz_out3,
870  hz_out4, hz_out5, hz_out6);
871  dst2 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out2, hz_out3, hz_out4,
872  hz_out5, hz_out6, hz_out7);
873  dst3 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out3, hz_out4, hz_out5,
874  hz_out6, hz_out7, hz_out8);
875 
876  PCKEV_B2_SB(dst1, dst0, dst3, dst2, src0, src1);
877  XORI_B2_128_SB(src0, src1);
878 
879  ST4x4_UB(src0, src1, 0, 2, 0, 2, dst, dst_stride);
880 
881  dst += (4 * dst_stride);
882 
883  hz_out0 = hz_out4;
884  hz_out1 = hz_out5;
885  hz_out2 = hz_out6;
886  hz_out3 = hz_out7;
887  hz_out4 = hz_out8;
888  }
889 }
890 
891 static void avc_luma_mid_8w_msa(const uint8_t *src, int32_t src_stride,
892  uint8_t *dst, int32_t dst_stride,
893  int32_t height)
894 {
895  uint32_t loop_cnt;
896  v16i8 src0, src1, src2, src3, src4;
897  v16i8 mask0, mask1, mask2;
898  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
899  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
900  v8i16 dst0, dst1, dst2, dst3;
901  v16u8 out0, out1;
902 
903  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
904 
905  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
906  XORI_B5_128_SB(src0, src1, src2, src3, src4);
907  src += (5 * src_stride);
908 
909  hz_out0 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
910  hz_out1 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
911  hz_out2 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
912  hz_out3 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
913  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
914 
915  for (loop_cnt = (height >> 2); loop_cnt--;) {
916  LD_SB4(src, src_stride, src0, src1, src2, src3);
917  XORI_B4_128_SB(src0, src1, src2, src3);
918  src += (4 * src_stride);
919 
920  hz_out5 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
921  hz_out6 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
922  hz_out7 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
923  hz_out8 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
924  dst0 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out0, hz_out1, hz_out2,
925  hz_out3, hz_out4, hz_out5);
926  dst1 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out1, hz_out2, hz_out3,
927  hz_out4, hz_out5, hz_out6);
928  dst2 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out2, hz_out3, hz_out4,
929  hz_out5, hz_out6, hz_out7);
930  dst3 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out3, hz_out4, hz_out5,
931  hz_out6, hz_out7, hz_out8);
932  out0 = PCKEV_XORI128_UB(dst0, dst1);
933  out1 = PCKEV_XORI128_UB(dst2, dst3);
934  ST8x4_UB(out0, out1, dst, dst_stride);
935 
936  dst += (4 * dst_stride);
937  hz_out3 = hz_out7;
938  hz_out1 = hz_out5;
939  hz_out5 = hz_out4;
940  hz_out4 = hz_out8;
941  hz_out2 = hz_out6;
942  hz_out0 = hz_out5;
943  }
944 }
945 
946 static void avc_luma_mid_16w_msa(const uint8_t *src, int32_t src_stride,
947  uint8_t *dst, int32_t dst_stride,
948  int32_t height)
949 {
950  uint32_t multiple8_cnt;
951 
952  for (multiple8_cnt = 2; multiple8_cnt--;) {
953  avc_luma_mid_8w_msa(src, src_stride, dst, dst_stride, height);
954  src += 8;
955  dst += 8;
956  }
957 }
958 
959 static void avc_luma_midh_qrt_4w_msa(const uint8_t *src, int32_t src_stride,
960  uint8_t *dst, int32_t dst_stride,
961  int32_t height, uint8_t horiz_offset)
962 {
963  uint32_t row;
964  v16i8 src0, src1, src2, src3, src4, src5, src6;
965  v8i16 vt_res0, vt_res1, vt_res2, vt_res3;
966  v4i32 hz_res0, hz_res1;
967  v8i16 dst0, dst1;
968  v8i16 shf_vec0, shf_vec1, shf_vec2, shf_vec3, shf_vec4, shf_vec5;
969  v8i16 mask0 = { 0, 5, 1, 6, 2, 7, 3, 8 };
970  v8i16 mask1 = { 1, 4, 2, 5, 3, 6, 4, 7 };
971  v8i16 mask2 = { 2, 3, 3, 4, 4, 5, 5, 6 };
972  v8i16 minus5h = __msa_ldi_h(-5);
973  v8i16 plus20h = __msa_ldi_h(20);
974  v8i16 zeros = { 0 };
975  v16u8 out;
976 
977  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
978  src += (5 * src_stride);
979  XORI_B5_128_SB(src0, src1, src2, src3, src4);
980 
981  for (row = (height >> 1); row--;) {
982  LD_SB2(src, src_stride, src5, src6);
983  src += (2 * src_stride);
984 
985  XORI_B2_128_SB(src5, src6);
986  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src0, src1, src2, src3, src4, src5,
987  vt_res0, vt_res1);
988  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src1, src2, src3, src4, src5, src6,
989  vt_res2, vt_res3);
990  VSHF_H3_SH(vt_res0, vt_res1, vt_res0, vt_res1, vt_res0, vt_res1,
991  mask0, mask1, mask2, shf_vec0, shf_vec1, shf_vec2);
992  VSHF_H3_SH(vt_res2, vt_res3, vt_res2, vt_res3, vt_res2, vt_res3,
993  mask0, mask1, mask2, shf_vec3, shf_vec4, shf_vec5);
994  hz_res0 = __msa_hadd_s_w(shf_vec0, shf_vec0);
995  DPADD_SH2_SW(shf_vec1, shf_vec2, minus5h, plus20h, hz_res0, hz_res0);
996  hz_res1 = __msa_hadd_s_w(shf_vec3, shf_vec3);
997  DPADD_SH2_SW(shf_vec4, shf_vec5, minus5h, plus20h, hz_res1, hz_res1);
998 
999  SRARI_W2_SW(hz_res0, hz_res1, 10);
1000  SAT_SW2_SW(hz_res0, hz_res1, 7);
1001 
1002  dst0 = __msa_srari_h(shf_vec2, 5);
1003  dst1 = __msa_srari_h(shf_vec5, 5);
1004 
1005  SAT_SH2_SH(dst0, dst1, 7);
1006 
1007  if (horiz_offset) {
1008  dst0 = __msa_ilvod_h(zeros, dst0);
1009  dst1 = __msa_ilvod_h(zeros, dst1);
1010  } else {
1011  ILVEV_H2_SH(dst0, zeros, dst1, zeros, dst0, dst1);
1012  }
1013 
1014  hz_res0 = __msa_aver_s_w(hz_res0, (v4i32) dst0);
1015  hz_res1 = __msa_aver_s_w(hz_res1, (v4i32) dst1);
1016  dst0 = __msa_pckev_h((v8i16) hz_res1, (v8i16) hz_res0);
1017 
1018  out = PCKEV_XORI128_UB(dst0, dst0);
1019  ST4x2_UB(out, dst, dst_stride);
1020 
1021  dst += (2 * dst_stride);
1022 
1023  src0 = src2;
1024  src1 = src3;
1025  src2 = src4;
1026  src3 = src5;
1027  src4 = src6;
1028  }
1029 }
1030 
1031 static void avc_luma_midh_qrt_8w_msa(const uint8_t *src, int32_t src_stride,
1032  uint8_t *dst, int32_t dst_stride,
1033  int32_t height, uint8_t horiz_offset)
1034 {
1035  uint32_t multiple8_cnt;
1036 
1037  for (multiple8_cnt = 2; multiple8_cnt--;) {
1038  avc_luma_midh_qrt_4w_msa(src, src_stride, dst, dst_stride, height,
1039  horiz_offset);
1040 
1041  src += 4;
1042  dst += 4;
1043  }
1044 }
1045 
1046 static void avc_luma_midh_qrt_16w_msa(const uint8_t *src, int32_t src_stride,
1047  uint8_t *dst, int32_t dst_stride,
1048  int32_t height, uint8_t horiz_offset)
1049 {
1050  uint32_t multiple8_cnt;
1051 
1052  for (multiple8_cnt = 4; multiple8_cnt--;) {
1053  avc_luma_midh_qrt_4w_msa(src, src_stride, dst, dst_stride, height,
1054  horiz_offset);
1055 
1056  src += 4;
1057  dst += 4;
1058  }
1059 }
1060 
1061 static void avc_luma_midv_qrt_4w_msa(const uint8_t *src, int32_t src_stride,
1062  uint8_t *dst, int32_t dst_stride,
1063  int32_t height, uint8_t ver_offset)
1064 {
1065  uint32_t loop_cnt;
1066  v16i8 src0, src1, src2, src3, src4;
1067  v16i8 mask0, mask1, mask2;
1068  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
1069  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
1070  v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
1071 
1072  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
1073  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1074  src += (5 * src_stride);
1075 
1076  XORI_B5_128_SB(src0, src1, src2, src3, src4);
1077 
1078  hz_out0 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
1079  mask0, mask1, mask2);
1080  hz_out2 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
1081  mask0, mask1, mask2);
1082 
1083  PCKOD_D2_SH(hz_out0, hz_out0, hz_out2, hz_out2, hz_out1, hz_out3);
1084 
1085  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
1086 
1087  for (loop_cnt = (height >> 2); loop_cnt--;) {
1088  LD_SB4(src, src_stride, src0, src1, src2, src3);
1089  src += (4 * src_stride);
1090  XORI_B4_128_SB(src0, src1, src2, src3);
1091 
1092  hz_out5 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
1093  mask0, mask1,
1094  mask2);
1095  hz_out7 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
1096  mask0, mask1,
1097  mask2);
1098 
1099  PCKOD_D2_SH(hz_out5, hz_out5, hz_out7, hz_out7, hz_out6, hz_out8);
1100 
1101  dst0 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out0, hz_out1, hz_out2,
1102  hz_out3, hz_out4, hz_out5);
1103  dst2 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out1, hz_out2, hz_out3,
1104  hz_out4, hz_out5, hz_out6);
1105  dst4 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out2, hz_out3, hz_out4,
1106  hz_out5, hz_out6, hz_out7);
1107  dst6 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out3, hz_out4, hz_out5,
1108  hz_out6, hz_out7, hz_out8);
1109 
1110  if (ver_offset) {
1111  dst1 = __msa_srari_h(hz_out3, 5);
1112  dst3 = __msa_srari_h(hz_out4, 5);
1113  dst5 = __msa_srari_h(hz_out5, 5);
1114  dst7 = __msa_srari_h(hz_out6, 5);
1115  } else {
1116  dst1 = __msa_srari_h(hz_out2, 5);
1117  dst3 = __msa_srari_h(hz_out3, 5);
1118  dst5 = __msa_srari_h(hz_out4, 5);
1119  dst7 = __msa_srari_h(hz_out5, 5);
1120  }
1121 
1122  SAT_SH4_SH(dst1, dst3, dst5, dst7, 7);
1123 
1124  dst0 = __msa_aver_s_h(dst0, dst1);
1125  dst1 = __msa_aver_s_h(dst2, dst3);
1126  dst2 = __msa_aver_s_h(dst4, dst5);
1127  dst3 = __msa_aver_s_h(dst6, dst7);
1128 
1129  PCKEV_B2_SB(dst1, dst0, dst3, dst2, src0, src1);
1130  XORI_B2_128_SB(src0, src1);
1131 
1132  ST4x4_UB(src0, src1, 0, 2, 0, 2, dst, dst_stride);
1133 
1134  dst += (4 * dst_stride);
1135  hz_out0 = hz_out4;
1136  hz_out1 = hz_out5;
1137  hz_out2 = hz_out6;
1138  hz_out3 = hz_out7;
1139  hz_out4 = hz_out8;
1140  }
1141 }
1142 
1143 static void avc_luma_midv_qrt_8w_msa(const uint8_t *src, int32_t src_stride,
1144  uint8_t *dst, int32_t dst_stride,
1145  int32_t height, uint8_t ver_offset)
1146 {
1147  uint32_t loop_cnt;
1148  v16i8 src0, src1, src2, src3, src4;
1149  v16i8 mask0, mask1, mask2;
1150  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
1151  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
1152  v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
1153  v16u8 out;
1154 
1155  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
1156 
1157  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1158  XORI_B5_128_SB(src0, src1, src2, src3, src4);
1159  src += (5 * src_stride);
1160 
1161  hz_out0 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
1162  hz_out1 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
1163  hz_out2 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
1164  hz_out3 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
1165  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
1166 
1167  for (loop_cnt = (height >> 2); loop_cnt--;) {
1168  LD_SB4(src, src_stride, src0, src1, src2, src3);
1169  XORI_B4_128_SB(src0, src1, src2, src3);
1170  src += (4 * src_stride);
1171 
1172  hz_out5 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
1173  hz_out6 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
1174  hz_out7 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
1175  hz_out8 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
1176 
1177  dst0 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out0, hz_out1, hz_out2,
1178  hz_out3, hz_out4, hz_out5);
1179  dst2 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out1, hz_out2, hz_out3,
1180  hz_out4, hz_out5, hz_out6);
1181  dst4 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out2, hz_out3, hz_out4,
1182  hz_out5, hz_out6, hz_out7);
1183  dst6 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out3, hz_out4, hz_out5,
1184  hz_out6, hz_out7, hz_out8);
1185 
1186  if (ver_offset) {
1187  dst1 = __msa_srari_h(hz_out3, 5);
1188  dst3 = __msa_srari_h(hz_out4, 5);
1189  dst5 = __msa_srari_h(hz_out5, 5);
1190  dst7 = __msa_srari_h(hz_out6, 5);
1191  } else {
1192  dst1 = __msa_srari_h(hz_out2, 5);
1193  dst3 = __msa_srari_h(hz_out3, 5);
1194  dst5 = __msa_srari_h(hz_out4, 5);
1195  dst7 = __msa_srari_h(hz_out5, 5);
1196  }
1197 
1198  SAT_SH4_SH(dst1, dst3, dst5, dst7, 7);
1199 
1200  dst0 = __msa_aver_s_h(dst0, dst1);
1201  dst1 = __msa_aver_s_h(dst2, dst3);
1202  dst2 = __msa_aver_s_h(dst4, dst5);
1203  dst3 = __msa_aver_s_h(dst6, dst7);
1204 
1205  out = PCKEV_XORI128_UB(dst0, dst0);
1206  ST8x1_UB(out, dst);
1207  dst += dst_stride;
1208  out = PCKEV_XORI128_UB(dst1, dst1);
1209  ST8x1_UB(out, dst);
1210  dst += dst_stride;
1211  out = PCKEV_XORI128_UB(dst2, dst2);
1212  ST8x1_UB(out, dst);
1213  dst += dst_stride;
1214  out = PCKEV_XORI128_UB(dst3, dst3);
1215  ST8x1_UB(out, dst);
1216  dst += dst_stride;
1217 
1218  hz_out0 = hz_out4;
1219  hz_out1 = hz_out5;
1220  hz_out2 = hz_out6;
1221  hz_out3 = hz_out7;
1222  hz_out4 = hz_out8;
1223  }
1224 }
1225 
1226 static void avc_luma_midv_qrt_16w_msa(const uint8_t *src, int32_t src_stride,
1227  uint8_t *dst, int32_t dst_stride,
1228  int32_t height, uint8_t vert_offset)
1229 {
1230  uint32_t multiple8_cnt;
1231 
1232  for (multiple8_cnt = 2; multiple8_cnt--;) {
1233  avc_luma_midv_qrt_8w_msa(src, src_stride, dst, dst_stride, height,
1234  vert_offset);
1235 
1236  src += 8;
1237  dst += 8;
1238  }
1239 }
1240 
1241 static void avc_luma_hv_qrt_4w_msa(const uint8_t *src_x, const uint8_t *src_y,
1242  int32_t src_stride, uint8_t *dst,
1243  int32_t dst_stride, int32_t height)
1244 {
1245  uint32_t loop_cnt;
1246  v16i8 src_hz0, src_hz1, src_hz2, src_hz3;
1247  v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4;
1248  v16i8 src_vt5, src_vt6, src_vt7, src_vt8;
1249  v16i8 mask0, mask1, mask2;
1250  v8i16 hz_out0, hz_out1, vert_out0, vert_out1;
1251  v8i16 out0, out1;
1252  v16u8 out;
1253 
1254  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
1255 
1256  LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4);
1257  src_y += (5 * src_stride);
1258 
1259  src_vt0 = (v16i8) __msa_insve_w((v4i32) src_vt0, 1, (v4i32) src_vt1);
1260  src_vt1 = (v16i8) __msa_insve_w((v4i32) src_vt1, 1, (v4i32) src_vt2);
1261  src_vt2 = (v16i8) __msa_insve_w((v4i32) src_vt2, 1, (v4i32) src_vt3);
1262  src_vt3 = (v16i8) __msa_insve_w((v4i32) src_vt3, 1, (v4i32) src_vt4);
1263 
1264  XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3);
1265 
1266  for (loop_cnt = (height >> 2); loop_cnt--;) {
1267  LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3);
1268  src_x += (4 * src_stride);
1269 
1270  XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3);
1271 
1273  src_hz1, mask0,
1274  mask1, mask2);
1276  src_hz3, mask0,
1277  mask1, mask2);
1278 
1279  SRARI_H2_SH(hz_out0, hz_out1, 5);
1280  SAT_SH2_SH(hz_out0, hz_out1, 7);
1281 
1282  LD_SB4(src_y, src_stride, src_vt5, src_vt6, src_vt7, src_vt8);
1283  src_y += (4 * src_stride);
1284 
1285  src_vt4 = (v16i8) __msa_insve_w((v4i32) src_vt4, 1, (v4i32) src_vt5);
1286  src_vt5 = (v16i8) __msa_insve_w((v4i32) src_vt5, 1, (v4i32) src_vt6);
1287  src_vt6 = (v16i8) __msa_insve_w((v4i32) src_vt6, 1, (v4i32) src_vt7);
1288  src_vt7 = (v16i8) __msa_insve_w((v4i32) src_vt7, 1, (v4i32) src_vt8);
1289 
1290  XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7);
1291 
1292  /* filter calc */
1293  vert_out0 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt0, src_vt1,
1294  src_vt2, src_vt3,
1295  src_vt4, src_vt5);
1296  vert_out1 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt2, src_vt3,
1297  src_vt4, src_vt5,
1298  src_vt6, src_vt7);
1299 
1300  SRARI_H2_SH(vert_out0, vert_out1, 5);
1301  SAT_SH2_SH(vert_out0, vert_out1, 7);
1302 
1303  out0 = __msa_srari_h((hz_out0 + vert_out0), 1);
1304  out1 = __msa_srari_h((hz_out1 + vert_out1), 1);
1305 
1306  SAT_SH2_SH(out0, out1, 7);
1307  out = PCKEV_XORI128_UB(out0, out1);
1308  ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
1309  dst += (4 * dst_stride);
1310 
1311  src_vt3 = src_vt7;
1312  src_vt1 = src_vt5;
1313  src_vt0 = src_vt4;
1314  src_vt4 = src_vt8;
1315  src_vt2 = src_vt6;
1316  }
1317 }
1318 
1319 static void avc_luma_hv_qrt_8w_msa(const uint8_t *src_x, const uint8_t *src_y,
1320  int32_t src_stride, uint8_t *dst,
1321  int32_t dst_stride, int32_t height)
1322 {
1323  uint32_t loop_cnt;
1324  v16i8 src_hz0, src_hz1, src_hz2, src_hz3;
1325  v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4;
1326  v16i8 src_vt5, src_vt6, src_vt7, src_vt8;
1327  v16i8 mask0, mask1, mask2;
1328  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
1329  v8i16 vert_out0, vert_out1, vert_out2, vert_out3;
1330  v8i16 out0, out1, out2, out3;
1331  v16u8 tmp0, tmp1;
1332 
1333  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
1334  LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4);
1335  src_y += (5 * src_stride);
1336 
1337  src_vt0 = (v16i8) __msa_insve_d((v2i64) src_vt0, 1, (v2i64) src_vt1);
1338  src_vt1 = (v16i8) __msa_insve_d((v2i64) src_vt1, 1, (v2i64) src_vt2);
1339  src_vt2 = (v16i8) __msa_insve_d((v2i64) src_vt2, 1, (v2i64) src_vt3);
1340  src_vt3 = (v16i8) __msa_insve_d((v2i64) src_vt3, 1, (v2i64) src_vt4);
1341 
1342  XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3);
1343 
1344  for (loop_cnt = (height >> 2); loop_cnt--;) {
1345  LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3);
1346  XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3);
1347  src_x += (4 * src_stride);
1348 
1349  hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, mask0, mask1, mask2);
1350  hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, mask0, mask1, mask2);
1351  hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, mask0, mask1, mask2);
1352  hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, mask0, mask1, mask2);
1353 
1354  SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5);
1355  SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7);
1356 
1357  LD_SB4(src_y, src_stride, src_vt5, src_vt6, src_vt7, src_vt8);
1358  src_y += (4 * src_stride);
1359 
1360  src_vt4 = (v16i8) __msa_insve_d((v2i64) src_vt4, 1, (v2i64) src_vt5);
1361  src_vt5 = (v16i8) __msa_insve_d((v2i64) src_vt5, 1, (v2i64) src_vt6);
1362  src_vt6 = (v16i8) __msa_insve_d((v2i64) src_vt6, 1, (v2i64) src_vt7);
1363  src_vt7 = (v16i8) __msa_insve_d((v2i64) src_vt7, 1, (v2i64) src_vt8);
1364 
1365  XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7);
1366 
1367  /* filter calc */
1368  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt0, src_vt1, src_vt2, src_vt3,
1369  src_vt4, src_vt5, vert_out0, vert_out1);
1370  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt2, src_vt3, src_vt4, src_vt5,
1371  src_vt6, src_vt7, vert_out2, vert_out3);
1372 
1373  SRARI_H4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 5);
1374  SAT_SH4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 7);
1375 
1376  out0 = __msa_srari_h((hz_out0 + vert_out0), 1);
1377  out1 = __msa_srari_h((hz_out1 + vert_out1), 1);
1378  out2 = __msa_srari_h((hz_out2 + vert_out2), 1);
1379  out3 = __msa_srari_h((hz_out3 + vert_out3), 1);
1380 
1381  SAT_SH4_SH(out0, out1, out2, out3, 7);
1382  tmp0 = PCKEV_XORI128_UB(out0, out1);
1383  tmp1 = PCKEV_XORI128_UB(out2, out3);
1384  ST8x4_UB(tmp0, tmp1, dst, dst_stride);
1385 
1386  dst += (4 * dst_stride);
1387  src_vt3 = src_vt7;
1388  src_vt1 = src_vt5;
1389  src_vt5 = src_vt4;
1390  src_vt4 = src_vt8;
1391  src_vt2 = src_vt6;
1392  src_vt0 = src_vt5;
1393  }
1394 }
1395 
1396 static void avc_luma_hv_qrt_16w_msa(const uint8_t *src_x, const uint8_t *src_y,
1397  int32_t src_stride, uint8_t *dst,
1398  int32_t dst_stride, int32_t height)
1399 {
1400  uint32_t multiple8_cnt;
1401 
1402  for (multiple8_cnt = 2; multiple8_cnt--;) {
1403  avc_luma_hv_qrt_8w_msa(src_x, src_y, src_stride, dst, dst_stride,
1404  height);
1405 
1406  src_x += 8;
1407  src_y += 8;
1408  dst += 8;
1409  }
1410 }
1411 
1413  int32_t src_stride,
1414  uint8_t *dst, int32_t dst_stride)
1415 {
1416  v16i8 src0, src1, src2, src3;
1417  v16u8 dst0, dst1, dst2, dst3, res;
1418  v8i16 res0, res1;
1419  v16i8 mask0, mask1, mask2;
1420  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
1421  v16i8 minus5b = __msa_ldi_b(-5);
1422  v16i8 plus20b = __msa_ldi_b(20);
1423 
1424  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
1425  LD_SB4(src, src_stride, src0, src1, src2, src3);
1426 
1427  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1428  XORI_B4_128_SB(src0, src1, src2, src3);
1429  VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0, vec1);
1430  HADD_SB2_SH(vec0, vec1, res0, res1);
1431  VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2, vec3);
1432  DPADD_SB2_SH(vec2, vec3, minus5b, minus5b, res0, res1);
1433  VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4, vec5);
1434  DPADD_SB2_SH(vec4, vec5, plus20b, plus20b, res0, res1);
1435  SRARI_H2_SH(res0, res1, 5);
1436  SAT_SH2_SH(res0, res1, 7);
1437  res = PCKEV_XORI128_UB(res0, res1);
1438  ILVR_W2_UB(dst1, dst0, dst3, dst2, dst0, dst1);
1439 
1440  dst0 = (v16u8) __msa_pckev_d((v2i64) dst1, (v2i64) dst0);
1441  res = __msa_aver_u_b(res, dst0);
1442 
1443  ST4x4_UB(res, res, 0, 1, 2, 3, dst, dst_stride);
1444 }
1445 
1447  int32_t src_stride,
1448  uint8_t *dst, int32_t dst_stride)
1449 {
1450  uint32_t loop_cnt;
1451  v16i8 src0, src1, src2, src3;
1452  v16u8 dst0, dst1, dst2, dst3;
1453  v8i16 res0, res1, res2, res3;
1454  v16i8 mask0, mask1, mask2;
1455  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
1456  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
1457  v16i8 minus5b = __msa_ldi_b(-5);
1458  v16i8 plus20b = __msa_ldi_b(20);
1459 
1460  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
1461 
1462  for (loop_cnt = 2; loop_cnt--;) {
1463  LD_SB4(src, src_stride, src0, src1, src2, src3);
1464  src += (4 * src_stride);
1465 
1466  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1467 
1468  XORI_B4_128_SB(src0, src1, src2, src3);
1469  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec1);
1470  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2, vec3);
1471  HADD_SB4_SH(vec0, vec1, vec2, vec3, res0, res1, res2, res3);
1472  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec4, vec5);
1473  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec6, vec7);
1474  DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b,
1475  res0, res1, res2, res3);
1476  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec8, vec9);
1477  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec10, vec11);
1478  DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b,
1479  plus20b, res0, res1, res2, res3);
1480  SRARI_H4_SH(res0, res1, res2, res3, 5);
1481  SAT_SH4_SH(res0, res1, res2, res3, 7);
1482  CONVERT_UB_AVG_ST8x4_UB(res0, res1, res2, res3, dst0, dst1, dst2, dst3,
1483  dst, dst_stride);
1484 
1485  dst += (4 * dst_stride);
1486  }
1487 }
1488 
1490  int32_t src_stride,
1491  uint8_t *dst, int32_t dst_stride)
1492 {
1493  uint32_t loop_cnt;
1494  v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
1495  v16u8 dst0, dst1, dst2, dst3;
1496  v16i8 mask0, mask1, mask2;
1497  v8i16 res0, res1, res2, res3, res4, res5, res6, res7;
1498  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
1499  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
1500  v16i8 minus5b = __msa_ldi_b(-5);
1501  v16i8 plus20b = __msa_ldi_b(20);
1502 
1503  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
1504 
1505  for (loop_cnt = 4; loop_cnt--;) {
1506  LD_SB2(src, 8, src0, src1);
1507  src += src_stride;
1508  LD_SB2(src, 8, src2, src3);
1509  src += src_stride;
1510 
1511  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1512 
1513  XORI_B4_128_SB(src0, src1, src2, src3);
1514  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec3);
1515  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec6, vec9);
1516  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec1, vec4);
1517  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec7, vec10);
1518  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec2, vec5);
1519  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec8, vec11);
1520  HADD_SB4_SH(vec0, vec3, vec6, vec9, res0, res1, res2, res3);
1521  DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b,
1522  minus5b, res0, res1, res2, res3);
1523  DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b,
1524  plus20b, res0, res1, res2, res3);
1525  LD_SB2(src, 8, src4, src5);
1526  src += src_stride;
1527  LD_SB2(src, 8, src6, src7);
1528  src += src_stride;
1529  XORI_B4_128_SB(src4, src5, src6, src7);
1530  VSHF_B2_SB(src4, src4, src5, src5, mask0, mask0, vec0, vec3);
1531  VSHF_B2_SB(src6, src6, src7, src7, mask0, mask0, vec6, vec9);
1532  VSHF_B2_SB(src4, src4, src5, src5, mask1, mask1, vec1, vec4);
1533  VSHF_B2_SB(src6, src6, src7, src7, mask1, mask1, vec7, vec10);
1534  VSHF_B2_SB(src4, src4, src5, src5, mask2, mask2, vec2, vec5);
1535  VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec8, vec11);
1536  HADD_SB4_SH(vec0, vec3, vec6, vec9, res4, res5, res6, res7);
1537  DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b,
1538  minus5b, res4, res5, res6, res7);
1539  DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b,
1540  plus20b, res4, res5, res6, res7);
1541  SRARI_H4_SH(res0, res1, res2, res3, 5);
1542  SRARI_H4_SH(res4, res5, res6, res7, 5);
1543  SAT_SH4_SH(res0, res1, res2, res3, 7);
1544  SAT_SH4_SH(res4, res5, res6, res7, 7);
1545  PCKEV_B4_SB(res1, res0, res3, res2, res5, res4, res7, res6,
1546  vec0, vec1, vec2, vec3);
1547  XORI_B4_128_SB(vec0, vec1, vec2, vec3);
1548  AVER_UB4_UB(vec0, dst0, vec1, dst1, vec2, dst2, vec3, dst3,
1549  dst0, dst1, dst2, dst3);
1550  ST_UB4(dst0, dst1, dst2, dst3, dst, dst_stride);
1551  dst += (4 * dst_stride);
1552  }
1553 }
1554 
1556  int32_t src_stride,
1557  uint8_t *dst,
1558  int32_t dst_stride,
1559  uint8_t hor_offset)
1560 {
1561  uint8_t slide;
1562  v16i8 src0, src1, src2, src3;
1563  v16u8 dst0, dst1, dst2, dst3;
1564  v16i8 mask0, mask1, mask2;
1565  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
1566  v8i16 out0, out1;
1567  v16i8 minus5b = __msa_ldi_b(-5);
1568  v16i8 plus20b = __msa_ldi_b(20);
1569  v16u8 res0, res1;
1570 
1571  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
1572 
1573  if (hor_offset) {
1574  slide = 3;
1575  } else {
1576  slide = 2;
1577  }
1578 
1579  LD_SB4(src, src_stride, src0, src1, src2, src3);
1580  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1581 
1582  XORI_B4_128_SB(src0, src1, src2, src3);
1583  VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0, vec1);
1584  HADD_SB2_SH(vec0, vec1, out0, out1);
1585  VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2, vec3);
1586  DPADD_SB2_SH(vec2, vec3, minus5b, minus5b, out0, out1);
1587  VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4, vec5);
1588  DPADD_SB2_SH(vec4, vec5, plus20b, plus20b, out0, out1);
1589  SRARI_H2_SH(out0, out1, 5);
1590  SAT_SH2_SH(out0, out1, 7);
1591 
1592  PCKEV_B2_UB(out0, out0, out1, out1, res0, res1);
1593 
1594  src0 = __msa_sld_b(src0, src0, slide);
1595  src1 = __msa_sld_b(src1, src1, slide);
1596  src2 = __msa_sld_b(src2, src2, slide);
1597  src3 = __msa_sld_b(src3, src3, slide);
1598  src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1);
1599  src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3);
1600  res0 = (v16u8) __msa_aver_s_b((v16i8) res0, src0);
1601  res1 = (v16u8) __msa_aver_s_b((v16i8) res1, src1);
1602 
1603  XORI_B2_128_UB(res0, res1);
1604 
1605  dst0 = (v16u8) __msa_insve_w((v4i32) dst0, 1, (v4i32) dst1);
1606  dst1 = (v16u8) __msa_insve_w((v4i32) dst2, 1, (v4i32) dst3);
1607 
1608  AVER_UB2_UB(res0, dst0, res1, dst1, dst0, dst1);
1609 
1610  ST4x4_UB(dst0, dst1, 0, 1, 0, 1, dst, dst_stride);
1611 }
1612 
1614  int32_t src_stride,
1615  uint8_t *dst,
1616  int32_t dst_stride,
1617  uint8_t hor_offset)
1618 {
1619  uint8_t slide;
1620  uint32_t loop_cnt;
1621  v16i8 src0, src1, src2, src3;
1622  v16i8 mask0, mask1, mask2;
1623  v16u8 dst0, dst1, dst2, dst3;
1624  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
1625  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
1626  v8i16 out0, out1, out2, out3;
1627  v16i8 minus5b = __msa_ldi_b(-5);
1628  v16i8 plus20b = __msa_ldi_b(20);
1629  v16i8 res0, res1, res2, res3;
1630 
1631  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
1632 
1633  if (hor_offset) {
1634  slide = 3;
1635  } else {
1636  slide = 2;
1637  }
1638 
1639  for (loop_cnt = 2; loop_cnt--;) {
1640  LD_SB4(src, src_stride, src0, src1, src2, src3);
1641  src += (4 * src_stride);
1642 
1643  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1644 
1645  XORI_B4_128_SB(src0, src1, src2, src3);
1646  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec1);
1647  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2, vec3);
1648  HADD_SB4_SH(vec0, vec1, vec2, vec3, out0, out1, out2, out3);
1649  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec4, vec5);
1650  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec6, vec7);
1651  DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b,
1652  out0, out1, out2, out3);
1653  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec8, vec9);
1654  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec10, vec11);
1655  DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b,
1656  plus20b, out0, out1, out2, out3);
1657 
1658  src0 = __msa_sld_b(src0, src0, slide);
1659  src1 = __msa_sld_b(src1, src1, slide);
1660  src2 = __msa_sld_b(src2, src2, slide);
1661  src3 = __msa_sld_b(src3, src3, slide);
1662 
1663  SRARI_H4_SH(out0, out1, out2, out3, 5);
1664  SAT_SH4_SH(out0, out1, out2, out3, 7);
1665 
1666  PCKEV_B4_SB(out0, out0, out1, out1, out2, out2, out3, out3,
1667  res0, res1, res2, res3);
1668 
1669  res0 = __msa_aver_s_b(res0, src0);
1670  res1 = __msa_aver_s_b(res1, src1);
1671  res2 = __msa_aver_s_b(res2, src2);
1672  res3 = __msa_aver_s_b(res3, src3);
1673 
1674  XORI_B4_128_SB(res0, res1, res2, res3);
1675  AVER_ST8x4_UB(res0, dst0, res1, dst1, res2, dst2, res3, dst3,
1676  dst, dst_stride);
1677 
1678  dst += (4 * dst_stride);
1679  }
1680 }
1681 
1683  int32_t src_stride,
1684  uint8_t *dst,
1685  int32_t dst_stride,
1686  uint8_t hor_offset)
1687 {
1688  uint32_t loop_cnt;
1689  v16i8 out0, out1;
1690  v16i8 src0, src1, src2, src3;
1691  v16i8 mask0, mask1, mask2, vshf;
1692  v16u8 dst0, dst1;
1693  v8i16 res0, res1, res2, res3;
1694  v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
1695  v16i8 vec6, vec7, vec8, vec9, vec10, vec11;
1696  v16i8 minus5b = __msa_ldi_b(-5);
1697  v16i8 plus20b = __msa_ldi_b(20);
1698 
1699  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
1700 
1701  if (hor_offset) {
1702  vshf = LD_SB(&luma_mask_arr[16 + 96]);
1703  } else {
1704  vshf = LD_SB(&luma_mask_arr[96]);
1705  }
1706 
1707  for (loop_cnt = 8; loop_cnt--;) {
1708  LD_SB2(src, 8, src0, src1);
1709  src += src_stride;
1710  LD_SB2(src, 8, src2, src3);
1711  src += src_stride;
1712 
1713  LD_UB2(dst, dst_stride, dst0, dst1);
1714 
1715  XORI_B4_128_SB(src0, src1, src2, src3);
1716  VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec3);
1717  VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec6, vec9);
1718  VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec1, vec4);
1719  VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec7, vec10);
1720  VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec2, vec5);
1721  VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec8, vec11);
1722  HADD_SB4_SH(vec0, vec3, vec6, vec9, res0, res1, res2, res3);
1723  DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b,
1724  minus5b, res0, res1, res2, res3);
1725  DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b,
1726  plus20b, res0, res1, res2, res3);
1727  VSHF_B2_SB(src0, src1, src2, src3, vshf, vshf, src0, src2);
1728  SRARI_H4_SH(res0, res1, res2, res3, 5);
1729  SAT_SH4_SH(res0, res1, res2, res3, 7);
1730  PCKEV_B2_SB(res1, res0, res3, res2, out0, out1);
1731 
1732  out0 = __msa_aver_s_b(out0, src0);
1733  out1 = __msa_aver_s_b(out1, src2);
1734 
1735  XORI_B2_128_SB(out0, out1);
1736  AVER_UB2_UB(out0, dst0, out1, dst1, dst0, dst1);
1737  ST_UB2(dst0, dst1, dst, dst_stride);
1738  dst += (2 * dst_stride);
1739  }
1740 }
1741 
1743  int32_t src_stride,
1744  uint8_t *dst, int32_t dst_stride)
1745 {
1746  int16_t filt_const0 = 0xfb01;
1747  int16_t filt_const1 = 0x1414;
1748  int16_t filt_const2 = 0x1fb;
1749  v16u8 dst0, dst1, dst2, dst3;
1750  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
1751  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
1752  v16i8 src87_r, src2110, src4332, src6554, src8776;
1753  v8i16 out10, out32;
1754  v16i8 filt0, filt1, filt2;
1755  v16u8 res;
1756 
1757  filt0 = (v16i8) __msa_fill_h(filt_const0);
1758  filt1 = (v16i8) __msa_fill_h(filt_const1);
1759  filt2 = (v16i8) __msa_fill_h(filt_const2);
1760 
1761  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1762  src += (5 * src_stride);
1763 
1764  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
1765  src10_r, src21_r, src32_r, src43_r);
1766  ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
1767  XORI_B2_128_SB(src2110, src4332);
1768  LD_SB4(src, src_stride, src5, src6, src7, src8);
1769  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
1770  src54_r, src65_r, src76_r, src87_r);
1771  ILVR_D2_SB(src65_r, src54_r, src87_r, src76_r, src6554, src8776);
1772  XORI_B2_128_SB(src6554, src8776);
1773  out10 = DPADD_SH3_SH(src2110, src4332, src6554, filt0, filt1, filt2);
1774  out32 = DPADD_SH3_SH(src4332, src6554, src8776, filt0, filt1, filt2);
1775  SRARI_H2_SH(out10, out32, 5);
1776  SAT_SH2_SH(out10, out32, 7);
1777  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1778  res = PCKEV_XORI128_UB(out10, out32);
1779 
1780  ILVR_W2_UB(dst1, dst0, dst3, dst2, dst0, dst1);
1781 
1782  dst0 = (v16u8) __msa_pckev_d((v2i64) dst1, (v2i64) dst0);
1783  dst0 = __msa_aver_u_b(res, dst0);
1784 
1785  ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride);
1786 }
1787 
1789  int32_t src_stride,
1790  uint8_t *dst, int32_t dst_stride)
1791 {
1792  int32_t loop_cnt;
1793  int16_t filt_const0 = 0xfb01;
1794  int16_t filt_const1 = 0x1414;
1795  int16_t filt_const2 = 0x1fb;
1796  v16u8 dst0, dst1, dst2, dst3;
1797  v16i8 src0, src1, src2, src3, src4, src7, src8, src9, src10;
1798  v16i8 src10_r, src32_r, src76_r, src98_r;
1799  v16i8 src21_r, src43_r, src87_r, src109_r;
1800  v8i16 out0, out1, out2, out3;
1801  v16i8 filt0, filt1, filt2;
1802 
1803  filt0 = (v16i8) __msa_fill_h(filt_const0);
1804  filt1 = (v16i8) __msa_fill_h(filt_const1);
1805  filt2 = (v16i8) __msa_fill_h(filt_const2);
1806 
1807  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1808  src += (5 * src_stride);
1809 
1810  XORI_B5_128_SB(src0, src1, src2, src3, src4);
1811  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
1812  src10_r, src21_r, src32_r, src43_r);
1813 
1814  for (loop_cnt = 2; loop_cnt--;) {
1815  LD_SB4(src, src_stride, src7, src8, src9, src10);
1816  src += (4 * src_stride);
1817 
1818  XORI_B4_128_SB(src7, src8, src9, src10);
1819  ILVR_B4_SB(src7, src4, src8, src7, src9, src8, src10, src9,
1820  src76_r, src87_r, src98_r, src109_r);
1821  out0 = DPADD_SH3_SH(src10_r, src32_r, src76_r, filt0, filt1, filt2);
1822  out1 = DPADD_SH3_SH(src21_r, src43_r, src87_r, filt0, filt1, filt2);
1823  out2 = DPADD_SH3_SH(src32_r, src76_r, src98_r, filt0, filt1, filt2);
1824  out3 = DPADD_SH3_SH(src43_r, src87_r, src109_r, filt0, filt1, filt2);
1825  SRARI_H4_SH(out0, out1, out2, out3, 5);
1826  SAT_SH4_SH(out0, out1, out2, out3, 7);
1827  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1828 
1829  CONVERT_UB_AVG_ST8x4_UB(out0, out1, out2, out3, dst0, dst1, dst2, dst3,
1830  dst, dst_stride);
1831  dst += (4 * dst_stride);
1832 
1833  src10_r = src76_r;
1834  src32_r = src98_r;
1835  src21_r = src87_r;
1836  src43_r = src109_r;
1837  src4 = src10;
1838  }
1839 }
1840 
1842  int32_t src_stride,
1843  uint8_t *dst, int32_t dst_stride)
1844 {
1845  int32_t loop_cnt;
1846  int16_t filt_const0 = 0xfb01;
1847  int16_t filt_const1 = 0x1414;
1848  int16_t filt_const2 = 0x1fb;
1849  v16u8 dst0, dst1, dst2, dst3;
1850  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
1851  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
1852  v16i8 src87_r, src10_l, src32_l, src54_l, src76_l, src21_l, src43_l;
1853  v16i8 src65_l, src87_l;
1854  v8i16 out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l;
1855  v16i8 filt0, filt1, filt2;
1856  v16u8 res0, res1, res2, res3;
1857 
1858  filt0 = (v16i8) __msa_fill_h(filt_const0);
1859  filt1 = (v16i8) __msa_fill_h(filt_const1);
1860  filt2 = (v16i8) __msa_fill_h(filt_const2);
1861 
1862  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1863  src += (5 * src_stride);
1864 
1865  XORI_B5_128_SB(src0, src1, src2, src3, src4);
1866  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
1867  src10_r, src21_r, src32_r, src43_r);
1868  ILVL_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
1869  src10_l, src21_l, src32_l, src43_l);
1870 
1871  for (loop_cnt = 4; loop_cnt--;) {
1872  LD_SB4(src, src_stride, src5, src6, src7, src8);
1873  src += (4 * src_stride);
1874 
1875  XORI_B4_128_SB(src5, src6, src7, src8);
1876  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
1877  src54_r, src65_r, src76_r, src87_r);
1878  ILVL_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
1879  src54_l, src65_l, src76_l, src87_l);
1880  out0_r = DPADD_SH3_SH(src10_r, src32_r, src54_r, filt0, filt1, filt2);
1881  out1_r = DPADD_SH3_SH(src21_r, src43_r, src65_r, filt0, filt1, filt2);
1882  out2_r = DPADD_SH3_SH(src32_r, src54_r, src76_r, filt0, filt1, filt2);
1883  out3_r = DPADD_SH3_SH(src43_r, src65_r, src87_r, filt0, filt1, filt2);
1884  out0_l = DPADD_SH3_SH(src10_l, src32_l, src54_l, filt0, filt1, filt2);
1885  out1_l = DPADD_SH3_SH(src21_l, src43_l, src65_l, filt0, filt1, filt2);
1886  out2_l = DPADD_SH3_SH(src32_l, src54_l, src76_l, filt0, filt1, filt2);
1887  out3_l = DPADD_SH3_SH(src43_l, src65_l, src87_l, filt0, filt1, filt2);
1888  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
1889  SRARI_H4_SH(out0_l, out1_l, out2_l, out3_l, 5);
1890  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
1891  SAT_SH4_SH(out0_l, out1_l, out2_l, out3_l, 7);
1892  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1893  PCKEV_B4_UB(out0_l, out0_r, out1_l, out1_r, out2_l, out2_r, out3_l,
1894  out3_r, res0, res1, res2, res3);
1895  XORI_B4_128_UB(res0, res1, res2, res3);
1896  AVER_UB4_UB(res0, dst0, res1, dst1, res2, dst2, res3, dst3,
1897  res0, res1, res2, res3);
1898  ST_UB4(res0, res1, res2, res3, dst, dst_stride);
1899  dst += (4 * dst_stride);
1900 
1901  src10_r = src54_r;
1902  src32_r = src76_r;
1903  src21_r = src65_r;
1904  src43_r = src87_r;
1905  src10_l = src54_l;
1906  src32_l = src76_l;
1907  src21_l = src65_l;
1908  src43_l = src87_l;
1909  src4 = src8;
1910  }
1911 }
1912 
1914  int32_t src_stride,
1915  uint8_t *dst,
1916  int32_t dst_stride,
1917  uint8_t ver_offset)
1918 {
1919  int16_t filt_const0 = 0xfb01;
1920  int16_t filt_const1 = 0x1414;
1921  int16_t filt_const2 = 0x1fb;
1922  v16u8 dst0, dst1, dst2, dst3;
1923  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
1924  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
1925  v16i8 src87_r, src2110, src4332, src6554, src8776;
1926  v8i16 out10, out32;
1927  v16i8 filt0, filt1, filt2;
1928  v16u8 res;
1929 
1930  filt0 = (v16i8) __msa_fill_h(filt_const0);
1931  filt1 = (v16i8) __msa_fill_h(filt_const1);
1932  filt2 = (v16i8) __msa_fill_h(filt_const2);
1933 
1934  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1935  src += (5 * src_stride);
1936 
1937  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
1938  src10_r, src21_r, src32_r, src43_r);
1939  ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
1940  XORI_B2_128_SB(src2110, src4332);
1941  LD_SB4(src, src_stride, src5, src6, src7, src8);
1942  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
1943  src54_r, src65_r, src76_r, src87_r);
1944  ILVR_D2_SB(src65_r, src54_r, src87_r, src76_r, src6554, src8776);
1945  XORI_B2_128_SB(src6554, src8776);
1946  out10 = DPADD_SH3_SH(src2110, src4332, src6554, filt0, filt1, filt2);
1947  out32 = DPADD_SH3_SH(src4332, src6554, src8776, filt0, filt1, filt2);
1948  SRARI_H2_SH(out10, out32, 5);
1949  SAT_SH2_SH(out10, out32, 7);
1950  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
1951  res = PCKEV_XORI128_UB(out10, out32);
1952 
1953  if (ver_offset) {
1954  src32_r = (v16i8) __msa_insve_w((v4i32) src3, 1, (v4i32) src4);
1955  src54_r = (v16i8) __msa_insve_w((v4i32) src5, 1, (v4i32) src6);
1956  } else {
1957  src32_r = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3);
1958  src54_r = (v16i8) __msa_insve_w((v4i32) src4, 1, (v4i32) src5);
1959  }
1960 
1961  src32_r = (v16i8) __msa_insve_d((v2i64) src32_r, 1, (v2i64) src54_r);
1962  res = __msa_aver_u_b(res, (v16u8) src32_r);
1963 
1964  ILVR_W2_UB(dst1, dst0, dst3, dst2, dst0, dst1);
1965 
1966  dst0 = (v16u8) __msa_pckev_d((v2i64) dst1, (v2i64) dst0);
1967  dst0 = __msa_aver_u_b(res, dst0);
1968 
1969  ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride);
1970 }
1971 
1973  int32_t src_stride,
1974  uint8_t *dst,
1975  int32_t dst_stride,
1976  uint8_t ver_offset)
1977 {
1978  int32_t loop_cnt;
1979  int16_t filt_const0 = 0xfb01;
1980  int16_t filt_const1 = 0x1414;
1981  int16_t filt_const2 = 0x1fb;
1982  v16u8 dst0, dst1, dst2, dst3;
1983  v16i8 src0, src1, src2, src3, src4, src7, src8, src9, src10;
1984  v16i8 src10_r, src32_r, src76_r, src98_r;
1985  v16i8 src21_r, src43_r, src87_r, src109_r;
1986  v8i16 out0_r, out1_r, out2_r, out3_r;
1987  v16i8 res0, res1;
1988  v16u8 vec0, vec1;
1989  v16i8 filt0, filt1, filt2;
1990 
1991  filt0 = (v16i8) __msa_fill_h(filt_const0);
1992  filt1 = (v16i8) __msa_fill_h(filt_const1);
1993  filt2 = (v16i8) __msa_fill_h(filt_const2);
1994 
1995  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1996  src += (5 * src_stride);
1997 
1998  XORI_B5_128_SB(src0, src1, src2, src3, src4);
1999  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
2000  src10_r, src21_r, src32_r, src43_r);
2001 
2002  for (loop_cnt = 2; loop_cnt--;) {
2003  LD_SB4(src, src_stride, src7, src8, src9, src10);
2004  src += (4 * src_stride);
2005 
2006  XORI_B4_128_SB(src7, src8, src9, src10);
2007  ILVR_B4_SB(src7, src4, src8, src7, src9, src8, src10, src9,
2008  src76_r, src87_r, src98_r, src109_r);
2009  out0_r = DPADD_SH3_SH(src10_r, src32_r, src76_r, filt0, filt1, filt2);
2010  out1_r = DPADD_SH3_SH(src21_r, src43_r, src87_r, filt0, filt1, filt2);
2011  out2_r = DPADD_SH3_SH(src32_r, src76_r, src98_r, filt0, filt1, filt2);
2012  out3_r = DPADD_SH3_SH(src43_r, src87_r, src109_r, filt0, filt1, filt2);
2013  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
2014  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
2015  PCKEV_B2_SB(out1_r, out0_r, out3_r, out2_r, res0, res1);
2016 
2017  if (ver_offset) {
2018  PCKEV_D2_SB(src4, src3, src8, src7, src10_r, src32_r);
2019  } else {
2020  PCKEV_D2_SB(src3, src2, src7, src4, src10_r, src32_r);
2021  }
2022 
2023  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2024  ILVR_D2_UB(dst1, dst0, dst3, dst2, dst0, dst1);
2025 
2026  vec0 = (v16u8) __msa_aver_s_b(res0, src10_r);
2027  vec1 = (v16u8) __msa_aver_s_b(res1, src32_r);
2028 
2029  XORI_B2_128_UB(vec0, vec1);
2030  AVER_UB2_UB(vec0, dst0, vec1, dst1, vec0, vec1);
2031  ST8x4_UB(vec0, vec1, dst, dst_stride);
2032  dst += (4 * dst_stride);
2033 
2034  src10_r = src76_r;
2035  src32_r = src98_r;
2036  src21_r = src87_r;
2037  src43_r = src109_r;
2038  src2 = src8;
2039  src3 = src9;
2040  src4 = src10;
2041  }
2042 }
2043 
2045  int32_t src_stride,
2046  uint8_t *dst,
2047  int32_t dst_stride,
2048  uint8_t ver_offset)
2049 {
2050  int32_t loop_cnt;
2051  int16_t filt_const0 = 0xfb01;
2052  int16_t filt_const1 = 0x1414;
2053  int16_t filt_const2 = 0x1fb;
2054  v16u8 dst0, dst1, dst2, dst3;
2055  v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8;
2056  v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
2057  v16i8 src87_r, src10_l, src32_l, src54_l, src76_l, src21_l, src43_l;
2058  v16i8 src65_l, src87_l;
2059  v8i16 out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l;
2060  v16i8 out0, out1, out2, out3;
2061  v16i8 filt0, filt1, filt2;
2062  v16u8 res0, res1, res2, res3;
2063 
2064  filt0 = (v16i8) __msa_fill_h(filt_const0);
2065  filt1 = (v16i8) __msa_fill_h(filt_const1);
2066  filt2 = (v16i8) __msa_fill_h(filt_const2);
2067 
2068  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2069  src += (5 * src_stride);
2070 
2071  XORI_B5_128_SB(src0, src1, src2, src3, src4);
2072  ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
2073  src10_r, src21_r, src32_r, src43_r);
2074  ILVL_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
2075  src10_l, src21_l, src32_l, src43_l);
2076 
2077  for (loop_cnt = 4; loop_cnt--;) {
2078  LD_SB4(src, src_stride, src5, src6, src7, src8);
2079  src += (4 * src_stride);
2080 
2081  XORI_B4_128_SB(src5, src6, src7, src8);
2082  ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
2083  src54_r, src65_r, src76_r, src87_r);
2084  ILVL_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7,
2085  src54_l, src65_l, src76_l, src87_l);
2086  out0_r = DPADD_SH3_SH(src10_r, src32_r, src54_r, filt0, filt1, filt2);
2087  out1_r = DPADD_SH3_SH(src21_r, src43_r, src65_r, filt0, filt1, filt2);
2088  out2_r = DPADD_SH3_SH(src32_r, src54_r, src76_r, filt0, filt1, filt2);
2089  out3_r = DPADD_SH3_SH(src43_r, src65_r, src87_r, filt0, filt1, filt2);
2090  out0_l = DPADD_SH3_SH(src10_l, src32_l, src54_l, filt0, filt1, filt2);
2091  out1_l = DPADD_SH3_SH(src21_l, src43_l, src65_l, filt0, filt1, filt2);
2092  out2_l = DPADD_SH3_SH(src32_l, src54_l, src76_l, filt0, filt1, filt2);
2093  out3_l = DPADD_SH3_SH(src43_l, src65_l, src87_l, filt0, filt1, filt2);
2094  SRARI_H4_SH(out0_r, out1_r, out2_r, out3_r, 5);
2095  SRARI_H4_SH(out0_l, out1_l, out2_l, out3_l, 5);
2096  SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
2097  SAT_SH4_SH(out0_l, out1_l, out2_l, out3_l, 7);
2098  PCKEV_B4_SB(out0_l, out0_r, out1_l, out1_r, out2_l, out2_r, out3_l,
2099  out3_r, out0, out1, out2, out3);
2100  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2101 
2102  if (ver_offset) {
2103  res0 = (v16u8) __msa_aver_s_b(out0, src3);
2104  res1 = (v16u8) __msa_aver_s_b(out1, src4);
2105  res2 = (v16u8) __msa_aver_s_b(out2, src5);
2106  res3 = (v16u8) __msa_aver_s_b(out3, src6);
2107  } else {
2108  res0 = (v16u8) __msa_aver_s_b(out0, src2);
2109  res1 = (v16u8) __msa_aver_s_b(out1, src3);
2110  res2 = (v16u8) __msa_aver_s_b(out2, src4);
2111  res3 = (v16u8) __msa_aver_s_b(out3, src5);
2112  }
2113 
2114  XORI_B4_128_UB(res0, res1, res2, res3);
2115  AVER_UB4_UB(res0, dst0, res1, dst1, res2, dst2, res3, dst3,
2116  dst0, dst1, dst2, dst3);
2117  ST_UB4(dst0, dst1, dst2, dst3, dst, dst_stride);
2118  dst += (4 * dst_stride);
2119 
2120  src10_r = src54_r;
2121  src32_r = src76_r;
2122  src21_r = src65_r;
2123  src43_r = src87_r;
2124  src10_l = src54_l;
2125  src32_l = src76_l;
2126  src21_l = src65_l;
2127  src43_l = src87_l;
2128  src2 = src6;
2129  src3 = src7;
2130  src4 = src8;
2131  }
2132 }
2133 
2135  int32_t src_stride,
2136  uint8_t *dst, int32_t dst_stride)
2137 {
2138  v16i8 src0, src1, src2, src3, src4;
2139  v16i8 mask0, mask1, mask2;
2140  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
2141  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
2142  v8i16 res0, res1, res2, res3;
2143  v16u8 dst0, dst1, dst2, dst3;
2144  v16u8 tmp0, tmp1, tmp2, tmp3;
2145 
2146  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
2147  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2148  src += (5 * src_stride);
2149 
2150  XORI_B5_128_SB(src0, src1, src2, src3, src4);
2151 
2152  hz_out0 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
2153  mask0, mask1, mask2);
2154  hz_out2 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
2155  mask0, mask1, mask2);
2156 
2157  PCKOD_D2_SH(hz_out0, hz_out0, hz_out2, hz_out2, hz_out1, hz_out3);
2158 
2159  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
2160 
2161  LD_SB4(src, src_stride, src0, src1, src2, src3);
2162  XORI_B4_128_SB(src0, src1, src2, src3);
2163 
2164  hz_out5 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
2165  mask0, mask1, mask2);
2166  hz_out7 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
2167  mask0, mask1, mask2);
2168 
2169  PCKOD_D2_SH(hz_out5, hz_out5, hz_out7, hz_out7, hz_out6, hz_out8);
2170 
2171  res0 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out0, hz_out1, hz_out2,
2172  hz_out3, hz_out4, hz_out5);
2173  res1 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out1, hz_out2, hz_out3,
2174  hz_out4, hz_out5, hz_out6);
2175  res2 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out2, hz_out3, hz_out4,
2176  hz_out5, hz_out6, hz_out7);
2177  res3 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out3, hz_out4, hz_out5,
2178  hz_out6, hz_out7, hz_out8);
2179  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2180  tmp0 = PCKEV_XORI128_UB(res0, res1);
2181  tmp1 = PCKEV_XORI128_UB(res2, res3);
2182  PCKEV_D2_UB(dst1, dst0, dst3, dst2, tmp2, tmp3);
2183  AVER_UB2_UB(tmp0, tmp2, tmp1, tmp3, tmp0, tmp1);
2184 
2185  ST4x4_UB(tmp0, tmp1, 0, 2, 0, 2, dst, dst_stride);
2186 }
2187 
2189  int32_t src_stride,
2190  uint8_t *dst, int32_t dst_stride,
2191  int32_t height)
2192 {
2193  uint32_t loop_cnt;
2194  v16i8 src0, src1, src2, src3, src4;
2195  v16i8 mask0, mask1, mask2;
2196  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
2197  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
2198  v16u8 dst0, dst1, dst2, dst3;
2199  v8i16 res0, res1, res2, res3;
2200 
2201  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
2202 
2203  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2204  XORI_B5_128_SB(src0, src1, src2, src3, src4);
2205  src += (5 * src_stride);
2206 
2207  hz_out0 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
2208  hz_out1 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
2209  hz_out2 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
2210  hz_out3 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
2211  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
2212 
2213  for (loop_cnt = (height >> 2); loop_cnt--;) {
2214  LD_SB4(src, src_stride, src0, src1, src2, src3);
2215  XORI_B4_128_SB(src0, src1, src2, src3);
2216  src += (4 * src_stride);
2217 
2218  hz_out5 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
2219  hz_out6 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
2220  hz_out7 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
2221  hz_out8 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
2222 
2223  res0 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out0, hz_out1, hz_out2,
2224  hz_out3, hz_out4, hz_out5);
2225  res1 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out1, hz_out2, hz_out3,
2226  hz_out4, hz_out5, hz_out6);
2227  res2 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out2, hz_out3, hz_out4,
2228  hz_out5, hz_out6, hz_out7);
2229  res3 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out3, hz_out4, hz_out5,
2230  hz_out6, hz_out7, hz_out8);
2231  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2232  CONVERT_UB_AVG_ST8x4_UB(res0, res1, res2, res3, dst0, dst1, dst2, dst3,
2233  dst, dst_stride);
2234 
2235  dst += (4 * dst_stride);
2236  hz_out3 = hz_out7;
2237  hz_out1 = hz_out5;
2238  hz_out5 = hz_out4;
2239  hz_out4 = hz_out8;
2240  hz_out2 = hz_out6;
2241  hz_out0 = hz_out5;
2242  }
2243 }
2244 
2246  int32_t src_stride,
2247  uint8_t *dst,
2248  int32_t dst_stride)
2249 {
2250  avc_luma_mid_and_aver_dst_8w_msa(src, src_stride, dst, dst_stride, 16);
2251  avc_luma_mid_and_aver_dst_8w_msa(src + 8, src_stride, dst + 8, dst_stride,
2252  16);
2253 }
2254 
2256  int32_t src_stride,
2257  uint8_t *dst,
2258  int32_t dst_stride,
2259  int32_t height,
2260  uint8_t horiz_offset)
2261 {
2262  uint32_t row;
2263  v16i8 src0, src1, src2, src3, src4, src5, src6;
2264  v16u8 dst0, dst1, res;
2265  v8i16 vt_res0, vt_res1, vt_res2, vt_res3;
2266  v4i32 hz_res0, hz_res1;
2267  v8i16 res0, res1;
2268  v8i16 shf_vec0, shf_vec1, shf_vec2, shf_vec3, shf_vec4, shf_vec5;
2269  v8i16 mask0 = { 0, 5, 1, 6, 2, 7, 3, 8 };
2270  v8i16 mask1 = { 1, 4, 2, 5, 3, 6, 4, 7 };
2271  v8i16 mask2 = { 2, 3, 3, 4, 4, 5, 5, 6 };
2272  v8i16 minus5h = __msa_ldi_h(-5);
2273  v8i16 plus20h = __msa_ldi_h(20);
2274  v8i16 zeros = { 0 };
2275 
2276  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2277  src += (5 * src_stride);
2278 
2279  XORI_B5_128_SB(src0, src1, src2, src3, src4);
2280 
2281  for (row = (height >> 1); row--;) {
2282  LD_SB2(src, src_stride, src5, src6);
2283  src += (2 * src_stride);
2284 
2285  XORI_B2_128_SB(src5, src6);
2286  LD_UB2(dst, dst_stride, dst0, dst1);
2287 
2288  dst0 = (v16u8) __msa_ilvr_w((v4i32) dst1, (v4i32) dst0);
2289 
2290  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src0, src1, src2, src3, src4, src5,
2291  vt_res0, vt_res1);
2292  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src1, src2, src3, src4, src5, src6,
2293  vt_res2, vt_res3);
2294  VSHF_H3_SH(vt_res0, vt_res1, vt_res0, vt_res1, vt_res0, vt_res1,
2295  mask0, mask1, mask2, shf_vec0, shf_vec1, shf_vec2);
2296  VSHF_H3_SH(vt_res2, vt_res3, vt_res2, vt_res3, vt_res2, vt_res3,
2297  mask0, mask1, mask2, shf_vec3, shf_vec4, shf_vec5);
2298 
2299  hz_res0 = __msa_hadd_s_w(shf_vec0, shf_vec0);
2300  DPADD_SH2_SW(shf_vec1, shf_vec2, minus5h, plus20h, hz_res0, hz_res0);
2301 
2302  hz_res1 = __msa_hadd_s_w(shf_vec3, shf_vec3);
2303  DPADD_SH2_SW(shf_vec4, shf_vec5, minus5h, plus20h, hz_res1, hz_res1);
2304 
2305  SRARI_W2_SW(hz_res0, hz_res1, 10);
2306  SAT_SW2_SW(hz_res0, hz_res1, 7);
2307 
2308  res0 = __msa_srari_h(shf_vec2, 5);
2309  res1 = __msa_srari_h(shf_vec5, 5);
2310 
2311  SAT_SH2_SH(res0, res1, 7);
2312 
2313  if (horiz_offset) {
2314  res0 = __msa_ilvod_h(zeros, res0);
2315  res1 = __msa_ilvod_h(zeros, res1);
2316  } else {
2317  ILVEV_H2_SH(res0, zeros, res1, zeros, res0, res1);
2318  }
2319  hz_res0 = __msa_aver_s_w(hz_res0, (v4i32) res0);
2320  hz_res1 = __msa_aver_s_w(hz_res1, (v4i32) res1);
2321  res0 = __msa_pckev_h((v8i16) hz_res1, (v8i16) hz_res0);
2322 
2323  res = PCKEV_XORI128_UB(res0, res0);
2324 
2325  dst0 = __msa_aver_u_b(res, dst0);
2326 
2327  ST4x2_UB(dst0, dst, dst_stride);
2328  dst += (2 * dst_stride);
2329 
2330  src0 = src2;
2331  src1 = src3;
2332  src2 = src4;
2333  src3 = src5;
2334  src4 = src6;
2335  }
2336 }
2337 
2339  int32_t src_stride,
2340  uint8_t *dst,
2341  int32_t dst_stride,
2342  int32_t height,
2343  uint8_t horiz_offset)
2344 {
2345  uint32_t multiple8_cnt;
2346 
2347  for (multiple8_cnt = 2; multiple8_cnt--;) {
2348  avc_luma_midh_qrt_and_aver_dst_4w_msa(src, src_stride, dst, dst_stride,
2349  height, horiz_offset);
2350 
2351  src += 4;
2352  dst += 4;
2353  }
2354 }
2355 
2357  int32_t src_stride,
2358  uint8_t *dst,
2359  int32_t dst_stride,
2360  int32_t height,
2361  uint8_t horiz_offset)
2362 {
2363  uint32_t multiple8_cnt;
2364 
2365  for (multiple8_cnt = 4; multiple8_cnt--;) {
2366  avc_luma_midh_qrt_and_aver_dst_4w_msa(src, src_stride, dst, dst_stride,
2367  height, horiz_offset);
2368 
2369  src += 4;
2370  dst += 4;
2371  }
2372 }
2373 
2375  int32_t src_stride,
2376  uint8_t *dst,
2377  int32_t dst_stride,
2378  int32_t height,
2379  uint8_t ver_offset)
2380 {
2381  int32_t loop_cnt;
2382  int32_t out0, out1;
2383  v16i8 src0, src1, src2, src3, src4;
2384  v16u8 dst0, dst1;
2385  v16i8 mask0, mask1, mask2;
2386  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
2387  v8i16 hz_out4, hz_out5, hz_out6;
2388  v8i16 res0, res1, res2, res3;
2389  v16u8 vec0, vec1;
2390 
2391  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
2392  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2393  src += (5 * src_stride);
2394 
2395  XORI_B5_128_SB(src0, src1, src2, src3, src4);
2396 
2397  hz_out0 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
2398  mask0, mask1, mask2);
2399  hz_out2 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src2, src3,
2400  mask0, mask1, mask2);
2401 
2402  PCKOD_D2_SH(hz_out0, hz_out0, hz_out2, hz_out2, hz_out1, hz_out3);
2403 
2404  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
2405 
2406  for (loop_cnt = (height >> 1); loop_cnt--;) {
2407  LD_SB2(src, src_stride, src0, src1);
2408  src += (2 * src_stride);
2409 
2410  XORI_B2_128_SB(src0, src1);
2411  LD_UB2(dst, dst_stride, dst0, dst1);
2412  hz_out5 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,
2413  mask0, mask1,
2414  mask2);
2415  hz_out6 = (v8i16) __msa_pckod_d((v2i64) hz_out5, (v2i64) hz_out5);
2416  res0 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out0, hz_out1, hz_out2,
2417  hz_out3, hz_out4, hz_out5);
2418  res2 = AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(hz_out1, hz_out2, hz_out3,
2419  hz_out4, hz_out5, hz_out6);
2420 
2421  if (ver_offset) {
2422  res1 = __msa_srari_h(hz_out3, 5);
2423  res3 = __msa_srari_h(hz_out4, 5);
2424  } else {
2425  res1 = __msa_srari_h(hz_out2, 5);
2426  res3 = __msa_srari_h(hz_out3, 5);
2427  }
2428 
2429  SAT_SH2_SH(res1, res3, 7);
2430 
2431  res0 = __msa_aver_s_h(res0, res1);
2432  res1 = __msa_aver_s_h(res2, res3);
2433 
2434  vec0 = PCKEV_XORI128_UB(res0, res0);
2435  vec1 = PCKEV_XORI128_UB(res1, res1);
2436 
2437  AVER_UB2_UB(vec0, dst0, vec1, dst1, dst0, dst1);
2438 
2439  out0 = __msa_copy_u_w((v4i32) dst0, 0);
2440  out1 = __msa_copy_u_w((v4i32) dst1, 0);
2441  SW(out0, dst);
2442  dst += dst_stride;
2443  SW(out1, dst);
2444  dst += dst_stride;
2445 
2446  hz_out0 = hz_out2;
2447  hz_out1 = hz_out3;
2448  hz_out2 = hz_out4;
2449  hz_out3 = hz_out5;
2450  hz_out4 = hz_out6;
2451  }
2452 }
2453 
2455  int32_t src_stride,
2456  uint8_t *dst,
2457  int32_t dst_stride,
2458  int32_t height,
2459  uint8_t vert_offset)
2460 {
2461  int32_t loop_cnt;
2462  v16i8 src0, src1, src2, src3, src4;
2463  v16u8 dst0, dst1, dst2, dst3;
2464  v16i8 mask0, mask1, mask2;
2465  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
2466  v8i16 hz_out4, hz_out5, hz_out6, hz_out7, hz_out8;
2467  v8i16 res0, res1, res2, res3;
2468  v8i16 res4, res5, res6, res7;
2469 
2470  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
2471 
2472  LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2473  XORI_B5_128_SB(src0, src1, src2, src3, src4);
2474  src += (5 * src_stride);
2475 
2476  hz_out0 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
2477  hz_out1 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
2478  hz_out2 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
2479  hz_out3 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
2480  hz_out4 = AVC_HORZ_FILTER_SH(src4, mask0, mask1, mask2);
2481 
2482  for (loop_cnt = (height >> 2); loop_cnt--;) {
2483  LD_SB4(src, src_stride, src0, src1, src2, src3);
2484  XORI_B4_128_SB(src0, src1, src2, src3);
2485  src += (4 * src_stride);
2486 
2487  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2488 
2489  hz_out5 = AVC_HORZ_FILTER_SH(src0, mask0, mask1, mask2);
2490  hz_out6 = AVC_HORZ_FILTER_SH(src1, mask0, mask1, mask2);
2491  hz_out7 = AVC_HORZ_FILTER_SH(src2, mask0, mask1, mask2);
2492  hz_out8 = AVC_HORZ_FILTER_SH(src3, mask0, mask1, mask2);
2493 
2494  res0 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out0, hz_out1, hz_out2,
2495  hz_out3, hz_out4, hz_out5);
2496  res2 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out1, hz_out2, hz_out3,
2497  hz_out4, hz_out5, hz_out6);
2498  res4 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out2, hz_out3, hz_out4,
2499  hz_out5, hz_out6, hz_out7);
2500  res6 = AVC_CALC_DPADD_H_6PIX_2COEFF_SH(hz_out3, hz_out4, hz_out5,
2501  hz_out6, hz_out7, hz_out8);
2502 
2503  if (vert_offset) {
2504  res1 = __msa_srari_h(hz_out3, 5);
2505  res3 = __msa_srari_h(hz_out4, 5);
2506  res5 = __msa_srari_h(hz_out5, 5);
2507  res7 = __msa_srari_h(hz_out6, 5);
2508  } else {
2509  res1 = __msa_srari_h(hz_out2, 5);
2510  res3 = __msa_srari_h(hz_out3, 5);
2511  res5 = __msa_srari_h(hz_out4, 5);
2512  res7 = __msa_srari_h(hz_out5, 5);
2513  }
2514 
2515  SAT_SH4_SH(res1, res3, res5, res7, 7);
2516 
2517  res0 = __msa_aver_s_h(res0, res1);
2518  res1 = __msa_aver_s_h(res2, res3);
2519  res2 = __msa_aver_s_h(res4, res5);
2520  res3 = __msa_aver_s_h(res6, res7);
2521 
2522  CONVERT_UB_AVG_ST8x4_UB(res0, res1, res2, res3, dst0, dst1, dst2, dst3,
2523  dst, dst_stride);
2524  dst += (4 * dst_stride);
2525 
2526  hz_out0 = hz_out4;
2527  hz_out1 = hz_out5;
2528  hz_out2 = hz_out6;
2529  hz_out3 = hz_out7;
2530  hz_out4 = hz_out8;
2531  }
2532 }
2533 
2535  int32_t src_stride,
2536  uint8_t *dst,
2537  int32_t dst_stride,
2538  int32_t height,
2539  uint8_t vert_offset)
2540 {
2541  int32_t multiple8_cnt;
2542 
2543  for (multiple8_cnt = 2; multiple8_cnt--;) {
2544  avc_luma_midv_qrt_and_aver_dst_8w_msa(src, src_stride, dst, dst_stride,
2545  height, vert_offset);
2546 
2547  src += 8;
2548  dst += 8;
2549  }
2550 }
2551 
2553  const uint8_t *src_y,
2554  int32_t src_stride,
2555  uint8_t *dst,
2556  int32_t dst_stride)
2557 {
2558  v16i8 src_hz0, src_hz1, src_hz2, src_hz3;
2559  v16u8 dst0, dst1, dst2, dst3;
2560  v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4;
2561  v16i8 src_vt5, src_vt6, src_vt7, src_vt8;
2562  v16i8 mask0, mask1, mask2;
2563  v8i16 hz_out0, hz_out1, vert_out0, vert_out1;
2564  v8i16 res0, res1;
2565  v16u8 res;
2566 
2567  LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
2568  LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4);
2569  src_y += (5 * src_stride);
2570 
2571  src_vt0 = (v16i8) __msa_insve_w((v4i32) src_vt0, 1, (v4i32) src_vt1);
2572  src_vt1 = (v16i8) __msa_insve_w((v4i32) src_vt1, 1, (v4i32) src_vt2);
2573  src_vt2 = (v16i8) __msa_insve_w((v4i32) src_vt2, 1, (v4i32) src_vt3);
2574  src_vt3 = (v16i8) __msa_insve_w((v4i32) src_vt3, 1, (v4i32) src_vt4);
2575 
2576  XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3);
2577  LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3);
2578  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2579  XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3);
2580  hz_out0 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src_hz0, src_hz1,
2581  mask0, mask1, mask2);
2582  hz_out1 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src_hz2, src_hz3,
2583  mask0, mask1, mask2);
2584  SRARI_H2_SH(hz_out0, hz_out1, 5);
2585  SAT_SH2_SH(hz_out0, hz_out1, 7);
2586  LD_SB4(src_y, src_stride, src_vt5, src_vt6, src_vt7, src_vt8);
2587 
2588  src_vt4 = (v16i8) __msa_insve_w((v4i32) src_vt4, 1, (v4i32) src_vt5);
2589  src_vt5 = (v16i8) __msa_insve_w((v4i32) src_vt5, 1, (v4i32) src_vt6);
2590  src_vt6 = (v16i8) __msa_insve_w((v4i32) src_vt6, 1, (v4i32) src_vt7);
2591  src_vt7 = (v16i8) __msa_insve_w((v4i32) src_vt7, 1, (v4i32) src_vt8);
2592 
2593  XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7);
2594 
2595  /* filter calc */
2596  vert_out0 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt0, src_vt1, src_vt2,
2597  src_vt3, src_vt4, src_vt5);
2598  vert_out1 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt2, src_vt3, src_vt4,
2599  src_vt5, src_vt6, src_vt7);
2600  SRARI_H2_SH(vert_out0, vert_out1, 5);
2601  SAT_SH2_SH(vert_out0, vert_out1, 7);
2602 
2603  res1 = __msa_srari_h((hz_out1 + vert_out1), 1);
2604  res0 = __msa_srari_h((hz_out0 + vert_out0), 1);
2605 
2606  SAT_SH2_SH(res0, res1, 7);
2607  res = PCKEV_XORI128_UB(res0, res1);
2608 
2609  dst0 = (v16u8) __msa_insve_w((v4i32) dst0, 1, (v4i32) dst1);
2610  dst1 = (v16u8) __msa_insve_w((v4i32) dst2, 1, (v4i32) dst3);
2611  dst0 = (v16u8) __msa_insve_d((v2i64) dst0, 1, (v2i64) dst1);
2612  dst0 = __msa_aver_u_b(res, dst0);
2613 
2614  ST4x4_UB(dst0, dst0, 0, 1, 2, 3, dst, dst_stride);
2615 }
2616 
2618  const uint8_t *src_y,
2619  int32_t src_stride,
2620  uint8_t *dst,
2621  int32_t dst_stride)
2622 {
2623  uint32_t loop_cnt;
2624  v16i8 src_hz0, src_hz1, src_hz2, src_hz3;
2625  v16u8 dst0, dst1, dst2, dst3;
2626  v16i8 src_vt0, src_vt1, src_vt2, src_vt3;
2627  v16i8 src_vt4, src_vt5, src_vt6, src_vt7, src_vt8;
2628  v16i8 mask0, mask1, mask2;
2629  v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
2630  v8i16 vert_out0, vert_out1, vert_out2, vert_out3;
2631  v8i16 out0, out1, out2, out3;
2632 
2633  LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2);
2634 
2635  LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4);
2636  src_y += (5 * src_stride);
2637 
2638  src_vt0 = (v16i8) __msa_insve_d((v2i64) src_vt0, 1, (v2i64) src_vt1);
2639  src_vt1 = (v16i8) __msa_insve_d((v2i64) src_vt1, 1, (v2i64) src_vt2);
2640  src_vt2 = (v16i8) __msa_insve_d((v2i64) src_vt2, 1, (v2i64) src_vt3);
2641  src_vt3 = (v16i8) __msa_insve_d((v2i64) src_vt3, 1, (v2i64) src_vt4);
2642 
2643  XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3);
2644 
2645  for (loop_cnt = 2; loop_cnt--;) {
2646  LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3);
2647  XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3);
2648  src_x += (4 * src_stride);
2649 
2650  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2651  hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, mask0, mask1, mask2);
2652  hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, mask0, mask1, mask2);
2653  hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, mask0, mask1, mask2);
2654  hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, mask0, mask1, mask2);
2655  SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5);
2656  SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7);
2657  LD_SB4(src_y, src_stride, src_vt5, src_vt6, src_vt7, src_vt8);
2658  src_y += (4 * src_stride);
2659 
2660  src_vt4 = (v16i8) __msa_insve_d((v2i64) src_vt4, 1, (v2i64) src_vt5);
2661  src_vt5 = (v16i8) __msa_insve_d((v2i64) src_vt5, 1, (v2i64) src_vt6);
2662  src_vt6 = (v16i8) __msa_insve_d((v2i64) src_vt6, 1, (v2i64) src_vt7);
2663  src_vt7 = (v16i8) __msa_insve_d((v2i64) src_vt7, 1, (v2i64) src_vt8);
2664 
2665  XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7);
2666  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt0, src_vt1, src_vt2, src_vt3,
2667  src_vt4, src_vt5, vert_out0, vert_out1);
2668  AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt2, src_vt3, src_vt4, src_vt5,
2669  src_vt6, src_vt7, vert_out2, vert_out3);
2670  SRARI_H4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 5);
2671  SAT_SH4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 7);
2672 
2673  out0 = __msa_srari_h((hz_out0 + vert_out0), 1);
2674  out1 = __msa_srari_h((hz_out1 + vert_out1), 1);
2675  out2 = __msa_srari_h((hz_out2 + vert_out2), 1);
2676  out3 = __msa_srari_h((hz_out3 + vert_out3), 1);
2677 
2678  SAT_SH4_SH(out0, out1, out2, out3, 7);
2679  CONVERT_UB_AVG_ST8x4_UB(out0, out1, out2, out3, dst0, dst1, dst2, dst3,
2680  dst, dst_stride);
2681  dst += (4 * dst_stride);
2682 
2683  src_vt0 = src_vt4;
2684  src_vt1 = src_vt5;
2685  src_vt2 = src_vt6;
2686  src_vt3 = src_vt7;
2687  src_vt4 = src_vt8;
2688  }
2689 }
2690 
2692  const uint8_t *src_y,
2693  int32_t src_stride,
2694  uint8_t *dst,
2695  int32_t dst_stride)
2696 {
2697  uint32_t multiple8_cnt;
2698 
2699  for (multiple8_cnt = 2; multiple8_cnt--;) {
2700  avc_luma_hv_qrt_and_aver_dst_8x8_msa(src_x, src_y, src_stride,
2701  dst, dst_stride);
2702 
2703  src_x += 8;
2704  src_y += 8;
2705  dst += 8;
2706  }
2707 
2708  src_x += (8 * src_stride) - 16;
2709  src_y += (8 * src_stride) - 16;
2710  dst += (8 * dst_stride) - 16;
2711 
2712  for (multiple8_cnt = 2; multiple8_cnt--;) {
2713  avc_luma_hv_qrt_and_aver_dst_8x8_msa(src_x, src_y, src_stride,
2714  dst, dst_stride);
2715 
2716  src_x += 8;
2717  src_y += 8;
2718  dst += 8;
2719  }
2720 }
2721 
2722 static void copy_width8_msa(const uint8_t *src, int32_t src_stride,
2723  uint8_t *dst, int32_t dst_stride,
2724  int32_t height)
2725 {
2726  int32_t cnt;
2727  uint64_t out0, out1, out2, out3, out4, out5, out6, out7;
2728  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
2729 
2730  if (0 == height % 12) {
2731  for (cnt = (height / 12); cnt--;) {
2732  LD_UB8(src, src_stride,
2733  src0, src1, src2, src3, src4, src5, src6, src7);
2734  src += (8 * src_stride);
2735 
2736  out0 = __msa_copy_u_d((v2i64) src0, 0);
2737  out1 = __msa_copy_u_d((v2i64) src1, 0);
2738  out2 = __msa_copy_u_d((v2i64) src2, 0);
2739  out3 = __msa_copy_u_d((v2i64) src3, 0);
2740  out4 = __msa_copy_u_d((v2i64) src4, 0);
2741  out5 = __msa_copy_u_d((v2i64) src5, 0);
2742  out6 = __msa_copy_u_d((v2i64) src6, 0);
2743  out7 = __msa_copy_u_d((v2i64) src7, 0);
2744 
2745  SD4(out0, out1, out2, out3, dst, dst_stride);
2746  dst += (4 * dst_stride);
2747  SD4(out4, out5, out6, out7, dst, dst_stride);
2748  dst += (4 * dst_stride);
2749 
2750  LD_UB4(src, src_stride, src0, src1, src2, src3);
2751  src += (4 * src_stride);
2752 
2753  out0 = __msa_copy_u_d((v2i64) src0, 0);
2754  out1 = __msa_copy_u_d((v2i64) src1, 0);
2755  out2 = __msa_copy_u_d((v2i64) src2, 0);
2756  out3 = __msa_copy_u_d((v2i64) src3, 0);
2757 
2758  SD4(out0, out1, out2, out3, dst, dst_stride);
2759  dst += (4 * dst_stride);
2760  }
2761  } else if (0 == height % 8) {
2762  for (cnt = height >> 3; cnt--;) {
2763  LD_UB8(src, src_stride,
2764  src0, src1, src2, src3, src4, src5, src6, src7);
2765  src += (8 * src_stride);
2766 
2767  out0 = __msa_copy_u_d((v2i64) src0, 0);
2768  out1 = __msa_copy_u_d((v2i64) src1, 0);
2769  out2 = __msa_copy_u_d((v2i64) src2, 0);
2770  out3 = __msa_copy_u_d((v2i64) src3, 0);
2771  out4 = __msa_copy_u_d((v2i64) src4, 0);
2772  out5 = __msa_copy_u_d((v2i64) src5, 0);
2773  out6 = __msa_copy_u_d((v2i64) src6, 0);
2774  out7 = __msa_copy_u_d((v2i64) src7, 0);
2775 
2776  SD4(out0, out1, out2, out3, dst, dst_stride);
2777  dst += (4 * dst_stride);
2778  SD4(out4, out5, out6, out7, dst, dst_stride);
2779  dst += (4 * dst_stride);
2780  }
2781  } else if (0 == height % 4) {
2782  for (cnt = (height / 4); cnt--;) {
2783  LD_UB4(src, src_stride, src0, src1, src2, src3);
2784  src += (4 * src_stride);
2785  out0 = __msa_copy_u_d((v2i64) src0, 0);
2786  out1 = __msa_copy_u_d((v2i64) src1, 0);
2787  out2 = __msa_copy_u_d((v2i64) src2, 0);
2788  out3 = __msa_copy_u_d((v2i64) src3, 0);
2789 
2790  SD4(out0, out1, out2, out3, dst, dst_stride);
2791  dst += (4 * dst_stride);
2792  }
2793  } else if (0 == height % 2) {
2794  for (cnt = (height / 2); cnt--;) {
2795  LD_UB2(src, src_stride, src0, src1);
2796  src += (2 * src_stride);
2797  out0 = __msa_copy_u_d((v2i64) src0, 0);
2798  out1 = __msa_copy_u_d((v2i64) src1, 0);
2799 
2800  SD(out0, dst);
2801  dst += dst_stride;
2802  SD(out1, dst);
2803  dst += dst_stride;
2804  }
2805  }
2806 }
2807 
2808 static void copy_16multx8mult_msa(const uint8_t *src, int32_t src_stride,
2809  uint8_t *dst, int32_t dst_stride,
2811 {
2812  int32_t cnt, loop_cnt;
2813  const uint8_t *src_tmp;
2814  uint8_t *dst_tmp;
2815  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
2816 
2817  for (cnt = (width >> 4); cnt--;) {
2818  src_tmp = src;
2819  dst_tmp = dst;
2820 
2821  for (loop_cnt = (height >> 3); loop_cnt--;) {
2822  LD_UB8(src_tmp, src_stride,
2823  src0, src1, src2, src3, src4, src5, src6, src7);
2824  src_tmp += (8 * src_stride);
2825 
2826  ST_UB8(src0, src1, src2, src3, src4, src5, src6, src7,
2827  dst_tmp, dst_stride);
2828  dst_tmp += (8 * dst_stride);
2829  }
2830 
2831  src += 16;
2832  dst += 16;
2833  }
2834 }
2835 
2836 static void copy_width16_msa(const uint8_t *src, int32_t src_stride,
2837  uint8_t *dst, int32_t dst_stride,
2838  int32_t height)
2839 {
2840  int32_t cnt;
2841  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
2842 
2843  if (0 == height % 12) {
2844  for (cnt = (height / 12); cnt--;) {
2845  LD_UB8(src, src_stride,
2846  src0, src1, src2, src3, src4, src5, src6, src7);
2847  src += (8 * src_stride);
2848  ST_UB8(src0, src1, src2, src3, src4, src5, src6, src7,
2849  dst, dst_stride);
2850  dst += (8 * dst_stride);
2851 
2852  LD_UB4(src, src_stride, src0, src1, src2, src3);
2853  src += (4 * src_stride);
2854  ST_UB4(src0, src1, src2, src3, dst, dst_stride);
2855  dst += (4 * dst_stride);
2856  }
2857  } else if (0 == height % 8) {
2858  copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 16);
2859  } else if (0 == height % 4) {
2860  for (cnt = (height >> 2); cnt--;) {
2861  LD_UB4(src, src_stride, src0, src1, src2, src3);
2862  src += (4 * src_stride);
2863 
2864  ST_UB4(src0, src1, src2, src3, dst, dst_stride);
2865  dst += (4 * dst_stride);
2866  }
2867  }
2868 }
2869 
2870 static void avg_width4_msa(const uint8_t *src, int32_t src_stride,
2871  uint8_t *dst, int32_t dst_stride,
2872  int32_t height)
2873 {
2874  int32_t cnt;
2875  uint32_t out0, out1, out2, out3;
2876  v16u8 src0, src1, src2, src3;
2877  v16u8 dst0, dst1, dst2, dst3;
2878 
2879  if (0 == (height % 4)) {
2880  for (cnt = (height / 4); cnt--;) {
2881  LD_UB4(src, src_stride, src0, src1, src2, src3);
2882  src += (4 * src_stride);
2883 
2884  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2885 
2886  AVER_UB4_UB(src0, dst0, src1, dst1, src2, dst2, src3, dst3,
2887  dst0, dst1, dst2, dst3);
2888 
2889  out0 = __msa_copy_u_w((v4i32) dst0, 0);
2890  out1 = __msa_copy_u_w((v4i32) dst1, 0);
2891  out2 = __msa_copy_u_w((v4i32) dst2, 0);
2892  out3 = __msa_copy_u_w((v4i32) dst3, 0);
2893  SW4(out0, out1, out2, out3, dst, dst_stride);
2894  dst += (4 * dst_stride);
2895  }
2896  } else if (0 == (height % 2)) {
2897  for (cnt = (height / 2); cnt--;) {
2898  LD_UB2(src, src_stride, src0, src1);
2899  src += (2 * src_stride);
2900 
2901  LD_UB2(dst, dst_stride, dst0, dst1);
2902 
2903  AVER_UB2_UB(src0, dst0, src1, dst1, dst0, dst1);
2904 
2905  out0 = __msa_copy_u_w((v4i32) dst0, 0);
2906  out1 = __msa_copy_u_w((v4i32) dst1, 0);
2907  SW(out0, dst);
2908  dst += dst_stride;
2909  SW(out1, dst);
2910  dst += dst_stride;
2911  }
2912  }
2913 }
2914 
2915 static void avg_width8_msa(const uint8_t *src, int32_t src_stride,
2916  uint8_t *dst, int32_t dst_stride,
2917  int32_t height)
2918 {
2919  int32_t cnt;
2920  uint64_t out0, out1, out2, out3;
2921  v16u8 src0, src1, src2, src3;
2922  v16u8 dst0, dst1, dst2, dst3;
2923 
2924  for (cnt = (height / 4); cnt--;) {
2925  LD_UB4(src, src_stride, src0, src1, src2, src3);
2926  src += (4 * src_stride);
2927  LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
2928 
2929  AVER_UB4_UB(src0, dst0, src1, dst1, src2, dst2, src3, dst3,
2930  dst0, dst1, dst2, dst3);
2931 
2932  out0 = __msa_copy_u_d((v2i64) dst0, 0);
2933  out1 = __msa_copy_u_d((v2i64) dst1, 0);
2934  out2 = __msa_copy_u_d((v2i64) dst2, 0);
2935  out3 = __msa_copy_u_d((v2i64) dst3, 0);
2936  SD4(out0, out1, out2, out3, dst, dst_stride);
2937  dst += (4 * dst_stride);
2938  }
2939 }
2940 
2941 static void avg_width16_msa(const uint8_t *src, int32_t src_stride,
2942  uint8_t *dst, int32_t dst_stride,
2943  int32_t height)
2944 {
2945  int32_t cnt;
2946  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
2947  v16u8 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
2948 
2949  for (cnt = (height / 8); cnt--;) {
2950  LD_UB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
2951  src += (8 * src_stride);
2952  LD_UB8(dst, dst_stride, dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7);
2953 
2954  AVER_UB4_UB(src0, dst0, src1, dst1, src2, dst2, src3, dst3,
2955  dst0, dst1, dst2, dst3);
2956  AVER_UB4_UB(src4, dst4, src5, dst5, src6, dst6, src7, dst7,
2957  dst4, dst5, dst6, dst7);
2958  ST_UB8(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst, dst_stride);
2959  dst += (8 * dst_stride);
2960  }
2961 }
2962 
2964  ptrdiff_t stride)
2965 {
2966  copy_width16_msa(src, stride, dst, stride, 16);
2967 }
2968 
2970  ptrdiff_t stride)
2971 {
2972  copy_width8_msa(src, stride, dst, stride, 8);
2973 }
2974 
2976  ptrdiff_t stride)
2977 {
2978  avg_width16_msa(src, stride, dst, stride, 16);
2979 }
2980 
2982  ptrdiff_t stride)
2983 {
2984  avg_width8_msa(src, stride, dst, stride, 8);
2985 }
2986 
2988  ptrdiff_t stride)
2989 {
2990  avg_width4_msa(src, stride, dst, stride, 4);
2991 }
2992 
2994  ptrdiff_t stride)
2995 {
2996  avc_luma_hz_qrt_16w_msa(src - 2, stride, dst, stride, 16, 0);
2997 }
2998 
3000  ptrdiff_t stride)
3001 {
3002  avc_luma_hz_qrt_16w_msa(src - 2, stride, dst, stride, 16, 1);
3003 }
3004 
3006  ptrdiff_t stride)
3007 {
3008  avc_luma_hz_qrt_8w_msa(src - 2, stride, dst, stride, 8, 0);
3009 }
3010 
3012  ptrdiff_t stride)
3013 {
3014  avc_luma_hz_qrt_8w_msa(src - 2, stride, dst, stride, 8, 1);
3015 }
3016 
3018  ptrdiff_t stride)
3019 {
3020  avc_luma_hz_qrt_4w_msa(src - 2, stride, dst, stride, 4, 0);
3021 }
3022 
3024  ptrdiff_t stride)
3025 {
3026  avc_luma_hz_qrt_4w_msa(src - 2, stride, dst, stride, 4, 1);
3027 }
3028 
3030  ptrdiff_t stride)
3031 {
3032  avc_luma_hz_16w_msa(src - 2, stride, dst, stride, 16);
3033 }
3034 
3036  ptrdiff_t stride)
3037 {
3038  avc_luma_hz_8w_msa(src - 2, stride, dst, stride, 8);
3039 }
3040 
3042  ptrdiff_t stride)
3043 {
3044  avc_luma_hz_4w_msa(src - 2, stride, dst, stride, 4);
3045 }
3046 
3048  ptrdiff_t stride)
3049 {
3050  avc_luma_vt_qrt_16w_msa(src - (stride * 2), stride, dst, stride, 16, 0);
3051 }
3052 
3054  ptrdiff_t stride)
3055 {
3056  avc_luma_vt_qrt_16w_msa(src - (stride * 2), stride, dst, stride, 16, 1);
3057 }
3058 
3060  ptrdiff_t stride)
3061 {
3062  avc_luma_vt_qrt_8w_msa(src - (stride * 2), stride, dst, stride, 8, 0);
3063 }
3064 
3066  ptrdiff_t stride)
3067 {
3068  avc_luma_vt_qrt_8w_msa(src - (stride * 2), stride, dst, stride, 8, 1);
3069 }
3070 
3072  ptrdiff_t stride)
3073 {
3074  avc_luma_vt_qrt_4w_msa(src - (stride * 2), stride, dst, stride, 4, 0);
3075 }
3076 
3078  ptrdiff_t stride)
3079 {
3080  avc_luma_vt_qrt_4w_msa(src - (stride * 2), stride, dst, stride, 4, 1);
3081 }
3082 
3084  ptrdiff_t stride)
3085 {
3086  avc_luma_hv_qrt_16w_msa(src - 2,
3087  src - (stride * 2), stride, dst, stride, 16);
3088 }
3089 
3091  ptrdiff_t stride)
3092 {
3093  avc_luma_hv_qrt_16w_msa(src - 2,
3094  src - (stride * 2) +
3095  sizeof(uint8_t), stride, dst, stride, 16);
3096 }
3097 
3099  ptrdiff_t stride)
3100 {
3101  avc_luma_hv_qrt_16w_msa(src + stride - 2,
3102  src - (stride * 2), stride, dst, stride, 16);
3103 }
3104 
3106  ptrdiff_t stride)
3107 {
3108  avc_luma_hv_qrt_16w_msa(src + stride - 2,
3109  src - (stride * 2) +
3110  sizeof(uint8_t), stride, dst, stride, 16);
3111 }
3112 
3114  ptrdiff_t stride)
3115 {
3116  avc_luma_hv_qrt_8w_msa(src - 2, src - (stride * 2), stride, dst, stride, 8);
3117 }
3118 
3120  ptrdiff_t stride)
3121 {
3122  avc_luma_hv_qrt_8w_msa(src - 2,
3123  src - (stride * 2) +
3124  sizeof(uint8_t), stride, dst, stride, 8);
3125 }
3126 
3128  ptrdiff_t stride)
3129 {
3130  avc_luma_hv_qrt_8w_msa(src + stride - 2,
3131  src - (stride * 2), stride, dst, stride, 8);
3132 }
3133 
3135  ptrdiff_t stride)
3136 {
3137  avc_luma_hv_qrt_8w_msa(src + stride - 2,
3138  src - (stride * 2) +
3139  sizeof(uint8_t), stride, dst, stride, 8);
3140 }
3141 
3142 
3144  ptrdiff_t stride)
3145 {
3146  avc_luma_hv_qrt_4w_msa(src - 2, src - (stride * 2), stride, dst, stride, 4);
3147 }
3148 
3150  ptrdiff_t stride)
3151 {
3152  avc_luma_hv_qrt_4w_msa(src - 2,
3153  src - (stride * 2) +
3154  sizeof(uint8_t), stride, dst, stride, 4);
3155 }
3156 
3158  ptrdiff_t stride)
3159 {
3160  avc_luma_hv_qrt_4w_msa(src + stride - 2,
3161  src - (stride * 2), stride, dst, stride, 4);
3162 }
3163 
3165  ptrdiff_t stride)
3166 {
3167  avc_luma_hv_qrt_4w_msa(src + stride - 2,
3168  src - (stride * 2) +
3169  sizeof(uint8_t), stride, dst, stride, 4);
3170 }
3171 
3173  ptrdiff_t stride)
3174 {
3175  avc_luma_midv_qrt_16w_msa(src - (2 * stride) - 2,
3176  stride, dst, stride, 16, 0);
3177 }
3178 
3180  ptrdiff_t stride)
3181 {
3182  avc_luma_midv_qrt_16w_msa(src - (2 * stride) - 2,
3183  stride, dst, stride, 16, 1);
3184 }
3185 
3187  ptrdiff_t stride)
3188 {
3189  avc_luma_midv_qrt_8w_msa(src - (2 * stride) - 2, stride, dst, stride, 8, 0);
3190 }
3191 
3193  ptrdiff_t stride)
3194 {
3195  avc_luma_midv_qrt_8w_msa(src - (2 * stride) - 2, stride, dst, stride, 8, 1);
3196 }
3197 
3199  ptrdiff_t stride)
3200 {
3201  avc_luma_midv_qrt_4w_msa(src - (2 * stride) - 2, stride, dst, stride, 4, 0);
3202 }
3203 
3205  ptrdiff_t stride)
3206 {
3207  avc_luma_midv_qrt_4w_msa(src - (2 * stride) - 2, stride, dst, stride, 4, 1);
3208 }
3209 
3211  ptrdiff_t stride)
3212 {
3213  avc_luma_vt_16w_msa(src - (stride * 2), stride, dst, stride, 16);
3214 }
3215 
3217  ptrdiff_t stride)
3218 {
3219  avc_luma_vt_8w_msa(src - (stride * 2), stride, dst, stride, 8);
3220 }
3221 
3223  ptrdiff_t stride)
3224 {
3225  avc_luma_vt_4w_msa(src - (stride * 2), stride, dst, stride, 4);
3226 }
3227 
3229  ptrdiff_t stride)
3230 {
3231  avc_luma_midh_qrt_16w_msa(src - (2 * stride) - 2,
3232  stride, dst, stride, 16, 0);
3233 }
3234 
3236  ptrdiff_t stride)
3237 {
3238  avc_luma_midh_qrt_16w_msa(src - (2 * stride) - 2,
3239  stride, dst, stride, 16, 1);
3240 }
3241 
3243  ptrdiff_t stride)
3244 {
3245  avc_luma_midh_qrt_8w_msa(src - (2 * stride) - 2, stride, dst, stride, 8, 0);
3246 }
3247 
3249  ptrdiff_t stride)
3250 {
3251  avc_luma_midh_qrt_8w_msa(src - (2 * stride) - 2, stride, dst, stride, 8, 1);
3252 }
3253 
3255  ptrdiff_t stride)
3256 {
3257  avc_luma_midh_qrt_4w_msa(src - (2 * stride) - 2, stride, dst, stride, 4, 0);
3258 }
3259 
3261  ptrdiff_t stride)
3262 {
3263  avc_luma_midh_qrt_4w_msa(src - (2 * stride) - 2, stride, dst, stride, 4, 1);
3264 }
3265 
3267  ptrdiff_t stride)
3268 {
3269  avc_luma_mid_16w_msa(src - (2 * stride) - 2, stride, dst, stride, 16);
3270 }
3271 
3273  ptrdiff_t stride)
3274 {
3275  avc_luma_mid_8w_msa(src - (2 * stride) - 2, stride, dst, stride, 8);
3276 }
3277 
3279  ptrdiff_t stride)
3280 {
3281  avc_luma_mid_4w_msa(src - (2 * stride) - 2, stride, dst, stride, 4);
3282 }
3283 
3285  ptrdiff_t stride)
3286 {
3287  avc_luma_hz_qrt_and_aver_dst_16x16_msa(src - 2, stride, dst, stride, 0);
3288 }
3289 
3291  ptrdiff_t stride)
3292 {
3293  avc_luma_hz_qrt_and_aver_dst_16x16_msa(src - 2, stride, dst, stride, 1);
3294 }
3295 
3297  ptrdiff_t stride)
3298 {
3299  avc_luma_hz_qrt_and_aver_dst_8x8_msa(src - 2, stride, dst, stride, 0);
3300 }
3301 
3303  ptrdiff_t stride)
3304 {
3305  avc_luma_hz_qrt_and_aver_dst_8x8_msa(src - 2, stride, dst, stride, 1);
3306 }
3307 
3309  ptrdiff_t stride)
3310 {
3311  avc_luma_hz_qrt_and_aver_dst_4x4_msa(src - 2, stride, dst, stride, 0);
3312 }
3313 
3315  ptrdiff_t stride)
3316 {
3317  avc_luma_hz_qrt_and_aver_dst_4x4_msa(src - 2, stride, dst, stride, 1);
3318 }
3319 
3321  ptrdiff_t stride)
3322 {
3323  avc_luma_hz_and_aver_dst_16x16_msa(src - 2, stride, dst, stride);
3324 }
3325 
3327  ptrdiff_t stride)
3328 {
3329  avc_luma_hz_and_aver_dst_8x8_msa(src - 2, stride, dst, stride);
3330 }
3331 
3333  ptrdiff_t stride)
3334 {
3335  avc_luma_hz_and_aver_dst_4x4_msa(src - 2, stride, dst, stride);
3336 }
3337 
3339  ptrdiff_t stride)
3340 {
3341  avc_luma_vt_qrt_and_aver_dst_16x16_msa(src - (stride * 2),
3342  stride, dst, stride, 0);
3343 }
3344 
3346  ptrdiff_t stride)
3347 {
3348  avc_luma_vt_qrt_and_aver_dst_16x16_msa(src - (stride * 2),
3349  stride, dst, stride, 1);
3350 }
3351 
3353  ptrdiff_t stride)
3354 {
3355  avc_luma_vt_qrt_and_aver_dst_8x8_msa(src - (stride * 2),
3356  stride, dst, stride, 0);
3357 }
3358 
3360  ptrdiff_t stride)
3361 {
3362  avc_luma_vt_qrt_and_aver_dst_8x8_msa(src - (stride * 2),
3363  stride, dst, stride, 1);
3364 }
3365 
3367  ptrdiff_t stride)
3368 {
3369  avc_luma_vt_qrt_and_aver_dst_4x4_msa(src - (stride * 2),
3370  stride, dst, stride, 0);
3371 }
3372 
3374  ptrdiff_t stride)
3375 {
3376  avc_luma_vt_qrt_and_aver_dst_4x4_msa(src - (stride * 2),
3377  stride, dst, stride, 1);
3378 }
3379 
3381  ptrdiff_t stride)
3382 {
3384  src - (stride * 2),
3385  stride, dst, stride);
3386 }
3387 
3389  ptrdiff_t stride)
3390 {
3392  src - (stride * 2) +
3393  sizeof(uint8_t), stride,
3394  dst, stride);
3395 }
3396 
3398  ptrdiff_t stride)
3399 {
3400  avc_luma_hv_qrt_and_aver_dst_16x16_msa(src + stride - 2,
3401  src - (stride * 2),
3402  stride, dst, stride);
3403 }
3404 
3406  ptrdiff_t stride)
3407 {
3408  avc_luma_hv_qrt_and_aver_dst_16x16_msa(src + stride - 2,
3409  src - (stride * 2) +
3410  sizeof(uint8_t), stride,
3411  dst, stride);
3412 }
3413 
3415  ptrdiff_t stride)
3416 {
3418  src - (stride * 2),
3419  stride, dst, stride);
3420 }
3421 
3423  ptrdiff_t stride)
3424 {
3426  src - (stride * 2) +
3427  sizeof(uint8_t), stride, dst, stride);
3428 }
3429 
3431  ptrdiff_t stride)
3432 {
3433  avc_luma_hv_qrt_and_aver_dst_8x8_msa(src + stride - 2,
3434  src - (stride * 2),
3435  stride, dst, stride);
3436 }
3437 
3439  ptrdiff_t stride)
3440 {
3441  avc_luma_hv_qrt_and_aver_dst_8x8_msa(src + stride - 2,
3442  src - (stride * 2) +
3443  sizeof(uint8_t), stride, dst, stride);
3444 }
3445 
3446 
3448  ptrdiff_t stride)
3449 {
3451  src - (stride * 2),
3452  stride, dst, stride);
3453 }
3454 
3456  ptrdiff_t stride)
3457 {
3459  src - (stride * 2) +
3460  sizeof(uint8_t), stride, dst, stride);
3461 }
3462 
3464  ptrdiff_t stride)
3465 {
3466  avc_luma_hv_qrt_and_aver_dst_4x4_msa(src + stride - 2,
3467  src - (stride * 2),
3468  stride, dst, stride);
3469 }
3470 
3472  ptrdiff_t stride)
3473 {
3474  avc_luma_hv_qrt_and_aver_dst_4x4_msa(src + stride - 2,
3475  src - (stride * 2) +
3476  sizeof(uint8_t), stride, dst, stride);
3477 }
3478 
3480  ptrdiff_t stride)
3481 {
3482  avc_luma_midv_qrt_and_aver_dst_16w_msa(src - (2 * stride) - 2,
3483  stride, dst, stride, 16, 0);
3484 }
3485 
3487  ptrdiff_t stride)
3488 {
3489  avc_luma_midv_qrt_and_aver_dst_16w_msa(src - (2 * stride) - 2,
3490  stride, dst, stride, 16, 1);
3491 }
3492 
3494  ptrdiff_t stride)
3495 {
3496  avc_luma_midv_qrt_and_aver_dst_8w_msa(src - (2 * stride) - 2,
3497  stride, dst, stride, 8, 0);
3498 }
3499 
3501  ptrdiff_t stride)
3502 {
3503  avc_luma_midv_qrt_and_aver_dst_8w_msa(src - (2 * stride) - 2,
3504  stride, dst, stride, 8, 1);
3505 }
3506 
3508  ptrdiff_t stride)
3509 {
3510  avc_luma_midv_qrt_and_aver_dst_4w_msa(src - (2 * stride) - 2,
3511  stride, dst, stride, 4, 0);
3512 }
3513 
3515  ptrdiff_t stride)
3516 {
3517  avc_luma_midv_qrt_and_aver_dst_4w_msa(src - (2 * stride) - 2,
3518  stride, dst, stride, 4, 1);
3519 }
3520 
3522  ptrdiff_t stride)
3523 {
3524  avc_luma_vt_and_aver_dst_16x16_msa(src - (stride * 2), stride, dst, stride);
3525 }
3526 
3528  ptrdiff_t stride)
3529 {
3530  avc_luma_vt_and_aver_dst_8x8_msa(src - (stride * 2), stride, dst, stride);
3531 }
3532 
3534  ptrdiff_t stride)
3535 {
3536  avc_luma_vt_and_aver_dst_4x4_msa(src - (stride * 2), stride, dst, stride);
3537 }
3538 
3540  ptrdiff_t stride)
3541 {
3542  avc_luma_midh_qrt_and_aver_dst_16w_msa(src - (2 * stride) - 2,
3543  stride, dst, stride, 16, 0);
3544 }
3545 
3547  ptrdiff_t stride)
3548 {
3549  avc_luma_midh_qrt_and_aver_dst_16w_msa(src - (2 * stride) - 2,
3550  stride, dst, stride, 16, 1);
3551 }
3552 
3554  ptrdiff_t stride)
3555 {
3556  avc_luma_midh_qrt_and_aver_dst_8w_msa(src - (2 * stride) - 2,
3557  stride, dst, stride, 8, 0);
3558 }
3559 
3561  ptrdiff_t stride)
3562 {
3563  avc_luma_midh_qrt_and_aver_dst_8w_msa(src - (2 * stride) - 2,
3564  stride, dst, stride, 8, 1);
3565 }
3566 
3568  ptrdiff_t stride)
3569 {
3570  avc_luma_midh_qrt_and_aver_dst_4w_msa(src - (2 * stride) - 2,
3571  stride, dst, stride, 4, 0);
3572 }
3573 
3575  ptrdiff_t stride)
3576 {
3577  avc_luma_midh_qrt_and_aver_dst_4w_msa(src - (2 * stride) - 2,
3578  stride, dst, stride, 4, 1);
3579 }
3580 
3582  ptrdiff_t stride)
3583 {
3584  avc_luma_mid_and_aver_dst_16x16_msa(src - (2 * stride) - 2,
3585  stride, dst, stride);
3586 }
3587 
3589  ptrdiff_t stride)
3590 {
3591  avc_luma_mid_and_aver_dst_8w_msa(src - (2 * stride) - 2,
3592  stride, dst, stride, 8);
3593 }
3594 
3596  ptrdiff_t stride)
3597 {
3598  avc_luma_mid_and_aver_dst_4x4_msa(src - (2 * stride) - 2,
3599  stride, dst, stride);
3600 }
void ff_put_h264_qpel8_mc32_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc02_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_hz_qrt_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t hor_offset)
Definition: h264qpel_msa.c:289
void ff_avg_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define XORI_B5_128_SB(...)
static void avc_luma_vt_and_aver_dst_4x4_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_mid_and_aver_dst_4x4_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midh_qrt_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t horiz_offset)
static void avc_luma_hz_qrt_and_aver_dst_4x4_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, uint8_t hor_offset)
static void avc_luma_midv_qrt_and_aver_dst_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t vert_offset)
void ff_put_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midv_qrt_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t ver_offset)
#define XORI_B2_128_SB(...)
#define PCKEV_XORI128_UB(in0, in1)
void ff_avg_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define LD_SB(...)
void ff_avg_h264_qpel8_mc12_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avg_width16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
void ff_avg_h264_qpel16_mc32_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_hz_qrt_and_aver_dst_8x8_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, uint8_t hor_offset)
#define ST_SB2(...)
static void avc_luma_hv_qrt_8w_msa(const uint8_t *src_x, const uint8_t *src_y, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
#define ILVR_D2_UB(...)
#define LD_UB4(...)
#define DPADD_SB4_SH(...)
void ff_put_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_hv_qrt_4w_msa(const uint8_t *src_x, const uint8_t *src_y, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midh_qrt_and_aver_dst_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t horiz_offset)
#define HADD_SB4_SH(...)
void ff_avg_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define LD_SB2(...)
void ff_put_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define ST4x4_UB(in0, in1, idx0, idx1, idx2, idx3, pdst, stride)
void ff_avg_h264_qpel4_mc12_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:546
void ff_avg_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define DPADD_SH3_SH(in0, in1, in2, coeff0, coeff1, coeff2)
#define VSHF_B2_SB(...)
static void avc_luma_midv_qrt_and_aver_dst_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t ver_offset)
#define XORI_B4_128_UB(...)
void ff_avg_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc00_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_hz_and_aver_dst_16x16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
#define ILVR_D2_SB(...)
uint8_t
void ff_put_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define LD_UB2(...)
void ff_avg_h264_qpel8_mc23_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_qrt_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t ver_offset)
Definition: h264qpel_msa.c:615
#define SRARI_H4_SH(...)
void ff_avg_h264_qpel4_mc01_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_hz_qrt_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t hor_offset)
Definition: h264qpel_msa.c:335
#define XORI_B2_128_UB(...)
static void avc_luma_hz_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:151
static void avc_luma_mid_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:891
void ff_avg_h264_qpel16_mc02_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midv_qrt_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t vert_offset)
#define AVC_CALC_DPADD_H_6PIX_2COEFF_R_SH(vec0, vec1, vec2, vec3, vec4, vec5)
Definition: h264qpel_msa.c:113
static void avc_luma_hv_qrt_and_aver_dst_8x8_msa(const uint8_t *src_x, const uint8_t *src_y, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc22_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midh_qrt_and_aver_dst_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t horiz_offset)
void ff_put_h264_qpel16_mc01_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define PCKEV_B2_SB(...)
#define SD
Definition: dvdsubdec.c:735
#define AVER_ST8x4_UB(in0, in1, in2, in3, in4, in5, in6, in7, pdst, stride)
static void avg_width8_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define SAT_SW2_SW(...)
void ff_put_h264_qpel8_mc01_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midh_qrt_and_aver_dst_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t horiz_offset)
static void copy_width8_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
#define SW4(in0, in1, in2, in3, pdst, stride)
static void avc_luma_mid_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:826
#define XORI_B4_128_SB(...)
void ff_put_h264_qpel4_mc02_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void copy_16multx8mult_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t width)
static void avg_width4_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
#define AVC_CALC_DPADD_H_6PIX_2COEFF_SH(in0, in1, in2, in3, in4, in5)
Definition: h264qpel_msa.c:24
#define VSHF_H3_SH(...)
static void avc_luma_midh_qrt_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t horiz_offset)
Definition: h264qpel_msa.c:959
void ff_avg_h264_qpel16_mc00_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define DPADD_SB2_SH(...)
#define SRARI_H2_SH(...)
static void avc_luma_vt_qrt_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t ver_offset)
Definition: h264qpel_msa.c:742
void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static const uint8_t luma_mask_arr[16 *8]
Definition: h264qpel_msa.c:67
static void avc_luma_hz_qrt_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t hor_offset)
Definition: h264qpel_msa.c:390
#define AVC_HORZ_FILTER_SH(in, mask0, mask1, mask2)
Definition: h264qpel_msa.c:48
static void avc_luma_hv_qrt_16w_msa(const uint8_t *src_x, const uint8_t *src_y, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
#define LD_UB8(...)
void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_hz_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:184
void ff_put_h264_qpel4_mc21_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
int32_t
void ff_put_h264_qpel16_mc23_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel16_mc01_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define PCKEV_B4_SB(...)
#define AVER_UB2_UB(...)
#define SRARI_W2_SW(...)
#define LD_SB3(...)
void ff_put_h264_qpel16_mc12_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define SAT_SH4_SH(...)
#define LD_SB4(...)
#define PCKEV_B4_UB(...)
void ff_avg_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define ST_UB2(...)
#define ST_UB8(...)
#define AVER_UB4_UB(...)
#define ST_UB4(...)
#define CONVERT_UB_AVG_ST8x4_UB(in0, in1, in2, in3,dst0, dst1, dst2, dst3, pdst, stride)
void ff_avg_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel4_mc12_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define src1
Definition: h264pred.c:139
void ff_avg_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
AVS_Value src
Definition: avisynth_c.h:482
void ff_put_h264_qpel4_mc22_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define ILVL_B4_SB(...)
static void avc_luma_vt_and_aver_dst_16x16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel4_mc32_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define SAT_SH2_SH(...)
void ff_put_h264_qpel8_mc21_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define PCKEV_D2_SB(...)
void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel4_mc23_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:494
void ff_put_h264_qpel8_mc00_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel4_mc20_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_qrt_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t ver_offset)
Definition: h264qpel_msa.c:678
void ff_avg_h264_qpel8_mc32_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
BYTE int const BYTE int int int height
Definition: avisynth_c.h:676
#define src0
Definition: h264pred.c:138
void ff_avg_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midv_qrt_and_aver_dst_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t vert_offset)
void ff_avg_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define HADD_SB2_SH(...)
void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel8_mc03_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_midh_qrt_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t horiz_offset)
void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc22_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define SD4(in0, in1, in2, in3, pdst, stride)
static void avc_luma_hz_and_aver_dst_4x4_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
#define SW(val, pdst)
#define ST_SB4(...)
#define DPADD_SH2_SW(...)
#define PCKOD_D2_SH(...)
static void avc_luma_hz_qrt_and_aver_dst_16x16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, uint8_t hor_offset)
void ff_avg_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define ILVR_W2_UB(...)
void ff_avg_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define LD_SB5(...)
static void avc_luma_hz_and_aver_dst_8x8_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_put_h264_qpel8_mc20_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_qrt_and_aver_dst_16x16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, uint8_t ver_offset)
#define AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src0, src1,mask0, mask1, mask2)
Definition: h264qpel_msa.c:134
GLint GLenum GLboolean GLsizei stride
Definition: opengl_enc.c:105
static void avc_luma_vt_qrt_and_aver_dst_4x4_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, uint8_t ver_offset)
static void avc_luma_midv_qrt_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, uint8_t ver_offset)
#define ILVEV_H2_SH(...)
static void avc_luma_mid_and_aver_dst_16x16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
#define ST8x4_UB(in0, in1, pdst, stride)
static void avc_luma_mid_and_aver_dst_8w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
void ff_put_h264_qpel16_mc02_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc00_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_qrt_and_aver_dst_8x8_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, uint8_t ver_offset)
void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc01_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc03_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_avg_h264_qpel8_mc02_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(vec0, vec1, vec2, vec3, vec4, vec5)
Definition: h264qpel_msa.c:97
void ff_avg_h264_qpel8_mc20_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_4w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:445
void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> out
void ff_avg_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define ILVR_B4_SB(...)
static void avc_luma_hv_qrt_and_aver_dst_4x4_msa(const uint8_t *src_x, const uint8_t *src_y, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel16_mc03_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define PCKEV_D2_UB(...)
static void avc_luma_hv_qrt_and_aver_dst_16x16_msa(const uint8_t *src_x, const uint8_t *src_y, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define ST8x1_UB(in, pdst)
static void copy_width16_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
#define ST4x2_UB(in, pdst, stride)
static void avc_luma_hz_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:225
#define PCKEV_B2_UB(...)
static void avc_luma_mid_16w_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height)
Definition: h264qpel_msa.c:946
void ff_avg_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
void ff_put_h264_qpel16_mc32_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
#define AVC_CALC_DPADD_B_6PIX_2COEFF_SH(vec0, vec1, vec2, vec3, vec4, vec5,out1, out2)
Definition: h264qpel_msa.c:82
void ff_put_h264_qpel8_mc12_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static void avc_luma_vt_and_aver_dst_8x8_msa(const uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride)
void ff_avg_h264_qpel16_mc12_msa(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static int width