From 74d303521e6ba41d1cbeb75edb2f834ebbe8c550 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 24 Feb 2012 19:29:48 +0100 Subject: [PATCH] gallium/rtasm: properly detect SSE and SSE2 This should fix crashes on ancient processors. --- src/gallium/auxiliary/rtasm/rtasm_cpu.c | 48 ++++++++++++------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/gallium/auxiliary/rtasm/rtasm_cpu.c b/src/gallium/auxiliary/rtasm/rtasm_cpu.c index 0461c815504..7afcf1452b1 100644 --- a/src/gallium/auxiliary/rtasm/rtasm_cpu.c +++ b/src/gallium/auxiliary/rtasm/rtasm_cpu.c @@ -25,43 +25,43 @@ * **************************************************************************/ +#include "pipe/p_config.h" +#include "rtasm_cpu.h" + +#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) #include "util/u_debug.h" -#include "rtasm_cpu.h" +#include "util/u_cpu_detect.h" +DEBUG_GET_ONCE_BOOL_OPTION(nosse, "GALLIUM_NOSSE", FALSE); -#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) -static boolean rtasm_sse_enabled(void) +static struct util_cpu_caps *get_cpu_caps(void) { - static boolean firsttime = 1; - static boolean enabled; - - /* This gets called quite often at the moment: - */ - if (firsttime) { - enabled = !debug_get_bool_option("GALLIUM_NOSSE", FALSE); - firsttime = FALSE; - } - return enabled; + util_cpu_detect(); + return &util_cpu_caps; } -#endif int rtasm_cpu_has_sse(void) { - /* FIXME: actually detect this at run-time */ -#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) - return rtasm_sse_enabled(); -#else - return 0; -#endif + return !debug_get_option_nosse() && get_cpu_caps()->has_sse; } int rtasm_cpu_has_sse2(void) { - /* FIXME: actually detect this at run-time */ -#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) - return rtasm_sse_enabled(); + return !debug_get_option_nosse() && get_cpu_caps()->has_sse2; +} + + #else + +int rtasm_cpu_has_sse(void) +{ return 0; -#endif } + +int rtasm_cpu_has_sse2(void) +{ + return 0; +} + +#endif -- 2.30.2