vp9: neon: optimise loads in horiz convolve functions Loading to single lanes in multiple registers is expensive since it requires a read and write of each register which saturates the register file access. Loading to single registers followed by a separate transpose reduces this pressure. Change-Id: I4cc35887ddbca80e5e635b50d2b1d158de9668ee
diff --git a/vp9/common/arm/neon/vp9_convolve8_avg_neon.asm b/vp9/common/arm/neon/vp9_convolve8_avg_neon.asm index 15039e2..b125f6e 100644 --- a/vp9/common/arm/neon/vp9_convolve8_avg_neon.asm +++ b/vp9/common/arm/neon/vp9_convolve8_avg_neon.asm
@@ -82,22 +82,22 @@ mov r10, r6 ; w loop counter loop_horiz - vld4.u8 {d24[0], d25[0], d26[0], d27[0]}, [r0]! - vld4.u8 {d24[4], d25[4], d26[4], d27[4]}, [r0]! + vld1.8 {d24}, [r0]! vld3.u8 {d28[0], d29[0], d30[0]}, [r0], r9 - vld4.u8 {d24[1], d25[1], d26[1], d27[1]}, [r0]! - vld4.u8 {d24[5], d25[5], d26[5], d27[5]}, [r0]! + vld1.8 {d25}, [r0]! vld3.u8 {d28[1], d29[1], d30[1]}, [r0], r9 - vld4.u8 {d24[2], d25[2], d26[2], d27[2]}, [r0]! - vld4.u8 {d24[6], d25[6], d26[6], d27[6]}, [r0]! + vld1.8 {d26}, [r0]! vld3.u8 {d28[2], d29[2], d30[2]}, [r0], r9 - vld4.u8 {d24[3], d25[3], d26[3], d27[3]}, [r0]! - vld4.u8 {d24[7], d25[7], d26[7], d27[7]}, [r0]! + vld1.8 {d27}, [r0]! vld3.u8 {d28[3], d29[3], d30[3]}, [r0], r8 + vtrn.16 q12, q13 + vtrn.8 d24, d25 + vtrn.8 d26, d27 + ; extract to s16 vmovl.u8 q8, d24 vmovl.u8 q9, d25
diff --git a/vp9/common/arm/neon/vp9_convolve8_neon.asm b/vp9/common/arm/neon/vp9_convolve8_neon.asm index 842c73c..d2cc3f8 100644 --- a/vp9/common/arm/neon/vp9_convolve8_neon.asm +++ b/vp9/common/arm/neon/vp9_convolve8_neon.asm
@@ -82,22 +82,22 @@ mov r10, r6 ; w loop counter loop_horiz - vld4.u8 {d24[0], d25[0], d26[0], d27[0]}, [r0]! - vld4.u8 {d24[4], d25[4], d26[4], d27[4]}, [r0]! + vld1.8 {d24}, [r0]! vld3.u8 {d28[0], d29[0], d30[0]}, [r0], r9 - vld4.u8 {d24[1], d25[1], d26[1], d27[1]}, [r0]! - vld4.u8 {d24[5], d25[5], d26[5], d27[5]}, [r0]! + vld1.8 {d25}, [r0]! vld3.u8 {d28[1], d29[1], d30[1]}, [r0], r9 - vld4.u8 {d24[2], d25[2], d26[2], d27[2]}, [r0]! - vld4.u8 {d24[6], d25[6], d26[6], d27[6]}, [r0]! + vld1.8 {d26}, [r0]! vld3.u8 {d28[2], d29[2], d30[2]}, [r0], r9 - vld4.u8 {d24[3], d25[3], d26[3], d27[3]}, [r0]! - vld4.u8 {d24[7], d25[7], d26[7], d27[7]}, [r0]! + vld1.8 {d27}, [r0]! vld3.u8 {d28[3], d29[3], d30[3]}, [r0], r8 + vtrn.16 q12, q13 + vtrn.8 d24, d25 + vtrn.8 d26, d27 + ; extract to s16 vmovl.u8 q8, d24 vmovl.u8 q9, d25