Use mem_neon.h helpers consistently in convolution paths

Tidy up the Neon convolution paths by using the load/store helper
functions in mem_neon.h consistently.

Also remove unnecessary parentheses when incrementing pointers.

Change-Id: I93a5b3c33b370906ca727df0998fa63fb0ceeea5
diff --git a/aom_dsp/arm/loopfilter_neon.c b/aom_dsp/arm/loopfilter_neon.c
index f3f86a2..b51413c 100644
--- a/aom_dsp/arm/loopfilter_neon.c
+++ b/aom_dsp/arm/loopfilter_neon.c
@@ -628,7 +628,7 @@
   // row1: x p6 p5 p4 p3 p2 p1 p0 | q0 q1 q2 q3 q4 q5 q6 y
   // row2: x p6 p5 p4 p3 p2 p1 p0 | q0 q1 q2 q3 q4 q5 q6 y
   // row3: x p6 p5 p4 p3 p2 p1 p0 | q0 q1 q2 q3 q4 q5 q6 y
-  load_u8_8x16(src - 8, stride, &row0, &row1, &row2, &row3);
+  load_u8_16x4(src - 8, stride, &row0, &row1, &row2, &row3);
 
   pxp3 = vget_low_u8(row0);
   p6p2 = vget_low_u8(row1);
diff --git a/aom_dsp/arm/mem_neon.h b/aom_dsp/arm/mem_neon.h
index 70e88c8..92ad769 100644
--- a/aom_dsp/arm/mem_neon.h
+++ b/aom_dsp/arm/mem_neon.h
@@ -73,8 +73,8 @@
 #endif  // __GNUC__ < 9
 #endif  // defined(__GNUC__) && !defined(__clang__)
 
-static INLINE void store_row2_u8_8x8(uint8_t *s, int p, const uint8x8_t s0,
-                                     const uint8x8_t s1) {
+static INLINE void store_u8_8x2(uint8_t *s, ptrdiff_t p, const uint8x8_t s0,
+                                const uint8x8_t s1) {
   vst1_u8(s, s0);
   s += p;
   vst1_u8(s, s1);
@@ -111,16 +111,24 @@
   *s7 = vld1_u8(s);
 }
 
-static INLINE void load_u8_8x16(const uint8_t *s, ptrdiff_t p,
-                                uint8x16_t *const s0, uint8x16_t *const s1,
-                                uint8x16_t *const s2, uint8x16_t *const s3) {
-  *s0 = vld1q_u8(s);
+static INLINE void load_u8_8x7(const uint8_t *s, ptrdiff_t p,
+                               uint8x8_t *const s0, uint8x8_t *const s1,
+                               uint8x8_t *const s2, uint8x8_t *const s3,
+                               uint8x8_t *const s4, uint8x8_t *const s5,
+                               uint8x8_t *const s6) {
+  *s0 = vld1_u8(s);
   s += p;
-  *s1 = vld1q_u8(s);
+  *s1 = vld1_u8(s);
   s += p;
-  *s2 = vld1q_u8(s);
+  *s2 = vld1_u8(s);
   s += p;
-  *s3 = vld1q_u8(s);
+  *s3 = vld1_u8(s);
+  s += p;
+  *s4 = vld1_u8(s);
+  s += p;
+  *s5 = vld1_u8(s);
+  s += p;
+  *s6 = vld1_u8(s);
 }
 
 static INLINE void load_u8_8x4(const uint8_t *s, const ptrdiff_t p,
@@ -161,6 +169,36 @@
   s += p;
 }
 
+static INLINE void load_s16_4x11(const int16_t *s, ptrdiff_t p,
+                                 int16x4_t *const s0, int16x4_t *const s1,
+                                 int16x4_t *const s2, int16x4_t *const s3,
+                                 int16x4_t *const s4, int16x4_t *const s5,
+                                 int16x4_t *const s6, int16x4_t *const s7,
+                                 int16x4_t *const s8, int16x4_t *const s9,
+                                 int16x4_t *const s10) {
+  *s0 = vld1_s16(s);
+  s += p;
+  *s1 = vld1_s16(s);
+  s += p;
+  *s2 = vld1_s16(s);
+  s += p;
+  *s3 = vld1_s16(s);
+  s += p;
+  *s4 = vld1_s16(s);
+  s += p;
+  *s5 = vld1_s16(s);
+  s += p;
+  *s6 = vld1_s16(s);
+  s += p;
+  *s7 = vld1_s16(s);
+  s += p;
+  *s8 = vld1_s16(s);
+  s += p;
+  *s9 = vld1_s16(s);
+  s += p;
+  *s10 = vld1_s16(s);
+}
+
 static INLINE void load_s16_4x8(const int16_t *s, ptrdiff_t p,
                                 int16x4_t *const s0, int16x4_t *const s1,
                                 int16x4_t *const s2, int16x4_t *const s3,
@@ -183,6 +221,41 @@
   *s7 = vld1_s16(s);
 }
 
+static INLINE void load_s16_4x7(const int16_t *s, ptrdiff_t p,
+                                int16x4_t *const s0, int16x4_t *const s1,
+                                int16x4_t *const s2, int16x4_t *const s3,
+                                int16x4_t *const s4, int16x4_t *const s5,
+                                int16x4_t *const s6) {
+  *s0 = vld1_s16(s);
+  s += p;
+  *s1 = vld1_s16(s);
+  s += p;
+  *s2 = vld1_s16(s);
+  s += p;
+  *s3 = vld1_s16(s);
+  s += p;
+  *s4 = vld1_s16(s);
+  s += p;
+  *s5 = vld1_s16(s);
+  s += p;
+  *s6 = vld1_s16(s);
+}
+
+static INLINE void load_s16_4x5(const int16_t *s, ptrdiff_t p,
+                                int16x4_t *const s0, int16x4_t *const s1,
+                                int16x4_t *const s2, int16x4_t *const s3,
+                                int16x4_t *const s4) {
+  *s0 = vld1_s16(s);
+  s += p;
+  *s1 = vld1_s16(s);
+  s += p;
+  *s2 = vld1_s16(s);
+  s += p;
+  *s3 = vld1_s16(s);
+  s += p;
+  *s4 = vld1_s16(s);
+}
+
 static INLINE void load_s16_4x4(const int16_t *s, ptrdiff_t p,
                                 int16x4_t *const s0, int16x4_t *const s1,
                                 int16x4_t *const s2, int16x4_t *const s3) {
@@ -197,6 +270,11 @@
 
 /* These intrinsics require immediate values, so we must use #defines
    to enforce that. */
+#define store_u8_2x1(s, s0, lane)                                  \
+  do {                                                             \
+    vst1_lane_u16((uint16_t *)(s), vreinterpret_u16_u8(s0), lane); \
+  } while (0)
+
 #define store_u8_4x1(s, s0, lane)                                  \
   do {                                                             \
     vst1_lane_u32((uint32_t *)(s), vreinterpret_u32_u8(s0), lane); \
@@ -328,6 +406,13 @@
   vst1_s16(s, s3);
 }
 
+/* These intrinsics require immediate values, so we must use #defines
+   to enforce that. */
+#define store_s16_2x1(s, s0, lane)                                 \
+  do {                                                             \
+    vst1_lane_s32((int32_t *)(s), vreinterpret_s32_s16(s0), lane); \
+  } while (0)
+
 static INLINE void store_s16_8x4(int16_t *s, ptrdiff_t dst_stride,
                                  const int16x8_t s0, const int16x8_t s1,
                                  const int16x8_t s2, const int16x8_t s3) {
@@ -340,6 +425,36 @@
   vst1q_s16(s, s3);
 }
 
+static INLINE void load_s16_8x11(const int16_t *s, ptrdiff_t p,
+                                 int16x8_t *const s0, int16x8_t *const s1,
+                                 int16x8_t *const s2, int16x8_t *const s3,
+                                 int16x8_t *const s4, int16x8_t *const s5,
+                                 int16x8_t *const s6, int16x8_t *const s7,
+                                 int16x8_t *const s8, int16x8_t *const s9,
+                                 int16x8_t *const s10) {
+  *s0 = vld1q_s16(s);
+  s += p;
+  *s1 = vld1q_s16(s);
+  s += p;
+  *s2 = vld1q_s16(s);
+  s += p;
+  *s3 = vld1q_s16(s);
+  s += p;
+  *s4 = vld1q_s16(s);
+  s += p;
+  *s5 = vld1q_s16(s);
+  s += p;
+  *s6 = vld1q_s16(s);
+  s += p;
+  *s7 = vld1q_s16(s);
+  s += p;
+  *s8 = vld1q_s16(s);
+  s += p;
+  *s9 = vld1q_s16(s);
+  s += p;
+  *s10 = vld1q_s16(s);
+}
+
 static INLINE void load_s16_8x8(const int16_t *s, ptrdiff_t p,
                                 int16x8_t *const s0, int16x8_t *const s1,
                                 int16x8_t *const s2, int16x8_t *const s3,
@@ -362,6 +477,41 @@
   *s7 = vld1q_s16(s);
 }
 
+static INLINE void load_s16_8x7(const int16_t *s, ptrdiff_t p,
+                                int16x8_t *const s0, int16x8_t *const s1,
+                                int16x8_t *const s2, int16x8_t *const s3,
+                                int16x8_t *const s4, int16x8_t *const s5,
+                                int16x8_t *const s6) {
+  *s0 = vld1q_s16(s);
+  s += p;
+  *s1 = vld1q_s16(s);
+  s += p;
+  *s2 = vld1q_s16(s);
+  s += p;
+  *s3 = vld1q_s16(s);
+  s += p;
+  *s4 = vld1q_s16(s);
+  s += p;
+  *s5 = vld1q_s16(s);
+  s += p;
+  *s6 = vld1q_s16(s);
+}
+
+static INLINE void load_s16_8x5(const int16_t *s, ptrdiff_t p,
+                                int16x8_t *const s0, int16x8_t *const s1,
+                                int16x8_t *const s2, int16x8_t *const s3,
+                                int16x8_t *const s4) {
+  *s0 = vld1q_s16(s);
+  s += p;
+  *s1 = vld1q_s16(s);
+  s += p;
+  *s2 = vld1q_s16(s);
+  s += p;
+  *s3 = vld1q_s16(s);
+  s += p;
+  *s4 = vld1q_s16(s);
+}
+
 static INLINE void load_s16_8x4(const int16_t *s, ptrdiff_t p,
                                 int16x8_t *const s0, int16x8_t *const s1,
                                 int16x8_t *const s2, int16x8_t *const s3) {
diff --git a/av1/common/arm/convolve_neon.c b/av1/common/arm/convolve_neon.c
index 012b3f7..af9312e 100644
--- a/av1/common/arm/convolve_neon.c
+++ b/av1/common/arm/convolve_neon.c
@@ -280,10 +280,7 @@
     uint8x8_t d01, d23;
 
     do {
-      s0 = vld1q_u8(src + 0 * src_stride);
-      s1 = vld1q_u8(src + 1 * src_stride);
-      s2 = vld1q_u8(src + 2 * src_stride);
-      s3 = vld1q_u8(src + 3 * src_stride);
+      load_u8_16x4(src, src_stride, &s0, &s1, &s2, &s3);
 
       t0 = convolve8_4_usdot(s0, x_filter, permute_tbl, vdupq_n_s32(0));
       t1 = convolve8_4_usdot(s1, x_filter, permute_tbl, vdupq_n_s32(0));
@@ -303,26 +300,18 @@
       d23 = vqmovun_s16(t23);
 
       if (w == 2) {
-        vst1_lane_u16((uint16_t *)(dst + 0 * dst_stride),
-                      vreinterpret_u16_u8(d01), 0);
-        vst1_lane_u16((uint16_t *)(dst + 1 * dst_stride),
-                      vreinterpret_u16_u8(d01), 2);
+        store_u8_2x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_2x1(dst + 1 * dst_stride, d01, 2);
         if (h != 2) {
-          vst1_lane_u16((uint16_t *)(dst + 2 * dst_stride),
-                        vreinterpret_u16_u8(d23), 0);
-          vst1_lane_u16((uint16_t *)(dst + 3 * dst_stride),
-                        vreinterpret_u16_u8(d23), 2);
+          store_u8_2x1(dst + 2 * dst_stride, d23, 0);
+          store_u8_2x1(dst + 3 * dst_stride, d23, 2);
         }
       } else {
-        vst1_lane_u32((uint32_t *)(dst + 0 * dst_stride),
-                      vreinterpret_u32_u8(d01), 0);
-        vst1_lane_u32((uint32_t *)(dst + 1 * dst_stride),
-                      vreinterpret_u32_u8(d01), 1);
+        store_u8_4x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_4x1(dst + 1 * dst_stride, d01, 1);
         if (h != 2) {
-          vst1_lane_u32((uint32_t *)(dst + 2 * dst_stride),
-                        vreinterpret_u32_u8(d23), 0);
-          vst1_lane_u32((uint32_t *)(dst + 3 * dst_stride),
-                        vreinterpret_u32_u8(d23), 1);
+          store_u8_4x1(dst + 2 * dst_stride, d23, 0);
+          store_u8_4x1(dst + 3 * dst_stride, d23, 1);
         }
       }
 
@@ -343,10 +332,7 @@
       uint8_t *d = dst;
 
       do {
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         t0 = convolve8_8_usdot(s0, x_filter, permute_tbl, vdupq_n_s32(0),
                                shift_round_0);
@@ -428,10 +414,7 @@
     uint8x8_t d01, d23;
 
     do {
-      s0 = vld1q_u8(src + 0 * src_stride);
-      s1 = vld1q_u8(src + 1 * src_stride);
-      s2 = vld1q_u8(src + 2 * src_stride);
-      s3 = vld1q_u8(src + 3 * src_stride);
+      load_u8_16x4(src, src_stride, &s0, &s1, &s2, &s3);
 
       t0 = convolve8_4_sdot(s0, x_filter, correction, range_limit, permute_tbl);
       t1 = convolve8_4_sdot(s1, x_filter, correction, range_limit, permute_tbl);
@@ -451,26 +434,18 @@
       d23 = vqmovun_s16(t23);
 
       if (w == 2) {
-        vst1_lane_u16((uint16_t *)(dst + 0 * dst_stride),
-                      vreinterpret_u16_u8(d01), 0);
-        vst1_lane_u16((uint16_t *)(dst + 1 * dst_stride),
-                      vreinterpret_u16_u8(d01), 2);
+        store_u8_2x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_2x1(dst + 1 * dst_stride, d01, 2);
         if (h != 2) {
-          vst1_lane_u16((uint16_t *)(dst + 2 * dst_stride),
-                        vreinterpret_u16_u8(d23), 0);
-          vst1_lane_u16((uint16_t *)(dst + 3 * dst_stride),
-                        vreinterpret_u16_u8(d23), 2);
+          store_u8_2x1(dst + 2 * dst_stride, d23, 0);
+          store_u8_2x1(dst + 3 * dst_stride, d23, 2);
         }
       } else {
-        vst1_lane_u32((uint32_t *)(dst + 0 * dst_stride),
-                      vreinterpret_u32_u8(d01), 0);
-        vst1_lane_u32((uint32_t *)(dst + 1 * dst_stride),
-                      vreinterpret_u32_u8(d01), 1);
+        store_u8_4x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_4x1(dst + 1 * dst_stride, d01, 1);
         if (h != 2) {
-          vst1_lane_u32((uint32_t *)(dst + 2 * dst_stride),
-                        vreinterpret_u32_u8(d23), 0);
-          vst1_lane_u32((uint32_t *)(dst + 3 * dst_stride),
-                        vreinterpret_u32_u8(d23), 1);
+          store_u8_4x1(dst + 2 * dst_stride, d23, 0);
+          store_u8_4x1(dst + 3 * dst_stride, d23, 1);
         }
       }
 
@@ -491,10 +466,7 @@
       uint8_t *d = dst;
 
       do {
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         t0 = convolve8_8_sdot(s0, x_filter, correction, range_limit,
                               permute_tbl, shift_round_0);
@@ -628,11 +600,8 @@
       s10 = vget_low_s16(vreinterpretq_s16_u16(vmovl_u8(t3)));
 
       d0 = convolve8_4x4(s0, s1, s2, s3, s4, s5, s6, s7, x_filter);
-
       d1 = convolve8_4x4(s1, s2, s3, s4, s5, s6, s7, s8, x_filter);
-
       d2 = convolve8_4x4(s2, s3, s4, s5, s6, s7, s8, s9, x_filter);
-
       d3 = convolve8_4x4(s3, s4, s5, s6, s7, s8, s9, s10, x_filter);
 
       d01_temp = vqrshlq_s16(vcombine_s16(d0, d1), shift_round_0);
@@ -646,24 +615,16 @@
 
       transpose_u8_4x4(&d01, &d23);
 
-      if (w != 2) {
-        vst1_lane_u32((uint32_t *)(dst + 0 * dst_stride),  // 00 01 02 03
-                      vreinterpret_u32_u8(d01), 0);
-        vst1_lane_u32((uint32_t *)(dst + 1 * dst_stride),  // 10 11 12 13
-                      vreinterpret_u32_u8(d23), 0);
-        vst1_lane_u32((uint32_t *)(dst + 2 * dst_stride),  // 20 21 22 23
-                      vreinterpret_u32_u8(d01), 1);
-        vst1_lane_u32((uint32_t *)(dst + 3 * dst_stride),  // 30 31 32 33
-                      vreinterpret_u32_u8(d23), 1);
+      if (w == 2) {
+        store_u8_2x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_2x1(dst + 1 * dst_stride, d23, 0);
+        store_u8_2x1(dst + 2 * dst_stride, d01, 2);
+        store_u8_2x1(dst + 3 * dst_stride, d23, 2);
       } else {
-        vst1_lane_u16((uint16_t *)(dst + 0 * dst_stride),  // 00 01
-                      vreinterpret_u16_u8(d01), 0);
-        vst1_lane_u16((uint16_t *)(dst + 1 * dst_stride),  // 10 11
-                      vreinterpret_u16_u8(d23), 0);
-        vst1_lane_u16((uint16_t *)(dst + 2 * dst_stride),  // 20 21
-                      vreinterpret_u16_u8(d01), 2);
-        vst1_lane_u16((uint16_t *)(dst + 3 * dst_stride),  // 30 31
-                      vreinterpret_u16_u8(d23), 2);
+        store_u8_4x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_4x1(dst + 1 * dst_stride, d23, 0);
+        store_u8_4x1(dst + 2 * dst_stride, d01, 1);
+        store_u8_4x1(dst + 3 * dst_stride, d23, 1);
       }
 
       s0 = s4;
@@ -739,71 +700,31 @@
 
         transpose_u8_8x4(&t0, &t1, &t2, &t3);
 
-        if ((w == 4) && (h > 4)) {
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t0),
-                        0);  // 00 01 02 03
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t1),
-                        0);  // 10 11 12 13
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t2),
-                        0);  // 20 21 22 23
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t3),
-                        0);  // 30 31 32 33
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t0),
-                        1);  // 40 41 42 43
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t1),
-                        1);  // 50 51 52 53
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t2),
-                        1);  // 60 61 62 63
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t3),
-                        1);  // 70 71 72 73
-          dst += dst_stride;
-        } else if ((w == 4) && (h == 2)) {
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t0),
-                        0);  // 00 01 02 03
-          dst += dst_stride;
-          vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t1),
-                        0);  // 10 11 12 13
-          dst += dst_stride;
-        } else if ((w == 2) && (h > 4)) {
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t0),
-                        0);  // 00 01
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t1),
-                        0);  // 10 11
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t2),
-                        0);  // 20 21
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t3),
-                        0);  // 30 31
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t0),
-                        2);  // 40 41
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t1),
-                        2);  // 50 51
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t2),
-                        2);  // 60 61
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t3),
-                        2);  // 70 71
-          dst += dst_stride;
-        } else if ((w == 2) && (h == 2)) {
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t0),
-                        0);  // 00 01
-          dst += dst_stride;
-          vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t1),
-                        0);  // 10 11
-          dst += dst_stride;
+        if (w == 4) {
+          store_u8_4x1(dst + 0 * dst_stride, t0, 0);
+          store_u8_4x1(dst + 1 * dst_stride, t1, 0);
+          if (h > 4) {
+            store_u8_4x1(dst + 2 * dst_stride, t2, 0);
+            store_u8_4x1(dst + 3 * dst_stride, t3, 0);
+            store_u8_4x1(dst + 4 * dst_stride, t0, 1);
+            store_u8_4x1(dst + 5 * dst_stride, t1, 1);
+            store_u8_4x1(dst + 6 * dst_stride, t2, 1);
+            store_u8_4x1(dst + 7 * dst_stride, t3, 1);
+          }
+        } else if (w == 2) {
+          store_u8_2x1(dst + 0 * dst_stride, t0, 0);
+          store_u8_2x1(dst + 1 * dst_stride, t1, 0);
+          if (h > 4) {
+            store_u8_2x1(dst + 2 * dst_stride, t2, 0);
+            store_u8_2x1(dst + 3 * dst_stride, t3, 0);
+            store_u8_2x1(dst + 4 * dst_stride, t0, 2);
+            store_u8_2x1(dst + 5 * dst_stride, t1, 2);
+            store_u8_2x1(dst + 6 * dst_stride, t2, 2);
+            store_u8_2x1(dst + 7 * dst_stride, t3, 2);
+          }
         }
