From df7ab43087a7713a60b8ef4721d42dec22f2a222 Mon Sep 17 00:00:00 2001
From: Jean-Marc Valin <Jean-Marc.Valin@csiro.au>
Date: Wed, 26 Mar 2008 18:03:22 +1100
Subject: [PATCH] Making it obvious to the compiler how to generate a dual-MAC
 in mix_pitch_and_residual()

---
 libcelt/vq.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/libcelt/vq.c b/libcelt/vq.c
index 9092c62c6..cdba91e56 100644
--- a/libcelt/vq.c
+++ b/libcelt/vq.c
@@ -66,13 +66,14 @@ static void mix_pitch_and_residual(int * restrict iy, celt_norm_t * restrict X,
       y[i] = SHL16(iy[i],yshift);
    
    Ryp = 0;
-   for (i=0;i<N;i++)
-      Ryp = MAC16_16(Ryp,y[i],P[i]);
-
    Ryy = 0;
+   /* If this doesn't generate a dual MAC (on supported archs), fire the compiler guy */
    for (i=0;i<N;i++)
-      Ryy = MAC16_16(Ryy, y[i],y[i]);
-
+   {
+      Ryp = MAC16_16(Ryp, y[i], P[i]);
+      Ryy = MAC16_16(Ryy, y[i], y[i]);
+   }
+   
    /* g = (sqrt(Ryp^2 + Ryy - Rpp*Ryy)-Ryp)/Ryy */
    g = MULT16_32_Q15(
             celt_sqrt(MULT16_16(ROUND16(Ryp,14),ROUND16(Ryp,14)) + Ryy -
-- 
GitLab