26 int16_t *dst,
int32_t dst_stride,
35 LD_SB2(src, src_stride, src0, src1);
37 src0 = (v16i8) __msa_ilvr_w((v4i32)
src1, (v4i32) src0);
38 in0 = (v8i16) __msa_ilvr_b(zero, src0);
41 }
else if (4 == height) {
45 LD_SB4(src, src_stride, src0, src1, src2, src3);
47 ILVR_W2_SB(src1, src0, src3, src2, src0, src1);
51 ST8x4_UB(in0, in1, dst, 2 * dst_stride);
52 }
else if (0 == height % 8) {
53 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
54 v8i16 in0, in1, in2, in3;
57 for (loop_cnt = (height >> 3); loop_cnt--;) {
59 src0, src1, src2, src3, src4, src5, src6, src7);
60 src += (8 * src_stride);
62 ILVR_W4_SB(src1, src0, src3, src2, src5, src4, src7, src6,
63 src0, src1, src2, src3);
64 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
67 ST8x8_UB(in0, in1, in2, in3, dst, 2 * dst_stride);
68 dst += (8 * dst_stride);
74 int16_t *dst,
int32_t dst_stride,
79 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
80 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
82 for (loop_cnt = (height >> 3); loop_cnt--;) {
83 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
84 src += (8 * src_stride);
86 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
88 ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
92 ST12x8_UB(in0, in1, in2, in3, in4, in5, in6, in7, dst, 2 * dst_stride);
93 dst += (8 * dst_stride);
98 int16_t *dst,
int32_t dst_stride,
107 LD_SB2(src, src_stride, src0, src1);
112 ST_SH2(in0, in1, dst, dst_stride);
113 }
else if (4 == height) {
115 v8i16 in0, in1, in2, in3;
117 LD_SB4(src, src_stride, src0, src1, src2, src3);
119 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
121 SLLI_4V(in0, in1, in2, in3, 6);
122 ST_SH4(in0, in1, in2, in3, dst, dst_stride);
123 }
else if (6 == height) {
124 v16i8
src0,
src1, src2, src3, src4, src5;
125 v8i16 in0, in1, in2, in3, in4, in5;
127 LD_SB6(src, src_stride, src0, src1, src2, src3, src4, src5);
129 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
132 SLLI_4V(in0, in1, in2, in3, 6);
135 ST_SH6(in0, in1, in2, in3, in4, in5, dst, dst_stride);
136 }
else if (0 == height % 8) {
138 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
139 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
141 for (loop_cnt = (height >> 3); loop_cnt--;) {
143 src0, src1, src2, src3, src4, src5, src6, src7);
144 src += (8 * src_stride);
146 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
148 ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
150 SLLI_4V(in0, in1, in2, in3, 6);
151 SLLI_4V(in4, in5, in6, in7, 6);
152 ST_SH8(in0, in1, in2, in3, in4, in5, in6, in7, dst, dst_stride);
153 dst += (8 * dst_stride);
159 int16_t *dst,
int32_t dst_stride,
164 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
165 v8i16 in0, in1, in0_r, in1_r, in2_r, in3_r;
167 for (loop_cnt = (height >> 3); loop_cnt--;) {
168 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
169 src += (8 * src_stride);
171 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
172 in0_r, in1_r, in2_r, in3_r);
173 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
174 ILVL_W2_SB(src1, src0, src3, src2, src0, src1);
178 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
179 ST8x4_UB(in0, in1, dst + 8, 2 * dst_stride);
180 dst += (4 * dst_stride);
182 ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
183 in0_r, in1_r, in2_r, in3_r);
184 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
185 ILVL_W2_SB(src5, src4, src7, src6, src0, src1);
189 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
190 ST8x4_UB(in0, in1, dst + 8, 2 * dst_stride);
191 dst += (4 * dst_stride);
204 uint32_t loop_cnt, cnt;
206 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
207 v8i16 in0_r, in1_r, in2_r, in3_r;
208 v8i16 in0_l, in1_l, in2_l, in3_l;
210 for (cnt = (width >> 4); cnt--;) {
214 for (loop_cnt = (height >> 3); loop_cnt--;) {
215 LD_SB8(src_tmp, src_stride,
216 src0, src1, src2, src3, src4, src5, src6, src7);
217 src_tmp += (8 * src_stride);
219 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
220 in0_r, in1_r, in2_r, in3_r);
221 ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
222 in0_l, in1_l, in2_l, in3_l);
223 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
224 SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
225 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst_tmp, dst_stride);
226 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst_tmp + 8), dst_stride);
227 dst_tmp += (4 * dst_stride);
229 ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
230 in0_r, in1_r, in2_r, in3_r);
231 ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
232 in0_l, in1_l, in2_l, in3_l);
233 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
234 SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
235 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst_tmp, dst_stride);
236 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst_tmp + 8), dst_stride);
237 dst_tmp += (4 * dst_stride);
246 int16_t *dst,
int32_t dst_stride,
253 v8i16 in0_r, in1_r, in2_r, in3_r;
254 v8i16 in0_l, in1_l, in2_l, in3_l;
256 LD_SB4(src, src_stride, src0, src1, src2, src3);
258 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
259 in0_r, in1_r, in2_r, in3_r);
260 ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
261 in0_l, in1_l, in2_l, in3_l);
262 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
263 SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
264 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
265 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
266 }
else if (12 == height) {
267 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
268 v16i8 src8, src9, src10, src11;
269 v8i16 in0_r, in1_r, in2_r, in3_r;
270 v8i16 in0_l, in1_l, in2_l, in3_l;
272 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
273 src += (8 * src_stride);
274 LD_SB4(src, src_stride, src8, src9, src10, src11);
276 ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
277 in0_r, in1_r, in2_r, in3_r);
278 ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
279 in0_l, in1_l, in2_l, in3_l);
280 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
281 SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
282 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
283 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
284 dst += (4 * dst_stride);
286 ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
287 in0_r, in1_r, in2_r, in3_r);
288 ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
289 in0_l, in1_l, in2_l, in3_l);
290 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
291 SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
292 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
293 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
294 dst += (4 * dst_stride);
296 ILVR_B4_SH(zero, src8, zero, src9, zero, src10, zero, src11,
297 in0_r, in1_r, in2_r, in3_r);
298 ILVL_B4_SH(zero, src8, zero, src9, zero, src10, zero, src11,
299 in0_l, in1_l, in2_l, in3_l);
300 SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
301 SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
302 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
303 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
304 }
else if (0 == (height % 8)) {
311 int16_t *dst,
int32_t dst_stride,
319 int16_t *dst,
int32_t dst_stride,
326 int16_t *dst,
int32_t dst_stride,
333 int16_t *dst,
int32_t dst_stride,
340 int16_t *dst,
int32_t dst_stride,
344 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
345 v8i16 filt0, filt1, filt2, filt3;
346 v16i8 mask1, mask2, mask3;
347 v16i8 vec0, vec1, vec2, vec3;
348 v8i16 dst0, dst1, dst2, dst3;
349 v8i16 filter_vec, const_vec;
350 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 };
353 const_vec = __msa_ldi_h(128);
356 filter_vec =
LD_SH(filter);
357 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
363 for (loop_cnt = (height >> 3); loop_cnt--;) {
364 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
365 src += (8 * src_stride);
368 VSHF_B4_SB(src0, src1, mask0, mask1, mask2, mask3,
369 vec0, vec1, vec2, vec3);
371 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
372 dst0, dst0, dst0, dst0);
373 VSHF_B4_SB(src2, src3, mask0, mask1, mask2, mask3,
374 vec0, vec1, vec2, vec3);
376 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
377 dst1, dst1, dst1, dst1);
378 VSHF_B4_SB(src4, src5, mask0, mask1, mask2, mask3,
379 vec0, vec1, vec2, vec3);
381 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
382 dst2, dst2, dst2, dst2);
383 VSHF_B4_SB(src6, src7, mask0, mask1, mask2, mask3,
384 vec0, vec1, vec2, vec3);
386 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
387 dst3, dst3, dst3, dst3);
389 ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride);
390 dst += (8 * dst_stride);
395 int16_t *dst,
int32_t dst_stride,
400 v8i16 filt0, filt1, filt2, filt3;
401 v16i8 mask1, mask2, mask3;
402 v16i8 vec0, vec1, vec2, vec3;
403 v8i16 dst0, dst1, dst2, dst3;
404 v8i16 filter_vec, const_vec;
405 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
408 const_vec = __msa_ldi_h(128);
411 filter_vec =
LD_SH(filter);
412 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
418 for (loop_cnt = (height >> 2); loop_cnt--;) {
419 LD_SB4(src, src_stride, src0, src1, src2, src3);
420 src += (4 * src_stride);
423 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
424 vec0, vec1, vec2, vec3);
426 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
427 dst0, dst0, dst0, dst0);
428 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
429 vec0, vec1, vec2, vec3);
431 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
432 dst1, dst1, dst1, dst1);
433 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
434 vec0, vec1, vec2, vec3);
436 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
437 dst2, dst2, dst2, dst2);
438 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
439 vec0, vec1, vec2, vec3);
441 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
442 dst3, dst3, dst3, dst3);
444 ST_SH4(dst0, dst1, dst2, dst3, dst, dst_stride);
445 dst += (4 * dst_stride);
450 int16_t *dst,
int32_t dst_stride,
458 int16_t *dst,
int32_t dst_stride,
462 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
463 v8i16 filt0, filt1, filt2, filt3;
464 v16i8 mask1, mask2, mask3;
465 v16i8 vec0, vec1, vec2, vec3;
466 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
467 v8i16 filter_vec, const_vec;
468 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
471 const_vec = __msa_ldi_h(128);
474 filter_vec =
LD_SH(filter);
475 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
481 for (loop_cnt = (height >> 2); loop_cnt--;) {
482 LD_SB4(src, src_stride, src0, src2, src4, src6);
483 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
484 src += (4 * src_stride);
487 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
488 vec0, vec1, vec2, vec3);
490 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
491 dst0, dst0, dst0, dst0);
492 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
493 vec0, vec1, vec2, vec3);
495 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
496 dst1, dst1, dst1, dst1);
497 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
498 vec0, vec1, vec2, vec3);
500 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
501 dst2, dst2, dst2, dst2);
502 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
503 vec0, vec1, vec2, vec3);
505 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
506 dst3, dst3, dst3, dst3);
507 VSHF_B4_SB(src4, src4, mask0, mask1, mask2, mask3,
508 vec0, vec1, vec2, vec3);
510 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
511 dst4, dst4, dst4, dst4);
512 VSHF_B4_SB(src5, src5, mask0, mask1, mask2, mask3,
513 vec0, vec1, vec2, vec3);
515 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
516 dst5, dst5, dst5, dst5);
517 VSHF_B4_SB(src6, src6, mask0, mask1, mask2, mask3,
518 vec0, vec1, vec2, vec3);
520 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
521 dst6, dst6, dst6, dst6);
522 VSHF_B4_SB(src7, src7, mask0, mask1, mask2, mask3,
523 vec0, vec1, vec2, vec3);
525 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
526 dst7, dst7, dst7, dst7);
528 ST_SH4(dst0, dst2, dst4, dst6, dst, dst_stride);
529 ST_SH4(dst1, dst3, dst5, dst7, dst + 8, dst_stride);
530 dst += (4 * dst_stride);
535 int16_t *dst,
int32_t dst_stride,
540 v8i16 filt0, filt1, filt2, filt3;
541 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
542 v16i8 vec0, vec1, vec2, vec3;
543 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
544 v8i16 filter_vec, const_vec;
545 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
548 filter_vec =
LD_SH(filter);
549 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
559 const_vec = __msa_ldi_h(128);
562 for (loop_cnt = (height >> 1); loop_cnt--;) {
563 LD_SB2(src, 16, src0, src1);
565 LD_SB2(src, 16, src2, src3);
569 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
570 vec0, vec1, vec2, vec3);
572 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
573 dst0, dst0, dst0, dst0);
574 VSHF_B4_SB(src0, src1, mask4, mask5, mask6, mask7,
575 vec0, vec1, vec2, vec3);
577 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
578 dst1, dst1, dst1, dst1);
579 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
580 vec0, vec1, vec2, vec3);
582 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
583 dst2, dst2, dst2, dst2);
584 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
585 vec0, vec1, vec2, vec3);
587 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
588 dst3, dst3, dst3, dst3);
589 VSHF_B4_SB(src2, src3, mask4, mask5, mask6, mask7,
590 vec0, vec1, vec2, vec3);
592 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
593 dst4, dst4, dst4, dst4);
594 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
595 vec0, vec1, vec2, vec3);
597 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
598 dst5, dst5, dst5, dst5);
600 ST_SH2(dst0, dst1, dst, 8);
601 ST_SH(dst2, dst + 16);
603 ST_SH2(dst3, dst4, dst, 8);
604 ST_SH(dst5, dst + 16);
610 int16_t *dst,
int32_t dst_stride,
615 v8i16 filt0, filt1, filt2, filt3;
616 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
617 v16i8 vec0, vec1, vec2, vec3;
618 v8i16 dst0, dst1, dst2, dst3;
619 v8i16 filter_vec, const_vec;
620 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
623 filter_vec =
LD_SH(filter);
624 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
634 const_vec = __msa_ldi_h(128);
637 for (loop_cnt = height; loop_cnt--;) {
638 LD_SB2(src, 16, src0, src1);
639 src2 =
LD_SB(src + 24);
643 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
644 vec0, vec1, vec2, vec3);
646 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
647 dst0, dst0, dst0, dst0);
648 VSHF_B4_SB(src0, src1, mask4, mask5, mask6, mask7,
649 vec0, vec1, vec2, vec3);
651 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
652 dst1, dst1, dst1, dst1);
653 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
654 vec0, vec1, vec2, vec3);
656 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
657 dst2, dst2, dst2, dst2);
658 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
659 vec0, vec1, vec2, vec3);
661 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
662 dst3, dst3, dst3, dst3);
664 ST_SH4(dst0, dst1, dst2, dst3, dst, 8);
670 int16_t *dst,
int32_t dst_stride,
675 v8i16 filt0, filt1, filt2, filt3;
676 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
677 v16i8 vec0, vec1, vec2, vec3;
678 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
679 v8i16 filter_vec, const_vec;
680 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
683 filter_vec =
LD_SH(filter);
684 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
694 const_vec = __msa_ldi_h(128);
697 for (loop_cnt = height; loop_cnt--;) {
698 LD_SB3(src, 16, src0, src1, src2);
699 src3 =
LD_SB(src + 40);
703 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
704 vec0, vec1, vec2, vec3);
706 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
707 dst0, dst0, dst0, dst0);
708 VSHF_B4_SB(src0, src1, mask4, mask5, mask6, mask7,
709 vec0, vec1, vec2, vec3);
711 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
712 dst1, dst1, dst1, dst1);
713 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
714 vec0, vec1, vec2, vec3);
716 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
717 dst2, dst2, dst2, dst2);
718 VSHF_B4_SB(src1, src2, mask4, mask5, mask6, mask7,
719 vec0, vec1, vec2, vec3);
721 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
722 dst3, dst3, dst3, dst3);
723 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
724 vec0, vec1, vec2, vec3);
726 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
727 dst4, dst4, dst4, dst4);
728 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
729 vec0, vec1, vec2, vec3);
731 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
732 dst5, dst5, dst5, dst5);
734 ST_SH6(dst0, dst1, dst2, dst3, dst4, dst5, dst, 8);
740 int16_t *dst,
int32_t dst_stride,
745 v8i16 filt0, filt1, filt2, filt3;
746 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
747 v16i8 vec0, vec1, vec2, vec3;
748 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
749 v8i16 filter_vec, const_vec;
750 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
754 filter_vec =
LD_SH(filter);
755 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
765 const_vec = __msa_ldi_h(128);
768 for (loop_cnt = height; loop_cnt--;) {
769 LD_SB4(src, 16, src0, src1, src2, src3);
770 src4 =
LD_SB(src + 56);
774 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
775 vec0, vec1, vec2, vec3);
777 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
778 dst0, dst0, dst0, dst0);
781 VSHF_B4_SB(src0, src1, mask4, mask5, mask6, mask7,
782 vec0, vec1, vec2, vec3);
784 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
785 dst1, dst1, dst1, dst1);
786 ST_SH(dst1, dst + 8);
788 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
789 vec0, vec1, vec2, vec3);
791 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
792 dst2, dst2, dst2, dst2);
793 ST_SH(dst2, dst + 16);
795 VSHF_B4_SB(src1, src2, mask4, mask5, mask6, mask7,
796 vec0, vec1, vec2, vec3);
798 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
799 dst3, dst3, dst3, dst3);
800 ST_SH(dst3, dst + 24);
802 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
803 vec0, vec1, vec2, vec3);
805 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
806 dst4, dst4, dst4, dst4);
807 ST_SH(dst4, dst + 32);
809 VSHF_B4_SB(src2, src3, mask4, mask5, mask6, mask7,
810 vec0, vec1, vec2, vec3);
812 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
813 dst5, dst5, dst5, dst5);
814 ST_SH(dst5, dst + 40);
816 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
817 vec0, vec1, vec2, vec3);
819 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
820 dst6, dst6, dst6, dst6);
821 ST_SH(dst6, dst + 48);
823 VSHF_B4_SB(src4, src4, mask0, mask1, mask2, mask3,
824 vec0, vec1, vec2, vec3);
826 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
827 dst7, dst7, dst7, dst7);
828 ST_SH(dst7, dst + 56);
834 int16_t *dst,
int32_t dst_stride,
838 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
839 v16i8 src9, src10, src11, src12, src13, src14;
840 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
841 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
842 v16i8 src1110_r, src1211_r, src1312_r, src1413_r;
843 v16i8 src2110, src4332, src6554, src8776, src10998;
844 v16i8 src12111110, src14131312;
845 v8i16 dst10, dst32, dst54, dst76;
846 v8i16 filt0, filt1, filt2, filt3;
847 v8i16 filter_vec, const_vec;
849 src -= (3 * src_stride);
851 const_vec = __msa_ldi_h(128);
854 filter_vec =
LD_SH(filter);
855 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
857 LD_SB7(src, src_stride, src0, src1, src2, src3, src4, src5, src6);
858 src += (7 * src_stride);
859 ILVR_B4_SB(src1, src0, src3, src2, src5, src4, src2, src1,
860 src10_r, src32_r, src54_r, src21_r);
861 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
862 ILVR_D3_SB(src21_r, src10_r, src43_r, src32_r, src65_r, src54_r,
863 src2110, src4332, src6554);
866 for (loop_cnt = (height >> 3); loop_cnt--;) {
868 src7, src8, src9, src10, src11, src12, src13, src14);
869 src += (8 * src_stride);
871 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
872 src76_r, src87_r, src98_r, src109_r);
873 ILVR_B4_SB(src11, src10, src12, src11, src13, src12, src14, src13,
874 src1110_r, src1211_r, src1312_r, src1413_r);
875 ILVR_D4_SB(src87_r, src76_r, src109_r, src98_r,
876 src1211_r, src1110_r, src1413_r, src1312_r,
877 src8776, src10998, src12111110, src14131312);
882 filt0, filt1, filt2, filt3, dst10, dst10, dst10, dst10);
885 filt0, filt1, filt2, filt3, dst32, dst32, dst32, dst32);
888 filt0, filt1, filt2, filt3, dst54, dst54, dst54, dst54);
890 DPADD_SB4_SH(src8776, src10998, src12111110, src14131312,
891 filt0, filt1, filt2, filt3, dst76, dst76, dst76, dst76);
893 ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride);
894 dst += (8 * dst_stride);
897 src4332 = src12111110;
898 src6554 = src14131312;
904 int16_t *dst,
int32_t dst_stride,
908 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8, src9, src10;
909 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
910 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
911 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
912 v8i16 filter_vec, const_vec;
913 v8i16 filt0, filt1, filt2, filt3;
915 src -= (3 * src_stride);
916 const_vec = __msa_ldi_h(128);
919 filter_vec =
LD_SH(filter);
920 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
922 LD_SB7(src, src_stride, src0, src1, src2, src3, src4, src5, src6);
923 src += (7 * src_stride);
925 ILVR_B4_SB(src1, src0, src3, src2, src5, src4, src2, src1,
926 src10_r, src32_r, src54_r, src21_r);
927 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
929 for (loop_cnt = (height >> 2); loop_cnt--;) {
930 LD_SB4(src, src_stride, src7, src8, src9, src10);
931 src += (4 * src_stride);
933 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
934 src76_r, src87_r, src98_r, src109_r);
938 filt0, filt1, filt2, filt3,
939 dst0_r, dst0_r, dst0_r, dst0_r);
942 filt0, filt1, filt2, filt3,
943 dst1_r, dst1_r, dst1_r, dst1_r);
946 filt0, filt1, filt2, filt3,
947 dst2_r, dst2_r, dst2_r, dst2_r);
950 filt0, filt1, filt2, filt3,
951 dst3_r, dst3_r, dst3_r, dst3_r);
953 ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride);
954 dst += (4 * dst_stride);
967 int16_t *dst,
int32_t dst_stride,
971 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8, src9, src10;
972 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
973 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
974 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
975 v16i8 src10_l, src32_l, src54_l, src76_l, src98_l;
976 v16i8 src21_l, src43_l, src65_l, src87_l, src109_l;
977 v16i8 src2110, src4332, src6554, src8776, src10998;
978 v8i16 dst0_l, dst1_l;
979 v8i16 filter_vec, const_vec;
980 v8i16 filt0, filt1, filt2, filt3;
982 src -= (3 * src_stride);
983 const_vec = __msa_ldi_h(128);
986 filter_vec =
LD_SH(filter);
987 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
989 LD_SB7(src, src_stride, src0, src1, src2, src3, src4, src5, src6);
990 src += (7 * src_stride);
992 ILVR_B4_SB(src1, src0, src3, src2, src5, src4, src2, src1,
993 src10_r, src32_r, src54_r, src21_r);
994 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
995 ILVL_B4_SB(src1, src0, src3, src2, src5, src4, src2, src1,
996 src10_l, src32_l, src54_l, src21_l);
997 ILVL_B2_SB(src4, src3, src6, src5, src43_l, src65_l);
998 ILVR_D3_SB(src21_l, src10_l, src43_l, src32_l, src65_l, src54_l,
999 src2110, src4332, src6554);
1001 for (loop_cnt = (height >> 2); loop_cnt--;) {
1002 LD_SB4(src, src_stride, src7, src8, src9, src10);
1003 src += (4 * src_stride);
1005 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1006 src76_r, src87_r, src98_r, src109_r);
1007 ILVL_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1008 src76_l, src87_l, src98_l, src109_l);
1009 ILVR_D2_SB(src87_l, src76_l, src109_l, src98_l, src8776, src10998);
1013 filt0, filt1, filt2, filt3,
1014 dst0_r, dst0_r, dst0_r, dst0_r);
1017 filt0, filt1, filt2, filt3,
1018 dst1_r, dst1_r, dst1_r, dst1_r);
1021 filt0, filt1, filt2, filt3,
1022 dst2_r, dst2_r, dst2_r, dst2_r);
1025 filt0, filt1, filt2, filt3,
1026 dst3_r, dst3_r, dst3_r, dst3_r);
1029 filt0, filt1, filt2, filt3,
1030 dst0_l, dst0_l, dst0_l, dst0_l);
1033 filt0, filt1, filt2, filt3,
1034 dst1_l, dst1_l, dst1_l, dst1_l);
1036 ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride);
1037 ST8x4_UB(dst0_l, dst1_l, dst + 8, 2 * dst_stride);
1038 dst += (4 * dst_stride);
1064 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8, src9, src10;
1065 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
1066 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
1067 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
1068 v16i8 src10_l, src32_l, src54_l, src76_l, src98_l;
1069 v16i8 src21_l, src43_l, src65_l, src87_l, src109_l;
1070 v8i16 dst0_l, dst1_l, dst2_l, dst3_l;
1071 v8i16 filter_vec, const_vec;
1072 v8i16 filt0, filt1, filt2, filt3;
1074 src -= (3 * src_stride);
1075 const_vec = __msa_ldi_h(128);
1078 filter_vec =
LD_SH(filter);
1079 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1081 for (cnt = width >> 4; cnt--;) {
1085 LD_SB7(src_tmp, src_stride, src0, src1, src2, src3, src4, src5, src6);
1086 src_tmp += (7 * src_stride);
1088 ILVR_B4_SB(src1, src0, src3, src2, src5, src4, src2, src1,
1089 src10_r, src32_r, src54_r, src21_r);
1090 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
1091 ILVL_B4_SB(src1, src0, src3, src2, src5, src4, src2, src1,
1092 src10_l, src32_l, src54_l, src21_l);
1093 ILVL_B2_SB(src4, src3, src6, src5, src43_l, src65_l);
1095 for (loop_cnt = (height >> 2); loop_cnt--;) {
1096 LD_SB4(src_tmp, src_stride, src7, src8, src9, src10);
1097 src_tmp += (4 * src_stride);
1099 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1100 src76_r, src87_r, src98_r, src109_r);
1101 ILVL_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1102 src76_l, src87_l, src98_l, src109_l);
1106 filt0, filt1, filt2, filt3,
1107 dst0_r, dst0_r, dst0_r, dst0_r);
1110 filt0, filt1, filt2, filt3,
1111 dst1_r, dst1_r, dst1_r, dst1_r);
1114 filt0, filt1, filt2, filt3,
1115 dst2_r, dst2_r, dst2_r, dst2_r);
1118 filt0, filt1, filt2, filt3,
1119 dst3_r, dst3_r, dst3_r, dst3_r);
1122 filt0, filt1, filt2, filt3,
1123 dst0_l, dst0_l, dst0_l, dst0_l);
1126 filt0, filt1, filt2, filt3,
1127 dst1_l, dst1_l, dst1_l, dst1_l);
1130 filt0, filt1, filt2, filt3,
1131 dst2_l, dst2_l, dst2_l, dst2_l);
1134 filt0, filt1, filt2, filt3,
1135 dst3_l, dst3_l, dst3_l, dst3_l);
1137 ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst_tmp, dst_stride);
1138 ST_SH4(dst0_l, dst1_l, dst2_l, dst3_l, dst_tmp + 8, dst_stride);
1139 dst_tmp += (4 * dst_stride);
1162 int16_t *dst,
int32_t dst_stride,
1166 filter, height, 16);
1170 int16_t *dst,
int32_t dst_stride,
1174 filter, height, 16);
1180 int16_t *dst,
int32_t dst_stride,
1184 filter, height, 32);
1188 int16_t *dst,
int32_t dst_stride,
1192 filter, height, 48);
1196 int16_t *dst,
int32_t dst_stride,
1200 filter, height, 64);
1204 int16_t *dst,
int32_t dst_stride,
1205 const int8_t *filter_x,
const int8_t *filter_y,
1209 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
1210 v8i16 filt0, filt1, filt2, filt3;
1211 v4i32 filt_h0, filt_h1, filt_h2, filt_h3;
1212 v16i8 mask1, mask2, mask3;
1213 v8i16 filter_vec, const_vec;
1214 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
1215 v16i8 vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15;
1216 v8i16 dst30, dst41, dst52, dst63, dst66, dst87;
1217 v4i32 dst0_r, dst1_r;
1218 v8i16 dst10_r, dst32_r, dst54_r, dst76_r;
1219 v8i16 dst21_r, dst43_r, dst65_r, dst87_r;
1221 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20
1223 v8u16 mask4 = { 0, 4, 1, 5, 2, 6, 3, 7 };
1225 src -= ((3 * src_stride) + 3);
1226 filter_vec =
LD_SH(filter_x);
1227 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1229 filter_vec =
LD_SH(filter_y);
1230 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
1231 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
1233 SPLATI_W4_SW(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3);
1239 const_vec = __msa_ldi_h(128);
1242 LD_SB7(src, src_stride, src0, src1, src2, src3, src4, src5, src6);
1243 src += (7 * src_stride);
1246 VSHF_B4_SB(src0, src3, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3);
1247 VSHF_B4_SB(src1, src4, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7);
1248 VSHF_B4_SB(src2, src5, mask0, mask1, mask2, mask3,
1249 vec8, vec9, vec10, vec11);
1250 VSHF_B4_SB(src3, src6, mask0, mask1, mask2, mask3,
1251 vec12, vec13, vec14, vec15);
1253 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
1254 dst30, dst30, dst30, dst30);
1256 DPADD_SB4_SH(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3,
1257 dst41, dst41, dst41, dst41);
1259 DPADD_SB4_SH(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3,
1260 dst52, dst52, dst52, dst52);
1262 DPADD_SB4_SH(vec12, vec13, vec14, vec15, filt0, filt1, filt2, filt3,
1263 dst63, dst63, dst63, dst63);
1265 ILVR_H3_SH(dst41, dst30, dst52, dst41, dst63, dst52,
1266 dst10_r, dst21_r, dst32_r);
1267 dst43_r = __msa_ilvl_h(dst41, dst30);
1268 dst54_r = __msa_ilvl_h(dst52, dst41);
1269 dst65_r = __msa_ilvl_h(dst63, dst52);
1270 dst66 = (v8i16) __msa_splati_d((v2i64) dst63, 1);
1272 for (loop_cnt = height >> 1; loop_cnt--;) {
1273 LD_SB2(src, src_stride, src7, src8);
1274 src += (2 * src_stride);
1277 VSHF_B4_SB(src7, src8, mask0, mask1, mask2, mask3,
1278 vec0, vec1, vec2, vec3);
1280 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
1281 dst87, dst87, dst87, dst87);
1282 dst76_r = __msa_ilvr_h(dst87, dst66);
1284 filt_h0, filt_h1, filt_h2, filt_h3);
1285 dst87_r = __msa_vshf_h((v8i16) mask4, dst87, dst87);
1287 filt_h0, filt_h1, filt_h2, filt_h3);
1291 dst0_r = (v4i32) __msa_pckev_h((v8i16) dst1_r, (v8i16) dst0_r);
1292 ST8x2_UB(dst0_r, dst, (2 * dst_stride));
1293 dst += (2 * dst_stride);
1301 dst66 = (v8i16) __msa_splati_d((v2i64) dst87, 1);
1309 const int8_t *filter_x,
1310 const int8_t *filter_y,
1313 uint32_t loop_cnt, cnt;
1316 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
1317 v8i16 filt0, filt1, filt2, filt3;
1318 v4i32 filt_h0, filt_h1, filt_h2, filt_h3;
1319 v16i8 mask1, mask2, mask3;
1320 v8i16 filter_vec, const_vec;
1321 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
1322 v16i8 vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15;
1323 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8;
1324 v4i32 dst0_r, dst0_l;
1325 v8i16 dst10_r, dst32_r, dst54_r, dst76_r;
1326 v8i16 dst10_l, dst32_l, dst54_l, dst76_l;
1327 v8i16 dst21_r, dst43_r, dst65_r, dst87_r;
1328 v8i16 dst21_l, dst43_l, dst65_l, dst87_l;
1329 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1331 src -= ((3 * src_stride) + 3);
1332 filter_vec =
LD_SH(filter_x);
1333 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1335 filter_vec =
LD_SH(filter_y);
1336 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
1337 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
1339 SPLATI_W4_SW(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3);
1345 const_vec = __msa_ldi_h(128);
1348 for (cnt = width >> 3; cnt--;) {
1352 LD_SB7(src_tmp, src_stride, src0, src1, src2, src3, src4, src5, src6);
1353 src_tmp += (7 * src_stride);
1357 VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3,
1358 vec0, vec1, vec2, vec3);
1359 VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3,
1360 vec4, vec5, vec6, vec7);
1361 VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3,
1362 vec8, vec9, vec10, vec11);
1363 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
1364 vec12, vec13, vec14, vec15);
1366 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
1367 dst0, dst0, dst0, dst0);
1369 DPADD_SB4_SH(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3,
1370 dst1, dst1, dst1, dst1);
1372 DPADD_SB4_SH(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3,
1373 dst2, dst2, dst2, dst2);
1375 DPADD_SB4_SH(vec12, vec13, vec14, vec15, filt0, filt1, filt2, filt3,
1376 dst3, dst3, dst3, dst3);
1379 VSHF_B4_SB(src4, src4, mask0, mask1, mask2, mask3,
1380 vec0, vec1, vec2, vec3);
1381 VSHF_B4_SB(src5, src5, mask0, mask1, mask2, mask3,
1382 vec4, vec5, vec6, vec7);
1383 VSHF_B4_SB(src6, src6, mask0, mask1, mask2, mask3,
1384 vec8, vec9, vec10, vec11);
1386 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
1387 dst4, dst4, dst4, dst4);
1389 DPADD_SB4_SH(vec4, vec5, vec6, vec7, filt0, filt1, filt2, filt3,
1390 dst5, dst5, dst5, dst5);
1392 DPADD_SB4_SH(vec8, vec9, vec10, vec11, filt0, filt1, filt2, filt3,
1393 dst6, dst6, dst6, dst6);
1395 ILVR_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1,
1396 dst10_r, dst32_r, dst54_r, dst21_r);
1397 ILVR_H2_SH(dst4, dst3, dst6, dst5, dst43_r, dst65_r);
1398 ILVL_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1,
1399 dst10_l, dst32_l, dst54_l, dst21_l);
1400 ILVL_H2_SH(dst4, dst3, dst6, dst5, dst43_l, dst65_l);
1402 for (loop_cnt = height >> 1; loop_cnt--;) {
1403 LD_SB2(src_tmp, src_stride, src7, src8);
1405 src_tmp += 2 * src_stride;
1407 VSHF_B4_SB(src7, src7, mask0, mask1, mask2, mask3,
1408 vec0, vec1, vec2, vec3);
1410 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
1411 dst7, dst7, dst7, dst7);
1415 filt_h0, filt_h1, filt_h2, filt_h3);
1417 filt_h0, filt_h1, filt_h2, filt_h3);
1421 dst0_r = (v4i32) __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r);
1422 ST_SW(dst0_r, dst_tmp);
1423 dst_tmp += dst_stride;
1425 VSHF_B4_SB(src8, src8, mask0, mask1, mask2, mask3,
1426 vec0, vec1, vec2, vec3);
1428 DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
1429 dst8, dst8, dst8, dst8);
1434 filt_h0, filt_h1, filt_h2, filt_h3);
1436 filt_h0, filt_h1, filt_h2, filt_h3);
1440 dst0_r = (v4i32) __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r);
1441 ST_SW(dst0_r, dst_tmp);
1442 dst_tmp += dst_stride;
1464 int16_t *dst,
int32_t dst_stride,
1465 const int8_t *filter_x,
const int8_t *filter_y,
1469 filter_x, filter_y, height, 8);
1473 int16_t *dst,
int32_t dst_stride,
1474 const int8_t *filter_x,
const int8_t *filter_y,
1478 filter_x, filter_y, height, 8);
1481 filter_x, filter_y, height);
1485 int16_t *dst,
int32_t dst_stride,
1486 const int8_t *filter_x,
const int8_t *filter_y,
1490 filter_x, filter_y, height, 16);
1494 int16_t *dst,
int32_t dst_stride,
1495 const int8_t *filter_x,
const int8_t *filter_y,
1499 filter_x, filter_y, height, 24);
1503 int16_t *dst,
int32_t dst_stride,
1504 const int8_t *filter_x,
const int8_t *filter_y,
1508 filter_x, filter_y, height, 32);
1512 int16_t *dst,
int32_t dst_stride,
1513 const int8_t *filter_x,
const int8_t *filter_y,
1517 filter_x, filter_y, height, 48);
1521 int16_t *dst,
int32_t dst_stride,
1522 const int8_t *filter_x,
const int8_t *filter_y,
1526 filter_x, filter_y, height, 64);
1537 v16i8 mask1, vec0, vec1;
1539 v8i16 filter_vec, const_vec;
1540 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 };
1544 filter_vec =
LD_SH(filter);
1549 const_vec = __msa_ldi_h(128);
1552 LD_SB2(src, src_stride, src0, src1);
1555 VSHF_B2_SB(src0, src1, src0, src1, mask0, mask1, vec0, vec1);
1559 ST8x2_UB(dst0, dst, 2 * dst_stride);
1570 v16i8 mask1, vec0, vec1;
1572 v8i16 filter_vec, const_vec;
1573 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 };
1577 filter_vec =
LD_SH(filter);
1582 const_vec = __msa_ldi_h(128);
1585 LD_SB4(src, src_stride, src0, src1, src2, src3);
1588 VSHF_B2_SB(src0, src1, src0, src1, mask0, mask1, vec0, vec1);
1592 VSHF_B2_SB(src2, src3, src2, src3, mask0, mask1, vec0, vec1);
1596 ST8x4_UB(dst0, dst1, dst, 2 * dst_stride);
1608 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
1609 v16i8 mask1, vec0, vec1;
1610 v8i16 dst0, dst1, dst2, dst3;
1611 v8i16 filter_vec, const_vec;
1612 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20 };
1616 filter_vec =
LD_SH(filter);
1621 const_vec = __msa_ldi_h(128);
1624 for (loop_cnt = (height >> 3); loop_cnt--;) {
1625 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
1626 src += (8 * src_stride);
1630 VSHF_B2_SB(src0, src1, src0, src1, mask0, mask1, vec0, vec1);
1633 VSHF_B2_SB(src2, src3, src2, src3, mask0, mask1, vec0, vec1);
1636 VSHF_B2_SB(src4, src5, src4, src5, mask0, mask1, vec0, vec1);
1639 VSHF_B2_SB(src6, src7, src6, src7, mask0, mask1, vec0, vec1);
1643 ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride);
1644 dst += (8 * dst_stride);
1657 }
else if (4 == height) {
1659 }
else if (0 == height % 8) {
1673 uint64_t dst_val0, dst_val1, dst_val2, dst_val3;
1674 uint32_t dst_val_int0, dst_val_int1, dst_val_int2, dst_val_int3;
1675 v8i16 filt0, filt1, dst0, dst1, dst2, dst3;
1677 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1680 v8i16 filter_vec, const_vec;
1684 filter_vec =
LD_SH(filter);
1689 const_vec = __msa_ldi_h(128);
1692 for (loop_cnt = (height >> 2); loop_cnt--;) {
1693 LD_SB4(src, src_stride, src0, src1, src2, src3);
1694 src += (4 * src_stride);
1698 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
1701 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
1704 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
1707 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
1711 dst_val0 = __msa_copy_u_d((v2i64) dst0, 0);
1712 dst_val1 = __msa_copy_u_d((v2i64) dst1, 0);
1713 dst_val2 = __msa_copy_u_d((v2i64) dst2, 0);
1714 dst_val3 = __msa_copy_u_d((v2i64) dst3, 0);
1716 dst_val_int0 = __msa_copy_u_w((v4i32) dst0, 2);
1717 dst_val_int1 = __msa_copy_u_w((v4i32) dst1, 2);
1718 dst_val_int2 = __msa_copy_u_w((v4i32) dst2, 2);
1719 dst_val_int3 = __msa_copy_u_w((v4i32) dst3, 2);
1722 SW(dst_val_int0, dst + 4);
1725 SW(dst_val_int1, dst + 4);
1728 SW(dst_val_int2, dst + 4);
1731 SW(dst_val_int3, dst + 4);
1744 v8i16 filt0, filt1, dst0, dst1;
1746 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1749 v8i16 filter_vec, const_vec;
1753 filter_vec =
LD_SH(filter);
1758 const_vec = __msa_ldi_h(128);
1761 for (loop_cnt = (height >> 1); loop_cnt--;) {
1762 LD_SB2(src, src_stride, src0, src1);
1763 src += (2 * src_stride);
1767 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
1771 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
1775 ST_SH2(dst0, dst1, dst, dst_stride);
1776 dst += (2 * dst_stride);
1790 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1793 v8i16 dst0, dst1, dst2, dst3;
1794 v8i16 filter_vec, const_vec;
1798 filter_vec =
LD_SH(filter);
1803 const_vec = __msa_ldi_h(128);
1806 for (loop_cnt = (height >> 2); loop_cnt--;) {
1807 LD_SB4(src, src_stride, src0, src1, src2, src3);
1808 src += (4 * src_stride);
1812 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
1816 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
1820 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
1824 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
1828 ST_SH4(dst0, dst1, dst2, dst3, dst, dst_stride);
1829 dst += (4 * dst_stride);
1840 if (2 == height || 6 == height) {
1861 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
1862 v8i16 filter_vec, const_vec;
1864 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1866 8, 9, 9, 10, 10, 11, 11, 12, 24, 25, 25, 26, 26, 27, 27, 28
1871 filter_vec =
LD_SH(filter);
1877 const_vec = __msa_ldi_h(128);
1880 for (loop_cnt = (height >> 2); loop_cnt--;) {
1881 LD_SB4(src, src_stride, src0, src1, src2, src3);
1882 src += (4 * src_stride);
1885 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
1888 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
1891 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
1894 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
1897 VSHF_B2_SB(src0, src1, src0, src1, mask2, mask3, vec0, vec1);
1900 VSHF_B2_SB(src2, src3, src2, src3, mask2, mask3, vec0, vec1);
1904 ST_SH4(dst0, dst1, dst2, dst3, dst, dst_stride);
1905 ST8x4_UB(dst4, dst5, dst + 8, 2 * dst_stride);
1906 dst += (4 * dst_stride);
1919 v16i8 src4, src5, src6, src7;
1921 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1923 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
1925 v8i16 filter_vec, const_vec;
1929 filter_vec =
LD_SH(filter);
1934 const_vec = __msa_ldi_h(128);
1937 for (loop_cnt = (height >> 2); loop_cnt--;) {
1938 LD_SB4(src, src_stride, src0, src2, src4, src6);
1939 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
1940 src += (4 * src_stride);
1944 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
1948 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
1952 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
1956 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
1960 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
1964 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
1968 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
1972 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec0, vec1);
1976 ST_SH4(dst0, dst2, dst4, dst6, dst, dst_stride);
1977 ST_SH4(dst1, dst3, dst5, dst7, dst + 8, dst_stride);
1978 dst += (4 * dst_stride);
1990 int16_t *dst_tmp = dst + 16;
1991 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
1993 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
1994 v16i8 mask1, mask00, mask11;
1996 v8i16 dst0, dst1, dst2, dst3;
1997 v8i16 filter_vec, const_vec;
2001 filter_vec =
LD_SH(filter);
2006 mask11 = mask0 + 10;
2008 const_vec = __msa_ldi_h(128);
2011 for (loop_cnt = (height >> 2); loop_cnt--;) {
2013 LD_SB4(src, src_stride, src0, src2, src4, src6);
2014 LD_SB4(src + 16, src_stride, src1, src3, src5, src7);
2015 src += (4 * src_stride);
2019 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
2023 VSHF_B2_SB(src0, src1, src0, src1, mask00, mask11, vec0, vec1);
2027 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
2031 VSHF_B2_SB(src2, src3, src2, src3, mask00, mask11, vec0, vec1);
2035 ST_SH2(dst0, dst1, dst, 8);
2037 ST_SH2(dst2, dst3, dst, 8);
2040 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
2044 VSHF_B2_SB(src4, src5, src4, src5, mask00, mask11, vec0, vec1);
2048 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
2052 VSHF_B2_SB(src6, src7, src6, src7, mask00, mask11, vec0, vec1);
2056 ST_SH2(dst0, dst1, dst, 8);
2058 ST_SH2(dst2, dst3, dst, 8);
2062 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
2066 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
2070 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
2074 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec0, vec1);
2078 ST_SH4(dst0, dst1, dst2, dst3, dst_tmp, dst_stride);
2079 dst_tmp += (4 * dst_stride);
2093 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
2094 v16i8 mask1, mask2, mask3;
2095 v8i16 dst0, dst1, dst2, dst3;
2097 v8i16 filter_vec, const_vec;
2101 filter_vec =
LD_SH(filter);
2104 const_vec = __msa_ldi_h(128);
2111 for (loop_cnt = (height >> 1); loop_cnt--;) {
2112 LD_SB2(src, 16, src0, src1);
2113 src2 =
LD_SB(src + 24);
2118 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
2122 VSHF_B2_SB(src0, src1, src0, src1, mask2, mask3, vec0, vec1);
2126 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
2130 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
2134 ST_SH4(dst0, dst1, dst2, dst3, dst, 8);
2137 LD_SB2(src, 16, src0, src1);
2138 src2 =
LD_SB(src + 24);
2143 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
2147 VSHF_B2_SB(src0, src1, src0, src1, mask2, mask3, vec0, vec1);
2151 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec0, vec1);
2155 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec0, vec1);
2159 ST_SH4(dst0, dst1, dst2, dst3, dst, 8);
2170 v16i8
src0,
src1, src2, src3, src4;
2171 v16i8 src10_r, src32_r, src21_r, src43_r;
2172 v16i8 src2110, src4332;
2175 v8i16 filter_vec, const_vec;
2179 const_vec = __msa_ldi_h(128);
2182 filter_vec =
LD_SH(filter);
2185 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2186 ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
2187 src10_r, src21_r, src32_r, src43_r);
2189 ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
2192 DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst10, dst10);
2194 ST8x2_UB(dst10, dst, 2 * dst_stride);
2204 v16i8
src0,
src1, src2, src3, src4, src5, src6;
2205 v16i8 src10_r, src32_r, src54_r, src21_r, src43_r, src65_r;
2206 v16i8 src2110, src4332, src6554;
2209 v8i16 filter_vec, const_vec;
2213 const_vec = __msa_ldi_h(128);
2216 filter_vec =
LD_SH(filter);
2219 LD_SB7(src, src_stride, src0, src1, src2, src3, src4, src5, src6);
2220 ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
2221 src10_r, src21_r, src32_r, src43_r);
2222 ILVR_B2_SB(src5, src4, src6, src5, src54_r, src65_r);
2223 ILVR_D3_SB(src21_r, src10_r, src43_r, src32_r, src65_r, src54_r,
2224 src2110, src4332, src6554);
2227 DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst10, dst10);
2229 DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32);
2231 ST8x4_UB(dst10, dst32, dst, 2 * dst_stride);
2242 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8, src9;
2243 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
2244 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
2245 v16i8 src2110, src4332, src6554, src8776;
2246 v8i16 dst10, dst32, dst54, dst76;
2248 v8i16 filter_vec, const_vec;
2251 const_vec = __msa_ldi_h(128);
2254 filter_vec =
LD_SH(filter);
2257 LD_SB3(src, src_stride, src0, src1, src2);
2258 src += (3 * src_stride);
2260 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2261 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_r, (v2i64) src10_r);
2262 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
2264 for (loop_cnt = (height >> 3); loop_cnt--;) {
2265 LD_SB6(src, src_stride, src3, src4, src5, src6, src7, src8);
2266 src += (6 * src_stride);
2268 ILVR_B4_SB(src3, src2, src4, src3, src5, src4, src6, src5,
2269 src32_r, src43_r, src54_r, src65_r);
2270 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
2271 ILVR_D3_SB(src43_r, src32_r, src65_r, src54_r, src87_r, src76_r,
2272 src4332, src6554, src8776);
2276 DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst10, dst10);
2278 DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32);
2280 DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54);
2282 LD_SB2(src, src_stride, src9, src2);
2283 src += (2 * src_stride);
2284 ILVR_B2_SB(src9, src8, src2, src9, src98_r, src109_r);
2285 src2110 = (v16i8) __msa_ilvr_d((v2i64) src109_r, (v2i64) src98_r);
2286 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
2288 DPADD_SB2_SH(src8776, src2110, filt0, filt1, dst76, dst76);
2290 ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride);
2291 dst += (8 * dst_stride);
2304 }
else if (4 == height) {
2306 }
else if (0 == (height % 8)) {
2320 uint32_t dst_val_int0, dst_val_int1, dst_val_int2, dst_val_int3;
2321 uint64_t dst_val0, dst_val1, dst_val2, dst_val3;
2322 v16i8
src0,
src1, src2, src3, src4;
2323 v16i8 src10_r, src32_r, src21_r, src43_r;
2324 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
2326 v8i16 filter_vec, const_vec;
2329 const_vec = __msa_ldi_h(128);
2332 filter_vec =
LD_SH(filter);
2335 LD_SB3(src, src_stride, src0, src1, src2);
2336 src += (3 * src_stride);
2338 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2340 for (loop_cnt = (height >> 2); loop_cnt--;) {
2341 LD_SB2(src, src_stride, src3, src4);
2342 src += (2 * src_stride);
2344 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2347 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2349 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2351 LD_SB2(src, src_stride, src1, src2);
2352 src += (2 * src_stride);
2354 ILVR_B2_SB(src1, src4, src2, src1, src10_r, src21_r);
2357 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst2_r, dst2_r);
2359 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst3_r, dst3_r);
2361 dst_val0 = __msa_copy_u_d((v2i64) dst0_r, 0);
2362 dst_val1 = __msa_copy_u_d((v2i64) dst1_r, 0);
2363 dst_val2 = __msa_copy_u_d((v2i64) dst2_r, 0);
2364 dst_val3 = __msa_copy_u_d((v2i64) dst3_r, 0);
2366 dst_val_int0 = __msa_copy_u_w((v4i32) dst0_r, 2);
2367 dst_val_int1 = __msa_copy_u_w((v4i32) dst1_r, 2);
2368 dst_val_int2 = __msa_copy_u_w((v4i32) dst2_r, 2);
2369 dst_val_int3 = __msa_copy_u_w((v4i32) dst3_r, 2);
2372 SW(dst_val_int0, dst + 4);
2375 SW(dst_val_int1, dst + 4);
2378 SW(dst_val_int2, dst + 4);
2381 SW(dst_val_int3, dst + 4);
2392 v16i8
src0,
src1, src2, src3, src4;
2393 v16i8 src10_r, src32_r, src21_r, src43_r;
2394 v8i16 dst0_r, dst1_r;
2396 v8i16 filter_vec, const_vec;
2399 const_vec = __msa_ldi_h(128);
2402 filter_vec =
LD_SH(filter);
2405 LD_SB3(src, src_stride, src0, src1, src2);
2406 src += (3 * src_stride);
2408 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2410 LD_SB2(src, src_stride, src3, src4);
2412 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2414 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2416 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2418 ST_SH2(dst0_r, dst1_r, dst, dst_stride);
2427 v16i8
src0,
src1, src2, src3, src4;
2428 v16i8 src10_r, src32_r, src21_r, src43_r;
2429 v8i16 dst0_r, dst1_r;
2431 v8i16 filter_vec, const_vec;
2434 const_vec = __msa_ldi_h(128);
2437 filter_vec =
LD_SH(filter);
2440 LD_SB3(src, src_stride, src0, src1, src2);
2441 src += (3 * src_stride);
2443 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2445 LD_SB2(src, src_stride, src3, src4);
2446 src += (2 * src_stride);
2449 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2451 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2453 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2455 ST_SH2(dst0_r, dst1_r, dst, dst_stride);
2456 dst += (2 * dst_stride);
2458 LD_SB2(src, src_stride, src1, src2);
2459 src += (2 * src_stride);
2462 ILVR_B2_SB(src1, src4, src2, src1, src10_r, src21_r);
2464 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst0_r, dst0_r);
2466 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst1_r, dst1_r);
2468 ST_SH2(dst0_r, dst1_r, dst, dst_stride);
2469 dst += (2 * dst_stride);
2471 LD_SB2(src, src_stride, src3, src4);
2474 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2476 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2478 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2480 ST_SH2(dst0_r, dst1_r, dst, dst_stride);
2491 v16i8
src0,
src1, src2, src3, src4, src5;
2492 v16i8 src10_r, src32_r, src21_r, src43_r;
2493 v8i16 dst0_r, dst1_r;
2495 v8i16 filter_vec, const_vec;
2498 const_vec = __msa_ldi_h(128);
2501 filter_vec =
LD_SH(filter);
2504 LD_SB3(src, src_stride, src0, src1, src2);
2505 src += (3 * src_stride);
2507 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2509 for (loop_cnt = (height >> 2); loop_cnt--;) {
2510 LD_SB2(src, src_stride, src3, src4);
2511 src += (2 * src_stride);
2513 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2515 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2517 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2519 ST_SH2(dst0_r, dst1_r, dst, dst_stride);
2520 dst += (2 * dst_stride);
2522 LD_SB2(src, src_stride, src5, src2);
2523 src += (2 * src_stride);
2525 ILVR_B2_SB(src5, src4, src2, src5, src10_r, src21_r);
2527 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst0_r, dst0_r);
2529 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst1_r, dst1_r);
2531 ST_SH2(dst0_r, dst1_r, dst, dst_stride);
2532 dst += (2 * dst_stride);
2545 }
else if (6 == height) {
2561 v16i8
src0,
src1, src2, src3, src4, src5;
2562 v16i8 src10_r, src32_r, src21_r, src43_r;
2563 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
2564 v16i8 src10_l, src32_l, src54_l, src21_l, src43_l, src65_l;
2565 v16i8 src2110, src4332;
2566 v8i16 dst0_l, dst1_l;
2568 v8i16 filter_vec, const_vec;
2570 src -= (1 * src_stride);
2571 const_vec = __msa_ldi_h(128);
2574 filter_vec =
LD_SH(filter);
2577 LD_SB3(src, src_stride, src0, src1, src2);
2578 src += (3 * src_stride);
2580 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2581 ILVL_B2_SB(src1, src0, src2, src1, src10_l, src21_l);
2582 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_l, (v2i64) src10_l);
2584 for (loop_cnt = (height >> 2); loop_cnt--;) {
2585 LD_SB2(src, src_stride, src3, src4);
2586 src += (2 * src_stride);
2588 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2589 ILVL_B2_SB(src3, src2, src4, src3, src32_l, src43_l);
2590 src4332 = (v16i8) __msa_ilvr_d((v2i64) src43_l, (v2i64) src32_l);
2592 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2594 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2596 DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst0_l, dst0_l);
2598 LD_SB2(src, src_stride, src5, src2);
2599 src += (2 * src_stride);
2601 ILVR_B2_SB(src5, src4, src2, src5, src10_r, src21_r);
2602 ILVL_B2_SB(src5, src4, src2, src5, src54_l, src65_l);
2603 src2110 = (v16i8) __msa_ilvr_d((v2i64) src65_l, (v2i64) src54_l);
2605 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst2_r, dst2_r);
2607 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst3_r, dst3_r);
2609 DPADD_SB2_SH(src4332, src2110, filt0, filt1, dst1_l, dst1_l);
2611 ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride);
2612 ST8x4_UB(dst0_l, dst1_l, dst + 8, (2 * dst_stride));
2613 dst += (4 * dst_stride);
2625 v16i8
src0,
src1, src2, src3, src4, src5;
2626 v16i8 src10_r, src32_r, src21_r, src43_r;
2627 v16i8 src10_l, src32_l, src21_l, src43_l;
2628 v8i16 dst0_r, dst1_r, dst0_l, dst1_l;
2630 v8i16 filter_vec, const_vec;
2633 const_vec = __msa_ldi_h(128);
2636 filter_vec =
LD_SH(filter);
2639 LD_SB3(src, src_stride, src0, src1, src2);
2640 src += (3 * src_stride);
2642 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2643 ILVL_B2_SB(src1, src0, src2, src1, src10_l, src21_l);
2645 for (loop_cnt = (height >> 2); loop_cnt--;) {
2646 LD_SB2(src, src_stride, src3, src4);
2647 src += (2 * src_stride);
2649 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2650 ILVL_B2_SB(src3, src2, src4, src3, src32_l, src43_l);
2652 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2654 DPADD_SB2_SH(src10_l, src32_l, filt0, filt1, dst0_l, dst0_l);
2656 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2658 DPADD_SB2_SH(src21_l, src43_l, filt0, filt1, dst1_l, dst1_l);
2659 ST_SH2(dst0_r, dst0_l, dst, 8);
2661 ST_SH2(dst1_r, dst1_l, dst, 8);
2664 LD_SB2(src, src_stride, src5, src2);
2665 src += (2 * src_stride);
2667 ILVR_B2_SB(src5, src4, src2, src5, src10_r, src21_r);
2668 ILVL_B2_SB(src5, src4, src2, src5, src10_l, src21_l);
2670 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst0_r, dst0_r);
2672 DPADD_SB2_SH(src32_l, src10_l, filt0, filt1, dst0_l, dst0_l);
2674 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst1_r, dst1_r);
2676 DPADD_SB2_SH(src43_l, src21_l, filt0, filt1, dst1_l, dst1_l);
2677 ST_SH2(dst0_r, dst0_l, dst, 8);
2679 ST_SH2(dst1_r, dst1_l, dst, 8);
2692 v16i8
src0,
src1, src2, src3, src4, src5;
2693 v16i8 src6, src7, src8, src9, src10, src11;
2694 v16i8 src10_r, src32_r, src76_r, src98_r;
2695 v16i8 src21_r, src43_r, src87_r, src109_r;
2696 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
2697 v16i8 src10_l, src32_l, src21_l, src43_l;
2698 v8i16 dst0_l, dst1_l;
2700 v8i16 filter_vec, const_vec;
2703 const_vec = __msa_ldi_h(128);
2706 filter_vec =
LD_SH(filter);
2709 LD_SB3(src, src_stride, src0, src1, src2);
2711 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2712 ILVL_B2_SB(src1, src0, src2, src1, src10_l, src21_l);
2714 LD_SB3(src + 16, src_stride, src6, src7, src8);
2715 src += (3 * src_stride);
2717 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
2719 for (loop_cnt = (height >> 2); loop_cnt--;) {
2720 LD_SB2(src, src_stride, src3, src4);
2722 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2723 ILVL_B2_SB(src3, src2, src4, src3, src32_l, src43_l);
2725 LD_SB2(src + 16, src_stride, src9, src10);
2726 src += (2 * src_stride);
2728 ILVR_B2_SB(src9, src8, src10, src9, src98_r, src109_r);
2731 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2733 DPADD_SB2_SH(src10_l, src32_l, filt0, filt1, dst0_l, dst0_l);
2735 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2737 DPADD_SB2_SH(src21_l, src43_l, filt0, filt1, dst1_l, dst1_l);
2739 DPADD_SB2_SH(src76_r, src98_r, filt0, filt1, dst2_r, dst2_r);
2741 DPADD_SB2_SH(src87_r, src109_r, filt0, filt1, dst3_r, dst3_r);
2743 ST_SH2(dst0_r, dst0_l, dst, 8);
2744 ST_SH(dst2_r, dst + 16);
2746 ST_SH2(dst1_r, dst1_l, dst, 8);
2747 ST_SH(dst3_r, dst + 16);
2750 LD_SB2(src, src_stride, src5, src2);
2752 ILVR_B2_SB(src5, src4, src2, src5, src10_r, src21_r);
2753 ILVL_B2_SB(src5, src4, src2, src5, src10_l, src21_l);
2755 LD_SB2(src + 16, src_stride, src11, src8);
2756 src += (2 * src_stride);
2758 ILVR_B2_SB(src11, src10, src8, src11, src76_r, src87_r);
2761 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst0_r, dst0_r);
2763 DPADD_SB2_SH(src32_l, src10_l, filt0, filt1, dst0_l, dst0_l);
2765 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst1_r, dst1_r);
2767 DPADD_SB2_SH(src43_l, src21_l, filt0, filt1, dst1_l, dst1_l);
2769 DPADD_SB2_SH(src98_r, src76_r, filt0, filt1, dst2_r, dst2_r);
2771 DPADD_SB2_SH(src109_r, src87_r, filt0, filt1, dst3_r, dst3_r);
2773 ST_SH2(dst0_r, dst0_l, dst, 8);
2774 ST_SH(dst2_r, dst + 16);
2776 ST_SH2(dst1_r, dst1_l, dst, 8);
2777 ST_SH(dst3_r, dst + 16);
2790 v16i8
src0,
src1, src2, src3, src4, src5;
2791 v16i8 src6, src7, src8, src9, src10, src11;
2792 v16i8 src10_r, src32_r, src76_r, src98_r;
2793 v16i8 src21_r, src43_r, src87_r, src109_r;
2794 v8i16 dst0_r, dst1_r, dst2_r, dst3_r;
2795 v16i8 src10_l, src32_l, src76_l, src98_l;
2796 v16i8 src21_l, src43_l, src87_l, src109_l;
2797 v8i16 dst0_l, dst1_l, dst2_l, dst3_l;
2799 v8i16 filter_vec, const_vec;
2802 const_vec = __msa_ldi_h(128);
2805 filter_vec =
LD_SH(filter);
2808 LD_SB3(src, src_stride, src0, src1, src2);
2810 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
2811 ILVL_B2_SB(src1, src0, src2, src1, src10_l, src21_l);
2813 LD_SB3(src + 16, src_stride, src6, src7, src8);
2814 src += (3 * src_stride);
2816 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
2817 ILVL_B2_SB(src7, src6, src8, src7, src76_l, src87_l);
2819 for (loop_cnt = (height >> 2); loop_cnt--;) {
2820 LD_SB2(src, src_stride, src3, src4);
2822 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
2823 ILVL_B2_SB(src3, src2, src4, src3, src32_l, src43_l);
2825 LD_SB2(src + 16, src_stride, src9, src10);
2826 src += (2 * src_stride);
2828 ILVR_B2_SB(src9, src8, src10, src9, src98_r, src109_r);
2829 ILVL_B2_SB(src9, src8, src10, src9, src98_l, src109_l);
2832 DPADD_SB2_SH(src10_r, src32_r, filt0, filt1, dst0_r, dst0_r);
2834 DPADD_SB2_SH(src10_l, src32_l, filt0, filt1, dst0_l, dst0_l);
2836 DPADD_SB2_SH(src21_r, src43_r, filt0, filt1, dst1_r, dst1_r);
2838 DPADD_SB2_SH(src21_l, src43_l, filt0, filt1, dst1_l, dst1_l);
2840 DPADD_SB2_SH(src76_r, src98_r, filt0, filt1, dst2_r, dst2_r);
2842 DPADD_SB2_SH(src76_l, src98_l, filt0, filt1, dst2_l, dst2_l);
2844 DPADD_SB2_SH(src87_r, src109_r, filt0, filt1, dst3_r, dst3_r);
2846 DPADD_SB2_SH(src87_l, src109_l, filt0, filt1, dst3_l, dst3_l);
2848 ST_SH4(dst0_r, dst0_l, dst2_r, dst2_l, dst, 8);
2850 ST_SH4(dst1_r, dst1_l, dst3_r, dst3_l, dst, 8);
2853 LD_SB2(src, src_stride, src5, src2);
2855 ILVR_B2_SB(src5, src4, src2, src5, src10_r, src21_r);
2856 ILVL_B2_SB(src5, src4, src2, src5, src10_l, src21_l);
2858 LD_SB2(src + 16, src_stride, src11, src8);
2859 src += (2 * src_stride);
2861 ILVR_B2_SB(src11, src10, src8, src11, src76_r, src87_r);
2862 ILVL_B2_SB(src11, src10, src8, src11, src76_l, src87_l);
2865 DPADD_SB2_SH(src32_r, src10_r, filt0, filt1, dst0_r, dst0_r);
2867 DPADD_SB2_SH(src32_l, src10_l, filt0, filt1, dst0_l, dst0_l);
2869 DPADD_SB2_SH(src43_r, src21_r, filt0, filt1, dst1_r, dst1_r);
2871 DPADD_SB2_SH(src43_l, src21_l, filt0, filt1, dst1_l, dst1_l);
2873 DPADD_SB2_SH(src98_r, src76_r, filt0, filt1, dst2_r, dst2_r);
2875 DPADD_SB2_SH(src98_l, src76_l, filt0, filt1, dst2_l, dst2_l);
2877 DPADD_SB2_SH(src109_r, src87_r, filt0, filt1, dst3_r, dst3_r);
2879 DPADD_SB2_SH(src109_l, src87_l, filt0, filt1, dst3_l, dst3_l);
2881 ST_SH4(dst0_r, dst0_l, dst2_r, dst2_l, dst, 8);
2883 ST_SH4(dst1_r, dst1_l, dst3_r, dst3_l, dst, 8);
2892 const int8_t *filter_x,
2893 const int8_t *filter_y)
2895 v16i8
src0,
src1, src2, src3, src4;
2897 v4i32 filt_h0, filt_h1;
2898 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
2900 v8i16 filter_vec, const_vec;
2901 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
2902 v8i16 dst0, dst1, dst2, dst3, dst4;
2903 v4i32 dst0_r, dst1_r;
2904 v8i16 dst10_r, dst32_r, dst21_r, dst43_r;
2906 src -= (src_stride + 1);
2907 filter_vec =
LD_SH(filter_x);
2910 filter_vec =
LD_SH(filter_y);
2911 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
2912 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
2918 const_vec = __msa_ldi_h(128);
2921 LD_SB3(src, src_stride, src0, src1, src2);
2922 src += (3 * src_stride);
2925 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
2926 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
2927 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
2935 ILVR_H2_SH(dst1, dst0, dst2, dst1, dst10_r, dst21_r);
2937 LD_SB2(src, src_stride, src3, src4);
2940 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
2944 dst32_r = __msa_ilvr_h(dst3, dst2);
2948 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
2952 dst43_r = __msa_ilvr_h(dst4, dst3);
2956 dst0_r = (v4i32) __msa_pckev_h((v8i16) dst1_r, (v8i16) dst0_r);
2957 ST8x2_UB(dst0_r, dst, 2 * dst_stride);
2964 const int8_t *filter_x,
2965 const int8_t *filter_y)
2967 v16i8
src0,
src1, src2, src3, src4, src5, src6;
2969 v4i32 filt_h0, filt_h1;
2970 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
2972 v8i16 filter_vec, const_vec;
2973 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
2974 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
2975 v4i32 dst0_r, dst1_r, dst2_r, dst3_r;
2976 v8i16 dst10_r, dst32_r, dst21_r, dst43_r;
2978 src -= (src_stride + 1);
2980 filter_vec =
LD_SH(filter_x);
2983 filter_vec =
LD_SH(filter_y);
2984 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
2985 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
2991 const_vec = __msa_ldi_h(128);
2994 LD_SB3(src, src_stride, src0, src1, src2);
2995 src += (3 * src_stride);
2999 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
3000 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
3001 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
3010 ILVR_H2_SH(dst1, dst0, dst2, dst1, dst10_r, dst21_r);
3012 LD_SB4(src, src_stride, src3, src4, src5, src6);
3015 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3019 dst32_r = __msa_ilvr_h(dst3, dst2);
3023 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3027 dst43_r = __msa_ilvr_h(dst4, dst3);
3031 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3035 dst10_r = __msa_ilvr_h(dst5, dst4);
3039 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
3043 dst21_r = __msa_ilvr_h(dst2, dst5);
3047 PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst1_r);
3048 ST8x4_UB(dst0_r, dst1_r, dst, 2 * dst_stride);
3056 const int8_t *filter_x,
3057 const int8_t *filter_y,
3061 v16i8
src0,
src1, src2, src3, src4, src5, src6;
3062 v16i8 src7, src8, src9, src10;
3064 v4i32 filt_h0, filt_h1;
3065 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
3067 v8i16 filter_vec, const_vec;
3068 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
3069 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9;
3070 v4i32 dst0_r, dst1_r, dst2_r, dst3_r, dst4_r, dst5_r, dst6_r, dst7_r;
3071 v8i16 dst10_r, dst32_r, dst54_r, dst76_r;
3072 v8i16 dst21_r, dst43_r, dst65_r, dst87_r;
3074 src -= (src_stride + 1);
3075 filter_vec =
LD_SH(filter_x);
3078 filter_vec =
LD_SH(filter_y);
3079 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
3080 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
3086 const_vec = __msa_ldi_h(128);
3089 LD_SB3(src, src_stride, src0, src1, src2);
3090 src += (3 * src_stride);
3093 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
3094 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
3095 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
3104 ILVR_H2_SH(dst1, dst0, dst2, dst1, dst10_r, dst21_r);
3106 for (loop_cnt = height >> 3; loop_cnt--;) {
3108 src3, src4, src5, src6, src7, src8, src9, src10);
3109 src += (8 * src_stride);
3112 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3116 dst32_r = __msa_ilvr_h(dst3, dst2);
3120 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3124 dst43_r = __msa_ilvr_h(dst4, dst3);
3128 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3132 dst54_r = __msa_ilvr_h(dst5, dst4);
3136 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
3140 dst65_r = __msa_ilvr_h(dst6, dst5);
3144 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec0, vec1);
3148 dst76_r = __msa_ilvr_h(dst7, dst6);
3152 VSHF_B2_SB(src8, src8, src8, src8, mask0, mask1, vec0, vec1);
3156 dst87_r = __msa_ilvr_h(dst8, dst7);
3160 VSHF_B2_SB(src9, src9, src9, src9, mask0, mask1, vec0, vec1);
3164 dst10_r = __msa_ilvr_h(dst9, dst8);
3168 VSHF_B2_SB(src10, src10, src10, src10, mask0, mask1, vec0, vec1);
3172 dst21_r = __msa_ilvr_h(dst2, dst9);
3177 dst5_r, dst4_r, dst7_r, dst6_r,
3178 dst0_r, dst1_r, dst2_r, dst3_r);
3179 ST8x8_UB(dst0_r, dst1_r, dst2_r, dst3_r, dst, 2 * dst_stride);
3180 dst += (8 * dst_stride);
3188 const int8_t *filter_x,
3189 const int8_t *filter_y,
3194 filter_x, filter_y);
3195 }
else if (4 == height) {
3197 filter_x, filter_y);
3198 }
else if (0 == (height % 8)) {
3200 filter_x, filter_y, height);
3208 const int8_t *filter_x,
3209 const int8_t *filter_y,
3213 uint64_t dst_val0, dst_val1, dst_val2, dst_val3;
3214 uint32_t dst_val_int0, dst_val_int1, dst_val_int2, dst_val_int3;
3215 v16i8
src0,
src1, src2, src3, src4, src5, src6;
3217 v4i32 filt_h0, filt_h1;
3218 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
3220 v8i16 filter_vec, const_vec;
3221 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
3222 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
3223 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
3224 v8i16 dst10_r, dst32_r, dst21_r, dst43_r;
3225 v8i16 dst10_l, dst32_l, dst21_l, dst43_l;
3227 src -= (src_stride + 1);
3228 filter_vec =
LD_SH(filter_x);
3231 filter_vec =
LD_SH(filter_y);
3232 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
3233 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
3239 const_vec = __msa_ldi_h(128);
3242 LD_SB3(src, src_stride, src0, src1, src2);
3243 src += (3 * src_stride);
3246 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
3247 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
3248 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
3260 for (loop_cnt = height >> 2; loop_cnt--;) {
3261 LD_SB4(src, src_stride, src3, src4, src5, src6);
3262 src += (4 * src_stride);
3265 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3275 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3285 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3295 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
3306 dst2_l, dst2_r, dst3_l, dst3_r,
3307 dst0_r, dst1_r, dst2_r, dst3_r);
3309 dst_val0 = __msa_copy_u_d((v2i64) dst0_r, 0);
3310 dst_val1 = __msa_copy_u_d((v2i64) dst1_r, 0);
3311 dst_val2 = __msa_copy_u_d((v2i64) dst2_r, 0);
3312 dst_val3 = __msa_copy_u_d((v2i64) dst3_r, 0);
3314 dst_val_int0 = __msa_copy_u_w((v4i32) dst0_r, 2);
3315 dst_val_int1 = __msa_copy_u_w((v4i32) dst1_r, 2);
3316 dst_val_int2 = __msa_copy_u_w((v4i32) dst2_r, 2);
3317 dst_val_int3 = __msa_copy_u_w((v4i32) dst3_r, 2);
3320 SW(dst_val_int0, dst + 4);
3323 SW(dst_val_int1, dst + 4);
3326 SW(dst_val_int2, dst + 4);
3329 SW(dst_val_int3, dst + 4);
3339 const int8_t *filter_x,
3340 const int8_t *filter_y,
3343 v16i8
src0,
src1, src2, src3, src4;
3345 v4i32 filt_h0, filt_h1;
3346 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
3348 v8i16 filter_vec, const_vec;
3349 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
3350 v8i16 dst0, dst1, dst2, dst3, dst4;
3351 v4i32 dst0_r, dst0_l, dst1_r, dst1_l;
3352 v8i16 dst10_r, dst32_r, dst21_r, dst43_r;
3353 v8i16 dst10_l, dst32_l, dst21_l, dst43_l;
3355 src -= (src_stride + 1);
3357 filter_vec =
LD_SH(filter_x);
3360 filter_vec =
LD_SH(filter_y);
3361 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
3362 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
3368 const_vec = __msa_ldi_h(128);
3371 LD_SB3(src, src_stride, src0, src1, src2);
3372 src += (3 * src_stride);
3375 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
3376 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
3377 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
3389 LD_SB2(src, src_stride, src3, src4);
3390 src += (2 * src_stride);
3393 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3403 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3413 PCKEV_H2_SW(dst0_l, dst0_r, dst1_l, dst1_r, dst0_r, dst1_r);
3414 ST_SW2(dst0_r, dst1_r, dst, dst_stride);
3421 const int8_t *filter_x,
3422 const int8_t *filter_y,
3425 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
3427 v4i32 filt_h0, filt_h1;
3428 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
3430 v8i16 filter_vec, const_vec;
3431 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
3432 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8;
3433 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
3434 v4i32 dst4_r, dst4_l, dst5_r, dst5_l;
3435 v8i16 dst10_r, dst32_r, dst10_l, dst32_l;
3436 v8i16 dst21_r, dst43_r, dst21_l, dst43_l;
3437 v8i16 dst54_r, dst54_l, dst65_r, dst65_l;
3438 v8i16 dst76_r, dst76_l, dst87_r, dst87_l;
3440 src -= (src_stride + 1);
3442 filter_vec =
LD_SH(filter_x);
3445 filter_vec =
LD_SH(filter_y);
3446 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
3447 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
3453 const_vec = __msa_ldi_h(128);
3456 LD_SB3(src, src_stride, src0, src1, src2);
3457 src += (3 * src_stride);
3461 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
3462 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
3463 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
3475 LD_SB2(src, src_stride, src3, src4);
3476 src += (2 * src_stride);
3481 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3494 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3504 LD_SB2(src, src_stride, src5, src6);
3505 src += (2 * src_stride);
3510 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3521 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
3531 LD_SB2(src, src_stride, src7, src8);
3536 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec0, vec1);
3547 VSHF_B2_SB(src8, src8, src8, src8, mask0, mask1, vec0, vec1);
3558 dst2_l, dst2_r, dst3_l, dst3_r, dst0_r, dst1_r, dst2_r, dst3_r);
3559 PCKEV_H2_SW(dst4_l, dst4_r, dst5_l, dst5_r, dst4_r, dst5_r);
3561 ST_SW2(dst0_r, dst1_r, dst, dst_stride);
3562 dst += (2 * dst_stride);
3563 ST_SW2(dst2_r, dst3_r, dst, dst_stride);
3564 dst += (2 * dst_stride);
3565 ST_SW2(dst4_r, dst5_r, dst, dst_stride);
3572 const int8_t *filter_x,
3573 const int8_t *filter_y,
3577 uint32_t loop_cnt, cnt;
3580 v16i8
src0,
src1, src2, src3, src4, src5, src6;
3582 v4i32 filt_h0, filt_h1;
3583 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
3585 v8i16 filter_vec, const_vec;
3586 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
3587 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
3588 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
3589 v8i16 dst10_r, dst32_r, dst21_r, dst43_r;
3590 v8i16 dst10_l, dst32_l, dst21_l, dst43_l;
3592 src -= (src_stride + 1);
3594 filter_vec =
LD_SH(filter_x);
3597 filter_vec =
LD_SH(filter_y);
3598 vec0 = __msa_clti_s_b((v16i8) filter_vec, 0);
3599 filter_vec = (v8i16) __msa_ilvr_b(vec0, (v16i8) filter_vec);
3605 const_vec = __msa_ldi_h(128);
3608 for (cnt = width >> 3; cnt--;) {
3612 LD_SB3(src_tmp, src_stride, src0, src1, src2);
3613 src_tmp += (3 * src_stride);
3617 VSHF_B2_SB(src0, src0, src0, src0, mask0, mask1, vec0, vec1);
3618 VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3);
3619 VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5);
3631 for (loop_cnt = height >> 2; loop_cnt--;) {
3632 LD_SB4(src_tmp, src_stride, src3, src4, src5, src6);
3633 src_tmp += (4 * src_stride);
3636 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3648 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3659 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3671 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
3683 dst2_l, dst2_r, dst3_l, dst3_r,
3684 dst0_r, dst1_r, dst2_r, dst3_r);
3686 ST_SW2(dst0_r, dst1_r, dst_tmp, dst_stride);
3687 dst_tmp += (2 * dst_stride);
3688 ST_SW2(dst2_r, dst3_r, dst_tmp, dst_stride);
3689 dst_tmp += (2 * dst_stride);
3701 const int8_t *filter_x,
3702 const int8_t *filter_y,
3708 filter_x, filter_y, height);
3709 }
else if (6 == height) {
3711 filter_x, filter_y, height);
3712 }
else if (0 == (height % 4)) {
3714 filter_x, filter_y, height, 8);
3722 const int8_t *filter_x,
3723 const int8_t *filter_y,
3727 filter_x, filter_y, height, 8);
3730 filter_x, filter_y, height);
3738 const int8_t *filter_x,
3739 const int8_t *filter_y,
3743 filter_x, filter_y, height, 16);
3750 const int8_t *filter_x,
3751 const int8_t *filter_y,
3755 filter_x, filter_y, height, 24);
3762 const int8_t *filter_x,
3763 const int8_t *filter_y,
3767 filter_x, filter_y, height, 32);
3770 #define MC_COPY(WIDTH) \
3771 void ff_hevc_put_hevc_pel_pixels##WIDTH##_8_msa(int16_t *dst, \
3773 ptrdiff_t src_stride, \
3779 hevc_copy_##WIDTH##w_msa(src, src_stride, dst, MAX_PB_SIZE, height); \
3794 #define MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR) \
3795 void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_msa(int16_t *dst, \
3797 ptrdiff_t src_stride, \
3803 const int8_t *filter = ff_hevc_##PEL##_filters[FILT_DIR - 1]; \
3805 hevc_##DIR1##_##TAP##t_##WIDTH##w_msa(src, src_stride, dst, \
3806 MAX_PB_SIZE, filter, height); \
3809 MC(qpel,
h, 4, 8, hz, mx);
3810 MC(qpel,
h, 8, 8, hz, mx);
3811 MC(qpel,
h, 12, 8, hz, mx);
3812 MC(qpel,
h, 16, 8, hz, mx);
3813 MC(qpel,
h, 24, 8, hz, mx);
3814 MC(qpel,
h, 32, 8, hz, mx);
3815 MC(qpel,
h, 48, 8, hz, mx);
3816 MC(qpel,
h, 64, 8, hz, mx);
3818 MC(qpel, v, 4, 8, vt, my);
3819 MC(qpel, v, 8, 8, vt, my);
3820 MC(qpel, v, 12, 8, vt, my);
3821 MC(qpel, v, 16, 8, vt, my);
3822 MC(qpel, v, 24, 8, vt, my);
3823 MC(qpel, v, 32, 8, vt, my);
3824 MC(qpel, v, 48, 8, vt, my);
3825 MC(qpel, v, 64, 8, vt, my);
3827 MC(epel,
h, 4, 4, hz, mx);
3828 MC(epel,
h, 6, 4, hz, mx);
3829 MC(epel,
h, 8, 4, hz, mx);
3830 MC(epel,
h, 12, 4, hz, mx);
3831 MC(epel,
h, 16, 4, hz, mx);
3832 MC(epel,
h, 24, 4, hz, mx);
3833 MC(epel,
h, 32, 4, hz, mx);
3835 MC(epel, v, 4, 4, vt, my);
3836 MC(epel, v, 6, 4, vt, my);
3837 MC(epel, v, 8, 4, vt, my);
3838 MC(epel, v, 12, 4, vt, my);
3839 MC(epel, v, 16, 4, vt, my);
3840 MC(epel, v, 24, 4, vt, my);
3841 MC(epel, v, 32, 4, vt, my);
3845 #define MC_HV(PEL, DIR, WIDTH, TAP, DIR1) \
3846 void ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_msa(int16_t *dst, \
3848 ptrdiff_t src_stride, \
3854 const int8_t *filter_x = ff_hevc_##PEL##_filters[mx - 1]; \
3855 const int8_t *filter_y = ff_hevc_##PEL##_filters[my - 1]; \
3857 hevc_##DIR1##_##TAP##t_##WIDTH##w_msa(src, src_stride, dst, MAX_PB_SIZE, \
3858 filter_x, filter_y, height); \
3861 MC_HV(qpel, hv, 4, 8, hv);
3862 MC_HV(qpel, hv, 8, 8, hv);
3863 MC_HV(qpel, hv, 12, 8, hv);
3864 MC_HV(qpel, hv, 16, 8, hv);
3865 MC_HV(qpel, hv, 24, 8, hv);
3866 MC_HV(qpel, hv, 32, 8, hv);
3867 MC_HV(qpel, hv, 48, 8, hv);
3868 MC_HV(qpel, hv, 64, 8, hv);
3870 MC_HV(epel, hv, 4, 4, hv);
3871 MC_HV(epel, hv, 6, 4, hv);
3872 MC_HV(epel, hv, 8, 4, hv);
3873 MC_HV(epel, hv, 12, 4, hv);
3874 MC_HV(epel, hv, 16, 4, hv);
3875 MC_HV(epel, hv, 24, 4, hv);
3876 MC_HV(epel, hv, 32, 4, hv);
#define XORI_B5_128_SB(...)
#define XORI_B8_128_SB(...)
static void hevc_hz_4t_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_8t_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_8t_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_4t_4x2_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y)
static void hevc_hz_4t_4x4_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter)
static void hevc_hv_8t_64w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_copy_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
static void hevc_hz_8t_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_4t_6w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_4t_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define XORI_B2_128_SB(...)
static void hevc_hv_8t_8multx2mult_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t width)
#define XORI_B3_128_SB(...)
static void hevc_copy_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
#define DPADD_SB4_SH(...)
#define SPLATI_H2_SH(...)
static void hevc_copy_16multx8mult_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height, int32_t width)
static void hevc_vt_4t_6w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_4t_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_copy_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
static void hevc_hz_8t_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_4t_8x2_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_hv_8t_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_vt_8t_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_4t_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, ptrdiff_t low_stride, int16_t *high, ptrdiff_t high_stride, int len, uint8_t clip)
#define SPLATI_H4_SH(...)
static void hevc_vt_4t_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_4t_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define MC_HV(PEL, DIR, WIDTH, TAP, DIR1)
static void hevc_vt_8t_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_copy_48w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
static void hevc_copy_64w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
static void hevc_hv_4t_4multx8mult_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
#define ST8x2_UB(in, pdst, stride)
static void hevc_hv_8t_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_vt_8t_48w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_4t_6w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
#define XORI_B7_128_SB(...)
static void hevc_hv_8t_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_vt_4t_8x2_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter)
#define XORI_B4_128_SB(...)
static void hevc_vt_4t_8x4multiple_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_8t_16multx4mult_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t width)
#define DPADD_SB2_SH(...)
#define MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR)
static void hevc_hv_4t_4x4_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y)
static void hevc_vt_4t_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_4t_4x8multiple_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define SPLATI_W4_SW(...)
static void hevc_vt_8t_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_4t_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_4t_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_vt_4t_4x4_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_4t_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_8t_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
#define HEVC_FILT_8TAP(in0, in1, in2, in3,filt0, filt1, filt2, filt3)
static void hevc_copy_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
#define ST_SW2(in0, in1, pdst, stride)
static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
static void hevc_hv_4t_8w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_hv_4t_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_vt_4t_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_4t_4x8multiple_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
BYTE int const BYTE int int int height
static void hevc_hz_4t_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_8t_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_4t_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_copy_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)
static void hevc_hz_4t_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define ST12x8_UB(in0, in1, in2, in3, in4, in5, in6, in7, pdst, stride)
static void hevc_hz_4t_8x2multiple_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define SLLI_4V(in0, in1, in2, in3, shift)
static void hevc_hv_8t_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_hv_4t_8x6_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
#define HEVC_FILT_4TAP(in0, in1, filt0, filt1)
static void hevc_hz_8t_24w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_8t_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_8t_64w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define ST8x4_UB(in0, in1, pdst, stride)
static void hevc_vt_8t_64w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define ST8x8_UB(in0, in1, in2, in3, pdst, stride)
static void hevc_hz_8t_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_vt_4t_16w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hv_8t_48w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_vt_4t_4x2_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter)
static void hevc_hv_4t_8multx4mult_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t width)
static void hevc_hv_8t_32w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_8t_48w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
static void hevc_hz_4t_8x4multiple_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define SPLATI_W2_SW(...)
static void hevc_hz_4t_4x2_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter)
static void hevc_vt_4t_8x6_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter)
static void hevc_hv_4t_12w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height)
static void hevc_copy_6w_msa(uint8_t *src, int32_t src_stride, int16_t *dst, int32_t dst_stride, int32_t height)