+
+        dst += 8 * dst_stride;
         h -= 8;
       } while (h > 0);
 #else
@@ -834,11 +755,10 @@
                                shift_round_0_low, shift_by_bits_low);
 
       if (w == 4) {
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(t0),
-                      0);  // 00 01 02 03
+        store_u8_4x1(dst, t0, 0);
         dst += dst_stride;
       } else if (w == 2) {
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(t0), 0);  // 00 01
+        store_u8_2x1(dst, t0, 0);
         dst += dst_stride;
       }
       h -= 1;
@@ -894,34 +814,29 @@
 
           t0 = convolve8_horiz_8x8(s0, s1, s2, s3, s4, s5, s6, s7, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t1 = convolve8_horiz_8x8(s1, s2, s3, s4, s5, s6, s7, s8, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t2 = convolve8_horiz_8x8(s2, s3, s4, s5, s6, s7, s8, s9, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t3 = convolve8_horiz_8x8(s3, s4, s5, s6, s7, s8, s9, s10, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t4 = convolve8_horiz_8x8(s4, s5, s6, s7, s8, s9, s10, s11, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t5 = convolve8_horiz_8x8(s5, s6, s7, s8, s9, s10, s11, s12, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t6 = convolve8_horiz_8x8(s6, s7, s8, s9, s10, s11, s12, s13, x_filter,
                                    shift_round_0, shift_by_bits);
-
           t7 = convolve8_horiz_8x8(s7, s8, s9, s10, s11, s12, s13, s14,
                                    x_filter, shift_round_0, shift_by_bits);
 
           transpose_u8_8x8(&t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7);
+
           if (h != 2) {
             store_u8_8x8(d, dst_stride, t0, t1, t2, t3, t4, t5, t6, t7);
           } else {
-            store_row2_u8_8x8(d, dst_stride, t0, t1);
+            store_u8_8x2(d, dst_stride, t0, t1);
           }
+
           s0 = s8;
           s1 = s9;
           s2 = s10;
@@ -1048,41 +963,23 @@
 
       d01 = vqrshrun_n_s16(vcombine_s16(d0, d1), FILTER_BITS - 1);
       d23 = vqrshrun_n_s16(vcombine_s16(d2, d3), FILTER_BITS - 1);
-      if ((w == 4) && (h != 2)) {
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d01),
-                      0);  // 00 01 02 03
-        dst += dst_stride;
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d01),
-                      1);  // 10 11 12 13
-        dst += dst_stride;
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d23),
-                      0);  // 20 21 22 23
-        dst += dst_stride;
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d23),
-                      1);  // 30 31 32 33
-        dst += dst_stride;
-      } else if ((w == 4) && (h == 2)) {
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d01),
-                      0);  // 00 01 02 03
-        dst += dst_stride;
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d01),
-                      1);  // 10 11 12 13
-        dst += dst_stride;
-      } else if ((w == 2) && (h != 2)) {
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d01), 0);  // 00 01
-        dst += dst_stride;
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d01), 2);  // 10 11
-        dst += dst_stride;
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d23), 0);  // 20 21
-        dst += dst_stride;
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d23), 2);  // 30 31
-        dst += dst_stride;
-      } else if ((w == 2) && (h == 2)) {
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d01), 0);  // 00 01
-        dst += dst_stride;
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d01), 2);  // 10 11
-        dst += dst_stride;
+
+      if (w == 2) {
+        store_u8_2x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_2x1(dst + 1 * dst_stride, d01, 2);
+        if (h != 2) {
+          store_u8_2x1(dst + 2 * dst_stride, d23, 0);
+          store_u8_2x1(dst + 3 * dst_stride, d23, 2);
+        }
+      } else {
+        store_u8_4x1(dst + 0 * dst_stride, d01, 0);
+        store_u8_4x1(dst + 1 * dst_stride, d01, 1);
+        if (h != 2) {
+          store_u8_4x1(dst + 2 * dst_stride, d23, 0);
+          store_u8_4x1(dst + 3 * dst_stride, d23, 1);
+        }
       }
+
       s0 = s4;
       s1 = s5;
       s2 = s6;
@@ -1090,6 +987,7 @@
       s4 = s8;
       s5 = s9;
       s6 = s10;
+      dst += 4 * dst_stride;
       h -= 4;
 #else
       __builtin_prefetch(dst + 0 * dst_stride);
