PR #25085 opened by michaelni URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25085 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25085.patch
>From f328e7d4f7f942ecba3238310c1f0708c1ea60ce Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Wed, 14 Oct 2026 21:06:59 +0200 Subject: [PATCH 1/2] avutil/mips: add PCKEV_H2_SB and PCKEV_H4_SB Variants of PCKEV_H2 and PCKEV_H4 that store into v16i8 vectors, for callers that feed the packed halfwords straight into byte packing. --- libavutil/mips/generic_macros_msa.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavutil/mips/generic_macros_msa.h b/libavutil/mips/generic_macros_msa.h index 9beb0443ed..4d8f4f450c 100644 --- a/libavutil/mips/generic_macros_msa.h +++ b/libavutil/mips/generic_macros_msa.h @@ -1756,6 +1756,7 @@ out0 = (RTYPE) __msa_pckev_h((v8i16) in0, (v8i16) in1); \ out1 = (RTYPE) __msa_pckev_h((v8i16) in2, (v8i16) in3); \ } +#define PCKEV_H2_SB(...) PCKEV_H2(v16i8, __VA_ARGS__) #define PCKEV_H2_SH(...) PCKEV_H2(v8i16, __VA_ARGS__) #define PCKEV_H2_SW(...) PCKEV_H2(v4i32, __VA_ARGS__) @@ -1765,6 +1766,7 @@ PCKEV_H2(RTYPE, in0, in1, in2, in3, out0, out1); \ PCKEV_H2(RTYPE, in4, in5, in6, in7, out2, out3); \ } +#define PCKEV_H4_SB(...) PCKEV_H4(v16i8, __VA_ARGS__) #define PCKEV_H4_SH(...) PCKEV_H4(v8i16, __VA_ARGS__) #define PCKEV_H4_SW(...) PCKEV_H4(v4i32, __VA_ARGS__) -- 2.52.0 >From be77ef0969f0ab538aa071365e5ea7030b2ff073 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Wed, 14 Oct 2026 21:06:59 +0200 Subject: [PATCH 2/2] avcodec/mips: fix MSA vector type mismatches GCC rejects implicit conversions between vector types, so the MSA code failed to compile with it Signed-off-by: Michael Niedermayer <[email protected]> --- libavcodec/mips/hevc_mc_uni_msa.c | 2 +- libavcodec/mips/hevc_mc_uniw_msa.c | 137 ++++++++++++++--------------- libavcodec/mips/hevcdsp_msa.c | 6 +- libavcodec/mips/me_cmp_msa.c | 8 +- 4 files changed, 76 insertions(+), 77 deletions(-) diff --git a/libavcodec/mips/hevc_mc_uni_msa.c b/libavcodec/mips/hevc_mc_uni_msa.c index 602b7c614a..e69daaabda 100644 --- a/libavcodec/mips/hevc_mc_uni_msa.c +++ b/libavcodec/mips/hevc_mc_uni_msa.c @@ -976,7 +976,7 @@ static void common_vt_8t_4w_msa(const uint8_t *src, int32_t src_stride, src += 2 * src_stride; ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r); src8776 = (v16i8)__msa_ilvr_d((v2i64) src87_r, (v2i64) src76_r); - src8776 = (v16i8)__msa_xori_b(src8776, 128); + src8776 = (v16i8)__msa_xori_b((v16u8) src8776, 128); out10 = (v8i16)__msa_dotp_s_h((v16i8) src2110, (v16i8) filt0); out10 = (v8i16)__msa_dpadd_s_h((v8i16) out10, src4332, filt1); out10 = (v8i16)__msa_dpadd_s_h((v8i16) out10, src6554, filt2); diff --git a/libavcodec/mips/hevc_mc_uniw_msa.c b/libavcodec/mips/hevc_mc_uniw_msa.c index 502a502037..85ad0def3d 100644 --- a/libavcodec/mips/hevc_mc_uniw_msa.c +++ b/libavcodec/mips/hevc_mc_uniw_msa.c @@ -84,8 +84,8 @@ static void hevc_uniwgt_copy_4w_msa(const uint8_t *src, v16i8 zero = { 0 }; v16u8 out0, out1; v16i8 src0 = { 0 }, src1 = { 0 }; - v8i16 dst0, dst1, dst2, dst3, offset_vec; - v4i32 weight_vec, rnd_vec; + v8i16 dst0, dst1, dst2, dst3; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -153,8 +153,8 @@ static void hevc_uniwgt_copy_6w_msa(const uint8_t *src, v16i8 zero = { 0 }; v16u8 out0, out1, out2, out3; v16i8 src0, src1, src2, src3; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, offset_vec; - v4i32 weight_vec, rnd_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -259,8 +259,8 @@ static void hevc_uniwgt_copy_8w_msa(const uint8_t *src, v16i8 src0 = { 0 }, src1 = { 0 }, src2 = { 0 }, src3 = { 0 }; v16i8 zero = { 0 }; v16u8 out0, out1, out2, out3; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, offset_vec; - v4i32 weight_vec, rnd_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -352,9 +352,8 @@ static void hevc_uniwgt_copy_12w_msa(const uint8_t *src, v16u8 out0, out1, out2; v16i8 src0, src1, src2, src3; v8i16 dst0, dst1, dst2, dst3, dst4, dst5; - v8i16 offset_vec; v16i8 zero = { 0 }; - v4i32 weight_vec, rnd_vec; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -396,8 +395,8 @@ static void hevc_uniwgt_copy_16w_msa(const uint8_t *src, v16u8 out0, out1, out2, out3; v16i8 src0, src1, src2, src3; v16i8 zero = { 0 }; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, offset_vec; - v4i32 weight_vec, rnd_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -438,9 +437,9 @@ static void hevc_uniwgt_copy_24w_msa(const uint8_t *src, v16u8 out0, out1, out2, out3, out4, out5; v16i8 src0, src1, src2, src3, src4, src5, src6, src7; v16i8 zero = { 0 }; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, offset_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; v8i16 dst8, dst9, dst10, dst11; - v4i32 weight_vec, rnd_vec; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -490,8 +489,8 @@ static void hevc_uniwgt_copy_32w_msa(const uint8_t *src, v16u8 out0, out1, out2, out3; v16i8 src0, src1, src2, src3; v16i8 zero = { 0 }; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, offset_vec; - v4i32 weight_vec, rnd_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -535,9 +534,9 @@ static void hevc_uniwgt_copy_48w_msa(const uint8_t *src, v16u8 out0, out1, out2, out3, out4, out5; v16i8 src0, src1, src2, src3, src4, src5; v16i8 zero = { 0 }; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, offset_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5; v8i16 dst6, dst7, dst8, dst9, dst10, dst11; - v4i32 weight_vec, rnd_vec; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -591,9 +590,9 @@ static void hevc_uniwgt_copy_64w_msa(const uint8_t *src, v16u8 out0, out1, out2, out3, out4, out5, out6, out7; v16i8 src0, src1, src2, src3, src4, src5, src6, src7; v16i8 zero = { 0 }; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, offset_vec; + v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7; v8i16 dst8, dst9, dst10, dst11, dst12, dst13, dst14, dst15; - v4i32 weight_vec, rnd_vec; + v4i32 weight_vec, rnd_vec, offset_vec; weight_vec = __msa_fill_w(weight); offset_vec = __msa_fill_w(offset); @@ -680,13 +679,13 @@ static void hevc_hz_uniwgt_8t_4w_msa(const uint8_t *src, for (loop_cnt = (height >> 3); loop_cnt--;) { LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); src += (8 * src_stride); - VSHF_B4_SB(src0, src1, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src0, src1, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3); - VSHF_B4_SB(src2, src3, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src2, src3, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7); - VSHF_B4_SB(src4, src5, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src4, src5, mask0, mask1, mask2, mask3, vec8, vec9, vec10, vec11); - VSHF_B4_SB(src6, src7, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src6, src7, mask0, mask1, mask2, mask3, vec12, vec13, vec14, vec15); HEVC_FILT_8TAP_4W_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, @@ -718,13 +717,13 @@ static void hevc_hz_uniwgt_8t_4w_msa(const uint8_t *src, } if (res) { LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7); - VSHF_B4_SB(src0, src1, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src0, src1, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3); - VSHF_B4_SB(src2, src3, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src2, src3, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7); - VSHF_B4_SB(src4, src5, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src4, src5, mask0, mask1, mask2, mask3, vec8, vec9, vec10, vec11); - VSHF_B4_SB(src6, src7, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src6, src7, mask0, mask1, mask2, mask3, vec12, vec13, vec14, vec15); HEVC_FILT_8TAP_4W_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, @@ -804,13 +803,13 @@ static void hevc_hz_uniwgt_8t_8w_msa(const uint8_t *src, LD_SB4(src, src_stride, src0, src1, src2, src3); src += (4 * src_stride); - VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src0, src0, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3); - VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src1, src1, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7); - VSHF_B4_SB(src2, src2, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src2, src2, mask0, mask1, mask2, mask3, vec8, vec9, vec10, vec11); - VSHF_B4_SB(src3, src3, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src3, src3, mask0, mask1, mask2, mask3, vec12, vec13, vec14, vec15); HEVC_FILT_8TAP_4W_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3, dst0, dst1); @@ -841,9 +840,9 @@ static void hevc_hz_uniwgt_8t_8w_msa(const uint8_t *src, if (res) { LD_SB2(src, src_stride, src0, src1); - VSHF_B4_SB(src0, src0, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src0, src0, mask0, mask1, mask2, mask3, vec0, vec1, vec2, vec3); - VSHF_B4_SB(src1, src1, mask0, mask1, mask2, mask3, + VSHF_B4_SH(src1, src1, mask0, mask1, mask2, mask3, vec4, vec5, vec6, vec7); HEVC_FILT_8TAP_4W_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3, dst0, dst1); @@ -857,7 +856,7 @@ static void hevc_hz_uniwgt_8t_8w_msa(const uint8_t *src, offset_vec, dst0, dst1, dst2, dst3); CLIP_SW4_0_255(dst0, dst1, dst2, dst3); PCKEV_H2_SH(dst1, dst0, dst3, dst2, vec0, vec1); - out0 = __msa_pckev_b((v16i8) vec1, (v16i8) vec0); + out0 = (v16u8) __msa_pckev_b((v16i8) vec1, (v16i8) vec0); ST_D2(out0, 0, 1, dst, dst_stride); } } @@ -931,8 +930,8 @@ static void hevc_hz_uniwgt_8t_12w_msa(const uint8_t *src, ADD2(dst00, offset_vec, dst01, offset_vec, dst00, dst01); CLIP_SW4_0_255(dst0, dst1, dst2, dst3); CLIP_SW2_0_255(dst00, dst01); - PCKEV_H2_SH(dst1, dst0, dst3, dst2, vec0, vec1); - vec2 = __msa_pckev_h((v8i16) dst01, (v8i16) dst00); + PCKEV_H2_SB(dst1, dst0, dst3, dst2, vec0, vec1); + vec2 = (v16i8) __msa_pckev_h((v8i16) dst01, (v8i16) dst00); PCKEV_B2_UB(vec1, vec0, zero, vec2, out0, out1); ST_D2(out0, 0, 1, dst, dst_stride); @@ -1011,7 +1010,7 @@ static void hevc_hz_uniwgt_8t_16w_msa(const uint8_t *src, ADD4(dst4, offset_vec, dst5, offset_vec, dst6, offset_vec, dst7, offset_vec, dst4, dst5, dst6, dst7); CLIP_SW8_0_255(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); - PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + PCKEV_H4_SB(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, vec0, vec1, vec2, vec3); PCKEV_B2_UB(vec1, vec0, vec3, vec2, out0, out1); @@ -1110,9 +1109,9 @@ static void hevc_hz_uniwgt_8t_24w_msa(const uint8_t *src, offset_vec, dst8, dst9, dst10, dst11); CLIP_SW8_0_255(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); CLIP_SW4_0_255(dst8, dst9, dst10, dst11); - PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + PCKEV_H4_SB(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, vec0, vec1, vec2, vec3); - PCKEV_H2_SH(dst9, dst8, dst11, dst10, vec4, vec5); + PCKEV_H2_SB(dst9, dst8, dst11, dst10, vec4, vec5); PCKEV_B3_UB(vec1, vec0, vec4, vec3, vec5, vec2, out0, out1, out2); ST_UB2(out0, out1, dst, dst_stride); @@ -1221,9 +1220,9 @@ static void hevc_hz_uniwgt_8t_32w_msa(const uint8_t *src, offset_vec, dst14, dst15, dst16, dst17); CLIP_SW8_0_255(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); CLIP_SW8_0_255(dst10, dst11, dst12, dst13, dst14, dst15, dst16, dst17); - PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + PCKEV_H4_SB(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, vec0, vec1, vec2, vec3); - PCKEV_H4_SH(dst11, dst10, dst13, dst12, dst15, dst14, dst17, dst16, + PCKEV_H4_SB(dst11, dst10, dst13, dst12, dst15, dst14, dst17, dst16, vec4, vec5, vec6, vec7); PCKEV_B2_UB(vec1, vec0, vec3, vec2, out0, out1); @@ -1325,11 +1324,11 @@ static void hevc_hz_uniwgt_8t_48w_msa(const uint8_t *src, offset_vec, dst8, dst9, dst10, dst11); CLIP_SW8_0_255(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); CLIP_SW4_0_255(dst8, dst9, dst10, dst11); - PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + PCKEV_H4_SB(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, vec0, vec1, vec2, vec3); - PCKEV_H2_SH(dst9, dst8, dst11, dst10, vec4, vec5); + PCKEV_H2_SB(dst9, dst8, dst11, dst10, vec4, vec5); PCKEV_B2_UB(vec1, vec0, vec3, vec2, out0, out1); - out2 = __msa_pckev_b((v16i8) vec5, (v16i8) vec4); + out2 = (v16u8) __msa_pckev_b((v16i8) vec5, (v16i8) vec4); ST_UB2(out0, out1, dst, 16); ST_UB(out2, dst + 32); dst += dst_stride; @@ -1415,7 +1414,7 @@ static void hevc_hz_uniwgt_8t_64w_msa(const uint8_t *src, ADD4(dst4, offset_vec, dst5, offset_vec, dst6, offset_vec, dst7, offset_vec, dst4, dst5, dst6, dst7); CLIP_SW8_0_255(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); - PCKEV_H4_SH(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, + PCKEV_H4_SB(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6, vec0, vec1, vec2, vec3); PCKEV_B2_UB(vec1, vec0, vec3, vec2, out0, out1); ST_UB2(out0, out1, dst_tmp, 16); @@ -1655,7 +1654,7 @@ static void hevc_vt_uniwgt_8t_8w_msa(const uint8_t *src, offset_vec, dst0, dst1, dst2, dst3); CLIP_SW4_0_255(dst0, dst1, dst2, dst3); PCKEV_H2_SH(dst1, dst0, dst3, dst2, vec0, vec1); - out0 = __msa_pckev_b((v16i8) vec1, (v16i8) vec0); + out0 = (v16u8) __msa_pckev_b((v16i8) vec1, (v16i8) vec0); ST_D2(out0, 0, 1, dst, dst_stride); } } @@ -2172,11 +2171,11 @@ static void hevc_hv_uniwgt_8t_8multx2mult_msa(const uint8_t *src, filter_vec = LD_SH(filter_x); UNPCK_R_SB_SH(filter_vec, filter_vec); - SPLATI_W4_SW(filter_vec, filt0, filt1, filt2, filt3); + SPLATI_W4_SH(filter_vec, filt0, filt1, filt2, filt3); filter_vec = LD_SH(filter_y); UNPCK_R_SB_SH(filter_vec, filter_vec); - SPLATI_W4_SW(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3); + SPLATI_W4_SH(filter_vec, filt_h0, filt_h1, filt_h2, filt_h3); mask1 = mask0 + 2; mask2 = mask0 + 4; @@ -2631,7 +2630,7 @@ static void hevc_hz_uniwgt_4t_4x2_msa(const uint8_t *src, SRAR_W2_SW(dst0, dst1, rnd_vec); ADD2(dst0, offset_vec, dst1, offset_vec, dst0, dst1); CLIP_SW2_0_255(dst0, dst1); - vec0 = __msa_pckev_h((v8i16) dst1, (v8i16) dst0); + vec0 = (v16i8) __msa_pckev_h((v8i16) dst1, (v8i16) dst0); out = (v16u8) __msa_pckev_b((v16i8) vec0, (v16i8) vec0); ST_W2(out, 0, 1, dst, dst_stride); dst += (4 * dst_stride); @@ -3007,18 +3006,18 @@ static void hevc_hz_uniwgt_4t_8x4_msa(const uint8_t *src, VSHF_B2_SB(src1, src1, src1, src1, mask0, mask1, vec2, vec3); VSHF_B2_SB(src2, src2, src2, src2, mask0, mask1, vec4, vec5); VSHF_B2_SB(src3, src3, src3, src3, mask0, mask1, vec6, vec7); - ILVRL_B2_SH(zero, vec0, tmp0, tmp1); - ILVRL_B2_SH(zero, vec1, tmp2, tmp3); - ILVRL_B2_SH(zero, vec2, tmp4, tmp5); - ILVRL_B2_SH(zero, vec3, tmp6, tmp7); + ILVRL_B2_SW(zero, vec0, tmp0, tmp1); + ILVRL_B2_SW(zero, vec1, tmp2, tmp3); + ILVRL_B2_SW(zero, vec2, tmp4, tmp5); + ILVRL_B2_SW(zero, vec3, tmp6, tmp7); dst0 = HEVC_FILT_4TAP_SW(tmp0, tmp2, filt0, filt1); dst1 = HEVC_FILT_4TAP_SW(tmp1, tmp3, filt0, filt1); dst2 = HEVC_FILT_4TAP_SW(tmp4, tmp6, filt0, filt1); dst3 = HEVC_FILT_4TAP_SW(tmp5, tmp7, filt0, filt1); - ILVRL_B2_SH(zero, vec4, tmp0, tmp1); - ILVRL_B2_SH(zero, vec5, tmp2, tmp3); - ILVRL_B2_SH(zero, vec6, tmp4, tmp5); - ILVRL_B2_SH(zero, vec7, tmp6, tmp7); + ILVRL_B2_SW(zero, vec4, tmp0, tmp1); + ILVRL_B2_SW(zero, vec5, tmp2, tmp3); + ILVRL_B2_SW(zero, vec6, tmp4, tmp5); + ILVRL_B2_SW(zero, vec7, tmp6, tmp7); dst4 = HEVC_FILT_4TAP_SW(tmp0, tmp2, filt0, filt1); dst5 = HEVC_FILT_4TAP_SW(tmp1, tmp3, filt0, filt1); dst6 = HEVC_FILT_4TAP_SW(tmp4, tmp6, filt0, filt1); @@ -3036,8 +3035,8 @@ static void hevc_hz_uniwgt_4t_8x4_msa(const uint8_t *src, dst7, offset_vec, dst4, dst5, dst6, dst7); CLIP_SW8_0_255(dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7); - PCKEV_H2_SH(dst1, dst0, dst3, dst2, tmp0, tmp1); - PCKEV_H2_SH(dst5, dst4, dst7, dst6, tmp2, tmp3); + PCKEV_H2_SW(dst1, dst0, dst3, dst2, tmp0, tmp1); + PCKEV_H2_SW(dst5, dst4, dst7, dst6, tmp2, tmp3); PCKEV_B2_UB(tmp1, tmp0, tmp3, tmp2, out0, out1); ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); @@ -4489,9 +4488,9 @@ static void hevc_vt_uniwgt_4t_12w_msa(const uint8_t *src, offset_vec, dst8, dst9, dst10, dst11); CLIP_SW4_0_255(dst8, dst9, dst10, dst11); - PCKEV_H2_SH(dst1, dst0, dst3, dst2, dst0, dst1); - PCKEV_H2_SH(dst5, dst4, dst7, dst6, dst2, dst3); - PCKEV_H2_SH(dst9, dst8, dst11, dst10, dst4, dst5); + PCKEV_H2_SW(dst1, dst0, dst3, dst2, dst0, dst1); + PCKEV_H2_SW(dst5, dst4, dst7, dst6, dst2, dst3); + PCKEV_H2_SW(dst9, dst8, dst11, dst10, dst4, dst5); PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out0, out1, out2); ST_D4(out0, out1, 0, 1, 0, 1, dst, dst_stride); @@ -4544,9 +4543,9 @@ static void hevc_vt_uniwgt_4t_12w_msa(const uint8_t *src, offset_vec, dst8, dst9, dst10, dst11); CLIP_SW4_0_255(dst8, dst9, dst10, dst11); - PCKEV_H2_SH(dst1, dst0, dst3, dst2, dst0, dst1); - PCKEV_H2_SH(dst5, dst4, dst7, dst6, dst2, dst3); - PCKEV_H2_SH(dst9, dst8, dst11, dst10, dst4, dst5); + PCKEV_H2_SW(dst1, dst0, dst3, dst2, dst0, dst1); + PCKEV_H2_SW(dst5, dst4, dst7, dst6, dst2, dst3); + PCKEV_H2_SW(dst9, dst8, dst11, dst10, dst4, dst5); PCKEV_B3_UB(dst1, dst0, dst3, dst2, dst5, dst4, out3, out4, out5); ST_D4(out3, out4, 0, 1, 0, 1, dst, dst_stride); @@ -5199,11 +5198,11 @@ static void hevc_hv_uniwgt_4t_4multx8mult_msa(const uint8_t *src, dst6 = HEVC_FILT_4TAP_SW(tmp4, tmp6, filt0, filt1); dst10 = HEVC_FILT_4TAP_SW(tmp5, tmp7, filt0, filt1); - dst32_r = __msa_ilvev_h(dst3, dst2); + dst32_r = __msa_ilvev_h((v8i16) dst3, (v8i16) dst2); ILVEV_H2_SH(dst3, dst4, dst7, dst8, dst43_r, dst87_r); ILVEV_H2_SH(dst4, dst5, dst8, dst9, dst54_r, dst98_r); ILVEV_H2_SH(dst5, dst6, dst9, dst10, dst65_r, dst109_r); - dst76_r = __msa_ilvev_h(dst7, dst6); + dst76_r = __msa_ilvev_h((v8i16) dst7, (v8i16) dst6); dst0 = HEVC_FILT_4TAP(dst10_r, dst32_r, filt_h0, filt_h1); dst1 = HEVC_FILT_4TAP(dst21_r, dst43_r, filt_h0, filt_h1); dst2 = HEVC_FILT_4TAP(dst32_r, dst54_r, filt_h0, filt_h1); @@ -5281,7 +5280,7 @@ static void hevc_hv_uniwgt_4t_6w_msa(const uint8_t *src, v16i8 mask1; v8i16 filt_h0, filt_h1, filter_vec; v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7; - v8i16 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9; + v4i32 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8, dst9; v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; v8i16 dst10_r, dst32_r, dst54_r, dst76_r, dst98_r, dst21_r, dst43_r; v8i16 dst65_r, dst87_r, dst109_r, dst10_l, dst32_l, dst54_l, dst76_l; @@ -6125,11 +6124,11 @@ static void hevc_hv_uniwgt_4t_12w_msa(const uint8_t *src, dst6 = HEVC_FILT_4TAP_SW(tmp4, tmp6, filt0, filt1); dst10 = HEVC_FILT_4TAP_SW(tmp5, tmp7, filt0, filt1); - dst32_r = __msa_ilvev_h(dst3, dst2); + dst32_r = __msa_ilvev_h((v8i16) dst3, (v8i16) dst2); ILVEV_H2_SH(dst3, dst4, dst7, dst8, dst43_r, dst87_r); ILVEV_H2_SH(dst4, dst5, dst8, dst9, dst54_r, dst98_r); ILVEV_H2_SH(dst5, dst6, dst9, dst10, dst65_r, dst109_r); - dst76_r = __msa_ilvev_h(dst7, dst6); + dst76_r = __msa_ilvev_h((v8i16) dst7, (v8i16) dst6); dst0 = HEVC_FILT_4TAP(dst10_r, dst32_r, filt_h0, filt_h1); dst1 = HEVC_FILT_4TAP(dst21_r, dst43_r, filt_h0, filt_h1); dst2 = HEVC_FILT_4TAP(dst32_r, dst54_r, filt_h0, filt_h1); diff --git a/libavcodec/mips/hevcdsp_msa.c b/libavcodec/mips/hevcdsp_msa.c index 2b8d2d70ad..e9020a0135 100644 --- a/libavcodec/mips/hevcdsp_msa.c +++ b/libavcodec/mips/hevcdsp_msa.c @@ -220,7 +220,7 @@ static void hevc_copy_12w_msa(const uint8_t *src, int32_t src_stride, in0 = (v8i16)__msa_ilvl_b((v16i8) zero, (v16i8) src0); in0_r = in0_r << 6; in0 = in0 << 6; - ST_UH(in0_r, dst); + ST_SH(in0_r, dst); out0 = __msa_copy_u_d((v2i64) in0, 0); SD(out0, dst + 8); dst += dst_stride; @@ -1101,8 +1101,8 @@ static void hevc_vt_8t_4w_msa(const uint8_t *src, int32_t src_stride, LD_SB2(src, src_stride, src7, src8); src += 2 * src_stride; ILVR_B2_SB(src7, src6, src8, src7, src76_r, src87_r); - src8776 = (v16i8)__msa_ilvr_d((v2i64) src87_r, src76_r); - src8776 = (v16i8)__msa_xori_b((v16i8) src8776, 128); + src8776 = (v16i8)__msa_ilvr_d((v2i64) src87_r, (v2i64) src76_r); + src8776 = (v16i8)__msa_xori_b((v16u8) src8776, 128); dst10 = const_vec; DPADD_SB4_SH(src2110, src4332, src6554, src8776, filt0, filt1, filt2, filt3, dst10, dst10, dst10, dst10); diff --git a/libavcodec/mips/me_cmp_msa.c b/libavcodec/mips/me_cmp_msa.c index 8ecc6352e6..8749439827 100644 --- a/libavcodec/mips/me_cmp_msa.c +++ b/libavcodec/mips/me_cmp_msa.c @@ -361,8 +361,8 @@ static uint32_t sad_hv_bilinear_filter_8width_msa(const uint8_t *src, comp2 = __msa_hadd_u_h(temp1, temp1); comp2 += comp0; comp2 = (v8u16)__msa_srari_h((v8i16) comp2, 2); - comp0 = (v16u8) __msa_pckev_b((v16i8) zero, (v16i8) comp2); - diff = __msa_asub_u_b(src0, comp0); + comp0 = (v8u16) __msa_pckev_b((v16i8) zero, (v16i8) comp2); + diff = __msa_asub_u_b(src0, (v16u8) comp0); diff = (v16u8)__msa_ilvr_d((v2i64) zero, (v2i64) diff); sad += __msa_hadd_u_h(diff, diff); } @@ -546,7 +546,7 @@ static uint32_t sse_4width_msa(const uint8_t *src_ptr, int32_t src_stride, ref_ptr += ref_stride; src = (v16u8)__msa_insert_w((v4i32) src, 0, src0); ref = (v16u8)__msa_insert_w((v4i32) ref, 0, ref0); - reg0 = (v16u8)__msa_ilvr_b(src, ref); + reg0 = (v16u8)__msa_ilvr_b((v16i8) src, (v16i8) ref); reg0 = (v16u8)__msa_ilvr_d((v2i64) zero, (v2i64) reg0); tmp0 = (v8i16)__msa_hsub_u_h((v16u8) reg0, (v16u8) reg0); var = (v4i32)__msa_dpadd_s_w((v4i32) var, (v8i16) tmp0, (v8i16) tmp0); @@ -585,7 +585,7 @@ static uint32_t sse_8width_msa(const uint8_t *src_ptr, int32_t src_stride, ref0 = LD_UB(ref_ptr); src_ptr += src_stride; ref_ptr += ref_stride; - ref1 = (v16u8)__msa_ilvr_b(src0, ref0); + ref1 = (v16u8)__msa_ilvr_b((v16i8) src0, (v16i8) ref0); tmp0 = (v8i16)__msa_hsub_u_h((v16u8) ref1, (v16u8) ref1); var = (v4i32)__msa_dpadd_s_w((v4i32) var, (v8i16) tmp0, (v8i16) tmp0); } -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
