shithub: libvpx

Download patch

ref: 5d91752a98e755c6d62ef5be1b106d77e5ed3c66
parent: 9a032fa2628ee55ec557d2c03fb09ead796eea3d
parent: 68cd3052cadad08fa85b7f02a4f303a4418e1d25
author: James Zern <jzern@google.com>
date: Fri Oct 21 22:28:15 EDT 2016

Merge "vpx_highbd_convolve_copy_neon: use multi reg loads"

--- a/vpx_dsp/arm/highbd_vpx_convolve_copy_neon.c
+++ b/vpx_dsp/arm/highbd_vpx_convolve_copy_neon.c
@@ -49,44 +49,55 @@
     } while (h > 0);
   } else if (w < 32) {  // copy16
     do {
-      vst1q_u16(dst, vld1q_u16(src));
-      vst1q_u16(dst + 8, vld1q_u16(src + 8));
+      vst2q_u16(dst, vld2q_u16(src));
       src += src_stride;
       dst += dst_stride;
-      vst1q_u16(dst, vld1q_u16(src));
-      vst1q_u16(dst + 8, vld1q_u16(src + 8));
+      vst2q_u16(dst, vld2q_u16(src));
       src += src_stride;
       dst += dst_stride;
-      h -= 2;
+      vst2q_u16(dst, vld2q_u16(src));
+      src += src_stride;
+      dst += dst_stride;
+      vst2q_u16(dst, vld2q_u16(src));
+      src += src_stride;
+      dst += dst_stride;
+      h -= 4;
     } while (h > 0);
   } else if (w == 32) {  // copy32
     do {
-      vst1q_u16(dst, vld1q_u16(src));
-      vst1q_u16(dst + 8, vld1q_u16(src + 8));
-      vst1q_u16(dst + 16, vld1q_u16(src + 16));
-      vst1q_u16(dst + 24, vld1q_u16(src + 24));
+      vst4q_u16(dst, vld4q_u16(src));
       src += src_stride;
       dst += dst_stride;
-      vst1q_u16(dst, vld1q_u16(src));
-      vst1q_u16(dst + 8, vld1q_u16(src + 8));
-      vst1q_u16(dst + 16, vld1q_u16(src + 16));
-      vst1q_u16(dst + 24, vld1q_u16(src + 24));
+      vst4q_u16(dst, vld4q_u16(src));
       src += src_stride;
       dst += dst_stride;
-      h -= 2;
+      vst4q_u16(dst, vld4q_u16(src));
+      src += src_stride;
+      dst += dst_stride;
+      vst4q_u16(dst, vld4q_u16(src));
+      src += src_stride;
+      dst += dst_stride;
+      h -= 4;
     } while (h > 0);
   } else {  // copy64
     do {
-      vst1q_u16(dst, vld1q_u16(src));
-      vst1q_u16(dst + 8, vld1q_u16(src + 8));
-      vst1q_u16(dst + 16, vld1q_u16(src + 16));
-      vst1q_u16(dst + 24, vld1q_u16(src + 24));
-      vst1q_u16(dst + 32, vld1q_u16(src + 32));
-      vst1q_u16(dst + 40, vld1q_u16(src + 40));
-      vst1q_u16(dst + 48, vld1q_u16(src + 48));
-      vst1q_u16(dst + 56, vld1q_u16(src + 56));
+      vst4q_u16(dst, vld4q_u16(src));
+      vst4q_u16(dst + 32, vld4q_u16(src + 32));
       src += src_stride;
       dst += dst_stride;
-    } while (--h);
+      vst4q_u16(dst, vld4q_u16(src));
+      vst4q_u16(dst + 32, vld4q_u16(src + 32));
+      src += src_stride;
+      dst += dst_stride;
+      vst4q_u16(dst, vld4q_u16(src));
+      vst4q_u16(dst + 32, vld4q_u16(src + 32));
+      src += src_stride;
+      dst += dst_stride;
+      vst4q_u16(dst, vld4q_u16(src));
+      vst4q_u16(dst + 32, vld4q_u16(src + 32));
+      src += src_stride;
+      dst += dst_stride;
+      h -= 4;
+    } while (h > 0);
   }
 }