@@ -1100,11 +998,9 @@
       d01 = vqrshrun_n_s16(vcombine_s16(d0, d0), FILTER_BITS - 1);
 
       if (w == 4) {
-        vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d01), 0);
-        dst += dst_stride;
+        store_u8_4x1(dst, d01, 0);
       } else if (w == 2) {
-        vst1_lane_u16((uint16_t *)dst, vreinterpret_u16_u8(d01), 0);
-        dst += dst_stride;
+        store_u8_2x1(dst, d01, 0);
       }
       s0 = s1;
       s1 = s2;
@@ -1113,6 +1009,7 @@
       s4 = s5;
       s5 = s6;
       s6 = s7;
+      dst += dst_stride;
       h -= 1;
 #endif
     } while (h > 0);
@@ -1175,20 +1072,11 @@
         t1 = convolve8_vert_8x4(s1, s2, s3, s4, s5, s6, s7, s8, y_filter);
         t2 = convolve8_vert_8x4(s2, s3, s4, s5, s6, s7, s8, s9, y_filter);
         t3 = convolve8_vert_8x4(s3, s4, s5, s6, s7, s8, s9, s10, y_filter);
+
         if (h != 2) {
-          vst1_u8(d, t0);
-          d += dst_stride;
-          vst1_u8(d, t1);
-          d += dst_stride;
-          vst1_u8(d, t2);
-          d += dst_stride;
-          vst1_u8(d, t3);
-          d += dst_stride;
+          store_u8_8x4(d, dst_stride, t0, t1, t2, t3);
         } else {
-          vst1_u8(d, t0);
-          d += dst_stride;
-          vst1_u8(d, t1);
-          d += dst_stride;
+          store_u8_8x2(d, dst_stride, t0, t1);
         }
         s0 = s4;
         s1 = s5;
@@ -1197,6 +1085,7 @@
         s4 = s8;
         s5 = s9;
         s6 = s10;
+        d += 4 * dst_stride;
         height -= 4;
 #else
         __builtin_prefetch(d);
@@ -1309,8 +1198,7 @@
         uint16x8_t t0 = vaddw_u8(vreinterpretq_u16_s16(horiz_const), s0);
         int16x8_t d0 = vqrshlq_s16(vreinterpretq_s16_u16(t0), shift_round_0);
         if (w == 2) {
-          vst1q_lane_s32((int32_t *)(dst_ptr + i * dst_stride),
-                         vreinterpretq_s32_s16(d0), 0);
+          store_s16_2x1(dst_ptr + i * dst_stride, vget_low_s16(d0), 0);
         } else if (w == 4) {
           vst1_s16(dst_ptr + i * dst_stride, vget_low_s16(d0));
         } else {
@@ -1340,10 +1228,7 @@
           uint8x16_t s0, s1, s2, s3;
           int16x4_t d0, d1, d2, d3;
 
-          s0 = vld1q_u8(s + 0 * src_stride);
-          s1 = vld1q_u8(s + 1 * src_stride);
-          s2 = vld1q_u8(s + 2 * src_stride);
-          s3 = vld1q_u8(s + 3 * src_stride);
+          load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
           d0 = convolve12_4_usdot(s0, x_filter, permute_tbl, horiz_const,
                                   shift_round_0);
@@ -1355,19 +1240,12 @@
                                   shift_round_0);
 
           if (w == 2) {
-            vst1_lane_s32((int32_t *)(d + 0 * dst_stride),
-                          vreinterpret_s32_s16(d0), 0);
-            vst1_lane_s32((int32_t *)(d + 1 * dst_stride),
-                          vreinterpret_s32_s16(d1), 0);
-            vst1_lane_s32((int32_t *)(d + 2 * dst_stride),
-                          vreinterpret_s32_s16(d2), 0);
-            vst1_lane_s32((int32_t *)(d + 3 * dst_stride),
-                          vreinterpret_s32_s16(d3), 0);
+            store_s16_2x1(d + 0 * dst_stride, d0, 0);
+            store_s16_2x1(d + 1 * dst_stride, d1, 0);
+            store_s16_2x1(d + 2 * dst_stride, d2, 0);
+            store_s16_2x1(d + 3 * dst_stride, d3, 0);
           } else {
-            vst1_s16(d + 0 * dst_stride, d0);
-            vst1_s16(d + 1 * dst_stride, d1);
-            vst1_s16(d + 2 * dst_stride, d2);
-            vst1_s16(d + 3 * dst_stride, d3);
+            store_s16_4x4(d, dst_stride, d0, d1, d2, d3);
           }
 
           s += 4;
@@ -1395,7 +1273,7 @@
                                   shift_round_0);
 
           if (w == 2) {
-            vst1_lane_s32((int32_t *)d, vreinterpret_s32_s16(d0), 0);
+            store_s16_2x1(d, d0, 0);
           } else {
             vst1_s16(d, d0);
           }
@@ -1418,14 +1296,8 @@
           uint8x16_t s0[2], s1[2], s2[2], s3[2];
           int16x8_t d0, d1, d2, d3;
 
-          s0[0] = vld1q_u8(s + 0 * src_stride);
-          s1[0] = vld1q_u8(s + 1 * src_stride);
-          s2[0] = vld1q_u8(s + 2 * src_stride);
-          s3[0] = vld1q_u8(s + 3 * src_stride);
-          s0[1] = vld1q_u8(s + 0 * src_stride + 4);
-          s1[1] = vld1q_u8(s + 1 * src_stride + 4);
-          s2[1] = vld1q_u8(s + 2 * src_stride + 4);
-          s3[1] = vld1q_u8(s + 3 * src_stride + 4);
+          load_u8_16x4(s, src_stride, &s0[0], &s1[0], &s2[0], &s3[0]);
+          load_u8_16x4(s + 4, src_stride, &s0[1], &s1[1], &s2[1], &s3[1]);
 
           d0 = convolve12_8_usdot(s0[0], s0[1], x_filter, permute_tbl,
                                   horiz_const, shift_round_0);
@@ -1436,10 +1308,7 @@
           d3 = convolve12_8_usdot(s3[0], s3[1], x_filter, permute_tbl,
                                   horiz_const, shift_round_0);
 
-          vst1q_s16(d + 0 * dst_stride, d0);
-          vst1q_s16(d + 1 * dst_stride, d1);
-          vst1q_s16(d + 2 * dst_stride, d2);
-          vst1q_s16(d + 3 * dst_stride, d3);
+          store_s16_8x4(d, dst_stride, d0, d1, d2, d3);
 
           s += 8;
           d += 8;
@@ -1573,8 +1442,7 @@
         uint16x8_t t0 = vaddw_u8(vreinterpretq_u16_s16(horiz_const), s0);
         int16x8_t d0 = vqrshlq_s16(vreinterpretq_s16_u16(t0), shift_round_0);
         if (w == 2) {
-          vst1q_lane_s32((int32_t *)(dst_ptr + i * dst_stride),
-                         vreinterpretq_s32_s16(d0), 0);
+          store_s16_2x1(dst_ptr + i * dst_stride, vget_low_s16(d0), 0);
         } else if (w == 4) {
           vst1_s16(dst_ptr + i * dst_stride, vget_low_s16(d0));
         } else {
@@ -1612,10 +1480,7 @@
           uint8x16_t s0, s1, s2, s3;
           int16x4_t d0, d1, d2, d3;
 
-          s0 = vld1q_u8(s + 0 * src_stride);
-          s1 = vld1q_u8(s + 1 * src_stride);
-          s2 = vld1q_u8(s + 2 * src_stride);
-          s3 = vld1q_u8(s + 3 * src_stride);
+          load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
           d0 = convolve12_4_sdot(s0, x_filter, correction, range_limit,
                                  permute_tbl, shift_round_0);
@@ -1627,19 +1492,12 @@
                                  permute_tbl, shift_round_0);
 
           if (w == 2) {
-            vst1_lane_s32((int32_t *)(d + 0 * dst_stride),
-                          vreinterpret_s32_s16(d0), 0);
-            vst1_lane_s32((int32_t *)(d + 1 * dst_stride),
-                          vreinterpret_s32_s16(d1), 0);
-            vst1_lane_s32((int32_t *)(d + 2 * dst_stride),
-                          vreinterpret_s32_s16(d2), 0);
-            vst1_lane_s32((int32_t *)(d + 3 * dst_stride),
-                          vreinterpret_s32_s16(d3), 0);
+            store_s16_2x1(d + 0 * dst_stride, d0, 0);
+            store_s16_2x1(d + 1 * dst_stride, d1, 0);
+            store_s16_2x1(d + 2 * dst_stride, d2, 0);
+            store_s16_2x1(d + 3 * dst_stride, d3, 0);
           } else {
-            vst1_s16(d + 0 * dst_stride, d0);
-            vst1_s16(d + 1 * dst_stride, d1);
-            vst1_s16(d + 2 * dst_stride, d2);
-            vst1_s16(d + 3 * dst_stride, d3);
+            store_s16_4x4(d, dst_stride, d0, d1, d2, d3);
           }
 
           s += 4;
@@ -1667,7 +1525,7 @@
                                  permute_tbl, shift_round_0);
 
           if (w == 2) {
-            vst1_lane_s32((int32_t *)d, vreinterpret_s32_s16(d0), 0);
+            store_s16_2x1(d, d0, 0);
           } else {
             vst1_s16(d, d0);
           }
@@ -1690,14 +1548,8 @@
           uint8x16_t s0[2], s1[2], s2[2], s3[2];
           int16x8_t d0, d1, d2, d3;
 
-          s0[0] = vld1q_u8(s + 0 * src_stride);
-          s1[0] = vld1q_u8(s + 1 * src_stride);
-          s2[0] = vld1q_u8(s + 2 * src_stride);
-          s3[0] = vld1q_u8(s + 3 * src_stride);
-          s0[1] = vld1q_u8(s + 0 * src_stride + 4);
-          s1[1] = vld1q_u8(s + 1 * src_stride + 4);
-          s2[1] = vld1q_u8(s + 2 * src_stride + 4);
-          s3[1] = vld1q_u8(s + 3 * src_stride + 4);
+          load_u8_16x4(s, src_stride, &s0[0], &s1[0], &s2[0], &s3[0]);
+          load_u8_16x4(s + 4, src_stride, &s0[1], &s1[1], &s2[1], &s3[1]);
 
           d0 = convolve12_8_sdot(s0[0], s0[1], x_filter, correction,
                                  range_limit, permute_tbl, shift_round_0);
@@ -1708,10 +1560,7 @@
           d3 = convolve12_8_sdot(s3[0], s3[1], x_filter, correction,
                                  range_limit, permute_tbl, shift_round_0);
 
-          vst1q_s16(d + 0 * dst_stride, d0);
-          vst1q_s16(d + 1 * dst_stride, d1);
-          vst1q_s16(d + 2 * dst_stride, d2);
-          vst1q_s16(d + 3 * dst_stride, d3);
+          store_s16_8x4(d, dst_stride, d0, d1, d2, d3);
 
           s += 8;
           d += 8;
@@ -1825,7 +1674,7 @@
                                     horiz_const, shift_round_0);
 
       if (w == 2) {
-        vst1_lane_s32((int32_t *)d, vreinterpret_s32_s16(d0), 0);
+        store_s16_2x1(d, d0, 0);
       } else {
         vst1_s16(d, d0);
       }
@@ -1906,19 +1755,12 @@
       transpose_s16_4x4d(&d0, &d1, &d2, &d3);
 
       if (w == 2) {
-        vst1_lane_s32((int32_t *)(d + 0 * dst_stride), vreinterpret_s32_s16(d0),
-                      0);
-        vst1_lane_s32((int32_t *)(d + 1 * dst_stride), vreinterpret_s32_s16(d1),
-                      0);
-        vst1_lane_s32((int32_t *)(d + 2 * dst_stride), vreinterpret_s32_s16(d2),
-                      0);
-        vst1_lane_s32((int32_t *)(d + 3 * dst_stride), vreinterpret_s32_s16(d3),
-                      0);
+        store_s16_2x1(d + 0 * dst_stride, d0, 0);
+        store_s16_2x1(d + 1 * dst_stride, d1, 0);
+        store_s16_2x1(d + 2 * dst_stride, d2, 0);
+        store_s16_2x1(d + 3 * dst_stride, d3, 0);
       } else {
-        vst1_s16((d + 0 * dst_stride), d0);
-        vst1_s16((d + 1 * dst_stride), d1);
-        vst1_s16((d + 2 * dst_stride), d2);
-        vst1_s16((d + 3 * dst_stride), d3);
+        store_s16_4x4(d, dst_stride, d0, d1, d2, d3);
       }
 
       s0 = s4;
@@ -1978,14 +1820,12 @@
     int16x8_t dd01, dd23;
     uint8x8_t d01, d23;
 
