mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-29 02:42:21 +00:00
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:
parent
ac6cb8ae5b
commit
bff0771590
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user