Commit b4b77383ae for ffmpeg
commit b4b77383ae797c463cb9779e2bf7094005c0b73a
Author: Michael Niedermayer <michael@niedermayer.cc>
Date: Wed Oct 14 21:06:59 2026 +0200
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 <michael@niedermayer.cc>
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);
}