]> code.delx.au - pulseaudio/commitdiff
main: hook up cpu detection code
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 13 Aug 2009 15:12:44 +0000 (17:12 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 20 Aug 2009 09:31:03 +0000 (11:31 +0200)
Add CPU detection code to activate the various optimisations.
Move some method definitions around.
Use compatibility macros when we can.

src/daemon/main.c
src/pulsecore/sample-util.h
src/pulsecore/svolume_mmx.c
src/pulsecore/svolume_sse.c

index 3c5f7f95d273fa63cb43db1a6c2739c41ce903b9..774b4e90464649b56c26681f3fd8a8bfd2b77dc8 100644 (file)
@@ -95,6 +95,7 @@
 #ifdef HAVE_DBUS
 #include <pulsecore/dbus-shared.h>
 #endif
+#include <pulsecore/cpu-x86.h>
 
 #include "cmdline.h"
 #include "cpulimit.h"
@@ -821,8 +822,7 @@ int main(int argc, char *argv[]) {
 
     pa_memtrap_install();
 
-    pa_volume_func_init_mmx();
-    pa_volume_func_init_sse();
+    pa_cpu_init_x86();
 
     pa_assert_se(mainloop = pa_mainloop_new());
 
index 563dbb6a7955ca14c33d41e80bdd66449745d0c1..34df5cf3bff578bb69641ec258ba8c7b81a462dc 100644 (file)
@@ -91,9 +91,6 @@ typedef void (*pa_do_volume_func_t) (void *samples, void *volumes, unsigned chan
 pa_do_volume_func_t pa_get_volume_func(pa_sample_format_t f);
 void pa_set_volume_func(pa_sample_format_t f, pa_do_volume_func_t func);
 
-void pa_volume_func_init_mmx(void);
-void pa_volume_func_init_sse(void);
-
 #define PA_CHANNEL_POSITION_MASK_LEFT                                   \
     (PA_CHANNEL_POSITION_MASK(PA_CHANNEL_POSITION_FRONT_LEFT)           \
      | PA_CHANNEL_POSITION_MASK(PA_CHANNEL_POSITION_REAR_LEFT)          \
index 3c22945662d9f2f06db604b144a1965d7fc90b0d..e56f7c319bc8e9bd6f5b972c6e751ea51dc8239f 100644 (file)
@@ -31,6 +31,8 @@
 #include <pulsecore/g711.h>
 #include <pulsecore/core-util.h>
 
+#include "cpu-x86.h"
+
 #include "sample-util.h"
 #include "endianmacros.h"
 
@@ -142,7 +144,7 @@ pa_volume_ulaw_mmx (uint8_t *samples, int32_t *volumes, unsigned channels, unsig
 static void
 pa_volume_s16ne_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 {
-  int64_t channel, temp;
+  pa_reg_x86 channel, temp;
 
   /* the max number of samples we process at a time, this is also the max amount
    * we overread the volume array, which should have enough padding. */
@@ -203,8 +205,8 @@ pa_volume_s16ne_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi
     "6:                             \n\t"
     " emms                          \n\t"
 
-    : "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((int64_t)channel), "=&r" (temp)
-    : "r" ((int64_t)channels)
+    : "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
+    : "r" ((pa_reg_x86)channels)
     : "cc"
   );
 }
@@ -212,7 +214,7 @@ pa_volume_s16ne_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi
 static void
 pa_volume_s16re_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 {
-  int64_t channel, temp;
+  pa_reg_x86 channel, temp;
 
   /* the max number of samples we process at a time, this is also the max amount
    * we overread the volume array, which should have enough padding. */
@@ -279,8 +281,8 @@ pa_volume_s16re_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi
     "6:                             \n\t"
     " emms                          \n\t"
 
-    : "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((int64_t)channel), "=&r" (temp)
-    : "r" ((int64_t)channels)
+    : "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
+    : "r" ((pa_reg_x86)channels)
     : "cc"
   );
 }
@@ -443,7 +445,7 @@ pa_volume_s24_32re_mmx (uint32_t *samples, int32_t *volumes, unsigned channels,
 }
 #endif
 
-#define RUN_TEST
+#undef RUN_TEST
 
 #ifdef RUN_TEST
 #define CHANNELS 2
@@ -486,7 +488,7 @@ static void run_test (void) {
 }
 #endif
 
-void pa_volume_func_init_mmx (void) {
+void pa_volume_func_init_mmx (pa_cpu_x86_flag_t flags) {
   pa_log_info("Initialising MMX optimized functions.");
 
 #ifdef RUN_TEST
index ff583a06edcb98d2c758583234e10141d5a0deaa..b60471a72b317f751b0675386deca69e690c8ab8 100644 (file)
@@ -31,6 +31,8 @@
 #include <pulsecore/g711.h>
 #include <pulsecore/core-util.h>
 
+#include "cpu-x86.h"
+
 #include "sample-util.h"
 #include "endianmacros.h"
 
@@ -140,8 +142,7 @@ pa_volume_ulaw_sse (uint8_t *samples, int32_t *volumes, unsigned channels, unsig
 static void
 pa_volume_s16ne_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
 {
-  int64_t channel;
-  int64_t temp;
+  pa_reg_x86 channel, temp;
 
   /* the max number of samples we process at a time, this is also the max amount
    * we overread the volume array, which should have enough padding. */
@@ -210,7 +211,7 @@ pa_volume_s16ne_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsi
     "8:                             \n\t"
 
     : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
-    : "r" ((int64_t)channels)
+    : "r" ((pa_reg_x86)channels)
     : "cc"
   );
 }
@@ -218,8 +219,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)
 {
-  int64_t channel;
-  int64_t temp;
+  pa_reg_x86 channel, temp;
 
   /* the max number of samples we process at a time, this is also the max amount
    * we overread the volume array, which should have enough padding. */
@@ -296,7 +296,7 @@ pa_volume_s16re_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsi
     "8:                             \n\t"
 
     : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
-    : "r" ((int64_t)channels)
+    : "r" ((pa_reg_x86)channels)
     : "cc"
   );
 }
@@ -459,7 +459,7 @@ pa_volume_s24_32re_sse (uint32_t *samples, int32_t *volumes, unsigned channels,
 }
 #endif
 
-#define RUN_TEST
+#undef RUN_TEST
 
 #ifdef RUN_TEST
 #define CHANNELS 2
@@ -502,7 +502,7 @@ static void run_test (void) {
 }
 #endif
 
-void pa_volume_func_init_sse (void) {
+void pa_volume_func_init_sse (pa_cpu_x86_flag_t flags) {
   pa_log_info("Initialising SSE optimized functions.");
 
 #ifdef RUN_TEST