--- src/pulsecore/cpu-x86.h | 1 + src/pulsecore/sconv_sse.c | 46 +++++++++++----------------------------------- 2 files changed, 12 insertions(+), 35 deletions(-) diff --git a/src/pulsecore/cpu-x86.h b/src/pulsecore/cpu-x86.h index e9e643d..ec6761a 100644 --- a/src/pulsecore/cpu-x86.h +++ b/src/pulsecore/cpu-x86.h @@ -69,6 +69,7 @@ void pa_remap_func_init_sse(pa_cpu_x86_flag_t flags); void pa_convert_func_init_sse (pa_cpu_x86_flag_t flags); +void sconv_sse_unit_test(); void svolume_sse_unit_test(); #endif /* foocpux86hfoo */ diff --git a/src/pulsecore/sconv_sse.c b/src/pulsecore/sconv_sse.c index 3c9a809..636d99e 100644 --- a/src/pulsecore/sconv_sse.c +++ b/src/pulsecore/sconv_sse.c @@ -24,6 +24,8 @@ #include <config.h> #endif +#include <check.h> + #include <stdio.h> #include <stdlib.h> @@ -162,21 +164,15 @@ static void pa_sconv_s16le_from_f32ne_sse2(unsigned n, const float *a, int16_t * ); } -#undef RUN_TEST - -#ifdef RUN_TEST #define SAMPLES 1019 #define TIMES 1000 -static void run_test(void) { +static void sconv_sse_unit_test_aux(void (*sconv_func) (unsigned n, const float *a, int16_t *b)) { int16_t samples[SAMPLES]; int16_t samples_ref[SAMPLES]; float floats[SAMPLES]; - int i; - pa_usec_t start, stop; pa_convert_func_t func; - - printf("checking SSE %zd\n", sizeof(samples)); + int i; memset(samples_ref, 0, sizeof(samples_ref)); memset(samples, 0, sizeof(samples)); @@ -187,40 +183,21 @@ static void run_test(void) { func = pa_get_convert_from_float32ne_function(PA_SAMPLE_S16LE); func(SAMPLES, floats, samples_ref); - pa_sconv_s16le_from_f32ne_sse2(SAMPLES, floats, samples); - - for (i = 0; i < SAMPLES; i++) { - if (samples[i] != samples_ref[i]) { - printf ("%d: %04x != %04x (%f)\n", i, samples[i], samples_ref[i], - floats[i]); - } - } + sconv_func(SAMPLES, floats, samples); - start = pa_rtclock_now(); - for (i = 0; i < TIMES; i++) { - pa_sconv_s16le_from_f32ne_sse2(SAMPLES, floats, samples); - } - stop = pa_rtclock_now(); - pa_log_info("SSE: %llu usec.", (long long unsigned int)(stop - start)); + for (i = 0; i < SAMPLES; i++) + fail_unless(samples[i] == samples_ref[i], NULL); +} - start = pa_rtclock_now(); - for (i = 0; i < TIMES; i++) { - func(SAMPLES, floats, samples_ref); - } - stop = pa_rtclock_now(); - pa_log_info("ref: %llu usec.", (long long unsigned int)(stop - start)); +void sconv_sse_unit_test() { + sconv_sse_unit_test_aux(pa_sconv_s16le_from_f32ne_sse2); + sconv_sse_unit_test_aux(pa_sconv_s16le_from_f32ne_sse); } -#endif #endif /* defined (__i386__) || defined (__amd64__) */ void pa_convert_func_init_sse(pa_cpu_x86_flag_t flags) { #if !defined(__APPLE__) && defined (__i386__) || defined (__amd64__) - -#ifdef RUN_TEST - run_test(); -#endif - if (flags & PA_CPU_X86_SSE2) { pa_log_info("Initialising SSE2 optimized conversions."); pa_set_convert_from_float32ne_function(PA_SAMPLE_S16LE, (pa_convert_func_t) pa_sconv_s16le_from_f32ne_sse2); @@ -228,6 +205,5 @@ void pa_convert_func_init_sse(pa_cpu_x86_flag_t flags) { pa_log_info("Initialising SSE optimized conversions."); pa_set_convert_from_float32ne_function(PA_SAMPLE_S16LE, (pa_convert_func_t) pa_sconv_s16le_from_f32ne_sse); } - #endif /* defined (__i386__) || defined (__amd64__) */ } -- 1.7.11.1