1
0
Fork 0

arm: vp9mc: Calculate less unused data in the 4 pixel wide horizontal filter

Before:                    Cortex A7      A8     A9     A53
vp9_put_8tap_smooth_4h_neon:   378.1   273.2  340.7   229.5
After:
vp9_put_8tap_smooth_4h_neon:   352.1   222.2  290.5   229.5

This is cherrypicked from libav commit
fea92a4b57.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2016-12-17 13:09:50 +02:00
parent ac6cb8ae5b
commit bff0771590
1 changed files with 22 additions and 11 deletions

View File

@ -209,7 +209,7 @@ endfunc
@ Extract a vector from src1-src2 and src4-src5 (src1-src3 and src4-src6
@ for size >= 16), and multiply-accumulate into dst1 and dst3 (or
@ dst1-dst2 and dst3-dst4 for size >= 16)
.macro extmla dst1, dst2, dst3, dst4, src1, src2, src3, src4, src5, src6, offset, size
.macro extmla dst1, dst2, dst3, dst4, dst1d, dst3d, src1, src2, src3, src4, src5, src6, offset, size
vext.8 q14, \src1, \src2, #(2*\offset)
vext.8 q15, \src4, \src5, #(2*\offset)
.if \size >= 16
@ -219,14 +219,17 @@ endfunc
vext.8 q6, \src5, \src6, #(2*\offset)
vmla_lane \dst2, q5, \offset
vmla_lane \dst4, q6, \offset
.else
.elseif \size == 8
vmla_lane \dst1, q14, \offset
vmla_lane \dst3, q15, \offset
.else
vmla_lane \dst1d, d28, \offset
vmla_lane \dst3d, d30, \offset
.endif
.endm
@ The same as above, but don't accumulate straight into the
@ destination, but use a temp register and accumulate with saturation.
.macro extmulqadd dst1, dst2, dst3, dst4, src1, src2, src3, src4, src5, src6, offset, size
.macro extmulqadd dst1, dst2, dst3, dst4, dst1d, dst3d, src1, src2, src3, src4, src5, src6, offset, size
vext.8 q14, \src1, \src2, #(2*\offset)
vext.8 q15, \src4, \src5, #(2*\offset)
.if \size >= 16
@ -236,16 +239,24 @@ endfunc
vext.8 q6, \src5, \src6, #(2*\offset)
vmul_lane q5, q5, \offset
vmul_lane q6, q6, \offset
.else
.elseif \size == 8
vmul_lane q14, q14, \offset
vmul_lane q15, q15, \offset
.else
vmul_lane d28, d28, \offset
vmul_lane d30, d30, \offset
.endif
.if \size == 4
vqadd.s16 \dst1d, \dst1d, d28
vqadd.s16 \dst3d, \dst3d, d30
.else
vqadd.s16 \dst1, \dst1, q14
vqadd.s16 \dst3, \dst3, q15
.if \size >= 16
vqadd.s16 \dst2, \dst2, q5
vqadd.s16 \dst4, \dst4, q6
.endif
.endif
.endm
@ -308,13 +319,13 @@ function \type\()_8tap_\size\()h_\idx1\idx2
vmul.s16 q2, q9, d0[0]
vmul.s16 q4, q12, d0[0]
.endif
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 1, \size
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 2, \size
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, \idx1, \size
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 5, \size
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 6, \size
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 7, \size
extmulqadd q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, \idx2, \size
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 1, \size
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 2, \size
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, \idx1, \size
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 5, \size
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 6, \size
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 7, \size
extmulqadd q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, \idx2, \size
@ Round, shift and saturate
vqrshrun.s16 d2, q1, #7