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
171171 out0_m; \
172172 } )
173173
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)
177176 {
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;
185180 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);
186190
187191 LD_SB3(&luma_mask_arr[48], 16, mask0, mask1, mask2);
188192
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);
191195
192196 src_vt0 = (v16i8) __msa_insve_w((v4i32) src_vt0, 1, (v4i32) src_vt1);
193197 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
196200
197201 XORI_B4_128_SB(src_vt0, src_vt1, src_vt2, src_vt3);
198202
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);
224207
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);
232210
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);
235212
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);
238217
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);
243230
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);
250234 }
251235
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)
255238 {
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;
274251
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);
276255
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);
281259
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);
286261
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);
289300
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);
292306
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+}
297343
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;
299363
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);
305367
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);
308369
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;
313374
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);
318377
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);
328379
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);
334423
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+ }
338430
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;
342434 }
343435 }
344436
@@ -2531,90 +2623,78 @@ void ff_put_h264_qpel4_mc03_msa(uint8_t *dst, const uint8_t *src, · 2186 unmodified lines
25312623 void ff_put_h264_qpel16_mc11_msa(uint8_t *dst, const uint8_t *src,
25322624 ptrdiff_t stride)
25332625 {
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);
25362627 }
25372628
25382629 void ff_put_h264_qpel16_mc31_msa(uint8_t *dst, const uint8_t *src,
25392630 ptrdiff_t stride)
25402631 {
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);
25442633 }
25452634
25462635 void ff_put_h264_qpel16_mc13_msa(uint8_t *dst, const uint8_t *src,
25472636 ptrdiff_t stride)
25482637 {
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);
25512640 }
25522641
25532642 void ff_put_h264_qpel16_mc33_msa(uint8_t *dst, const uint8_t *src,
25542643 ptrdiff_t stride)
25552644 {
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);
25592647 }
25602648
25612649 void ff_put_h264_qpel8_mc11_msa(uint8_t *dst, const uint8_t *src,
25622650 ptrdiff_t stride)
25632651 {
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);
25652653 }
25662654
25672655 void ff_put_h264_qpel8_mc31_msa(uint8_t *dst, const uint8_t *src,
25682656 ptrdiff_t stride)
25692657 {
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);
25732659 }
25742660
25752661 void ff_put_h264_qpel8_mc13_msa(uint8_t *dst, const uint8_t *src,
25762662 ptrdiff_t stride)
25772663 {
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);
25802665 }
25812666
25822667 void ff_put_h264_qpel8_mc33_msa(uint8_t *dst, const uint8_t *src,
25832668 ptrdiff_t stride)
25842669 {
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);
25882672 }
25892673
25902674
25912675 void ff_put_h264_qpel4_mc11_msa(uint8_t *dst, const uint8_t *src,
25922676 ptrdiff_t stride)
25932677 {
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);
25952679 }
25962680
25972681 void ff_put_h264_qpel4_mc31_msa(uint8_t *dst, const uint8_t *src,
25982682 ptrdiff_t stride)
25992683 {
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);
26032685 }
26042686
26052687 void ff_put_h264_qpel4_mc13_msa(uint8_t *dst, const uint8_t *src,
26062688 ptrdiff_t stride)
26072689 {
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);
26102691 }
26112692
26122693 void ff_put_h264_qpel4_mc33_msa(uint8_t *dst, const uint8_t *src,
26132694 ptrdiff_t stride)
26142695 {
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);
26182698 }
26192699
26202700 void 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