[FFmpeg-devel] [PATCH 6/6] lossless audio dsp: unroll

Christophe Gisquet christophe.gisquet at gmail.com
Mon Apr 18 15:07:31 CEST 2016


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

For int32 version: 72 -> 57c.
---
 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 55495d0..17a61cd 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(int32_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;
 }
 
-- 
2.8.1



More information about the ffmpeg-devel mailing list