27 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
28 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20
31#define HEVC_BIW_RND_CLIP2(in0, in1, vec0, vec1, wgt, rnd, offset, \
34 v4i32 out0_r, out1_r, out0_l, out1_l; \
36 ILVR_H2_SW(in0, vec0, in1, vec1, out0_r, out1_r); \
37 ILVL_H2_SW(in0, vec0, in1, vec1, out0_l, out1_l); \
39 out0_r = __msa_dpadd_s_w(offset, (v8i16) out0_r, (v8i16) wgt); \
40 out1_r = __msa_dpadd_s_w(offset, (v8i16) out1_r, (v8i16) wgt); \
41 out0_l = __msa_dpadd_s_w(offset, (v8i16) out0_l, (v8i16) wgt); \
42 out1_l = __msa_dpadd_s_w(offset, (v8i16) out1_l, (v8i16) wgt); \
44 SRAR_W4_SW(out0_r, out1_r, out0_l, out1_l, rnd); \
45 CLIP_SW4_0_255(out0_l, out0_r, out1_l, out1_r); \
46 PCKEV_H2_SH(out0_l, out0_r, out1_l, out1_r, out0, out1); \
49#define HEVC_BIW_RND_CLIP4(in0, in1, in2, in3, vec0, vec1, vec2, vec3, \
50 wgt, rnd, offset, out0, out1, out2, out3) \
52 HEVC_BIW_RND_CLIP2(in0, in1, vec0, vec1, wgt, rnd, offset, out0, out1); \
53 HEVC_BIW_RND_CLIP2(in2, in3, vec2, vec3, wgt, rnd, offset, out2, out3); \
56#define HEVC_BIW_RND_CLIP2_MAX_SATU(in0, in1, vec0, vec1, wgt, rnd, \
59 v4i32 out0_r, out1_r, out0_l, out1_l; \
61 ILVR_H2_SW(in0, vec0, in1, vec1, out0_r, out1_r); \
62 ILVL_H2_SW(in0, vec0, in1, vec1, out0_l, out1_l); \
63 out0_r = __msa_dpadd_s_w(offset, (v8i16) out0_r, (v8i16) wgt); \
64 out1_r = __msa_dpadd_s_w(offset, (v8i16) out1_r, (v8i16) wgt); \
65 out0_l = __msa_dpadd_s_w(offset, (v8i16) out0_l, (v8i16) wgt); \
66 out1_l = __msa_dpadd_s_w(offset, (v8i16) out1_l, (v8i16) wgt); \
67 SRAR_W4_SW(out0_r, out1_r, out0_l, out1_l, rnd); \
68 CLIP_SW4_0_255(out0_r, out1_r, out0_l, out1_l); \
69 PCKEV_H2_SH(out0_l, out0_r, out1_l, out1_r, out0, out1); \
72#define HEVC_BIW_RND_CLIP4_MAX_SATU(in0, in1, in2, in3, vec0, vec1, vec2, \
73 vec3, wgt, rnd, offset, out0, out1, \
76 HEVC_BIW_RND_CLIP2_MAX_SATU(in0, in1, vec0, vec1, wgt, rnd, offset, \
78 HEVC_BIW_RND_CLIP2_MAX_SATU(in2, in3, vec2, vec3, wgt, rnd, offset, \
84 const int16_t *src1_ptr,
94 uint32_t loop_cnt, tp0, tp1, tp2, tp3;
95 uint64_t tpd0, tpd1, tpd2, tpd3;
100 v8i16 in0 = { 0 }, in1 = { 0 }, in2 = { 0 }, in3 = { 0 };
101 v8i16 dst0, dst1, dst2, dst3, weight_vec;
102 v4i32 dst0_r, dst0_l, offset_vec, rnd_vec;
105 weight0 = weight0 & 0x0000FFFF;
106 weight = weight0 | (weight1 << 16);
108 offset_vec = __msa_fill_w(
offset);
109 weight_vec = (v8i16) __msa_fill_w(
weight);
110 rnd_vec = __msa_fill_w(rnd_val + 1);
113 LW2(src0_ptr, src_stride, tp0, tp1);
115 LD2(src1_ptr, src2_stride, tpd0, tpd1);
118 dst0 = (v8i16) __msa_ilvr_b(
zero,
src0);
122 dst0_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_r, weight_vec);
123 dst0_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_l, weight_vec);
126 dst0 = (v8i16) __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r);
127 out0 = (v16u8) __msa_pckev_b((v16i8) dst0, (v16i8) dst0);
130 LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
132 LD4(src1_ptr, src2_stride, tpd0, tpd1, tpd2, tpd3);
138 offset_vec, dst0, dst1);
139 out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0);
140 ST_W4(out0, 0, 1, 2, 3,
dst, dst_stride);
141 }
else if (0 ==
height % 8) {
142 for (loop_cnt = (
height >> 3); loop_cnt--;) {
143 LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
144 src0_ptr += 4 * src_stride;
146 LW4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
147 src0_ptr += 4 * src_stride;
149 LD4(src1_ptr, src2_stride, tpd0, tpd1, tpd2, tpd3);
150 src1_ptr += (4 * src2_stride);
153 LD4(src1_ptr, src2_stride, tpd0, tpd1, tpd2, tpd3);
154 src1_ptr += (4 * src2_stride);
159 SLLI_4V(dst0, dst1, dst2, dst3, 6);
161 in3, weight_vec, rnd_vec, offset_vec,
162 dst0, dst1, dst2, dst3);
164 ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
165 dst += (8 * dst_stride);
172 const int16_t *src1_ptr,
185 uint64_t tp0, tp1, tp2, tp3;
189 v8i16 in0, in1, in2, in3;
190 v8i16 dst0, dst1, dst2, dst3;
191 v4i32 offset_vec, weight_vec, rnd_vec;
194 weight0 = weight0 & 0x0000FFFF;
195 weight = weight0 | (weight1 << 16);
197 weight_vec = __msa_fill_w(
weight);
198 offset_vec = __msa_fill_w(
offset);
199 rnd_vec = __msa_fill_w(rnd_val + 1);
201 for (loop_cnt = (
height >> 2); loop_cnt--;) {
202 LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
203 src0_ptr += (4 * src_stride);
206 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
207 src1_ptr += (4 * src2_stride);
210 SLLI_4V(dst0, dst1, dst2, dst3, 6);
213 weight_vec, rnd_vec, offset_vec,
214 dst0, dst1, dst2, dst3);
217 ST_H2(out0, 2, 6,
dst + 4, dst_stride);
218 ST_W2(out1, 0, 2,
dst + 2 * dst_stride, dst_stride);
219 ST_H2(out1, 2, 6,
dst + 2 * dst_stride + 4, dst_stride);
220 dst += (4 * dst_stride);
223 LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
224 src0_ptr += (4 * src_stride);
227 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
228 src1_ptr += (4 * src2_stride);
231 SLLI_4V(dst0, dst1, dst2, dst3, 6);
234 weight_vec, rnd_vec, offset_vec,
235 dst0, dst1, dst2, dst3);
239 ST_H2(out0, 2, 6,
dst + 4, dst_stride);
240 ST_W2(out1, 0, 2,
dst + 2 * dst_stride, dst_stride);
241 ST_H2(out1, 2, 6,
dst + 2 * dst_stride + 4, dst_stride);
247 const int16_t *src1_ptr,
257 uint64_t tp0, tp1, tp2, tp3;
259 v16u8 out0, out1, out2;
262 v8i16 in0, in1, in2, in3, in4, in5;
263 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
264 v4i32 offset_vec, weight_vec, rnd_vec;
267 weight0 = weight0 & 0x0000FFFF;
268 weight = weight0 | (weight1 << 16);
270 offset_vec = __msa_fill_w(
offset);
271 weight_vec = __msa_fill_w(
weight);
272 rnd_vec = __msa_fill_w(rnd_val + 1);
275 LD2(src0_ptr, src_stride, tp0, tp1);
277 LD_SH2(src1_ptr, src2_stride, in0, in1);
282 weight_vec, rnd_vec, offset_vec,
285 out0 = (v16u8) __msa_pckev_b((v16i8) dst1, (v16i8) dst0);
288 LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
289 src0_ptr += 4 * src_stride;
292 LD2(src0_ptr, src_stride, tp0, tp1);
297 LD_SH6(src1_ptr, src2_stride, in0, in1, in2, in3, in4, in5);
298 SLLI_4V(dst0, dst1, dst2, dst3, 6);
301 weight_vec, rnd_vec, offset_vec, dst0, dst1,
304 offset_vec, dst4, dst5);
305 PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2);
306 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
307 ST_D2(out2, 0, 1,
dst + 4 * dst_stride, dst_stride);
308 }
else if (0 ==
height % 4) {
311 for (loop_cnt = (
height >> 2); loop_cnt--;) {
312 LD4(src0_ptr, src_stride, tp0, tp1, tp2, tp3);
313 src0_ptr += (4 * src_stride);
318 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
319 src1_ptr += (4 * src2_stride);
321 SLLI_4V(dst0, dst1, dst2, dst3, 6);
323 in3, weight_vec, rnd_vec, offset_vec,
324 dst0, dst1, dst2, dst3);
326 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
327 dst += (4 * dst_stride);
334 const int16_t *src1_ptr,
347 v16u8 out0, out1, out2;
349 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
350 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
351 v4i32 offset_vec, weight_vec, rnd_vec;
354 weight0 = weight0 & 0x0000FFFF;
355 weight = weight0 | (weight1 << 16);
357 offset_vec = __msa_fill_w(
offset);
358 weight_vec = __msa_fill_w(
weight);
359 rnd_vec = __msa_fill_w(rnd_val + 1);
361 for (loop_cnt = (
height >> 2); loop_cnt--;) {
363 src0_ptr += (4 * src_stride);
364 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
365 LD_SH4(src1_ptr + 8, src2_stride, in4, in5, in6, in7);
366 src1_ptr += (4 * src2_stride);
370 dst0, dst1, dst2, dst3);
372 SLLI_4V(dst0, dst1, dst2, dst3, 6);
379 weight_vec, rnd_vec, offset_vec, dst0, dst1,
382 offset_vec, dst4, dst5);
383 PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2);
384 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
385 ST_W4(out2, 0, 1, 2, 3,
dst + 8, dst_stride);
386 dst += (4 * dst_stride);
392 const int16_t *src1_ptr,
404 v16u8 out0, out1, out2, out3;
407 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
408 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
409 v4i32 offset_vec, weight_vec, rnd_vec;
412 weight0 = weight0 & 0x0000FFFF;
413 weight = weight0 | (weight1 << 16);
415 offset_vec = __msa_fill_w(
offset);
416 weight_vec = __msa_fill_w(
weight);
417 rnd_vec = __msa_fill_w(rnd_val + 1);
419 for (loop_cnt = (
height >> 2); loop_cnt--;) {
421 src0_ptr += (4 * src_stride);
422 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
423 LD_SH4(src1_ptr + 8, src2_stride, in4, in5, in6, in7);
424 src1_ptr += (4 * src2_stride);
425 ILVR_B4_SH(
zero,
src0,
zero,
src1,
zero,
src2,
zero, src3, tmp0, tmp1,
427 ILVL_B4_SH(
zero,
src0,
zero,
src1,
zero,
src2,
zero, src3, tmp4, tmp5,
429 SLLI_4V(tmp0, tmp1, tmp2, tmp3, 6);
430 SLLI_4V(tmp4, tmp5, tmp6, tmp7, 6);
432 weight_vec, rnd_vec, offset_vec, tmp0, tmp1,
435 weight_vec, rnd_vec, offset_vec, tmp2, tmp3,
439 ST_UB4(out0, out1, out2, out3,
dst, dst_stride);
440 dst += (4 * dst_stride);
446 const int16_t *src1_ptr,
458 v16u8 out0, out1, out2, out3, out4, out5;
460 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9, dst10;
461 v8i16 in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, dst11;
462 v4i32 offset_vec, weight_vec, rnd_vec;
465 weight0 = weight0 & 0x0000FFFF;
466 weight = weight0 | (weight1 << 16);
468 offset_vec = __msa_fill_w(
offset);
469 weight_vec = __msa_fill_w(
weight);
470 rnd_vec = __msa_fill_w(rnd_val + 1);
472 for (loop_cnt = 8; loop_cnt--;) {
474 LD_SB4(src0_ptr + 16, src_stride,
src2, src3, src6, src7);
475 src0_ptr += (4 * src_stride);
476 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
477 LD_SH4(src1_ptr + 8, src2_stride, in4, in5, in6, in7);
478 LD_SH4(src1_ptr + 16, src2_stride, in8, in9, in10, in11);
479 src1_ptr += (4 * src2_stride);
487 SLLI_4V(dst0, dst1, dst2, dst3, 6);
488 SLLI_4V(dst4, dst5, dst6, dst7, 6);
489 SLLI_4V(dst8, dst9, dst10, dst11, 6);
491 weight_vec, rnd_vec, offset_vec, dst0, dst1,
494 weight_vec, rnd_vec, offset_vec, dst4, dst5,
497 in11, weight_vec, rnd_vec, offset_vec,
498 dst8, dst9, dst10, dst11);
499 PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2);
500 PCKEV_B3_UB(dst7, dst6, dst9, dst8, dst11, dst10, out3, out4, out5);
501 ST_UB4(out0, out1, out3, out4,
dst, dst_stride);
502 ST_D4(out2, out5, 0, 1, 0, 1,
dst + 16, dst_stride);
503 dst += (4 * dst_stride);
509 const int16_t *src1_ptr,
521 v16u8 out0, out1, out2, out3;
524 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
525 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
526 v4i32 offset_vec, weight_vec, rnd_vec;
529 weight0 = weight0 & 0x0000FFFF;
530 weight = weight0 | (weight1 << 16);
532 offset_vec = __msa_fill_w(
offset);
533 weight_vec = __msa_fill_w(
weight);
534 rnd_vec = __msa_fill_w(rnd_val + 1);
536 for (loop_cnt = (
height >> 1); loop_cnt--;) {
538 src0_ptr += src_stride;
540 src0_ptr += src_stride;
541 LD_SH4(src1_ptr, 8, in0, in1, in2, in3);
542 src1_ptr += src2_stride;
543 LD_SH4(src1_ptr, 8, in4, in5, in6, in7);
544 src1_ptr += src2_stride;
550 SLLI_4V(tmp0, tmp1, tmp2, tmp3, 6);
551 SLLI_4V(tmp4, tmp5, tmp6, tmp7, 6);
553 weight_vec, rnd_vec, offset_vec, tmp0, tmp4,
556 weight_vec, rnd_vec, offset_vec, tmp2, tmp6,
569 const int16_t *src1_ptr,
581 v16u8 out0, out1, out2;
584 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, in0, in1, in2, in3, in4, in5;
585 v4i32 offset_vec, weight_vec, rnd_vec;
588 weight0 = weight0 & 0x0000FFFF;
589 weight = weight0 | (weight1 << 16);
591 offset_vec = __msa_fill_w(
offset);
592 weight_vec = __msa_fill_w(
weight);
593 rnd_vec = __msa_fill_w(rnd_val + 1);
595 for (loop_cnt = 64; loop_cnt--;) {
597 src0_ptr += src_stride;
598 LD_SH6(src1_ptr, 8, in0, in1, in2, in3, in4, in5);
599 src1_ptr += src2_stride;
604 SLLI_4V(dst0, dst1, dst2, dst3, 6);
607 weight_vec, rnd_vec, offset_vec, dst0, dst1,
610 offset_vec, dst4, dst5);
611 PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2);
620 const int16_t *src1_ptr,
632 v16u8 out0, out1, out2, out3;
635 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
636 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
637 v4i32 offset_vec, weight_vec, rnd_vec;
640 weight0 = weight0 & 0x0000FFFF;
641 weight = weight0 | (weight1 << 16);
643 offset_vec = __msa_fill_w(
offset);
644 weight_vec = __msa_fill_w(
weight);
645 rnd_vec = __msa_fill_w(rnd_val + 1);
647 for (loop_cnt =
height; loop_cnt--;) {
649 src0_ptr += src_stride;
650 LD_SH8(src1_ptr, 8, in0, in1, in2, in3, in4, in5, in6, in7);
651 src1_ptr += src2_stride;
653 ILVR_B4_SH(
zero,
src0,
zero,
src1,
zero,
src2,
zero, src3, tmp0, tmp1,
655 ILVL_B4_SH(
zero,
src0,
zero,
src1,
zero,
src2,
zero, src3, tmp4, tmp5,
657 SLLI_4V(tmp0, tmp1, tmp2, tmp3, 6);
658 SLLI_4V(tmp4, tmp5, tmp6, tmp7, 6);
660 weight_vec, rnd_vec, offset_vec, tmp0, tmp4,
663 weight_vec, rnd_vec, offset_vec, tmp2, tmp6,
674 const int16_t *src1_ptr,
687 v8i16 filt0, filt1, filt2, filt3;
689 v16i8 mask1, mask2, mask3;
690 v16i8 vec0, vec1, vec2, vec3;
692 v8i16 in0, in1, in2, in3;
693 v8i16 filter_vec, out0, out1;
694 v4i32 weight_vec, offset_vec, rnd_vec;
699 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
706 weight0 = weight0 & 0x0000FFFF;
707 weight = weight0 | (weight1 << 16);
708 constant = 128 * weight1;
712 offset_vec = __msa_fill_w(
offset);
713 weight_vec = __msa_fill_w(
weight);
714 rnd_vec = __msa_fill_w(rnd_val + 1);
716 for (loop_cnt = (
height >> 2); loop_cnt--;) {
718 src0_ptr += (4 * src_stride);
719 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
720 src1_ptr += (4 * src2_stride);
725 vec0, vec1, vec2, vec3);
729 vec0, vec1, vec2, vec3);
734 weight_vec, rnd_vec, offset_vec,
737 out0 = (v8i16) __msa_pckev_b((v16i8) out1, (v16i8) out0);
738 ST_W4(out0, 0, 1, 2, 3,
dst, dst_stride);
739 dst += (4 * dst_stride);
745 const int16_t *src1_ptr,
758 v8i16 filt0, filt1, filt2, filt3;
760 v16i8 mask1, mask2, mask3;
761 v16i8 vec0, vec1, vec2, vec3;
762 v8i16 dst0, dst1, dst2, dst3;
763 v8i16 in0, in1, in2, in3;
764 v8i16 filter_vec, out0, out1, out2, out3;
765 v4i32 weight_vec, offset_vec, rnd_vec;
770 weight0 = weight0 & 0x0000FFFF;
771 weight = weight0 | (weight1 << 16);
772 constant = 128 * weight1;
776 offset_vec = __msa_fill_w(
offset);
777 weight_vec = __msa_fill_w(
weight);
778 rnd_vec = __msa_fill_w(rnd_val + 1);
781 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
787 for (loop_cnt = (
height >> 2); loop_cnt--;) {
789 src0_ptr += (4 * src_stride);
790 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
791 src1_ptr += (4 * src2_stride);
795 vec0, vec1, vec2, vec3);
799 vec0, vec1, vec2, vec3);
803 vec0, vec1, vec2, vec3);
806 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
807 vec0, vec1, vec2, vec3);
813 weight_vec, rnd_vec, offset_vec,
814 out0, out1, out2, out3);
817 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
818 dst += (4 * dst_stride);
824 const int16_t *src1_ptr,
838 v16i8 mask0, mask1, mask2, mask3, mask4, mask5, mask6, mask7;
839 v8i16 filt0, filt1, filt2, filt3, out0, out1, out2, out3;
840 v8i16 dst0, dst1, dst2, dst3, in0, in1, in2, in3, filter_vec;
841 v4i32 weight_vec, offset_vec, rnd_vec;
845 weight0 = weight0 & 0x0000FFFF;
846 weight = weight0 | (weight1 << 16);
847 constant = 128 * weight1;
852 offset_vec = __msa_fill_w(
offset);
853 weight_vec = __msa_fill_w(
weight);
854 rnd_vec = __msa_fill_w(rnd_val + 1);
857 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
868 for (loop_cnt = 4; loop_cnt--;) {
870 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
884 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3, vec0, vec1, vec2,
889 weight_vec, rnd_vec, offset_vec, out0, out1, out2,
892 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
895 src0_ptr += (4 * src_stride);
896 LD_SH4(src1_ptr + 8, src2_stride, in0, in1, in2, in3);
897 src1_ptr += (4 * src2_stride);
904 VSHF_B4_SB(
src2, src3, mask4, mask5, mask6, mask7, vec0, vec1, vec2,
909 offset_vec, out0, out1);
910 out0 = (v8i16) __msa_pckev_b((v16i8) out1, (v16i8) out0);
911 ST_W4(out0, 0, 1, 2, 3,
dst + 8, dst_stride);
912 dst += (4 * dst_stride);
918 const int16_t *src1_ptr,
932 v8i16 in0, in1, in2, in3;
933 v8i16 filt0, filt1, filt2, filt3;
934 v16i8 mask1, mask2, mask3;
935 v8i16 filter_vec, out0, out1, out2, out3;
936 v16i8 vec0, vec1, vec2, vec3;
937 v8i16 dst0, dst1, dst2, dst3;
938 v4i32 weight_vec, offset_vec, rnd_vec;
939 v16i8 mask0 = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };
943 weight0 = weight0 & 0x0000FFFF;
944 weight = weight0 | (weight1 << 16);
945 constant = 128 * weight1;
949 offset_vec = __msa_fill_w(
offset);
950 weight_vec = __msa_fill_w(
weight);
951 rnd_vec = __msa_fill_w(rnd_val + 1);
954 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
960 for (loop_cnt = (
height >> 1); loop_cnt--;) {
962 src0_ptr += src_stride;
964 src0_ptr += src_stride;
965 LD_SH2(src1_ptr, 8, in0, in1);
966 src1_ptr += src2_stride;
967 LD_SH2(src1_ptr, 8, in2, in3);
968 src1_ptr += src2_stride;
972 vec0, vec1, vec2, vec3);
976 vec0, vec1, vec2, vec3);
980 vec0, vec1, vec2, vec3);
983 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
984 vec0, vec1, vec2, vec3);
990 weight_vec, rnd_vec, offset_vec,
991 out0, out1, out2, out3);
995 dst += (2 * dst_stride);
1001 const int16_t *src1_ptr,
1016 v8i16 in0, in1, in2;
1017 v8i16 filt0, filt1, filt2, filt3;
1018 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
1019 v16i8 vec0, vec1, vec2, vec3;
1020 v8i16 dst0, dst1, dst2;
1021 v4i32 dst2_r, dst2_l;
1022 v8i16 filter_vec, out0, out1, out2;
1023 v4i32 weight_vec, offset_vec, rnd_vec;
1026 src0_ptr = src0_ptr - 3;
1028 weight0 = weight0 & 0x0000FFFF;
1029 weight = weight0 | (weight1 << 16);
1030 constant = 128 * weight1;
1034 offset_vec = __msa_fill_w(
offset);
1035 weight_vec = __msa_fill_w(
weight);
1036 rnd_vec = __msa_fill_w(rnd_val + 1);
1039 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1050 src0_ptr += src_stride;
1051 LD_SH2(src1_ptr, 8, in0, in1);
1052 in2 =
LD_SH(src1_ptr + 16);
1053 src1_ptr += src2_stride;
1056 for (loop_cnt = 31; loop_cnt--;) {
1058 vec0, vec1, vec2, vec3);
1062 vec0, vec1, vec2, vec3);
1066 vec0, vec1, vec2, vec3);
1071 weight_vec, rnd_vec, offset_vec,
1075 dst2_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_r,
1076 (v8i16) weight_vec);
1077 dst2_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_l,
1078 (v8i16) weight_vec);
1081 out2 = __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r);
1084 src0_ptr += src_stride;
1085 LD_SH2(src1_ptr, 8, in0, in1);
1086 in2 =
LD_SH(src1_ptr + 16);
1087 src1_ptr += src2_stride;
1090 dst_val0 = __msa_copy_u_d((v2i64) out2, 0);
1092 SD(dst_val0,
dst + 16);
1108 dst2_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_r, (v8i16) weight_vec);
1109 dst2_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_l, (v8i16) weight_vec);
1112 out2 = __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r);
1114 dst_val0 = __msa_copy_u_d((v2i64) out2, 0);
1116 SD(dst_val0,
dst + 16);
1122 const int16_t *src1_ptr,
1136 v8i16 in0, in1, in2, in3;
1137 v8i16 filt0, filt1, filt2, filt3;
1139 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
1140 v16i8 vec0, vec1, vec2, vec3;
1141 v8i16 dst0, dst1, dst2, dst3;
1142 v8i16 filter_vec, out0, out1, out2, out3;
1143 v4i32 weight_vec, offset_vec, rnd_vec;
1147 weight0 = weight0 & 0x0000FFFF;
1148 weight = weight0 | (weight1 << 16);
1149 constant = 128 * weight1;
1153 offset_vec = __msa_fill_w(
offset);
1154 weight_vec = __msa_fill_w(
weight);
1155 rnd_vec = __msa_fill_w(rnd_val + 1);
1158 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1168 for (loop_cnt =
height; loop_cnt--;) {
1171 src0_ptr += src_stride;
1172 LD_SH4(src1_ptr, 8, in0, in1, in2, in3);
1173 src1_ptr += src2_stride;
1178 vec0, vec1, vec2, vec3);
1182 vec0, vec1, vec2, vec3);
1186 vec0, vec1, vec2, vec3);
1190 vec0, vec1, vec2, vec3);
1196 weight_vec, rnd_vec, offset_vec,
1197 out0, out1, out2, out3);
1207 const int16_t *src1_ptr,
1221 v8i16 in0, in1, in2, in3;
1222 v8i16 filt0, filt1, filt2, filt3;
1224 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
1225 v16i8 vec0, vec1, vec2, vec3;
1226 v8i16 dst0, dst1, dst2, dst3;
1227 v8i16 filter_vec, out0, out1, out2, out3;
1228 v4i32 weight_vec, offset_vec, rnd_vec;
1232 weight0 = weight0 & 0x0000FFFF;
1233 weight = weight0 | (weight1 << 16);
1234 constant = 128 * weight1;
1238 offset_vec = __msa_fill_w(
offset);
1239 weight_vec = __msa_fill_w(
weight);
1240 rnd_vec = __msa_fill_w(rnd_val + 1);
1243 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1253 for (loop_cnt = 64; loop_cnt--;) {
1256 LD_SH4(src1_ptr, 8, in0, in1, in2, in3);
1258 LD_SB2(src0_ptr + 32, 8, src3, src4);
1259 src0_ptr += src_stride;
1263 vec0, vec1, vec2, vec3);
1267 vec0, vec1, vec2, vec3);
1271 vec0, vec1, vec2, vec3);
1275 vec0, vec1, vec2, vec3);
1280 weight_vec, rnd_vec, offset_vec,
1281 out0, out1, out2, out3);
1286 LD_SH2(src1_ptr + 32, 8, in2, in3);
1287 src1_ptr += src2_stride;
1289 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
1290 vec0, vec1, vec2, vec3);
1293 VSHF_B4_SB(src4, src4, mask0, mask1, mask2, mask3,
1294 vec0, vec1, vec2, vec3);
1299 weight_vec, rnd_vec, offset_vec,
1302 out0 = (v8i16) __msa_pckev_b((v16i8) out1, (v16i8) out0);
1310 const int16_t *src1_ptr,
1321 const uint8_t *src0_ptr_tmp;
1323 const int16_t *src1_ptr_tmp;
1324 uint32_t loop_cnt, cnt;
1327 v8i16 in0, in1, in2, in3;
1328 v8i16 filt0, filt1, filt2, filt3;
1330 v16i8 mask1, mask2, mask3, mask4, mask5, mask6, mask7;
1331 v16i8 vec0, vec1, vec2, vec3;
1332 v8i16 dst0, dst1, dst2, dst3;
1333 v8i16 filter_vec, out0, out1, out2, out3;
1334 v4i32 weight_vec, offset_vec, rnd_vec;
1338 weight0 = weight0 & 0x0000FFFF;
1339 weight = weight0 | (weight1 << 16);
1340 constant = 128 * weight1;
1344 offset_vec = __msa_fill_w(
offset);
1345 weight_vec = __msa_fill_w(
weight);
1346 rnd_vec = __msa_fill_w(rnd_val + 1);
1349 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1359 for (loop_cnt =
height; loop_cnt--;) {
1360 src0_ptr_tmp = src0_ptr;
1362 src1_ptr_tmp = src1_ptr;
1364 for (cnt = 2; cnt--;) {
1368 LD_SH4(src1_ptr_tmp, 8, in0, in1, in2, in3);
1373 vec0, vec1, vec2, vec3);
1377 vec0, vec1, vec2, vec3);
1381 vec0, vec1, vec2, vec3);
1385 vec0, vec1, vec2, vec3);
1391 weight_vec, rnd_vec, offset_vec,
1392 out0, out1, out2, out3);
1395 ST_SH2(out0, out1, dst_tmp, 16);
1399 src0_ptr += src_stride;
1400 src1_ptr += src2_stride;
1408 const int16_t *src1_ptr,
1422 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9, src10;
1423 v16i8 src11, src12, src13, src14;
1424 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
1425 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
1426 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
1427 v16i8 src1110_r, src1211_r, src1312_r, src1413_r;
1428 v16i8 src2110, src4332, src6554, src8776, src10998;
1429 v16i8 src12111110, src14131312;
1430 v8i16 dst10, dst32, dst54, dst76;
1431 v8i16 filt0, filt1, filt2, filt3;
1432 v8i16 filter_vec, out0, out1, out2, out3;
1433 v4i32 weight_vec, weight1_vec, offset_vec, rnd_vec, const_vec;
1435 src0_ptr -= (3 * src_stride);
1437 weight0 = weight0 & 0x0000FFFF;
1438 weight = weight0 | (weight1 << 16);
1440 const_vec = __msa_ldi_w(128);
1442 offset_vec = __msa_fill_w(
offset);
1443 weight_vec = __msa_fill_w(
weight);
1444 rnd_vec = __msa_fill_w(rnd_val + 1);
1445 weight1_vec = __msa_fill_w(weight1);
1446 offset_vec += const_vec * weight1_vec;
1449 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1452 src0_ptr += (7 * src_stride);
1455 src10_r, src32_r, src54_r, src21_r);
1456 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
1457 ILVR_D3_SB(src21_r, src10_r, src43_r, src32_r, src65_r, src54_r,
1458 src2110, src4332, src6554);
1461 for (loop_cnt = (
height >> 3); loop_cnt--;) {
1462 LD_SB8(src0_ptr, src_stride,
1463 src7, src8, src9, src10, src11, src12, src13, src14);
1464 src0_ptr += (8 * src_stride);
1465 LD_SH8(src1_ptr, src2_stride, in0, in1, in2, in3, in4, in5, in6, in7);
1466 src1_ptr += (8 * src2_stride);
1470 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1471 src76_r, src87_r, src98_r, src109_r);
1472 ILVR_B4_SB(src11, src10, src12, src11, src13, src12, src14, src13,
1473 src1110_r, src1211_r, src1312_r, src1413_r);
1474 ILVR_D4_SB(src87_r, src76_r, src109_r, src98_r, src1211_r, src1110_r,
1475 src1413_r, src1312_r,
1476 src8776, src10998, src12111110, src14131312);
1479 DOTP_SB4_SH(src2110, src4332, src6554, src8776, filt0, filt0, filt0,
1480 filt0, dst10, dst32, dst54, dst76);
1481 DPADD_SB4_SH(src4332, src6554, src8776, src10998, filt1, filt1, filt1,
1482 filt1, dst10, dst32, dst54, dst76);
1483 DPADD_SB4_SH(src6554, src8776, src10998, src12111110, filt2, filt2,
1484 filt2, filt2, dst10, dst32, dst54, dst76);
1485 DPADD_SB4_SH(src8776, src10998, src12111110, src14131312, filt3, filt3,
1486 filt3, filt3, dst10, dst32, dst54, dst76);
1490 weight_vec, rnd_vec, offset_vec,
1491 out0, out1, out2, out3);
1494 ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
1495 dst += (8 * dst_stride);
1498 src4332 = src12111110;
1499 src6554 = src14131312;
1503 LD_SB8(src0_ptr, src_stride,
1504 src7, src8, src9, src10, src11, src12, src13, src14);
1505 src0_ptr += (8 * src_stride);
1506 LD_SH8(src1_ptr, src2_stride, in0, in1, in2, in3, in4, in5, in6, in7);
1507 src1_ptr += (8 * src2_stride);
1511 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1512 src76_r, src87_r, src98_r, src109_r);
1513 ILVR_B4_SB(src11, src10, src12, src11, src13, src12, src14, src13,
1514 src1110_r, src1211_r, src1312_r, src1413_r);
1515 ILVR_D4_SB(src87_r, src76_r, src109_r, src98_r, src1211_r, src1110_r,
1516 src1413_r, src1312_r,
1517 src8776, src10998, src12111110, src14131312);
1520 DOTP_SB4_SH(src2110, src4332, src6554, src8776, filt0, filt0, filt0,
1521 filt0, dst10, dst32, dst54, dst76);
1522 DPADD_SB4_SH(src4332, src6554, src8776, src10998, filt1, filt1, filt1,
1523 filt1, dst10, dst32, dst54, dst76);
1524 DPADD_SB4_SH(src6554, src8776, src10998, src12111110, filt2, filt2,
1525 filt2, filt2, dst10, dst32, dst54, dst76);
1526 DPADD_SB4_SH(src8776, src10998, src12111110, src14131312, filt3, filt3,
1527 filt3, filt3, dst10, dst32, dst54, dst76);
1531 weight_vec, rnd_vec, offset_vec,
1532 out0, out1, out2, out3);
1535 ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
1538 src4332 = src12111110;
1539 src6554 = src14131312;
1546 const int16_t *src1_ptr,
1560 v16i8 src6, src7, src8, src9, src10;
1561 v8i16 in0, in1, in2, in3;
1562 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
1563 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
1564 v8i16 tmp0, tmp1, tmp2, tmp3;
1565 v8i16 filt0, filt1, filt2, filt3;
1566 v8i16 filter_vec, out0, out1, out2, out3;
1567 v4i32 weight_vec, weight1_vec, offset_vec, rnd_vec, const_vec;
1569 src0_ptr -= (3 * src_stride);
1571 weight0 = weight0 & 0x0000FFFF;
1572 weight = weight0 | (weight1 << 16);
1574 const_vec = __msa_ldi_w(128);
1576 offset_vec = __msa_fill_w(
offset);
1577 weight_vec = __msa_fill_w(
weight);
1578 rnd_vec = __msa_fill_w(rnd_val + 1);
1579 weight1_vec = __msa_fill_w(weight1);
1580 offset_vec += const_vec * weight1_vec;
1583 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1586 src0_ptr += (7 * src_stride);
1590 src10_r, src32_r, src54_r, src21_r);
1591 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
1593 for (loop_cnt = (
height >> 2); loop_cnt--;) {
1594 LD_SB4(src0_ptr, src_stride, src7, src8, src9, src10);
1595 src0_ptr += (4 * src_stride);
1596 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
1597 src1_ptr += (4 * src2_stride);
1600 ILVR_B4_SB(src7, src6, src8, src7, src9, src8, src10, src9,
1601 src76_r, src87_r, src98_r, src109_r);
1603 DOTP_SB4_SH(src10_r, src21_r, src32_r, src43_r, filt0, filt0, filt0,
1604 filt0, tmp0, tmp1, tmp2, tmp3);
1605 DPADD_SB4_SH(src32_r, src43_r, src54_r, src65_r, filt1, filt1, filt1,
1606 filt1, tmp0, tmp1, tmp2, tmp3);
1607 DPADD_SB4_SH(src54_r, src65_r, src76_r, src87_r, filt2, filt2, filt2,
1608 filt2, tmp0, tmp1, tmp2, tmp3);
1609 DPADD_SB4_SH(src76_r, src87_r, src98_r, src109_r, filt3, filt3, filt3,
1610 filt3, tmp0, tmp1, tmp2, tmp3);
1614 weight_vec, rnd_vec, offset_vec,
1615 out0, out1, out2, out3);
1618 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
1619 dst += (4 * dst_stride);
1633 const int16_t *src1_ptr,
1646 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
1647 v8i16 in0, in1, in2, in3;
1648 v16i8 src10_r, src32_r, src54_r, src76_r;
1649 v16i8 src21_r, src43_r, src65_r, src87_r;
1650 v8i16 tmp0, tmp1, tmp2;
1651 v16i8 src10_l, src32_l, src54_l, src76_l;
1652 v16i8 src21_l, src43_l, src65_l, src87_l;
1653 v16i8 src2110, src4332, src6554, src8776;
1654 v8i16 filt0, filt1, filt2, filt3;
1655 v8i16 out0, out1, out2, filter_vec;
1656 v4i32 dst2_r, dst2_l;
1657 v4i32 weight_vec, weight1_vec, offset_vec, rnd_vec, const_vec;
1659 src0_ptr -= (3 * src_stride);
1661 weight0 = weight0 & 0x0000FFFF;
1662 weight = weight0 | (weight1 << 16);
1664 const_vec = __msa_ldi_w(128);
1666 offset_vec = __msa_fill_w(
offset);
1667 weight_vec = __msa_fill_w(
weight);
1668 rnd_vec = __msa_fill_w(rnd_val + 1);
1669 weight1_vec = __msa_fill_w(weight1);
1670 offset_vec += const_vec * weight1_vec;
1673 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1676 src0_ptr += (7 * src_stride);
1680 src10_r, src32_r, src54_r, src21_r);
1681 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
1683 src10_l, src32_l, src54_l, src21_l);
1684 ILVL_B2_SB(src4, src3, src6, src5, src43_l, src65_l);
1685 ILVR_D3_SB(src21_l, src10_l, src43_l, src32_l, src65_l, src54_l,
1686 src2110, src4332, src6554);
1688 for (loop_cnt = 8; loop_cnt--;) {
1689 LD_SB2(src0_ptr, src_stride, src7, src8);
1690 src0_ptr += (2 * src_stride);
1691 LD_SH2(src1_ptr, src2_stride, in0, in1);
1692 LD_SH2((src1_ptr + 8), src2_stride, in2, in3);
1693 src1_ptr += (2 * src2_stride);
1694 in2 = (v8i16) __msa_ilvr_d((v2i64) in3, (v2i64) in2);
1697 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
1698 ILVL_B2_SB(src7, src6, src8, src7, src76_l, src87_l);
1699 src8776 = (v16i8) __msa_ilvr_d((v2i64) src87_l, (v2i64) src76_l);
1701 DOTP_SB3_SH(src10_r, src21_r, src2110, filt0, filt0, filt0,
1703 DPADD_SB2_SH(src32_r, src43_r, filt1, filt1, tmp0, tmp1);
1704 tmp2 = __msa_dpadd_s_h(tmp2, src4332, (v16i8) filt1);
1705 DPADD_SB2_SH(src54_r, src65_r, filt2, filt2, tmp0, tmp1);
1706 tmp2 = __msa_dpadd_s_h(tmp2, src6554, (v16i8) filt2);
1707 DPADD_SB2_SH(src76_r, src87_r, filt3, filt3, tmp0, tmp1);
1708 tmp2 = __msa_dpadd_s_h(tmp2, src8776, (v16i8) filt3);
1711 weight_vec, rnd_vec, offset_vec,
1715 dst2_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_r,
1716 (v8i16) weight_vec);
1717 dst2_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst2_l,
1718 (v8i16) weight_vec);
1721 out2 = __msa_pckev_h((v8i16) dst2_l, (v8i16) dst2_r);
1723 ST_D2(out0, 0, 1,
dst, dst_stride);
1724 ST_W2(out2, 0, 1,
dst + 8, dst_stride);
1725 dst += (2 * dst_stride);
1742 const int16_t *src1_ptr,
1754 const uint8_t *src0_ptr_tmp;
1755 const int16_t *src1_ptr_tmp;
1757 uint32_t loop_cnt, cnt;
1759 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
1760 v8i16 in0, in1, in2, in3;
1761 v16i8 src10_r, src32_r, src54_r, src76_r;
1762 v16i8 src21_r, src43_r, src65_r, src87_r;
1763 v16i8 src10_l, src32_l, src54_l, src76_l;
1764 v16i8 src21_l, src43_l, src65_l, src87_l;
1765 v8i16 tmp0, tmp1, tmp2, tmp3;
1766 v8i16 filt0, filt1, filt2, filt3;
1768 v8i16 out0, out1, out2, out3;
1769 v4i32 weight_vec, weight1_vec, offset_vec, rnd_vec, const_vec;
1771 src0_ptr -= (3 * src_stride);
1774 weight0 = weight0 & 0x0000FFFF;
1775 weight = weight0 | (weight1 << 16);
1777 const_vec = __msa_ldi_w(128);
1779 offset_vec = __msa_fill_w(
offset);
1780 weight_vec = __msa_fill_w(
weight);
1781 rnd_vec = __msa_fill_w(rnd_val + 1);
1782 weight1_vec = __msa_fill_w(weight1);
1783 offset_vec += const_vec * weight1_vec;
1786 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1788 for (cnt = (
width >> 4); cnt--;) {
1789 src0_ptr_tmp = src0_ptr;
1790 src1_ptr_tmp = src1_ptr;
1793 LD_SB7(src0_ptr_tmp, src_stride,
1795 src0_ptr_tmp += (7 * src_stride);
1799 src10_r, src32_r, src54_r, src21_r);
1800 ILVR_B2_SB(src4, src3, src6, src5, src43_r, src65_r);
1802 src10_l, src32_l, src54_l, src21_l);
1803 ILVL_B2_SB(src4, src3, src6, src5, src43_l, src65_l);
1805 for (loop_cnt = (
height >> 1); loop_cnt--;) {
1806 LD_SB2(src0_ptr_tmp, src_stride, src7, src8);
1807 src0_ptr_tmp += (2 * src_stride);
1808 LD_SH2(src1_ptr_tmp, src2_stride, in0, in1);
1809 LD_SH2((src1_ptr_tmp + 8), src2_stride, in2, in3);
1810 src1_ptr_tmp += (2 * src2_stride);
1813 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
1814 ILVL_B2_SB(src7, src6, src8, src7, src76_l, src87_l);
1816 DOTP_SB4_SH(src10_r, src21_r, src10_l, src21_l, filt0, filt0,
1817 filt0, filt0, tmp0, tmp1, tmp2, tmp3);
1818 DPADD_SB4_SH(src32_r, src43_r, src32_l, src43_l, filt1, filt1,
1819 filt1, filt1, tmp0, tmp1, tmp2, tmp3);
1820 DPADD_SB4_SH(src54_r, src65_r, src54_l, src65_l, filt2, filt2,
1821 filt2, filt2, tmp0, tmp1, tmp2, tmp3);
1822 DPADD_SB4_SH(src76_r, src87_r, src76_l, src87_l, filt3, filt3,
1823 filt3, filt3, tmp0, tmp1, tmp2, tmp3);
1827 weight_vec, rnd_vec, offset_vec,
1828 out0, out1, out2, out3);
1831 ST_SH2(out0, out1, dst_tmp, dst_stride);
1832 dst_tmp += (2 * dst_stride);
1857 const int16_t *src1_ptr,
1869 src1_ptr, src2_stride,
1871 weight0, weight1,
offset,
1877 const int16_t *src1_ptr,
1889 src1_ptr, src2_stride,
1891 weight0, weight1,
offset,
1894 src1_ptr + 16, src2_stride,
1896 weight0, weight1,
offset, rnd_val);
1901 const int16_t *src1_ptr,
1913 src1_ptr, src2_stride,
1915 weight0, weight1,
offset,
1921 const int16_t *src1_ptr,
1933 src1_ptr, src2_stride,
1935 weight0, weight1,
offset,
1941 const int16_t *src1_ptr,
1953 src1_ptr, src2_stride,
1955 weight0, weight1,
offset,
1961 const int16_t *src1_ptr,
1965 const int8_t *filter_x,
1966 const int8_t *filter_y,
1977 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9, src10;
1978 v8i16 in0 = { 0 }, in1 = { 0 };
1979 v8i16 filt0, filt1, filt2, filt3;
1980 v8i16 filt_h0, filt_h1, filt_h2, filt_h3;
1981 v16i8 mask1, mask2, mask3;
1982 v8i16 filter_vec, weight_vec;
1983 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
1984 v16i8 vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15;
1985 v8i16 dst30, dst41, dst52, dst63, dst66, dst87;
1986 v8i16 tmp0, tmp1, tmp2, tmp3;
1987 v8i16 dst10, dst32, dst54, dst76;
1988 v8i16 dst21, dst43, dst65, dst97, dst108, dst109, dst98;
1989 v4i32 offset_vec, rnd_vec, const_vec, dst0, dst1, dst2, dst3;
1992 src0_ptr -= ((3 * src_stride) + 3);
1994 filter_vec =
LD_SH(filter_x);
1995 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
1997 filter_vec =
LD_SH(filter_y);
2000 SPLATI_W4_SH(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3);
2007 weight0 = weight0 & 0x0000FFFF;
2008 weight = weight0 | (weight1 << 16);
2010 const_vec = __msa_fill_w((128 * weight1));
2012 offset_vec = __msa_fill_w(
offset);
2013 rnd_vec = __msa_fill_w(rnd_val + 1);
2014 offset_vec += const_vec;
2015 weight_vec = (v8i16) __msa_fill_w(
weight);
2018 src0_ptr += (7 * src_stride);
2022 VSHF_B4_SB(
src0, src3, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3);
2023 VSHF_B4_SB(
src1, src4, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7);
2025 vec8, vec9, vec10, vec11);
2026 VSHF_B4_SB(src3, src6, mask0, mask1, mask2, mask3,
2027 vec12, vec13, vec14, vec15);
2042 dst66 = (v8i16) __msa_splati_d((v2i64) dst63, 1);
2044 for (loop_cnt =
height >> 2; loop_cnt--;) {
2045 LD_SB4(src0_ptr, src_stride, src7, src8, src9, src10);
2046 src0_ptr += (4 * src_stride);
2049 LD2(src1_ptr, src2_stride, tp0, tp1);
2051 src1_ptr += (2 * src2_stride);
2052 LD2(src1_ptr, src2_stride, tp0, tp1);
2054 src1_ptr += (2 * src2_stride);
2056 VSHF_B4_SB(src7, src9, mask0, mask1, mask2, mask3,
2057 vec0, vec1, vec2, vec3);
2058 VSHF_B4_SB(src8, src10, mask0, mask1, mask2, mask3,
2059 vec4, vec5, vec6, vec7);
2065 dst76 = __msa_ilvr_h(dst97, dst66);
2067 dst66 = (v8i16) __msa_splati_d((v2i64) dst97, 1);
2068 dst98 = __msa_ilvr_h(dst66, dst108);
2070 dst0 =
HEVC_FILT_8TAP(dst10, dst32, dst54, dst76, filt_h0, filt_h1,
2072 dst1 =
HEVC_FILT_8TAP(dst21, dst43, dst65, dst87, filt_h0, filt_h1,
2074 dst2 =
HEVC_FILT_8TAP(dst32, dst54, dst76, dst98, filt_h0, filt_h1,
2076 dst3 =
HEVC_FILT_8TAP(dst43, dst65, dst87, dst109, filt_h0, filt_h1,
2078 SRA_4V(dst0, dst1, dst2, dst3, 6);
2082 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
2083 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
2084 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
2085 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
2089 out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
2091 dst += (4 * dst_stride);
2099 dst66 = (v8i16) __msa_splati_d((v2i64) dst108, 1);
2105 const int16_t *src1_ptr,
2109 const int8_t *filter_x,
2110 const int8_t *filter_y,
2118 uint32_t loop_cnt, cnt;
2120 const uint8_t *src0_ptr_tmp;
2121 const int16_t *src1_ptr_tmp;
2124 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
2126 v8i16 filt0, filt1, filt2, filt3;
2127 v8i16 filt_h0, filt_h1, filt_h2, filt_h3;
2129 v16i8 mask1, mask2, mask3;
2130 v8i16 filter_vec, weight_vec;
2131 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
2132 v16i8 vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15;
2133 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8;
2134 v4i32 dst0_r, dst0_l, dst1_r, dst1_l;
2135 v8i16 tmp0, tmp1, tmp2, tmp3;
2136 v8i16 dst10_r, dst32_r, dst54_r, dst76_r;
2137 v8i16 dst10_l, dst32_l, dst54_l, dst76_l;
2138 v8i16 dst21_r, dst43_r, dst65_r, dst87_r;
2139 v8i16 dst21_l, dst43_l, dst65_l, dst87_l;
2140 v4i32 offset_vec, rnd_vec, const_vec;
2142 src0_ptr -= ((3 * src_stride) + 3);
2145 weight0 = weight0 & 0x0000FFFF;
2146 weight = weight0 | (weight1 << 16);
2148 const_vec = __msa_fill_w((128 * weight1));
2150 offset_vec = __msa_fill_w(
offset);
2151 rnd_vec = __msa_fill_w(rnd_val + 1);
2152 offset_vec += const_vec;
2153 weight_vec = (v8i16) __msa_fill_w(
weight);
2155 filter_vec =
LD_SH(filter_x);
2156 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
2158 filter_vec =
LD_SH(filter_y);
2161 SPLATI_W4_SH(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3);
2167 for (cnt = width8mult; cnt--;) {
2168 src0_ptr_tmp = src0_ptr;
2169 src1_ptr_tmp = src1_ptr;
2172 LD_SB7(src0_ptr_tmp, src_stride,
2174 src0_ptr_tmp += (7 * src_stride);
2180 vec0, vec1, vec2, vec3);
2182 vec4, vec5, vec6, vec7);
2184 vec8, vec9, vec10, vec11);
2185 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3,
2186 vec12, vec13, vec14, vec15);
2198 VSHF_B4_SB(src4, src4, mask0, mask1, mask2, mask3,
2199 vec0, vec1, vec2, vec3);
2200 VSHF_B4_SB(src5, src5, mask0, mask1, mask2, mask3,
2201 vec4, vec5, vec6, vec7);
2202 VSHF_B4_SB(src6, src6, mask0, mask1, mask2, mask3,
2203 vec8, vec9, vec10, vec11);
2212 for (loop_cnt =
height >> 1; loop_cnt--;) {
2213 LD_SB2(src0_ptr_tmp, src_stride, src7, src8);
2215 src0_ptr_tmp += 2 * src_stride;
2217 LD_SH2(src1_ptr_tmp, src2_stride, in0, in1);
2218 src1_ptr_tmp += (2 * src2_stride);
2220 ILVR_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, dst10_r,
2221 dst32_r, dst54_r, dst21_r);
2222 ILVL_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst2, dst1, dst10_l,
2223 dst32_l, dst54_l, dst21_l);
2224 ILVR_H2_SH(dst4, dst3, dst6, dst5, dst43_r, dst65_r);
2225 ILVL_H2_SH(dst4, dst3, dst6, dst5, dst43_l, dst65_l);
2227 VSHF_B4_SB(src7, src7, mask0, mask1, mask2, mask3,
2228 vec0, vec1, vec2, vec3);
2234 filt_h0, filt_h1, filt_h2, filt_h3);
2236 filt_h0, filt_h1, filt_h2, filt_h3);
2242 VSHF_B4_SB(src8, src8, mask0, mask1, mask2, mask3,
2243 vec0, vec1, vec2, vec3);
2249 filt_h0, filt_h1, filt_h2, filt_h3);
2251 filt_h0, filt_h1, filt_h2, filt_h3);
2256 PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp1, tmp3);
2259 dst0_r = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
2260 dst0_l = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
2261 dst1_r = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
2262 dst1_l = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
2263 SRAR_W4_SW(dst0_l, dst0_r, dst1_l, dst1_r, rnd_vec);
2265 PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1);
2266 out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
2267 ST_D2(
out, 0, 1, dst_tmp, dst_stride);
2268 dst_tmp += (2 * dst_stride);
2287 const int16_t *src1_ptr,
2291 const int8_t *filter_x,
2292 const int8_t *filter_y,
2300 src1_ptr, src2_stride,
2301 dst, dst_stride, filter_x, filter_y,
2308 const int16_t *src1_ptr,
2312 const int8_t *filter_x,
2313 const int8_t *filter_y,
2321 const uint8_t *src0_ptr_tmp;
2323 const int16_t *src1_ptr_tmp;
2327 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9, src10;
2328 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
2329 v16i8 vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15;
2330 v16i8 mask0, mask1, mask2, mask3, mask4, mask5, mask6, mask7;
2331 v8i16 in0 = { 0 }, in1 = { 0 };
2332 v8i16 filter_vec, weight_vec, tmp0, tmp1, tmp2, tmp3;
2333 v8i16 filt0, filt1, filt2, filt3, filt_h0, filt_h1, filt_h2, filt_h3;
2334 v8i16 dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6, dsth7, dsth8;
2335 v8i16 dst10_r, dst32_r, dst54_r, dst76_r, dst21_r, dst43_r, dst65_r;
2336 v8i16 dst10_l, dst32_l, dst54_l, dst76_l, dst21_l, dst43_l, dst65_l;
2337 v8i16 dst30, dst41, dst52, dst63, dst66, dst87, dst10, dst32, dst54, dst76;
2338 v8i16 dst21, dst43, dst65, dst97, dst108, dst109, dst98, dst87_r, dst87_l;
2339 v4i32 offset_vec, rnd_vec, const_vec, dst0, dst1, dst2, dst3;
2341 src0_ptr -= ((3 * src_stride) + 3);
2344 weight0 = weight0 & 0x0000FFFF;
2345 weight = weight0 | (weight1 << 16);
2347 const_vec = __msa_fill_w((128 * weight1));
2349 offset_vec = __msa_fill_w(
offset);
2350 rnd_vec = __msa_fill_w(rnd_val + 1);
2351 offset_vec += const_vec;
2352 weight_vec = (v8i16) __msa_fill_w(
weight);
2354 filter_vec =
LD_SH(filter_x);
2355 SPLATI_H4_SH(filter_vec, 0, 1, 2, 3, filt0, filt1, filt2, filt3);
2357 filter_vec =
LD_SH(filter_y);
2360 SPLATI_W4_SH(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3);
2367 src0_ptr_tmp = src0_ptr;
2368 src1_ptr_tmp = src1_ptr;
2372 src0_ptr_tmp += (7 * src_stride);
2379 VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3, vec12, vec13, vec14,
2389 VSHF_B4_SB(src4, src4, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3);
2390 VSHF_B4_SB(src5, src5, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7);
2391 VSHF_B4_SB(src6, src6, mask0, mask1, mask2, mask3, vec8, vec9, vec10,
2400 for (loop_cnt = 8; loop_cnt--;) {
2401 LD_SB2(src0_ptr_tmp, src_stride, src7, src8);
2402 src0_ptr_tmp += (2 * src_stride);
2405 LD_SH2(src1_ptr_tmp, src2_stride, in0, in1);
2406 src1_ptr_tmp += (2 * src2_stride);
2408 ILVR_H4_SH(dsth1, dsth0, dsth3, dsth2, dsth5, dsth4, dsth2, dsth1,
2409 dst10_r, dst32_r, dst54_r, dst21_r);
2410 ILVL_H4_SH(dsth1, dsth0, dsth3, dsth2, dsth5, dsth4, dsth2, dsth1,
2411 dst10_l, dst32_l, dst54_l, dst21_l);
2412 ILVR_H2_SH(dsth4, dsth3, dsth6, dsth5, dst43_r, dst65_r);
2413 ILVL_H2_SH(dsth4, dsth3, dsth6, dsth5, dst43_l, dst65_l);
2415 VSHF_B4_SB(src7, src7, mask0, mask1, mask2, mask3, vec0, vec1, vec2,
2421 dst0 =
HEVC_FILT_8TAP(dst10_r, dst32_r, dst54_r, dst76_r, filt_h0,
2422 filt_h1, filt_h2, filt_h3);
2423 dst1 =
HEVC_FILT_8TAP(dst10_l, dst32_l, dst54_l, dst76_l, filt_h0,
2424 filt_h1, filt_h2, filt_h3);
2428 VSHF_B4_SB(src8, src8, mask0, mask1, mask2, mask3, vec0, vec1, vec2,
2434 dst2 =
HEVC_FILT_8TAP(dst21_r, dst43_r, dst65_r, dst87_r, filt_h0,
2435 filt_h1, filt_h2, filt_h3);
2436 dst3 =
HEVC_FILT_8TAP(dst21_l, dst43_l, dst65_l, dst87_l, filt_h0,
2437 filt_h1, filt_h2, filt_h3);
2444 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
2445 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
2446 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
2447 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
2451 out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
2452 ST_D2(
out, 0, 1, dst_tmp, dst_stride);
2453 dst_tmp += (2 * dst_stride);
2474 src0_ptr += (7 * src_stride);
2477 VSHF_B4_SB(
src0, src3, mask4, mask5, mask6, mask7, vec0, vec1, vec2, vec3);
2478 VSHF_B4_SB(
src1, src4, mask4, mask5, mask6, mask7, vec4, vec5, vec6, vec7);
2479 VSHF_B4_SB(
src2, src5, mask4, mask5, mask6, mask7, vec8, vec9, vec10,
2481 VSHF_B4_SB(src3, src6, mask4, mask5, mask6, mask7, vec12, vec13, vec14,
2495 dst66 = (v8i16) __msa_splati_d((v2i64) dst63, 1);
2497 for (loop_cnt = 4; loop_cnt--;) {
2498 LD_SB4(src0_ptr, src_stride, src7, src8, src9, src10);
2499 src0_ptr += (4 * src_stride);
2502 LD2(src1_ptr, src2_stride, tp0, tp1);
2504 src1_ptr += (2 * src2_stride);
2505 LD2(src1_ptr, src2_stride, tp0, tp1);
2507 src1_ptr += (2 * src2_stride);
2509 VSHF_B4_SB(src7, src9, mask4, mask5, mask6, mask7, vec0, vec1, vec2,
2511 VSHF_B4_SB(src8, src10, mask4, mask5, mask6, mask7, vec4, vec5, vec6,
2518 dst76 = __msa_ilvr_h(dst97, dst66);
2520 dst66 = (v8i16) __msa_splati_d((v2i64) dst97, 1);
2521 dst98 = __msa_ilvr_h(dst66, dst108);
2523 dst0 =
HEVC_FILT_8TAP(dst10, dst32, dst54, dst76, filt_h0, filt_h1,
2525 dst1 =
HEVC_FILT_8TAP(dst21, dst43, dst65, dst87, filt_h0, filt_h1,
2527 dst2 =
HEVC_FILT_8TAP(dst32, dst54, dst76, dst98, filt_h0, filt_h1,
2529 dst3 =
HEVC_FILT_8TAP(dst43, dst65, dst87, dst109, filt_h0, filt_h1,
2531 SRA_4V(dst0, dst1, dst2, dst3, 6);
2535 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
2536 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
2537 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
2538 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
2542 out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
2544 dst += (4 * dst_stride);
2552 dst66 = (v8i16) __msa_splati_d((v2i64) dst108, 1);
2558 const int16_t *src1_ptr,
2562 const int8_t *filter_x,
2563 const int8_t *filter_y,
2571 src1_ptr, src2_stride,
2572 dst, dst_stride, filter_x, filter_y,
2579 const int16_t *src1_ptr,
2583 const int8_t *filter_x,
2584 const int8_t *filter_y,
2592 src1_ptr, src2_stride,
2593 dst, dst_stride, filter_x, filter_y,
2600 const int16_t *src1_ptr,
2604 const int8_t *filter_x,
2605 const int8_t *filter_y,
2613 src1_ptr, src2_stride,
2614 dst, dst_stride, filter_x, filter_y,
2621 const int16_t *src1_ptr,
2625 const int8_t *filter_x,
2626 const int8_t *filter_y,
2634 src1_ptr, src2_stride,
2635 dst, dst_stride, filter_x, filter_y,
2642 const int16_t *src1_ptr,
2646 const int8_t *filter_x,
2647 const int8_t *filter_y,
2655 src1_ptr, src2_stride,
2656 dst, dst_stride, filter_x, filter_y,
2663 const int16_t *src1_ptr,
2678 v16i8 mask1, vec0, vec1;
2680 v4i32 dst0_r, dst0_l;
2681 v8i16 out0, filter_vec;
2682 v4i32 weight_vec, offset_vec, rnd_vec;
2692 weight0 = weight0 & 0x0000FFFF;
2693 weight = weight0 | (weight1 << 16);
2694 constant = 128 * weight1;
2698 offset_vec = __msa_fill_w(
offset);
2699 weight_vec = __msa_fill_w(
weight);
2700 rnd_vec = __msa_fill_w(rnd_val + 1);
2703 LD_SH2(src1_ptr, src2_stride, in0, in1);
2704 in0 = (v8i16) __msa_ilvr_d((v2i64) in1, (v2i64) in0);
2711 dst0_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_r, (v8i16) weight_vec);
2712 dst0_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst0_l, (v8i16) weight_vec);
2714 out0 = __msa_pckev_h((v8i16) dst0_l, (v8i16) dst0_r);
2716 out0 = (v8i16) __msa_pckev_b((v16i8) out0, (v16i8) out0);
2717 ST_W2(out0, 0, 1,
dst, dst_stride);
2722 const int16_t *src1_ptr,
2739 v8i16 in0, in1, in2, in3;
2741 v4i32 weight_vec, offset_vec, rnd_vec;
2752 weight0 = weight0 & 0x0000FFFF;
2753 weight = weight0 | (weight1 << 16);
2754 constant = 128 * weight1;
2758 offset_vec = __msa_fill_w(
offset);
2759 weight_vec = __msa_fill_w(
weight);
2760 rnd_vec = __msa_fill_w(rnd_val + 1);
2764 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
2772 weight_vec, rnd_vec, offset_vec,
2775 dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0);
2776 ST_W4(dst0, 0, 1, 2, 3,
dst, dst_stride);
2781 const int16_t *src1_ptr,
2799 v8i16 dst0, dst1, dst2, dst3;
2800 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
2802 v4i32 weight_vec, offset_vec, rnd_vec;
2810 weight0 = weight0 & 0x0000FFFF;
2811 weight = weight0 | (weight1 << 16);
2812 constant = 128 * weight1;
2816 offset_vec = __msa_fill_w(
offset);
2817 weight_vec = __msa_fill_w(
weight);
2818 rnd_vec = __msa_fill_w(rnd_val + 1);
2822 for (loop_cnt = (
height >> 3); loop_cnt--;) {
2823 LD_SB8(src0_ptr, src_stride,
2825 src0_ptr += (8 * src_stride);
2826 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
2827 src1_ptr += (4 * src2_stride);
2828 LD_SH4(src1_ptr, src2_stride, in4, in5, in6, in7);
2829 src1_ptr += (4 * src2_stride);
2838 VSHF_B2_SB(src4, src5, src4, src5, mask0, mask1, vec0, vec1);
2840 VSHF_B2_SB(src6, src7, src6, src7, mask0, mask1, vec0, vec1);
2844 weight_vec, rnd_vec, offset_vec,
2845 dst0, dst1, dst2, dst3);
2848 ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
2849 dst += (8 * dst_stride);
2855 const int16_t *src1_ptr,
2869 weight0, weight1,
offset, rnd_val);
2870 }
else if (4 ==
height) {
2873 weight0, weight1,
offset, rnd_val);
2874 }
else if (0 == (
height % 8)) {
2876 src1_ptr, src2_stride,
2878 weight0, weight1,
offset,
2885 const int16_t *src1_ptr,
2903 v8i16 in0, in1, in2, in3;
2904 v8i16 dst0, dst1, dst2, dst3;
2906 v4i32 weight_vec, offset_vec, rnd_vec;
2914 weight0 = weight0 & 0x0000FFFF;
2915 weight = weight0 | (weight1 << 16);
2916 constant = 128 * weight1;
2920 offset_vec = __msa_fill_w(
offset);
2921 weight_vec = __msa_fill_w(
weight);
2922 rnd_vec = __msa_fill_w(rnd_val + 1);
2926 for (loop_cnt = 2; loop_cnt--;) {
2928 src0_ptr += (4 * src_stride);
2929 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
2930 src1_ptr += (4 * src2_stride);
2939 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
2944 weight_vec, rnd_vec, offset_vec,
2945 dst0, dst1, dst2, dst3);
2948 ST_W2(dst0, 0, 2,
dst, dst_stride);
2949 ST_H2(dst0, 2, 6,
dst + 4, dst_stride);
2950 ST_W2(dst1, 0, 2,
dst + 2 * dst_stride, dst_stride);
2951 ST_H2(dst1, 2, 6,
dst + 2 * dst_stride + 4, dst_stride);
2952 dst += (4 * dst_stride);
2958 const int16_t *src1_ptr,
2973 v16i8 mask1, vec0, vec1;
2976 v4i32 weight_vec, offset_vec, rnd_vec;
2984 weight0 = weight0 & 0x0000FFFF;
2985 weight = weight0 | (weight1 << 16);
2986 constant = 128 * weight1;
2990 offset_vec = __msa_fill_w(
offset);
2991 weight_vec = __msa_fill_w(
weight);
2992 rnd_vec = __msa_fill_w(rnd_val + 1);
2997 LD_SH2(src1_ptr, src2_stride, in0, in1);
3004 weight_vec, rnd_vec, offset_vec,
3007 dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0);
3008 ST_D2(dst0, 0, 1,
dst, dst_stride);
3013 const int16_t *src1_ptr,
3026 v8i16 in0, in1, in2, in3, in4, in5;
3030 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
3032 v4i32 weight_vec, offset_vec, rnd_vec;
3040 weight0 = weight0 & 0x0000FFFF;
3041 weight = weight0 | (weight1 << 16);
3042 constant = 128 * weight1;
3046 offset_vec = __msa_fill_w(
offset);
3047 weight_vec = __msa_fill_w(
weight);
3048 rnd_vec = __msa_fill_w(rnd_val + 1);
3054 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
3055 src1_ptr += (4 * src2_stride);
3056 LD_SH2(src1_ptr, src2_stride, in4, in5);
3064 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3066 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3068 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3072 weight_vec, rnd_vec, offset_vec,
3073 dst0, dst1, dst2, dst3);
3075 weight_vec, rnd_vec, offset_vec,
3079 dst3 = (v8i16) __msa_pckev_b((v16i8) dst5, (v16i8) dst4);
3080 ST_D4(dst0, dst1, 0, 1, 0, 1,
dst, dst_stride);
3081 ST_D2(dst3, 0, 1,
dst + 4 * dst_stride, dst_stride);
3086 const int16_t *src1_ptr,
3104 v8i16 in0, in1, in2, in3;
3105 v8i16 dst0, dst1, dst2, dst3;
3107 v4i32 weight_vec, offset_vec, rnd_vec;
3115 weight0 = weight0 & 0x0000FFFF;
3116 weight = weight0 | (weight1 << 16);
3117 constant = 128 * weight1;
3121 offset_vec = __msa_fill_w(
offset);
3122 weight_vec = __msa_fill_w(
weight);
3123 rnd_vec = __msa_fill_w(rnd_val + 1);
3127 for (loop_cnt = (
height >> 2); loop_cnt--;) {
3129 src0_ptr += (4 * src_stride);
3130 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
3131 src1_ptr += (4 * src2_stride);
3140 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3144 weight_vec, rnd_vec, offset_vec,
3145 dst0, dst1, dst2, dst3);
3148 ST_D4(dst0, dst1, 0, 1, 0, 1,
dst, dst_stride);
3149 dst += (4 * dst_stride);
3155 const int16_t *src1_ptr,
3169 weight0, weight1,
offset, rnd_val);
3170 }
else if (6 ==
height) {
3173 weight0, weight1,
offset, rnd_val);
3174 }
else if (0 == (
height % 4)) {
3176 src1_ptr, src2_stride,
3178 weight0, weight1,
offset,
3185 const int16_t *src1_ptr,
3200 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
3203 8, 9, 9, 10, 10, 11, 11, 12, 24, 25, 25, 26, 26, 27, 27, 28
3207 v8i16 dst0, dst1, dst2, dst3, dst4, dst5;
3209 v4i32 weight_vec, offset_vec, rnd_vec;
3217 weight0 = weight0 & 0x0000FFFF;
3218 weight = weight0 | (weight1 << 16);
3219 constant = 128 * weight1;
3223 offset_vec = __msa_fill_w(
offset);
3224 weight_vec = __msa_fill_w(
weight);
3225 rnd_vec = __msa_fill_w(rnd_val + 1);
3230 for (loop_cnt = 4; loop_cnt--;) {
3232 src0_ptr += (4 * src_stride);
3233 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
3234 LD_SH4(src1_ptr + 8, src2_stride, in4, in5, in6, in7);
3235 src1_ptr += (4 * src2_stride);
3245 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3254 weight_vec, rnd_vec, offset_vec,
3255 dst0, dst1, dst2, dst3);
3257 weight_vec, rnd_vec, offset_vec,
3261 dst3 = (v8i16) __msa_pckev_b((v16i8) dst5, (v16i8) dst4);
3262 ST_D4(dst0, dst1, 0, 1, 0, 1,
dst, dst_stride);
3263 ST_W4(dst3, 0, 1, 2, 3,
dst + 8, dst_stride);
3264 dst += (4 * dst_stride);
3270 const int16_t *src1_ptr,
3284 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
3288 v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
3291 v4i32 weight_vec, offset_vec, rnd_vec;
3299 weight0 = weight0 & 0x0000FFFF;
3300 weight = weight0 | (weight1 << 16);
3301 constant = 128 * weight1;
3305 offset_vec = __msa_fill_w(
offset);
3306 weight_vec = __msa_fill_w(
weight);
3307 rnd_vec = __msa_fill_w(rnd_val + 1);
3311 for (loop_cnt = (
height >> 2); loop_cnt--;) {
3313 LD_SB4(src0_ptr + 8, src_stride,
src1, src3, src5, src7);
3314 src0_ptr += (4 * src_stride);
3315 LD_SH4(src1_ptr, src2_stride, in0, in2, in4, in6);
3316 LD_SH4(src1_ptr + 8, src2_stride, in1, in3, in5, in7);
3317 src1_ptr += (4 * src2_stride);
3326 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3328 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec0, vec1);
3330 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec0, vec1);
3332 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec0, vec1);
3334 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec0, vec1);
3338 weight_vec, rnd_vec, offset_vec,
3339 dst0, dst1, dst2, dst3);
3343 dst += (2 * dst_stride);
3347 weight_vec, rnd_vec, offset_vec,
3348 dst0, dst1, dst2, dst3);
3352 dst += (2 * dst_stride);
3358 const int16_t *src1_ptr,
3374 v16i8 mask1, mask2, mask3;
3376 v8i16 dst0, dst1, dst2, dst3;
3377 v8i16 in0, in1, in2, in3, in4, in5;
3379 v4i32 weight_vec, offset_vec, rnd_vec;
3387 weight0 = weight0 & 0x0000FFFF;
3388 weight = weight0 | (weight1 << 16);
3389 constant = 128 * weight1;
3393 offset_vec = __msa_fill_w(
offset);
3394 weight_vec = __msa_fill_w(
weight);
3395 rnd_vec = __msa_fill_w(rnd_val + 1);
3401 for (loop_cnt = 16; loop_cnt--;) {
3403 LD_SB2(src0_ptr + 16, src_stride,
src1, src3);
3404 src0_ptr += (2 * src_stride);
3405 LD_SH2(src1_ptr, src2_stride, in0, in2);
3406 LD_SH2(src1_ptr + 8, src2_stride, in1, in3);
3407 LD_SH2(src1_ptr + 16, src2_stride, in4, in5);
3408 src1_ptr += (2 * src2_stride);
3421 weight_vec, rnd_vec, offset_vec,
3422 dst0, dst1, dst2, dst3);
3430 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
3433 weight_vec, rnd_vec, offset_vec,
3436 dst0 = (v8i16) __msa_pckev_b((v16i8) dst1, (v16i8) dst0);
3437 ST_D2(dst0, 0, 1, (
dst + 16), dst_stride);
3438 dst += (2 * dst_stride);
3444 const int16_t *src1_ptr,
3460 v16i8 mask1, mask2, mask3;
3461 v8i16 dst0, dst1, dst2, dst3;
3463 v8i16 in0, in1, in2, in3;
3465 v4i32 weight_vec, offset_vec, rnd_vec;
3473 weight0 = weight0 & 0x0000FFFF;
3474 weight = weight0 | (weight1 << 16);
3475 constant = 128 * weight1;
3479 offset_vec = __msa_fill_w(
offset);
3480 weight_vec = __msa_fill_w(
weight);
3481 rnd_vec = __msa_fill_w(rnd_val + 1);
3487 for (loop_cnt =
height; loop_cnt--;) {
3490 src0_ptr += src_stride;
3491 LD_SH4(src1_ptr, 8, in0, in1, in2, in3);
3492 src1_ptr += src2_stride;
3505 weight_vec, rnd_vec, offset_vec,
3506 dst0, dst1, dst2, dst3);
3516 const int16_t *src1_ptr,
3528 v8i16 in0, in1, dst10;
3529 v16i8 src10_r, src32_r, src21_r, src43_r, src2110, src4332;
3530 v4i32 dst10_r, dst10_l;
3532 v8i16 filter_vec,
out;
3533 v4i32 weight_vec, offset_vec, rnd_vec;
3535 src0_ptr -= src_stride;
3538 weight0 = weight0 & 0x0000FFFF;
3539 weight = weight0 | (weight1 << 16);
3540 constant = 128 * weight1;
3544 offset_vec = __msa_fill_w(
offset);
3545 weight_vec = __msa_fill_w(
weight);
3546 rnd_vec = __msa_fill_w(rnd_val + 1);
3552 src0_ptr += (3 * src_stride);
3554 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_r, (v2i64) src10_r);
3555 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
3556 LD_SB2(src0_ptr, src_stride, src3, src4);
3557 src0_ptr += (2 * src_stride);
3558 LD_SH2(src1_ptr, src2_stride, in0, in1);
3559 src1_ptr += (2 * src2_stride);
3561 in0 = (v8i16) __msa_ilvr_d((v2i64) in1, (v2i64) in0);
3563 src4332 = (v16i8) __msa_ilvr_d((v2i64) src43_r, (v2i64) src32_r);
3564 src4332 = (v16i8) __msa_xori_b((v16u8) src4332, 128);
3569 dst10_r = __msa_dpadd_s_w(offset_vec, (v8i16) dst10_r, (v8i16) weight_vec);
3570 dst10_l = __msa_dpadd_s_w(offset_vec, (v8i16) dst10_l, (v8i16) weight_vec);
3573 out = __msa_pckev_h((v8i16) dst10_l, (v8i16) dst10_r);
3574 out = (v8i16) __msa_pckev_b((v16i8)
out, (v16i8)
out);
3580 const int16_t *src1_ptr,
3592 v8i16 in0, in1, in2, in3;
3593 v16i8 src10_r, src32_r, src54_r, src21_r, src43_r, src65_r;
3594 v16i8 src2110, src4332, src6554;
3598 v4i32 weight_vec, offset_vec, rnd_vec;
3600 src0_ptr -= src_stride;
3603 weight0 = weight0 & 0x0000FFFF;
3604 weight = weight0 | (weight1 << 16);
3605 constant = 128 * weight1;
3609 offset_vec = __msa_fill_w(
offset);
3610 weight_vec = __msa_fill_w(
weight);
3611 rnd_vec = __msa_fill_w(rnd_val + 1);
3617 src0_ptr += (3 * src_stride);
3619 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_r, (v2i64) src10_r);
3620 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
3622 LD_SB4(src0_ptr, src_stride, src3, src4, src5, src6);
3623 src0_ptr += (4 * src_stride);
3624 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
3625 src1_ptr += (4 * src2_stride);
3628 src32_r, src43_r, src54_r, src65_r);
3629 ILVR_D2_SB(src43_r, src32_r, src65_r, src54_r, src4332, src6554);
3636 weight_vec, rnd_vec, offset_vec,
3639 dst10 = (v8i16) __msa_pckev_b((v16i8) dst32, (v16i8) dst10);
3640 ST_W4(dst10, 0, 1, 2, 3,
dst, dst_stride);
3641 dst += (4 * dst_stride);
3646 const int16_t *src1_ptr,
3659 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9;
3660 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
3661 v16i8 src10_r, src32_r, src54_r, src76_r, src98_r;
3662 v16i8 src21_r, src43_r, src65_r, src87_r, src109_r;
3663 v16i8 src2110, src4332, src6554, src8776;
3664 v8i16 dst10, dst32, dst54, dst76;
3667 v4i32 weight_vec, offset_vec, rnd_vec;
3669 src0_ptr -= src_stride;
3672 weight0 = weight0 & 0x0000FFFF;
3673 weight = weight0 | (weight1 << 16);
3674 constant = 128 * weight1;
3678 offset_vec = __msa_fill_w(
offset);
3679 weight_vec = __msa_fill_w(
weight);
3680 rnd_vec = __msa_fill_w(rnd_val + 1);
3686 src0_ptr += (3 * src_stride);
3688 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_r, (v2i64) src10_r);
3689 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
3691 for (loop_cnt = (
height >> 3); loop_cnt--;) {
3692 LD_SB6(src0_ptr, src_stride, src3, src4, src5, src6, src7, src8);
3693 src0_ptr += (6 * src_stride);
3694 LD_SH8(src1_ptr, src2_stride, in0, in1, in2, in3, in4, in5, in6, in7);
3695 src1_ptr += (8 * src2_stride);
3701 src32_r, src43_r, src54_r, src65_r);
3702 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
3703 ILVR_D3_SB(src43_r, src32_r, src65_r, src54_r, src87_r, src76_r,
3704 src4332, src6554, src8776);
3712 src0_ptr += (2 * src_stride);
3714 src2110 = (v16i8) __msa_ilvr_d((v2i64) src109_r, (v2i64) src98_r);
3715 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
3720 weight_vec, rnd_vec, offset_vec,
3721 dst10, dst32, dst54, dst76);
3723 PCKEV_B2_SH(dst32, dst10, dst76, dst54, dst10, dst32);
3724 ST_W8(dst10, dst32, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
3725 dst += (8 * dst_stride);
3731 const int16_t *src1_ptr,
3745 weight0, weight1,
offset, rnd_val);
3746 }
else if (4 ==
height) {
3749 weight0, weight1,
offset, rnd_val);
3750 }
else if (0 == (
height % 8)) {
3752 src1_ptr, src2_stride,
3754 weight0, weight1,
offset,
3761 const int16_t *src1_ptr,
3776 v8i16 in0, in1, in2, in3;
3777 v16i8 src10_r, src32_r, src21_r, src43_r;
3778 v8i16 tmp0, tmp1, tmp2, tmp3;
3781 v4i32 weight_vec, offset_vec, rnd_vec;
3783 src0_ptr -= src_stride;
3786 weight0 = weight0 & 0x0000FFFF;
3787 weight = weight0 | (weight1 << 16);
3788 constant = 128 * weight1;
3792 offset_vec = __msa_fill_w(
offset);
3793 weight_vec = __msa_fill_w(
weight);
3794 rnd_vec = __msa_fill_w(rnd_val + 1);
3800 src0_ptr += (3 * src_stride);
3804 for (loop_cnt = (
height >> 2); loop_cnt--;) {
3805 LD_SB2(src0_ptr, src_stride, src3, src4);
3806 src0_ptr += (2 * src_stride);
3807 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
3808 src1_ptr += (4 * src2_stride);
3816 src0_ptr += (2 * src_stride);
3824 weight_vec, rnd_vec, offset_vec,
3825 tmp0, tmp1, tmp2, tmp3);
3828 ST_W2(tmp0, 0, 2,
dst, dst_stride);
3829 ST_H2(tmp0, 2, 6,
dst + 4, dst_stride);
3830 ST_W2(tmp1, 0, 2,
dst + 2 * dst_stride, dst_stride);
3831 ST_H2(tmp1, 2, 6,
dst + 2 * dst_stride + 4, dst_stride);
3832 dst += (4 * dst_stride);
3835 LD_SB2(src0_ptr, src_stride, src3, src4);
3836 src0_ptr += (2 * src_stride);
3837 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
3838 src1_ptr += (4 * src2_stride);
3846 src0_ptr += (2 * src_stride);
3854 weight_vec, rnd_vec, offset_vec,
3855 tmp0, tmp1, tmp2, tmp3);
3858 ST_W2(tmp0, 0, 2,
dst, dst_stride);
3859 ST_H2(tmp0, 2, 6,
dst + 4, dst_stride);
3860 ST_W2(tmp1, 0, 2,
dst + 2 * dst_stride, dst_stride);
3861 ST_H2(tmp1, 2, 6,
dst + 2 * dst_stride + 4, dst_stride);
3867 const int16_t *src1_ptr,
3879 v8i16 in0, in1, tmp0, tmp1;
3880 v16i8 src10_r, src32_r, src21_r, src43_r;
3883 v4i32 weight_vec, offset_vec, rnd_vec;
3885 src0_ptr -= src_stride;
3888 weight0 = weight0 & 0x0000FFFF;
3889 weight = weight0 | (weight1 << 16);
3890 constant = 128 * weight1;
3894 offset_vec = __msa_fill_w(
offset);
3895 weight_vec = __msa_fill_w(
weight);
3896 rnd_vec = __msa_fill_w(rnd_val + 1);
3902 src0_ptr += (3 * src_stride);
3906 LD_SB2(src0_ptr, src_stride, src3, src4);
3907 LD_SH2(src1_ptr, src2_stride, in0, in1);
3914 weight_vec, rnd_vec, offset_vec,
3917 tmp0 = (v8i16) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
3918 ST_D2(tmp0, 0, 1,
dst, dst_stride);
3923 const int16_t *src1_ptr,
3934 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
3935 v8i16 in0, in1, in2, in3, in4, in5;
3936 v16i8 src10_r, src32_r, src54_r, src76_r;
3937 v16i8 src21_r, src43_r, src65_r, src87_r;
3938 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
3941 v4i32 weight_vec, offset_vec, rnd_vec;
3943 src0_ptr -= src_stride;
3946 weight0 = weight0 & 0x0000FFFF;
3947 weight = weight0 | (weight1 << 16);
3948 constant = 128 * weight1;
3952 offset_vec = __msa_fill_w(
offset);
3953 weight_vec = __msa_fill_w(
weight);
3954 rnd_vec = __msa_fill_w(rnd_val + 1);
3960 src0_ptr += (3 * src_stride);
3964 LD_SB6(src0_ptr, src_stride, src3, src4, src5, src6, src7, src8);
3965 LD_SH6(src1_ptr, src2_stride, in0, in1, in2, in3, in4, in5);
3968 src32_r, src43_r, src54_r, src65_r);
3969 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
3979 weight_vec, rnd_vec, offset_vec,
3980 tmp0, tmp1, tmp2, tmp3);
3982 weight_vec, rnd_vec, offset_vec,
3986 tmp3 = (v8i16) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4);
3987 ST_D4(tmp0, tmp1, 0, 1, 0, 1,
dst, dst_stride);
3988 ST_D2(tmp3, 0, 1,
dst + 4 * dst_stride, dst_stride);
3993 const int16_t *src1_ptr,
4007 v8i16 in0, in1, in2, in3;
4008 v16i8 src10_r, src32_r, src21_r, src43_r;
4009 v8i16 tmp0, tmp1, tmp2, tmp3;
4012 v4i32 weight_vec, offset_vec, rnd_vec;
4014 src0_ptr -= src_stride;
4017 weight0 = weight0 & 0x0000FFFF;
4018 weight = weight0 | (weight1 << 16);
4019 constant = 128 * weight1;
4023 offset_vec = __msa_fill_w(
offset);
4024 weight_vec = __msa_fill_w(
weight);
4025 rnd_vec = __msa_fill_w(rnd_val + 1);
4031 src0_ptr += (3 * src_stride);
4035 for (loop_cnt = (
height >> 2); loop_cnt--;) {
4036 LD_SB2(src0_ptr, src_stride, src3, src4);
4037 src0_ptr += (2 * src_stride);
4038 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
4039 src1_ptr += (4 * src2_stride);
4047 src0_ptr += (2 * src_stride);
4055 weight_vec, rnd_vec, offset_vec,
4056 tmp0, tmp1, tmp2, tmp3);
4059 ST_D4(tmp0, tmp1, 0, 1, 0, 1,
dst, dst_stride);
4060 dst += (4 * dst_stride);
4066 const int16_t *src1_ptr,
4080 weight0, weight1,
offset, rnd_val);
4081 }
else if (6 ==
height) {
4084 weight0, weight1,
offset, rnd_val);
4087 src1_ptr, src2_stride,
4089 weight0, weight1,
offset,
4096 const int16_t *src1_ptr,
4110 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
4111 v16i8 src10_r, src32_r, src21_r, src43_r;
4112 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
4113 v16i8 src10_l, src32_l, src54_l, src21_l, src43_l, src65_l;
4114 v16i8 src2110, src4332;
4117 v4i32 weight_vec, offset_vec, rnd_vec;
4119 src0_ptr -= (1 * src_stride);
4122 weight0 = weight0 & 0x0000FFFF;
4123 weight = weight0 | (weight1 << 16);
4124 constant = 128 * weight1;
4128 offset_vec = __msa_fill_w(
offset);
4129 weight_vec = __msa_fill_w(
weight);
4130 rnd_vec = __msa_fill_w(rnd_val + 1);
4136 src0_ptr += (3 * src_stride);
4140 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_l, (v2i64) src10_l);
4142 for (loop_cnt = (
height >> 2); loop_cnt--;) {
4143 LD_SB2(src0_ptr, src_stride, src3, src4);
4144 src0_ptr += (2 * src_stride);
4145 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
4146 LD_SH4(src1_ptr + 8, src2_stride, in4, in5, in6, in7);
4147 src1_ptr += (4 * src2_stride);
4153 src4332 = (v16i8) __msa_ilvr_d((v2i64) src43_l, (v2i64) src32_l);
4160 src0_ptr += (2 * src_stride);
4164 src2110 = (v16i8) __msa_ilvr_d((v2i64) src65_l, (v2i64) src54_l);
4171 weight_vec, rnd_vec, offset_vec,
4172 tmp0, tmp1, tmp2, tmp3);
4174 weight_vec, rnd_vec, offset_vec,
4178 tmp2 = (v8i16) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4);
4179 ST_D4(tmp0, tmp1, 0, 1, 0, 1,
dst, dst_stride);
4180 ST_W4(tmp2, 0, 1, 2, 3,
dst + 8, dst_stride);
4181 dst += (4 * dst_stride);
4187 const int16_t *src1_ptr,
4201 v8i16 in0, in1, in2, in3;
4202 v16i8 src10_r, src32_r, src21_r, src43_r;
4203 v16i8 src10_l, src32_l, src21_l, src43_l;
4204 v8i16 tmp0, tmp1, tmp2, tmp3;
4207 v4i32 weight_vec, offset_vec, rnd_vec;
4209 src0_ptr -= src_stride;
4212 weight0 = weight0 & 0x0000FFFF;
4213 weight = weight0 | (weight1 << 16);
4214 constant = 128 * weight1;
4218 offset_vec = __msa_fill_w(
offset);
4219 weight_vec = __msa_fill_w(
weight);
4220 rnd_vec = __msa_fill_w(rnd_val + 1);
4226 src0_ptr += (3 * src_stride);
4231 for (loop_cnt = (
height >> 2); loop_cnt--;) {
4232 LD_SB2(src0_ptr, src_stride, src3, src4);
4233 src0_ptr += (2 * src_stride);
4234 LD_SH2(src1_ptr, src2_stride, in0, in1);
4235 LD_SH2(src1_ptr + 8, src2_stride, in2, in3);
4236 src1_ptr += (2 * src2_stride);
4248 weight_vec, rnd_vec, offset_vec,
4249 tmp0, tmp1, tmp2, tmp3);
4252 dst += (2 * dst_stride);
4254 src0_ptr += (2 * src_stride);
4256 LD_SH2(src1_ptr, src2_stride, in0, in1);
4257 LD_SH2(src1_ptr + 8, src2_stride, in2, in3);
4258 src1_ptr += (2 * src2_stride);
4269 weight_vec, rnd_vec, offset_vec,
4270 tmp0, tmp1, tmp2, tmp3);
4274 dst += (2 * dst_stride);
4280 const int16_t *src1_ptr,
4294 v16i8 src6, src7, src8, src9, src10, src11;
4295 v8i16 in0, in1, in2, in3, in4, in5;
4296 v16i8 src10_r, src32_r, src76_r, src98_r;
4297 v16i8 src10_l, src32_l, src21_l, src43_l;
4298 v16i8 src21_r, src43_r, src87_r, src109_r;
4299 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
4302 v4i32 weight_vec, offset_vec, rnd_vec;
4304 src0_ptr -= src_stride;
4307 weight0 = weight0 & 0x0000FFFF;
4308 weight = weight0 | (weight1 << 16);
4309 constant = 128 * weight1;
4313 offset_vec = __msa_fill_w(
offset);
4314 weight_vec = __msa_fill_w(
weight);
4315 rnd_vec = __msa_fill_w(rnd_val + 1);
4326 LD_SB3(src0_ptr + 16, src_stride, src6, src7, src8);
4327 src0_ptr += (3 * src_stride);
4329 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
4331 for (loop_cnt = (
height >> 2); loop_cnt--;) {
4333 LD_SB2(src0_ptr, src_stride, src3, src4);
4334 LD_SH2(src1_ptr, src2_stride, in0, in1);
4335 LD_SH2(src1_ptr + 8, src2_stride, in2, in3);
4341 LD_SB2(src0_ptr + 16, src_stride, src9, src10);
4342 src0_ptr += (2 * src_stride);
4343 LD_SH2(src1_ptr + 16, src2_stride, in4, in5);
4344 src1_ptr += (2 * src2_stride);
4346 ILVR_B2_SB(src9, src8, src10, src9, src98_r, src109_r);
4358 weight_vec, rnd_vec, offset_vec,
4359 tmp0, tmp1, tmp4, tmp5);
4362 weight_vec, rnd_vec, offset_vec,
4367 tmp2 = (v8i16) __msa_pckev_b((v16i8) tmp3, (v16i8) tmp2);
4369 ST_D2(tmp2, 0, 1,
dst + 16, dst_stride);
4370 dst += (2 * dst_stride);
4374 LD_SH2(src1_ptr, src2_stride, in0, in1);
4375 LD_SH2(src1_ptr + 8, src2_stride, in2, in3);
4380 LD_SB2(src0_ptr + 16, src_stride, src11, src8);
4381 src0_ptr += (2 * src_stride);
4382 LD_SH2(src1_ptr + 16, src2_stride, in4, in5);
4383 src1_ptr += (2 * src2_stride);
4385 ILVR_B2_SB(src11, src10, src8, src11, src76_r, src87_r);
4397 weight_vec, rnd_vec, offset_vec,
4398 tmp0, tmp1, tmp4, tmp5);
4401 weight_vec, rnd_vec, offset_vec,
4407 tmp2 = (v8i16) __msa_pckev_b((v16i8) tmp3, (v16i8) tmp2);
4409 ST_D2(tmp2, 0, 1,
dst + 16, dst_stride);
4410 dst += (2 * dst_stride);
4416 const int16_t *src1_ptr,
4428 uint8_t *dst_tmp =
dst + 16;
4430 v16i8
src0,
src1,
src2, src3, src4, src6, src7, src8, src9, src10;
4431 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
4432 v16i8 src10_r, src32_r, src76_r, src98_r;
4433 v16i8 src21_r, src43_r, src87_r, src109_r;
4434 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
4435 v16i8 src10_l, src32_l, src76_l, src98_l;
4436 v16i8 src21_l, src43_l, src87_l, src109_l;
4439 v4i32 weight_vec, offset_vec, rnd_vec;
4441 src0_ptr -= src_stride;
4444 weight0 = weight0 & 0x0000FFFF;
4445 weight = weight0 | (weight1 << 16);
4446 constant = 128 * weight1;
4450 offset_vec = __msa_fill_w(
offset);
4451 weight_vec = __msa_fill_w(
weight);
4452 rnd_vec = __msa_fill_w(rnd_val + 1);
4463 LD_SB3(src0_ptr + 16, src_stride, src6, src7, src8);
4464 src0_ptr += (3 * src_stride);
4466 ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r);
4467 ILVL_B2_SB(src7, src6, src8, src7, src76_l, src87_l);
4469 for (loop_cnt = (
height >> 1); loop_cnt--;) {
4471 LD_SB2(src0_ptr, src_stride, src3, src4);
4472 LD_SH2(src1_ptr, src2_stride, in0, in1);
4473 LD_SH2(src1_ptr + 8, src2_stride, in2, in3);
4486 weight_vec, rnd_vec, offset_vec,
4487 tmp0, tmp1, tmp4, tmp5);
4491 dst += (2 * dst_stride);
4500 LD_SB2(src0_ptr + 16, src_stride, src9, src10);
4501 src0_ptr += (2 * src_stride);
4502 LD_SH2(src1_ptr + 16, src2_stride, in4, in5);
4503 LD_SH2(src1_ptr + 24, src2_stride, in6, in7);
4504 src1_ptr += (2 * src2_stride);
4506 ILVR_B2_SB(src9, src8, src10, src9, src98_r, src109_r);
4507 ILVL_B2_SB(src9, src8, src10, src9, src98_l, src109_l);
4516 weight_vec, rnd_vec, offset_vec,
4517 tmp2, tmp3, tmp6, tmp7);
4521 ST_SH2(tmp2, tmp3, dst_tmp, dst_stride);
4522 dst_tmp += (2 * dst_stride);
4534 const int16_t *src1_ptr,
4538 const int8_t *filter_x,
4539 const int8_t *filter_y,
4551 v8i16 filt_h0, filt_h1;
4554 v8i16 filter_vec,
tmp, weight_vec;
4555 v16i8 vec0, vec1, vec2, vec3, vec4, vec5;
4556 v8i16 dst20, dst31, dst42, dst10, dst32, dst21, dst43, tmp0, tmp1;
4557 v4i32 dst0, dst1, offset_vec, rnd_vec, const_vec;
4559 src0_ptr -= (src_stride + 1);
4561 filter_vec =
LD_SH(filter_x);
4564 filter_vec =
LD_SH(filter_y);
4572 weight0 = weight0 & 0x0000FFFF;
4573 weight = weight0 | (weight1 << 16);
4575 const_vec = __msa_fill_w((128 * weight1));
4577 offset_vec = __msa_fill_w(
offset);
4578 weight_vec = (v8i16) __msa_fill_w(
weight);
4579 rnd_vec = __msa_fill_w(rnd_val + 1);
4580 offset_vec += const_vec;
4600 dst0 = (v4i32) __msa_pckev_h((v8i16) dst1, (v8i16) dst0);
4602 LD2(src1_ptr, src2_stride, tp0, tp1);
4606 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
4607 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
4610 tmp = __msa_pckev_h((v8i16) dst1, (v8i16) dst0);
4611 out = (v16u8) __msa_pckev_b((v16i8)
tmp, (v16i8)
tmp);
4617 const int16_t *src1_ptr,
4621 const int8_t *filter_x,
4622 const int8_t *filter_y,
4631 v8i16 in0 = { 0 }, in1 = { 0 };
4634 v8i16 filt_h0, filt_h1;
4637 v8i16 filter_vec, weight_vec;
4638 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
4639 v8i16 tmp0, tmp1, tmp2, tmp3;
4640 v8i16 dst30, dst41, dst52, dst63;
4641 v8i16 dst10, dst32, dst54, dst21, dst43, dst65;
4642 v4i32 offset_vec, rnd_vec, const_vec;
4643 v4i32 dst0, dst1, dst2, dst3;
4645 src0_ptr -= (src_stride + 1);
4647 filter_vec =
LD_SH(filter_x);
4650 filter_vec =
LD_SH(filter_y);
4658 weight0 = weight0 & 0x0000FFFF;
4659 weight = weight0 | (weight1 << 16);
4661 const_vec = __msa_fill_w((128 * weight1));
4663 offset_vec = __msa_fill_w(
offset);
4664 weight_vec = (v8i16) __msa_fill_w(
weight);
4665 rnd_vec = __msa_fill_w(rnd_val + 1);
4666 offset_vec += const_vec;
4674 VSHF_B2_SB(src3, src6, src3, src6, mask0, mask1, vec6, vec7);
4688 SRA_4V(dst0, dst1, dst2, dst3, 6);
4691 LD2(src1_ptr, src2_stride, tp0, tp1);
4693 src1_ptr += (2 * src2_stride);
4694 LD2(src1_ptr, src2_stride, tp0, tp1);
4700 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
4701 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
4702 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
4703 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
4707 out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
4713 const int16_t *src1_ptr,
4717 const int8_t *filter_x,
4718 const int8_t *filter_y,
4729 v8i16 in0 = { 0 }, in1 = { 0 }, in2 = { 0 }, in3 = { 0 };
4730 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9, src10;
4732 v8i16 filt_h0, filt_h1;
4733 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
4736 v8i16 filter_vec, weight_vec;
4737 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
4738 v8i16 dst10, dst21, dst22, dst73, dst84, dst95, dst106;
4739 v8i16 dst10_r, dst32_r, dst54_r, dst76_r;
4740 v8i16 dst21_r, dst43_r, dst65_r, dst87_r;
4741 v8i16 dst98_r, dst109_r;
4742 v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
4743 v4i32 offset_vec, rnd_vec, const_vec;
4745 src0_ptr -= (src_stride + 1);
4747 filter_vec =
LD_SH(filter_x);
4750 filter_vec =
LD_SH(filter_y);
4758 weight0 = weight0 & 0x0000FFFF;
4759 weight = weight0 | (weight1 << 16);
4761 const_vec = __msa_fill_w((128 * weight1));
4763 offset_vec = __msa_fill_w(
offset);
4764 weight_vec = (v8i16) __msa_fill_w(
weight);
4765 rnd_vec = __msa_fill_w(rnd_val + 1);
4766 offset_vec += const_vec;
4769 src0_ptr += (3 * src_stride);
4777 dst22 = (v8i16) __msa_splati_d((v2i64) dst21, 1);
4779 for (loop_cnt =
height >> 3; loop_cnt--;) {
4780 LD_SB8(src0_ptr, src_stride,
4781 src3, src4, src5, src6, src7, src8, src9, src10);
4782 src0_ptr += (8 * src_stride);
4784 VSHF_B2_SB(src3, src7, src3, src7, mask0, mask1, vec0, vec1);
4785 VSHF_B2_SB(src4, src8, src4, src8, mask0, mask1, vec2, vec3);
4786 VSHF_B2_SB(src5, src9, src5, src9, mask0, mask1, vec4, vec5);
4787 VSHF_B2_SB(src6, src10, src6, src10, mask0, mask1, vec6, vec7);
4794 dst32_r = __msa_ilvr_h(dst73, dst22);
4798 dst22 = (v8i16) __msa_splati_d((v2i64) dst73, 1);
4799 dst76_r = __msa_ilvr_h(dst22, dst106);
4801 LD2(src1_ptr, src2_stride, tp0, tp1);
4802 src1_ptr += 2 * src2_stride;
4804 LD2(src1_ptr, src2_stride, tp0, tp1);
4805 src1_ptr += 2 * src2_stride;
4808 LD2(src1_ptr, src2_stride, tp0, tp1);
4809 src1_ptr += 2 * src2_stride;
4811 LD2(src1_ptr, src2_stride, tp0, tp1);
4812 src1_ptr += 2 * src2_stride;
4823 SRA_4V(dst0, dst1, dst2, dst3, 6);
4824 SRA_4V(dst4, dst5, dst6, dst7, 6);
4825 PCKEV_H4_SW(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, dst0, dst1,
4831 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
4832 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
4833 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
4834 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
4835 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
4836 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
4837 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
4838 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
4843 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, tmp0, tmp1,
4846 ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
4847 dst += (8 * dst_stride);
4851 dst22 = (v8i16) __msa_splati_d((v2i64) dst106, 1);
4857 const int16_t *src1_ptr,
4861 const int8_t *filter_x,
4862 const int8_t *filter_y,
4871 dst, dst_stride, filter_x, filter_y,
4872 weight0, weight1,
offset, rnd_val);
4873 }
else if (4 ==
height) {
4875 dst, dst_stride, filter_x, filter_y,
4876 weight0, weight1,
offset, rnd_val);
4877 }
else if (0 == (
height % 8)) {
4879 src1_ptr, src2_stride,
4880 dst, dst_stride, filter_x, filter_y,
4881 height, weight0, weight1,
4888 const int16_t *src1_ptr,
4892 const int8_t *filter_x,
4893 const int8_t *filter_y,
4900 uint32_t tpw0, tpw1, tpw2, tpw3;
4903 v16u8 out0, out1, out2;
4904 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9, src10;
4905 v8i16 in0 = { 0 }, in1 = { 0 }, in2 = { 0 }, in3 = { 0 };
4906 v8i16 in4 = { 0 }, in5 = { 0 };
4908 v8i16 filt_h0, filt_h1, filter_vec;
4909 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
4912 v8i16 dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6, dsth7, dsth8, dsth9;
4913 v8i16 dsth10, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, weight_vec;
4914 v8i16 dst10_r, dst32_r, dst54_r, dst76_r, dst98_r, dst21_r, dst43_r;
4915 v8i16 dst65_r, dst87_r, dst109_r, dst10_l, dst32_l, dst54_l, dst76_l;
4916 v8i16 dst98_l, dst21_l, dst43_l, dst65_l, dst87_l, dst109_l;
4917 v8i16 dst1021_l, dst3243_l, dst5465_l, dst7687_l, dst98109_l;
4918 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
4919 v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
4920 v4i32 dst4_r, dst5_r, dst6_r, dst7_r;
4921 v4i32 offset_vec, rnd_vec, const_vec;
4923 src0_ptr -= (src_stride + 1);
4925 filter_vec =
LD_SH(filter_x);
4928 filter_vec =
LD_SH(filter_y);
4936 weight0 = weight0 & 0x0000FFFF;
4937 weight = weight0 | (weight1 << 16);
4939 const_vec = __msa_fill_w((128 * weight1));
4941 offset_vec = __msa_fill_w(
offset);
4942 weight_vec = (v8i16) __msa_fill_w(
weight);
4943 rnd_vec = __msa_fill_w(rnd_val + 1);
4944 offset_vec += const_vec;
4947 src0_ptr += (3 * src_stride);
4960 LD_SB8(src0_ptr, src_stride, src3, src4, src5, src6, src7, src8, src9,
4964 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
4965 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec2, vec3);
4966 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec4, vec5);
4967 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec6, vec7);
4974 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec0, vec1);
4975 VSHF_B2_SB(src8, src8, src8, src8, mask0, mask1, vec2, vec3);
4976 VSHF_B2_SB(src9, src9, src9, src9, mask0, mask1, vec4, vec5);
4977 VSHF_B2_SB(src10, src10, src10, src10, mask0, mask1, vec6, vec7);
4992 PCKEV_D2_SH(dst21_l, dst10_l, dst43_l, dst32_l, dst1021_l, dst3243_l);
4993 PCKEV_D2_SH(dst65_l, dst54_l, dst87_l, dst76_l, dst5465_l, dst7687_l);
4994 dst98109_l = (v8i16) __msa_pckev_d((v2i64) dst109_l, (v2i64) dst98_l);
5007 dst3_l =
HEVC_FILT_4TAP(dst7687_l, dst98109_l, filt_h0, filt_h1);
5008 SRA_4V(dst0_r, dst1_r, dst2_r, dst3_r, 6);
5009 SRA_4V(dst4_r, dst5_r, dst6_r, dst7_r, 6);
5010 SRA_4V(dst0_l, dst1_l, dst2_l, dst3_l, 6);
5011 PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0, dst1);
5012 PCKEV_H2_SW(dst5_r, dst4_r, dst7_r, dst6_r, dst2, dst3);
5014 LD2(src1_ptr, src2_stride, tp0, tp1);
5016 LD2(src1_ptr + 2 * src2_stride, src2_stride, tp0, tp1);
5019 LD2(src1_ptr + 4 * src2_stride, src2_stride, tp0, tp1);
5021 LD2(src1_ptr + 6 * src2_stride, src2_stride, tp0, tp1);
5028 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5029 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5030 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5031 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5032 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
5033 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
5034 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
5035 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
5040 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, tmp0, tmp1,
5043 ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
5045 PCKEV_H2_SW(dst1_l, dst0_l, dst3_l, dst2_l, dst4, dst5);
5047 LW4(src1_ptr + 4, src2_stride, tpw0, tpw1, tpw2, tpw3);
5048 src1_ptr += (4 * src2_stride);
5050 LW4(src1_ptr + 4, src2_stride, tpw0, tpw1, tpw2, tpw3);
5056 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5057 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5058 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5059 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5064 out2 = (v16u8) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4);
5065 ST_H8(out2, 0, 1, 2, 3, 4, 5, 6, 7,
dst + 4, dst_stride);
5070 const int16_t *src1_ptr,
5074 const int8_t *filter_x,
5075 const int8_t *filter_y,
5085 v8i16 filt_h0, filt_h1;
5088 v8i16 filter_vec, weight_vec;
5089 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9;
5090 v8i16 dst0, dst1, dst2, dst3, dst4;
5092 v4i32 dst0_r, dst0_l, dst1_r, dst1_l;
5093 v8i16 dst10_r, dst32_r, dst21_r, dst43_r;
5094 v8i16 dst10_l, dst32_l, dst21_l, dst43_l;
5095 v8i16 tmp0, tmp1, tmp2, tmp3;
5096 v4i32 offset_vec, rnd_vec, const_vec;
5098 src0_ptr -= (src_stride + 1);
5100 filter_vec =
LD_SH(filter_x);
5103 filter_vec =
LD_SH(filter_y);
5111 weight0 = weight0 & 0x0000FFFF;
5112 weight = weight0 | (weight1 << 16);
5114 const_vec = __msa_fill_w((128 * weight1));
5116 offset_vec = __msa_fill_w(
offset);
5117 weight_vec = (v8i16) __msa_fill_w(
weight);
5118 rnd_vec = __msa_fill_w(rnd_val + 1);
5119 offset_vec += const_vec;
5124 LD_SH2(src1_ptr, src2_stride, in0, in1);
5129 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec6, vec7);
5130 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec8, vec9);
5146 SRA_4V(dst0_r, dst0_l, dst1_r, dst1_l, 6);
5147 PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp1, tmp3);
5152 dst0_r = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5153 dst0_l = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5154 dst1_r = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5155 dst1_l = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5156 SRAR_W4_SW(dst0_r, dst0_l, dst1_r, dst1_l, rnd_vec);
5158 PCKEV_H2_SH(dst0_l, dst0_r, dst1_l, dst1_r, tmp0, tmp1);
5159 out = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
5165 const int16_t *src1_ptr,
5169 const int8_t *filter_x,
5170 const int8_t *filter_y,
5180 v16i8
src0,
src1,
src2, src3, src4, src5, src6, mask0, mask1;
5181 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
5182 v8i16 filt0, filt1, filt_h0, filt_h1, filter_vec, weight_vec;
5183 v8i16 dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6;
5184 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, in0, in1, in2, in3;
5185 v8i16 dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r;
5186 v8i16 dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l;
5187 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
5188 v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
5189 v4i32 offset_vec, rnd_vec, const_vec;
5191 src0_ptr -= (src_stride + 1);
5193 filter_vec =
LD_SH(filter_x);
5196 filter_vec =
LD_SH(filter_y);
5205 weight0 = weight0 & 0x0000FFFF;
5206 weight = weight0 | (weight1 << 16);
5208 const_vec = __msa_fill_w((128 * weight1));
5210 offset_vec = __msa_fill_w(
offset);
5211 rnd_vec = __msa_fill_w(rnd_val + 1);
5212 offset_vec += const_vec;
5213 weight_vec = (v8i16) __msa_fill_w(
weight);
5215 for (cnt = width8mult; cnt--;) {
5220 LD_SH4(src1_ptr, src2_stride, in0, in1, in2, in3);
5234 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
5235 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec2, vec3);
5236 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec4, vec5);
5237 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec6, vec7);
5258 SRA_4V(dst0_r, dst0_l, dst1_r, dst1_l, 6);
5259 SRA_4V(dst2_r, dst2_l, dst3_r, dst3_l, 6);
5260 PCKEV_H4_SW(dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, dst3_l,
5261 dst3_r, dst0, dst1, dst2, dst3);
5267 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5268 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5269 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5270 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5271 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
5272 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
5273 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
5274 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
5279 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
5280 tmp0, tmp1, tmp2, tmp3);
5282 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
5289 const int16_t *src1_ptr,
5293 const int8_t *filter_x,
5294 const int8_t *filter_y,
5301 v16u8 out0, out1, out2;
5302 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8;
5304 v8i16 filt_h0, filt_h1;
5307 v8i16 filter_vec, weight_vec;
5308 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9;
5309 v16i8 vec10, vec11, vec12, vec13, vec14, vec15, vec16, vec17;
5310 v8i16 dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6, dsth7, dsth8;
5311 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
5312 v4i32 dst4_r, dst4_l, dst5_r, dst5_l;
5313 v8i16 dst10_r, dst32_r, dst10_l, dst32_l;
5314 v8i16 dst21_r, dst43_r, dst21_l, dst43_l;
5315 v8i16 dst54_r, dst54_l, dst65_r, dst65_l;
5316 v8i16 dst76_r, dst76_l, dst87_r, dst87_l;
5317 v8i16 in0, in1, in2, in3, in4, in5;
5318 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
5319 v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
5320 v4i32 offset_vec, rnd_vec, const_vec;
5322 src0_ptr -= (src_stride + 1);
5324 filter_vec =
LD_SH(filter_x);
5327 filter_vec =
LD_SH(filter_y);
5335 weight0 = weight0 & 0x0000FFFF;
5336 weight = weight0 | (weight1 << 16);
5338 const_vec = __msa_fill_w((128 * weight1));
5340 offset_vec = __msa_fill_w(
offset);
5341 weight_vec = (v8i16) __msa_fill_w(
weight);
5342 rnd_vec = __msa_fill_w(rnd_val + 1);
5343 offset_vec += const_vec;
5346 src0_ptr += (5 * src_stride);
5347 LD_SB4(src0_ptr, src_stride, src5, src6, src7, src8);
5352 LD_SH6(src1_ptr, src2_stride, in0, in1, in2, in3, in4, in5);
5357 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec6, vec7);
5358 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec8, vec9);
5359 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec10, vec11);
5360 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec12, vec13);
5361 VSHF_B2_SB(src7, src7, src7, src7, mask0, mask1, vec14, vec15);
5362 VSHF_B2_SB(src8, src8, src8, src8, mask0, mask1, vec16, vec17);
5396 SRA_4V(dst0_r, dst0_l, dst1_r, dst1_l, 6);
5397 SRA_4V(dst2_r, dst2_l, dst3_r, dst3_l, 6);
5398 SRA_4V(dst4_r, dst4_l, dst5_r, dst5_l, 6);
5399 PCKEV_H4_SW(dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, dst3_l, dst3_r,
5400 dst0, dst1, dst2, dst3);
5406 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5407 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5408 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5409 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5410 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
5411 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
5412 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
5413 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
5418 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
5419 tmp0, tmp1, tmp2, tmp3);
5422 PCKEV_H2_SW(dst4_l, dst4_r, dst5_l, dst5_r, dst0, dst1);
5425 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5426 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5427 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5428 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5432 out2 = (v16u8) __msa_pckev_b((v16i8) tmp5, (v16i8) tmp4);
5433 ST_D4(out0, out1, 0, 1, 0, 1,
dst, dst_stride);
5434 ST_D2(out2, 0, 1,
dst + 4 * dst_stride, dst_stride);
5439 const int16_t *src1_ptr,
5443 const int8_t *filter_x,
5444 const int8_t *filter_y,
5455 const uint8_t *src0_ptr_tmp;
5456 const int16_t *src1_ptr_tmp;
5460 v8i16 in0, in1, in2, in3;
5462 v8i16 filt_h0, filt_h1;
5466 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
5467 v8i16 dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6;
5468 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
5469 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
5470 v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
5471 v8i16 dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r;
5472 v8i16 dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l, weight_vec;
5473 v4i32 offset_vec, rnd_vec, const_vec;
5475 src0_ptr -= (src_stride + 1);
5477 filter_vec =
LD_SH(filter_x);
5480 filter_vec =
LD_SH(filter_y);
5488 weight0 = weight0 & 0x0000FFFF;
5489 weight = weight0 | (weight1 << 16);
5491 const_vec = __msa_fill_w((128 * weight1));
5493 offset_vec = __msa_fill_w(
offset);
5494 weight_vec = (v8i16) __msa_fill_w(
weight);
5495 rnd_vec = __msa_fill_w(rnd_val + 1);
5496 offset_vec += const_vec;
5498 for (cnt =
width >> 3; cnt--;) {
5499 src0_ptr_tmp = src0_ptr;
5500 src1_ptr_tmp = src1_ptr;
5504 src0_ptr_tmp += (3 * src_stride);
5517 for (loop_cnt =
height >> 2; loop_cnt--;) {
5518 LD_SB4(src0_ptr_tmp, src_stride, src3, src4, src5, src6);
5519 src0_ptr_tmp += (4 * src_stride);
5520 LD_SH4(src1_ptr_tmp, src2_stride, in0, in1, in2, in3);
5521 src1_ptr_tmp += (4 * src2_stride);
5524 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
5525 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec2, vec3);
5526 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec4, vec5);
5527 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec6, vec7);
5548 SRA_4V(dst0_r, dst0_l, dst1_r, dst1_l, 6);
5549 SRA_4V(dst2_r, dst2_l, dst3_r, dst3_l, 6);
5550 PCKEV_H4_SW(dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, dst3_l,
5551 dst3_r, dst0, dst1, dst2, dst3);
5556 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5557 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5558 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5559 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5560 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
5561 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
5562 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
5563 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
5568 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
5569 tmp0, tmp1, tmp2, tmp3);
5571 ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride);
5572 dst_tmp += (4 * dst_stride);
5589 const int16_t *src1_ptr,
5593 const int8_t *filter_x,
5594 const int8_t *filter_y,
5603 dst, dst_stride, filter_x, filter_y,
5604 weight0, weight1,
offset, rnd_val);
5605 }
else if (4 ==
height) {
5607 src2_stride,
dst, dst_stride, filter_x,
5608 filter_y, weight0, weight1,
offset,
5610 }
else if (6 ==
height) {
5612 dst, dst_stride, filter_x, filter_y,
5613 weight0, weight1,
offset, rnd_val);
5614 }
else if (0 == (
height % 4)) {
5616 src1_ptr, src2_stride,
5617 dst, dst_stride, filter_x, filter_y,
5619 weight1,
offset, rnd_val, 8);
5625 const int16_t *src1_ptr,
5629 const int8_t *filter_x,
5630 const int8_t *filter_y,
5640 const uint8_t *src0_ptr_tmp;
5641 const int16_t *src1_ptr_tmp;
5644 v16i8
src0,
src1,
src2, src3, src4, src5, src6, src7, src8, src9, src10;
5645 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
5646 v16i8 mask0, mask1, mask2, mask3;
5647 v8i16 filt0, filt1, filt_h0, filt_h1, filter_vec;
5648 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
5649 v8i16 dsth0, dsth1, dsth2, dsth3, dsth4, dsth5, dsth6, weight_vec;
5650 v8i16 dst10, dst21, dst22, dst73, dst84, dst95, dst106;
5651 v8i16 dst76_r, dst98_r, dst87_r, dst109_r;
5652 v8i16 in0 = { 0 }, in1 = { 0 }, in2 = { 0 }, in3 = { 0 };
5653 v8i16 dst10_r, dst32_r, dst54_r, dst21_r, dst43_r, dst65_r;
5654 v8i16 dst10_l, dst32_l, dst54_l, dst21_l, dst43_l, dst65_l;
5655 v4i32 dst0_r, dst0_l, dst1_r, dst1_l, dst2_r, dst2_l, dst3_r, dst3_l;
5656 v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
5657 v4i32 offset_vec, rnd_vec, const_vec;
5659 src0_ptr -= (src_stride + 1);
5661 filter_vec =
LD_SH(filter_x);
5664 filter_vec =
LD_SH(filter_y);
5673 weight0 = weight0 & 0x0000FFFF;
5674 weight = weight0 | (weight1 << 16);
5676 const_vec = __msa_fill_w((128 * weight1));
5678 offset_vec = __msa_fill_w(
offset);
5679 rnd_vec = __msa_fill_w(rnd_val + 1);
5680 offset_vec += const_vec;
5681 weight_vec = (v8i16) __msa_fill_w(
weight);
5683 src0_ptr_tmp = src0_ptr;
5685 src1_ptr_tmp = src1_ptr;
5688 src0_ptr_tmp += (3 * src_stride);
5703 for (loop_cnt = 4; loop_cnt--;) {
5704 LD_SB4(src0_ptr_tmp, src_stride, src3, src4, src5, src6);
5705 src0_ptr_tmp += (4 * src_stride);
5708 LD_SH4(src1_ptr_tmp, src2_stride, in0, in1, in2, in3);
5709 src1_ptr_tmp += (4 * src2_stride);
5711 VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec0, vec1);
5712 VSHF_B2_SB(src4, src4, src4, src4, mask0, mask1, vec2, vec3);
5713 VSHF_B2_SB(src5, src5, src5, src5, mask0, mask1, vec4, vec5);
5714 VSHF_B2_SB(src6, src6, src6, src6, mask0, mask1, vec6, vec7);
5735 SRA_4V(dst0_r, dst0_l, dst1_r, dst1_l, 6);
5736 SRA_4V(dst2_r, dst2_l, dst3_r, dst3_l, 6);
5737 PCKEV_H4_SW(dst0_l, dst0_r, dst1_l, dst1_r, dst2_l, dst2_r, dst3_l,
5738 dst3_r, dst0, dst1, dst2, dst3);
5743 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5744 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5745 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5746 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5747 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
5748 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
5749 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
5750 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
5755 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
5756 tmp0, tmp1, tmp2, tmp3);
5758 ST_D4(out0, out1, 0, 1, 0, 1, dst_tmp, dst_stride);
5759 dst_tmp += (4 * dst_stride);
5776 src0_ptr += (3 * src_stride);
5785 dst22 = (v8i16) __msa_splati_d((v2i64) dst21, 1);
5787 for (loop_cnt = 2; loop_cnt--;) {
5788 LD_SB8(src0_ptr, src_stride, src3, src4, src5, src6, src7, src8, src9,
5790 src0_ptr += (8 * src_stride);
5792 VSHF_B2_SB(src3, src7, src3, src7, mask2, mask3, vec0, vec1);
5793 VSHF_B2_SB(src4, src8, src4, src8, mask2, mask3, vec2, vec3);
5794 VSHF_B2_SB(src5, src9, src5, src9, mask2, mask3, vec4, vec5);
5795 VSHF_B2_SB(src6, src10, src6, src10, mask2, mask3, vec6, vec7);
5802 dst32_r = __msa_ilvr_h(dst73, dst22);
5806 dst22 = (v8i16) __msa_splati_d((v2i64) dst73, 1);
5807 dst76_r = __msa_ilvr_h(dst22, dst106);
5809 LD2(src1_ptr, src2_stride, tp0, tp1);
5810 src1_ptr += 2 * src2_stride;
5812 LD2(src1_ptr, src2_stride, tp0, tp1);
5813 src1_ptr += 2 * src2_stride;
5816 LD2(src1_ptr, src2_stride, tp0, tp1);
5817 src1_ptr += 2 * src2_stride;
5819 LD2(src1_ptr, src2_stride, tp0, tp1);
5820 src1_ptr += 2 * src2_stride;
5832 SRA_4V(dst0, dst1, dst2, dst3, 6);
5833 SRA_4V(dst4, dst5, dst6, dst7, 6);
5834 PCKEV_H4_SW(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
5835 dst0, dst1, dst2, dst3);
5840 dst0 = __msa_dpadd_s_w(offset_vec, tmp0, weight_vec);
5841 dst1 = __msa_dpadd_s_w(offset_vec, tmp1, weight_vec);
5842 dst2 = __msa_dpadd_s_w(offset_vec, tmp2, weight_vec);
5843 dst3 = __msa_dpadd_s_w(offset_vec, tmp3, weight_vec);
5844 dst4 = __msa_dpadd_s_w(offset_vec, tmp4, weight_vec);
5845 dst5 = __msa_dpadd_s_w(offset_vec, tmp5, weight_vec);
5846 dst6 = __msa_dpadd_s_w(offset_vec, tmp6, weight_vec);
5847 dst7 = __msa_dpadd_s_w(offset_vec, tmp7, weight_vec);
5852 PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
5853 tmp0, tmp1, tmp2, tmp3);
5855 ST_W8(out0, out1, 0, 1, 2, 3, 0, 1, 2, 3,
dst, dst_stride);
5856 dst += (8 * dst_stride);
5860 dst22 = (v8i16) __msa_splati_d((v2i64) dst106, 1);
5866 const int16_t *src1_ptr,
5870 const int8_t *filter_x,
5871 const int8_t *filter_y,
5880 src2_stride,
dst, dst_stride, filter_x,
5881 filter_y, weight0, weight1,
offset,
5885 src2_stride,
dst, dst_stride,
5886 filter_x, filter_y,
height, weight0,
5887 weight1,
offset, rnd_val, 16);
5893 const int16_t *src1_ptr,
5897 const int8_t *filter_x,
5898 const int8_t *filter_y,
5906 src1_ptr, src2_stride,
5908 filter_x, filter_y,
height, weight0,
5909 weight1,
offset, rnd_val, 24);
5914 const int16_t *src1_ptr,
5918 const int8_t *filter_x,
5919 const int8_t *filter_y,
5927 src1_ptr, src2_stride,
5929 filter_x, filter_y,
height, weight0,
5930 weight1,
offset, rnd_val, 32);
5933#define BI_W_MC_COPY(WIDTH) \
5934void ff_hevc_put_hevc_bi_w_pel_pixels##WIDTH##_8_msa(uint8_t *dst, \
5935 ptrdiff_t dst_stride, \
5936 const uint8_t *src, \
5937 ptrdiff_t src_stride, \
5938 const int16_t *src_16bit, \
5948 int shift = 14 + 1 - 8; \
5949 int log2Wd = denom + shift - 1; \
5951 hevc_biwgt_copy_##WIDTH##w_msa(src, src_stride, src_16bit, MAX_PB_SIZE, \
5952 dst, dst_stride, height, \
5953 weight0, weight1, offset, log2Wd); \
5968#define BI_W_MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR) \
5969void ff_hevc_put_hevc_bi_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \
5972 const uint8_t *src, \
5975 const int16_t *src_16bit, \
5985 const int8_t *filter = ff_hevc_##PEL##_filters[FILT_DIR]; \
5986 int log2Wd = denom + 14 - 8; \
5988 hevc_##DIR1##_biwgt_##TAP##t_##WIDTH##w_msa(src, src_stride, src_16bit, \
5989 MAX_PB_SIZE, dst, dst_stride, \
5990 filter, height, weight0, \
5991 weight1, offset, log2Wd); \
6030#define BI_W_MC_HV(PEL, WIDTH, TAP) \
6031void ff_hevc_put_hevc_bi_w_##PEL##_hv##WIDTH##_8_msa(uint8_t *dst, \
6032 ptrdiff_t dst_stride, \
6033 const uint8_t *src, \
6034 ptrdiff_t src_stride, \
6035 const int16_t *src_16bit, \
6045 const int8_t *filter_x = ff_hevc_##PEL##_filters[mx]; \
6046 const int8_t *filter_y = ff_hevc_##PEL##_filters[my]; \
6047 int log2Wd = denom + 14 - 8; \
6049 hevc_hv_biwgt_##TAP##t_##WIDTH##w_msa(src, src_stride, src_16bit, \
6050 MAX_PB_SIZE, dst, dst_stride, \
6051 filter_x, filter_y, height, \
6052 weight0, weight1, offset, \
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t my
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static int aligned(int val)
#define INSERT_W4_SH(...)
#define XORI_B8_128_SB(...)
#define LW2(psrc, stride, out0, out1)
#define XORI_B6_128_SB(...)
#define SPLATI_W4_SH(...)
#define CLIP_SW2_0_255(in0, in1)
#define LD4(psrc, stride, out0, out1, out2, out3)
#define ST_D4(in0, in1, idx0, idx1, idx2, idx3, pdst, stride)
#define SPLATI_H2_SH(...)
#define XORI_B2_128_SB(...)
#define XORI_B7_128_SB(...)
#define SLLI_2V(in0, in1, shift)
#define SPLATI_W2_SH(...)
#define DPADD_SB2_SH(...)
#define INSERT_W4_SB(...)
#define XORI_B4_128_SB(...)
#define LD2(psrc, stride, out0, out1)
#define INSERT_D2_SH(...)
#define INSERT_W2_SB(...)
#define UNPCK_R_SB_SH(in, out)
#define XORI_B3_128_SB(...)
#define SRA_4V(in0, in1, in2, in3, shift)
#define SPLATI_H4_SH(...)
#define ST_H8(in, idx0, idx1, idx2, idx3, idx4, idx5, idx6, idx7, pdst, stride)
#define SLLI_4V(in0, in1, in2, in3, shift)
#define ST_W2(in, idx0, idx1, pdst, stride)
#define CLIP_SW4_0_255(in0, in1, in2, in3)
#define INSERT_D2_SB(...)
#define ST_W8(in0, in1, idx0, idx1, idx2, idx3, idx4, idx5, idx6, idx7, pdst, stride)
#define LW4(psrc, stride, out0, out1, out2, out3)
#define DPADD_SB4_SH(...)
#define CLIP_SH_0_255(in)
#define XORI_B5_128_SB(...)
#define ST_H2(in, idx0, idx1, pdst, stride)
#define ST_D2(in, idx0, idx1, pdst, stride)
#define HEVC_FILT_4TAP(in0, in1, filt0, filt1)
#define HEVC_FILT_8TAP(in0, in1, in2, in3, filt0, filt1, filt2, filt3)
#define HEVC_FILT_4TAP_SH(in0, in1, filt0, filt1)
#define HEVC_FILT_8TAP_SH(in0, in1, in2, in3, filt0, filt1, filt2, filt3)
static const uint8_t ff_hevc_mask_arr[16 *2]
static void hevc_biwgt_copy_6w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_4x2_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_8multx4_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val, int32_t width8mult)
static void hevc_vt_biwgt_4t_4x8multiple_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_4x4_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
#define HEVC_BIW_RND_CLIP2_MAX_SATU(in0, in1, vec0, vec1, wgt, rnd, offset, out0, out1)
static void hevc_hz_biwgt_4t_4x8multiple_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
#define HEVC_BIW_RND_CLIP2(in0, in1, vec0, vec1, wgt, rnd, offset, out0, out1)
static void hevc_hz_biwgt_4t_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_8x6_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_8x6_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_8x4multiple_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_6w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_8x6_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
#define HEVC_BIW_RND_CLIP4_MAX_SATU(in0, in1, in2, in3, vec0, vec1, vec2, vec3, wgt, rnd, offset, out0, out1, out2, out3)
static void hevc_hv_biwgt_8t_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
#define BI_W_MC(PEL, DIR, WIDTH, TAP, DIR1, FILT_DIR)
static void hevc_vt_biwgt_8t_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_64w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_4x2_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_64w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_64w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
#define BI_W_MC_COPY(WIDTH)
static void hevc_hv_biwgt_4t_6w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_6w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_48w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_8multx4mult_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val, int32_t width)
#define HEVC_BIW_RND_CLIP4(in0, in1, in2, in3, vec0, vec1, vec2, vec3, wgt, rnd, offset, out0, out1, out2, out3)
static void hevc_hv_biwgt_8t_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_8x4multiple_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_64w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_8x2_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
#define BI_W_MC_HV(PEL, WIDTH, TAP)
static void hevc_hz_biwgt_8t_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_4x4_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_4x2_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_8x2_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_4t_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_4multx8mult_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_4w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_16w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_48w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_8multx2mult_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val, int32_t width8mult)
static void hevc_hz_biwgt_4t_8x2_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_48w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_4t_24w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_biwgt_copy_8w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hz_biwgt_8t_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_12w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_8t_16multx2mult_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val, int32_t width)
static void hevc_hv_biwgt_4t_4x4_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_vt_biwgt_4t_32w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static void hevc_hv_biwgt_8t_48w_msa(const uint8_t *src0_ptr, int32_t src_stride, const int16_t *src1_ptr, int32_t src2_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_x, const int8_t *filter_y, int32_t height, int32_t weight0, int32_t weight1, int32_t offset, int32_t rnd_val)
static int zero(InterplayACMContext *s, unsigned ind, unsigned col)
const h264_weight_func weight
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
#define ST_W4(in, idx0, idx1, idx2, idx3, pdst, stride)