History

avcodec/mips: Remove generic func use in hevc non-uni copy mc msa functions

Kaustubh Raste committed 9 years ago

Commit f160a631 parent 2b156261 file · +160 −8Browse files

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

Unified · Split

libavcodec/mips/hevcdsp_msa.c+160−8
@@ -1,5 +1,5 @@
11 /*
2− * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com)
2+ * Copyright (c) 2015 - 2017 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com)
33 *
44 * This file is part of FFmpeg.
55 *
@@ -302,8 +302,34 @@ static void hevc_copy_16w_msa(uint8_t *src, int32_t src_stride, · 296 unmodified lines
302302 ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
303303 ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
304304 } else if (0 == (height % 8)) {
305− hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride,
306− height, 16);
305+ uint32_t loop_cnt;
306+ v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
307+ v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l;
308+
309+ for (loop_cnt = (height >> 3); loop_cnt--;) {
310+ LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6,
311+ src7);
312+ src += (8 * src_stride);
313+ ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_r,
314+ in1_r, in2_r, in3_r);
315+ ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_l,
316+ in1_l, in2_l, in3_l);
317+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
318+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
319+ ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
320+ ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
321+ dst += (4 * dst_stride);
322+
323+ ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_r,
324+ in1_r, in2_r, in3_r);
325+ ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_l,
326+ in1_l, in2_l, in3_l);
327+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
328+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
329+ ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
330+ ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
331+ dst += (4 * dst_stride);
332+ }
307333 }
308334 }
309335
@@ -311,29 +337,155 @@ static void hevc_copy_24w_msa(uint8_t *src, int32_t src_stride, · 1 unmodified line
311337 int16_t *dst, int32_t dst_stride,
312338 int32_t height)
313339 {
314− hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 16);
315− hevc_copy_8w_msa(src + 16, src_stride, dst + 16, dst_stride, height);
340+ uint32_t loop_cnt;
341+ v16i8 zero = { 0 };
342+ v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
343+ v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l;
344+
345+ for (loop_cnt = (height >> 2); loop_cnt--;) {
346+ LD_SB4(src, src_stride, src0, src1, src2, src3);
347+ LD_SB4((src + 16), src_stride, src4, src5, src6, src7);
348+ src += (4 * src_stride);
349+ ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_r, in1_r,
350+ in2_r, in3_r);
351+ ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_l, in1_l,
352+ in2_l, in3_l);
353+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
354+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
355+ ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
356+ ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride);
357+ ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_r, in1_r,
358+ in2_r, in3_r);
359+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
360+ ST_SH4(in0_r, in1_r, in2_r, in3_r, (dst + 16), dst_stride);
361+ dst += (4 * dst_stride);
362+ }
316363 }
317364
318365 static void hevc_copy_32w_msa(uint8_t *src, int32_t src_stride,
319366 int16_t *dst, int32_t dst_stride,
320367 int32_t height)
321368 {
322− hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 32);
369+ uint32_t loop_cnt;
370+ v16i8 zero = { 0 };
371+ v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
372+ v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l;
373+
374+ for (loop_cnt = (height >> 2); loop_cnt--;) {
375+ LD_SB4(src, src_stride, src0, src2, src4, src6);
376+ LD_SB4((src + 16), src_stride, src1, src3, src5, src7);
377+ src += (4 * src_stride);
378+
379+ ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_r, in1_r,
380+ in2_r, in3_r);
381+ ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_l, in1_l,
382+ in2_l, in3_l);
383+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
384+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
385+ ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8);
386+ dst += dst_stride;
387+ ST_SH4(in2_r, in2_l, in3_r, in3_l, dst, 8);
388+ dst += dst_stride;
389+
390+ ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_r, in1_r,
391+ in2_r, in3_r);
392+ ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_l, in1_l,
393+ in2_l, in3_l);
394+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
395+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
396+ ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8);
397+ dst += dst_stride;
398+ ST_SH4(in2_r, in2_l, in3_r, in3_l, dst, 8);
399+ dst += dst_stride;
400+ }
323401 }
324402
325403 static void hevc_copy_48w_msa(uint8_t *src, int32_t src_stride,
326404 int16_t *dst, int32_t dst_stride,
327405 int32_t height)
328406 {
329− hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 48);
407+ uint32_t loop_cnt;
408+ v16i8 zero = { 0 };
409+ v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
410+ v16i8 src8, src9, src10, src11;
411+ v8i16 in0_r, in1_r, in2_r, in3_r, in4_r, in5_r;
412+ v8i16 in0_l, in1_l, in2_l, in3_l, in4_l, in5_l;
413+
414+ for (loop_cnt = (height >> 2); loop_cnt--;) {
415+ LD_SB3(src, 16, src0, src1, src2);
416+ src += src_stride;
417+ LD_SB3(src, 16, src3, src4, src5);
418+ src += src_stride;
419+ LD_SB3(src, 16, src6, src7, src8);
420+ src += src_stride;
421+ LD_SB3(src, 16, src9, src10, src11);
422+ src += src_stride;
423+
424+ ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
425+ in0_r, in1_r, in2_r, in3_r);
426+ ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
427+ in0_l, in1_l, in2_l, in3_l);
428+ ILVR_B2_SH(zero, src4, zero, src5, in4_r, in5_r);
429+ ILVL_B2_SH(zero, src4, zero, src5, in4_l, in5_l);
430+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
431+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
432+ SLLI_4V(in4_r, in5_r, in4_l, in5_l, 6);
433+ ST_SH6(in0_r, in0_l, in1_r, in1_l, in2_r, in2_l, dst, 8);
434+ dst += dst_stride;
435+ ST_SH6(in3_r, in3_l, in4_r, in4_l, in5_r, in5_l, dst, 8);
436+ dst += dst_stride;
437+
438+ ILVR_B4_SH(zero, src6, zero, src7, zero, src8, zero, src9,
439+ in0_r, in1_r, in2_r, in3_r);
440+ ILVL_B4_SH(zero, src6, zero, src7, zero, src8, zero, src9,
441+ in0_l, in1_l, in2_l, in3_l);
442+ ILVR_B2_SH(zero, src10, zero, src11, in4_r, in5_r);
443+ ILVL_B2_SH(zero, src10, zero, src11, in4_l, in5_l);
444+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
445+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
446+ SLLI_4V(in4_r, in5_r, in4_l, in5_l, 6);
447+ ST_SH6(in0_r, in0_l, in1_r, in1_l, in2_r, in2_l, dst, 8);
448+ dst += dst_stride;
449+ ST_SH6(in3_r, in3_l, in4_r, in4_l, in5_r, in5_l, dst, 8);
450+ dst += dst_stride;
451+ }
330452 }
331453
332454 static void hevc_copy_64w_msa(uint8_t *src, int32_t src_stride,
333455 int16_t *dst, int32_t dst_stride,
334456 int32_t height)
335457 {
336− hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 64);
458+ uint32_t loop_cnt;
459+ v16i8 zero = { 0 };
460+ v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
461+ v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l;
462+
463+ for (loop_cnt = (height >> 1); loop_cnt--;) {
464+ LD_SB4(src, 16, src0, src1, src2, src3);
465+ src += src_stride;
466+ LD_SB4(src, 16, src4, src5, src6, src7);
467+ src += src_stride;
468+
469+ ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
470+ in0_r, in1_r, in2_r, in3_r);
471+ ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
472+ in0_l, in1_l, in2_l, in3_l);
473+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
474+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
475+ ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8);
476+ ST_SH4(in2_r, in2_l, in3_r, in3_l, (dst + 32), 8);
477+ dst += dst_stride;
478+
479+ ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
480+ in0_r, in1_r, in2_r, in3_r);
481+ ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
482+ in0_l, in1_l, in2_l, in3_l);
483+ SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6);
484+ SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6);
485+ ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8);
486+ ST_SH4(in2_r, in2_l, in3_r, in3_l, (dst + 32), 8);
487+ dst += dst_stride;
488+ }
337489 }
338490
339491 static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride,

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