diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-11-18 07:10:59 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-11-18 07:10:59 +0300 |
commit | d4b04d3275af9938c92a386fc9178977f293362c (patch) | |
tree | 47ba2bc46118a2a2551c7ee093d21782b995876d | |
parent | b2cfd87783713793f4a170bb5a13a1470896436e (diff) |
Speed up silk_warped_autocorrelation_FLP()
Reducing the dependency chain between tmp1 and tmp2 at the
cost of an extra multiply.
-rw-r--r-- | silk/float/warped_autocorrelation_FLP.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/silk/float/warped_autocorrelation_FLP.c b/silk/float/warped_autocorrelation_FLP.c index 09186e73..116dab92 100644 --- a/silk/float/warped_autocorrelation_FLP.c +++ b/silk/float/warped_autocorrelation_FLP.c @@ -54,11 +54,13 @@ void silk_warped_autocorrelation_FLP( /* Loop over allpass sections */ for( i = 0; i < order; i += 2 ) { /* Output of allpass section */ - tmp2 = state[ i ] + warping * ( state[ i + 1 ] - tmp1 ); + /* We voluntarily use two multiples instead of factoring the expression to + reduce the length of the dependency chain (tmp1->tmp2->tmp1... ). */ + tmp2 = state[ i ] + warping * state[ i + 1 ] - warping * tmp1; state[ i ] = tmp1; C[ i ] += state[ 0 ] * tmp1; /* Output of allpass section */ - tmp1 = state[ i + 1 ] + warping * ( state[ i + 2 ] - tmp2 ); + tmp1 = state[ i + 1 ] + warping * state[ i + 2 ] - warping * tmp2; state[ i + 1 ] = tmp2; C[ i + 1 ] += state[ 0 ] * tmp2; } |