-    load_s16_4x8(src_ptr, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7);
-    src_ptr += (8 * src_stride);
-    load_s16_4x4(src_ptr, src_stride, &s8, &s9, &s10, &s11);
-    src_ptr += (3 * src_stride);
+    load_s16_4x11(src_ptr, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7,
+                  &s8, &s9, &s10);
+    src_ptr += 11 * src_stride;
 
     do {
       load_s16_4x4(src_ptr, src_stride, &s11, &s12, &s13, &s14);
-      src_ptr += 4 * src_stride;
 
       d0 = convolve12_vert_4x4_s32(
           s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, y_filter_0_7,
@@ -2007,26 +1847,18 @@
       d23 = vqmovun_s16(dd23);
 
       if (w == 2) {
-        vst1_lane_u16((uint16_t *)dst_ptr, vreinterpret_u16_u8(d01), 0);
-        dst_ptr += dst_stride;
-        vst1_lane_u16((uint16_t *)dst_ptr, vreinterpret_u16_u8(d01), 2);
-        dst_ptr += dst_stride;
+        store_u8_2x1(dst_ptr + 0 * dst_stride, d01, 0);
+        store_u8_2x1(dst_ptr + 1 * dst_stride, d01, 2);
         if (h != 2) {
-          vst1_lane_u16((uint16_t *)dst_ptr, vreinterpret_u16_u8(d23), 0);
-          dst_ptr += dst_stride;
-          vst1_lane_u16((uint16_t *)dst_ptr, vreinterpret_u16_u8(d23), 2);
-          dst_ptr += dst_stride;
+          store_u8_2x1(dst_ptr + 2 * dst_stride, d23, 0);
+          store_u8_2x1(dst_ptr + 3 * dst_stride, d23, 2);
         }
       } else {
-        vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_u8(d01), 0);
-        dst_ptr += dst_stride;
-        vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_u8(d01), 1);
-        dst_ptr += dst_stride;
+        store_u8_4x1(dst_ptr + 0 * dst_stride, d01, 0);
+        store_u8_4x1(dst_ptr + 1 * dst_stride, d01, 1);
         if (h != 2) {
-          vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_u8(d23), 0);
-          dst_ptr += dst_stride;
-          vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_u8(d23), 1);
-          dst_ptr += dst_stride;
+          store_u8_4x1(dst_ptr + 2 * dst_stride, d23, 0);
+          store_u8_4x1(dst_ptr + 3 * dst_stride, d23, 1);
         }
       }
 
@@ -2041,6 +1873,8 @@
       s8 = s12;
       s9 = s13;
       s10 = s14;
+      src_ptr += 4 * src_stride;
+      dst_ptr += 4 * dst_stride;
       h -= 4;
     } while (h > 0);
 
@@ -2054,14 +1888,12 @@
 
       int height = h;
 
-      load_s16_8x8(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7);
-      s += (8 * src_stride);
-      load_s16_8x4(s, src_stride, &s8, &s9, &s10, &s11);
-      s += (3 * src_stride);
+      load_s16_8x11(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7, &s8,
+                    &s9, &s10);
+      s += 11 * src_stride;
 
       do {
         load_s16_8x4(s, src_stride, &s11, &s12, &s13, &s14);
-        s += 4 * src_stride;
 
         d0 = convolve12_vert_8x4_s32(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9,
                                      s10, s11, y_filter_0_7, y_filter_8_11,
@@ -2080,15 +1912,10 @@
                                      round_shift_vec, offset_const,
                                      sub_const_vec, vec_round_bits);
 
-        vst1_u8(d, d0);
-        d += dst_stride;
-        vst1_u8(d, d1);
-        d += dst_stride;
         if (h != 2) {
-          vst1_u8(d, d2);
-          d += dst_stride;
-          vst1_u8(d, d3);
-          d += dst_stride;
+          store_u8_8x4(d, dst_stride, d0, d1, d2, d3);
+        } else {
+          store_u8_8x2(d, dst_stride, d0, d1);
         }
 
         s0 = s4;
@@ -2102,6 +1929,8 @@
         s8 = s12;
         s9 = s13;
         s10 = s14;
+        s += 4 * src_stride;
+        d += 4 * dst_stride;
         height -= 4;
       } while (height > 0);
 
@@ -2142,7 +1971,7 @@
     do {
       assert(height >= 4);
 
-      load_u8_8x16(src_ptr, src_stride, &s0, &s1, &s2, &s3);
+      load_u8_16x4(src_ptr, src_stride, &s0, &s1, &s2, &s3);
 
       t0 = convolve8_4_usdot(s0, x_filter, permute_tbl, horiz_const);
       t1 = convolve8_4_usdot(s1, x_filter, permute_tbl, horiz_const);
@@ -2155,19 +1984,12 @@
       d3 = vqrshl_s16(vmovn_s32(t3), shift_round_0);
 
       if (w == 2) {
-        vst1_lane_u32((uint32_t *)(dst_ptr + 0 * dst_stride),
-                      vreinterpret_u32_s16(d0), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 1 * dst_stride),
-                      vreinterpret_u32_s16(d1), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 2 * dst_stride),
-                      vreinterpret_u32_s16(d2), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 3 * dst_stride),
-                      vreinterpret_u32_s16(d3), 0);
+        store_s16_2x1(dst_ptr + 0 * dst_stride, d0, 0);
+        store_s16_2x1(dst_ptr + 1 * dst_stride, d1, 0);
+        store_s16_2x1(dst_ptr + 2 * dst_stride, d2, 0);
+        store_s16_2x1(dst_ptr + 3 * dst_stride, d3, 0);
       } else {
-        vst1_s16(dst_ptr + 0 * dst_stride, d0);
-        vst1_s16(dst_ptr + 1 * dst_stride, d1);
-        vst1_s16(dst_ptr + 2 * dst_stride, d2);
-        vst1_s16(dst_ptr + 3 * dst_stride, d3);
+        store_s16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
       }
 
       src_ptr += 4 * src_stride;
@@ -2184,7 +2006,7 @@
         d0 = vqrshl_s16(vmovn_s32(t0), shift_round_0);
 
         if (w == 2) {
-          vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_s16(d0), 0);
+          store_s16_2x1(dst_ptr, d0, 0);
         } else {
           vst1_s16(dst_ptr, d0);
         }
@@ -2208,10 +2030,7 @@
       int width = w;
 
       do {
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         d0 = convolve8_8_usdot(s0, x_filter, permute_tbl, horiz_const,
                                shift_round_0);
@@ -2222,10 +2041,7 @@
         d3 = convolve8_8_usdot(s3, x_filter, permute_tbl, horiz_const,
                                shift_round_0);
 
-        vst1q_s16(d + 0 * dst_stride, d0);
-        vst1q_s16(d + 1 * dst_stride, d1);
-        vst1q_s16(d + 2 * dst_stride, d2);
-        vst1q_s16(d + 3 * dst_stride, d3);
+        store_s16_8x4(d, dst_stride, d0, d1, d2, d3);
 
         s += 8;
         d += 8;
@@ -2299,7 +2115,7 @@
     do {
       assert(height >= 4);
 
-      load_u8_8x16(src_ptr, src_stride, &s0, &s1, &s2, &s3);
+      load_u8_16x4(src_ptr, src_stride, &s0, &s1, &s2, &s3);
 
       t0 = convolve8_4_sdot(s0, x_filter, correction, range_limit, permute_tbl);
       t1 = convolve8_4_sdot(s1, x_filter, correction, range_limit, permute_tbl);
@@ -2312,19 +2128,12 @@
       d3 = vqrshl_s16(vmovn_s32(t3), shift_round_0);
 
       if (w == 2) {
-        vst1_lane_u32((uint32_t *)(dst_ptr + 0 * dst_stride),
-                      vreinterpret_u32_s16(d0), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 1 * dst_stride),
-                      vreinterpret_u32_s16(d1), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 2 * dst_stride),
-                      vreinterpret_u32_s16(d2), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 3 * dst_stride),
-                      vreinterpret_u32_s16(d3), 0);
+        store_s16_2x1(dst_ptr + 0 * dst_stride, d0, 0);
+        store_s16_2x1(dst_ptr + 1 * dst_stride, d1, 0);
+        store_s16_2x1(dst_ptr + 2 * dst_stride, d2, 0);
+        store_s16_2x1(dst_ptr + 3 * dst_stride, d3, 0);
       } else {
-        vst1_s16(dst_ptr + 0 * dst_stride, d0);
-        vst1_s16(dst_ptr + 1 * dst_stride, d1);
-        vst1_s16(dst_ptr + 2 * dst_stride, d2);
-        vst1_s16(dst_ptr + 3 * dst_stride, d3);
+        store_s16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
       }
 
       src_ptr += 4 * src_stride;
@@ -2342,7 +2151,7 @@
         d0 = vqrshl_s16(vmovn_s32(t0), shift_round_0);
 
         if (w == 2) {
-          vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_s16(d0), 0);
+          store_s16_2x1(dst_ptr, d0, 0);
         } else {
           vst1_s16(dst_ptr, d0);
         }
@@ -2366,10 +2175,7 @@
       int width = w;
 
       do {
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         d0 = convolve8_8_sdot(s0, x_filter, correction, range_limit,
                               permute_tbl, shift_round_0);
@@ -2380,10 +2186,7 @@
         d3 = convolve8_8_sdot(s3, x_filter, correction, range_limit,
                               permute_tbl, shift_round_0);
 
-        vst1q_s16(d + 0 * dst_stride, d0);
-        vst1q_s16(d + 1 * dst_stride, d1);
-        vst1q_s16(d + 2 * dst_stride, d2);
-        vst1q_s16(d + 3 * dst_stride, d3);
+        store_s16_8x4(d, dst_stride, d0, d1, d2, d3);
 
         s += 8;
         d += 8;
@@ -2504,7 +2307,7 @@
                                      horiz_const, shift_round_0);
 
     if (width == 2) {
-      vst1_lane_u32((uint32_t *)dst_ptr, vreinterpret_u32_s16(d0), 0);
+      store_s16_2x1(dst_ptr, d0, 0);
     } else {
       vst1_s16(dst_ptr, d0);
     }
@@ -2577,19 +2380,12 @@
       transpose_s16_4x4d(&d0, &d1, &d2, &d3);
 
       if (w == 2) {
-        vst1_lane_u32((uint32_t *)(dst_ptr + 0 * dst_stride),
-                      vreinterpret_u32_s16(d0), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 1 * dst_stride),
-                      vreinterpret_u32_s16(d1), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 2 * dst_stride),
-                      vreinterpret_u32_s16(d2), 0);
-        vst1_lane_u32((uint32_t *)(dst_ptr + 3 * dst_stride),
-                      vreinterpret_u32_s16(d3), 0);
+        store_s16_2x1(dst_ptr + 0 * dst_stride, d0, 0);
+        store_s16_2x1(dst_ptr + 1 * dst_stride, d1, 0);
+        store_s16_2x1(dst_ptr + 2 * dst_stride, d2, 0);
+        store_s16_2x1(dst_ptr + 3 * dst_stride, d3, 0);
       } else {
-        vst1_s16((dst_ptr + 0 * dst_stride), d0);
-        vst1_s16((dst_ptr + 1 * dst_stride), d1);
-        vst1_s16((dst_ptr + 2 * dst_stride), d2);
-        vst1_s16((dst_ptr + 3 * dst_stride), d3);
+        store_s16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
       }
 
       src_ptr += 4 * src_stride;
@@ -2809,13 +2605,12 @@
     int16_t *s = src_ptr;
     uint8_t *d = dst_ptr;
 
-    load_s16_4x8(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7);
-    s += (7 * src_stride);
+    load_s16_4x7(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6);
+    s += 7 * src_stride;
 
     do {
 #if defined(__aarch64__)
       load_s16_4x4(s, src_stride, &s7, &s8, &s9, &s10);
-      s += (4 * src_stride);
 
       d0 = convolve8_vert_4x4_s32(s0, s1, s2, s3, s4, s5, s6, s7, y_filter,
                                   round_shift_vec, offset_const, sub_const_vec);
@@ -2832,27 +2627,19 @@
       d01 = vqmovun_s16(dd0);
       d23 = vqmovun_s16(dd1);
 
-      if (w == 4) {
-        vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d01), 0);
-        d += dst_stride;
-        vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d01), 1);
-        d += dst_stride;
+      if (w == 2) {
+        store_u8_2x1(d + 0 * dst_stride, d01, 0);
+        store_u8_2x1(d + 1 * dst_stride, d01, 2);
         if (h != 2) {
-          vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d23), 0);
-          d += dst_stride;
-          vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d23), 1);
-          d += dst_stride;
+          store_u8_2x1(d + 2 * dst_stride, d23, 0);
+          store_u8_2x1(d + 3 * dst_stride, d23, 2);
         }
       } else {
-        vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d01), 0);
-        d += dst_stride;
-        vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d01), 2);
-        d += dst_stride;
+        store_u8_4x1(d + 0 * dst_stride, d01, 0);
+        store_u8_4x1(d + 1 * dst_stride, d01, 1);
         if (h != 2) {
-          vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d23), 0);
-          d += dst_stride;
-          vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d23), 2);
-          d += dst_stride;
+          store_u8_4x1(d + 2 * dst_stride, d23, 0);
+          store_u8_4x1(d + 3 * dst_stride, d23, 1);
         }
       }
 
@@ -2863,6 +2650,8 @@
       s4 = s8;
       s5 = s9;
       s6 = s10;
+      s += 4 * src_stride;
+      d += 4 * dst_stride;
       h -= 4;
 #else   // !defined(__aarch64__)
       s7 = vld1_s16(s);
@@ -2875,11 +2664,9 @@
       d01 = vqmovun_s16(dd0);
 
       if (w == 2) {
-        vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d01), 0);
-        d += dst_stride;
+        store_u8_2x1(d, d01, 0);
       } else {
-        vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d01), 0);
-        d += dst_stride;
+        store_u8_4x1(d, d01, 0);
       }
 
       s0 = s1;
@@ -2889,6 +2676,7 @@
       s4 = s5;
       s5 = s6;
       s6 = s7;
+      d += dst_stride;
       h--;
 #endif  // defined(__aarch64__)
     } while (h > 0);
@@ -2906,13 +2694,12 @@
       int16_t *s = src_ptr;
       uint8_t *d = dst_ptr;
 
-      load_s16_8x8(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7);
-      s += (7 * src_stride);
+      load_s16_8x7(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6);
+      s += 7 * src_stride;
 
       do {
 #if defined(__aarch64__)
         load_s16_8x4(s, src_stride, &s7, &s8, &s9, &s10);
-        s += (4 * src_stride);
 
         d0 = convolve8_vert_8x4_s32(s0, s1, s2, s3, s4, s5, s6, s7, y_filter,
                                     round_shift_vec, offset_const,
@@ -2926,16 +2713,10 @@
         d3 = convolve8_vert_8x4_s32(s3, s4, s5, s6, s7, s8, s9, s10, y_filter,
                                     round_shift_vec, offset_const,
                                     sub_const_vec, vec_round_bits);
-
-        vst1_u8(d, d0);
-        d += dst_stride;
-        vst1_u8(d, d1);
-        d += dst_stride;
         if (h != 2) {
-          vst1_u8(d, d2);
-          d += dst_stride;
-          vst1_u8(d, d3);
-          d += dst_stride;
+          store_u8_8x4(d, dst_stride, d0, d1, d2, d3);
+        } else {
+          store_u8_8x2(d, dst_stride, d0, d1);
         }
 
         s0 = s4;
@@ -2945,17 +2726,16 @@
         s4 = s8;
         s5 = s9;
         s6 = s10;
+        s += 4 * src_stride;
+        d += 4 * dst_stride;
         height -= 4;
 #else   // !defined(__aarch64__)
         s7 = vld1q_s16(s);
-        s += src_stride;
 
         d0 = convolve8_vert_8x4_s32(s0, s1, s2, s3, s4, s5, s6, s7, y_filter,
                                     round_shift_vec, offset_const,
                                     sub_const_vec, vec_round_bits);
-
         vst1_u8(d, d0);
-        d += dst_stride;
 
         s0 = s1;
         s1 = s2;
@@ -2964,6 +2744,8 @@
         s4 = s5;
         s5 = s6;
         s6 = s7;
+        s += src_stride;
+        d += dst_stride;
         height--;
 #endif  // defined(__aarch64__)
       } while (height > 0);
@@ -3066,17 +2848,12 @@
     int16_t *s = src_ptr;
     uint8_t *d = dst_ptr;
 
-    s0 = vld1_s16(s + 0 * src_stride);
-    s1 = vld1_s16(s + 1 * src_stride);
-    s2 = vld1_s16(s + 2 * src_stride);
-    s3 = vld1_s16(s + 3 * src_stride);
-    s4 = vld1_s16(s + 4 * src_stride);
-    s += (5 * src_stride);
+    load_s16_4x5(s, src_stride, &s0, &s1, &s2, &s3, &s4);
+    s += 5 * src_stride;
 
     do {
 #if defined(__aarch64__)
       load_s16_4x4(s, src_stride, &s5, &s6, &s7, &s8);
-      s += (4 * src_stride);
 
       d0 = convolve6_vert_4x4_s32(s0, s1, s2, s3, s4, s5, y_filter,
                                   round_shift_vec, offset_const, sub_const_vec);
@@ -3093,27 +2870,19 @@
       d01 = vqmovun_s16(dd0);
       d23 = vqmovun_s16(dd1);
 
-      if (w == 4) {
-        vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d01), 0);
-        d += dst_stride;
-        vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d01), 1);
-        d += dst_stride;
+      if (w == 2) {
+        store_u8_2x1(d + 0 * dst_stride, d01, 0);
+        store_u8_2x1(d + 1 * dst_stride, d01, 2);
         if (h != 2) {
-          vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d23), 0);
-          d += dst_stride;
-          vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d23), 1);
-          d += dst_stride;
+          store_u8_2x1(d + 2 * dst_stride, d23, 0);
+          store_u8_2x1(d + 3 * dst_stride, d23, 2);
         }
       } else {
-        vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d01), 0);
-        d += dst_stride;
-        vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d01), 2);
-        d += dst_stride;
+        store_u8_4x1(d + 0 * dst_stride, d01, 0);
+        store_u8_4x1(d + 1 * dst_stride, d01, 1);
         if (h != 2) {
-          vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d23), 0);
-          d += dst_stride;
-          vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d23), 2);
-          d += dst_stride;
+          store_u8_4x1(d + 2 * dst_stride, d23, 0);
+          store_u8_4x1(d + 3 * dst_stride, d23, 1);
         }
       }
 
@@ -3122,10 +2891,11 @@
       s2 = s6;
       s3 = s7;
       s4 = s8;
+      s += 4 * src_stride;
+      d += 4 * dst_stride;
       h -= 4;
 #else   // !defined(__aarch64__)
       s5 = vld1_s16(s);
-      s += src_stride;
 
       d0 = convolve6_vert_4x4_s32(s0, s1, s2, s3, s4, s5, y_filter,
                                   round_shift_vec, offset_const, sub_const_vec);
@@ -3134,11 +2904,9 @@
       d01 = vqmovun_s16(dd0);
 
       if (w == 2) {
-        vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(d01), 0);
-        d += dst_stride;
+        store_u8_2x1(d, d01, 0);
       } else {
-        vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(d01), 0);
-        d += dst_stride;
+        store_u8_4x1(d, d01, 0);
       }
 
       s0 = s1;
@@ -3146,6 +2914,8 @@
       s2 = s3;
       s3 = s4;
       s4 = s5;
+      s += src_stride;
+      d += dst_stride;
       h--;
 #endif  // defined(__aarch64__)
     } while (h > 0);
@@ -3163,17 +2933,12 @@
       int16_t *s = src_ptr;
       uint8_t *d = dst_ptr;
 
-      s0 = vld1q_s16(s + 0 * src_stride);
-      s1 = vld1q_s16(s + 1 * src_stride);
-      s2 = vld1q_s16(s + 2 * src_stride);
-      s3 = vld1q_s16(s + 3 * src_stride);
-      s4 = vld1q_s16(s + 4 * src_stride);
-      s += (5 * src_stride);
+      load_s16_8x5(s, src_stride, &s0, &s1, &s2, &s3, &s4);
+      s += 5 * src_stride;
 
       do {
 #if defined(__aarch64__)
         load_s16_8x4(s, src_stride, &s5, &s6, &s7, &s8);
-        s += (4 * src_stride);
 
         d0 = convolve6_vert_8x4_s32(s0, s1, s2, s3, s4, s5, y_filter,
                                     round_shift_vec, offset_const,
@@ -3188,15 +2953,10 @@
                                     round_shift_vec, offset_const,
                                     sub_const_vec, vec_round_bits);
 
-        vst1_u8(d, d0);
-        d += dst_stride;
-        vst1_u8(d, d1);
-        d += dst_stride;
         if (h != 2) {
-          vst1_u8(d, d2);
-          d += dst_stride;
-          vst1_u8(d, d3);
-          d += dst_stride;
+          store_u8_8x4(d, dst_stride, d0, d1, d2, d3);
+        } else {
+          store_u8_8x2(d, dst_stride, d0, d1);
         }
 
         s0 = s4;
@@ -3204,23 +2964,24 @@
         s2 = s6;
         s3 = s7;
         s4 = s8;
+        s += 4 * src_stride;
+        d += 4 * dst_stride;
         height -= 4;
 #else   // !defined(__aarch64__)
         s5 = vld1q_s16(s);
-        s += src_stride;
 
         d0 = convolve6_vert_8x4_s32(s0, s1, s2, s3, s4, s5, y_filter,
                                     round_shift_vec, offset_const,
                                     sub_const_vec, vec_round_bits);
-
         vst1_u8(d, d0);
-        d += dst_stride;
 
         s0 = s1;
         s1 = s2;
         s2 = s3;
         s3 = s4;
         s4 = s5;
+        s += src_stride;
+        d += dst_stride;
         height--;
 #endif  // defined(__aarch64__)
       } while (height > 0);
@@ -3329,7 +3090,7 @@
           tt = convolve8_4(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7],
                            filters);
           d = vqrshrun_n_s16(vcombine_s16(tt, tt), 7);
-          vst1_lane_u32((uint32_t *)&temp[4 * z], vreinterpret_u32_u8(d), 0);
+          store_u8_4x1(&temp[4 * z], d, 0);
         } else {
           int i;
           for (i = 0; i < 4; ++i) {
@@ -3342,14 +3103,10 @@
       // transpose the 4x4 filters values back to dst
       {
         const uint8x8x4_t d4 = vld4_u8(temp);
-        vst1_lane_u32((uint32_t *)&dst[x + 0 * dst_stride],
-                      vreinterpret_u32_u8(d4.val[0]), 0);
-        vst1_lane_u32((uint32_t *)&dst[x + 1 * dst_stride],
-                      vreinterpret_u32_u8(d4.val[1]), 0);
-        vst1_lane_u32((uint32_t *)&dst[x + 2 * dst_stride],
-                      vreinterpret_u32_u8(d4.val[2]), 0);
-        vst1_lane_u32((uint32_t *)&dst[x + 3 * dst_stride],
-                      vreinterpret_u32_u8(d4.val[3]), 0);
+        store_u8_4x1(&dst[x + 0 * dst_stride], d4.val[0], 0);
+        store_u8_4x1(&dst[x + 1 * dst_stride], d4.val[1], 0);
+        store_u8_4x1(&dst[x + 2 * dst_stride], d4.val[2], 0);
+        store_u8_4x1(&dst[x + 3 * dst_stride], d4.val[3], 0);
       }
       x += 4;
     } while (x < w);
@@ -3403,14 +3160,8 @@
       load_u8_8x8(temp, 8, &d[0], &d[1], &d[2], &d[3], &d[4], &d[5], &d[6],
                   &d[7]);
       transpose_u8_8x8(&d[0], &d[1], &d[2], &d[3], &d[4], &d[5], &d[6], &d[7]);
-      vst1_u8(&dst[x + 0 * dst_stride], d[0]);
-      vst1_u8(&dst[x + 1 * dst_stride], d[1]);
-      vst1_u8(&dst[x + 2 * dst_stride], d[2]);
-      vst1_u8(&dst[x + 3 * dst_stride], d[3]);
-      vst1_u8(&dst[x + 4 * dst_stride], d[4]);
-      vst1_u8(&dst[x + 5 * dst_stride], d[5]);
-      vst1_u8(&dst[x + 6 * dst_stride], d[6]);
-      vst1_u8(&dst[x + 7 * dst_stride], d[7]);
+      store_u8_8x8(dst + x, dst_stride, d[0], d[1], d[2], d[3], d[4], d[5],
+                   d[6], d[7]);
       x += 8;
     } while (x < w);
 
@@ -3449,7 +3200,7 @@
 
       tt = convolve8_4(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], filters);
       d = vqrshrun_n_s16(vcombine_s16(tt, tt), 7);
-      vst1_lane_u32((uint32_t *)dst, vreinterpret_u32_u8(d), 0);
+      store_u8_4x1(dst, d, 0);
     } else {
       memcpy(dst, &src_y[3 * src_stride], w);
     }
diff --git a/av1/common/arm/jnt_convolve_neon.c b/av1/common/arm/jnt_convolve_neon.c
index 36c8f9c..6aa2d43 100644
--- a/av1/common/arm/jnt_convolve_neon.c
+++ b/av1/common/arm/jnt_convolve_neon.c
@@ -303,10 +303,7 @@
     int16x4_t d0, d1, d2, d3;
 
     do {
-      s0 = vld1q_u8(src + 0 * src_stride);
-      s1 = vld1q_u8(src + 1 * src_stride);
-      s2 = vld1q_u8(src + 2 * src_stride);
-      s3 = vld1q_u8(src + 3 * src_stride);
+      load_u8_16x4(src, src_stride, &s0, &s1, &s2, &s3);
 
       t0 = convolve8_4_usdot(s0, x_filter, permute_tbl, horiz_const);
       t1 = convolve8_4_usdot(s1, x_filter, permute_tbl, horiz_const);
@@ -318,10 +315,7 @@
       d2 = vqrshl_s16(vmovn_s32(t2), shift_round_0);
       d3 = vqrshl_s16(vmovn_s32(t3), shift_round_0);
 
-      vst1_s16((dst_ptr + 0 * dst_stride), d0);
-      vst1_s16((dst_ptr + 1 * dst_stride), d1);
-      vst1_s16((dst_ptr + 2 * dst_stride), d2);
-      vst1_s16((dst_ptr + 3 * dst_stride), d3);
+      store_s16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
 
       src += 4 * src_stride;
       dst_ptr += 4 * dst_stride;
@@ -341,10 +335,7 @@
       d = dst_ptr;
 
       do {
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         d0 = convolve8_8_usdot(s0, x_filter, permute_tbl, horiz_const,
                                shift_round_0);
@@ -355,10 +346,7 @@
         d3 = convolve8_8_usdot(s3, x_filter, permute_tbl, horiz_const,
                                shift_round_0);
 
-        vst1q_s16(d + 0 * dst_stride, d0);
-        vst1q_s16(d + 1 * dst_stride, d1);
-        vst1q_s16(d + 2 * dst_stride, d2);
-        vst1q_s16(d + 3 * dst_stride, d3);
+        store_s16_8x4(d, dst_stride, d0, d1, d2, d3);
 
         s += 8;
         d += 8;
@@ -399,10 +387,7 @@
     int16x4_t d0, d1, d2, d3;
 
     do {
-      s0 = vld1q_u8(src + 0 * src_stride);
-      s1 = vld1q_u8(src + 1 * src_stride);
-      s2 = vld1q_u8(src + 2 * src_stride);
-      s3 = vld1q_u8(src + 3 * src_stride);
+      load_u8_16x4(src, src_stride, &s0, &s1, &s2, &s3);
 
       t0 = convolve8_4_sdot(s0, x_filter, correction, range_limit, permute_tbl);
       t1 = convolve8_4_sdot(s1, x_filter, correction, range_limit, permute_tbl);
@@ -414,10 +399,7 @@
       d2 = vqrshl_s16(vmovn_s32(t2), shift_round_0);
       d3 = vqrshl_s16(vmovn_s32(t3), shift_round_0);
 
-      vst1_s16((dst_ptr + 0 * dst_stride), d0);
-      vst1_s16((dst_ptr + 1 * dst_stride), d1);
-      vst1_s16((dst_ptr + 2 * dst_stride), d2);
-      vst1_s16((dst_ptr + 3 * dst_stride), d3);
+      store_s16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
 
       src += 4 * src_stride;
       dst_ptr += 4 * dst_stride;
@@ -437,10 +419,7 @@
       d = dst_ptr;
 
       do {
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         d0 = convolve8_8_sdot(s0, x_filter, correction, range_limit,
                               permute_tbl, shift_round_0);
@@ -451,10 +430,7 @@
         d3 = convolve8_8_sdot(s3, x_filter, correction, range_limit,
                               permute_tbl, shift_round_0);
 
-        vst1q_s16(d + 0 * dst_stride, d0);
-        vst1q_s16(d + 1 * dst_stride, d1);
-        vst1q_s16(d + 2 * dst_stride, d2);
-        vst1q_s16(d + 3 * dst_stride, d3);
+        store_s16_8x4(d, dst_stride, d0, d1, d2, d3);
 
         s += 8;
         d += 8;
@@ -546,10 +522,7 @@
 
       transpose_s16_4x4d(&d0, &d1, &d2, &d3);
 
-      vst1_s16((dst_ptr + 0 * dst_stride), d0);
-      vst1_s16((dst_ptr + 1 * dst_stride), d1);
-      vst1_s16((dst_ptr + 2 * dst_stride), d2);
-      vst1_s16((dst_ptr + 3 * dst_stride), d3);
+      store_s16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
 
       src += 4 * src_stride;
       dst_ptr += 4 * dst_stride;
@@ -749,11 +722,7 @@
     uint8x8_t d23_u8;
 #endif
 
-    s0 = vld1_s16(src_ptr + 0 * src_stride);
-    s1 = vld1_s16(src_ptr + 1 * src_stride);
-    s2 = vld1_s16(src_ptr + 2 * src_stride);
-    s3 = vld1_s16(src_ptr + 3 * src_stride);
-    s4 = vld1_s16(src_ptr + 4 * src_stride);
+    load_s16_4x5(src_ptr, src_stride, &s0, &s1, &s2, &s3, &s4);
     src_ptr += 5 * src_stride;
 
     do {
@@ -776,14 +745,11 @@
                         bck_offset, sub_const_vec, round_bits,
                         use_dist_wtd_comp_avg, &d01_u8, &d23_u8);
 
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d01_u8), 0);
-        dst8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d01_u8), 1);
-        dst8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d23_u8), 0);
-        dst8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d23_u8), 1);
-        dst8_ptr += dst8_stride;
+        store_u8_4x1(dst8_ptr + 0 * dst8_stride, d01_u8, 0);
+        store_u8_4x1(dst8_ptr + 1 * dst8_stride, d01_u8, 1);
+        store_u8_4x1(dst8_ptr + 2 * dst8_stride, d23_u8, 0);
+        store_u8_4x1(dst8_ptr + 3 * dst8_stride, d23_u8, 1);
+        dst8_ptr += 4 * dst8_stride;
       } else {
         store_u16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
       }
@@ -793,7 +759,6 @@
       s2 = s6;
       s3 = s7;
       s4 = s8;
-
       src_ptr += 4 * src_stride;
       dst_ptr += 4 * dst_stride;
       h -= 4;
@@ -809,18 +774,17 @@
         compute_avg_4x1(dd0, d0, fwd_offset, bck_offset, sub_const_vec,
                         round_bits, use_dist_wtd_comp_avg, &d01_u8);
 
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d01_u8), 0);
+        store_u8_4x1(dst8_ptr, d01_u8, 0);
         dst8_ptr += dst8_stride;
-
       } else {
         vst1_u16(dst_ptr, d0);
       }
+
       s0 = s1;
       s1 = s2;
       s2 = s3;
       s3 = s4;
       s4 = s5;
-
       src_ptr += src_stride;
       dst_ptr += dst_stride;
       h--;
@@ -844,11 +808,7 @@
       uint8_t *d_u8 = dst8_ptr;
       int height = h;
 
-      s0 = vld1q_s16(s + 0 * src_stride);
-      s1 = vld1q_s16(s + 1 * src_stride);
-      s2 = vld1q_s16(s + 2 * src_stride);
-      s3 = vld1q_s16(s + 3 * src_stride);
-      s4 = vld1q_s16(s + 4 * src_stride);
+      load_s16_8x5(s, src_stride, &s0, &s1, &s2, &s3, &s4);
       s += 5 * src_stride;
 
       do {
@@ -872,14 +832,8 @@
                           use_dist_wtd_comp_avg, &d0_u8, &d1_u8, &d2_u8,
                           &d3_u8);
 
-          vst1_u8(d_u8, d0_u8);
-          d_u8 += dst8_stride;
-          vst1_u8(d_u8, d1_u8);
-          d_u8 += dst8_stride;
-          vst1_u8(d_u8, d2_u8);
-          d_u8 += dst8_stride;
-          vst1_u8(d_u8, d3_u8);
-          d_u8 += dst8_stride;
+          store_u8_8x4(d_u8, dst8_stride, d0_u8, d1_u8, d2_u8, d3_u8);
+          d_u8 += 4 * dst8_stride;
         } else {
           store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
         }
@@ -889,7 +843,6 @@
         s2 = s6;
         s3 = s7;
         s4 = s8;
-
         s += 4 * src_stride;
         d += 4 * dst_stride;
         height -= 4;
@@ -907,7 +860,6 @@
 
           vst1_u8(d_u8, d0_u8);
           d_u8 += dst8_stride;
-
         } else {
           vst1q_u16(d, d0);
         }
@@ -965,7 +917,7 @@
     uint8x8_t d23_u8;
 #endif
 
-    load_s16_4x8(src_ptr, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7);
+    load_s16_4x7(src_ptr, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6);
     src_ptr += 7 * src_stride;
 
     do {
@@ -988,14 +940,11 @@
                         bck_offset, sub_const_vec, round_bits,
                         use_dist_wtd_comp_avg, &d01_u8, &d23_u8);
 
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d01_u8), 0);
-        dst8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d01_u8), 1);
-        dst8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d23_u8), 0);
-        dst8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d23_u8), 1);
-        dst8_ptr += dst8_stride;
+        store_u8_4x1(dst8_ptr + 0 * dst8_stride, d01_u8, 0);
+        store_u8_4x1(dst8_ptr + 1 * dst8_stride, d01_u8, 1);
+        store_u8_4x1(dst8_ptr + 2 * dst8_stride, d23_u8, 0);
+        store_u8_4x1(dst8_ptr + 3 * dst8_stride, d23_u8, 1);
+        dst8_ptr += 4 * dst8_stride;
       } else {
         store_u16_4x4(dst_ptr, dst_stride, d0, d1, d2, d3);
       }
@@ -1007,7 +956,6 @@
       s4 = s8;
       s5 = s9;
       s6 = s10;
-
       src_ptr += 4 * src_stride;
       dst_ptr += 4 * dst_stride;
       h -= 4;
@@ -1023,12 +971,12 @@
         compute_avg_4x1(dd0, d0, fwd_offset, bck_offset, sub_const_vec,
                         round_bits, use_dist_wtd_comp_avg, &d01_u8);
 
-        vst1_lane_u32((uint32_t *)dst8_ptr, vreinterpret_u32_u8(d01_u8), 0);
+        store_u8_4x1(dst8_ptr, d01_u8, 0);
         dst8_ptr += dst8_stride;
-
       } else {
         vst1_u16(dst_ptr, d0);
       }
+
       s0 = s1;
       s1 = s2;
       s2 = s3;
@@ -1036,7 +984,6 @@
       s4 = s5;
       s5 = s6;
       s6 = s7;
-
       src_ptr += src_stride;
       dst_ptr += dst_stride;
       h--;
@@ -1060,7 +1007,7 @@
       uint8_t *d_u8 = dst8_ptr;
       int height = h;
 
-      load_s16_8x8(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6, &s7);
+      load_s16_8x7(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6);
       s += 7 * src_stride;
 
       do {
@@ -1084,14 +1031,8 @@
                           use_dist_wtd_comp_avg, &d0_u8, &d1_u8, &d2_u8,
                           &d3_u8);
 
-          vst1_u8(d_u8, d0_u8);
-          d_u8 += dst8_stride;
-          vst1_u8(d_u8, d1_u8);
-          d_u8 += dst8_stride;
-          vst1_u8(d_u8, d2_u8);
-          d_u8 += dst8_stride;
-          vst1_u8(d_u8, d3_u8);
-          d_u8 += dst8_stride;
+          store_u8_8x4(d_u8, dst8_stride, d0_u8, d1_u8, d2_u8, d3_u8);
+          d_u8 += 4 * dst8_stride;
         } else {
           store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
         }
@@ -1103,7 +1044,6 @@
         s4 = s8;
         s5 = s9;
         s6 = s10;
-
         s += 4 * src_stride;
         d += 4 * dst_stride;
         height -= 4;
@@ -1121,7 +1061,6 @@
 
           vst1_u8(d_u8, d0_u8);
           d_u8 += dst8_stride;
-
         } else {
           vst1q_u16(d, d0);
         }
@@ -1133,7 +1072,6 @@
         s4 = s5;
         s5 = s6;
         s6 = s7;
-
         s += src_stride;
         d += dst_stride;
         height--;
@@ -1243,16 +1181,10 @@
                           conv_params->use_dist_wtd_comp_avg, &tmp_shift0,
                           &tmp_shift1, &tmp_shift2, &tmp_shift3);
 
-          vst1_u8(dst8_1 + (0 * dst8_stride), tmp_shift0);
-          vst1_u8(dst8_1 + (1 * dst8_stride), tmp_shift1);
-          vst1_u8(dst8_1 + (2 * dst8_stride), tmp_shift2);
-          vst1_u8(dst8_1 + (3 * dst8_stride), tmp_shift3);
-
+          store_u8_8x4(dst8_1, dst8_stride, tmp_shift0, tmp_shift1, tmp_shift2,
+                       tmp_shift3);
         } else {
-          vst1q_u16(dst_1 + (0 * dst_stride), res_q0);
-          vst1q_u16(dst_1 + (1 * dst_stride), res_q1);
-          vst1q_u16(dst_1 + (2 * dst_stride), res_q2);
-          vst1q_u16(dst_1 + (3 * dst_stride), res_q3);
+          store_u16_8x4(dst_1, dst_stride, res_q0, res_q1, res_q2, res_q3);
         }
         src1 = src1 + 8;
         dst_1 = dst_1 + 8;
