diff options
author | Marek Olšák <[email protected]> | 2012-02-24 19:29:48 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-02-27 02:03:23 +0100 |
commit | 74d303521e6ba41d1cbeb75edb2f834ebbe8c550 (patch) | |
tree | 19f0f0c6e67d6661468a38e797791c882dfb3d93 /src/gallium/auxiliary/rtasm | |
parent | e6fa2d89e14452b6bdf42c7eb4150fb2a2c46a4a (diff) |
gallium/rtasm: properly detect SSE and SSE2
This should fix crashes on ancient processors.
Diffstat (limited to 'src/gallium/auxiliary/rtasm')
-rw-r--r-- | src/gallium/auxiliary/rtasm/rtasm_cpu.c | 48 |
1 files 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 |