lossless audio dsp: unroll
authorChristophe Gisquet <christophe.gisquet@gmail.com>
Sun, 1 May 2016 13:33:47 +0000 (15:33 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Wed, 11 May 2016 19:03:07 +0000 (21:03 +0200)
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@niedermayer.cc>
libavcodec/lossless_audiodsp.c

index ea0568e..e3ea8e1 100644 (file)
@@ -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;
 }