@@ -1286,22 +1218,12 @@
                         sub_const_vec, bits, conv_params->use_dist_wtd_comp_avg,
                         &tmp_shift0, &tmp_shift1);
 
-        vst1_lane_u32((uint32_t *)(dst8_1), vreinterpret_u32_u8(tmp_shift0), 0);
-        dst8_1 += dst8_stride;
-        vst1_lane_u32((uint32_t *)(dst8_1), vreinterpret_u32_u8(tmp_shift0), 1);
-        dst8_1 += dst8_stride;
-        vst1_lane_u32((uint32_t *)(dst8_1), vreinterpret_u32_u8(tmp_shift1), 0);
-        dst8_1 += dst8_stride;
-        vst1_lane_u32((uint32_t *)(dst8_1), vreinterpret_u32_u8(tmp_shift1), 1);
-
+        store_u8_4x1(dst8_1 + 0 * dst8_stride, tmp_shift0, 0);
+        store_u8_4x1(dst8_1 + 1 * dst8_stride, tmp_shift0, 1);
+        store_u8_4x1(dst8_1 + 2 * dst8_stride, tmp_shift1, 0);
+        store_u8_4x1(dst8_1 + 3 * dst8_stride, tmp_shift1, 1);
       } else {
-        vst1_u16(dst_1, res4);
-        dst_1 += dst_stride;
-        vst1_u16(dst_1, res5);
-        dst_1 += dst_stride;
-        vst1_u16(dst_1, res6);
-        dst_1 += dst_stride;
-        vst1_u16(dst_1, res7);
+        store_u16_4x4(dst_1, dst_stride, res4, res5, res6, res7);
       }
       src += src_stride * 4;
       dst += dst_stride * 4;
@@ -1361,10 +1283,7 @@
       uint16x4_t dd0, dd1, dd2, dd3;
       uint8x8_t d01_u8, d23_u8;
 
-      s0 = vld1q_u8(src_ptr + 0 * src_stride);
-      s1 = vld1q_u8(src_ptr + 1 * src_stride);
-      s2 = vld1q_u8(src_ptr + 2 * src_stride);
-      s3 = vld1q_u8(src_ptr + 3 * src_stride);
+      load_u8_16x4(src_ptr, src_stride, &s0, &s1, &s2, &s3);
 
       d0 = convolve8_4_usdot(s0, x_filter, permute_tbl, vdupq_n_s32(0));
       d1 = convolve8_4_usdot(s1, x_filter, permute_tbl, vdupq_n_s32(0));
@@ -1384,14 +1303,7 @@
       d23 = vaddq_s16(d23, round_offset128);
 
       if (conv_params->do_average) {
-        dd0 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
-        dd1 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
-        dd2 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
-        dd3 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
+        load_u16_4x4(dst_ptr, dst_stride, &dd0, &dd1, &dd2, &dd3);
 
         compute_avg_4x4(dd0, dd1, dd2, dd3,
                         vreinterpret_u16_s16(vget_low_s16(d01)),
@@ -1401,26 +1313,21 @@
                         bck_offset, round_offset64, round_bits,
                         use_dist_wtd_comp_avg, &d01_u8, &d23_u8);
 
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d01_u8), 0);
-        dst_u8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d01_u8), 1);
-        dst_u8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d23_u8), 0);
-        dst_u8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d23_u8), 1);
-        dst_u8_ptr += dst8_stride;
+        store_u8_4x1(dst_u8_ptr + 0 * dst8_stride, d01_u8, 0);
+        store_u8_4x1(dst_u8_ptr + 1 * dst8_stride, d01_u8, 1);
+        store_u8_4x1(dst_u8_ptr + 2 * dst8_stride, d23_u8, 0);
+        store_u8_4x1(dst_u8_ptr + 3 * dst8_stride, d23_u8, 1);
       } else {
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d01), 0);
-        dst_ptr += dst_stride;
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d01), 1);
-        dst_ptr += dst_stride;
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d23), 0);
-        dst_ptr += dst_stride;
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d23), 1);
-        dst_ptr += dst_stride;
+        store_u16_4x4(dst_ptr, dst_stride,
+                      vreinterpret_u16_s16(vget_low_s16(d01)),
+                      vreinterpret_u16_s16(vget_high_s16(d01)),
+                      vreinterpret_u16_s16(vget_low_s16(d23)),
+                      vreinterpret_u16_s16(vget_high_s16(d23)));
       }
 
       src_ptr += 4 * src_stride;
+      dst_ptr += 4 * dst_stride;
+      dst_u8_ptr += 4 * dst8_stride;
       height -= 4;
     } while (height > 0);
   } else {
@@ -1438,10 +1345,7 @@
         uint16x8_t dd0, dd1, dd2, dd3;
         uint8x8_t d0_u8, d1_u8, d2_u8, d3_u8;
 
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         d0 = convolve8_8_usdot(s0, x_filter, permute_tbl, vdupq_n_s32(0),
                                shift_round_0);
@@ -1547,10 +1451,7 @@
       uint16x4_t dd0, dd1, dd2, dd3;
       uint8x8_t d01_u8, d23_u8;
 
-      s0 = vld1q_u8(src_ptr + 0 * src_stride);
-      s1 = vld1q_u8(src_ptr + 1 * src_stride);
-      s2 = vld1q_u8(src_ptr + 2 * src_stride);
-      s3 = vld1q_u8(src_ptr + 3 * src_stride);
+      load_u8_16x4(src_ptr, src_stride, &s0, &s1, &s2, &s3);
 
       d0 = convolve8_4_sdot(s0, x_filter, correction, range_limit, permute_tbl);
       d1 = convolve8_4_sdot(s1, x_filter, correction, range_limit, permute_tbl);
@@ -1570,14 +1471,7 @@
       d23 = vaddq_s16(d23, round_offset128);
 
       if (conv_params->do_average) {
-        dd0 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
-        dd1 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
-        dd2 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
-        dd3 = vld1_u16(dst_ptr);
-        dst_ptr += dst_stride;
+        load_u16_4x4(dst_ptr, dst_stride, &dd0, &dd1, &dd2, &dd3);
 
         compute_avg_4x4(dd0, dd1, dd2, dd3,
                         vreinterpret_u16_s16(vget_low_s16(d01)),
@@ -1587,26 +1481,21 @@
                         bck_offset, round_offset64, round_bits,
                         use_dist_wtd_comp_avg, &d01_u8, &d23_u8);
 
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d01_u8), 0);
-        dst_u8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d01_u8), 1);
-        dst_u8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d23_u8), 0);
-        dst_u8_ptr += dst8_stride;
-        vst1_lane_u32((uint32_t *)dst_u8_ptr, vreinterpret_u32_u8(d23_u8), 1);
-        dst_u8_ptr += dst8_stride;
+        store_u8_4x1(dst_u8_ptr + 0 * dst8_stride, d01_u8, 0);
+        store_u8_4x1(dst_u8_ptr + 1 * dst8_stride, d01_u8, 1);
+        store_u8_4x1(dst_u8_ptr + 2 * dst8_stride, d23_u8, 0);
+        store_u8_4x1(dst_u8_ptr + 3 * dst8_stride, d23_u8, 1);
       } else {
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d01), 0);
-        dst_ptr += dst_stride;
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d01), 1);
-        dst_ptr += dst_stride;
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d23), 0);
-        dst_ptr += dst_stride;
-        vst1q_lane_u64((uint64_t *)dst_ptr, vreinterpretq_u64_s16(d23), 1);
-        dst_ptr += dst_stride;
+        store_u16_4x4(dst_ptr, dst_stride,
+                      vreinterpret_u16_s16(vget_low_s16(d01)),
+                      vreinterpret_u16_s16(vget_high_s16(d01)),
+                      vreinterpret_u16_s16(vget_low_s16(d23)),
+                      vreinterpret_u16_s16(vget_high_s16(d23)));
       }
 
       src_ptr += 4 * src_stride;
+      dst_ptr += 4 * dst_stride;
+      dst_u8_ptr += 4 * dst8_stride;
       height -= 4;
     } while (height > 0);
   } else {
@@ -1624,10 +1513,7 @@
         uint16x8_t dd0, dd1, dd2, dd3;
         uint8x8_t d0_u8, d1_u8, d2_u8, d3_u8;
 
-        s0 = vld1q_u8(s + 0 * src_stride);
-        s1 = vld1q_u8(s + 1 * src_stride);
-        s2 = vld1q_u8(s + 2 * src_stride);
-        s3 = vld1q_u8(s + 3 * src_stride);
+        load_u8_16x4(s, src_stride, &s0, &s1, &s2, &s3);
 
         d0 = convolve8_8_sdot(s0, x_filter, correction, range_limit,
                               permute_tbl, shift_round_0);
@@ -1825,17 +1711,10 @@
                           round_offset_vec, round_bits, use_dist_wtd_comp_avg,
                           &t0, &t1);
 
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t0),
-                        0);  // 00 01 02 03
-          vst1_lane_u32((uint32_t *)(d_u8 + dst8_stride),
-                        vreinterpret_u32_u8(t0),
-                        1);  // 10 11 12 13
-          vst1_lane_u32((uint32_t *)(d_u8 + 2 * dst8_stride),
-                        vreinterpret_u32_u8(t1),
-                        0);  // 20 21 22 23
-          vst1_lane_u32((uint32_t *)(d_u8 + 3 * dst8_stride),
-                        vreinterpret_u32_u8(t1),
-                        1);  // 30 31 32 33
+          store_u8_4x1(d_u8 + 0 * dst8_stride, t0, 0);
+          store_u8_4x1(d_u8 + 1 * dst8_stride, t0, 1);
+          store_u8_4x1(d_u8 + 2 * dst8_stride, t1, 0);
+          store_u8_4x1(d_u8 + 3 * dst8_stride, t1, 1);
         } else {
           store_u16_4x4(d, dst_stride, vreinterpret_u16_s16(d0),
                         vreinterpret_u16_s16(d1), vreinterpret_u16_s16(d2),
@@ -1849,15 +1728,14 @@
         s4 = s8;
         s5 = s9;
         s6 = s10;
-
         s += 4;
-        width -= 4;
         d += 4;
         d_u8 += 4;
+        width -= 4;
       } while (width > 0);
-      src_ptr += (src_stride << 2);
-      dst_ptr += (dst_stride << 2);
-      dst_u8_ptr += (dst8_stride << 2);
+      src_ptr += 4 * src_stride;
+      dst_ptr += 4 * dst_stride;
+      dst_u8_ptr += 4 * dst8_stride;
       height -= 4;
 #else
       t0 = vld1_u8(s);                            // a0 a1 a2 a3 a4 a5 a6 a7
@@ -1896,20 +1774,19 @@
                           bck_offset, round_offset_vec, round_bits,
                           use_dist_wtd_comp_avg, &t0);
 
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t0),
-                        0);  // 00 01 02 03
+          store_u8_4x1(d_u8, t0, 0);
         } else {
           vst1_u16(d, vreinterpret_u16_s16(d0));
         }
 
         s += 4;
-        width -= 4;
         d += 4;
         d_u8 += 4;
+        width -= 4;
       } while (width > 0);
-      src_ptr += (src_stride);
-      dst_ptr += (dst_stride);
-      dst_u8_ptr += (dst8_stride);
+      src_ptr += src_stride;
+      dst_ptr += dst_stride;
+      dst_u8_ptr += dst8_stride;
       height--;
 #endif
     } while (height > 0);
@@ -2020,7 +1897,7 @@
 
         if (conv_params->do_average) {
           load_u16_8x4(d_tmp, dst_stride, &res8, &res9, &res10, &res11);
-          d_tmp += (dst_stride << 2);
+          d_tmp += 4 * dst_stride;
 
           compute_avg_8x4(res8, res9, res10, res11, vreinterpretq_u16_s16(res0),
                           vreinterpretq_u16_s16(res1),
@@ -2030,10 +1907,10 @@
                           &t0, &t1, &t2, &t3);
 
           store_u8_8x4(d_u8, dst8_stride, t0, t1, t2, t3);
-          d_u8 += (dst8_stride << 2);
+          d_u8 += 4 * dst8_stride;
 
           load_u16_8x4(d_tmp, dst_stride, &res8, &res9, &res10, &res11);
-          d_tmp += (dst_stride << 2);
+          d_tmp += 4 * dst_stride;
 
           compute_avg_8x4(res8, res9, res10, res11, vreinterpretq_u16_s16(res4),
                           vreinterpretq_u16_s16(res5),
@@ -2043,7 +1920,7 @@
                           &t0, &t1, &t2, &t3);
 
           store_u8_8x4(d_u8, dst8_stride, t0, t1, t2, t3);
-          d_u8 += (dst8_stride << 2);
+          d_u8 += 4 * dst8_stride;
         } else {
           store_u16_8x8(
               d_tmp, dst_stride, vreinterpretq_u16_s16(res0),
@@ -2051,7 +1928,7 @@
               vreinterpretq_u16_s16(res3), vreinterpretq_u16_s16(res4),
               vreinterpretq_u16_s16(res5), vreinterpretq_u16_s16(res6),
               vreinterpretq_u16_s16(res7));
-          d_tmp += (dst_stride << 3);
+          d_tmp += 8 * dst_stride;
         }
 
         s0 = s8;
