]> code.delx.au - pulseaudio/commitdiff
x86: only install some functions when SSE2
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 7 Sep 2009 15:21:21 +0000 (17:21 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 7 Sep 2009 15:21:21 +0000 (17:21 +0200)
Remap and volume functions use SSE2 instructions so only install them when SSE2
is present.

src/pulsecore/remap_sse.c
src/pulsecore/svolume_sse.c

index bf22df7c43394cc0fc45ad5e15e0c973a6fb282c..dac072ec42326664b1d7a133423962e19afb59da 100644 (file)
                 "4:                             \n\t"
 
 #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;
 
     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 */
-static void init_remap_sse (pa_remap_t *m) {
+static void init_remap_sse2 (pa_remap_t *m) {
     unsigned n_oc, n_ic;
 
     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. */
     if (n_ic == 1 && n_oc == 2 &&
             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");
     }
 }
@@ -151,6 +151,7 @@ void pa_remap_func_init_sse (pa_cpu_x86_flag_t flags) {
 #if defined (__i386__) || defined (__amd64__)
     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__) */
 }
index 54af4a57384c9d6cc21e4056235d790594119b14..d9dcf476103c2a136b4b3679247485e5565306c9 100644 (file)
@@ -75,7 +75,7 @@
       " por %%xmm5, "#s2"            \n\t"
 
 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;
 
@@ -155,7 +155,7 @@ pa_volume_s16ne_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsi
 }
 
 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;
 
@@ -308,7 +308,9 @@ void pa_volume_func_init_sse (pa_cpu_x86_flag_t flags) {
     run_test ();
 #endif
 
-    pa_set_volume_func (PA_SAMPLE_S16NE,     (pa_do_volume_func_t) pa_volume_s16ne_sse);
-    pa_set_volume_func (PA_SAMPLE_S16RE,     (pa_do_volume_func_t) pa_volume_s16re_sse);
+    if (flags & PA_CPU_X86_SSE2) {
+      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__) */
 }