X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavcodec%2Fmips%2Fsimple_idct_msa.c;h=4bd3dd8a25ec4668041c8e68fa92be981c6830ae;hb=c8c2dfbc378e54aee7e8181ff532483096dc4bc7;hp=8a7235927e2159fbfee48261d1fb2adbf5d911a5;hpb=47e12966b75490cfa5fb8ed65a48a9a3d84a7bce;p=ffmpeg diff --git a/libavcodec/mips/simple_idct_msa.c b/libavcodec/mips/simple_idct_msa.c index 8a7235927e2..4bd3dd8a25e 100644 --- a/libavcodec/mips/simple_idct_msa.c +++ b/libavcodec/mips/simple_idct_msa.c @@ -336,35 +336,26 @@ static void simple_idct_put_msa(uint8_t *dst, int32_t dst_stride, SRA_4V(temp2_r, temp2_l, temp3_r, temp3_l, 20); SRA_4V(a3_r, a3_l, a2_r, a2_l, 20); SRA_4V(a1_r, a1_l, a0_r, a0_l, 20); - PCKEV_H4_SW(temp0_l, temp0_r, temp1_l, temp1_r, temp2_l, temp2_r, - temp3_l, temp3_r, temp0_r, temp1_r, temp2_r, temp3_r); - PCKEV_H4_SW(a0_l, a0_r, a1_l, a1_r, a2_l, a2_r, a3_l, a3_r, - a0_r, a1_r, a2_r, a3_r); - temp0_r = (v4i32) CLIP_SH_0_255(temp0_r); - temp1_r = (v4i32) CLIP_SH_0_255(temp1_r); - temp2_r = (v4i32) CLIP_SH_0_255(temp2_r); - temp3_r = (v4i32) CLIP_SH_0_255(temp3_r); - PCKEV_B4_SW(temp0_r, temp0_r, temp1_r, temp1_r, - temp2_r, temp2_r, temp3_r, temp3_r, - temp0_r, temp1_r, temp2_r, temp3_r); - tmp0 = __msa_copy_u_d((v2i64) temp0_r, 1); - tmp1 = __msa_copy_u_d((v2i64) temp1_r, 1); - tmp2 = __msa_copy_u_d((v2i64) temp2_r, 1); - tmp3 = __msa_copy_u_d((v2i64) temp3_r, 1); - SD4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); - dst += 4 * dst_stride; - a0_r = (v4i32) CLIP_SH_0_255(a0_r); - a1_r = (v4i32) CLIP_SH_0_255(a1_r); - a2_r = (v4i32) CLIP_SH_0_255(a2_r); - a3_r = (v4i32) CLIP_SH_0_255(a3_r); - PCKEV_B4_SW(a0_r, a0_r, a1_r, a1_r, - a2_r, a2_r, a3_r, a3_r, a0_r, a1_r, a2_r, a3_r); - tmp3 = __msa_copy_u_d((v2i64) a0_r, 1); - tmp2 = __msa_copy_u_d((v2i64) a1_r, 1); - tmp1 = __msa_copy_u_d((v2i64) a2_r, 1); - tmp0 = __msa_copy_u_d((v2i64) a3_r, 1); + PCKEV_H4_SH(temp0_l, temp0_r, temp1_l, temp1_r, temp2_l, temp2_r, + temp3_l, temp3_r, in0, in1, in2, in3); + PCKEV_H4_SH(a0_l, a0_r, a1_l, a1_r, a2_l, a2_r, a3_l, a3_r, + in4, in5, in6, in7); + CLIP_SH4_0_255(in0, in1, in2, in3); + PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, + in0, in1, in2, in3); + tmp0 = __msa_copy_u_d((v2i64) in0, 1); + tmp1 = __msa_copy_u_d((v2i64) in1, 1); + tmp2 = __msa_copy_u_d((v2i64) in2, 1); + tmp3 = __msa_copy_u_d((v2i64) in3, 1); SD4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); - dst += 4 * dst_stride; + CLIP_SH4_0_255(in4, in5, in6, in7); + PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, + in4, in5, in6, in7); + tmp3 = __msa_copy_u_d((v2i64) in4, 1); + tmp2 = __msa_copy_u_d((v2i64) in5, 1); + tmp1 = __msa_copy_u_d((v2i64) in6, 1); + tmp0 = __msa_copy_u_d((v2i64) in7, 1); + SD4(tmp0, tmp1, tmp2, tmp3, dst + 4 * dst_stride, dst_stride); } static void simple_idct_add_msa(uint8_t *dst, int32_t dst_stride, @@ -516,21 +507,17 @@ static void simple_idct_add_msa(uint8_t *dst, int32_t dst_stride, temp3_l, temp3_r, temp0_r, temp1_r, temp2_r, temp3_r); ILVR_B4_SW(zero, in0, zero, in1, zero, in2, zero, in3, temp0_l, temp1_l, temp2_l, temp3_l); - temp0_r = (v4i32) ((v8i16) (temp0_r) + (v8i16) (temp0_l)); - temp1_r = (v4i32) ((v8i16) (temp1_r) + (v8i16) (temp1_l)); - temp2_r = (v4i32) ((v8i16) (temp2_r) + (v8i16) (temp2_l)); - temp3_r = (v4i32) ((v8i16) (temp3_r) + (v8i16) (temp3_l)); - temp0_r = (v4i32) CLIP_SH_0_255(temp0_r); - temp1_r = (v4i32) CLIP_SH_0_255(temp1_r); - temp2_r = (v4i32) CLIP_SH_0_255(temp2_r); - temp3_r = (v4i32) CLIP_SH_0_255(temp3_r); - PCKEV_B4_SW(temp0_r, temp0_r, temp1_r, temp1_r, - temp2_r, temp2_r, temp3_r, temp3_r, - temp0_r, temp1_r, temp2_r, temp3_r); - tmp0 = __msa_copy_u_d((v2i64) temp0_r, 1); - tmp1 = __msa_copy_u_d((v2i64) temp1_r, 1); - tmp2 = __msa_copy_u_d((v2i64) temp2_r, 1); - tmp3 = __msa_copy_u_d((v2i64) temp3_r, 1); + in0 = (v8i16) (temp0_r) + (v8i16) (temp0_l); + in1 = (v8i16) (temp1_r) + (v8i16) (temp1_l); + in2 = (v8i16) (temp2_r) + (v8i16) (temp2_l); + in3 = (v8i16) (temp3_r) + (v8i16) (temp3_l); + CLIP_SH4_0_255(in0, in1, in2, in3); + PCKEV_B4_SH(in0, in0, in1, in1, in2, in2, in3, in3, + in0, in1, in2, in3); + tmp0 = __msa_copy_u_d((v2i64) in0, 1); + tmp1 = __msa_copy_u_d((v2i64) in1, 1); + tmp2 = __msa_copy_u_d((v2i64) in2, 1); + tmp3 = __msa_copy_u_d((v2i64) in3, 1); SD4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride); SRA_4V(a3_r, a3_l, a2_r, a2_l, 20); @@ -540,20 +527,17 @@ static void simple_idct_add_msa(uint8_t *dst, int32_t dst_stride, a0_r, a1_r, a2_r, a3_r); ILVR_B4_SW(zero, in4, zero, in5, zero, in6, zero, in7, a3_l, a2_l, a1_l, a0_l); - a3_r = (v4i32) ((v8i16) (a3_r) + (v8i16) (a3_l)); - a2_r = (v4i32) ((v8i16) (a2_r) + (v8i16) (a2_l)); - a1_r = (v4i32) ((v8i16) (a1_r) + (v8i16) (a1_l)); - a0_r = (v4i32) ((v8i16) (a0_r) + (v8i16) (a0_l)); - a3_r = (v4i32) CLIP_SH_0_255(a3_r); - a2_r = (v4i32) CLIP_SH_0_255(a2_r); - a1_r = (v4i32) CLIP_SH_0_255(a1_r); - a0_r = (v4i32) CLIP_SH_0_255(a0_r); - PCKEV_B4_SW(a0_r, a0_r, a1_r, a1_r, - a2_r, a2_r, a3_r, a3_r, a0_r, a1_r, a2_r, a3_r); - tmp0 = __msa_copy_u_d((v2i64) a3_r, 1); - tmp1 = __msa_copy_u_d((v2i64) a2_r, 1); - tmp2 = __msa_copy_u_d((v2i64) a1_r, 1); - tmp3 = __msa_copy_u_d((v2i64) a0_r, 1); + in4 = (v8i16) (a3_r) + (v8i16) (a3_l); + in5 = (v8i16) (a2_r) + (v8i16) (a2_l); + in6 = (v8i16) (a1_r) + (v8i16) (a1_l); + in7 = (v8i16) (a0_r) + (v8i16) (a0_l); + CLIP_SH4_0_255(in4, in5, in6, in7); + PCKEV_B4_SH(in4, in4, in5, in5, in6, in6, in7, in7, + in4, in5, in6, in7); + tmp0 = __msa_copy_u_d((v2i64) in4, 1); + tmp1 = __msa_copy_u_d((v2i64) in5, 1); + tmp2 = __msa_copy_u_d((v2i64) in6, 1); + tmp3 = __msa_copy_u_d((v2i64) in7, 1); SD4(tmp0, tmp1, tmp2, tmp3, dst + 4 * dst_stride, dst_stride); }