Unified · Split
| @@ -3065,37 +3065,309 @@ void ff_avg_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src, · 3064 unmodified lines | ||
| 3065 | 3065 | void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, |
| 3066 | 3066 | ptrdiff_t stride) |
| 3067 | 3067 | { |
| 3068 | − avc_luma_hz_qrt_16w_msa(src - 2, stride, dst, stride, 16, 0); | |
| 3068 | + uint32_t loop_cnt; | |
| 3069 | + v16i8 dst0, dst1, dst2, dst3, src0, src1, src2, src3, src4, src5, src6; | |
| 3070 | + v16i8 mask0, mask1, mask2, mask3, mask4, mask5, src7, vec11; | |
| 3071 | + v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9, vec10; | |
| 3072 | + v8i16 res0, res1, res2, res3, res4, res5, res6, res7; | |
| 3073 | + v16i8 minus5b = __msa_ldi_b(-5); | |
| 3074 | + v16i8 plus20b = __msa_ldi_b(20); | |
| 3075 | + | |
| 3076 | + LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 3077 | + mask3 = mask0 + 8; | |
| 3078 | + mask4 = mask1 + 8; | |
| 3079 | + mask5 = mask2 + 8; | |
| 3080 | + src -= 2; | |
| 3081 | + | |
| 3082 | + for (loop_cnt = 4; loop_cnt--;) { | |
| 3083 | + LD_SB2(src, 16, src0, src1); | |
| 3084 | + src += stride; | |
| 3085 | + LD_SB2(src, 16, src2, src3); | |
| 3086 | + src += stride; | |
| 3087 | + LD_SB2(src, 16, src4, src5); | |
| 3088 | + src += stride; | |
| 3089 | + LD_SB2(src, 16, src6, src7); | |
| 3090 | + src += stride; | |
| 3091 | + | |
| 3092 | + XORI_B8_128_SB(src0, src1, src2, src3, src4, src5, src6, src7); | |
| 3093 | + VSHF_B2_SB(src0, src0, src0, src1, mask0, mask3, vec0, vec3); | |
| 3094 | + VSHF_B2_SB(src2, src2, src2, src3, mask0, mask3, vec6, vec9); | |
| 3095 | + VSHF_B2_SB(src0, src0, src0, src1, mask1, mask4, vec1, vec4); | |
| 3096 | + VSHF_B2_SB(src2, src2, src2, src3, mask1, mask4, vec7, vec10); | |
| 3097 | + VSHF_B2_SB(src0, src0, src0, src1, mask2, mask5, vec2, vec5); | |
| 3098 | + VSHF_B2_SB(src2, src2, src2, src3, mask2, mask5, vec8, vec11); | |
| 3099 | + HADD_SB4_SH(vec0, vec3, vec6, vec9, res0, res1, res2, res3); | |
| 3100 | + DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b, | |
| 3101 | + minus5b, res0, res1, res2, res3); | |
| 3102 | + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, | |
| 3103 | + plus20b, res0, res1, res2, res3); | |
| 3104 | + VSHF_B2_SB(src4, src4, src4, src5, mask0, mask3, vec0, vec3); | |
| 3105 | + VSHF_B2_SB(src6, src6, src6, src7, mask0, mask3, vec6, vec9); | |
| 3106 | + VSHF_B2_SB(src4, src4, src4, src5, mask1, mask4, vec1, vec4); | |
| 3107 | + VSHF_B2_SB(src6, src6, src6, src7, mask1, mask4, vec7, vec10); | |
| 3108 | + VSHF_B2_SB(src4, src4, src4, src5, mask2, mask5, vec2, vec5); | |
| 3109 | + VSHF_B2_SB(src6, src6, src6, src7, mask2, mask5, vec8, vec11); | |
| 3110 | + HADD_SB4_SH(vec0, vec3, vec6, vec9, res4, res5, res6, res7); | |
| 3111 | + DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b, | |
| 3112 | + minus5b, res4, res5, res6, res7); | |
| 3113 | + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, | |
| 3114 | + plus20b, res4, res5, res6, res7); | |
| 3115 | + SLDI_B2_SB(src1, src3, src0, src2, src0, src2, 2); | |
| 3116 | + SLDI_B2_SB(src5, src7, src4, src6, src4, src6, 2); | |
| 3117 | + SRARI_H4_SH(res0, res1, res2, res3, 5); | |
| 3118 | + SRARI_H4_SH(res4, res5, res6, res7, 5); | |
| 3119 | + SAT_SH4_SH(res0, res1, res2, res3, 7); | |
| 3120 | + SAT_SH4_SH(res4, res5, res6, res7, 7); | |
| 3121 | + PCKEV_B2_SB(res1, res0, res3, res2, dst0, dst1); | |
| 3122 | + PCKEV_B2_SB(res5, res4, res7, res6, dst2, dst3); | |
| 3123 | + dst0 = __msa_aver_s_b(dst0, src0); | |
| 3124 | + dst1 = __msa_aver_s_b(dst1, src2); | |
| 3125 | + dst2 = __msa_aver_s_b(dst2, src4); | |
| 3126 | + dst3 = __msa_aver_s_b(dst3, src6); | |
| 3127 | + XORI_B4_128_SB(dst0, dst1, dst2, dst3); | |
| 3128 | + ST_SB4(dst0, dst1, dst2, dst3, dst, stride); | |
| 3129 | + dst += (4 * stride); | |
| 3130 | + } | |
| 3069 | 3131 | } |
| 3070 | 3132 | |
| 3071 | 3133 | void ff_put_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, |
| 3072 | 3134 | ptrdiff_t stride) |
| 3073 | 3135 | { |
| 3074 | − avc_luma_hz_qrt_16w_msa(src - 2, stride, dst, stride, 16, 1); | |
| 3136 | + uint32_t loop_cnt; | |
| 3137 | + v16i8 dst0, dst1, dst2, dst3, src0, src1, src2, src3, src4, src5, src6; | |
| 3138 | + v16i8 mask0, mask1, mask2, mask3, mask4, mask5, src7, vec11; | |
| 3139 | + v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9, vec10; | |
| 3140 | + v8i16 res0, res1, res2, res3, res4, res5, res6, res7; | |
| 3141 | + v16i8 minus5b = __msa_ldi_b(-5); | |
| 3142 | + v16i8 plus20b = __msa_ldi_b(20); | |
| 3143 | + | |
| 3144 | + LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 3145 | + mask3 = mask0 + 8; | |
| 3146 | + mask4 = mask1 + 8; | |
| 3147 | + mask5 = mask2 + 8; | |
| 3148 | + src -= 2; | |
| 3149 | + | |
| 3150 | + for (loop_cnt = 4; loop_cnt--;) { | |
| 3151 | + LD_SB2(src, 16, src0, src1); | |
| 3152 | + src += stride; | |
| 3153 | + LD_SB2(src, 16, src2, src3); | |
| 3154 | + src += stride; | |
| 3155 | + LD_SB2(src, 16, src4, src5); | |
| 3156 | + src += stride; | |
| 3157 | + LD_SB2(src, 16, src6, src7); | |
| 3158 | + src += stride; | |
| 3159 | + | |
| 3160 | + XORI_B8_128_SB(src0, src1, src2, src3, src4, src5, src6, src7); | |
| 3161 | + VSHF_B2_SB(src0, src0, src0, src1, mask0, mask3, vec0, vec3); | |
| 3162 | + VSHF_B2_SB(src2, src2, src2, src3, mask0, mask3, vec6, vec9); | |
| 3163 | + VSHF_B2_SB(src0, src0, src0, src1, mask1, mask4, vec1, vec4); | |
| 3164 | + VSHF_B2_SB(src2, src2, src2, src3, mask1, mask4, vec7, vec10); | |
| 3165 | + VSHF_B2_SB(src0, src0, src0, src1, mask2, mask5, vec2, vec5); | |
| 3166 | + VSHF_B2_SB(src2, src2, src2, src3, mask2, mask5, vec8, vec11); | |
| 3167 | + HADD_SB4_SH(vec0, vec3, vec6, vec9, res0, res1, res2, res3); | |
| 3168 | + DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b, | |
| 3169 | + minus5b, res0, res1, res2, res3); | |
| 3170 | + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, | |
| 3171 | + plus20b, res0, res1, res2, res3); | |
| 3172 | + VSHF_B2_SB(src4, src4, src4, src5, mask0, mask3, vec0, vec3); | |
| 3173 | + VSHF_B2_SB(src6, src6, src6, src7, mask0, mask3, vec6, vec9); | |
| 3174 | + VSHF_B2_SB(src4, src4, src4, src5, mask1, mask4, vec1, vec4); | |
| 3175 | + VSHF_B2_SB(src6, src6, src6, src7, mask1, mask4, vec7, vec10); | |
| 3176 | + VSHF_B2_SB(src4, src4, src4, src5, mask2, mask5, vec2, vec5); | |
| 3177 | + VSHF_B2_SB(src6, src6, src6, src7, mask2, mask5, vec8, vec11); | |
| 3178 | + HADD_SB4_SH(vec0, vec3, vec6, vec9, res4, res5, res6, res7); | |
| 3179 | + DPADD_SB4_SH(vec1, vec4, vec7, vec10, minus5b, minus5b, minus5b, | |
| 3180 | + minus5b, res4, res5, res6, res7); | |
| 3181 | + DPADD_SB4_SH(vec2, vec5, vec8, vec11, plus20b, plus20b, plus20b, | |
| 3182 | + plus20b, res4, res5, res6, res7); | |
| 3183 | + SLDI_B2_SB(src1, src3, src0, src2, src0, src2, 3); | |
| 3184 | + SLDI_B2_SB(src5, src7, src4, src6, src4, src6, 3); | |
| 3185 | + SRARI_H4_SH(res0, res1, res2, res3, 5); | |
| 3186 | + SRARI_H4_SH(res4, res5, res6, res7, 5); | |
| 3187 | + SAT_SH4_SH(res0, res1, res2, res3, 7); | |
| 3188 | + SAT_SH4_SH(res4, res5, res6, res7, 7); | |
| 3189 | + PCKEV_B2_SB(res1, res0, res3, res2, dst0, dst1); | |
| 3190 | + PCKEV_B2_SB(res5, res4, res7, res6, dst2, dst3); | |
| 3191 | + dst0 = __msa_aver_s_b(dst0, src0); | |
| 3192 | + dst1 = __msa_aver_s_b(dst1, src2); | |
| 3193 | + dst2 = __msa_aver_s_b(dst2, src4); | |
| 3194 | + dst3 = __msa_aver_s_b(dst3, src6); | |
| 3195 | + XORI_B4_128_SB(dst0, dst1, dst2, dst3); | |
| 3196 | + ST_SB4(dst0, dst1, dst2, dst3, dst, stride); | |
| 3197 | + dst += (4 * stride); | |
| 3198 | + } | |
| 3075 | 3199 | } |
| 3076 | 3200 | |
| 3077 | 3201 | void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, |
| 3078 | 3202 | ptrdiff_t stride) |
| 3079 | 3203 | { |
| 3080 | − avc_luma_hz_qrt_8w_msa(src - 2, stride, dst, stride, 8, 0); | |
| 3204 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7, mask0, mask1, mask2; | |
| 3205 | + v16i8 tmp0, tmp1, tmp2, tmp3, vec11; | |
| 3206 | + v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9, vec10; | |
| 3207 | + v8i16 res0, res1, res2, res3, res4, res5, res6, res7; | |
| 3208 | + v16i8 minus5b = __msa_ldi_b(-5); | |
| 3209 | + v16i8 plus20b = __msa_ldi_b(20); | |
| 3210 | + | |
| 3211 | + LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 3212 | + LD_SB8(src - 2, stride, src0, src1, src2, src3, src4, src5, src6, src7); | |
| 3213 | + XORI_B8_128_SB(src0, src1, src2, src3, src4, src5, src6, src7); | |
| 3214 | + VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec1); | |
| 3215 | + VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2, vec3); | |
| 3216 | + HADD_SB4_SH(vec0, vec1, vec2, vec3, res0, res1, res2, res3); | |
| 3217 | + VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec4, vec5); | |
| 3218 | + VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec6, vec7); | |
| 3219 | + DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b, | |
| 3220 | + res0, res1, res2, res3); | |
| 3221 | + VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec8, vec9); | |
| 3222 | + VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec10, vec11); | |
| 3223 | + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, | |
| 3224 | + res0, res1, res2, res3); | |
| 3225 | + VSHF_B2_SB(src4, src4, src5, src5, mask0, mask0, vec0, vec1); | |
| 3226 | + VSHF_B2_SB(src6, src6, src7, src7, mask0, mask0, vec2, vec3); | |
| 3227 | + HADD_SB4_SH(vec0, vec1, vec2, vec3, res4, res5, res6, res7); | |
| 3228 | + VSHF_B2_SB(src4, src4, src5, src5, mask1, mask1, vec4, vec5); | |
| 3229 | + VSHF_B2_SB(src6, src6, src7, src7, mask1, mask1, vec6, vec7); | |
| 3230 | + DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b, | |
| 3231 | + res4, res5, res6, res7); | |
| 3232 | + VSHF_B2_SB(src4, src4, src5, src5, mask2, mask2, vec8, vec9); | |
| 3233 | + VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec10, vec11); | |
| 3234 | + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, | |
| 3235 | + res4, res5, res6, res7); | |
| 3236 | + SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 2); | |
| 3237 | + SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 2); | |
| 3238 | + SLDI_B2_SB(src4, src5, src4, src5, src4, src5, 2); | |
| 3239 | + SLDI_B2_SB(src6, src7, src6, src7, src6, src7, 2); | |
| 3240 | + PCKEV_D2_SB(src1, src0, src3, src2, src0, src1); | |
| 3241 | + PCKEV_D2_SB(src5, src4, src7, src6, src4, src5); | |
| 3242 | + SRARI_H4_SH(res0, res1, res2, res3, 5); | |
| 3243 | + SRARI_H4_SH(res4, res5, res6, res7, 5); | |
| 3244 | + SAT_SH4_SH(res0, res1, res2, res3, 7); | |
| 3245 | + SAT_SH4_SH(res4, res5, res6, res7, 7); | |
| 3246 | + PCKEV_B2_SB(res1, res0, res3, res2, tmp0, tmp1); | |
| 3247 | + PCKEV_B2_SB(res5, res4, res7, res6, tmp2, tmp3); | |
| 3248 | + tmp0 = __msa_aver_s_b(tmp0, src0); | |
| 3249 | + tmp1 = __msa_aver_s_b(tmp1, src1); | |
| 3250 | + tmp2 = __msa_aver_s_b(tmp2, src4); | |
| 3251 | + tmp3 = __msa_aver_s_b(tmp3, src5); | |
| 3252 | + XORI_B4_128_SB(tmp0, tmp1, tmp2, tmp3); | |
| 3253 | + ST8x8_UB(tmp0, tmp1, tmp2, tmp3, dst, stride); | |
| 3081 | 3254 | } |
| 3082 | 3255 | |
| 3083 | 3256 | void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, |
| 3084 | 3257 | ptrdiff_t stride) |
| 3085 | 3258 | { |
| 3086 | − avc_luma_hz_qrt_8w_msa(src - 2, stride, dst, stride, 8, 1); | |
| 3259 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7, mask0, mask1, mask2; | |
| 3260 | + v16i8 tmp0, tmp1, tmp2, tmp3, vec11; | |
| 3261 | + v16i8 vec0, vec1, vec2, vec3, vec4, vec5, vec6, vec7, vec8, vec9, vec10; | |
| 3262 | + v8i16 res0, res1, res2, res3, res4, res5, res6, res7; | |
| 3263 | + v16i8 minus5b = __msa_ldi_b(-5); | |
| 3264 | + v16i8 plus20b = __msa_ldi_b(20); | |
| 3265 | + | |
| 3266 | + LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 3267 | + LD_SB8(src - 2, stride, src0, src1, src2, src3, src4, src5, src6, src7); | |
| 3268 | + XORI_B8_128_SB(src0, src1, src2, src3, src4, src5, src6, src7); | |
| 3269 | + VSHF_B2_SB(src0, src0, src1, src1, mask0, mask0, vec0, vec1); | |
| 3270 | + VSHF_B2_SB(src2, src2, src3, src3, mask0, mask0, vec2, vec3); | |
| 3271 | + HADD_SB4_SH(vec0, vec1, vec2, vec3, res0, res1, res2, res3); | |
| 3272 | + VSHF_B2_SB(src0, src0, src1, src1, mask1, mask1, vec4, vec5); | |
| 3273 | + VSHF_B2_SB(src2, src2, src3, src3, mask1, mask1, vec6, vec7); | |
| 3274 | + DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b, | |
| 3275 | + res0, res1, res2, res3); | |
| 3276 | + VSHF_B2_SB(src0, src0, src1, src1, mask2, mask2, vec8, vec9); | |
| 3277 | + VSHF_B2_SB(src2, src2, src3, src3, mask2, mask2, vec10, vec11); | |
| 3278 | + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, | |
| 3279 | + res0, res1, res2, res3); | |
| 3280 | + VSHF_B2_SB(src4, src4, src5, src5, mask0, mask0, vec0, vec1); | |
| 3281 | + VSHF_B2_SB(src6, src6, src7, src7, mask0, mask0, vec2, vec3); | |
| 3282 | + HADD_SB4_SH(vec0, vec1, vec2, vec3, res4, res5, res6, res7); | |
| 3283 | + VSHF_B2_SB(src4, src4, src5, src5, mask1, mask1, vec4, vec5); | |
| 3284 | + VSHF_B2_SB(src6, src6, src7, src7, mask1, mask1, vec6, vec7); | |
| 3285 | + DPADD_SB4_SH(vec4, vec5, vec6, vec7, minus5b, minus5b, minus5b, minus5b, | |
| 3286 | + res4, res5, res6, res7); | |
| 3287 | + VSHF_B2_SB(src4, src4, src5, src5, mask2, mask2, vec8, vec9); | |
| 3288 | + VSHF_B2_SB(src6, src6, src7, src7, mask2, mask2, vec10, vec11); | |
| 3289 | + DPADD_SB4_SH(vec8, vec9, vec10, vec11, plus20b, plus20b, plus20b, plus20b, | |
| 3290 | + res4, res5, res6, res7); | |
| 3291 | + SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 3); | |
| 3292 | + SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 3); | |
| 3293 | + SLDI_B2_SB(src4, src5, src4, src5, src4, src5, 3); | |
| 3294 | + SLDI_B2_SB(src6, src7, src6, src7, src6, src7, 3); | |
| 3295 | + PCKEV_D2_SB(src1, src0, src3, src2, src0, src1); | |
| 3296 | + PCKEV_D2_SB(src5, src4, src7, src6, src4, src5); | |
| 3297 | + SRARI_H4_SH(res0, res1, res2, res3, 5); | |
| 3298 | + SRARI_H4_SH(res4, res5, res6, res7, 5); | |
| 3299 | + SAT_SH4_SH(res0, res1, res2, res3, 7); | |
| 3300 | + SAT_SH4_SH(res4, res5, res6, res7, 7); | |
| 3301 | + PCKEV_B2_SB(res1, res0, res3, res2, tmp0, tmp1); | |
| 3302 | + PCKEV_B2_SB(res5, res4, res7, res6, tmp2, tmp3); | |
| 3303 | + tmp0 = __msa_aver_s_b(tmp0, src0); | |
| 3304 | + tmp1 = __msa_aver_s_b(tmp1, src1); | |
| 3305 | + tmp2 = __msa_aver_s_b(tmp2, src4); | |
| 3306 | + tmp3 = __msa_aver_s_b(tmp3, src5); | |
| 3307 | + XORI_B4_128_SB(tmp0, tmp1, tmp2, tmp3); | |
| 3308 | + ST8x8_UB(tmp0, tmp1, tmp2, tmp3, dst, stride); | |
| 3087 | 3309 | } |
| 3088 | 3310 | |
| 3089 | 3311 | void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, |
| 3090 | 3312 | ptrdiff_t stride) |
| 3091 | 3313 | { |
| 3092 | − avc_luma_hz_qrt_4w_msa(src - 2, stride, dst, stride, 4, 0); | |
| 3314 | + v16i8 src0, src1, src2, src3, res, mask0, mask1, mask2; | |
| 3315 | + v16i8 vec0, vec1, vec2, vec3, vec4, vec5; | |
| 3316 | + v8i16 res0, res1; | |
| 3317 | + v16i8 minus5b = __msa_ldi_b(-5); | |
| 3318 | + v16i8 plus20b = __msa_ldi_b(20); | |
| 3319 | + | |
| 3320 | + LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2); | |
| 3321 | + LD_SB4(src - 2, stride, src0, src1, src2, src3); | |
| 3322 | + XORI_B4_128_SB(src0, src1, src2, src3); | |
| 3323 | + VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0, vec1); | |
| 3324 | + HADD_SB2_SH(vec0, vec1, res0, res1); | |
| 3325 | + VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2, vec3); | |
| 3326 | + DPADD_SB2_SH(vec2, vec3, minus5b, minus5b, res0, res1); | |
| 3327 | + VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4, vec5); | |
| 3328 | + DPADD_SB2_SH(vec4, vec5, plus20b, plus20b, res0, res1); | |
| 3329 | + SRARI_H2_SH(res0, res1, 5); | |
| 3330 | + SAT_SH2_SH(res0, res1, 7); | |
| 3331 | + res = __msa_pckev_b((v16i8) res1, (v16i8) res0); | |
| 3332 | + SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 2); | |
| 3333 | + SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 2); | |
| 3334 | + src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1); | |
| 3335 | + src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3); | |
| 3336 | + src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1); | |
| 3337 | + res = __msa_aver_s_b(res, src0); | |
| 3338 | + res = (v16i8) __msa_xori_b((v16u8) res, 128); | |
| 3339 | + ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); | |
| 3093 | 3340 | } |
| 3094 | 3341 | |
| 3095 | 3342 | void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, |
| 3096 | 3343 | ptrdiff_t stride) |
| 3097 | 3344 | { |
| 3098 | − avc_luma_hz_qrt_4w_msa(src - 2, stride, dst, stride, 4, 1); | |
| 3345 | + v16i8 src0, src1, src2, src3, res, mask0, mask1, mask2; | |
| 3346 | + v16i8 vec0, vec1, vec2, vec3, vec4, vec5; | |
| 3347 | + v8i16 res0, res1; | |
| 3348 | + v16i8 minus5b = __msa_ldi_b(-5); | |
| 3349 | + v16i8 plus20b = __msa_ldi_b(20); | |
| 3350 | + | |
| 3351 | + LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2); | |
| 3352 | + LD_SB4(src - 2, stride, src0, src1, src2, src3); | |
| 3353 | + XORI_B4_128_SB(src0, src1, src2, src3); | |
| 3354 | + VSHF_B2_SB(src0, src1, src2, src3, mask0, mask0, vec0, vec1); | |
| 3355 | + HADD_SB2_SH(vec0, vec1, res0, res1); | |
| 3356 | + VSHF_B2_SB(src0, src1, src2, src3, mask1, mask1, vec2, vec3); | |
| 3357 | + DPADD_SB2_SH(vec2, vec3, minus5b, minus5b, res0, res1); | |
| 3358 | + VSHF_B2_SB(src0, src1, src2, src3, mask2, mask2, vec4, vec5); | |
| 3359 | + DPADD_SB2_SH(vec4, vec5, plus20b, plus20b, res0, res1); | |
| 3360 | + SRARI_H2_SH(res0, res1, 5); | |
| 3361 | + SAT_SH2_SH(res0, res1, 7); | |
| 3362 | + res = __msa_pckev_b((v16i8) res1, (v16i8) res0); | |
| 3363 | + SLDI_B2_SB(src0, src1, src0, src1, src0, src1, 3); | |
| 3364 | + SLDI_B2_SB(src2, src3, src2, src3, src2, src3, 3); | |
| 3365 | + src0 = (v16i8) __msa_insve_w((v4i32) src0, 1, (v4i32) src1); | |
| 3366 | + src1 = (v16i8) __msa_insve_w((v4i32) src2, 1, (v4i32) src3); | |
| 3367 | + src0 = (v16i8) __msa_insve_d((v2i64) src0, 1, (v2i64) src1); | |
| 3368 | + res = __msa_aver_s_b(res, src0); | |
| 3369 | + res = (v16i8) __msa_xori_b((v16u8) res, 128); | |
| 3370 | + ST4x4_UB(res, res, 0, 1, 2, 3, dst, stride); | |
| 3099 | 3371 | } |
| 3100 | 3372 | |
| 3101 | 3373 | void ff_put_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, |