Remove loops and unroll as block sizes are known.
Showing the changes to libavcodec/mips (1 of 1 file). Show all
Unified · Split
| @@ -171,23 +171,27 @@ static const uint8_t luma_mask_arr[16 * 8] = { · 170 unmodified lines | ||
| 171 | 171 | out0_m; \ |
| 172 | 172 | } ) |
| 173 | 173 | |
| 174 | −static void avc_luma_hv_qrt_4w_msa(const uint8_t *src_x, const uint8_t *src_y, | |
| 175 | − int32_t src_stride, uint8_t *dst, | |
| 176 | − int32_t dst_stride, int32_t height) | |
| 174 | +static void avc_luma_hv_qrt_4x4_msa(const uint8_t *src_x, const uint8_t *src_y, | |
| 175 | + uint8_t *dst, int32_t stride) | |
| 177 | 176 | { |
| 178 | − uint32_t loop_cnt; | |
| 179 | − v16i8 src_hz0, src_hz1, src_hz2, src_hz3; | |
| 180 | − v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4; | |
| 181 | − v16i8 src_vt5, src_vt6, src_vt7, src_vt8; | |
| 182 | − v16i8 mask0, mask1, mask2; | |
| 183 | − v8i16 hz_out0, hz_out1, vert_out0, vert_out1; | |
| 184 | − v8i16 out0, out1; | |
| 177 | + const int16_t filt_const0 = 0xfb01; | |
| 178 | + const int16_t filt_const1 = 0x1414; | |
| 179 | + const int16_t filt_const2 = 0x1fb; | |
| 185 | 180 | v16u8 out; |
| 181 | + v16i8 src_hz0, src_hz1, src_hz2, src_hz3, src_vt7, src_vt8; | |
| 182 | + v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; | |
| 183 | + v16i8 src_vt10_r, src_vt32_r, src_vt54_r, src_vt76_r; | |
| 184 | + v16i8 mask0, mask1, mask2, filt0, filt1, filt2; | |
| 185 | + v8i16 hz_out0, hz_out1, vt_out0, vt_out1, out0, out1; | |
| 186 | + | |
| 187 | + filt0 = (v16i8) __msa_fill_h(filt_const0); | |
| 188 | + filt1 = (v16i8) __msa_fill_h(filt_const1); | |
| 189 | + filt2 = (v16i8) __msa_fill_h(filt_const2); | |
| 186 | 190 | |
| 187 | 191 | LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2); |
| 188 | 192 | |
| 189 | − LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 190 | − src_y += (5 * src_stride); | |
| 193 | + LD_SB5(src_y, stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 194 | + src_y += (5 * stride); | |
| 191 | 195 | |
| 192 | 196 | src_vt0 = (v16i8) __msa_insve_w((v4i32) src_vt0, 1, (v4i32) src_vt1); |
| 193 | 197 | src_vt1 = (v16i8) __msa_insve_w((v4i32) src_vt1, 1, (v4i32) src_vt2); |
| @@ -196,149 +200,237 @@ static void avc_luma_hv_qrt_4w_msa(const uint8_t *src_x, const uint8_t *src_y, · 2 unmodified lines | ||
| 196 | 200 | |
| 197 | 201 | XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3); |
| 198 | 202 | |
| 199 | − for (loop_cnt = (height >> 2); loop_cnt--;) { | |
| 200 | − LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3); | |
| 201 | − src_x += (4 * src_stride); | |
| 202 | − | |
| 203 | − XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | |
| 204 | − | |
| 205 | − hz_out0 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src_hz0, | |
| 206 | − src_hz1, mask0, | |
| 207 | − mask1, mask2); | |
| 208 | − hz_out1 = AVC_XOR_VSHF_B_AND_APPLY_6TAP_HORIZ_FILT_SH(src_hz2, | |
| 209 | − src_hz3, mask0, | |
| 210 | − mask1, mask2); | |
| 211 | − | |
| 212 | − SRARI_H2_SH(hz_out0, hz_out1, 5); | |
| 213 | − SAT_SH2_SH(hz_out0, hz_out1, 7); | |
| 214 | − | |
| 215 | − LD_SB4(src_y, src_stride, src_vt5, src_vt6, src_vt7, src_vt8); | |
| 216 | − src_y += (4 * src_stride); | |
| 217 | − | |
| 218 | − src_vt4 = (v16i8) __msa_insve_w((v4i32) src_vt4, 1, (v4i32) src_vt5); | |
| 219 | − src_vt5 = (v16i8) __msa_insve_w((v4i32) src_vt5, 1, (v4i32) src_vt6); | |
| 220 | − src_vt6 = (v16i8) __msa_insve_w((v4i32) src_vt6, 1, (v4i32) src_vt7); | |
| 221 | − src_vt7 = (v16i8) __msa_insve_w((v4i32) src_vt7, 1, (v4i32) src_vt8); | |
| 222 | − | |
| 223 | − XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7); | |
| 203 | + LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); | |
| 204 | + XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | |
| 205 | + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz1, mask0, mask1, mask2); | |
| 206 | + hz_out1 = AVC_HORZ_FILTER_SH(src_hz2, src_hz3, mask0, mask1, mask2); | |
| 224 | 207 | |
| 225 | − /* filter calc */ | |
| 226 | − vert_out0 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt0, src_vt1, | |
| 227 | − src_vt2, src_vt3, | |
| 228 | − src_vt4, src_vt5); | |
| 229 | − vert_out1 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt2, src_vt3, | |
| 230 | − src_vt4, src_vt5, | |
| 231 | − src_vt6, src_vt7); | |
| 208 | + SRARI_H2_SH(hz_out0, hz_out1, 5); | |
| 209 | + SAT_SH2_SH(hz_out0, hz_out1, 7); | |
| 232 | 210 | |
| 233 | − SRARI_H2_SH(vert_out0, vert_out1, 5); | |
| 234 | − SAT_SH2_SH(vert_out0, vert_out1, 7); | |
| 211 | + LD_SB4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); | |
| 235 | 212 | |
| 236 | − out0 = __msa_srari_h((hz_out0 + vert_out0), 1); | |
| 237 | − out1 = __msa_srari_h((hz_out1 + vert_out1), 1); | |
| 213 | + src_vt4 = (v16i8) __msa_insve_w((v4i32) src_vt4, 1, (v4i32) src_vt5); | |
| 214 | + src_vt5 = (v16i8) __msa_insve_w((v4i32) src_vt5, 1, (v4i32) src_vt6); | |
| 215 | + src_vt6 = (v16i8) __msa_insve_w((v4i32) src_vt6, 1, (v4i32) src_vt7); | |
| 216 | + src_vt7 = (v16i8) __msa_insve_w((v4i32) src_vt7, 1, (v4i32) src_vt8); | |
| 238 | 217 | |
| 239 | − SAT_SH2_SH(out0, out1, 7); | |
| 240 | − out = PCKEV_XORI128_UB(out0, out1); | |
| 241 | − ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); | |
| 242 | − dst += (4 * dst_stride); | |
| 218 | + XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7); | |
| 219 | + ILVR_B2_SB(src_vt1, src_vt0, src_vt3, src_vt2, src_vt10_r, src_vt32_r); | |
| 220 | + ILVR_B2_SB(src_vt5, src_vt4, src_vt7, src_vt6, src_vt54_r, src_vt76_r); | |
| 221 | + vt_out0 = AVC_DOT_SH3_SH(src_vt10_r, src_vt32_r, src_vt54_r, filt0, filt1, | |
| 222 | + filt2); | |
| 223 | + vt_out1 = AVC_DOT_SH3_SH(src_vt32_r, src_vt54_r, src_vt76_r, filt0, filt1, | |
| 224 | + filt2); | |
| 225 | + SRARI_H2_SH(vt_out0, vt_out1, 5); | |
| 226 | + SAT_SH2_SH(vt_out0, vt_out1, 7); | |
| 227 | + | |
| 228 | + out0 = __msa_srari_h((hz_out0 + vt_out0), 1); | |
| 229 | + out1 = __msa_srari_h((hz_out1 + vt_out1), 1); | |
| 243 | 230 | |
| 244 | − src_vt3 = src_vt7; | |
| 245 | − src_vt1 = src_vt5; | |
| 246 | − src_vt0 = src_vt4; | |
| 247 | − src_vt4 = src_vt8; | |
| 248 | − src_vt2 = src_vt6; | |
| 249 | − } | |
| 231 | + SAT_SH2_SH(out0, out1, 7); | |
| 232 | + out = PCKEV_XORI128_UB(out0, out1); | |
| 233 | + ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); | |
| 250 | 234 | } |
| 251 | 235 | |
| 252 | −static void avc_luma_hv_qrt_8w_msa(const uint8_t *src_x, const uint8_t *src_y, | |
| 253 | − int32_t src_stride, uint8_t *dst, | |
| 254 | − int32_t dst_stride, int32_t height) | |
| 236 | +static void avc_luma_hv_qrt_8x8_msa(const uint8_t *src_x, const uint8_t *src_y, | |
| 237 | + uint8_t *dst, int32_t stride) | |
| 255 | 238 | { |
| 256 | − uint32_t loop_cnt; | |
| 257 | − v16i8 src_hz0, src_hz1, src_hz2, src_hz3; | |
| 258 | − v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4; | |
| 259 | − v16i8 src_vt5, src_vt6, src_vt7, src_vt8; | |
| 260 | − v16i8 mask0, mask1, mask2; | |
| 261 | − v8i16 hz_out0, hz_out1, hz_out2, hz_out3; | |
| 262 | − v8i16 vert_out0, vert_out1, vert_out2, vert_out3; | |
| 263 | − v8i16 out0, out1, out2, out3; | |
| 264 | − v16u8 tmp0, tmp1; | |
| 265 | − | |
| 266 | − LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 267 | − LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 268 | − src_y += (5 * src_stride); | |
| 269 | − | |
| 270 | − src_vt0 = (v16i8) __msa_insve_d((v2i64) src_vt0, 1, (v2i64) src_vt1); | |
| 271 | − src_vt1 = (v16i8) __msa_insve_d((v2i64) src_vt1, 1, (v2i64) src_vt2); | |
| 272 | − src_vt2 = (v16i8) __msa_insve_d((v2i64) src_vt2, 1, (v2i64) src_vt3); | |
| 273 | − src_vt3 = (v16i8) __msa_insve_d((v2i64) src_vt3, 1, (v2i64) src_vt4); | |
| 239 | + const int16_t filt_const0 = 0xfb01; | |
| 240 | + const int16_t filt_const1 = 0x1414; | |
| 241 | + const int16_t filt_const2 = 0x1fb; | |
| 242 | + v16u8 out0, out1; | |
| 243 | + v16i8 src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; | |
| 244 | + v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; | |
| 245 | + v16i8 src_vt7, src_vt8, src_vt9, src_vt10, src_vt11, src_vt12; | |
| 246 | + v16i8 src_vt10_r, src_vt21_r, src_vt32_r, src_vt43_r, src_vt54_r; | |
| 247 | + v16i8 src_vt65_r, src_vt76_r, src_vt87_r, src_vt98_r, src_vt109_r; | |
| 248 | + v16i8 src_vt1110_r, src_vt1211_r, filt0, filt1, filt2; | |
| 249 | + v8i16 hz_out0, hz_out1, hz_out2, hz_out3, vt_out0, vt_out1, vt_out2; | |
| 250 | + v8i16 vt_out3, tmp0, tmp1, tmp2, tmp3; | |
| 274 | 251 | |
| 275 | − XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3); | |
| 252 | + filt0 = (v16i8) __msa_fill_h(filt_const0); | |
| 253 | + filt1 = (v16i8) __msa_fill_h(filt_const1); | |
| 254 | + filt2 = (v16i8) __msa_fill_h(filt_const2); | |
| 276 | 255 | |
| 277 | − for (loop_cnt = (height >> 2); loop_cnt--;) { | |
| 278 | − LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3); | |
| 279 | − XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | |
| 280 | − src_x += (4 * src_stride); | |
| 256 | + LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 257 | + LD_SB5(src_y, stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 258 | + src_y += (5 * stride); | |
| 281 | 259 | |
| 282 | − hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); | |
| 283 | − hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); | |
| 284 | − hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, src_hz2, mask0, mask1, mask2); | |
| 285 | − hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, src_hz3, mask0, mask1, mask2); | |
| 260 | + XORI_B5_128_SB(src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 286 | 261 | |
| 287 | − SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5); | |
| 288 | − SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7); | |
| 262 | + LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); | |
| 263 | + XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | |
| 264 | + src_x += (4 * stride); | |
| 265 | + | |
| 266 | + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); | |
| 267 | + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); | |
| 268 | + hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, src_hz2, mask0, mask1, mask2); | |
| 269 | + hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, src_hz3, mask0, mask1, mask2); | |
| 270 | + | |
| 271 | + SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5); | |
| 272 | + SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7); | |
| 273 | + | |
| 274 | + LD_SB4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); | |
| 275 | + src_y += (4 * stride); | |
| 276 | + XORI_B4_128_SB(src_vt5, src_vt6, src_vt7, src_vt8); | |
| 277 | + | |
| 278 | + ILVR_B4_SB(src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, src_vt4, | |
| 279 | + src_vt3, src_vt10_r, src_vt21_r, src_vt32_r, src_vt43_r); | |
| 280 | + ILVR_B4_SB(src_vt5, src_vt4, src_vt6, src_vt5, src_vt7, src_vt6, src_vt8, | |
| 281 | + src_vt7, src_vt54_r, src_vt65_r, src_vt76_r, src_vt87_r); | |
| 282 | + vt_out0 = AVC_DOT_SH3_SH(src_vt10_r, src_vt32_r, src_vt54_r, filt0, filt1, | |
| 283 | + filt2); | |
| 284 | + vt_out1 = AVC_DOT_SH3_SH(src_vt21_r, src_vt43_r, src_vt65_r, filt0, filt1, | |
| 285 | + filt2); | |
| 286 | + vt_out2 = AVC_DOT_SH3_SH(src_vt32_r, src_vt54_r, src_vt76_r, filt0, filt1, | |
| 287 | + filt2); | |
| 288 | + vt_out3 = AVC_DOT_SH3_SH(src_vt43_r, src_vt65_r, src_vt87_r, filt0, filt1, | |
| 289 | + filt2); | |
| 290 | + SRARI_H4_SH(vt_out0, vt_out1, vt_out2, vt_out3, 5); | |
| 291 | + SAT_SH4_SH(vt_out0, vt_out1, vt_out2, vt_out3, 7); | |
| 292 | + | |
| 293 | + tmp0 = __msa_srari_h((hz_out0 + vt_out0), 1); | |
| 294 | + tmp1 = __msa_srari_h((hz_out1 + vt_out1), 1); | |
| 295 | + tmp2 = __msa_srari_h((hz_out2 + vt_out2), 1); | |
| 296 | + tmp3 = __msa_srari_h((hz_out3 + vt_out3), 1); | |
| 297 | + | |
| 298 | + LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); | |
| 299 | + XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | |
| 289 | 300 | |
| 290 | − LD_SB4(src_y, src_stride, src_vt5, src_vt6, src_vt7, src_vt8); | |
| 291 | − src_y += (4 * src_stride); | |
| 301 | + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); | |
| 302 | + out0 = PCKEV_XORI128_UB(tmp0, tmp1); | |
| 303 | + out1 = PCKEV_XORI128_UB(tmp2, tmp3); | |
| 304 | + ST8x4_UB(out0, out1, dst, stride); | |
| 305 | + dst += (4 * stride); | |
| 292 | 306 | |
| 293 | − src_vt4 = (v16i8) __msa_insve_d((v2i64) src_vt4, 1, (v2i64) src_vt5); | |
| 294 | − src_vt5 = (v16i8) __msa_insve_d((v2i64) src_vt5, 1, (v2i64) src_vt6); | |
| 295 | − src_vt6 = (v16i8) __msa_insve_d((v2i64) src_vt6, 1, (v2i64) src_vt7); | |
| 296 | − src_vt7 = (v16i8) __msa_insve_d((v2i64) src_vt7, 1, (v2i64) src_vt8); | |
| 307 | + LD_SB4(src_y, stride, src_vt9, src_vt10, src_vt11, src_vt12); | |
| 308 | + XORI_B4_128_SB(src_vt9, src_vt10, src_vt11, src_vt12); | |
| 309 | + | |
| 310 | + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); | |
| 311 | + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); | |
| 312 | + hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, src_hz2, mask0, mask1, mask2); | |
| 313 | + hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, src_hz3, mask0, mask1, mask2); | |
| 314 | + | |
| 315 | + SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5); | |
| 316 | + SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7); | |
| 317 | + | |
| 318 | + ILVR_B4_SB(src_vt9, src_vt8, src_vt10, src_vt9, src_vt11, src_vt10, | |
| 319 | + src_vt12, src_vt11, src_vt98_r, src_vt109_r, src_vt1110_r, | |
| 320 | + src_vt1211_r); | |
| 321 | + vt_out0 = AVC_DOT_SH3_SH(src_vt54_r, src_vt76_r, src_vt98_r, filt0, filt1, | |
| 322 | + filt2); | |
| 323 | + vt_out1 = AVC_DOT_SH3_SH(src_vt65_r, src_vt87_r, src_vt109_r, filt0, filt1, | |
| 324 | + filt2); | |
| 325 | + vt_out2 = AVC_DOT_SH3_SH(src_vt76_r, src_vt98_r, src_vt1110_r, filt0, filt1, | |
| 326 | + filt2); | |
| 327 | + vt_out3 = AVC_DOT_SH3_SH(src_vt87_r, src_vt109_r, src_vt1211_r, filt0, | |
| 328 | + filt1, filt2); | |
| 329 | + SRARI_H4_SH(vt_out0, vt_out1, vt_out2, vt_out3, 5); | |
| 330 | + SAT_SH4_SH(vt_out0, vt_out1, vt_out2, vt_out3, 7); | |
| 331 | + | |
| 332 | + tmp0 = __msa_srari_h((hz_out0 + vt_out0), 1); | |
| 333 | + tmp1 = __msa_srari_h((hz_out1 + vt_out1), 1); | |
| 334 | + tmp2 = __msa_srari_h((hz_out2 + vt_out2), 1); | |
| 335 | + tmp3 = __msa_srari_h((hz_out3 + vt_out3), 1); | |
| 336 | + | |
| 337 | + SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); | |
| 338 | + out0 = PCKEV_XORI128_UB(tmp0, tmp1); | |
| 339 | + out1 = PCKEV_XORI128_UB(tmp2, tmp3); | |
| 340 | + ST8x4_UB(out0, out1, dst, stride); | |
| 341 | + dst += (4 * stride); | |
| 342 | +} | |
| 297 | 343 | |
| 298 | − XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7); | |
| 344 | +static void avc_luma_hv_qrt_16x16_msa(const uint8_t *src_x, | |
| 345 | + const uint8_t *src_y, uint8_t *dst, | |
| 346 | + int32_t stride) | |
| 347 | +{ | |
| 348 | + const int16_t filt_const0 = 0xfb01; | |
| 349 | + const int16_t filt_const1 = 0x1414; | |
| 350 | + const int16_t filt_const2 = 0x1fb; | |
| 351 | + const uint8_t *src_x_tmp = src_x; | |
| 352 | + const uint8_t *src_y_tmp = src_y; | |
| 353 | + uint8_t *dst_tmp = dst; | |
| 354 | + uint32_t multiple8_cnt, loop_cnt; | |
| 355 | + v16u8 tmp0, tmp1; | |
| 356 | + v16i8 src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; | |
| 357 | + v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; | |
| 358 | + v16i8 src_vt7, src_vt8; | |
| 359 | + v16i8 src_vt10_r, src_vt21_r, src_vt32_r, src_vt43_r, src_vt54_r; | |
| 360 | + v16i8 src_vt65_r, src_vt76_r, src_vt87_r, filt0, filt1, filt2; | |
| 361 | + v8i16 hz_out0, hz_out1, hz_out2, hz_out3, vt_out0, vt_out1, vt_out2; | |
| 362 | + v8i16 vt_out3, out0, out1, out2, out3; | |
| 299 | 363 | |
| 300 | − /* filter calc */ | |
| 301 | − AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt0, src_vt1, src_vt2, src_vt3, | |
| 302 | − src_vt4, src_vt5, vert_out0, vert_out1); | |
| 303 | − AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt2, src_vt3, src_vt4, src_vt5, | |
| 304 | − src_vt6, src_vt7, vert_out2, vert_out3); | |
| 364 | + filt0 = (v16i8) __msa_fill_h(filt_const0); | |
| 365 | + filt1 = (v16i8) __msa_fill_h(filt_const1); | |
| 366 | + filt2 = (v16i8) __msa_fill_h(filt_const2); | |
| 305 | 367 | |
| 306 | − SRARI_H4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 5); | |
| 307 | − SAT_SH4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 7); | |
| 368 | + LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | |
| 308 | 369 | |
| 309 | − out0 = __msa_srari_h((hz_out0 + vert_out0), 1); | |
| 310 | − out1 = __msa_srari_h((hz_out1 + vert_out1), 1); | |
| 311 | − out2 = __msa_srari_h((hz_out2 + vert_out2), 1); | |
| 312 | − out3 = __msa_srari_h((hz_out3 + vert_out3), 1); | |
| 370 | + for (multiple8_cnt = 2; multiple8_cnt--;) { | |
| 371 | + src_x = src_x_tmp; | |
| 372 | + src_y = src_y_tmp; | |
| 373 | + dst = dst_tmp; | |
| 313 | 374 | |
| 314 | − SAT_SH4_SH(out0, out1, out2, out3, 7); | |
| 315 | − tmp0 = PCKEV_XORI128_UB(out0, out1); | |
| 316 | − tmp1 = PCKEV_XORI128_UB(out2, out3); | |
| 317 | − ST8x4_UB(tmp0, tmp1, dst, dst_stride); | |
| 375 | + LD_SB5(src_y, stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 376 | + src_y += (5 * stride); | |
| 318 | 377 | |
| 319 | − dst += (4 * dst_stride); | |
| 320 | − src_vt3 = src_vt7; | |
| 321 | − src_vt1 = src_vt5; | |
| 322 | − src_vt5 = src_vt4; | |
| 323 | − src_vt4 = src_vt8; | |
| 324 | − src_vt2 = src_vt6; | |
| 325 | − src_vt0 = src_vt5; | |
| 326 | − } | |
| 327 | −} | |
| 378 | + XORI_B5_128_SB(src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | |
| 328 | 379 | |
| 329 | −static void avc_luma_hv_qrt_16w_msa(const uint8_t *src_x, const uint8_t *src_y, | |
| 330 | − int32_t src_stride, uint8_t *dst, | |
| 331 | − int32_t dst_stride, int32_t height) | |
| 332 | −{ | |
| 333 | − uint32_t multiple8_cnt; | |
| 380 | + for (loop_cnt = 4; loop_cnt--;) { | |
| 381 | + LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); | |
| 382 | + XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | |
| 383 | + src_x += (4 * stride); | |
| 384 | + | |
| 385 | + hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); | |
| 386 | + hz_out1 = AVC_HORZ_FILTER_SH(src_hz1, src_hz1, mask0, mask1, mask2); | |
| 387 | + hz_out2 = AVC_HORZ_FILTER_SH(src_hz2, src_hz2, mask0, mask1, mask2); | |
| 388 | + hz_out3 = AVC_HORZ_FILTER_SH(src_hz3, src_hz3, mask0, mask1, mask2); | |
| 389 | + SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5); | |
| 390 | + SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7); | |
| 391 | + | |
| 392 | + LD_SB4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); | |
| 393 | + src_y += (4 * stride); | |
| 394 | + | |
| 395 | + XORI_B4_128_SB(src_vt5, src_vt6, src_vt7, src_vt8); | |
| 396 | + ILVR_B4_SB(src_vt1, src_vt0, src_vt2, src_vt1, src_vt3, src_vt2, | |
| 397 | + src_vt4, src_vt3, src_vt10_r, src_vt21_r, src_vt32_r, | |
| 398 | + src_vt43_r); | |
| 399 | + ILVR_B4_SB(src_vt5, src_vt4, src_vt6, src_vt5, src_vt7, src_vt6, | |
| 400 | + src_vt8, src_vt7, src_vt54_r, src_vt65_r, src_vt76_r, | |
| 401 | + src_vt87_r); | |
| 402 | + vt_out0 = AVC_DOT_SH3_SH(src_vt10_r, src_vt32_r, src_vt54_r, filt0, | |
| 403 | + filt1, filt2); | |
| 404 | + vt_out1 = AVC_DOT_SH3_SH(src_vt21_r, src_vt43_r, src_vt65_r, filt0, | |
| 405 | + filt1, filt2); | |
| 406 | + vt_out2 = AVC_DOT_SH3_SH(src_vt32_r, src_vt54_r, src_vt76_r, filt0, | |
| 407 | + filt1, filt2); | |
| 408 | + vt_out3 = AVC_DOT_SH3_SH(src_vt43_r, src_vt65_r, src_vt87_r, filt0, | |
| 409 | + filt1, filt2); | |
| 410 | + SRARI_H4_SH(vt_out0, vt_out1, vt_out2, vt_out3, 5); | |
| 411 | + SAT_SH4_SH(vt_out0, vt_out1, vt_out2, vt_out3, 7); | |
| 412 | + | |
| 413 | + out0 = __msa_srari_h((hz_out0 + vt_out0), 1); | |
| 414 | + out1 = __msa_srari_h((hz_out1 + vt_out1), 1); | |
| 415 | + out2 = __msa_srari_h((hz_out2 + vt_out2), 1); | |
| 416 | + out3 = __msa_srari_h((hz_out3 + vt_out3), 1); | |
| 417 | + | |
| 418 | + SAT_SH4_SH(out0, out1, out2, out3, 7); | |
| 419 | + tmp0 = PCKEV_XORI128_UB(out0, out1); | |
| 420 | + tmp1 = PCKEV_XORI128_UB(out2, out3); | |
| 421 | + ST8x4_UB(tmp0, tmp1, dst, stride); | |
| 422 | + dst += (4 * stride); | |
| 334 | 423 | |
| 335 | − for (multiple8_cnt = 2; multiple8_cnt--;) { | |
| 336 | − avc_luma_hv_qrt_8w_msa(src_x, src_y, src_stride, dst, dst_stride, | |
| 337 | − height); | |
| 424 | + src_vt0 = src_vt4; | |
| 425 | + src_vt1 = src_vt5; | |
| 426 | + src_vt2 = src_vt6; | |
| 427 | + src_vt3 = src_vt7; | |
| 428 | + src_vt4 = src_vt8; | |
| 429 | + } | |
| 338 | 430 | |
| 339 | − src_x += 8; | |
| 340 | − src_y += 8; | |
| 341 | − dst += 8; | |
| 431 | + src_x_tmp += 8; | |
| 432 | + src_y_tmp += 8; | |
| 433 | + dst_tmp += 8; | |
| 342 | 434 | } |
| 343 | 435 | } |
| 344 | 436 | |
| @@ -2531,90 +2623,78 @@ void ff_put_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, · 2186 unmodified lines | ||
| 2531 | 2623 | void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, |
| 2532 | 2624 | ptrdiff_t stride) |
| 2533 | 2625 | { |
| 2534 | − avc_luma_hv_qrt_16w_msa(src - 2, | |
| 2535 | − src - (stride * 2), stride, dst, stride, 16); | |
| 2626 | + avc_luma_hv_qrt_16x16_msa(src - 2, src - (stride * 2), dst, stride); | |
| 2536 | 2627 | } |
| 2537 | 2628 | |
| 2538 | 2629 | void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src, |
| 2539 | 2630 | ptrdiff_t stride) |
| 2540 | 2631 | { |
| 2541 | − avc_luma_hv_qrt_16w_msa(src - 2, | |
| 2542 | − src - (stride * 2) + | |
| 2543 | − sizeof(uint8_t), stride, dst, stride, 16); | |
| 2632 | + avc_luma_hv_qrt_16x16_msa(src - 2, src - (stride * 2) + 1, dst, stride); | |
| 2544 | 2633 | } |
| 2545 | 2634 | |
| 2546 | 2635 | void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src, |
| 2547 | 2636 | ptrdiff_t stride) |
| 2548 | 2637 | { |
| 2549 | − avc_luma_hv_qrt_16w_msa(src + stride - 2, | |
| 2550 | − src - (stride * 2), stride, dst, stride, 16); | |
| 2638 | + avc_luma_hv_qrt_16x16_msa(src + stride - 2, src - (stride * 2), dst, | |
| 2639 | + stride); | |
| 2551 | 2640 | } |
| 2552 | 2641 | |
| 2553 | 2642 | void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src, |
| 2554 | 2643 | ptrdiff_t stride) |
| 2555 | 2644 | { |
| 2556 | − avc_luma_hv_qrt_16w_msa(src + stride - 2, | |
| 2557 | − src - (stride * 2) + | |
| 2558 | − sizeof(uint8_t), stride, dst, stride, 16); | |
| 2645 | + avc_luma_hv_qrt_16x16_msa(src + stride - 2, src - (stride * 2) + 1, dst, | |
| 2646 | + stride); | |
| 2559 | 2647 | } |
| 2560 | 2648 | |
| 2561 | 2649 | void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src, |
| 2562 | 2650 | ptrdiff_t stride) |
| 2563 | 2651 | { |
| 2564 | − avc_luma_hv_qrt_8w_msa(src - 2, src - (stride * 2), stride, dst, stride, 8); | |
| 2652 | + avc_luma_hv_qrt_8x8_msa(src - 2, src - (stride * 2), dst, stride); | |
| 2565 | 2653 | } |
| 2566 | 2654 | |
| 2567 | 2655 | void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src, |
| 2568 | 2656 | ptrdiff_t stride) |
| 2569 | 2657 | { |
| 2570 | − avc_luma_hv_qrt_8w_msa(src - 2, | |
| 2571 | − src - (stride * 2) + | |
| 2572 | − sizeof(uint8_t), stride, dst, stride, 8); | |
| 2658 | + avc_luma_hv_qrt_8x8_msa(src - 2, src - (stride * 2) + 1, dst, stride); | |
| 2573 | 2659 | } |
| 2574 | 2660 | |
| 2575 | 2661 | void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src, |
| 2576 | 2662 | ptrdiff_t stride) |
| 2577 | 2663 | { |
| 2578 | − avc_luma_hv_qrt_8w_msa(src + stride - 2, | |
| 2579 | − src - (stride * 2), stride, dst, stride, 8); | |
| 2664 | + avc_luma_hv_qrt_8x8_msa(src + stride - 2, src - (stride * 2), dst, stride); | |
| 2580 | 2665 | } |
| 2581 | 2666 | |
| 2582 | 2667 | void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src, |
| 2583 | 2668 | ptrdiff_t stride) |
| 2584 | 2669 | { |
| 2585 | − avc_luma_hv_qrt_8w_msa(src + stride - 2, | |
| 2586 | − src - (stride * 2) + | |
| 2587 | − sizeof(uint8_t), stride, dst, stride, 8); | |
| 2670 | + avc_luma_hv_qrt_8x8_msa(src + stride - 2, src - (stride * 2) + 1, dst, | |
| 2671 | + stride); | |
| 2588 | 2672 | } |
| 2589 | 2673 | |
| 2590 | 2674 | |
| 2591 | 2675 | void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src, |
| 2592 | 2676 | ptrdiff_t stride) |
| 2593 | 2677 | { |
| 2594 | − avc_luma_hv_qrt_4w_msa(src - 2, src - (stride * 2), stride, dst, stride, 4); | |
| 2678 | + avc_luma_hv_qrt_4x4_msa(src - 2, src - (stride * 2), dst, stride); | |
| 2595 | 2679 | } |
| 2596 | 2680 | |
| 2597 | 2681 | void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src, |
| 2598 | 2682 | ptrdiff_t stride) |
| 2599 | 2683 | { |
| 2600 | − avc_luma_hv_qrt_4w_msa(src - 2, | |
| 2601 | − src - (stride * 2) + | |
| 2602 | − sizeof(uint8_t), stride, dst, stride, 4); | |
| 2684 | + avc_luma_hv_qrt_4x4_msa(src - 2, src - (stride * 2) + 1, dst, stride); | |
| 2603 | 2685 | } |
| 2604 | 2686 | |
| 2605 | 2687 | void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src, |
| 2606 | 2688 | ptrdiff_t stride) |
| 2607 | 2689 | { |
| 2608 | − avc_luma_hv_qrt_4w_msa(src + stride - 2, | |
| 2609 | − src - (stride * 2), stride, dst, stride, 4); | |
| 2690 | + avc_luma_hv_qrt_4x4_msa(src + stride - 2, src - (stride * 2), dst, stride); | |
| 2610 | 2691 | } |
| 2611 | 2692 | |
| 2612 | 2693 | void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src, |
| 2613 | 2694 | ptrdiff_t stride) |
| 2614 | 2695 | { |
| 2615 | − avc_luma_hv_qrt_4w_msa(src + stride - 2, | |
| 2616 | − src - (stride * 2) + | |
| 2617 | − sizeof(uint8_t), stride, dst, stride, 4); | |
| 2696 | + avc_luma_hv_qrt_4x4_msa(src + stride - 2, src - (stride * 2) + 1, dst, | |
| 2697 | + stride); | |
| 2618 | 2698 | } |
| 2619 | 2699 | |
| 2620 | 2700 | void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, |