mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	x86: only install some functions when SSE2
Remap and volume functions use SSE2 instructions so only install them when SSE2 is present.
This commit is contained in:
		
							parent
							
								
									812be32783
								
							
						
					
					
						commit
						b5ac3839e1
					
				
					 2 changed files with 11 additions and 8 deletions
				
			
		| 
						 | 
					@ -102,7 +102,7 @@
 | 
				
			||||||
                "4:                             \n\t"
 | 
					                "4:                             \n\t"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined (__i386__) || defined (__amd64__)
 | 
					#if defined (__i386__) || defined (__amd64__)
 | 
				
			||||||
static void remap_mono_to_stereo_sse (pa_remap_t *m, void *dst, const void *src, unsigned n) {
 | 
					static void remap_mono_to_stereo_sse2 (pa_remap_t *m, void *dst, const void *src, unsigned n) {
 | 
				
			||||||
    pa_reg_x86 temp, temp2;
 | 
					    pa_reg_x86 temp, temp2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (*m->format) {
 | 
					    switch (*m->format) {
 | 
				
			||||||
| 
						 | 
					@ -132,7 +132,7 @@ static void remap_mono_to_stereo_sse (pa_remap_t *m, void *dst, const void *src,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* set the function that will execute the remapping based on the matrices */
 | 
					/* set the function that will execute the remapping based on the matrices */
 | 
				
			||||||
static void init_remap_sse (pa_remap_t *m) {
 | 
					static void init_remap_sse2 (pa_remap_t *m) {
 | 
				
			||||||
    unsigned n_oc, n_ic;
 | 
					    unsigned n_oc, n_ic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    n_oc = m->o_ss->channels;
 | 
					    n_oc = m->o_ss->channels;
 | 
				
			||||||
| 
						 | 
					@ -141,7 +141,7 @@ static void init_remap_sse (pa_remap_t *m) {
 | 
				
			||||||
    /* find some common channel remappings, fall back to full matrix operation. */
 | 
					    /* find some common channel remappings, fall back to full matrix operation. */
 | 
				
			||||||
    if (n_ic == 1 && n_oc == 2 &&
 | 
					    if (n_ic == 1 && n_oc == 2 &&
 | 
				
			||||||
            m->map_table_f[0][0] >= 1.0 && m->map_table_f[1][0] >= 1.0) {
 | 
					            m->map_table_f[0][0] >= 1.0 && m->map_table_f[1][0] >= 1.0) {
 | 
				
			||||||
        m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_sse;
 | 
					        m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_sse2;
 | 
				
			||||||
        pa_log_info("Using SSE mono to stereo remapping");
 | 
					        pa_log_info("Using SSE mono to stereo remapping");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -151,6 +151,7 @@ void pa_remap_func_init_sse (pa_cpu_x86_flag_t flags) {
 | 
				
			||||||
#if defined (__i386__) || defined (__amd64__)
 | 
					#if defined (__i386__) || defined (__amd64__)
 | 
				
			||||||
    pa_log_info("Initialising SSE optimized remappers.");
 | 
					    pa_log_info("Initialising SSE optimized remappers.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_set_init_remap_func ((pa_init_remap_func_t) init_remap_sse);
 | 
					    if (flags & PA_CPU_X86_SSE2)
 | 
				
			||||||
 | 
					      pa_set_init_remap_func ((pa_init_remap_func_t) init_remap_sse2);
 | 
				
			||||||
#endif /* defined (__i386__) || defined (__amd64__) */
 | 
					#endif /* defined (__i386__) || defined (__amd64__) */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@
 | 
				
			||||||
      " por %%xmm5, "#s2"            \n\t"
 | 
					      " por %%xmm5, "#s2"            \n\t"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
pa_volume_s16ne_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 | 
					pa_volume_s16ne_sse2 (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    pa_reg_x86 channel, temp;
 | 
					    pa_reg_x86 channel, temp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,7 +155,7 @@ pa_volume_s16ne_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
pa_volume_s16re_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 | 
					pa_volume_s16re_sse2 (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    pa_reg_x86 channel, temp;
 | 
					    pa_reg_x86 channel, temp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -308,7 +308,9 @@ void pa_volume_func_init_sse (pa_cpu_x86_flag_t flags) {
 | 
				
			||||||
    run_test ();
 | 
					    run_test ();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_set_volume_func (PA_SAMPLE_S16NE,     (pa_do_volume_func_t) pa_volume_s16ne_sse);
 | 
					    if (flags & PA_CPU_X86_SSE2) {
 | 
				
			||||||
    pa_set_volume_func (PA_SAMPLE_S16RE,     (pa_do_volume_func_t) pa_volume_s16re_sse);
 | 
					      pa_set_volume_func (PA_SAMPLE_S16NE,     (pa_do_volume_func_t) pa_volume_s16ne_sse2);
 | 
				
			||||||
 | 
					      pa_set_volume_func (PA_SAMPLE_S16RE,     (pa_do_volume_func_t) pa_volume_s16re_sse2);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
#endif /* defined (__i386__) || defined (__amd64__) */
 | 
					#endif /* defined (__i386__) || defined (__amd64__) */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue