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 | out0_m; \ | 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, | 174 | static void avc_luma_hv_qrt_4x4_msa(const uint8_t *src_x, const uint8_t *src_y, |
| 175 | int32_t src_stride, uint8_t *dst, | 175 | uint8_t *dst, int32_t stride) |
| 176 | int32_t dst_stride, int32_t height) | ||
| 177 | { | 176 | { |
| 178 | uint32_t loop_cnt; | 177 | const int16_t filt_const0 = 0xfb01; |
| 179 | v16i8 src_hz0, src_hz1, src_hz2, src_hz3; | 178 | const int16_t filt_const1 = 0x1414; |
| 180 | v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4; | 179 | const int16_t filt_const2 = 0x1fb; |
| 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; | ||
| 185 | v16u8 out; | 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 | LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2); | 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); | 193 | LD_SB5(src_y, stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); |
| 190 | src_y += (5 * src_stride); | 194 | src_y += (5 * stride); |
| 191 | 195 | ||
| 192 | src_vt0 = (v16i8) __msa_insve_w((v4i32) src_vt0, 1, (v4i32) src_vt1); | 196 | src_vt0 = (v16i8) __msa_insve_w((v4i32) src_vt0, 1, (v4i32) src_vt1); |
| 193 | src_vt1 = (v16i8) __msa_insve_w((v4i32) src_vt1, 1, (v4i32) src_vt2); | 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 | XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3); | 201 | XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3); |
| 198 | 202 | ||
| 199 | for (loop_cnt = (height >> 2); loop_cnt--;) { | 203 | LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); |
| 200 | LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3); | 204 | XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); |
| 201 | src_x += (4 * src_stride); | 205 | hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz1, mask0, mask1, mask2); |
| 202 | 206 | hz_out1 = AVC_HORZ_FILTER_SH(src_hz2, src_hz3, mask0, mask1, mask2); | |
| 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); | ||
| 224 | 207 | ||
| 225 | /* filter calc */ | 208 | SRARI_H2_SH(hz_out0, hz_out1, 5); |
| 226 | vert_out0 = AVC_CALC_DPADD_B_6PIX_2COEFF_R_SH(src_vt0, src_vt1, | 209 | SAT_SH2_SH(hz_out0, hz_out1, 7); |
| 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); | ||
| 232 | 210 | ||
| 233 | SRARI_H2_SH(vert_out0, vert_out1, 5); | 211 | LD_SB4(src_y, stride, src_vt5, src_vt6, src_vt7, src_vt8); |
| 234 | SAT_SH2_SH(vert_out0, vert_out1, 7); | ||
| 235 | 212 | ||
| 236 | out0 = __msa_srari_h((hz_out0 + vert_out0), 1); | 213 | src_vt4 = (v16i8) __msa_insve_w((v4i32) src_vt4, 1, (v4i32) src_vt5); |
| 237 | out1 = __msa_srari_h((hz_out1 + vert_out1), 1); | 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); | 218 | XORI_B4_128_SB(src_vt4, src_vt5, src_vt6, src_vt7); |
| 240 | out = PCKEV_XORI128_UB(out0, out1); | 219 | ILVR_B2_SB(src_vt1, src_vt0, src_vt3, src_vt2, src_vt10_r, src_vt32_r); |
| 241 | ST4x4_UB(out, out, 0, 1, 2, 3, dst, dst_stride); | 220 | ILVR_B2_SB(src_vt5, src_vt4, src_vt7, src_vt6, src_vt54_r, src_vt76_r); |
| 242 | dst += (4 * dst_stride); | 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; | 231 | SAT_SH2_SH(out0, out1, 7); |
| 245 | src_vt1 = src_vt5; | 232 | out = PCKEV_XORI128_UB(out0, out1); |
| 246 | src_vt0 = src_vt4; | 233 | ST4x4_UB(out, out, 0, 1, 2, 3, dst, stride); |
| 247 | src_vt4 = src_vt8; | ||
| 248 | src_vt2 = src_vt6; | ||
| 249 | } | ||
| 250 | } | 234 | } |
| 251 | 235 | ||
| 252 | static void avc_luma_hv_qrt_8w_msa(const uint8_t *src_x, const uint8_t *src_y, | 236 | static void avc_luma_hv_qrt_8x8_msa(const uint8_t *src_x, const uint8_t *src_y, |
| 253 | int32_t src_stride, uint8_t *dst, | 237 | uint8_t *dst, int32_t stride) |
| 254 | int32_t dst_stride, int32_t height) | ||
| 255 | { | 238 | { |
| 256 | uint32_t loop_cnt; | 239 | const int16_t filt_const0 = 0xfb01; |
| 257 | v16i8 src_hz0, src_hz1, src_hz2, src_hz3; | 240 | const int16_t filt_const1 = 0x1414; |
| 258 | v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4; | 241 | const int16_t filt_const2 = 0x1fb; |
| 259 | v16i8 src_vt5, src_vt6, src_vt7, src_vt8; | 242 | v16u8 out0, out1; |
| 260 | v16i8 mask0, mask1, mask2; | 243 | v16i8 src_hz0, src_hz1, src_hz2, src_hz3, mask0, mask1, mask2; |
| 261 | v8i16 hz_out0, hz_out1, hz_out2, hz_out3; | 244 | v16i8 src_vt0, src_vt1, src_vt2, src_vt3, src_vt4, src_vt5, src_vt6; |
| 262 | v8i16 vert_out0, vert_out1, vert_out2, vert_out3; | 245 | v16i8 src_vt7, src_vt8, src_vt9, src_vt10, src_vt11, src_vt12; |
| 263 | v8i16 out0, out1, out2, out3; | 246 | v16i8 src_vt10_r, src_vt21_r, src_vt32_r, src_vt43_r, src_vt54_r; |
| 264 | v16u8 tmp0, tmp1; | 247 | v16i8 src_vt65_r, src_vt76_r, src_vt87_r, src_vt98_r, src_vt109_r; |
| 265 | 248 | v16i8 src_vt1110_r, src_vt1211_r, filt0, filt1, filt2; | |
| 266 | LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); | 249 | v8i16 hz_out0, hz_out1, hz_out2, hz_out3, vt_out0, vt_out1, vt_out2; |
| 267 | LD_SB5(src_y, src_stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); | 250 | v8i16 vt_out3, tmp0, tmp1, tmp2, tmp3; |
| 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); | ||
| 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--;) { | 256 | LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); |
| 278 | LD_SB4(src_x, src_stride, src_hz0, src_hz1, src_hz2, src_hz3); | 257 | LD_SB5(src_y, stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); |
| 279 | XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); | 258 | src_y += (5 * stride); |
| 280 | src_x += (4 * src_stride); | ||
| 281 | 259 | ||
| 282 | hz_out0 = AVC_HORZ_FILTER_SH(src_hz0, src_hz0, mask0, mask1, mask2); | 260 | XORI_B5_128_SB(src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); |
| 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); | ||
| 286 | 261 | ||
| 287 | SRARI_H4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 5); | 262 | LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); |
| 288 | SAT_SH4_SH(hz_out0, hz_out1, hz_out2, hz_out3, 7); | 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); | 301 | SAT_SH4_SH(tmp0, tmp1, tmp2, tmp3, 7); |
| 291 | src_y += (4 * src_stride); | 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); | 307 | LD_SB4(src_y, stride, src_vt9, src_vt10, src_vt11, src_vt12); |
| 294 | src_vt5 = (v16i8) __msa_insve_d((v2i64) src_vt5, 1, (v2i64) src_vt6); | 308 | XORI_B4_128_SB(src_vt9, src_vt10, src_vt11, src_vt12); |
| 295 | src_vt6 = (v16i8) __msa_insve_d((v2i64) src_vt6, 1, (v2i64) src_vt7); | 309 | |
| 296 | src_vt7 = (v16i8) __msa_insve_d((v2i64) src_vt7, 1, (v2i64) src_vt8); | 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 */ | 364 | filt0 = (v16i8) __msa_fill_h(filt_const0); |
| 301 | AVC_CALC_DPADD_B_6PIX_2COEFF_SH(src_vt0, src_vt1, src_vt2, src_vt3, | 365 | filt1 = (v16i8) __msa_fill_h(filt_const1); |
| 302 | src_vt4, src_vt5, vert_out0, vert_out1); | 366 | filt2 = (v16i8) __msa_fill_h(filt_const2); |
| 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); | ||
| 305 | 367 | ||
| 306 | SRARI_H4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 5); | 368 | LD_SB3(&luma_mask_arr[0], 16, mask0, mask1, mask2); |
| 307 | SAT_SH4_SH(vert_out0, vert_out1, vert_out2, vert_out3, 7); | ||
| 308 | 369 | ||
| 309 | out0 = __msa_srari_h((hz_out0 + vert_out0), 1); | 370 | for (multiple8_cnt = 2; multiple8_cnt--;) { |
| 310 | out1 = __msa_srari_h((hz_out1 + vert_out1), 1); | 371 | src_x = src_x_tmp; |
| 311 | out2 = __msa_srari_h((hz_out2 + vert_out2), 1); | 372 | src_y = src_y_tmp; |
| 312 | out3 = __msa_srari_h((hz_out3 + vert_out3), 1); | 373 | dst = dst_tmp; |
| 313 | 374 | ||
| 314 | SAT_SH4_SH(out0, out1, out2, out3, 7); | 375 | LD_SB5(src_y, stride, src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); |
| 315 | tmp0 = PCKEV_XORI128_UB(out0, out1); | 376 | src_y += (5 * stride); |
| 316 | tmp1 = PCKEV_XORI128_UB(out2, out3); | ||
| 317 | ST8x4_UB(tmp0, tmp1, dst, dst_stride); | ||
| 318 | 377 | ||
| 319 | dst += (4 * dst_stride); | 378 | XORI_B5_128_SB(src_vt0, src_vt1, src_vt2, src_vt3, src_vt4); |
| 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 | } | ||
| 328 | 379 | ||
| 329 | static void avc_luma_hv_qrt_16w_msa(const uint8_t *src_x, const uint8_t *src_y, | 380 | for (loop_cnt = 4; loop_cnt--;) { |
| 330 | int32_t src_stride, uint8_t *dst, | 381 | LD_SB4(src_x, stride, src_hz0, src_hz1, src_hz2, src_hz3); |
| 331 | int32_t dst_stride, int32_t height) | 382 | XORI_B4_128_SB(src_hz0, src_hz1, src_hz2, src_hz3); |
| 332 | { | 383 | src_x += (4 * stride); |
| 333 | uint32_t multiple8_cnt; | 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--;) { | 424 | src_vt0 = src_vt4; |
| 336 | avc_luma_hv_qrt_8w_msa(src_x, src_y, src_stride, dst, dst_stride, | 425 | src_vt1 = src_vt5; |
| 337 | height); | 426 | src_vt2 = src_vt6; |
| 427 | src_vt3 = src_vt7; | ||
| 428 | src_vt4 = src_vt8; | ||
| 429 | } | ||
| 338 | 430 | ||
| 339 | src_x += 8; | 431 | src_x_tmp += 8; |
| 340 | src_y += 8; | 432 | src_y_tmp += 8; |
| 341 | dst += 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 | void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, | 2623 | void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src, |
| 2532 | ptrdiff_t stride) | 2624 | ptrdiff_t stride) |
| 2533 | { | 2625 | { |
| 2534 | avc_luma_hv_qrt_16w_msa(src - 2, | 2626 | avc_luma_hv_qrt_16x16_msa(src - 2, src - (stride * 2), dst, stride); |
| 2535 | src - (stride * 2), stride, dst, stride, 16); | ||
| 2536 | } | 2627 | } |
| 2537 | 2628 | ||
| 2538 | void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src, | 2629 | void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src, |
| 2539 | ptrdiff_t stride) | 2630 | ptrdiff_t stride) |
| 2540 | { | 2631 | { |
| 2541 | avc_luma_hv_qrt_16w_msa(src - 2, | 2632 | avc_luma_hv_qrt_16x16_msa(src - 2, src - (stride * 2) + 1, dst, stride); |
| 2542 | src - (stride * 2) + | ||
| 2543 | sizeof(uint8_t), stride, dst, stride, 16); | ||
| 2544 | } | 2633 | } |
| 2545 | 2634 | ||
| 2546 | void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src, | 2635 | void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src, |
| 2547 | ptrdiff_t stride) | 2636 | ptrdiff_t stride) |
| 2548 | { | 2637 | { |
| 2549 | avc_luma_hv_qrt_16w_msa(src + stride - 2, | 2638 | avc_luma_hv_qrt_16x16_msa(src + stride - 2, src - (stride * 2), dst, |
| 2550 | src - (stride * 2), stride, dst, stride, 16); | 2639 | stride); |
| 2551 | } | 2640 | } |
| 2552 | 2641 | ||
| 2553 | void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src, | 2642 | void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src, |
| 2554 | ptrdiff_t stride) | 2643 | ptrdiff_t stride) |
| 2555 | { | 2644 | { |
| 2556 | avc_luma_hv_qrt_16w_msa(src + stride - 2, | 2645 | avc_luma_hv_qrt_16x16_msa(src + stride - 2, src - (stride * 2) + 1, dst, |
| 2557 | src - (stride * 2) + | 2646 | stride); |
| 2558 | sizeof(uint8_t), stride, dst, stride, 16); | ||
| 2559 | } | 2647 | } |
| 2560 | 2648 | ||
| 2561 | void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src, | 2649 | void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src, |
| 2562 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src, | 2655 | void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src, |
| 2568 | ptrdiff_t stride) | 2656 | ptrdiff_t stride) |
| 2569 | { | 2657 | { |
| 2570 | avc_luma_hv_qrt_8w_msa(src - 2, | 2658 | avc_luma_hv_qrt_8x8_msa(src - 2, src - (stride * 2) + 1, dst, stride); |
| 2571 | src - (stride * 2) + | ||
| 2572 | sizeof(uint8_t), stride, dst, stride, 8); | ||
| 2573 | } | 2659 | } |
| 2574 | 2660 | ||
| 2575 | void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src, | 2661 | void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src, |
| 2576 | ptrdiff_t stride) | 2662 | ptrdiff_t stride) |
| 2577 | { | 2663 | { |
| 2578 | avc_luma_hv_qrt_8w_msa(src + stride - 2, | 2664 | avc_luma_hv_qrt_8x8_msa(src + stride - 2, src - (stride * 2), dst, stride); |
| 2579 | src - (stride * 2), stride, dst, stride, 8); | ||
| 2580 | } | 2665 | } |
| 2581 | 2666 | ||
| 2582 | void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src, | 2667 | void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src, |
| 2583 | ptrdiff_t stride) | 2668 | ptrdiff_t stride) |
| 2584 | { | 2669 | { |
| 2585 | avc_luma_hv_qrt_8w_msa(src + stride - 2, | 2670 | avc_luma_hv_qrt_8x8_msa(src + stride - 2, src - (stride * 2) + 1, dst, |
| 2586 | src - (stride * 2) + | 2671 | stride); |
| 2587 | sizeof(uint8_t), stride, dst, stride, 8); | ||
| 2588 | } | 2672 | } |
| 2589 | 2673 | ||
| 2590 | 2674 | ||
| 2591 | void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src, | 2675 | void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src, |
| 2592 | ptrdiff_t stride) | 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 | void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src, | 2681 | void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src, |
| 2598 | ptrdiff_t stride) | 2682 | ptrdiff_t stride) |
| 2599 | { | 2683 | { |
| 2600 | avc_luma_hv_qrt_4w_msa(src - 2, | 2684 | avc_luma_hv_qrt_4x4_msa(src - 2, src - (stride * 2) + 1, dst, stride); |
| 2601 | src - (stride * 2) + | ||
| 2602 | sizeof(uint8_t), stride, dst, stride, 4); | ||
| 2603 | } | 2685 | } |
| 2604 | 2686 | ||
| 2605 | void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src, | 2687 | void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src, |
| 2606 | ptrdiff_t stride) | 2688 | ptrdiff_t stride) |
| 2607 | { | 2689 | { |
| 2608 | avc_luma_hv_qrt_4w_msa(src + stride - 2, | 2690 | avc_luma_hv_qrt_4x4_msa(src + stride - 2, src - (stride * 2), dst, stride); |
| 2609 | src - (stride * 2), stride, dst, stride, 4); | ||
| 2610 | } | 2691 | } |
| 2611 | 2692 | ||
| 2612 | void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src, | 2693 | void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src, |
| 2613 | ptrdiff_t stride) | 2694 | ptrdiff_t stride) |
| 2614 | { | 2695 | { |
| 2615 | avc_luma_hv_qrt_4w_msa(src + stride - 2, | 2696 | avc_luma_hv_qrt_4x4_msa(src + stride - 2, src - (stride * 2) + 1, dst, |
| 2616 | src - (stride * 2) + | 2697 | stride); |
| 2617 | sizeof(uint8_t), stride, dst, stride, 4); | ||
| 2618 | } | 2698 | } |
| 2619 | 2699 | ||
| 2620 | void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, | 2700 | void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src, |