27 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8,
29 0, 1, 1, 2, 2, 3, 3, 4, 16, 17, 17, 18, 18, 19, 19, 20,
31 8, 9, 9, 10, 10, 11, 11, 12, 24, 25, 25, 26, 26, 27, 27, 28
35 {-6, 123, 12, -1, 0, 0, 0, 0},
36 {2, -11, 108, 36, -8, 1, 0, 0},
37 {-9, 93, 50, -6, 0, 0, 0, 0},
38 {3, -16, 77, 77, -16, 3, 0, 0},
39 {-6, 50, 93, -9, 0, 0, 0, 0},
40 {1, -8, 36, 108, -11, 2, 0, 0},
41 {-1, 12, 123, -6, 0, 0, 0, 0},
54 #define HORIZ_6TAP_FILT(src0, src1, mask0, mask1, mask2, \
55 filt_h0, filt_h1, filt_h2) \
57 v16i8 vec0_m, vec1_m, vec2_m; \
60 VSHF_B3_SB(src0, src1, src0, src1, src0, src1, mask0, mask1, mask2, \
61 vec0_m, vec1_m, vec2_m); \
62 hz_out_m = DPADD_SH3_SH(vec0_m, vec1_m, vec2_m, \
63 filt_h0, filt_h1, filt_h2); \
65 hz_out_m = __msa_srari_h(hz_out_m, 7); \
66 hz_out_m = __msa_sat_s_h(hz_out_m, 7); \
71 #define HORIZ_6TAP_4WID_4VECS_FILT(src0, src1, src2, src3, \
72 mask0, mask1, mask2, \
73 filt0, filt1, filt2, \
76 v16i8 vec0_m, vec1_m, vec2_m, vec3_m, vec4_m, vec5_m; \
78 VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0_m, vec1_m); \
79 DOTP_SB2_SH(vec0_m, vec1_m, filt0, filt0, out0, out1); \
80 VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2_m, vec3_m); \
81 DPADD_SB2_SH(vec2_m, vec3_m, filt1, filt1, out0, out1); \
82 VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4_m, vec5_m); \
83 DPADD_SB2_SH(vec4_m, vec5_m, filt2, filt2, out0, out1); \
86 #define HORIZ_6TAP_8WID_4VECS_FILT(src0, src1, src2, src3, \
87 mask0, mask1, mask2, \
88 filt0, filt1, filt2, \
89 out0, out1, out2, out3) \
91 v16i8 vec0_m, vec1_m, vec2_m, vec3_m, vec4_m, vec5_m, vec6_m, vec7_m; \
93 VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0_m, vec1_m); \
94 VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2_m, vec3_m); \
95 DOTP_SB4_SH(vec0_m, vec1_m, vec2_m, vec3_m, filt0, filt0, filt0, filt0, \
96 out0, out1, out2, out3); \
97 VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec0_m, vec1_m); \
98 VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec2_m, vec3_m); \
99 VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec4_m, vec5_m); \
100 VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec6_m, vec7_m); \
101 DPADD_SB4_SH(vec0_m, vec1_m, vec2_m, vec3_m, filt1, filt1, filt1, filt1, \
102 out0, out1, out2, out3); \
103 DPADD_SB4_SH(vec4_m, vec5_m, vec6_m, vec7_m, filt2, filt2, filt2, filt2, \
104 out0, out1, out2, out3); \
107 #define FILT_4TAP_DPADD_S_H(vec0, vec1, filt0, filt1) \
111 tmp0 = __msa_dotp_s_h((v16i8) vec0, (v16i8) filt0); \
112 tmp0 = __msa_dpadd_s_h(tmp0, (v16i8) vec1, (v16i8) filt1); \
117 #define HORIZ_4TAP_FILT(src0, src1, mask0, mask1, filt_h0, filt_h1) \
119 v16i8 vec0_m, vec1_m; \
122 VSHF_B2_SB(src0, src1, src0, src1, mask0, mask1, vec0_m, vec1_m); \
123 hz_out_m = FILT_4TAP_DPADD_S_H(vec0_m, vec1_m, filt_h0, filt_h1); \
125 hz_out_m = __msa_srari_h(hz_out_m, 7); \
126 hz_out_m = __msa_sat_s_h(hz_out_m, 7); \
131 #define HORIZ_4TAP_4WID_4VECS_FILT(src0, src1, src2, src3, \
132 mask0, mask1, filt0, filt1, \
135 v16i8 vec0_m, vec1_m, vec2_m, vec3_m; \
137 VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0_m, vec1_m); \
138 DOTP_SB2_SH(vec0_m, vec1_m, filt0, filt0, out0, out1); \
139 VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2_m, vec3_m); \
140 DPADD_SB2_SH(vec2_m, vec3_m, filt1, filt1, out0, out1); \
143 #define HORIZ_4TAP_8WID_4VECS_FILT(src0, src1, src2, src3, \
144 mask0, mask1, filt0, filt1, \
145 out0, out1, out2, out3) \
147 v16i8 vec0_m, vec1_m, vec2_m, vec3_m; \
149 VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0_m, vec1_m); \
150 VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2_m, vec3_m); \
151 DOTP_SB4_SH(vec0_m, vec1_m, vec2_m, vec3_m, filt0, filt0, filt0, filt0, \
152 out0, out1, out2, out3); \
153 VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec0_m, vec1_m); \
154 VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec2_m, vec3_m); \
155 DPADD_SB4_SH(vec0_m, vec1_m, vec2_m, vec3_m, filt1, filt1, filt1, filt1, \
156 out0, out1, out2, out3); \
163 v16i8
src0,
src1, src2, src3, filt0, filt1, filt2;
164 v16u8 mask0, mask1, mask2,
out;
165 v8i16
filt, out0, out1;
171 filt =
LD_SH(filter);
177 LD_SB4(src, src_stride, src0, src1, src2, src3);
180 filt0, filt1, filt2, out0, out1);
184 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
191 v16i8
src0,
src1, src2, src3, filt0, filt1, filt2;
192 v16u8 mask0, mask1, mask2,
out;
193 v8i16
filt, out0, out1, out2, out3;
199 filt =
LD_SH(filter);
205 LD_SB4(src, src_stride, src0, src1, src2, src3);
207 src += (4 * src_stride);
209 filt0, filt1, filt2, out0, out1);
210 LD_SB4(src, src_stride, src0, src1, src2, src3);
213 filt0, filt1, filt2, out2, out3);
217 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
218 dst += (4 * dst_stride);
220 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
225 int height,
int mx,
int my)
231 }
else if (8 == height) {
238 int height,
int mx,
int my)
242 v16i8
src0,
src1, src2, src3, filt0, filt1, filt2;
243 v16u8 mask0, mask1, mask2, tmp0, tmp1;
244 v8i16
filt, out0, out1, out2, out3;
251 filt =
LD_SH(filter);
257 LD_SB4(src, src_stride, src0, src1, src2, src3);
259 src += (4 * src_stride);
261 filt0, filt1, filt2, out0, out1, out2, out3);
266 ST8x4_UB(tmp0, tmp1, dst, dst_stride);
267 dst += (4 * dst_stride);
269 for (loop_cnt = (height >> 2) - 1; loop_cnt--;) {
270 LD_SB4(src, src_stride, src0, src1, src2, src3);
272 src += (4 * src_stride);
274 filt0, filt1, filt2, out0, out1, out2, out3);
279 ST8x4_UB(tmp0, tmp1, dst, dst_stride);
280 dst += (4 * dst_stride);
286 int height,
int mx,
int my)
290 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, filt0, filt1, filt2;
291 v16u8 mask0, mask1, mask2,
out;
292 v8i16
filt, out0, out1, out2, out3, out4, out5, out6, out7;
298 filt =
LD_SH(filter);
304 for (loop_cnt = (height >> 2); loop_cnt--;) {
305 LD_SB4(src, src_stride, src0, src2, src4, src6);
306 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
308 src += (4 * src_stride);
311 filt0, filt1, filt2, out0, out1, out2, out3);
313 filt0, filt1, filt2, out4, out5, out6, out7);
335 int height,
int mx,
int my)
339 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
340 v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
341 v16i8 src87_r, src2110, src4332, src6554, src8776, filt0, filt1, filt2;
343 v8i16
filt, out10, out32;
345 src -= (2 * src_stride);
347 filt =
LD_SH(filter);
350 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
351 src += (5 * src_stride);
353 ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3, src10_r, src21_r,
355 ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
358 for (loop_cnt = (height >> 2); loop_cnt--;) {
359 LD_SB4(src, src_stride, src5, src6, src7, src8);
360 src += (4 * src_stride);
362 ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7, src54_r,
363 src65_r, src76_r, src87_r);
364 ILVR_D2_SB(src65_r, src54_r, src87_r, src76_r, src6554, src8776);
366 out10 =
DPADD_SH3_SH(src2110, src4332, src6554, filt0, filt1, filt2);
367 out32 =
DPADD_SH3_SH(src4332, src6554, src8776, filt0, filt1, filt2);
371 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
372 dst += (4 * dst_stride);
382 int height,
int mx,
int my)
386 v16i8
src0,
src1, src2, src3, src4, src7, src8, src9, src10;
387 v16i8 src10_r, src32_r, src76_r, src98_r, src21_r, src43_r, src87_r;
388 v16i8 src109_r, filt0, filt1, filt2;
390 v8i16
filt, out0_r, out1_r, out2_r, out3_r;
392 src -= (2 * src_stride);
394 filt =
LD_SH(filter);
397 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
398 src += (5 * src_stride);
401 ILVR_B4_SB(src1, src0, src3, src2, src2, src1, src4, src3,
402 src10_r, src32_r, src21_r, src43_r);
404 for (loop_cnt = (height >> 2); loop_cnt--;) {
405 LD_SB4(src, src_stride, src7, src8, src9, src10);
407 src += (4 * src_stride);
409 ILVR_B4_SB(src7, src4, src8, src7, src9, src8, src10, src9, src76_r,
410 src87_r, src98_r, src109_r);
411 out0_r =
DPADD_SH3_SH(src10_r, src32_r, src76_r, filt0, filt1, filt2);
412 out1_r =
DPADD_SH3_SH(src21_r, src43_r, src87_r, filt0, filt1, filt2);
413 out2_r =
DPADD_SH3_SH(src32_r, src76_r, src98_r, filt0, filt1, filt2);
414 out3_r =
DPADD_SH3_SH(src43_r, src87_r, src109_r, filt0, filt1, filt2);
416 SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
419 ST8x4_UB(tmp0, tmp1, dst, dst_stride);
420 dst += (4 * dst_stride);
432 int height,
int mx,
int my)
436 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
437 v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r, src65_r;
438 v16i8 src87_r, src10_l, src32_l, src54_l, src76_l, src21_l, src43_l;
439 v16i8 src65_l, src87_l, filt0, filt1, filt2;
440 v16u8 tmp0, tmp1, tmp2, tmp3;
441 v8i16 out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l,
filt;
443 src -= (2 * src_stride);
445 filt =
LD_SH(filter);
448 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
449 src += (5 * src_stride);
452 ILVR_B4_SB(src1, src0, src3, src2, src4, src3, src2, src1, src10_r,
453 src32_r, src43_r, src21_r);
454 ILVL_B4_SB(src1, src0, src3, src2, src4, src3, src2, src1, src10_l,
455 src32_l, src43_l, src21_l);
457 for (loop_cnt = (height >> 2); loop_cnt--;) {
458 LD_SB4(src, src_stride, src5, src6, src7, src8);
459 src += (4 * src_stride);
462 ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7, src54_r,
463 src65_r, src76_r, src87_r);
464 ILVL_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7, src54_l,
465 src65_l, src76_l, src87_l);
466 out0_r =
DPADD_SH3_SH(src10_r, src32_r, src54_r, filt0, filt1,
468 out1_r =
DPADD_SH3_SH(src21_r, src43_r, src65_r, filt0, filt1,
470 out2_r =
DPADD_SH3_SH(src32_r, src54_r, src76_r, filt0, filt1,
472 out3_r =
DPADD_SH3_SH(src43_r, src65_r, src87_r, filt0, filt1,
474 out0_l =
DPADD_SH3_SH(src10_l, src32_l, src54_l, filt0, filt1,
476 out1_l =
DPADD_SH3_SH(src21_l, src43_l, src65_l, filt0, filt1,
478 out2_l =
DPADD_SH3_SH(src32_l, src54_l, src76_l, filt0, filt1,
480 out3_l =
DPADD_SH3_SH(src43_l, src65_l, src87_l, filt0, filt1,
484 SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
485 SAT_SH4_SH(out0_l, out1_l, out2_l, out3_l, 7);
486 PCKEV_B4_UB(out0_l, out0_r, out1_l, out1_r, out2_l, out2_r, out3_l,
487 out3_r, tmp0, tmp1, tmp2, tmp3);
489 ST_UB4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride);
490 dst += (4 * dst_stride);
506 int height,
int mx,
int my)
511 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
512 v16i8 filt_hz0, filt_hz1, filt_hz2;
513 v16u8 mask0, mask1, mask2,
out;
515 v8i16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5, hz_out6;
516 v8i16 hz_out7,
filt, filt_vt0, filt_vt1, filt_vt2, out0, out1, out2, out3;
519 src -= (2 + 2 * src_stride);
522 filt =
LD_SH(filter_horiz);
523 SPLATI_H3_SB(filt, 0, 1, 2, filt_hz0, filt_hz1, filt_hz2);
525 filt =
LD_SH(filter_vert);
526 SPLATI_H3_SH(filt, 0, 1, 2, filt_vt0, filt_vt1, filt_vt2);
531 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
532 src += (5 * src_stride);
539 hz_out1 = (v8i16) __msa_sldi_b((v16i8) hz_out2, (v16i8) hz_out0, 8);
542 ILVEV_B2_SH(hz_out0, hz_out1, hz_out2, hz_out3, out0, out1);
544 for (loop_cnt = (height >> 2); loop_cnt--;) {
545 LD_SB2(src, src_stride, src5, src6);
546 src += (2 * src_stride);
551 hz_out4 = (v8i16) __msa_sldi_b((v16i8) hz_out5, (v16i8) hz_out3, 8);
553 LD_SB2(src, src_stride, src7, src8);
554 src += (2 * src_stride);
559 hz_out6 = (v8i16) __msa_sldi_b((v16i8) hz_out7, (v16i8) hz_out5, 8);
561 out2 = (v8i16) __msa_ilvev_b((v16i8) hz_out5, (v16i8) hz_out4);
562 tmp0 =
DPADD_SH3_SH(out0, out1, out2, filt_vt0, filt_vt1, filt_vt2);
564 out3 = (v8i16) __msa_ilvev_b((v16i8) hz_out7, (v16i8) hz_out6);
565 tmp1 =
DPADD_SH3_SH(out1, out2, out3, filt_vt0, filt_vt1, filt_vt2);
570 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
571 dst += (4 * dst_stride);
581 int height,
int mx,
int my)
586 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
587 v16i8 filt_hz0, filt_hz1, filt_hz2;
588 v16u8 mask0, mask1, mask2, vec0, vec1;
589 v8i16
filt, filt_vt0, filt_vt1, filt_vt2;
590 v8i16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5, hz_out6;
591 v8i16 hz_out7, hz_out8, out0, out1, out2, out3, out4, out5, out6, out7;
592 v8i16 tmp0, tmp1, tmp2, tmp3;
595 src -= (2 + 2 * src_stride);
598 filt =
LD_SH(filter_horiz);
599 SPLATI_H3_SB(filt, 0, 1, 2, filt_hz0, filt_hz1, filt_hz2);
604 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
605 src += (5 * src_stride);
619 filt =
LD_SH(filter_vert);
620 SPLATI_H3_SH(filt, 0, 1, 2, filt_vt0, filt_vt1, filt_vt2);
622 ILVEV_B2_SH(hz_out0, hz_out1, hz_out2, hz_out3, out0, out1);
623 ILVEV_B2_SH(hz_out1, hz_out2, hz_out3, hz_out4, out3, out4);
625 for (loop_cnt = (height >> 2); loop_cnt--;) {
626 LD_SB4(src, src_stride, src5, src6, src7, src8);
627 src += (4 * src_stride);
632 out2 = (v8i16) __msa_ilvev_b((v16i8) hz_out5, (v16i8) hz_out4);
633 tmp0 =
DPADD_SH3_SH(out0, out1, out2, filt_vt0, filt_vt1, filt_vt2);
637 out5 = (v8i16) __msa_ilvev_b((v16i8) hz_out6, (v16i8) hz_out5);
638 tmp1 =
DPADD_SH3_SH(out3, out4, out5, filt_vt0, filt_vt1, filt_vt2);
642 out7 = (v8i16) __msa_ilvev_b((v16i8) hz_out7, (v16i8) hz_out6);
643 tmp2 =
DPADD_SH3_SH(out1, out2, out7, filt_vt0, filt_vt1, filt_vt2);
647 out6 = (v8i16) __msa_ilvev_b((v16i8) hz_out8, (v16i8) hz_out7);
648 tmp3 =
DPADD_SH3_SH(out4, out5, out6, filt_vt0, filt_vt1, filt_vt2);
654 ST8x4_UB(vec0, vec1, dst, dst_stride);
655 dst += (4 * dst_stride);
668 int height,
int mx,
int my)
672 for (multiple8_cnt = 2; multiple8_cnt--;) {
685 v16i8
src0,
src1, src2, src3, filt0, filt1, mask0, mask1;
686 v8i16
filt, out0, out1;
693 filt =
LD_SH(filter);
698 LD_SB4(src, src_stride, src0, src1, src2, src3);
701 filt0, filt1, out0, out1);
705 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
712 v16i8
src0,
src1, src2, src3, filt0, filt1, mask0, mask1;
714 v8i16
filt, out0, out1, out2, out3;
720 filt =
LD_SH(filter);
725 LD_SB4(src, src_stride, src0, src1, src2, src3);
726 src += (4 * src_stride);
730 filt0, filt1, out0, out1);
731 LD_SB4(src, src_stride, src0, src1, src2, src3);
734 filt0, filt1, out2, out3);
738 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
739 dst += (4 * dst_stride);
741 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
748 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
749 v16i8 filt0, filt1, mask0, mask1;
751 v8i16
filt, out0, out1, out2, out3;
757 filt =
LD_SH(filter);
762 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
763 src += (8 * src_stride);
766 filt0, filt1, out0, out1);
768 filt0, filt1, out2, out3);
772 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
773 dst += (4 * dst_stride);
775 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
776 dst += (4 * dst_stride);
778 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
779 src += (8 * src_stride);
782 filt0, filt1, out0, out1);
784 filt0, filt1, out2, out3);
788 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
789 dst += (4 * dst_stride);
791 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
796 int height,
int mx,
int my)
802 }
else if (8 == height) {
804 }
else if (16 == height) {
811 int height,
int mx,
int my)
815 v16i8
src0,
src1, src2, src3, filt0, filt1, mask0, mask1;
817 v8i16
filt, out0, out1, out2, out3;
823 filt =
LD_SH(filter);
828 for (loop_cnt = (height >> 2); loop_cnt--;) {
829 LD_SB4(src, src_stride, src0, src1, src2, src3);
830 src += (4 * src_stride);
834 filt1, out0, out1, out2, out3);
839 ST8x4_UB(tmp0, tmp1, dst, dst_stride);
840 dst += (4 * dst_stride);
846 int height,
int mx,
int my)
850 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7;
851 v16i8 filt0, filt1, mask0, mask1;
852 v8i16
filt, out0, out1, out2, out3, out4, out5, out6, out7;
859 filt =
LD_SH(filter);
864 for (loop_cnt = (height >> 2); loop_cnt--;) {
865 LD_SB4(src, src_stride, src0, src2, src4, src6);
866 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
867 src += (4 * src_stride);
871 filt1, out0, out1, out2, out3);
873 filt1, out4, out5, out6, out7);
895 int height,
int mx,
int my)
899 v16i8
src0,
src1, src2, src3, src4, src5;
900 v16i8 src10_r, src32_r, src54_r, src21_r, src43_r, src65_r;
901 v16i8 src2110, src4332, filt0, filt1;
902 v8i16
filt, out10, out32;
907 filt =
LD_SH(filter);
910 LD_SB3(src, src_stride, src0, src1, src2);
911 src += (3 * src_stride);
913 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
915 src2110 = (v16i8) __msa_ilvr_d((v2i64) src21_r, (v2i64) src10_r);
916 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
918 for (loop_cnt = (height >> 2); loop_cnt--;) {
919 LD_SB3(src, src_stride, src3, src4, src5);
920 src += (3 * src_stride);
921 ILVR_B2_SB(src3, src2, src4, src3, src32_r, src43_r);
922 src4332 = (v16i8) __msa_ilvr_d((v2i64) src43_r, (v2i64) src32_r);
923 src4332 = (v16i8) __msa_xori_b((v16u8) src4332, 128);
928 ILVR_B2_SB(src5, src4, src2, src5, src54_r, src65_r);
929 src2110 = (v16i8) __msa_ilvr_d((v2i64) src65_r, (v2i64) src54_r);
930 src2110 = (v16i8) __msa_xori_b((v16u8) src2110, 128);
935 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
936 dst += (4 * dst_stride);
942 int height,
int mx,
int my)
946 v16i8
src0,
src1, src2, src7, src8, src9, src10;
947 v16i8 src10_r, src72_r, src98_r, src21_r, src87_r, src109_r, filt0, filt1;
949 v8i16
filt, out0_r, out1_r, out2_r, out3_r;
953 filt =
LD_SH(filter);
956 LD_SB3(src, src_stride, src0, src1, src2);
957 src += (3 * src_stride);
960 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
962 for (loop_cnt = (height >> 2); loop_cnt--;) {
963 LD_SB4(src, src_stride, src7, src8, src9, src10);
964 src += (4 * src_stride);
967 ILVR_B4_SB(src7, src2, src8, src7, src9, src8, src10, src9,
968 src72_r, src87_r, src98_r, src109_r);
974 SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
977 ST8x4_UB(tmp0, tmp1, dst, dst_stride);
978 dst += (4 * dst_stride);
988 int height,
int mx,
int my)
992 v16i8
src0,
src1, src2, src3, src4, src5, src6;
993 v16i8 src10_r, src32_r, src54_r, src21_r, src43_r, src65_r, src10_l;
994 v16i8 src32_l, src54_l, src21_l, src43_l, src65_l, filt0, filt1;
995 v16u8 tmp0, tmp1, tmp2, tmp3;
996 v8i16
filt, out0_r, out1_r, out2_r, out3_r, out0_l, out1_l, out2_l, out3_l;
1000 filt =
LD_SH(filter);
1003 LD_SB3(src, src_stride, src0, src1, src2);
1004 src += (3 * src_stride);
1007 ILVR_B2_SB(src1, src0, src2, src1, src10_r, src21_r);
1008 ILVL_B2_SB(src1, src0, src2, src1, src10_l, src21_l);
1010 for (loop_cnt = (height >> 2); loop_cnt--;) {
1011 LD_SB4(src, src_stride, src3, src4, src5, src6);
1012 src += (4 * src_stride);
1015 ILVR_B4_SB(src3, src2, src4, src3, src5, src4, src6, src5,
1016 src32_r, src43_r, src54_r, src65_r);
1017 ILVL_B4_SB(src3, src2, src4, src3, src5, src4, src6, src5,
1018 src32_l, src43_l, src54_l, src65_l);
1029 SAT_SH4_SH(out0_r, out1_r, out2_r, out3_r, 7);
1030 SAT_SH4_SH(out0_l, out1_l, out2_l, out3_l, 7);
1031 PCKEV_B4_UB(out0_l, out0_r, out1_l, out1_r, out2_l, out2_r, out3_l,
1032 out3_r, tmp0, tmp1, tmp2, tmp3);
1034 ST_UB4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride);
1035 dst += (4 * dst_stride);
1047 int height,
int mx,
int my)
1052 v16i8
src0,
src1, src2, src3, src4, src5, src6, filt_hz0, filt_hz1;
1053 v16u8 mask0, mask1,
out;
1054 v8i16
filt, filt_vt0, filt_vt1, tmp0, tmp1, vec0, vec1, vec2;
1055 v8i16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5;
1058 src -= (1 + 1 * src_stride);
1061 filt =
LD_SH(filter_horiz);
1066 LD_SB3(src, src_stride, src0, src1, src2);
1067 src += (3 * src_stride);
1070 hz_out0 =
HORIZ_4TAP_FILT(src0, src1, mask0, mask1, filt_hz0, filt_hz1);
1071 hz_out1 =
HORIZ_4TAP_FILT(src1, src2, mask0, mask1, filt_hz0, filt_hz1);
1072 vec0 = (v8i16) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
1074 filt =
LD_SH(filter_vert);
1077 for (loop_cnt = (height >> 2); loop_cnt--;) {
1078 LD_SB4(src, src_stride, src3, src4, src5, src6);
1079 src += (4 * src_stride);
1082 hz_out3 =
HORIZ_4TAP_FILT(src3, src4, mask0, mask1, filt_hz0, filt_hz1);
1083 hz_out2 = (v8i16) __msa_sldi_b((v16i8) hz_out3, (v16i8) hz_out1, 8);
1084 vec1 = (v8i16) __msa_ilvev_b((v16i8) hz_out3, (v16i8) hz_out2);
1088 hz_out5 =
HORIZ_4TAP_FILT(src5, src6, mask0, mask1, filt_hz0, filt_hz1);
1089 hz_out4 = (v8i16) __msa_sldi_b((v16i8) hz_out5, (v16i8) hz_out3, 8);
1090 vec2 = (v8i16) __msa_ilvev_b((v16i8) hz_out5, (v16i8) hz_out4);
1096 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
1097 dst += (4 * dst_stride);
1106 int height,
int mx,
int my)
1111 v16i8
src0,
src1, src2, src3, src4, src5, src6, filt_hz0, filt_hz1;
1112 v16u8 mask0, mask1, out0, out1;
1113 v8i16
filt, filt_vt0, filt_vt1, tmp0, tmp1, tmp2, tmp3;
1114 v8i16 hz_out0, hz_out1, hz_out2, hz_out3;
1115 v8i16 vec0, vec1, vec2, vec3, vec4;
1118 src -= (1 + 1 * src_stride);
1121 filt =
LD_SH(filter_horiz);
1126 LD_SB3(src, src_stride, src0, src1, src2);
1127 src += (3 * src_stride);
1130 hz_out0 =
HORIZ_4TAP_FILT(src0, src0, mask0, mask1, filt_hz0, filt_hz1);
1131 hz_out1 =
HORIZ_4TAP_FILT(src1, src1, mask0, mask1, filt_hz0, filt_hz1);
1132 hz_out2 =
HORIZ_4TAP_FILT(src2, src2, mask0, mask1, filt_hz0, filt_hz1);
1133 ILVEV_B2_SH(hz_out0, hz_out1, hz_out1, hz_out2, vec0, vec2);
1135 filt =
LD_SH(filter_vert);
1138 for (loop_cnt = (height >> 2); loop_cnt--;) {
1139 LD_SB4(src, src_stride, src3, src4, src5, src6);
1140 src += (4 * src_stride);
1143 hz_out3 =
HORIZ_4TAP_FILT(src3, src3, mask0, mask1, filt_hz0, filt_hz1);
1144 vec1 = (v8i16) __msa_ilvev_b((v16i8) hz_out3, (v16i8) hz_out2);
1147 hz_out0 =
HORIZ_4TAP_FILT(src4, src4, mask0, mask1, filt_hz0, filt_hz1);
1148 vec3 = (v8i16) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out3);
1151 hz_out1 =
HORIZ_4TAP_FILT(src5, src5, mask0, mask1, filt_hz0, filt_hz1);
1152 vec4 = (v8i16) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
1155 hz_out2 =
HORIZ_4TAP_FILT(src6, src6, mask0, mask1, filt_hz0, filt_hz1);
1156 ILVEV_B2_SH(hz_out3, hz_out0, hz_out1, hz_out2, vec0, vec1);
1163 ST8x4_UB(out0, out1, dst, dst_stride);
1164 dst += (4 * dst_stride);
1173 int height,
int mx,
int my)
1177 for (multiple8_cnt = 2; multiple8_cnt--;) {
1188 int height,
int mx,
int my)
1193 v16i8
src0,
src1, src2, src3, src4, src5, src6;
1194 v16i8 filt_hz0, filt_hz1, filt_hz2;
1195 v16u8 res0, res1, mask0, mask1, mask2;
1196 v8i16
filt, filt_vt0, filt_vt1, tmp0, tmp1, vec0, vec1, vec2;
1197 v8i16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5;
1200 src -= (2 + 1 * src_stride);
1203 filt =
LD_SH(filter_horiz);
1204 SPLATI_H3_SB(filt, 0, 1, 2, filt_hz0, filt_hz1, filt_hz2);
1209 LD_SB3(src, src_stride, src0, src1, src2);
1210 src += (3 * src_stride);
1214 filt_hz1, filt_hz2);
1216 filt_hz1, filt_hz2);
1217 vec0 = (v8i16) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
1219 filt =
LD_SH(filter_vert);
1222 for (loop_cnt = (height >> 2); loop_cnt--;) {
1223 LD_SB4(src, src_stride, src3, src4, src5, src6);
1224 src += (4 * src_stride);
1228 filt_hz1, filt_hz2);
1229 hz_out2 = (v8i16) __msa_sldi_b((v16i8) hz_out3, (v16i8) hz_out1, 8);
1230 vec1 = (v8i16) __msa_ilvev_b((v16i8) hz_out3, (v16i8) hz_out2);
1234 filt_hz1, filt_hz2);
1235 hz_out4 = (v8i16) __msa_sldi_b((v16i8) hz_out5, (v16i8) hz_out3, 8);
1236 vec2 = (v8i16) __msa_ilvev_b((v16i8) hz_out5, (v16i8) hz_out4);
1243 ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride);
1244 dst += (4 * dst_stride);
1253 int height,
int mx,
int my)
1258 v16i8
src0,
src1, src2, src3, src4, src5, src6;
1259 v16i8 filt_hz0, filt_hz1, filt_hz2, mask0, mask1, mask2;
1260 v8i16
filt, filt_vt0, filt_vt1, hz_out0, hz_out1, hz_out2, hz_out3;
1261 v8i16 tmp0, tmp1, tmp2, tmp3, vec0, vec1, vec2, vec3;
1265 src -= (2 + src_stride);
1268 filt =
LD_SH(filter_horiz);
1269 SPLATI_H3_SB(filt, 0, 1, 2, filt_hz0, filt_hz1, filt_hz2);
1274 LD_SB3(src, src_stride, src0, src1, src2);
1275 src += (3 * src_stride);
1279 filt_hz1, filt_hz2);
1281 filt_hz1, filt_hz2);
1283 filt_hz1, filt_hz2);
1284 ILVEV_B2_SH(hz_out0, hz_out1, hz_out1, hz_out2, vec0, vec2);
1286 filt =
LD_SH(filter_vert);
1289 for (loop_cnt = (height >> 2); loop_cnt--;) {
1290 LD_SB4(src, src_stride, src3, src4, src5, src6);
1291 src += (4 * src_stride);
1296 filt_hz1, filt_hz2);
1297 vec1 = (v8i16) __msa_ilvev_b((v16i8) hz_out3, (v16i8) hz_out2);
1301 filt_hz1, filt_hz2);
1302 vec3 = (v8i16) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out3);
1306 filt_hz1, filt_hz2);
1307 vec0 = (v8i16) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
1311 filt_hz1, filt_hz2);
1312 ILVEV_B2_SH(hz_out3, hz_out0, hz_out1, hz_out2, vec1, vec2);
1319 ST8x4_UB(out0, out1, dst, dst_stride);
1320 dst += (4 * dst_stride);
1326 int height,
int mx,
int my)
1330 for (multiple8_cnt = 2; multiple8_cnt--;) {
1341 int height,
int mx,
int my)
1346 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
1347 v16i8 filt_hz0, filt_hz1, mask0, mask1;
1349 v8i16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5, hz_out6;
1350 v8i16 hz_out7, tmp0, tmp1, out0, out1, out2, out3;
1351 v8i16
filt, filt_vt0, filt_vt1, filt_vt2;
1355 src -= (1 + 2 * src_stride);
1358 filt =
LD_SH(filter_horiz);
1363 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1364 src += (5 * src_stride);
1367 hz_out0 =
HORIZ_4TAP_FILT(src0, src1, mask0, mask1, filt_hz0, filt_hz1);
1368 hz_out2 =
HORIZ_4TAP_FILT(src2, src3, mask0, mask1, filt_hz0, filt_hz1);
1369 hz_out3 =
HORIZ_4TAP_FILT(src3, src4, mask0, mask1, filt_hz0, filt_hz1);
1370 hz_out1 = (v8i16) __msa_sldi_b((v16i8) hz_out2, (v16i8) hz_out0, 8);
1371 ILVEV_B2_SH(hz_out0, hz_out1, hz_out2, hz_out3, out0, out1);
1373 filt =
LD_SH(filter_vert);
1374 SPLATI_H3_SH(filt, 0, 1, 2, filt_vt0, filt_vt1, filt_vt2);
1376 for (loop_cnt = (height >> 2); loop_cnt--;) {
1377 LD_SB4(src, src_stride, src5, src6, src7, src8);
1379 src += (4 * src_stride);
1381 hz_out5 =
HORIZ_4TAP_FILT(src5, src6, mask0, mask1, filt_hz0, filt_hz1);
1382 hz_out4 = (v8i16) __msa_sldi_b((v16i8) hz_out5, (v16i8) hz_out3, 8);
1383 out2 = (v8i16) __msa_ilvev_b((v16i8) hz_out5, (v16i8) hz_out4);
1384 tmp0 =
DPADD_SH3_SH(out0, out1, out2, filt_vt0, filt_vt1, filt_vt2);
1386 hz_out7 =
HORIZ_4TAP_FILT(src7, src8, mask0, mask1, filt_hz0, filt_hz1);
1387 hz_out6 = (v8i16) __msa_sldi_b((v16i8) hz_out7, (v16i8) hz_out5, 8);
1388 out3 = (v8i16) __msa_ilvev_b((v16i8) hz_out7, (v16i8) hz_out6);
1389 tmp1 =
DPADD_SH3_SH(out1, out2, out3, filt_vt0, filt_vt1, filt_vt2);
1394 ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride);
1395 dst += (4 * dst_stride);
1405 int height,
int mx,
int my)
1410 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
1411 v16i8 filt_hz0, filt_hz1, mask0, mask1;
1412 v8i16
filt, filt_vt0, filt_vt1, filt_vt2, tmp0, tmp1, tmp2, tmp3;
1413 v8i16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5, hz_out6;
1414 v8i16 hz_out7, hz_out8, out0, out1, out2, out3, out4, out5, out6, out7;
1418 src -= (1 + 2 * src_stride);
1421 filt =
LD_SH(filter_horiz);
1426 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1427 src += (5 * src_stride);
1430 hz_out0 =
HORIZ_4TAP_FILT(src0, src0, mask0, mask1, filt_hz0, filt_hz1);
1431 hz_out1 =
HORIZ_4TAP_FILT(src1, src1, mask0, mask1, filt_hz0, filt_hz1);
1432 hz_out2 =
HORIZ_4TAP_FILT(src2, src2, mask0, mask1, filt_hz0, filt_hz1);
1433 hz_out3 =
HORIZ_4TAP_FILT(src3, src3, mask0, mask1, filt_hz0, filt_hz1);
1434 hz_out4 =
HORIZ_4TAP_FILT(src4, src4, mask0, mask1, filt_hz0, filt_hz1);
1435 ILVEV_B2_SH(hz_out0, hz_out1, hz_out2, hz_out3, out0, out1);
1436 ILVEV_B2_SH(hz_out1, hz_out2, hz_out3, hz_out4, out3, out4);
1438 filt =
LD_SH(filter_vert);
1439 SPLATI_H3_SH(filt, 0, 1, 2, filt_vt0, filt_vt1, filt_vt2);
1441 for (loop_cnt = (height >> 2); loop_cnt--;) {
1442 LD_SB4(src, src_stride, src5, src6, src7, src8);
1443 src += (4 * src_stride);
1447 hz_out5 =
HORIZ_4TAP_FILT(src5, src5, mask0, mask1, filt_hz0, filt_hz1);
1448 out2 = (v8i16) __msa_ilvev_b((v16i8) hz_out5, (v16i8) hz_out4);
1449 tmp0 =
DPADD_SH3_SH(out0, out1, out2, filt_vt0, filt_vt1, filt_vt2);
1451 hz_out6 =
HORIZ_4TAP_FILT(src6, src6, mask0, mask1, filt_hz0, filt_hz1);
1452 out5 = (v8i16) __msa_ilvev_b((v16i8) hz_out6, (v16i8) hz_out5);
1453 tmp1 =
DPADD_SH3_SH(out3, out4, out5, filt_vt0, filt_vt1, filt_vt2);
1455 hz_out7 =
HORIZ_4TAP_FILT(src7, src7, mask0, mask1, filt_hz0, filt_hz1);
1456 out6 = (v8i16) __msa_ilvev_b((v16i8) hz_out7, (v16i8) hz_out6);
1457 tmp2 =
DPADD_SH3_SH(out1, out2, out6, filt_vt0, filt_vt1, filt_vt2);
1459 hz_out8 =
HORIZ_4TAP_FILT(src8, src8, mask0, mask1, filt_hz0, filt_hz1);
1460 out7 = (v8i16) __msa_ilvev_b((v16i8) hz_out8, (v16i8) hz_out7);
1461 tmp3 =
DPADD_SH3_SH(out4, out5, out7, filt_vt0, filt_vt1, filt_vt2);
1467 ST8x4_UB(vec0, vec1, dst, dst_stride);
1468 dst += (4 * dst_stride);
1480 int height,
int mx,
int my)
1484 for (multiple8_cnt = 2; multiple8_cnt--;) {
1498 v16u8 filt0, vec0, vec1, res0, res1;
1499 v8u16 vec2, vec3,
filt;
1504 filt =
LD_UH(filter);
1505 filt0 = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1507 LD_SB4(src, src_stride, src0, src1, src2, src3);
1508 VSHF_B2_UB(src0, src1, src2, src3, mask, mask, vec0, vec1);
1509 DOTP_UB2_UH(vec0, vec1, filt0, filt0, vec2, vec3);
1512 ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride);
1519 v16u8 vec0, vec1, vec2, vec3, filt0;
1520 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7,
mask;
1521 v16i8 res0, res1, res2, res3;
1522 v8u16 vec4, vec5, vec6, vec7,
filt;
1527 filt =
LD_UH(filter);
1528 filt0 = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1530 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
1531 VSHF_B2_UB(src0, src1, src2, src3, mask, mask, vec0, vec1);
1532 VSHF_B2_UB(src4, src5, src6, src7, mask, mask, vec2, vec3);
1533 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1534 vec4, vec5, vec6, vec7);
1536 PCKEV_B4_SB(vec4, vec4, vec5, vec5, vec6, vec6, vec7, vec7,
1537 res0, res1, res2, res3);
1538 ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride);
1539 dst += (4 * dst_stride);
1540 ST4x4_UB(res2, res3, 0, 1, 0, 1, dst, dst_stride);
1545 int height,
int mx,
int my)
1551 }
else if (8 == height) {
1562 v8u16 vec0, vec1, vec2, vec3,
filt;
1567 filt =
LD_UH(filter);
1568 filt0 = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1570 LD_SB4(src, src_stride, src0, src1, src2, src3);
1571 VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1);
1572 VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3);
1573 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1574 vec0, vec1, vec2, vec3);
1577 ST8x4_UB(src0, src1, dst, dst_stride);
1586 v8u16 vec0, vec1, vec2, vec3,
filt;
1591 filt =
LD_UH(filter);
1592 filt0 = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1594 LD_SB4(src, src_stride, src0, src1, src2, src3);
1595 src += (4 * src_stride);
1597 VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1);
1598 VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3);
1599 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1600 vec0, vec1, vec2, vec3);
1603 LD_SB4(src, src_stride, src0, src1, src2, src3);
1604 src += (4 * src_stride);
1607 ST8x4_UB(out0, out1, dst, dst_stride);
1608 dst += (4 * dst_stride);
1610 VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1);
1611 VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3);
1612 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1613 vec0, vec1, vec2, vec3);
1616 ST8x4_UB(out0, out1, dst, dst_stride);
1617 dst += (4 * dst_stride);
1620 LD_SB4(src, src_stride, src0, src1, src2, src3);
1621 src += (4 * src_stride);
1623 VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1);
1624 VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3);
1625 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1626 vec0, vec1, vec2, vec3);
1628 LD_SB4(src, src_stride, src0, src1, src2, src3);
1629 src += (4 * src_stride);
1632 ST8x4_UB(out0, out1, dst, dst_stride);
1634 VSHF_B2_UH(src0, src0, src1, src1, mask, mask, vec0, vec1);
1635 VSHF_B2_UH(src2, src2, src3, src3, mask, mask, vec2, vec3);
1636 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1637 vec0, vec1, vec2, vec3);
1640 ST8x4_UB(out0, out1, dst + 4 * dst_stride, dst_stride);
1646 int height,
int mx,
int my)
1660 int height,
int mx,
int my)
1664 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7,
mask;
1665 v16u8 filt0, vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
1666 v8u16 out0, out1, out2, out3, out4, out5, out6, out7,
filt;
1670 loop_cnt = (height >> 2) - 1;
1673 filt =
LD_UH(filter);
1674 filt0 = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1676 LD_SB4(src, src_stride, src0, src2, src4, src6);
1677 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
1678 src += (4 * src_stride);
1680 VSHF_B2_UB(src0, src0, src1, src1, mask, mask, vec0, vec1);
1681 VSHF_B2_UB(src2, src2, src3, src3, mask, mask, vec2, vec3);
1682 VSHF_B2_UB(src4, src4, src5, src5, mask, mask, vec4, vec5);
1683 VSHF_B2_UB(src6, src6, src7, src7, mask, mask, vec6, vec7);
1684 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1685 out0, out1, out2, out3);
1686 DOTP_UB4_UH(vec4, vec5, vec6, vec7, filt0, filt0, filt0, filt0,
1687 out4, out5, out6, out7);
1699 for (; loop_cnt--;) {
1700 LD_SB4(src, src_stride, src0, src2, src4, src6);
1701 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
1702 src += (4 * src_stride);
1704 VSHF_B2_UB(src0, src0, src1, src1, mask, mask, vec0, vec1);
1705 VSHF_B2_UB(src2, src2, src3, src3, mask, mask, vec2, vec3);
1706 VSHF_B2_UB(src4, src4, src5, src5, mask, mask, vec4, vec5);
1707 VSHF_B2_UB(src6, src6, src7, src7, mask, mask, vec6, vec7);
1708 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1709 out0, out1, out2, out3);
1710 DOTP_UB4_UH(vec4, vec5, vec6, vec7, filt0, filt0, filt0, filt0,
1711 out4, out5, out6, out7);
1729 v16i8
src0,
src1, src2, src3, src4;
1730 v16i8 src10_r, src32_r, src21_r, src43_r, src2110, src4332;
1735 filt =
LD_SH(filter);
1736 filt0 = (v16u8) __msa_splati_h(filt, 0);
1738 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1739 src += (5 * src_stride);
1741 ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3,
1742 src10_r, src21_r, src32_r, src43_r);
1743 ILVR_D2_SB(src21_r, src10_r, src43_r, src32_r, src2110, src4332);
1744 DOTP_UB2_UH(src2110, src4332, filt0, filt0, tmp0, tmp1);
1747 src2110 = __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
1748 ST4x4_UB(src2110, src2110, 0, 1, 2, 3, dst, dst_stride);
1755 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
1756 v16i8 src10_r, src32_r, src54_r, src76_r, src21_r, src43_r;
1757 v16i8 src65_r, src87_r, src2110, src4332, src6554, src8776;
1758 v8u16 tmp0, tmp1, tmp2, tmp3;
1762 filt =
LD_SH(filter);
1763 filt0 = (v16u8) __msa_splati_h(filt, 0);
1765 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
1766 src += (8 * src_stride);
1771 ILVR_B4_SB(src1, src0, src2, src1, src3, src2, src4, src3, src10_r, src21_r,
1773 ILVR_B4_SB(src5, src4, src6, src5, src7, src6, src8, src7, src54_r, src65_r,
1775 ILVR_D4_SB(src21_r, src10_r, src43_r, src32_r, src65_r, src54_r,
1776 src87_r, src76_r, src2110, src4332, src6554, src8776);
1777 DOTP_UB4_UH(src2110, src4332, src6554, src8776, filt0, filt0, filt0, filt0,
1778 tmp0, tmp1, tmp2, tmp3);
1781 PCKEV_B2_SB(tmp1, tmp0, tmp3, tmp2, src2110, src4332);
1782 ST4x4_UB(src2110, src2110, 0, 1, 2, 3, dst, dst_stride);
1783 ST4x4_UB(src4332, src4332, 0, 1, 2, 3, dst + 4 * dst_stride, dst_stride);
1788 int height,
int mx,
int my)
1794 }
else if (8 == height) {
1803 v16u8
src0,
src1, src2, src3, src4, vec0, vec1, vec2, vec3, filt0;
1805 v8u16 tmp0, tmp1, tmp2, tmp3;
1809 filt =
LD_SH(filter);
1810 filt0 = (v16u8) __msa_splati_h(filt, 0);
1812 LD_UB5(src, src_stride, src0, src1, src2, src3, src4);
1813 ILVR_B2_UB(src1, src0, src2, src1, vec0, vec1);
1814 ILVR_B2_UB(src3, src2, src4, src3, vec2, vec3);
1815 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1816 tmp0, tmp1, tmp2, tmp3);
1820 ST8x4_UB(out0, out1, dst, dst_stride);
1828 v16u8
src0,
src1, src2, src3, src4, src5, src6, src7, src8;
1829 v16u8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, filt0;
1831 v8u16 tmp0, tmp1, tmp2, tmp3;
1835 filt =
LD_SH(filter);
1836 filt0 = (v16u8) __msa_splati_h(filt, 0);
1841 for (loop_cnt = (height >> 3); loop_cnt--;) {
1842 LD_UB8(src, src_stride, src1, src2, src3, src4, src5, src6, src7, src8);
1843 src += (8 * src_stride);
1845 ILVR_B4_UB(src1, src0, src2, src1, src3, src2, src4, src3,
1846 vec0, vec1, vec2, vec3);
1847 ILVR_B4_UB(src5, src4, src6, src5, src7, src6, src8, src7,
1848 vec4, vec5, vec6, vec7);
1849 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt0, filt0, filt0, filt0,
1850 tmp0, tmp1, tmp2, tmp3);
1854 ST8x4_UB(out0, out1, dst, dst_stride);
1855 dst += (4 * dst_stride);
1857 DOTP_UB4_UH(vec4, vec5, vec6, vec7, filt0, filt0, filt0, filt0,
1858 tmp0, tmp1, tmp2, tmp3);
1862 ST8x4_UB(out0, out1, dst, dst_stride);
1863 dst += (4 * dst_stride);
1871 int height,
int mx,
int my)
1885 int height,
int mx,
int my)
1889 v16u8
src0,
src1, src2, src3, src4;
1890 v16u8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, filt0;
1891 v8u16 tmp0, tmp1, tmp2, tmp3;
1895 filt =
LD_SH(filter);
1896 filt0 = (v16u8) __msa_splati_h(filt, 0);
1901 for (loop_cnt = (height >> 2); loop_cnt--;) {
1902 LD_UB4(src, src_stride, src1, src2, src3, src4);
1903 src += (4 * src_stride);
1905 ILVR_B2_UB(src1, src0, src2, src1, vec0, vec2);
1906 ILVL_B2_UB(src1, src0, src2, src1, vec1, vec3);
1907 DOTP_UB2_UH(vec0, vec1, filt0, filt0, tmp0, tmp1);
1913 ILVR_B2_UB(src3, src2, src4, src3, vec4, vec6);
1914 ILVL_B2_UB(src3, src2, src4, src3, vec5, vec7);
1915 DOTP_UB2_UH(vec2, vec3, filt0, filt0, tmp2, tmp3);
1921 DOTP_UB2_UH(vec4, vec5, filt0, filt0, tmp0, tmp1);
1927 DOTP_UB2_UH(vec6, vec7, filt0, filt0, tmp2, tmp3);
1939 const int8_t *filter_horiz,
1940 const int8_t *filter_vert)
1943 v16u8 filt_vt, filt_hz, vec0, vec1, res0, res1;
1944 v8u16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4,
filt, tmp0, tmp1;
1949 filt =
LD_UH(filter_horiz);
1950 filt_hz = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1952 filt =
LD_UH(filter_vert);
1953 filt_vt = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1955 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
1959 hz_out1 = (v8u16) __msa_sldi_b((v16i8) hz_out2, (v16i8) hz_out0, 8);
1960 hz_out3 = (v8u16) __msa_pckod_d((v2i64) hz_out4, (v2i64) hz_out2);
1962 ILVEV_B2_UB(hz_out0, hz_out1, hz_out2, hz_out3, vec0, vec1);
1963 DOTP_UB2_UH(vec0, vec1, filt_vt, filt_vt, tmp0, tmp1);
1967 ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride);
1972 const int8_t *filter_horiz,
1973 const int8_t *filter_vert)
1975 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7, src8,
mask;
1976 v16i8 res0, res1, res2, res3;
1977 v16u8 filt_hz, filt_vt, vec0, vec1, vec2, vec3;
1978 v8u16 hz_out0, hz_out1, hz_out2, hz_out3, hz_out4, hz_out5, hz_out6;
1979 v8u16 hz_out7, hz_out8, vec4, vec5, vec6, vec7,
filt;
1984 filt =
LD_UH(filter_horiz);
1985 filt_hz = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1987 filt =
LD_UH(filter_vert);
1988 filt_vt = (v16u8) __msa_splati_h((v8i16)
filt, 0);
1990 LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
1991 src += (8 * src_stride);
1999 SLDI_B3_UH(hz_out2, hz_out4, hz_out6, hz_out0, hz_out2, hz_out4, hz_out1,
2000 hz_out3, hz_out5, 8);
2001 hz_out7 = (v8u16) __msa_pckod_d((v2i64) hz_out8, (v2i64) hz_out6);
2003 ILVEV_B2_UB(hz_out0, hz_out1, hz_out2, hz_out3, vec0, vec1);
2004 ILVEV_B2_UB(hz_out4, hz_out5, hz_out6, hz_out7, vec2, vec3);
2005 DOTP_UB4_UH(vec0, vec1, vec2, vec3, filt_vt, filt_vt, filt_vt, filt_vt,
2006 vec4, vec5, vec6, vec7);
2009 PCKEV_B4_SB(vec4, vec4, vec5, vec5, vec6, vec6, vec7, vec7,
2010 res0, res1, res2, res3);
2011 ST4x4_UB(res0, res1, 0, 1, 0, 1, dst, dst_stride);
2012 dst += (4 * dst_stride);
2013 ST4x4_UB(res2, res3, 0, 1, 0, 1, dst, dst_stride);
2018 int height,
int mx,
int my)
2025 filter_horiz, filter_vert);
2026 }
else if (8 == height) {
2028 filter_horiz, filter_vert);
2034 const int8_t *filter_horiz,
2035 const int8_t *filter_vert)
2038 v16u8 filt_hz, filt_vt, vec0, vec1, vec2, vec3;
2039 v8u16 hz_out0, hz_out1, tmp0, tmp1, tmp2, tmp3;
2045 filt =
LD_SH(filter_horiz);
2046 filt_hz = (v16u8) __msa_splati_h(filt, 0);
2048 filt =
LD_SH(filter_vert);
2049 filt_vt = (v16u8) __msa_splati_h(filt, 0);
2051 LD_SB5(src, src_stride, src0, src1, src2, src3, src4);
2055 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
2056 tmp0 = __msa_dotp_u_h(vec0, filt_vt);
2059 vec1 = (v16u8) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out1);
2060 tmp1 = __msa_dotp_u_h(vec1, filt_vt);
2063 vec2 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
2064 tmp2 = __msa_dotp_u_h(vec2, filt_vt);
2067 vec3 = (v16u8) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out1);
2068 tmp3 = __msa_dotp_u_h(vec3, filt_vt);
2073 ST8x4_UB(out0, out1, dst, dst_stride);
2078 const int8_t *filter_horiz,
2079 const int8_t *filter_vert,
2084 v16u8 filt_hz, filt_vt, vec0;
2085 v8u16 hz_out0, hz_out1, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8;
2091 filt =
LD_SH(filter_horiz);
2092 filt_hz = (v16u8) __msa_splati_h(filt, 0);
2094 filt =
LD_SH(filter_vert);
2095 filt_vt = (v16u8) __msa_splati_h(filt, 0);
2102 for (loop_cnt = (height >> 3); loop_cnt--;) {
2103 LD_SB4(src, src_stride, src1, src2, src3, src4);
2104 src += (4 * src_stride);
2107 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
2108 tmp1 = __msa_dotp_u_h(vec0, filt_vt);
2111 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out1);
2112 tmp2 = __msa_dotp_u_h(vec0, filt_vt);
2118 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
2119 tmp3 = __msa_dotp_u_h(vec0, filt_vt);
2122 LD_SB4(src, src_stride, src1, src2, src3, src4);
2123 src += (4 * src_stride);
2124 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out1);
2125 tmp4 = __msa_dotp_u_h(vec0, filt_vt);
2130 ST8x4_UB(out0, out1, dst, dst_stride);
2131 dst += (4 * dst_stride);
2134 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
2135 tmp5 = __msa_dotp_u_h(vec0, filt_vt);
2138 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out1);
2139 tmp6 = __msa_dotp_u_h(vec0, filt_vt);
2142 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out1, (v16i8) hz_out0);
2143 tmp7 = __msa_dotp_u_h(vec0, filt_vt);
2146 vec0 = (v16u8) __msa_ilvev_b((v16i8) hz_out0, (v16i8) hz_out1);
2147 tmp8 = __msa_dotp_u_h(vec0, filt_vt);
2152 ST8x4_UB(out0, out1, dst, dst_stride);
2153 dst += (4 * dst_stride);
2159 int height,
int mx,
int my)
2166 filter_horiz, filter_vert);
2169 filter_horiz, filter_vert, height);
2175 int height,
int mx,
int my)
2180 v16i8
src0,
src1, src2, src3, src4, src5, src6, src7,
mask;
2181 v16u8 filt_hz, filt_vt, vec0, vec1;
2182 v8u16 tmp1, tmp2, hz_out0, hz_out1, hz_out2, hz_out3;
2188 filt =
LD_SH(filter_horiz);
2189 filt_hz = (v16u8) __msa_splati_h(filt, 0);
2191 filt =
LD_SH(filter_vert);
2192 filt_vt = (v16u8) __msa_splati_h(filt, 0);
2194 LD_SB2(src, 8, src0, src1);
2201 for (loop_cnt = (height >> 2); loop_cnt--;) {
2202 LD_SB4(src, src_stride, src0, src2, src4, src6);
2203 LD_SB4(src + 8, src_stride, src1, src3, src5, src7);
2204 src += (4 * src_stride);
2208 ILVEV_B2_UB(hz_out0, hz_out1, hz_out2, hz_out3, vec0, vec1);
2209 DOTP_UB2_UH(vec0, vec1, filt_vt, filt_vt, tmp1, tmp2);
2217 ILVEV_B2_UB(hz_out1, hz_out0, hz_out3, hz_out2, vec0, vec1);
2218 DOTP_UB2_UH(vec0, vec1, filt_vt, filt_vt, tmp1, tmp2);
2226 ILVEV_B2_UB(hz_out0, hz_out1, hz_out2, hz_out3, vec0, vec1);
2227 DOTP_UB2_UH(vec0, vec1, filt_vt, filt_vt, tmp1, tmp2);
2235 ILVEV_B2_UB(hz_out1, hz_out0, hz_out3, hz_out2, vec0, vec1);
2236 DOTP_UB2_UH(vec0, vec1, filt_vt, filt_vt, tmp1, tmp2);
2246 int height,
int mx,
int my)
2249 uint64_t out0, out1, out2, out3, out4, out5, out6, out7;
2250 v16u8
src0,
src1, src2, src3, src4, src5, src6, src7;
2252 if (0 == height % 8) {
2253 for (cnt = height >> 3; cnt--;) {
2255 src0, src1, src2, src3, src4, src5, src6, src7);
2256 src += (8 * src_stride);
2258 out0 = __msa_copy_u_d((v2i64) src0, 0);
2259 out1 = __msa_copy_u_d((v2i64) src1, 0);
2260 out2 = __msa_copy_u_d((v2i64) src2, 0);
2261 out3 = __msa_copy_u_d((v2i64) src3, 0);
2262 out4 = __msa_copy_u_d((v2i64) src4, 0);
2263 out5 = __msa_copy_u_d((v2i64) src5, 0);
2264 out6 = __msa_copy_u_d((v2i64) src6, 0);
2265 out7 = __msa_copy_u_d((v2i64) src7, 0);
2267 SD4(out0, out1, out2, out3, dst, dst_stride);
2268 dst += (4 * dst_stride);
2269 SD4(out4, out5, out6, out7, dst, dst_stride);
2270 dst += (4 * dst_stride);
2272 }
else if (0 == height % 4) {
2273 for (cnt = (height / 4); cnt--;) {
2274 LD_UB4(src, src_stride, src0, src1, src2, src3);
2275 src += (4 * src_stride);
2276 out0 = __msa_copy_u_d((v2i64) src0, 0);
2277 out1 = __msa_copy_u_d((v2i64) src1, 0);
2278 out2 = __msa_copy_u_d((v2i64) src2, 0);
2279 out3 = __msa_copy_u_d((v2i64) src3, 0);
2281 SD4(out0, out1, out2, out3, dst, dst_stride);
2282 dst += (4 * dst_stride);
2293 v16u8
src0,
src1, src2, src3, src4, src5, src6, src7;
2295 for (cnt = (width >> 4); cnt--;) {
2299 for (loop_cnt = (height >> 3); loop_cnt--;) {
2300 LD_UB8(src_tmp, src_stride,
2301 src0, src1, src2, src3, src4, src5, src6, src7);
2302 src_tmp += (8 * src_stride);
2304 ST_UB8(src0, src1, src2, src3, src4, src5, src6, src7,
2305 dst_tmp, dst_stride);
2306 dst_tmp += (8 * dst_stride);
2316 int height,
int mx,
int my)
2321 if (0 == height % 8) {
2323 }
else if (0 == height % 4) {
2324 for (cnt = (height >> 2); cnt--;) {
2325 LD_UB4(src, src_stride, src0, src1, src2, src3);
2326 src += (4 * src_stride);
2328 ST_UB4(src0, src1, src2, src3, dst, dst_stride);
2329 dst += (4 * dst_stride);
void ff_put_vp8_epel4_h6v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hz_4t_4x16_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
void ff_put_vp8_bilinear8_h_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define XORI_B5_128_SB(...)
#define XORI_B8_128_SB(...)
#define HORIZ_4TAP_8WID_4VECS_FILT(src0, src1, src2, src3,mask0, mask1, filt0, filt1,out0, out1, out2, out3)
#define SPLATI_H3_SH(...)
void ff_put_vp8_epel16_h4v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hz_2t_4x8_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
static void common_hz_4t_4x8_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
static void common_vt_2t_4x8_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
#define XORI_B2_128_SB(...)
#define PCKEV_XORI128_UB(in0, in1)
#define XORI_B3_128_SB(...)
#define FILT_4TAP_DPADD_S_H(vec0, vec1, filt0, filt1)
void ff_put_vp8_pixels8_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel4_h4v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel8_h4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define HORIZ_6TAP_4WID_4VECS_FILT(src0, src1, src2, src3,mask0, mask1, mask2,filt0, filt1, filt2,out0, out1)
#define SPLATI_H2_SH(...)
#define ST4x4_UB(in0, in1, idx0, idx1, idx2, idx3, pdst, stride)
static void common_vt_2t_8x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
void ff_put_vp8_bilinear4_hv_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define DPADD_SH3_SH(in0, in1, in2, coeff0, coeff1, coeff2)
#define XORI_B4_128_UB(...)
static void common_hv_2ht_2vt_8x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_horiz, const int8_t *filter_vert)
void ff_put_vp8_epel8_v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel16_v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define PCKEV_ST_SB(in0, in1, pdst)
void ff_put_vp8_epel16_h4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel4_v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
VP8 compatible video decoder.
static void common_vt_2t_4x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
static void common_vt_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define XORI_B2_128_UB(...)
void ff_put_vp8_epel16_h6v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static const int8_t bilinear_filters_msa[7][2]
void ff_put_vp8_bilinear16_hv_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hz_2t_4x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
static void copy_16multx8mult_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, int32_t height, int32_t width)
void ff_put_vp8_bilinear8_v_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hv_2ht_2vt_8x8mult_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_horiz, const int8_t *filter_vert, int32_t height)
void ff_put_vp8_epel16_h4v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static const int8_t subpel_filters_msa[7][8]
void ff_put_vp8_epel8_v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static const uint16_t mask[17]
static void common_hz_4t_4x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
#define SPLATI_H2_SB(...)
void ff_put_vp8_epel8_h6v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define XORI_B4_128_SB(...)
#define HORIZ_6TAP_FILT(src0, src1, mask0, mask1, mask2,filt_h0, filt_h1, filt_h2)
#define HORIZ_4TAP_4WID_4VECS_FILT(src0, src1, src2, src3,mask0, mask1, filt0, filt1,out0, out1)
void ff_put_vp8_bilinear4_h_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_bilinear4_v_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_pixels16_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel8_h4v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_bilinear8_hv_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define HORIZ_2TAP_FILT_UH(in0, in1, mask, coeff, shift)
static const uint8_t mc_filt_mask_arr[16 *3]
void ff_put_vp8_epel4_h6v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_bilinear16_h_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel16_v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define HORIZ_4TAP_FILT(src0, src1, mask0, mask1, filt_h0, filt_h1)
static void common_hz_6t_4x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
void ff_put_vp8_epel4_h4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel16_h6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
#define HORIZ_6TAP_8WID_4VECS_FILT(src0, src1, src2, src3,mask0, mask1, mask2,filt0, filt1, filt2,out0, out1, out2, out3)
void ff_put_vp8_epel8_h6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel8_h4v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
BYTE int const BYTE int int int height
static void common_hz_2t_8x8mult_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter, int32_t height)
#define SD4(in0, in1, in2, in3, pdst, stride)
static const int8_t filt[NUMTAPS]
void ff_put_vp8_epel16_h6v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
#define ST8x4_UB(in0, in1, pdst, stride)
#define SPLATI_H3_SB(...)
static void common_hz_6t_4x8_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> out
void ff_put_vp8_epel8_h6v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hv_2ht_2vt_4x8_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_horiz, const int8_t *filter_vert)
void ff_put_vp8_bilinear16_v_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hz_2t_8x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter)
void ff_put_vp8_epel4_v4_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
void ff_put_vp8_epel4_h6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)
static void common_hv_2ht_2vt_4x4_msa(uint8_t *src, int32_t src_stride, uint8_t *dst, int32_t dst_stride, const int8_t *filter_horiz, const int8_t *filter_vert)
void ff_put_vp8_epel4_h4v6_msa(uint8_t *dst, ptrdiff_t dst_stride, uint8_t *src, ptrdiff_t src_stride, int height, int mx, int my)