shithub: libsamplerate

Download patch

ref: a3cfc1510d8caa091bcfec5f9ab8892ae71638c3
parent: ee04582dff89592efbd9b2051f061ffc7f63e8cc
author: Alexander Grund <[email protected]>
date: Tue Aug 27 05:21:45 EDT 2019

Replace manually unrolled loops by regular ones

--- a/src/src_sinc.c
+++ b/src/src_sinc.c
@@ -453,8 +453,8 @@
 			icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ;
 			assert (data_index >= 0 && data_index + 1 < filter->b_len) ;
 			assert (data_index + 1 < filter->b_end) ;
-			left [0] += icoeff * filter->buffer [data_index] ;
-			left [1] += icoeff * filter->buffer [data_index + 1] ;
+			for (int ch = 0; ch < 2; ch++)
+				left [ch] += icoeff * filter->buffer [data_index + ch] ;
 			} ;
 
 		filter_index -= increment ;
@@ -476,8 +476,8 @@
 		icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ;
 		assert (data_index >= 0 && data_index + 1 < filter->b_len) ;
 		assert (data_index + 1 < filter->b_end) ;
-		right [0] += icoeff * filter->buffer [data_index] ;
-		right [1] += icoeff * filter->buffer [data_index + 1] ;
+		for (int ch = 0; ch < 2; ch++)
+			right [ch] += icoeff * filter->buffer [data_index + ch] ;
 
 		filter_index -= increment ;
 		data_index = data_index - 2 ;
@@ -484,8 +484,8 @@
 		}
 	while (filter_index > MAKE_INCREMENT_T (0)) ;
 
-	output [0] = (float) (scale * (left [0] + right [0])) ;
-	output [1] = (float) (scale * (left [1] + right [1])) ;
+	for (int ch = 0; ch < 2; ch++)
+		output [ch] = (float) (scale * (left [ch] + right [ch])) ;
 } /* calc_output_stereo */
 
 static int
@@ -604,10 +604,8 @@
 			icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ;
 			assert (data_index >= 0 && data_index + 3 < filter->b_len) ;
 			assert (data_index + 3 < filter->b_end) ;
-			left [0] += icoeff * filter->buffer [data_index] ;
-			left [1] += icoeff * filter->buffer [data_index + 1] ;
-			left [2] += icoeff * filter->buffer [data_index + 2] ;
-			left [3] += icoeff * filter->buffer [data_index + 3] ;
+			for (int ch = 0; ch < 4; ch++)
+				left [ch] += icoeff * filter->buffer [data_index + ch] ;
 			} ;
 
 		filter_index -= increment ;
@@ -629,20 +627,17 @@
 		icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ;
 		assert (data_index >= 0 && data_index + 3 < filter->b_len) ;
 		assert (data_index + 3 < filter->b_end) ;
-		right [0] += icoeff * filter->buffer [data_index] ;
-		right [1] += icoeff * filter->buffer [data_index + 1] ;
-		right [2] += icoeff * filter->buffer [data_index + 2] ;
-		right [3] += icoeff * filter->buffer [data_index + 3] ;
+		for (int ch = 0; ch < 4; ch++)
+			right [ch] += icoeff * filter->buffer [data_index + ch] ;
 
+
 		filter_index -= increment ;
 		data_index = data_index - 4 ;
 		}
 	while (filter_index > MAKE_INCREMENT_T (0)) ;
 
-	output [0] = (float) (scale * (left [0] + right [0])) ;
-	output [1] = (float) (scale * (left [1] + right [1])) ;
-	output [2] = (float) (scale * (left [2] + right [2])) ;
-	output [3] = (float) (scale * (left [3] + right [3])) ;
+	for (int ch = 0; ch < 4; ch++)
+		output [ch] = (float) (scale * (left [ch] + right [ch])) ;
 } /* calc_output_quad */
 
 static int
@@ -761,12 +756,8 @@
 			icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ;
 			assert (data_index >= 0 && data_index + 5 < filter->b_len) ;
 			assert (data_index + 5 < filter->b_end) ;
-			left [0] += icoeff * filter->buffer [data_index] ;
-			left [1] += icoeff * filter->buffer [data_index + 1] ;
-			left [2] += icoeff * filter->buffer [data_index + 2] ;
-			left [3] += icoeff * filter->buffer [data_index + 3] ;
-			left [4] += icoeff * filter->buffer [data_index + 4] ;
-			left [5] += icoeff * filter->buffer [data_index + 5] ;
+			for (int ch = 0; ch < 6; ch++)
+				left [ch] += icoeff * filter->buffer [data_index + ch] ;
 			} ;
 
 		filter_index -= increment ;
@@ -788,12 +779,8 @@
 		icoeff = filter->coeffs [indx] + fraction * (filter->coeffs [indx + 1] - filter->coeffs [indx]) ;
 		assert (data_index >= 0 && data_index + 5 < filter->b_len) ;
 		assert (data_index + 5 < filter->b_end) ;
-		right [0] += icoeff * filter->buffer [data_index] ;
-		right [1] += icoeff * filter->buffer [data_index + 1] ;
-		right [2] += icoeff * filter->buffer [data_index + 2] ;
-		right [3] += icoeff * filter->buffer [data_index + 3] ;
-		right [4] += icoeff * filter->buffer [data_index + 4] ;
-		right [5] += icoeff * filter->buffer [data_index + 5] ;
+		for (int ch = 0; ch < 6; ch++)
+			right [ch] += icoeff * filter->buffer [data_index + ch] ;
 
 		filter_index -= increment ;
 		data_index = data_index - 6 ;
@@ -800,12 +787,8 @@
 		}
 	while (filter_index > MAKE_INCREMENT_T (0)) ;
 
-	output [0] = (float) (scale * (left [0] + right [0])) ;
-	output [1] = (float) (scale * (left [1] + right [1])) ;
-	output [2] = (float) (scale * (left [2] + right [2])) ;
-	output [3] = (float) (scale * (left [3] + right [3])) ;
-	output [4] = (float) (scale * (left [4] + right [4])) ;
-	output [5] = (float) (scale * (left [5] + right [5])) ;
+	for (int ch = 0; ch < 6; ch++)
+		output [ch] = (float) (scale * (left [ch] + right [ch])) ;
 } /* calc_output_hex */
 
 static int