[PATCH 04/10] tests: Test both, SSE and SSE2, sconv in cpu-test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Peter Meerwald <p.meerwald@xxxxxxxxxxxxxxxxxx>

SSE sconv was not tested before, only SSE2 was (on CPUs supporting both
instruction sets)

now both code path are tested on CPUs supporting both

Signed-off-by: Peter Meerwald <p.meerwald at bct-electronic.com>
---
 src/tests/cpu-test.c |   34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/tests/cpu-test.c b/src/tests/cpu-test.c
index f312edb..c33414c 100644
--- a/src/tests/cpu-test.c
+++ b/src/tests/cpu-test.c
@@ -347,9 +347,9 @@ static void run_conv_test_s16_to_float(pa_convert_func_t func, pa_convert_func_t
 #endif /* defined (__arm__) && defined (__linux__) */
 
 #if defined (__i386__) || defined (__amd64__)
-START_TEST (sconv_sse_test) {
+START_TEST (sconv_sse2_test) {
     pa_cpu_x86_flag_t flags = 0;
-    pa_convert_func_t orig_func, sse_func;
+    pa_convert_func_t orig_func, sse2_func;
 
     pa_cpu_get_x86_flags(&flags);
 
@@ -359,7 +359,34 @@ START_TEST (sconv_sse_test) {
     }
 
     orig_func = pa_get_convert_from_float32ne_function(PA_SAMPLE_S16LE);
-    pa_convert_func_init_sse(flags);
+    pa_convert_func_init_sse(PA_CPU_X86_SSE2);
+    sse2_func = pa_get_convert_from_float32ne_function(PA_SAMPLE_S16LE);
+
+    pa_log_debug("Checking SSE2 sconv (float -> s16)");
+    run_conv_test_float_to_s16(sse2_func, orig_func, 0, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 1, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 2, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 3, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 4, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 5, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 6, TRUE, FALSE);
+    run_conv_test_float_to_s16(sse2_func, orig_func, 7, TRUE, TRUE);
+}
+END_TEST
+
+START_TEST (sconv_sse_test) {
+    pa_cpu_x86_flag_t flags = 0;
+    pa_convert_func_t orig_func, sse_func;
+
+    pa_cpu_get_x86_flags(&flags);
+
+    if (!(flags & PA_CPU_X86_SSE)) {
+        pa_log_info("SSE not supported. Skipping");
+        return;
+    }
+
+    orig_func = pa_get_convert_from_float32ne_function(PA_SAMPLE_S16LE);
+    pa_convert_func_init_sse(PA_CPU_X86_SSE);
     sse_func = pa_get_convert_from_float32ne_function(PA_SAMPLE_S16LE);
 
     pa_log_debug("Checking SSE sconv (float -> s16)");
@@ -450,6 +477,7 @@ int main(int argc, char *argv[]) {
     /* Conversion tests */
     tc = tcase_create("sconv");
 #if defined (__i386__) || defined (__amd64__)
+    tcase_add_test(tc, sconv_sse2_test);
     tcase_add_test(tc, sconv_sse_test);
 #endif
 #if defined (__arm__) && defined (__linux__)
-- 
1.7.9.5



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux