You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/aarch64/ac3dsp_neon.S: Optimize ac3_sum_square_butterfly_int32_neon
Instead of calculating a^2, b^2, (a+b)^2 and (a-b)^2, calculate only a^2, b^2 and 2*a*b in each iteration and derive the latter parts from these three at the end. Before and after: A78 ac3_sum_square_bufferfly_int32_neon: 484.8 ( 2.00x) ac3_sum_square_bufferfly_int32_neon: 468.2 ( 2.08x) A72 ac3_sum_square_bufferfly_int32_neon: 793.6 ( 1.26x) ac3_sum_square_bufferfly_int32_neon: 527.3 ( 1.92x) Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
committed by
Martin Storsjö
parent
38929b824b
commit
e8d4c55987
@@ -69,21 +69,20 @@ function ff_ac3_sum_square_butterfly_int32_neon, export=1
|
||||
movi v0.2d, #0
|
||||
movi v1.2d, #0
|
||||
movi v2.2d, #0
|
||||
movi v3.2d, #0
|
||||
1: ld1 {v4.2s}, [x1], #8
|
||||
ld1 {v5.2s}, [x2], #8
|
||||
add v6.2s, v4.2s, v5.2s
|
||||
sub v7.2s, v4.2s, v5.2s
|
||||
smlal v0.2d, v4.2s, v4.2s
|
||||
smlal v1.2d, v5.2s, v5.2s
|
||||
smlal v2.2d, v6.2s, v6.2s
|
||||
smlal v3.2d, v7.2s, v7.2s
|
||||
subs w3, w3, #2
|
||||
smlal v0.2d, v4.2s, v4.2s // sum of a^2
|
||||
smlal v1.2d, v5.2s, v5.2s // sum of b^2
|
||||
sqdmlal v2.2d, v4.2s, v5.2s // sum of 2ab
|
||||
b.gt 1b
|
||||
addp d0, v0.2d
|
||||
addp d1, v1.2d
|
||||
addp d2, v2.2d
|
||||
addp d3, v3.2d
|
||||
sub d3, d0, d2 // a^2 + b^2 - 2ab
|
||||
add d2, d0, d2
|
||||
add d3, d3, d1 // a^2 + b^2 + 2ab
|
||||
add d2, d2, d1
|
||||
st1 {v0.1d-v3.1d}, [x0]
|
||||
ret
|
||||
endfunc
|
||||
|
Reference in New Issue
Block a user