28 uint32_t tp0, tp1, offset_val;
31 v8i16 src0_r, tmp0, wgt, denom,
offset;
33 offset_val = (unsigned) offset_in << log2_denom;
35 wgt = __msa_fill_h(src_weight);
36 offset = __msa_fill_h(offset_val);
37 denom = __msa_fill_h(log2_denom);
41 src0_r = (v8i16) __msa_ilvr_b((v16i8)
zero, (v16i8)
src0);
43 tmp0 = __msa_adds_s_h(tmp0,
offset);
44 tmp0 = __msa_maxi_s_h(tmp0, 0);
45 tmp0 = __msa_srlr_h(tmp0, denom);
46 tmp0 = (v8i16) __msa_sat_u_h((v8u16) tmp0, 7);
47 src0 = (v16u8) __msa_pckev_b((v16i8) tmp0, (v16i8) tmp0);
55 uint32_t tp0, tp1, tp2, tp3, offset_val;
57 v8i16 src0_r, src1_r, tmp0, tmp1, wgt, denom,
offset;
59 offset_val = (unsigned) offset_in << log2_denom;
61 wgt = __msa_fill_h(src_weight);
62 offset = __msa_fill_h(offset_val);
63 denom = __msa_fill_h(log2_denom);
68 MUL2(wgt, src0_r, wgt, src1_r, tmp0, tmp1);
71 tmp0 = __msa_srlr_h(tmp0, denom);
72 tmp1 = __msa_srlr_h(tmp1, denom);
74 src0 = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
82 uint32_t tp0, tp1, tp2, tp3, offset_val;
84 v8i16 src0_r, src1_r, src2_r, src3_r, tmp0, tmp1, tmp2, tmp3;
87 offset_val = (unsigned) offset_in << log2_denom;
89 wgt = __msa_fill_h(src_weight);
90 offset = __msa_fill_h(offset_val);
91 denom = __msa_fill_h(log2_denom);
99 MUL4(wgt, src0_r, wgt, src1_r, wgt, src2_r, wgt, src3_r, tmp0, tmp1, tmp2,
107 ST_W8(
src0,
src1, 0, 1, 2, 3, 0, 1, 2, 3,
data,
stride);
115 uint64_t tp0, tp1, tp2, tp3;
117 v8i16 src0_r, src1_r, src2_r, src3_r, tmp0, tmp1, tmp2, tmp3;
120 offset_val = (unsigned) offset_in << log2_denom;
122 wgt = __msa_fill_h(src_weight);
123 offset = __msa_fill_h(offset_val);
124 denom = __msa_fill_h(log2_denom);
131 MUL4(wgt, src0_r, wgt, src1_r, wgt, src2_r, wgt, src3_r, tmp0, tmp1, tmp2,
146 uint64_t tp0, tp1, tp2, tp3;
147 v16u8
src0 = { 0 },
src1 = { 0 },
src2 = { 0 }, src3 = { 0 };
148 v8i16 src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, src6_r, src7_r;
149 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
152 offset_val = (unsigned) offset_in << log2_denom;
154 wgt = __msa_fill_h(src_weight);
155 offset = __msa_fill_h(offset_val);
156 denom = __msa_fill_h(log2_denom);
168 MUL4(wgt, src0_r, wgt, src1_r, wgt, src2_r, wgt, src3_r, tmp0, tmp1, tmp2,
170 MUL4(wgt, src4_r, wgt, src5_r, wgt, src6_r, wgt, src7_r, tmp4, tmp5, tmp6,
176 MAXI_SH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 0);
177 SRLR_H8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom);
178 SAT_UH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 7);
179 PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6,
src0,
src1,
181 ST_D8(
src0,
src1,
src2, src3, 0, 1, 0, 1, 0, 1, 0, 1,
data,
stride);
188 uint32_t offset_val, cnt;
189 uint64_t tp0, tp1, tp2, tp3;
190 v16u8
src0 = { 0 },
src1 = { 0 },
src2 = { 0 }, src3 = { 0 };
191 v8i16 src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, src6_r, src7_r;
192 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
195 offset_val = (unsigned) offset_in << log2_denom;
197 wgt = __msa_fill_h(src_weight);
198 offset = __msa_fill_h(offset_val);
199 denom = __msa_fill_h(log2_denom);
201 for (cnt = 2; cnt--;) {
212 MUL4(wgt, src0_r, wgt, src1_r, wgt, src2_r, wgt, src3_r, tmp0, tmp1,
214 MUL4(wgt, src4_r, wgt, src5_r, wgt, src6_r, wgt, src7_r, tmp4, tmp5,
217 tmp0, tmp1, tmp2, tmp3);
219 tmp4, tmp5, tmp6, tmp7);
220 MAXI_SH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 0);
221 SRLR_H8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom);
222 SAT_UH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 7);
223 PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6,
src0,
src1,
225 ST_D8(
src0,
src1,
src2, src3, 0, 1, 0, 1, 0, 1, 0, 1,
data,
stride);
235 v16i8 src_wgt, dst_wgt, wgt, vec0;
236 v16u8
src0 = { 0 }, dst0 = { 0 };
237 v8i16 tmp0, denom,
offset,
zero = { 0 }, max255 = __msa_ldi_h(255);
239 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
240 offset_in += (128 * (src_weight + dst_weight));
242 src_wgt = __msa_fill_b(src_weight);
243 dst_wgt = __msa_fill_b(dst_weight);
244 offset = __msa_fill_h(offset_in);
245 denom = __msa_fill_h(log2_denom + 1);
247 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
254 vec0 = (v16i8) __msa_ilvr_b((v16i8) dst0, (v16i8)
src0);
255 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
256 tmp0 = __msa_adds_s_h(tmp0,
offset);
258 tmp0 = __msa_maxi_s_h(tmp0, 0);
259 tmp0 = __msa_min_s_h(max255, tmp0);
260 dst0 = (v16u8) __msa_pckev_b((v16i8) tmp0, (v16i8) tmp0);
268 uint32_t tp0, tp1, tp2, tp3;
269 v16i8 src_wgt, dst_wgt, wgt, vec0, vec1;
271 v8i16 tmp0, tmp1, denom,
offset,
zero = { 0 };
273 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
274 offset_in += (128 * (src_weight + dst_weight));
276 src_wgt = __msa_fill_b(src_weight);
277 dst_wgt = __msa_fill_b(dst_weight);
278 offset = __msa_fill_h(offset_in);
279 denom = __msa_fill_h(log2_denom + 1);
281 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
289 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
290 tmp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
291 tmp0 = __msa_adds_s_h(tmp0,
offset);
292 tmp1 = __msa_adds_s_h(tmp1,
offset);
296 dst0 = (v16u8) __msa_pckev_b((v16i8) tmp1, (v16i8) tmp0);
304 uint32_t tp0, tp1, tp2, tp3;
305 v16i8 src_wgt, dst_wgt, wgt, vec0, vec1, vec2, vec3;
307 v8i16 tmp0, tmp1, tmp2, tmp3, denom,
offset,
zero = { 0 };
309 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
310 offset_in += (128 * (src_weight + dst_weight));
312 src_wgt = __msa_fill_b(src_weight);
313 dst_wgt = __msa_fill_b(dst_weight);
314 offset = __msa_fill_h(offset_in);
315 denom = __msa_fill_h(log2_denom + 1);
316 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
330 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
331 tmp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
332 tmp2 = __msa_dpadd_s_h(
zero, wgt, vec2);
333 tmp3 = __msa_dpadd_s_h(
zero, wgt, vec3);
334 tmp0 = __msa_adds_s_h(tmp0,
offset);
335 tmp1 = __msa_adds_s_h(tmp1,
offset);
336 tmp2 = __msa_adds_s_h(tmp2,
offset);
337 tmp3 = __msa_adds_s_h(tmp3,
offset);
338 SRA_4V(tmp0, tmp1, tmp2, tmp3, denom);
341 ST_W8(dst0, dst1, 0, 1, 2, 3, 0, 1, 2, 3,
dst,
stride);
348 uint64_t tp0, tp1, tp2, tp3;
349 v16i8 src_wgt, dst_wgt, wgt, vec0, vec1, vec2, vec3;
351 v8i16 tmp0, tmp1, tmp2, tmp3, denom,
offset,
zero = { 0 };
353 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
354 offset_in += (128 * (src_weight + dst_weight));
356 src_wgt = __msa_fill_b(src_weight);
357 dst_wgt = __msa_fill_b(dst_weight);
358 offset = __msa_fill_h(offset_in);
359 denom = __msa_fill_h(log2_denom + 1);
361 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
372 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
373 tmp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
374 tmp2 = __msa_dpadd_s_h(
zero, wgt, vec2);
375 tmp3 = __msa_dpadd_s_h(
zero, wgt, vec3);
376 tmp0 = __msa_adds_s_h(tmp0,
offset);
377 tmp1 = __msa_adds_s_h(tmp1,
offset);
378 tmp2 = __msa_adds_s_h(tmp2,
offset);
379 tmp3 = __msa_adds_s_h(tmp3,
offset);
380 SRA_4V(tmp0, tmp1, tmp2, tmp3, denom);
390 uint64_t tp0, tp1, tp2, tp3;
391 v16i8 src_wgt, dst_wgt, wgt, vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
393 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom,
offset,
396 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
397 offset_in += (128 * (src_weight + dst_weight));
399 src_wgt = __msa_fill_b(src_weight);
400 dst_wgt = __msa_fill_b(dst_weight);
401 offset = __msa_fill_h(offset_in);
402 denom = __msa_fill_h(log2_denom + 1);
403 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
422 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
423 tmp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
424 tmp2 = __msa_dpadd_s_h(
zero, wgt, vec2);
425 tmp3 = __msa_dpadd_s_h(
zero, wgt, vec3);
426 tmp4 = __msa_dpadd_s_h(
zero, wgt, vec4);
427 tmp5 = __msa_dpadd_s_h(
zero, wgt, vec5);
428 tmp6 = __msa_dpadd_s_h(
zero, wgt, vec6);
429 tmp7 = __msa_dpadd_s_h(
zero, wgt, vec7);
430 tmp0 = __msa_adds_s_h(tmp0,
offset);
431 tmp1 = __msa_adds_s_h(tmp1,
offset);
432 tmp2 = __msa_adds_s_h(tmp2,
offset);
433 tmp3 = __msa_adds_s_h(tmp3,
offset);
434 tmp4 = __msa_adds_s_h(tmp4,
offset);
435 tmp5 = __msa_adds_s_h(tmp5,
offset);
436 tmp6 = __msa_adds_s_h(tmp6,
offset);
437 tmp7 = __msa_adds_s_h(tmp7,
offset);
438 SRA_4V(tmp0, tmp1, tmp2, tmp3, denom);
439 SRA_4V(tmp4, tmp5, tmp6, tmp7, denom);
443 ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1,
dst,
stride);
451 uint64_t tp0, tp1, tp2, tp3;
452 v16i8 src_wgt, dst_wgt, wgt;
454 v16u8 dst0, dst1, dst2, dst3;
455 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
456 v8i16 temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
460 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
461 offset_in += (128 * (src_weight + dst_weight));
463 src_wgt = __msa_fill_b(src_weight);
464 dst_wgt = __msa_fill_b(dst_weight);
465 offset = __msa_fill_h(offset_in);
466 denom = __msa_fill_h(log2_denom + 1);
467 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
469 for (cnt = 2; cnt--;) {
487 vec0, vec2, vec4, vec6);
489 vec1, vec3, vec5, vec7);
491 temp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
492 temp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
493 temp2 = __msa_dpadd_s_h(
zero, wgt, vec2);
494 temp3 = __msa_dpadd_s_h(
zero, wgt, vec3);
495 temp4 = __msa_dpadd_s_h(
zero, wgt, vec4);
496 temp5 = __msa_dpadd_s_h(
zero, wgt, vec5);
497 temp6 = __msa_dpadd_s_h(
zero, wgt, vec6);
498 temp7 = __msa_dpadd_s_h(
zero, wgt, vec7);
499 temp0 = __msa_adds_s_h(temp0,
offset);
500 temp1 = __msa_adds_s_h(temp1,
offset);
501 temp2 = __msa_adds_s_h(temp2,
offset);
502 temp3 = __msa_adds_s_h(temp3,
offset);
503 temp4 = __msa_adds_s_h(temp4,
offset);
504 temp5 = __msa_adds_s_h(temp5,
offset);
505 temp6 = __msa_adds_s_h(temp6,
offset);
506 temp7 = __msa_adds_s_h(temp7,
offset);
508 SRA_4V(temp0, temp1, temp2, temp3, denom);
509 SRA_4V(temp4, temp5, temp6, temp7, denom);
510 CLIP_SH8_0_255(temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7);
511 PCKEV_B4_UB(temp1, temp0, temp3, temp2, temp5, temp4, temp7, temp6,
512 dst0, dst1, dst2, dst3);
513 ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1,
dst,
stride);
518#define AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_or_q3_org_in, p0_or_q0_org_in, \
519 q3_or_p3_org_in, p1_or_q1_org_in, \
520 p2_or_q2_org_in, q1_or_p1_org_in, \
521 p0_or_q0_out, p1_or_q1_out, p2_or_q2_out) \
524 v8i16 const3 = __msa_ldi_h(3); \
526 threshold = (p0_or_q0_org_in) + (q3_or_p3_org_in); \
527 threshold += (p1_or_q1_org_in); \
529 (p0_or_q0_out) = threshold << 1; \
530 (p0_or_q0_out) += (p2_or_q2_org_in); \
531 (p0_or_q0_out) += (q1_or_p1_org_in); \
532 (p0_or_q0_out) = __msa_srari_h((p0_or_q0_out), 3); \
534 (p1_or_q1_out) = (p2_or_q2_org_in) + threshold; \
535 (p1_or_q1_out) = __msa_srari_h((p1_or_q1_out), 2); \
537 (p2_or_q2_out) = (p2_or_q2_org_in) * const3; \
538 (p2_or_q2_out) += (p3_or_q3_org_in); \
539 (p2_or_q2_out) += (p3_or_q3_org_in); \
540 (p2_or_q2_out) += threshold; \
541 (p2_or_q2_out) = __msa_srari_h((p2_or_q2_out), 3); \
545#define AVC_LPF_P0_OR_Q0(p0_or_q0_org_in, q1_or_p1_org_in, \
546 p1_or_q1_org_in, p0_or_q0_out) \
548 (p0_or_q0_out) = (p0_or_q0_org_in) + (q1_or_p1_org_in); \
549 (p0_or_q0_out) += (p1_or_q1_org_in); \
550 (p0_or_q0_out) += (p1_or_q1_org_in); \
551 (p0_or_q0_out) = __msa_srari_h((p0_or_q0_out), 2); \
554#define AVC_LPF_P1_OR_Q1(p0_or_q0_org_in, q0_or_p0_org_in, \
555 p1_or_q1_org_in, p2_or_q2_org_in, \
556 negate_tc_in, tc_in, p1_or_q1_out) \
560 clip3 = (v8i16) __msa_aver_u_h((v8u16) p0_or_q0_org_in, \
561 (v8u16) q0_or_p0_org_in); \
562 temp = p1_or_q1_org_in << 1; \
563 clip3 = clip3 - temp; \
564 clip3 = __msa_ave_s_h(p2_or_q2_org_in, clip3); \
565 CLIP_SH(clip3, negate_tc_in, tc_in); \
566 p1_or_q1_out = p1_or_q1_org_in + clip3; \
569#define AVC_LPF_P0Q0(q0_or_p0_org_in, p0_or_q0_org_in, \
570 p1_or_q1_org_in, q1_or_p1_org_in, \
571 negate_threshold_in, threshold_in, \
572 p0_or_q0_out, q0_or_p0_out) \
574 v8i16 q0_sub_p0, p1_sub_q1, delta; \
576 q0_sub_p0 = q0_or_p0_org_in - p0_or_q0_org_in; \
577 p1_sub_q1 = p1_or_q1_org_in - q1_or_p1_org_in; \
580 delta = q0_sub_p0 + p1_sub_q1; \
583 CLIP_SH(delta, negate_threshold_in, threshold_in); \
585 p0_or_q0_out = p0_or_q0_org_in + delta; \
586 q0_or_p0_out = q0_or_p0_org_in - delta; \
588 CLIP_SH2_0_255(p0_or_q0_out, q0_or_p0_out); \
591#define AVC_LPF_H_CHROMA_422(src, stride, tc_val, alpha, beta, res) \
593 uint32_t load0, load1, load2, load3; \
594 v16u8 src0 = { 0 }; \
595 v16u8 src1 = { 0 }; \
596 v16u8 src2 = { 0 }; \
597 v16u8 src3 = { 0 }; \
598 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0; \
599 v16u8 is_less_than, is_less_than_alpha, is_less_than_beta; \
600 v8i16 tc, q0_sub_p0, p1_sub_q1, delta; \
601 v8i16 res0_r, res1_r; \
602 v16i8 zeros = { 0 }; \
605 LW4((src - 2), stride, load0, load1, load2, load3); \
606 src0 = (v16u8) __msa_insert_w((v4i32) src0, 0, load0); \
607 src1 = (v16u8) __msa_insert_w((v4i32) src1, 0, load1); \
608 src2 = (v16u8) __msa_insert_w((v4i32) src2, 0, load2); \
609 src3 = (v16u8) __msa_insert_w((v4i32) src3, 0, load3); \
611 TRANSPOSE4x4_UB_UB(src0, src1, src2, src3, src0, src1, src2, src3); \
613 p0_asub_q0 = __msa_asub_u_b(src2, src1); \
614 p1_asub_p0 = __msa_asub_u_b(src1, src0); \
615 q1_asub_q0 = __msa_asub_u_b(src2, src3); \
617 tc = __msa_fill_h(tc_val); \
619 is_less_than_alpha = (p0_asub_q0 < alpha); \
620 is_less_than_beta = (p1_asub_p0 < beta); \
621 is_less_than = is_less_than_alpha & is_less_than_beta; \
622 is_less_than_beta = (q1_asub_q0 < beta); \
623 is_less_than = is_less_than_beta & is_less_than; \
625 ILVR_B2_SH(src2, src1, src0, src3, q0_sub_p0, p1_sub_q1); \
626 HSUB_UB2_SH(q0_sub_p0, p1_sub_q1, q0_sub_p0, p1_sub_q1); \
629 delta = q0_sub_p0 + p1_sub_q1; \
630 delta = __msa_srari_h(delta, 3); \
632 CLIP_SH(delta, -tc, tc); \
634 ILVR_B2_SH(zeros, src1, zeros, src2, res0_r, res1_r); \
639 CLIP_SH2_0_255(res0_r, res1_r); \
640 PCKEV_B2_UB(res0_r, res0_r, res1_r, res1_r, res0, res1); \
642 res0 = __msa_bmnz_v(src1, res0, is_less_than); \
643 res1 = __msa_bmnz_v(src2, res1, is_less_than); \
645 res = (v16u8) __msa_ilvr_b((v16i8) res1, (v16i8) res0); \
648#define TRANSPOSE2x4_B_UB(in0, in1, out0, out1, out2, out3) \
650 v16i8 zero_m = { 0 }; \
652 out0 = (v16u8) __msa_ilvr_b((v16i8) in1, (v16i8) in0); \
653 out1 = (v16u8) __msa_sldi_b(zero_m, (v16i8) out0, 2); \
654 SLDI_B2_UB(zero_m, out1, zero_m, out2, 2, out2, out3); \
657#define AVC_LPF_H_2BYTE_CHROMA_422(src, stride, tc_val, alpha, beta, res) \
659 uint32_t load0, load1; \
660 v16u8 src0 = { 0 }; \
661 v16u8 src1 = { 0 }; \
662 v16u8 src2 = { 0 }; \
663 v16u8 src3 = { 0 }; \
664 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0; \
665 v16u8 is_less_than, is_less_than_alpha, is_less_than_beta; \
666 v8i16 tc, q0_sub_p0, p1_sub_q1, delta, res0_r, res1_r; \
667 v16i8 zeros = { 0 }; \
670 load0 = LW(src - 2); \
671 load1 = LW(src - 2 + stride); \
673 src0 = (v16u8) __msa_insert_w((v4i32) src0, 0, load0); \
674 src1 = (v16u8) __msa_insert_w((v4i32) src1, 0, load1); \
676 TRANSPOSE2x4_B_UB(src0, src1, src0, src1, src2, src3); \
678 p0_asub_q0 = __msa_asub_u_b(src2, src1); \
679 p1_asub_p0 = __msa_asub_u_b(src1, src0); \
680 q1_asub_q0 = __msa_asub_u_b(src2, src3); \
682 tc = __msa_fill_h(tc_val); \
684 is_less_than_alpha = (p0_asub_q0 < alpha); \
685 is_less_than_beta = (p1_asub_p0 < beta); \
686 is_less_than = is_less_than_alpha & is_less_than_beta; \
687 is_less_than_beta = (q1_asub_q0 < beta); \
688 is_less_than = is_less_than_beta & is_less_than; \
690 ILVR_B2_SH(src2, src1, src0, src3, q0_sub_p0, p1_sub_q1); \
691 HSUB_UB2_SH(q0_sub_p0, p1_sub_q1, q0_sub_p0, p1_sub_q1); \
694 delta = q0_sub_p0 + p1_sub_q1; \
695 delta = __msa_srari_h(delta, 3); \
696 CLIP_SH(delta, -tc, tc); \
698 ILVR_B2_SH(zeros, src1, zeros, src2, res0_r, res1_r); \
703 CLIP_SH2_0_255(res0_r, res1_r); \
704 PCKEV_B2_UB(res0_r, res0_r, res1_r, res1_r, res0, res1); \
706 res0 = __msa_bmnz_v(src1, res0, is_less_than); \
707 res1 = __msa_bmnz_v(src2, res1, is_less_than); \
709 res = (v16u8) __msa_ilvr_b((v16i8) res1, (v16i8) res0); \
717 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0;
718 v16u8 is_less_than, is_less_than_beta, is_less_than_alpha;
719 v16u8 p1_org, p0_org, q0_org, q1_org;
721 LD_UB4(
data - (img_width << 1), img_width, p1_org, p0_org, q0_org, q1_org);
723 p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org);
724 p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org);
725 q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org);
727 is_less_than_alpha = (p0_asub_q0 < alpha_in);
728 is_less_than_beta = (p1_asub_p0 < beta_in);
729 is_less_than = is_less_than_beta & is_less_than_alpha;
730 is_less_than_beta = (q1_asub_q0 < beta_in);
731 is_less_than = is_less_than_beta & is_less_than;
733 if (!__msa_test_bz_v(is_less_than)) {
734 v16u8 p2_asub_p0, q2_asub_q0, p0,
q0, negate_is_less_than_beta;
740 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
741 v8i16 p1_org_l, p0_org_l, q0_org_l, q1_org_l;
742 v16u8 q2_org =
LD_UB(
data + (2 * img_width));
743 v16u8 p2_org =
LD_UB(
data - (3 * img_width));
744 v16u8 tmp_flag = (v16u8)__msa_fill_b((alpha_in >> 2) + 2);
750 tmp_flag = (p0_asub_q0 < tmp_flag);
752 p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org);
753 is_less_than_beta = (p2_asub_p0 < beta_in);
754 is_less_than_beta = is_less_than_beta & tmp_flag;
755 negate_is_less_than_beta = __msa_xori_b(is_less_than_beta, 0xff);
756 is_less_than_beta = is_less_than_beta & is_less_than;
757 negate_is_less_than_beta = negate_is_less_than_beta & is_less_than;
759 q1_org_r = (v8i16) __msa_ilvr_b(
zero, (v16i8) q1_org);
760 q1_org_l = (v8i16) __msa_ilvl_b(
zero, (v16i8) q1_org);
763 if (!__msa_test_bz_v(is_less_than_beta)) {
764 v8i16 p3_org_l, p3_org_r;
765 v16u8 p3_org =
LD_UB(
data - (img_width << 2));
774 p2_r, q1_org_r, p0_r, p1_r, p2_r);
778 p2_l, q1_org_l, p0_l, p1_l, p2_l);
780 PCKEV_B3_UB(p0_l, p0_r, p1_l, p1_r, p2_l, p2_r, p0, p1, p2);
782 p0_org = __msa_bmnz_v(p0_org, p0, is_less_than_beta);
783 p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta);
784 p2_org = __msa_bmnz_v(p2_org, p2, is_less_than_beta);
794 p0 = (v16u8) __msa_pckev_b((v16i8) p0_l, (v16i8) p0_r);
795 p0_org = __msa_bmnz_v(p0_org, p0, negate_is_less_than_beta);
800 q2_asub_q0 = __msa_asub_u_b(q2_org, q0_org);
801 is_less_than_beta = (q2_asub_q0 < beta_in);
802 is_less_than_beta = is_less_than_beta & tmp_flag;
803 negate_is_less_than_beta = __msa_xori_b(is_less_than_beta, 0xff);
804 is_less_than_beta = is_less_than_beta & is_less_than;
805 negate_is_less_than_beta = negate_is_less_than_beta & is_less_than;
808 if (!__msa_test_bz_v(is_less_than_beta)) {
809 v8i16 q3_org_r, q3_org_l;
810 v16u8 q3_org =
LD_UB(
data + (3 * img_width));
819 q2_r, p1_org_r, q0_r, q1_r, q2_r);
823 q2_l, p1_org_l, q0_l, q1_l, q2_l);
826 q0_org = __msa_bmnz_v(q0_org,
q0, is_less_than_beta);
827 q1_org = __msa_bmnz_v(q1_org,
q1, is_less_than_beta);
828 q2_org = __msa_bmnz_v(q2_org, q2, is_less_than_beta);
838 q0 = (v16u8) __msa_pckev_b((v16i8) q0_l, (v16i8) q0_r);
839 q0_org = __msa_bmnz_v(q0_org,
q0, negate_is_less_than_beta);
851 v16u8
alpha, beta, p0_asub_q0;
852 v16u8 is_less_than_alpha, is_less_than, is_less_than_beta;
853 v16u8 p3_org, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org, q3_org;
854 v16u8 p1_asub_p0, q1_asub_q0;
858 v16u8 row0, row1, row2, row3, row4, row5, row6, row7;
859 v16u8 row8, row9, row10, row11, row12, row13, row14, row15;
861 LD_UB8(
src, img_width, row0, row1, row2, row3, row4, row5, row6, row7);
863 row8, row9, row10, row11, row12, row13, row14, row15);
866 row4, row5, row6, row7,
867 row8, row9, row10, row11,
868 row12, row13, row14, row15,
869 p3_org, p2_org, p1_org, p0_org,
870 q0_org, q1_org, q2_org, q3_org);
873 p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org);
874 p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org);
875 q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org);
877 alpha = (v16u8) __msa_fill_b(alpha_in);
878 beta = (v16u8) __msa_fill_b(beta_in);
880 is_less_than_alpha = (p0_asub_q0 <
alpha);
881 is_less_than_beta = (p1_asub_p0 < beta);
882 is_less_than = is_less_than_beta & is_less_than_alpha;
883 is_less_than_beta = (q1_asub_q0 < beta);
884 is_less_than = is_less_than_beta & is_less_than;
886 if (!__msa_test_bz_v(is_less_than)) {
892 v16u8 tmp_flag, p0,
q0, p2_asub_p0, q2_asub_q0;
893 v16u8 negate_is_less_than_beta;
894 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
895 v8i16 p1_org_l, p0_org_l, q0_org_l, q1_org_l;
902 tmp_flag =
alpha >> 2;
903 tmp_flag = tmp_flag + 2;
904 tmp_flag = (p0_asub_q0 < tmp_flag);
906 p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org);
907 is_less_than_beta = (p2_asub_p0 < beta);
908 is_less_than_beta = tmp_flag & is_less_than_beta;
909 negate_is_less_than_beta = __msa_xori_b(is_less_than_beta, 0xff);
910 is_less_than_beta = is_less_than_beta & is_less_than;
911 negate_is_less_than_beta = negate_is_less_than_beta & is_less_than;
913 if (!__msa_test_bz_v(is_less_than_beta)) {
915 v8i16 p3_org_r, p3_org_l;
923 p2_r, q1_org_r, p0_r, p1_r, p2_r);
927 p2_l, q1_org_l, p0_l, p1_l, p2_l);
929 PCKEV_B3_UB(p0_l, p0_r, p1_l, p1_r, p2_l, p2_r, p0, p1, p2);
930 p0_org = __msa_bmnz_v(p0_org, p0, is_less_than_beta);
931 p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta);
932 p2_org = __msa_bmnz_v(p2_org, p2, is_less_than_beta);
938 p0 = (v16u8) __msa_pckev_b((v16i8) p0_l, (v16i8) p0_r);
939 p0_org = __msa_bmnz_v(p0_org, p0, negate_is_less_than_beta);
941 q2_asub_q0 = __msa_asub_u_b(q2_org, q0_org);
942 is_less_than_beta = (q2_asub_q0 < beta);
944 is_less_than_beta = is_less_than_beta & tmp_flag;
945 negate_is_less_than_beta = __msa_xori_b(is_less_than_beta, 0xff);
947 is_less_than_beta = is_less_than_beta & is_less_than;
948 negate_is_less_than_beta = negate_is_less_than_beta & is_less_than;
950 if (!__msa_test_bz_v(is_less_than_beta)) {
952 v8i16 q3_org_r, q3_org_l;
960 q2_r, p1_org_r, q0_r, q1_r, q2_r);
964 q2_l, p1_org_l, q0_l, q1_l, q2_l);
967 q0_org = __msa_bmnz_v(q0_org,
q0, is_less_than_beta);
968 q1_org = __msa_bmnz_v(q1_org,
q1, is_less_than_beta);
969 q2_org = __msa_bmnz_v(q2_org, q2, is_less_than_beta);
975 q0 = (v16u8) __msa_pckev_b((v16i8) q0_l, (v16i8) q0_r);
976 q0_org = __msa_bmnz_v(q0_org,
q0, negate_is_less_than_beta);
979 v8i16 tp0, tp1, tp2, tp3, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
989 ST_W4(tmp3, 0, 1, 2, 3,
src, img_width);
990 ST_H4(tmp2, 0, 1, 2, 3,
src + 4, img_width);
991 src += 4 * img_width;
992 ST_W4(tmp4, 0, 1, 2, 3,
src, img_width);
993 ST_H4(tmp2, 4, 5, 6, 7,
src + 4, img_width);
994 src += 4 * img_width;
996 ST_W4(tmp6, 0, 1, 2, 3,
src, img_width);
997 ST_H4(tmp5, 0, 1, 2, 3,
src + 4, img_width);
998 src += 4 * img_width;
999 ST_W4(tmp7, 0, 1, 2, 3,
src, img_width);
1000 ST_H4(tmp5, 4, 5, 6, 7,
src + 4, img_width);
1010 uint64_t load0, load1;
1011 uint32_t out0, out2;
1012 uint16_t out1, out3;
1013 v8u16 src0_r, src1_r, src2_r, src3_r, src4_r, src5_r, src6_r, src7_r;
1014 v8u16 dst0_r, dst1_r, dst4_r, dst5_r;
1015 v8u16 dst2_x_r, dst2_y_r, dst3_x_r, dst3_y_r;
1016 v16u8 dst0, dst1, dst4, dst5, dst2_x, dst2_y, dst3_x, dst3_y;
1017 v8i16 tmp0, tmp1, tmp2, tmp3;
1019 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0, p2_asub_p0, q2_asub_q0;
1020 v16u8 is_less_than, is_less_than_alpha, is_less_than_beta;
1021 v16u8 is_less_than_beta1, is_less_than_beta2;
1030 v16i8 zeros = { 0 };
1032 load0 =
LD(
src - 4);
1034 src0 = (v16i8) __msa_insert_d((v2i64)
src0, 0, load0);
1035 src1 = (v16i8) __msa_insert_d((v2i64)
src1, 0, load1);
1039 src2 = (v16i8) __msa_insert_d((v2i64)
src2, 0, load0);
1040 src3 = (v16i8) __msa_insert_d((v2i64) src3, 0, load1);
1044 src4 = (v16i8) __msa_insert_d((v2i64) src4, 0, load0);
1045 src5 = (v16i8) __msa_insert_d((v2i64) src5, 0, load1);
1049 src6 = (v16i8) __msa_insert_d((v2i64) src6, 0, load0);
1050 src7 = (v16i8) __msa_insert_d((v2i64) src7, 0, load1);
1058 ILVR_W2_SB(tmp2, tmp0, tmp3, tmp1, src6, src3);
1063 p0_asub_q0 = __msa_asub_u_b((v16u8)
src2, (v16u8) src3);
1064 p1_asub_p0 = __msa_asub_u_b((v16u8)
src1, (v16u8)
src2);
1065 q1_asub_q0 = __msa_asub_u_b((v16u8) src4, (v16u8) src3);
1067 alpha = (v16u8) __msa_fill_b(alpha_in);
1068 beta = (v16u8) __msa_fill_b(beta_in);
1070 is_less_than_alpha = (p0_asub_q0 <
alpha);
1071 is_less_than_beta = (p1_asub_p0 < beta);
1072 is_less_than = is_less_than_alpha & is_less_than_beta;
1073 is_less_than_beta = (q1_asub_q0 < beta);
1074 is_less_than = is_less_than & is_less_than_beta;
1079 is_less_than_alpha = (p0_asub_q0 <
alpha);
1081 p2_asub_p0 = __msa_asub_u_b((v16u8)
src0, (v16u8)
src2);
1082 is_less_than_beta1 = (p2_asub_p0 < beta);
1083 q2_asub_q0 = __msa_asub_u_b((v16u8) src5, (v16u8) src3);
1084 is_less_than_beta2 = (q2_asub_q0 < beta);
1087 src0_r, src1_r, src2_r, src3_r);
1088 ILVR_B4_UH(zeros, src4, zeros, src5, zeros, src6, zeros, src7,
1089 src4_r, src5_r, src6_r, src7_r);
1091 dst2_x_r = src1_r + src2_r + src3_r;
1092 dst2_x_r = src0_r + (2 * (dst2_x_r)) + src4_r;
1093 dst2_x_r = (v8u16) __msa_srari_h((v8i16) dst2_x_r, 3);
1094 dst1_r = src0_r + src1_r + src2_r + src3_r;
1095 dst1_r = (v8u16) __msa_srari_h((v8i16) dst1_r, 2);
1097 dst0_r = (2 * src6_r) + (3 * src0_r);
1098 dst0_r += src1_r + src2_r + src3_r;
1099 dst0_r = (v8u16) __msa_srari_h((v8i16) dst0_r, 3);
1100 dst2_y_r = (2 * src1_r) + src2_r + src4_r;
1101 dst2_y_r = (v8u16) __msa_srari_h((v8i16) dst2_y_r, 2);
1103 PCKEV_B2_UB(dst2_x_r, dst2_x_r, dst2_y_r, dst2_y_r, dst2_x, dst2_y);
1104 dst2_x = __msa_bmnz_v(dst2_y, dst2_x, is_less_than_beta1);
1106 dst3_x_r = src2_r + src3_r + src4_r;
1107 dst3_x_r = src1_r + (2 * dst3_x_r) + src5_r;
1108 dst3_x_r = (v8u16) __msa_srari_h((v8i16) dst3_x_r, 3);
1109 dst4_r = src2_r + src3_r + src4_r + src5_r;
1110 dst4_r = (v8u16) __msa_srari_h((v8i16) dst4_r, 2);
1112 dst5_r = (2 * src7_r) + (3 * src5_r);
1113 dst5_r += src4_r + src3_r + src2_r;
1114 dst5_r = (v8u16) __msa_srari_h((v8i16) dst5_r, 3);
1115 dst3_y_r = (2 * src4_r) + src3_r + src1_r;
1116 dst3_y_r = (v8u16) __msa_srari_h((v8i16) dst3_y_r, 2);
1118 PCKEV_B2_UB(dst3_x_r, dst3_x_r, dst3_y_r, dst3_y_r, dst3_x, dst3_y);
1119 dst3_x = __msa_bmnz_v(dst3_y, dst3_x, is_less_than_beta2);
1121 dst2_y_r = (2 * src1_r) + src2_r + src4_r;
1122 dst2_y_r = (v8u16) __msa_srari_h((v8i16) dst2_y_r, 2);
1123 dst3_y_r = (2 * src4_r) + src3_r + src1_r;
1124 dst3_y_r = (v8u16) __msa_srari_h((v8i16) dst3_y_r, 2);
1126 PCKEV_B2_UB(dst2_y_r, dst2_y_r, dst3_y_r, dst3_y_r, dst2_y, dst3_y);
1128 dst2_x = __msa_bmnz_v(dst2_y, dst2_x, is_less_than_alpha);
1129 dst3_x = __msa_bmnz_v(dst3_y, dst3_x, is_less_than_alpha);
1130 dst2_x = __msa_bmnz_v((v16u8)
src2, dst2_x, is_less_than);
1131 dst3_x = __msa_bmnz_v((v16u8) src3, dst3_x, is_less_than);
1133 is_less_than = is_less_than_alpha & is_less_than;
1134 dst1 = (v16u8) __msa_pckev_b((v16i8) dst1_r, (v16i8) dst1_r);
1135 is_less_than_beta1 = is_less_than_beta1 & is_less_than;
1136 dst1 = __msa_bmnz_v((v16u8)
src1, dst1, is_less_than_beta1);
1138 dst0 = (v16u8) __msa_pckev_b((v16i8) dst0_r, (v16i8) dst0_r);
1139 dst0 = __msa_bmnz_v((v16u8)
src0, dst0, is_less_than_beta1);
1140 dst4 = (v16u8) __msa_pckev_b((v16i8) dst4_r, (v16i8) dst4_r);
1141 is_less_than_beta2 = is_less_than_beta2 & is_less_than;
1142 dst4 = __msa_bmnz_v((v16u8) src4, dst4, is_less_than_beta2);
1143 dst5 = (v16u8) __msa_pckev_b((v16i8) dst5_r, (v16i8) dst5_r);
1144 dst5 = __msa_bmnz_v((v16u8) src5, dst5, is_less_than_beta2);
1146 ILVR_B2_UB(dst1, dst0, dst3_x, dst2_x, dst0, dst1);
1147 dst2_x = (v16u8) __msa_ilvr_b((v16i8) dst5, (v16i8) dst4);
1151 ILVR_W2_UB(tmp2, tmp0, tmp3, tmp1, dst0, dst4);
1152 SLDI_B2_UB(zeros, dst0, zeros, dst4, 8, dst1, dst5);
1153 dst2_x = (v16u8) __msa_ilvl_w((v4i32) tmp2, (v4i32) tmp0);
1154 dst2_y = (v16u8) __msa_ilvl_w((v4i32) tmp3, (v4i32) tmp1);
1155 SLDI_B2_UB(zeros, dst2_x, zeros, dst2_y, 8, dst3_x, dst3_y);
1157 out0 = __msa_copy_u_w((v4i32) dst0, 0);
1158 out1 = __msa_copy_u_h((v8i16) dst0, 2);
1159 out2 = __msa_copy_u_w((v4i32) dst1, 0);
1160 out3 = __msa_copy_u_h((v8i16) dst1, 2);
1162 SW(out0, (
src - 3));
1163 SH(out1, (
src + 1));
1165 SW(out2, (
src - 3));
1166 SH(out3, (
src + 1));
1169 out0 = __msa_copy_u_w((v4i32) dst2_x, 0);
1170 out1 = __msa_copy_u_h((v8i16) dst2_x, 2);
1171 out2 = __msa_copy_u_w((v4i32) dst3_x, 0);
1172 out3 = __msa_copy_u_h((v8i16) dst3_x, 2);
1174 SW(out0, (
src - 3));
1175 SH(out1, (
src + 1));
1177 SW(out2, (
src - 3));
1178 SH(out3, (
src + 1));
1181 out0 = __msa_copy_u_w((v4i32) dst4, 0);
1182 out1 = __msa_copy_u_h((v8i16) dst4, 2);
1183 out2 = __msa_copy_u_w((v4i32) dst5, 0);
1184 out3 = __msa_copy_u_h((v8i16) dst5, 2);
1186 SW(out0, (
src - 3));
1187 SH(out1, (
src + 1));
1189 SW(out2, (
src - 3));
1190 SH(out3, (
src + 1));
1193 out0 = __msa_copy_u_w((v4i32) dst2_y, 0);
1194 out1 = __msa_copy_u_h((v8i16) dst2_y, 2);
1195 out2 = __msa_copy_u_w((v4i32) dst3_y, 0);
1196 out3 = __msa_copy_u_h((v8i16) dst3_y, 2);
1198 SW(out0, (
src - 3));
1199 SH(out1, (
src + 1));
1201 SW(out2, (
src - 3));
1202 SH(out3, (
src + 1));
1208 ptrdiff_t img_width)
1212 v8i16 p0_or_q0, q0_or_p0;
1213 v16u8 p1_or_q1_org, p0_or_q0_org, q0_or_p0_org, q1_or_p1_org;
1215 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0;
1216 v16u8 is_less_than_alpha, is_less_than_beta;
1217 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
1219 alpha = (v16u8) __msa_fill_b(alpha_in);
1220 beta = (v16u8) __msa_fill_b(beta_in);
1222 LD_UB4(data_cb_or_cr - (img_width << 1), img_width,
1223 p1_or_q1_org, p0_or_q0_org, q0_or_p0_org, q1_or_p1_org);
1225 p0_asub_q0 = __msa_asub_u_b(p0_or_q0_org, q0_or_p0_org);
1226 p1_asub_p0 = __msa_asub_u_b(p1_or_q1_org, p0_or_q0_org);
1227 q1_asub_q0 = __msa_asub_u_b(q1_or_p1_org, q0_or_p0_org);
1229 is_less_than_alpha = (p0_asub_q0 <
alpha);
1230 is_less_than_beta = (p1_asub_p0 < beta);
1231 is_less_than = is_less_than_beta & is_less_than_alpha;
1232 is_less_than_beta = (q1_asub_q0 < beta);
1233 is_less_than = is_less_than_beta & is_less_than;
1235 is_less_than = (v16u8) __msa_ilvr_d((v2i64)
zero, (v2i64) is_less_than);
1237 if (!__msa_test_bz_v(is_less_than)) {
1239 zero, q1_or_p1_org, p1_org_r, p0_org_r, q0_org_r, q1_org_r);
1245 __msa_bmnz_v(p0_or_q0_org, (v16u8) p0_or_q0, is_less_than);
1247 __msa_bmnz_v(q0_or_p0_org, (v16u8) q0_or_p0, is_less_than);
1249 ST_UB(q0_or_p0_org, data_cb_or_cr);
1250 ST_UB(p0_or_q0_org, data_cb_or_cr - img_width);
1257 ptrdiff_t img_width)
1260 v16u8
alpha, beta, is_less_than;
1261 v8i16 p0_or_q0, q0_or_p0;
1262 v16u8 p1_or_q1_org, p0_or_q0_org, q0_or_p0_org, q1_or_p1_org;
1264 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0;
1265 v16u8 is_less_than_alpha, is_less_than_beta;
1266 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
1269 v16u8 row0, row1, row2, row3, row4, row5, row6, row7;
1271 LD_UB8((data_cb_or_cr - 2), img_width,
1272 row0, row1, row2, row3, row4, row5, row6, row7);
1275 p1_or_q1_org, p0_or_q0_org,
1276 q0_or_p0_org, q1_or_p1_org);
1279 alpha = (v16u8) __msa_fill_b(alpha_in);
1280 beta = (v16u8) __msa_fill_b(beta_in);
1282 p0_asub_q0 = __msa_asub_u_b(p0_or_q0_org, q0_or_p0_org);
1283 p1_asub_p0 = __msa_asub_u_b(p1_or_q1_org, p0_or_q0_org);
1284 q1_asub_q0 = __msa_asub_u_b(q1_or_p1_org, q0_or_p0_org);
1286 is_less_than_alpha = (p0_asub_q0 <
alpha);
1287 is_less_than_beta = (p1_asub_p0 < beta);
1288 is_less_than = is_less_than_beta & is_less_than_alpha;
1289 is_less_than_beta = (q1_asub_q0 < beta);
1290 is_less_than = is_less_than_beta & is_less_than;
1291 is_less_than = (v16u8) __msa_ilvr_d((v2i64)
zero, (v2i64) is_less_than);
1293 if (!__msa_test_bz_v(is_less_than)) {
1295 zero, q1_or_p1_org, p1_org_r, p0_org_r, q0_org_r, q1_org_r);
1304 __msa_bmnz_v(p0_or_q0_org, (v16u8) p0_or_q0, is_less_than);
1306 __msa_bmnz_v(q0_or_p0_org, (v16u8) q0_or_p0, is_less_than);
1307 tmp1 = (v8i16) __msa_ilvr_b((v16i8) q0_or_p0_org, (v16i8) p0_or_q0_org);
1310 ST_H4(tmp1, 0, 1, 2, 3, data_cb_or_cr, img_width);
1311 data_cb_or_cr += 4 * img_width;
1312 ST_H4(tmp1, 4, 5, 6, 7, data_cb_or_cr, img_width);
1317 uint8_t iAlpha, uint8_t iBeta,
1320 v16u8 p0, p1, p2,
q0,
q1, q2;
1321 v16i8 iTc, negiTc, negTc,
flags,
f;
1322 v8i16 p0_l, p0_r, p1_l, p1_r, p2_l, p2_r, q0_l, q0_r, q1_l, q1_r, q2_l, q2_r;
1323 v8i16 tc_l, tc_r, negTc_l, negTc_r;
1324 v8i16 iTc_l, iTc_r, negiTc_l, negiTc_r;
1326 v8i16 t0, t1, t2, t3;
1328 v16u8 bDetaP0Q0, bDetaP1P0, bDetaQ1Q0, bDetaP2P0, bDetaQ2Q0;
1329 v16i8 const_1_b = __msa_ldi_b(1);
1330 v8i16 const_1_h = __msa_ldi_h(1);
1331 v8i16 const_4_h = __msa_ldi_h(4);
1332 v8i16 const_not_255_h = __msa_ldi_h(~255);
1334 v16i8 tc = { pTc[0 >> 2], pTc[1 >> 2], pTc[2 >> 2], pTc[3 >> 2],
1335 pTc[4 >> 2], pTc[5 >> 2], pTc[6 >> 2], pTc[7 >> 2],
1336 pTc[8 >> 2], pTc[9 >> 2], pTc[10 >> 2], pTc[11 >> 2],
1337 pTc[12 >> 2], pTc[13 >> 2], pTc[14 >> 2], pTc[15 >> 2] };
1342 LD_SH8(pPix - 3, iStride, t0, t1, t2, t3, q1_l, q1_r, q2_l, q2_r);
1343 LD_SH8(pPix + 8 * iStride - 3, iStride, p0_l, p0_r, p1_l, p1_r,
1344 p2_l, p2_r, q0_l, q0_r);
1346 p0_l, p0_r, p1_l, p1_r, p2_l, p2_r, q0_l, q0_r,
1349 alpha = (v16u8)__msa_fill_b(iAlpha);
1350 beta = (v16u8)__msa_fill_b(iBeta);
1352 bDetaP0Q0 = __msa_asub_u_b(p0,
q0);
1353 bDetaP1P0 = __msa_asub_u_b(p1, p0);
1354 bDetaQ1Q0 = __msa_asub_u_b(
q1,
q0);
1355 bDetaP2P0 = __msa_asub_u_b(p2, p0);
1356 bDetaQ2Q0 = __msa_asub_u_b(q2,
q0);
1357 bDetaP0Q0 = (v16u8)__msa_clt_u_b(bDetaP0Q0,
alpha);
1358 bDetaP1P0 = (v16u8)__msa_clt_u_b(bDetaP1P0, beta);
1359 bDetaQ1Q0 = (v16u8)__msa_clt_u_b(bDetaQ1Q0, beta);
1360 bDetaP2P0 = (v16u8)__msa_clt_u_b(bDetaP2P0, beta);
1361 bDetaQ2Q0 = (v16u8)__msa_clt_u_b(bDetaQ2Q0, beta);
1376 f = (v16i8)bDetaP0Q0 & (v16i8)bDetaP1P0 & (v16i8)bDetaQ1Q0;
1377 flags =
f & (v16i8)bDetaP2P0;
1379 iTc += ((
~flags) & const_1_b);
1380 flags =
f & (v16i8)bDetaQ2Q0;
1382 iTc += ((
~flags) & const_1_b);
1383 negiTc =
zero - iTc;
1392 t0 = (p2_l + ((p0_l + q0_l + const_1_h) >> 1) - (p1_l << 1)) >> 1;
1393 t0 = __msa_max_s_h(negTc_l, t0);
1394 t0 = __msa_min_s_h(tc_l, t0);
1397 t0 = (q2_l + ((p0_l + q0_l + const_1_h) >> 1) - (q1_l << 1)) >> 1;
1398 t0 = __msa_max_s_h(negTc_l, t0);
1399 t0 = __msa_min_s_h(tc_l, t0);
1402 t0 = (((q0_l - p0_l) << 2) + (p1_l - q1_l) + const_4_h) >> 3;
1403 t0 = __msa_max_s_h(negiTc_l, t0);
1404 t0 = __msa_min_s_h(iTc_l, t0);
1409 t2 = t1 & const_not_255_h;
1410 t3 = __msa_cle_s_h((v8i16)
zero, t1);
1411 flags = (v16i8)__msa_ceq_h(t2, (v8i16)
zero);
1412 p0_l = (t1 & (v8i16)
flags) + (t3 & (v8i16)(~
flags));
1415 t2 = t1 & const_not_255_h;
1416 t3 = __msa_cle_s_h((v8i16)
zero, t1);
1417 flags = (v16i8)__msa_ceq_h(t2, (v8i16)
zero);
1418 q0_l = (t1 & (v8i16)
flags) + (t3 & (v8i16)(~
flags));
1422 t0 = (p2_r + ((p0_r + q0_r + const_1_h) >> 1) - (p1_r << 1)) >> 1;
1423 t0 = __msa_max_s_h(negTc_r, t0);
1424 t0 = __msa_min_s_h(tc_r, t0);
1427 t0 = (q2_r + ((p0_r + q0_r + const_1_h) >> 1) - (q1_r << 1)) >> 1;
1428 t0 = __msa_max_s_h(negTc_r, t0);
1429 t0 = __msa_min_s_h(tc_r, t0);
1432 t0 = (((q0_r - p0_r) << 2) + (p1_r - q1_r) + const_4_h) >> 3;
1433 t0 = __msa_max_s_h(negiTc_r, t0);
1434 t0 = __msa_min_s_h(iTc_r, t0);
1439 t2 = t1 & const_not_255_h;
1440 t3 = __msa_cle_s_h((v8i16)
zero, t1);
1441 flags = (v16i8)__msa_ceq_h(t2, (v8i16)
zero);
1442 p0_r = (t1 & (v8i16)
flags) + (t3 & (v8i16)(~
flags));
1445 t2 = t1 & const_not_255_h;
1446 t3 = __msa_cle_s_h((v8i16)
zero, t1);
1447 flags = (v16i8)__msa_ceq_h(t2, (v8i16)
zero);
1448 q0_r = (t1 & (v8i16)
flags) + (t3 & (v8i16)(~
flags));
1451 PCKEV_B4(v8i16, p1_l, p1_r, p0_l, p0_r, q0_l, q0_r, q1_l, q1_r,
1455 p0 = (v16u8)(((v16i8)t1 &
flags) + (p0 & (~
flags)));
1458 t1 = (v8i16)(
flags & (~(__msa_ceq_b((v16i8)bDetaP2P0,
zero))));
1459 p1 = (v16u8)(t0 & t1) + (p1 & (v16u8)(~t1));
1460 t2 = (v8i16)(
flags & (~(__msa_ceq_b((v16i8)bDetaQ2Q0,
zero))));
1461 q1 = (v16u8)(t3 & t2) + (
q1 & (v16u8)(~t2));
1468 ST_W8(p1, p0, 0, 1, 2, 3, 0, 1, 2, 3, pPix - 2, iStride);
1469 ST_W8(
q0,
q1, 0, 1, 2, 3, 0, 1, 2, 3, pPix + 8 * iStride - 2, iStride);
1473 uint8_t bs0, uint8_t bs1,
1474 uint8_t bs2, uint8_t bs3,
1475 uint8_t tc0, uint8_t tc1,
1476 uint8_t tc2, uint8_t tc3,
1479 ptrdiff_t image_width)
1484 tmp_vec = (v16u8) __msa_fill_b(bs0);
1485 bs = (v16u8) __msa_insve_w((v4i32) bs, 0, (v4i32) tmp_vec);
1486 tmp_vec = (v16u8) __msa_fill_b(bs1);
1487 bs = (v16u8) __msa_insve_w((v4i32) bs, 1, (v4i32) tmp_vec);
1488 tmp_vec = (v16u8) __msa_fill_b(bs2);
1489 bs = (v16u8) __msa_insve_w((v4i32) bs, 2, (v4i32) tmp_vec);
1490 tmp_vec = (v16u8) __msa_fill_b(bs3);
1491 bs = (v16u8) __msa_insve_w((v4i32) bs, 3, (v4i32) tmp_vec);
1493 if (!__msa_test_bz_v(bs)) {
1494 v16u8
alpha, beta, is_less_than, is_less_than_beta;
1495 v16u8 p0,
q0, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org;
1496 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0;
1497 v16u8 is_less_than_alpha, is_bs_greater_than0;
1498 v8i16 p0_r, q0_r, p0_l, q0_l;
1499 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
1500 v8i16 p1_org_l, p0_org_l, q0_org_l, q1_org_l;
1504 tmp_vec = (v16u8) __msa_fill_b(tc0);
1505 tc = (v16i8) __msa_insve_w((v4i32) tc, 0, (v4i32) tmp_vec);
1506 tmp_vec = (v16u8) __msa_fill_b(tc1);
1507 tc = (v16i8) __msa_insve_w((v4i32) tc, 1, (v4i32) tmp_vec);
1508 tmp_vec = (v16u8) __msa_fill_b(tc2);
1509 tc = (v16i8) __msa_insve_w((v4i32) tc, 2, (v4i32) tmp_vec);
1510 tmp_vec = (v16u8) __msa_fill_b(tc3);
1511 tc = (v16i8) __msa_insve_w((v4i32) tc, 3, (v4i32) tmp_vec);
1513 alpha = (v16u8) __msa_fill_b(alpha_in);
1514 beta = (v16u8) __msa_fill_b(beta_in);
1516 LD_UB5(
data - (3 * image_width), image_width,
1517 p2_org, p1_org, p0_org, q0_org, q1_org);
1519 is_bs_greater_than0 = ((v16u8)
zero < bs);
1520 p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org);
1521 p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org);
1522 q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org);
1524 is_less_than_alpha = (p0_asub_q0 <
alpha);
1525 is_less_than_beta = (p1_asub_p0 < beta);
1526 is_less_than = is_less_than_beta & is_less_than_alpha;
1527 is_less_than_beta = (q1_asub_q0 < beta);
1528 is_less_than = is_less_than_beta & is_less_than;
1529 is_less_than = is_less_than & is_bs_greater_than0;
1531 if (!__msa_test_bz_v(is_less_than)) {
1532 v16i8 sign_negate_tc, negate_tc;
1533 v8i16 negate_tc_r, i16_negatetc_l, tc_l, tc_r;
1534 v16u8 p2_asub_p0, q2_asub_q0;
1536 q2_org =
LD_UB(
data + (2 * image_width));
1537 negate_tc =
zero - tc;
1538 sign_negate_tc = __msa_clti_s_b(negate_tc, 0);
1540 ILVRL_B2_SH(sign_negate_tc, negate_tc, negate_tc_r, i16_negatetc_l);
1547 p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org);
1548 is_less_than_beta = (p2_asub_p0 < beta);
1549 is_less_than_beta = is_less_than_beta & is_less_than;
1551 if (!__msa_test_bz_v(is_less_than_beta)) {
1555 v8i16 p2_org_r = (v8i16) __msa_ilvr_b(
zero, (v16i8) p2_org);
1556 v8i16 p2_org_l = (v8i16) __msa_ilvl_b(
zero, (v16i8) p2_org);
1559 negate_tc_r, tc_r, p1_r);
1561 i16_negatetc_l, tc_l, p1_l);
1563 p1 = (v16u8) __msa_pckev_b((v16i8) p1_l, (v16i8) p1_r);
1564 p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta);
1565 ST_UB(p1_org,
data - (2 * image_width));
1567 is_less_than_beta = __msa_andi_b(is_less_than_beta, 1);
1568 tc = tc + (v16i8) is_less_than_beta;
1571 q2_asub_q0 = __msa_asub_u_b(q2_org, q0_org);
1572 is_less_than_beta = (q2_asub_q0 < beta);
1573 is_less_than_beta = is_less_than_beta & is_less_than;
1575 q1_org_r = (v8i16) __msa_ilvr_b(
zero, (v16i8) q1_org);
1576 q1_org_l = (v8i16) __msa_ilvl_b(
zero, (v16i8) q1_org);
1578 if (!__msa_test_bz_v(is_less_than_beta)) {
1582 v8i16 q2_org_r = (v8i16) __msa_ilvr_b(
zero, (v16i8) q2_org);
1583 v8i16 q2_org_l = (v8i16) __msa_ilvl_b(
zero, (v16i8) q2_org);
1586 negate_tc_r, tc_r, q1_r);
1588 i16_negatetc_l, tc_l, q1_l);
1590 q1 = (v16u8) __msa_pckev_b((v16i8) q1_l, (v16i8) q1_r);
1591 q1_org = __msa_bmnz_v(q1_org,
q1, is_less_than_beta);
1594 is_less_than_beta = __msa_andi_b(is_less_than_beta, 1);
1595 tc = tc + (v16i8) is_less_than_beta;
1598 v16i8 negate_thresh, sign_negate_thresh;
1599 v8i16 threshold_r, threshold_l;
1600 v8i16 negate_thresh_l, negate_thresh_r;
1602 negate_thresh =
zero - tc;
1603 sign_negate_thresh = __msa_clti_s_b(negate_thresh, 0);
1606 threshold_r, negate_thresh_r);
1608 negate_thresh_r, threshold_r, p0_r, q0_r);
1610 threshold_l = (v8i16) __msa_ilvl_b(
zero, tc);
1611 negate_thresh_l = (v8i16) __msa_ilvl_b(sign_negate_thresh,
1614 negate_thresh_l, threshold_l, p0_l, q0_l);
1619 p0_org = __msa_bmnz_v(p0_org, p0, is_less_than);
1620 q0_org = __msa_bmnz_v(q0_org,
q0, is_less_than);
1633 uint32_t out0, out1, out2, out3;
1646 v8i16 src4, src5, src6, src7;
1647 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0, p2_asub_p0, q2_asub_q0;
1648 v16u8 is_less_than, is_less_than_alpha, is_less_than_beta;
1649 v16u8 is_less_than_beta1, is_less_than_beta2;
1650 v8i16 tc, tc_orig_r, tc_plus1;
1651 v16u8 is_tc_orig1, is_tc_orig2, tc_orig = { 0 };
1652 v8i16 p0_ilvr_q0, p0_add_q0, q0_sub_p0, p1_sub_q1;
1653 v8i16 src2_r, src3_r;
1654 v8i16 p2_r, p1_r, q2_r, q1_r;
1655 v16u8 p2, q2, p0,
q0;
1657 v16i8 zeros = { 0 };
1659 alpha = (v16u8) __msa_fill_b(alpha_in);
1660 beta = (v16u8) __msa_fill_b(beta_in);
1666 inp0 = (v16i8) __msa_insert_d((v2i64) inp0, 0, load);
1668 inp1 = (v16i8) __msa_insert_d((v2i64) inp1, 0, load);
1676 inp2 = (v16i8) __msa_insert_d((v2i64) inp2, 0, load);
1678 inp3 = (v16i8) __msa_insert_d((v2i64) inp3, 0, load);
1686 inp4 = (v16i8) __msa_insert_d((v2i64) inp4, 0, load);
1688 inp5 = (v16i8) __msa_insert_d((v2i64) inp5, 0, load);
1696 inp6 = (v16i8) __msa_insert_d((v2i64) inp6, 0, load);
1698 inp7 = (v16i8) __msa_insert_d((v2i64) inp7, 0, load);
1702 ILVR_B4_SB(inp1, inp0, inp3, inp2, inp5, inp4, inp7, inp6,
1708 src0 = (v16i8) __msa_ilvr_w((v4i32) src6, (v4i32) src4);
1709 src1 = __msa_sldi_b(zeros, (v16i8)
src0, 8);
1710 src2 = (v16i8) __msa_ilvl_w((v4i32) src6, (v4i32) src4);
1711 src3 = __msa_sldi_b(zeros, (v16i8)
src2, 8);
1712 src4 = (v8i16) __msa_ilvr_w((v4i32) src7, (v4i32) src5);
1713 src5 = (v8i16) __msa_sldi_b(zeros, (v16i8) src4, 8);
1715 p0_asub_q0 = __msa_asub_u_b((v16u8)
src2, (v16u8) src3);
1716 p1_asub_p0 = __msa_asub_u_b((v16u8)
src1, (v16u8)
src2);
1717 q1_asub_q0 = __msa_asub_u_b((v16u8) src4, (v16u8) src3);
1718 p2_asub_p0 = __msa_asub_u_b((v16u8)
src0, (v16u8)
src2);
1719 q2_asub_q0 = __msa_asub_u_b((v16u8) src5, (v16u8) src3);
1721 is_less_than_alpha = (p0_asub_q0 <
alpha);
1722 is_less_than_beta = (p1_asub_p0 < beta);
1723 is_less_than = is_less_than_alpha & is_less_than_beta;
1724 is_less_than_beta = (q1_asub_q0 < beta);
1725 is_less_than = is_less_than_beta & is_less_than;
1727 is_less_than_beta1 = (p2_asub_p0 < beta);
1728 is_less_than_beta2 = (q2_asub_q0 < beta);
1730 p0_ilvr_q0 = (v8i16) __msa_ilvr_b((v16i8) src3, (v16i8)
src2);
1731 p0_add_q0 = (v8i16) __msa_hadd_u_h((v16u8) p0_ilvr_q0, (v16u8) p0_ilvr_q0);
1732 p0_add_q0 = __msa_srari_h(p0_add_q0, 1);
1738 ILVR_B2_SH(zeros, src5, zeros, src4, q2_r, q1_r);
1744 tc_orig = (v16u8) __msa_insert_w((v4i32) tc_orig, 0, tc_val);
1745 tc_orig = (v16u8) __msa_ilvr_b((v16i8) tc_orig, (v16i8) tc_orig);
1746 is_tc_orig1 = tc_orig;
1747 is_tc_orig2 = tc_orig;
1748 tc_orig_r = (v8i16) __msa_ilvr_b(zeros, (v16i8) tc_orig);
1751 CLIP_SH(p2_r, -tc_orig_r, tc_orig_r);
1752 CLIP_SH(q2_r, -tc_orig_r, tc_orig_r);
1759 is_tc_orig1 = (zeros < is_tc_orig1);
1760 is_tc_orig2 = is_tc_orig1;
1761 is_tc_orig1 = is_less_than_beta1 & is_tc_orig1;
1762 is_tc_orig2 = is_less_than_beta2 & is_tc_orig2;
1763 is_tc_orig1 = is_less_than & is_tc_orig1;
1764 is_tc_orig2 = is_less_than & is_tc_orig2;
1766 p2 = __msa_bmnz_v((v16u8)
src1, p2, is_tc_orig1);
1767 q2 = __msa_bmnz_v((v16u8) src4, q2, is_tc_orig2);
1769 q0_sub_p0 = __msa_hsub_u_h((v16u8) p0_ilvr_q0, (v16u8) p0_ilvr_q0);
1771 p1_sub_q1 = p1_r - q1_r;
1772 q0_sub_p0 += p1_sub_q1;
1773 q0_sub_p0 = __msa_srari_h(q0_sub_p0, 3);
1776 is_less_than_beta1 = (v16u8) __msa_ilvr_b((v16i8) is_less_than_beta1,
1777 (v16i8) is_less_than_beta1);
1778 tc = (v8i16) __msa_bmnz_v((v16u8) tc, (v16u8) tc_plus1, is_less_than_beta1);
1780 is_less_than_beta2 = (v16u8) __msa_ilvr_b((v16i8) is_less_than_beta2,
1781 (v16i8) is_less_than_beta2);
1782 tc = (v8i16) __msa_bmnz_v((v16u8) tc, (v16u8) tc_plus1, is_less_than_beta2);
1787 src2_r += q0_sub_p0;
1788 src3_r -= q0_sub_p0;
1794 p0 = __msa_bmnz_v((v16u8)
src2, p0, is_less_than);
1795 q0 = __msa_bmnz_v((v16u8) src3,
q0, is_less_than);
1803 out0 = __msa_copy_u_w(dst0, 0);
1804 out1 = __msa_copy_u_w(dst0, 1);
1805 out2 = __msa_copy_u_w(dst0, 2);
1806 out3 = __msa_copy_u_w(dst0, 3);
1826 out0 = __msa_copy_u_w(dst1, 0);
1827 out1 = __msa_copy_u_w(dst1, 1);
1828 out2 = __msa_copy_u_w(dst1, 2);
1829 out3 = __msa_copy_u_w(dst1, 3);
1848 uint8_t bs0, uint8_t bs1,
1849 uint8_t bs2, uint8_t bs3,
1850 uint8_t tc0, uint8_t tc1,
1851 uint8_t tc2, uint8_t tc3,
1854 ptrdiff_t img_width)
1860 v16u8 p0,
q0, p0_asub_q0, p1_asub_p0, q1_asub_q0;
1862 v16u8 is_less_than_beta, is_less_than_alpha, is_bs_greater_than0;
1864 v16u8 p1_org, p0_org, q0_org, q1_org;
1865 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
1866 v16i8 negate_tc, sign_negate_tc;
1867 v8i16 tc_r, negate_tc_r;
1870 tmp_vec = (v8i16) __msa_fill_b(bs0);
1871 bs = __msa_insve_h(bs, 0, tmp_vec);
1872 tmp_vec = (v8i16) __msa_fill_b(bs1);
1873 bs = __msa_insve_h(bs, 1, tmp_vec);
1874 tmp_vec = (v8i16) __msa_fill_b(bs2);
1875 bs = __msa_insve_h(bs, 2, tmp_vec);
1876 tmp_vec = (v8i16) __msa_fill_b(bs3);
1877 bs = __msa_insve_h(bs, 3, tmp_vec);
1879 if (!__msa_test_bz_v((v16u8) bs)) {
1880 tmp_vec = (v8i16) __msa_fill_b(tc0);
1881 tc = __msa_insve_h(tc, 0, tmp_vec);
1882 tmp_vec = (v8i16) __msa_fill_b(tc1);
1883 tc = __msa_insve_h(tc, 1, tmp_vec);
1884 tmp_vec = (v8i16) __msa_fill_b(tc2);
1885 tc = __msa_insve_h(tc, 2, tmp_vec);
1886 tmp_vec = (v8i16) __msa_fill_b(tc3);
1887 tc = __msa_insve_h(tc, 3, tmp_vec);
1889 is_bs_greater_than0 = (v16u8) (
zero < (v16i8) bs);
1891 alpha = (v16u8) __msa_fill_b(alpha_in);
1892 beta = (v16u8) __msa_fill_b(beta_in);
1895 p1_org, p0_org, q0_org, q1_org);
1897 p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org);
1898 p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org);
1899 q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org);
1901 is_less_than_alpha = (p0_asub_q0 <
alpha);
1902 is_less_than_beta = (p1_asub_p0 < beta);
1903 is_less_than = is_less_than_beta & is_less_than_alpha;
1904 is_less_than_beta = (q1_asub_q0 < beta);
1905 is_less_than = is_less_than_beta & is_less_than;
1906 is_less_than = is_less_than & is_bs_greater_than0;
1908 is_less_than = (v16u8) __msa_ilvr_d((v2i64)
zero, (v2i64) is_less_than);
1910 if (!__msa_test_bz_v(is_less_than)) {
1911 negate_tc =
zero - (v16i8) tc;
1912 sign_negate_tc = __msa_clti_s_b(negate_tc, 0);
1914 ILVR_B2_SH(
zero, tc, sign_negate_tc, negate_tc, tc_r, negate_tc_r);
1917 p1_org_r, p0_org_r, q0_org_r, q1_org_r);
1919 AVC_LPF_P0Q0(q0_org_r, p0_org_r, p1_org_r, q1_org_r, negate_tc_r,
1924 p0_org = __msa_bmnz_v(p0_org, p0, is_less_than);
1925 q0_org = __msa_bmnz_v(q0_org,
q0, is_less_than);
1934 uint8_t bs0, uint8_t bs1,
1935 uint8_t bs2, uint8_t bs3,
1936 uint8_t tc0, uint8_t tc1,
1937 uint8_t tc2, uint8_t tc3,
1940 ptrdiff_t img_width)
1944 v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0;
1945 v16u8 is_less_than, is_less_than_beta, is_less_than_alpha;
1949 v16u8 p1_org, p0_org, q0_org, q1_org;
1950 v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r;
1951 v16u8 is_bs_greater_than0;
1952 v8i16 tc_r, negate_tc_r;
1953 v16i8 negate_tc, sign_negate_tc;
1955 v16u8 row0, row1, row2, row3, row4, row5, row6, row7;
1956 v8i16 tmp1, tmp_vec, bs = { 0 };
1959 tmp_vec = (v8i16) __msa_fill_b(bs0);
1960 bs = __msa_insve_h(bs, 0, tmp_vec);
1961 tmp_vec = (v8i16) __msa_fill_b(bs1);
1962 bs = __msa_insve_h(bs, 1, tmp_vec);
1963 tmp_vec = (v8i16) __msa_fill_b(bs2);
1964 bs = __msa_insve_h(bs, 2, tmp_vec);
1965 tmp_vec = (v8i16) __msa_fill_b(bs3);
1966 bs = __msa_insve_h(bs, 3, tmp_vec);
1968 if (!__msa_test_bz_v((v16u8) bs)) {
1969 tmp_vec = (v8i16) __msa_fill_b(tc0);
1970 tc = __msa_insve_h(tc, 0, tmp_vec);
1971 tmp_vec = (v8i16) __msa_fill_b(tc1);
1972 tc = __msa_insve_h(tc, 1, tmp_vec);
1973 tmp_vec = (v8i16) __msa_fill_b(tc2);
1974 tc = __msa_insve_h(tc, 2, tmp_vec);
1975 tmp_vec = (v8i16) __msa_fill_b(tc3);
1976 tc = __msa_insve_h(tc, 3, tmp_vec);
1978 is_bs_greater_than0 = (v16u8) (
zero < (v16i8) bs);
1981 row0, row1, row2, row3, row4, row5, row6, row7);
1984 row4, row5, row6, row7,
1985 p1_org, p0_org, q0_org, q1_org);
1987 p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org);
1988 p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org);
1989 q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org);
1991 alpha = (v16u8) __msa_fill_b(alpha_in);
1992 beta = (v16u8) __msa_fill_b(beta_in);
1994 is_less_than_alpha = (p0_asub_q0 <
alpha);
1995 is_less_than_beta = (p1_asub_p0 < beta);
1996 is_less_than = is_less_than_beta & is_less_than_alpha;
1997 is_less_than_beta = (q1_asub_q0 < beta);
1998 is_less_than = is_less_than_beta & is_less_than;
1999 is_less_than = is_bs_greater_than0 & is_less_than;
2001 is_less_than = (v16u8) __msa_ilvr_d((v2i64)
zero, (v2i64) is_less_than);
2003 if (!__msa_test_bz_v(is_less_than)) {
2005 p1_org_r, p0_org_r, q0_org_r, q1_org_r);
2007 negate_tc =
zero - (v16i8) tc;
2008 sign_negate_tc = __msa_clti_s_b(negate_tc, 0);
2010 ILVR_B2_SH(sign_negate_tc, negate_tc,
zero, tc, negate_tc_r, tc_r);
2012 AVC_LPF_P0Q0(q0_org_r, p0_org_r, p1_org_r, q1_org_r, negate_tc_r,
2017 p0_org = __msa_bmnz_v(p0_org, p0, is_less_than);
2018 q0_org = __msa_bmnz_v(q0_org,
q0, is_less_than);
2019 tmp1 = (v8i16) __msa_ilvr_b((v16i8) q0_org, (v16i8) p0_org);
2021 ST_H4(tmp1, 0, 1, 2, 3,
src, img_width);
2022 src += 4 * img_width;
2023 ST_H4(tmp1, 4, 5, 6, 7,
src, img_width);
2033 v16u8
alpha, beta, res;
2035 alpha = (v16u8) __msa_fill_b(alpha_in);
2036 beta = (v16u8) __msa_fill_b(beta_in);
2038 for (col = 0; col < 4; col++) {
2039 tc_val = (tc0[col] - 1) + 1;
2060 v16u8
alpha, beta, res;
2062 alpha = (v16u8) __msa_fill_b(alpha_in);
2063 beta = (v16u8) __msa_fill_b(beta_in);
2065 for (col = 0; col < 4; col++) {
2066 tc_val = (tc0[col] - 1) + 1;
2075 out0 = __msa_copy_s_h((v8i16) res, 0);
2076 out1 = __msa_copy_s_h((v8i16) res, 1);
2078 SH(out0, (
src - 1));
2080 SH(out1, (
src - 1));
2086 int alpha,
int beta, int8_t *tc)
2109 int alpha,
int beta, int8_t *tc)
2127 tc[0], tc[1], tc[2], tc[3],
2128 alpha, beta, img_width);
2132 int alpha,
int beta, int8_t *tc)
2149 tc[0], tc[1], tc[2], tc[3],
2150 alpha, beta, img_width);
2154 int alpha,
int beta, int8_t *tc)
2171 tc[0], tc[1], tc[2], tc[3],
2172 alpha, beta, img_width);
2176 int alpha,
int beta)
2184 int alpha,
int beta)
2192 int alpha,
int beta)
2200 int alpha,
int beta)
2242 int height,
int log2_denom,
2243 int weight_src,
int offset_in)
2245 uint32_t offset_val;
2248 v16u8 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
2249 v8i16 src0_l, src1_l, src2_l, src3_l, src0_r, src1_r, src2_r, src3_r;
2250 v8i16 src4_l, src5_l, src6_l, src7_l, src4_r, src5_r, src6_r, src7_r;
2251 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
2252 v8i16 tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
2253 v8i16 wgt, denom,
offset;
2255 offset_val = (unsigned) offset_in << log2_denom;
2257 wgt = __msa_fill_h(weight_src);
2258 offset = __msa_fill_h(offset_val);
2259 denom = __msa_fill_h(log2_denom);
2262 ILVR_B4_SH(
zero,
src0,
zero,
src1,
zero,
src2,
zero, src3, src0_r, src1_r,
2264 ILVL_B4_SH(
zero,
src0,
zero,
src1,
zero,
src2,
zero, src3, src0_l, src1_l,
2266 ILVR_B4_SH(
zero, src4,
zero, src5,
zero, src6,
zero, src7, src4_r, src5_r,
2268 ILVL_B4_SH(
zero, src4,
zero, src5,
zero, src6,
zero, src7, src4_l, src5_l,
2270 MUL4(wgt, src0_r, wgt, src0_l, wgt, src1_r, wgt, src1_l, tmp0, tmp1, tmp2,
2272 MUL4(wgt, src2_r, wgt, src2_l, wgt, src3_r, wgt, src3_l, tmp4, tmp5, tmp6,
2274 MUL4(wgt, src4_r, wgt, src4_l, wgt, src5_r, wgt, src5_l, tmp8, tmp9, tmp10,
2276 MUL4(wgt, src6_r, wgt, src6_l, wgt, src7_r, wgt, src7_l, tmp12, tmp13,
2283 tmp9, tmp10, tmp11);
2285 tmp12, tmp13, tmp14, tmp15);
2286 MAXI_SH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 0);
2287 MAXI_SH8_SH(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, 0);
2288 SRLR_H8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom);
2289 SRLR_H8_SH(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, denom);
2290 SAT_UH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 7);
2291 SAT_UH8_SH(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, 7);
2292 PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, dst0, dst1,
2294 PCKEV_B4_UB(tmp9, tmp8, tmp11, tmp10, tmp13, tmp12, tmp15, tmp14, dst4,
2302 src1_r, src2_r, src3_r);
2304 src1_l, src2_l, src3_l);
2306 src5_r, src6_r, src7_r);
2308 src5_l, src6_l, src7_l);
2309 MUL4(wgt, src0_r, wgt, src0_l, wgt, src1_r, wgt, src1_l, tmp0, tmp1,
2311 MUL4(wgt, src2_r, wgt, src2_l, wgt, src3_r, wgt, src3_l, tmp4, tmp5,
2313 MUL4(wgt, src4_r, wgt, src4_l, wgt, src5_r, wgt, src5_l, tmp8, tmp9,
2315 MUL4(wgt, src6_r, wgt, src6_l, wgt, src7_r, wgt, src7_l, tmp12, tmp13,
2318 tmp0, tmp1, tmp2, tmp3);
2320 tmp4, tmp5, tmp6, tmp7);
2322 tmp8, tmp9, tmp10, tmp11);
2324 tmp12, tmp13, tmp14, tmp15);
2325 MAXI_SH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 0);
2326 MAXI_SH8_SH(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, 0);
2327 SRLR_H8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, denom);
2328 SRLR_H8_SH(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, denom);
2329 SAT_UH8_SH(tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, 7);
2330 SAT_UH8_SH(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, 7);
2331 PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, dst0, dst1,
2333 PCKEV_B4_UB(tmp9, tmp8, tmp11, tmp10, tmp13, tmp12, tmp15, tmp14, dst4,
2340 int height,
int log2_denom,
2341 int weight_src,
int offset)
2345 }
else if (8 ==
height) {
2353 int height,
int log2_denom,
2354 int weight_src,
int offset)
2358 }
else if (4 ==
height) {
2367 int log2_denom,
int weight_dst,
2368 int weight_src,
int offset_in)
2370 v16i8 src_wgt, dst_wgt, wgt;
2372 v16u8 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
2373 v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7;
2374 v16i8 vec8, vec9, vec10, vec11, vec12, vec13, vec14, vec15;
2375 v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7,
zero = { 0 };
2376 v8i16 tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
2379 offset_in = (unsigned) ((offset_in + 1) | 1) << log2_denom;
2380 offset_in += (128 * (weight_src + weight_dst));
2382 src_wgt = __msa_fill_b(weight_src);
2383 dst_wgt = __msa_fill_b(weight_dst);
2384 offset = __msa_fill_h(offset_in);
2385 denom = __msa_fill_h(log2_denom + 1);
2387 wgt = __msa_ilvev_b(dst_wgt, src_wgt);
2394 ILVR_B4_SB(dst0,
src0, dst1,
src1, dst2,
src2, dst3, src3, vec0, vec2, vec4,
2396 ILVL_B4_SB(dst0,
src0, dst1,
src1, dst2,
src2, dst3, src3, vec1, vec3, vec5,
2398 ILVR_B4_SB(dst4, src4, dst5, src5, dst6, src6, dst7, src7, vec8, vec10,
2400 ILVL_B4_SB(dst4, src4, dst5, src5, dst6, src6, dst7, src7, vec9, vec11,
2402 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
2403 tmp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
2404 tmp2 = __msa_dpadd_s_h(
zero, wgt, vec2);
2405 tmp3 = __msa_dpadd_s_h(
zero, wgt, vec3);
2406 tmp4 = __msa_dpadd_s_h(
zero, wgt, vec4);
2407 tmp5 = __msa_dpadd_s_h(
zero, wgt, vec5);
2408 tmp6 = __msa_dpadd_s_h(
zero, wgt, vec6);
2409 tmp7 = __msa_dpadd_s_h(
zero, wgt, vec7);
2410 tmp8 = __msa_dpadd_s_h(
zero, wgt, vec8);
2411 tmp9 = __msa_dpadd_s_h(
zero, wgt, vec9);
2412 tmp10 = __msa_dpadd_s_h(
zero, wgt, vec10);
2413 tmp11 = __msa_dpadd_s_h(
zero, wgt, vec11);
2414 tmp12 = __msa_dpadd_s_h(
zero, wgt, vec12);
2415 tmp13 = __msa_dpadd_s_h(
zero, wgt, vec13);
2416 tmp14 = __msa_dpadd_s_h(
zero, wgt, vec14);
2417 tmp15 = __msa_dpadd_s_h(
zero, wgt, vec15);
2418 tmp0 = __msa_adds_s_h(tmp0,
offset);
2419 tmp1 = __msa_adds_s_h(tmp1,
offset);
2420 tmp2 = __msa_adds_s_h(tmp2,
offset);
2421 tmp3 = __msa_adds_s_h(tmp3,
offset);
2422 tmp4 = __msa_adds_s_h(tmp4,
offset);
2423 tmp5 = __msa_adds_s_h(tmp5,
offset);
2424 tmp6 = __msa_adds_s_h(tmp6,
offset);
2425 tmp7 = __msa_adds_s_h(tmp7,
offset);
2426 tmp8 = __msa_adds_s_h(tmp8,
offset);
2427 tmp9 = __msa_adds_s_h(tmp9,
offset);
2428 tmp10 = __msa_adds_s_h(tmp10,
offset);
2429 tmp11 = __msa_adds_s_h(tmp11,
offset);
2430 tmp12 = __msa_adds_s_h(tmp12,
offset);
2431 tmp13 = __msa_adds_s_h(tmp13,
offset);
2432 tmp14 = __msa_adds_s_h(tmp14,
offset);
2433 tmp15 = __msa_adds_s_h(tmp15,
offset);
2434 SRA_4V(tmp0, tmp1, tmp2, tmp3, denom);
2435 SRA_4V(tmp4, tmp5, tmp6, tmp7, denom);
2436 SRA_4V(tmp8, tmp9, tmp10, tmp11, denom);
2437 SRA_4V(tmp12, tmp13, tmp14, tmp15, denom);
2439 CLIP_SH8_0_255(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15);
2440 PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, dst0, dst1,
2442 PCKEV_B4_UB(tmp9, tmp8, tmp11, tmp10, tmp13, tmp12, tmp15, tmp14, dst4,
2452 ILVR_B4_SB(dst0,
src0, dst1,
src1, dst2,
src2, dst3, src3, vec0, vec2,
2454 ILVL_B4_SB(dst0,
src0, dst1,
src1, dst2,
src2, dst3, src3, vec1, vec3,
2456 ILVR_B4_SB(dst4, src4, dst5, src5, dst6, src6, dst7, src7, vec8, vec10,
2458 ILVL_B4_SB(dst4, src4, dst5, src5, dst6, src6, dst7, src7, vec9, vec11,
2460 tmp0 = __msa_dpadd_s_h(
zero, wgt, vec0);
2461 tmp1 = __msa_dpadd_s_h(
zero, wgt, vec1);
2462 tmp2 = __msa_dpadd_s_h(
zero, wgt, vec2);
2463 tmp3 = __msa_dpadd_s_h(
zero, wgt, vec3);
2464 tmp4 = __msa_dpadd_s_h(
zero, wgt, vec4);
2465 tmp5 = __msa_dpadd_s_h(
zero, wgt, vec5);
2466 tmp6 = __msa_dpadd_s_h(
zero, wgt, vec6);
2467 tmp7 = __msa_dpadd_s_h(
zero, wgt, vec7);
2468 tmp8 = __msa_dpadd_s_h(
zero, wgt, vec8);
2469 tmp9 = __msa_dpadd_s_h(
zero, wgt, vec9);
2470 tmp10 = __msa_dpadd_s_h(
zero, wgt, vec10);
2471 tmp11 = __msa_dpadd_s_h(
zero, wgt, vec11);
2472 tmp12 = __msa_dpadd_s_h(
zero, wgt, vec12);
2473 tmp13 = __msa_dpadd_s_h(
zero, wgt, vec13);
2474 tmp14 = __msa_dpadd_s_h(
zero, wgt, vec14);
2475 tmp15 = __msa_dpadd_s_h(
zero, wgt, vec15);
2476 tmp0 = __msa_adds_s_h(tmp0,
offset);
2477 tmp1 = __msa_adds_s_h(tmp1,
offset);
2478 tmp2 = __msa_adds_s_h(tmp2,
offset);
2479 tmp3 = __msa_adds_s_h(tmp3,
offset);
2480 tmp4 = __msa_adds_s_h(tmp4,
offset);
2481 tmp5 = __msa_adds_s_h(tmp5,
offset);
2482 tmp6 = __msa_adds_s_h(tmp6,
offset);
2483 tmp7 = __msa_adds_s_h(tmp7,
offset);
2484 tmp8 = __msa_adds_s_h(tmp8,
offset);
2485 tmp9 = __msa_adds_s_h(tmp9,
offset);
2486 tmp10 = __msa_adds_s_h(tmp10,
offset);
2487 tmp11 = __msa_adds_s_h(tmp11,
offset);
2488 tmp12 = __msa_adds_s_h(tmp12,
offset);
2489 tmp13 = __msa_adds_s_h(tmp13,
offset);
2490 tmp14 = __msa_adds_s_h(tmp14,
offset);
2491 tmp15 = __msa_adds_s_h(tmp15,
offset);
2492 SRA_4V(tmp0, tmp1, tmp2, tmp3, denom);
2493 SRA_4V(tmp4, tmp5, tmp6, tmp7, denom);
2494 SRA_4V(tmp8, tmp9, tmp10, tmp11, denom);
2495 SRA_4V(tmp12, tmp13, tmp14, tmp15, denom);
2497 CLIP_SH8_0_255(tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15);
2498 PCKEV_B4_UB(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, dst0, dst1,
2500 PCKEV_B4_UB(tmp9, tmp8, tmp11, tmp10, tmp13, tmp12, tmp15, tmp14, dst4,
2508 int log2_denom,
int weight_dst,
2509 int weight_src,
int offset)
2514 }
else if (8 ==
height) {
2525 int log2_denom,
int weight_dst,
2526 int weight_src,
int offset)
2531 }
else if (4 ==
height) {
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define flags(name, subs,...)
#define INSERT_W4_UB(...)
#define CLIP_SH2_0_255(in0, in1)
#define XORI_B2_128_UB(...)
#define LW2(psrc, stride, out0, out1)
#define LD4(psrc, stride, out0, out1, out2, out3)
#define ST_D4(in0, in1, idx0, idx1, idx2, idx3, pdst, stride)
#define XORI_B8_128_UB(...)
#define MUL4(in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, out2, out3)
#define XORI_B4_128_UB(...)
#define CLIP_SH4_0_255(in0, in1, in2, in3)
#define TRANSPOSE8x4_UB_UB(...)
#define ST_D8(in0, in1, in2, in3, idx0, idx1, idx2, idx3, idx4, idx5, idx6, idx7, pdst, stride)
#define TRANSPOSE16x8_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, out0, out1, out2, out3, out4, out5, out6, out7)
#define PCKEV_B4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, out2, out3)
#define INSERT_W2_UB(...)
#define SRA_4V(in0, in1, in2, in3, shift)
#define UNPCK_UB_SH(in, out0, out1)
#define CLIP_SH(in, min, max)
#define ST_W2(in, idx0, idx1, pdst, stride)
#define ST_W8(in0, in1, idx0, idx1, idx2, idx3, idx4, idx5, idx6, idx7, pdst, stride)
#define LW4(psrc, stride, out0, out1, out2, out3)
#define MUL2(in0, in1, in2, in3, out0, out1)
#define INSERT_D2_UB(...)
#define ILVRL_B2(RTYPE, in0, in1, out0, out1)
#define CLIP_SH8_0_255(in0, in1, in2, in3, in4, in5, in6, in7)
#define ST_H4(in, idx0, idx1, idx2, idx3, pdst, stride)
static void avc_wgt_4x8_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t offset_in)
#define AVC_LPF_H_2BYTE_CHROMA_422(src, stride, tc_val, alpha, beta, res)
void ff_biweight_h264_pixels8_8_msa(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int height, int log2_denom, int weight_dst, int weight_src, int offset)
void ff_h264_h_loop_filter_luma_mbaff_msa(uint8_t *src, ptrdiff_t ystride, int32_t alpha, int32_t beta, int8_t *tc0)
#define AVC_LPF_P1_OR_Q1(p0_or_q0_org_in, q0_or_p0_org_in, p1_or_q1_org_in, p2_or_q2_org_in, negate_tc_in, tc_in, p1_or_q1_out)
static void avc_wgt_4x4_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t offset_in)
void ff_biweight_h264_pixels4_8_msa(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int height, int log2_denom, int weight_dst, int weight_src, int offset)
static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *pPix, uint32_t iStride, uint8_t iAlpha, uint8_t iBeta, uint8_t *pTc)
static void avc_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, ptrdiff_t stride, int32_t alpha_in, int32_t beta_in, int8_t *tc0)
static void avc_h_loop_filter_chroma422_msa(uint8_t *src, ptrdiff_t stride, int32_t alpha_in, int32_t beta_in, int8_t *tc0)
static void avc_loopfilter_cb_or_cr_intra_edge_hor_msa(uint8_t *data_cb_or_cr, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t img_width)
void ff_h264_h_loop_filter_chroma422_msa(uint8_t *src, ptrdiff_t ystride, int32_t alpha, int32_t beta, int8_t *tc0)
static void avc_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, ptrdiff_t stride, int32_t alpha_in, int32_t beta_in)
void ff_weight_h264_pixels4_8_msa(uint8_t *src, ptrdiff_t stride, int height, int log2_denom, int weight_src, int offset)
#define AVC_LPF_P0P1P2_OR_Q0Q1Q2(p3_or_q3_org_in, p0_or_q0_org_in, q3_or_p3_org_in, p1_or_q1_org_in, p2_or_q2_org_in, q1_or_p1_org_in, p0_or_q0_out, p1_or_q1_out, p2_or_q2_out)
#define AVC_LPF_H_CHROMA_422(src, stride, tc_val, alpha, beta, res)
static void avc_wgt_8x4_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t offset_in)
static void avc_loopfilter_cb_or_cr_inter_edge_ver_msa(uint8_t *data, uint8_t bs0, uint8_t bs1, uint8_t bs2, uint8_t bs3, uint8_t tc0, uint8_t tc1, uint8_t tc2, uint8_t tc3, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t img_width)
static void avc_biwgt_8x4_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t dst_weight, int32_t offset_in)
void ff_h264_h_lpf_luma_inter_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta, int8_t *tc)
#define AVC_LPF_P0_OR_Q0(p0_or_q0_org_in, q1_or_p1_org_in, p1_or_q1_org_in, p0_or_q0_out)
static void avc_wgt_8x16_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t offset_in)
static void avc_loopfilter_luma_intra_edge_ver_msa(uint8_t *data, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t img_width)
void ff_h264_v_lpf_luma_intra_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta)
static void avc_biwgt_4x4_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t dst_weight, int32_t offset_in)
static void avc_wgt_4x2_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t offset_in)
void ff_h264_h_lpf_luma_intra_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta)
static void avc_biwgt_8x16_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t dst_weight, int32_t offset_in)
void ff_h264_h_loop_filter_chroma422_mbaff_msa(uint8_t *src, ptrdiff_t ystride, int32_t alpha, int32_t beta, int8_t *tc0)
static void avc_loopfilter_cb_or_cr_inter_edge_hor_msa(uint8_t *data, uint8_t bs0, uint8_t bs1, uint8_t bs2, uint8_t bs3, uint8_t tc0, uint8_t tc1, uint8_t tc2, uint8_t tc3, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t img_width)
static void avc_wgt_8x8_msa(uint8_t *data, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t offset_in)
static void avc_biwgt_4x2_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t dst_weight, int32_t offset_in)
void ff_h264_h_lpf_chroma_inter_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta, int8_t *tc)
void ff_weight_h264_pixels16_8_msa(uint8_t *src, ptrdiff_t stride, int height, int log2_denom, int weight_src, int offset_in)
void ff_h264_v_lpf_chroma_inter_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta, int8_t *tc)
static void avc_loopfilter_luma_intra_edge_hor_msa(uint8_t *data, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t img_width)
static void avc_biwgt_4x8_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t dst_weight, int32_t offset_in)
void ff_h264_v_lpf_chroma_intra_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta)
void ff_h264_h_lpf_chroma_intra_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta)
static void avc_h_loop_filter_luma_mbaff_msa(uint8_t *in, ptrdiff_t stride, int32_t alpha_in, int32_t beta_in, int8_t *tc0)
void ff_biweight_h264_pixels16_8_msa(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int height, int log2_denom, int weight_dst, int weight_src, int offset_in)
static void avc_biwgt_8x8_msa(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int32_t log2_denom, int32_t src_weight, int32_t dst_weight, int32_t offset_in)
void ff_h264_v_lpf_luma_inter_msa(uint8_t *data, ptrdiff_t img_width, int alpha, int beta, int8_t *tc)
void ff_h264_h_loop_filter_luma_mbaff_intra_msa(uint8_t *src, ptrdiff_t ystride, int32_t alpha, int32_t beta)
static void avc_loopfilter_cb_or_cr_intra_edge_ver_msa(uint8_t *data_cb_or_cr, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t img_width)
void ff_weight_h264_pixels8_8_msa(uint8_t *src, ptrdiff_t stride, int height, int log2_denom, int weight_src, int offset)
static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, uint8_t bs0, uint8_t bs1, uint8_t bs2, uint8_t bs3, uint8_t tc0, uint8_t tc1, uint8_t tc2, uint8_t tc3, uint8_t alpha_in, uint8_t beta_in, ptrdiff_t image_width)
#define AVC_LPF_P0Q0(q0_or_p0_org_in, p0_or_q0_org_in, p1_or_q1_org_in, q1_or_p1_org_in, negate_threshold_in, threshold_in, p0_or_q0_out, q0_or_p0_out)
static const int16_t alpha[]
static int zero(InterplayACMContext *s, unsigned ind, unsigned col)
static const uint8_t q1[256]
static const uint8_t q0[256]
#define ST_W4(in, idx0, idx1, idx2, idx3, pdst, stride)