summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2009-08-13 17:12:44 +0200
committerWim Taymans <wim.taymans@collabora.co.uk>2009-08-20 11:31:03 +0200
commit563cb2dea9f7f73180e2b8cc8d45b0df9358c936 (patch)
tree644a47e8dd0cc9e72ec5768ff8729b9bc4405e67 /src
parenta83f5524fbf2f0fa861d2fae6973f0f42e8c9c25 (diff)
main: hook up cpu detection code
Add CPU detection code to activate the various optimisations. Move some method definitions around. Use compatibility macros when we can.
Diffstat (limited to 'src')
-rw-r--r--src/daemon/main.c4
-rw-r--r--src/pulsecore/sample-util.h3
-rw-r--r--src/pulsecore/svolume_mmx.c18
-rw-r--r--src/pulsecore/svolume_sse.c16
4 files changed, 20 insertions, 21 deletions
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 3c5f7f95..774b4e90 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -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());
diff --git a/src/pulsecore/sample-util.h b/src/pulsecore/sample-util.h
index 563dbb6a..34df5cf3 100644
--- a/src/pulsecore/sample-util.h
+++ b/src/pulsecore/sample-util.h
@@ -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) \
diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c
index 3c229456..e56f7c31 100644
--- a/src/pulsecore/svolume_mmx.c
+++ b/src/pulsecore/svolume_mmx.c
@@ -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
diff --git a/src/pulsecore/svolume_sse.c b/src/pulsecore/svolume_sse.c
index ff583a06..b60471a7 100644
--- a/src/pulsecore/svolume_sse.c
+++ b/src/pulsecore/svolume_sse.c
@@ -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