History

avcodec/mips: Improve avc put mc 11, 31, 13 and 33 msa functions

Remove loops and unroll as block sizes are known.

Kaustubh Raste committed 9 years ago

Commit 2aab7c21 parent c23209f1 file · +240 −160Browse files

Showing the changes to libavcodec/mips (1 of 1 file). Show all

Unified · Split

libavcodec/mips/h264qpel_msa.c+240−160
@@ -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
174static void avc_luma_hv_qrt_4w_msa(const uint8_t *src_x, const uint8_t *src_y,174static 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
252static void avc_luma_hv_qrt_8w_msa(const uint8_t *src_x, const uint8_t *src_y,236static 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);344static 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
329static 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
2531void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src,2623void 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
2538void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src,2629void 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
2546void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src,2635void 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
2553void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src,2642void 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
2561void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src,2649void 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
2567void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src,2655void 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
2575void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src,2661void 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
2582void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src,2667void 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
2591void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src,2675void 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
2597void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src,2681void 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
2605void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src,2687void 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
2612void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src,2693void 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
2620void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src,2700void ff_put_h264_qpel16_mc21_msa(uint8_t *dst, const uint8_t *src,

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t