[FFmpeg-cvslog] lossless audio dsp: unroll

Christophe Gisquet git at videolan.org
Wed May 11 21:09:38 CEST 2016


ffmpeg | branch: master | Christophe Gisquet <christophe.gisquet at gmail.com> | Sun May  1 15:33:47 2016 +0200| [9ca16bdd3f0461b40d369080647747ae70715daf] | committer: Michael Niedermayer

lossless audio dsp: unroll

The loops are guaranteed to be at least multiples of 8, so this
unrolling is safe but allows exploiting execution ports.

For int32 version: 68 -> 58c.

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9ca16bdd3f0461b40d369080647747ae70715daf
---

 libavcodec/lossless_audiodsp.c |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/libavcodec/lossless_audiodsp.c b/libavcodec/lossless_audiodsp.c
index ea0568e..e3ea8e1 100644
--- a/libavcodec/lossless_audiodsp.c
+++ b/libavcodec/lossless_audiodsp.c
@@ -29,10 +29,12 @@ static int32_t scalarproduct_and_madd_int16_c(int16_t *v1, const int16_t *v2,
 {
     int res = 0;
 
-    while (order--) {
+    do {
         res   += *v1 * *v2++;
         *v1++ += mul * *v3++;
-    }
+        res   += *v1 * *v2++;
+        *v1++ += mul * *v3++;
+    } while (order-=2);
     return res;
 }
 
@@ -42,10 +44,12 @@ static int32_t scalarproduct_and_madd_int32_c(int16_t *v1, const int32_t *v2,
 {
     int res = 0;
 
-    while (order--) {
+    do {
+        res   += *v1 * *v2++;
+        *v1++ += mul * *v3++;
         res   += *v1 * *v2++;
         *v1++ += mul * *v3++;
-    }
+    } while (order-=2);
     return res;
 }
 



More information about the ffmpeg-cvslog mailing list