@@ -222,10 +222,21 @@ static int pcm_convert_s16_to_s24(const struct cir_buf_source *source,
222222 n = MIN (n , nmax );
223223 nmax = cir_buf_bytes_without_wrap (dst , sink -> buf_end ) >> BYTES_TO_S32_SAMPLES ;
224224 n = MIN (n , nmax );
225- for (i = 0 ; i < n ; i ++ ) {
226- * dst = * src << 8 ;
227- src ++ ;
228- dst ++ ;
225+ size_t n8 = n & ~7 ;
226+ for (i = 0 ; i < n8 ; i += 8 ) {
227+ dst [0 ] = (int32_t )src [0 ] << 8 ;
228+ dst [1 ] = (int32_t )src [1 ] << 8 ;
229+ dst [2 ] = (int32_t )src [2 ] << 8 ;
230+ dst [3 ] = (int32_t )src [3 ] << 8 ;
231+ dst [4 ] = (int32_t )src [4 ] << 8 ;
232+ dst [5 ] = (int32_t )src [5 ] << 8 ;
233+ dst [6 ] = (int32_t )src [6 ] << 8 ;
234+ dst [7 ] = (int32_t )src [7 ] << 8 ;
235+ src += 8 ;
236+ dst += 8 ;
237+ }
238+ for (; i < n ; i ++ ) {
239+ * dst ++ = (int32_t )* src ++ << 8 ;
229240 }
230241 }
231242
@@ -249,10 +260,17 @@ static int pcm_convert_s24_to_s16(const struct cir_buf_source *source,
249260 n = MIN (n , nmax );
250261 nmax = cir_buf_bytes_without_wrap (dst , sink -> buf_end ) >> BYTES_TO_S16_SAMPLES ;
251262 n = MIN (n , nmax );
252- for (i = 0 ; i < n ; i ++ ) {
253- * dst = sat_int16 (Q_SHIFT_RND (sign_extend_s24 (* src ), 23 , 15 ));
254- src ++ ;
255- dst ++ ;
263+ size_t n4 = n & ~3 ;
264+ for (i = 0 ; i < n4 ; i += 4 ) {
265+ dst [0 ] = sat_int16 (Q_SHIFT_RND (sign_extend_s24 (src [0 ]), 23 , 15 ));
266+ dst [1 ] = sat_int16 (Q_SHIFT_RND (sign_extend_s24 (src [1 ]), 23 , 15 ));
267+ dst [2 ] = sat_int16 (Q_SHIFT_RND (sign_extend_s24 (src [2 ]), 23 , 15 ));
268+ dst [3 ] = sat_int16 (Q_SHIFT_RND (sign_extend_s24 (src [3 ]), 23 , 15 ));
269+ src += 4 ;
270+ dst += 4 ;
271+ }
272+ for (; i < n ; i ++ ) {
273+ * dst ++ = sat_int16 (Q_SHIFT_RND (sign_extend_s24 (* src ++ ), 23 , 15 ));
256274 }
257275 }
258276
@@ -280,10 +298,21 @@ static int pcm_convert_s16_to_s32(const struct cir_buf_source *source,
280298 n = MIN (n , nmax );
281299 nmax = cir_buf_bytes_without_wrap (dst , sink -> buf_end ) >> BYTES_TO_S32_SAMPLES ;
282300 n = MIN (n , nmax );
283- for (i = 0 ; i < n ; i ++ ) {
284- * dst = * src << 16 ;
285- src ++ ;
286- dst ++ ;
301+ size_t n8 = n & ~7 ;
302+ for (i = 0 ; i < n8 ; i += 8 ) {
303+ dst [0 ] = (int32_t )src [0 ] << 16 ;
304+ dst [1 ] = (int32_t )src [1 ] << 16 ;
305+ dst [2 ] = (int32_t )src [2 ] << 16 ;
306+ dst [3 ] = (int32_t )src [3 ] << 16 ;
307+ dst [4 ] = (int32_t )src [4 ] << 16 ;
308+ dst [5 ] = (int32_t )src [5 ] << 16 ;
309+ dst [6 ] = (int32_t )src [6 ] << 16 ;
310+ dst [7 ] = (int32_t )src [7 ] << 16 ;
311+ src += 8 ;
312+ dst += 8 ;
313+ }
314+ for (; i < n ; i ++ ) {
315+ * dst ++ = (int32_t )* src ++ << 16 ;
287316 }
288317 }
289318
@@ -307,10 +336,17 @@ static int pcm_convert_s32_to_s16(const struct cir_buf_source *source,
307336 n = MIN (n , nmax );
308337 nmax = cir_buf_bytes_without_wrap (dst , sink -> buf_end ) >> BYTES_TO_S16_SAMPLES ;
309338 n = MIN (n , nmax );
310- for (i = 0 ; i < n ; i ++ ) {
311- * dst = sat_int16 (Q_SHIFT_RND (* src , 31 , 15 ));
312- src ++ ;
313- dst ++ ;
339+ size_t n4 = n & ~3 ;
340+ for (i = 0 ; i < n4 ; i += 4 ) {
341+ dst [0 ] = sat_int16 (Q_SHIFT_RND (src [0 ], 31 , 15 ));
342+ dst [1 ] = sat_int16 (Q_SHIFT_RND (src [1 ], 31 , 15 ));
343+ dst [2 ] = sat_int16 (Q_SHIFT_RND (src [2 ], 31 , 15 ));
344+ dst [3 ] = sat_int16 (Q_SHIFT_RND (src [3 ], 31 , 15 ));
345+ src += 4 ;
346+ dst += 4 ;
347+ }
348+ for (; i < n ; i ++ ) {
349+ * dst ++ = sat_int16 (Q_SHIFT_RND (* src ++ , 31 , 15 ));
314350 }
315351 }
316352
@@ -338,10 +374,21 @@ static int pcm_convert_s24_to_s32(const struct cir_buf_source *source,
338374 n = MIN (n , nmax );
339375 nmax = cir_buf_bytes_without_wrap (dst , sink -> buf_end ) >> BYTES_TO_S32_SAMPLES ;
340376 n = MIN (n , nmax );
341- for (i = 0 ; i < n ; i ++ ) {
342- * dst = * src << 8 ;
343- src ++ ;
344- dst ++ ;
377+ size_t n8 = n & ~7 ;
378+ for (i = 0 ; i < n8 ; i += 8 ) {
379+ dst [0 ] = (int32_t )src [0 ] << 8 ;
380+ dst [1 ] = (int32_t )src [1 ] << 8 ;
381+ dst [2 ] = (int32_t )src [2 ] << 8 ;
382+ dst [3 ] = (int32_t )src [3 ] << 8 ;
383+ dst [4 ] = (int32_t )src [4 ] << 8 ;
384+ dst [5 ] = (int32_t )src [5 ] << 8 ;
385+ dst [6 ] = (int32_t )src [6 ] << 8 ;
386+ dst [7 ] = (int32_t )src [7 ] << 8 ;
387+ src += 8 ;
388+ dst += 8 ;
389+ }
390+ for (; i < n ; i ++ ) {
391+ * dst ++ = (int32_t )* src ++ << 8 ;
345392 }
346393 }
347394
@@ -365,10 +412,17 @@ static int pcm_convert_s32_to_s24(const struct cir_buf_source *source,
365412 n = MIN (n , nmax );
366413 nmax = cir_buf_bytes_without_wrap (dst , sink -> buf_end ) >> BYTES_TO_S32_SAMPLES ;
367414 n = MIN (n , nmax );
368- for (i = 0 ; i < n ; i ++ ) {
369- * dst = sat_int24 (Q_SHIFT_RND (* src , 31 , 23 ));
370- src ++ ;
371- dst ++ ;
415+ size_t n4 = n & ~3 ;
416+ for (i = 0 ; i < n4 ; i += 4 ) {
417+ dst [0 ] = sat_int24 (Q_SHIFT_RND (src [0 ], 31 , 23 ));
418+ dst [1 ] = sat_int24 (Q_SHIFT_RND (src [1 ], 31 , 23 ));
419+ dst [2 ] = sat_int24 (Q_SHIFT_RND (src [2 ], 31 , 23 ));
420+ dst [3 ] = sat_int24 (Q_SHIFT_RND (src [3 ], 31 , 23 ));
421+ src += 4 ;
422+ dst += 4 ;
423+ }
424+ for (; i < n ; i ++ ) {
425+ * dst ++ = sat_int24 (Q_SHIFT_RND (* src ++ , 31 , 23 ));
372426 }
373427 }
374428
0 commit comments