ref: 68cd3052cadad08fa85b7f02a4f303a4418e1d25
parent: 808a560be6a71dd0d27f29c26f9fefb5e809d373
author: James Zern <[email protected]>
date: Sat Oct 15 07:04:37 EDT 2016
vpx_highbd_convolve_copy_neon: use multi reg loads for copy16/32/64 BUG=webm:1299 Change-Id: I5080d736bde7e487c80ef3d7024dda1e96a57eaf
--- 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);
}
}