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:
Wim Taymans 2009-09-07 17:21:21 +02:00
parent 812be32783
commit b5ac3839e1
2 changed files with 11 additions and 8 deletions

View file

@ -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__) */
} }

View file

@ -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__) */
} }