Unified · Split
| @@ -3065,37 +3065,309 @@ void ff_avg_h264_qpel4_mc00_msa(uint8_t *dst, const uint8_t *src, · 3064 unmodified lines | |||
| 3065 | void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, | 3065 | void ff_put_h264_qpel16_mc10_msa(uint8_t *dst, const uint8_t *src, |
| 3066 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, | 3133 | void ff_put_h264_qpel16_mc30_msa(uint8_t *dst, const uint8_t *src, |
| 3072 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, | 3201 | void ff_put_h264_qpel8_mc10_msa(uint8_t *dst, const uint8_t *src, |
| 3078 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, | 3256 | void ff_put_h264_qpel8_mc30_msa(uint8_t *dst, const uint8_t *src, |
| 3084 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, | 3311 | void ff_put_h264_qpel4_mc10_msa(uint8_t *dst, const uint8_t *src, |
| 3090 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, | 3342 | void ff_put_h264_qpel4_mc30_msa(uint8_t *dst, const uint8_t *src, |
| 3096 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, | 3373 | void ff_put_h264_qpel16_mc20_msa(uint8_t *dst, const uint8_t *src, |