@@ -2063,8 +1940,8 @@
         s6 = s14;
         s += 8;
         d += 8;
-        width -= 8;
         d_u8_tmp += 8;
+        width -= 8;
       } while (width > 0);
       src_ptr += 8 * src_stride;
       dst_ptr += 8 * dst_stride;
@@ -2108,17 +1985,17 @@
 
         if (conv_params->do_average) {
           res8 = vld1q_u16(d_tmp);
-          d_tmp += (dst_stride);
+          d_tmp += dst_stride;
 
           compute_avg_8x1(res8, vreinterpretq_u16_s16(res0), fwd_offset,
                           bck_offset, round_offset64, round_bits,
                           use_dist_wtd_comp_avg, &t0);
 
           vst1_u8(d_u8, t0);
-          d_u8 += (dst8_stride);
+          d_u8 += dst8_stride;
         } else {
           vst1q_u16(d_tmp, vreinterpretq_u16_s16(res0));
-          d_tmp += (dst_stride);
+          d_tmp += dst_stride;
         }
 
         s += 8;
@@ -2233,7 +2110,7 @@
       __builtin_prefetch(d + 2 * dst_stride);
       __builtin_prefetch(d + 3 * dst_stride);
 
-      s += (7 * src_stride);
+      s += 7 * src_stride;
       do {
 #if defined(__aarch64__)
         load_unaligned_u8_4x4(s, src_stride, &tu0, &tu1);
@@ -2271,7 +2148,6 @@
           __builtin_prefetch(d_u8 + 3 * dst8_stride);
 
           load_u16_4x4(d, dst_stride, &res4, &res5, &res6, &res7);
-          d += (dst_stride << 2);
 
           compute_avg_4x4(res4, res5, res6, res7, vreinterpret_u16_s16(d0),
                           vreinterpret_u16_s16(d1), vreinterpret_u16_s16(d2),
@@ -2279,19 +2155,14 @@
                           round_offset64, round_bits, use_dist_wtd_comp_avg,
                           &t0, &t1);
 
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t0), 0);
-          d_u8 += dst8_stride;
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t0), 1);
-          d_u8 += dst8_stride;
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t1), 0);
-          d_u8 += dst8_stride;
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t1), 1);
-          d_u8 += dst8_stride;
+          store_u8_4x1(d_u8 + 0 * dst8_stride, t0, 0);
+          store_u8_4x1(d_u8 + 1 * dst8_stride, t0, 1);
+          store_u8_4x1(d_u8 + 2 * dst8_stride, t1, 0);
+          store_u8_4x1(d_u8 + 3 * dst8_stride, t1, 1);
         } else {
           store_u16_4x4(d, dst_stride, vreinterpret_u16_s16(d0),
                         vreinterpret_u16_s16(d1), vreinterpret_u16_s16(d2),
                         vreinterpret_u16_s16(d3));
-          d += (dst_stride << 2);
         }
 
         s0 = s4;
@@ -2301,8 +2172,9 @@
         s4 = s8;
         s5 = s9;
         s6 = s10;
-
-        s += (src_stride << 2);
+        s += 4 * src_stride;
+        d += 4 * dst_stride;
+        d_u8 += 4 * dst8_stride;
         height -= 4;
 #else
         load_unaligned_u8_4x1(s, src_stride, &tu0);
@@ -2318,17 +2190,14 @@
           __builtin_prefetch(d);
 
           res4 = vld1_u16(d);
-          d += (dst_stride);
 
           compute_avg_4x1(res4, vreinterpret_u16_s16(d0), fwd_offset,
                           bck_offset, round_offset64, round_bits,
                           use_dist_wtd_comp_avg, &t0);
 
-          vst1_lane_u32((uint32_t *)d_u8, vreinterpret_u32_u8(t0), 0);
-          d_u8 += dst8_stride;
+          store_u8_4x1(d_u8, t0, 0);
         } else {
           vst1_u16(d, vreinterpret_u16_s16(d0));
-          d += (dst_stride);
         }
 
         s0 = s1;
@@ -2338,8 +2207,9 @@
         s4 = s5;
         s5 = s6;
         s6 = s7;
-
-        s += (src_stride);
+        s += src_stride;
+        d += dst_stride;
+        d_u8 += dst8_stride;
         height--;
 #endif
       } while (height > 0);
@@ -2353,7 +2223,7 @@
     int16x8_t s0, s1, s2, s3, s4, s5, s6, s7;
     int16x8_t res0;
     uint16x8_t res8;
-    uint8x8_t t0, t1, t2, t3, t4, t5, t6, t7;
+    uint8x8_t t0, t1, t2, t3, t4, t5, t6;
     const int16x8_t round_offset128 = vdupq_n_s16(round_offset);
     const int16x8_t shift_vec = vdupq_n_s16(-shift_value);
     const int16x4_t round_offset64 = vdup_n_s16(round_offset);
@@ -2361,7 +2231,8 @@
 #if defined(__aarch64__)
     int16x8_t s8, s9, s10, s11, s12, s13, s14;
     int16x8_t res1, res2, res3, res4, res5, res6, res7;
-    uint16x8_t res10, res11, res9;
+    uint16x8_t res9, res10, res11;
+    uint8x8_t t7;
 #endif
     dst_ptr = dst;
     dst_u8_ptr = dst8;
@@ -2374,7 +2245,7 @@
       __builtin_prefetch(src_ptr + 5 * src_stride);
       __builtin_prefetch(src_ptr + 6 * src_stride);
       __builtin_prefetch(src_ptr + 7 * src_stride);
-      load_u8_8x8(src_ptr, src_stride, &t0, &t1, &t2, &t3, &t4, &t5, &t6, &t7);
+      load_u8_8x7(src_ptr, src_stride, &t0, &t1, &t2, &t3, &t4, &t5, &t6);
 
       s0 = vreinterpretq_s16_u16(vmovl_u8(t0));
       s1 = vreinterpretq_s16_u16(vmovl_u8(t1));
@@ -2439,7 +2310,7 @@
           __builtin_prefetch(d_tmp + 3 * dst8_stride);
 
           load_u16_8x4(d_tmp, dst_stride, &res8, &res9, &res10, &res11);
-          d_tmp += (dst_stride << 2);
+          d_tmp += 4 * dst_stride;
 
           compute_avg_8x4(res8, res9, res10, res11, vreinterpretq_u16_s16(res0),
                           vreinterpretq_u16_s16(res1),
@@ -2449,10 +2320,10 @@
                           &t0, &t1, &t2, &t3);
 
           store_u8_8x4(d_u8, dst8_stride, t0, t1, t2, t3);
-          d_u8 += (dst8_stride << 2);
+          d_u8 += 4 * dst8_stride;
 
           load_u16_8x4(d_tmp, dst_stride, &res8, &res9, &res10, &res11);
-          d_tmp += (dst_stride << 2);
+          d_tmp += 4 * dst_stride;
 
           compute_avg_8x4(res8, res9, res10, res11, vreinterpretq_u16_s16(res4),
                           vreinterpretq_u16_s16(res5),
@@ -2462,7 +2333,7 @@
                           &t0, &t1, &t2, &t3);
 
           store_u8_8x4(d_u8, dst8_stride, t0, t1, t2, t3);
-          d_u8 += (dst8_stride << 2);
+          d_u8 += 4 * dst8_stride;
         } else {
           store_u16_8x8(
               d_tmp, dst_stride, vreinterpretq_u16_s16(res0),
@@ -2470,7 +2341,7 @@
               vreinterpretq_u16_s16(res3), vreinterpretq_u16_s16(res4),
               vreinterpretq_u16_s16(res5), vreinterpretq_u16_s16(res6),
               vreinterpretq_u16_s16(res7));
-          d_tmp += (dst_stride << 3);
+          d_tmp += 8 * dst_stride;
         }
 
         s0 = s8;
@@ -2480,7 +2351,7 @@
         s4 = s12;
         s5 = s13;
         s6 = s14;
-        s += (8 * src_stride);
+        s += 8 * src_stride;
         height -= 8;
 #else
         s7 = vreinterpretq_s16_u16(vmovl_u8(vld1_u8(s)));
@@ -2503,20 +2374,20 @@
           __builtin_prefetch(d_tmp);
 
           res8 = vld1q_u16(d_tmp);
-          d_tmp += (dst_stride);
+          d_tmp += dst_stride;
 
           compute_avg_8x1(res8, vreinterpretq_u16_s16(res0), fwd_offset,
                           bck_offset, round_offset64, round_bits,
                           use_dist_wtd_comp_avg, &t0);
 
           vst1_u8(d_u8, t0);
-          d_u8 += (dst8_stride);
+          d_u8 += dst8_stride;
         } else {
           vst1q_u16(d_tmp, vreinterpretq_u16_s16(res0));
           d_tmp += dst_stride;
         }
 
-        s += (src_stride);
+        s += src_stride;
         height--;
 #endif
       } while (height > 0);
diff --git a/av1/common/arm/wiener_convolve_neon.c b/av1/common/arm/wiener_convolve_neon.c
index 0a12c88..1d36f68 100644
--- a/av1/common/arm/wiener_convolve_neon.c
+++ b/av1/common/arm/wiener_convolve_neon.c
@@ -248,21 +248,11 @@
       int16x8_t s0, s1, s2, s3, s4, s5, s6, s7;
       uint8x8_t t0;
       s = src_tmp_ptr;
-      s0 = vld1q_s16(s);
-      s += src_stride;
-      s1 = vld1q_s16(s);
-      s += src_stride;
-      s2 = vld1q_s16(s);
-      s += src_stride;
-      s3 = vld1q_s16(s);
-      s += src_stride;
-      s4 = vld1q_s16(s);
-      s += src_stride;
-      s5 = vld1q_s16(s);
-      s += src_stride;
-      s6 = vld1q_s16(s);
-      s += src_stride;
       d = dst_tmp_ptr;
+
+      load_s16_8x7(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6);
+      s += 7 * src_stride;
+
       height = h;
 
       do {
@@ -273,14 +263,7 @@
         __builtin_prefetch(dst_tmp_ptr + 2 * dst_stride);
         __builtin_prefetch(dst_tmp_ptr + 3 * dst_stride);
 
-        s7 = vld1q_s16(s);
-        s += src_stride;
-        s8 = vld1q_s16(s);
-        s += src_stride;
-        s9 = vld1q_s16(s);
-        s += src_stride;
-        s10 = vld1q_s16(s);
-        s += src_stride;
+        load_s16_8x4(s, src_stride, &s7, &s8, &s9, &s10);
 
         t0 = wiener_convolve8_vert_4x8(s0, s1, s2, s3, s4, s5, s6, filter_y_tmp,
                                        bd, conv_params->round_1);
@@ -291,14 +274,7 @@
         t3 = wiener_convolve8_vert_4x8(s3, s4, s5, s6, s7, s8, s9, filter_y_tmp,
                                        bd, conv_params->round_1);
 
-        vst1_u8(d, t0);
-        d += dst_stride;
-        vst1_u8(d, t1);
-        d += dst_stride;
-        vst1_u8(d, t2);
-        d += dst_stride;
-        vst1_u8(d, t3);
-        d += dst_stride;
+        store_u8_8x4(d, dst_stride, t0, t1, t2, t3);
 
         s0 = s4;
         s1 = s5;
@@ -307,6 +283,8 @@
         s4 = s8;
         s5 = s9;
         s6 = s10;
+        s += 4 * src_stride;
+        d += 4 * dst_stride;
         height -= 4;
       } while (height > 3);
 
@@ -336,21 +314,11 @@
       uint8x8_t t0;
       int16x8_t s0, s1, s2, s3, s4, s5, s6, s7;
       s = src_tmp_ptr;
-      s0 = vld1q_s16(s);
-      s += src_stride;
-      s1 = vld1q_s16(s);
-      s += src_stride;
-      s2 = vld1q_s16(s);
-      s += src_stride;
-      s3 = vld1q_s16(s);
-      s += src_stride;
-      s4 = vld1q_s16(s);
-      s += src_stride;
-      s5 = vld1q_s16(s);
-      s += src_stride;
-      s6 = vld1q_s16(s);
-      s += src_stride;
       d = dst_tmp_ptr;
+
+      load_s16_8x7(s, src_stride, &s0, &s1, &s2, &s3, &s4, &s5, &s6);
+      s += 7 * src_stride;
+
       height = h;
       PROCESS_ROW_FOR_VERTICAL_FILTER