mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	
							parent
							
								
									fdc1391b19
								
							
						
					
					
						commit
						2bef057428
					
				
					 1 changed files with 11 additions and 4 deletions
				
			
		| 
						 | 
					@ -6,6 +6,13 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <smmintrin.h>
 | 
					#include <smmintrin.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define spa_read_unaligned(ptr, type) \
 | 
				
			||||||
 | 
					__extension__ ({ \
 | 
				
			||||||
 | 
						__typeof__(type) _val; \
 | 
				
			||||||
 | 
						memcpy(&_val, (ptr), sizeof(_val)); \
 | 
				
			||||||
 | 
						_val; \
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
conv_s24_to_f32d_1s_sse41(void *data, void * SPA_RESTRICT dst[], const void * SPA_RESTRICT src,
 | 
					conv_s24_to_f32d_1s_sse41(void *data, void * SPA_RESTRICT dst[], const void * SPA_RESTRICT src,
 | 
				
			||||||
		uint32_t n_channels, uint32_t n_samples)
 | 
							uint32_t n_channels, uint32_t n_samples)
 | 
				
			||||||
| 
						 | 
					@ -22,10 +29,10 @@ conv_s24_to_f32d_1s_sse41(void *data, void * SPA_RESTRICT dst[], const void * SP
 | 
				
			||||||
		unrolled = 0;
 | 
							unrolled = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(n = 0; n < unrolled; n += 4) {
 | 
						for(n = 0; n < unrolled; n += 4) {
 | 
				
			||||||
		in = _mm_insert_epi32(in, *((uint32_t*)&s[0 * n_channels]), 0);
 | 
							in = _mm_insert_epi32(in, spa_read_unaligned(&s[0 * n_channels], uint32_t), 0);
 | 
				
			||||||
		in = _mm_insert_epi32(in, *((uint32_t*)&s[1 * n_channels]), 1);
 | 
							in = _mm_insert_epi32(in, spa_read_unaligned(&s[1 * n_channels], uint32_t), 1);
 | 
				
			||||||
		in = _mm_insert_epi32(in, *((uint32_t*)&s[2 * n_channels]), 2);
 | 
							in = _mm_insert_epi32(in, spa_read_unaligned(&s[2 * n_channels], uint32_t), 2);
 | 
				
			||||||
		in = _mm_insert_epi32(in, *((uint32_t*)&s[3 * n_channels]), 3);
 | 
							in = _mm_insert_epi32(in, spa_read_unaligned(&s[3 * n_channels], uint32_t), 3);
 | 
				
			||||||
		in = _mm_slli_epi32(in, 8);
 | 
							in = _mm_slli_epi32(in, 8);
 | 
				
			||||||
		in = _mm_srai_epi32(in, 8);
 | 
							in = _mm_srai_epi32(in, 8);
 | 
				
			||||||
		out = _mm_cvtepi32_ps(in);
 | 
							out = _mm_cvtepi32_ps(in);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue