Index: silk/A2NLSF.c |
diff --git a/silk/A2NLSF.c b/silk/A2NLSF.c |
index 74b1b95d6f3eba9ae49e77af140a1887777d9351..b6e9e5ffccaa05995dfdbfe600166865d899013e 100644 |
--- a/silk/A2NLSF.c |
+++ b/silk/A2NLSF.c |
@@ -71,8 +71,23 @@ static OPUS_INLINE opus_int32 silk_A2NLSF_eval_poly( /* return the polynomial ev |
y32 = p[ dd ]; /* Q16 */ |
x_Q16 = silk_LSHIFT( x, 4 ); |
- for( n = dd - 1; n >= 0; n-- ) { |
- y32 = silk_SMLAWW( p[ n ], y32, x_Q16 ); /* Q16 */ |
+ |
+ if ( opus_likely( 8 == dd ) ) |
+ { |
+ y32 = silk_SMLAWW( p[ 7 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 6 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 5 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 4 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 3 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 2 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 1 ], y32, x_Q16 ); |
+ y32 = silk_SMLAWW( p[ 0 ], y32, x_Q16 ); |
+ } |
+ else |
+ { |
+ for( n = dd - 1; n >= 0; n-- ) { |
+ y32 = silk_SMLAWW( p[ n ], y32, x_Q16 ); /* Q16 */ |
+ } |
} |
return y32; |
} |