[FFmpeg-cvslog] SBR DSP: unroll sum_square
Christophe GISQUET
git at videolan.org
Thu Mar 8 03:10:37 CET 2012
ffmpeg | branch: master | Christophe GISQUET <christophe.gisquet at gmail.com> | Wed Feb 22 17:48:59 2012 +0100| [dabf8dd34afdbb6dc9dc7603d7a5228fc67de4c8] | committer: Ronald S. Bultje
SBR DSP: unroll sum_square
The length is even, so some unrolling can be performed. Timings are for x86:
- 32bits: 102c -> 82c
- 64bits: 82c -> 69c
Signed-off-by: Ronald S. Bultje <rsbultje at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dabf8dd34afdbb6dc9dc7603d7a5228fc67de4c8
---
libavcodec/sbrdsp.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/libavcodec/sbrdsp.c b/libavcodec/sbrdsp.c
index f942759..8c88fb3 100644
--- a/libavcodec/sbrdsp.c
+++ b/libavcodec/sbrdsp.c
@@ -35,13 +35,18 @@ static void sbr_sum64x5_c(float *z)
static float sbr_sum_square_c(float (*x)[2], int n)
{
- float sum = 0.0f;
+ float sum0 = 0.0f, sum1 = 0.0f;
int i;
- for (i = 0; i < n; i++)
- sum += x[i][0] * x[i][0] + x[i][1] * x[i][1];
+ for (i = 0; i < n; i += 2)
+ {
+ sum0 += x[i + 0][0] * x[i + 0][0];
+ sum1 += x[i + 0][1] * x[i + 0][1];
+ sum0 += x[i + 1][0] * x[i + 1][0];
+ sum1 += x[i + 1][1] * x[i + 1][1];
+ }
- return sum;
+ return sum0 + sum1;
}
static void sbr_neg_odd_64_c(float *x)
More information about the ffmpeg-cvslog
mailing list