From c751224b0acd457d99cead45616980fec7ef78f1 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 4 Mar 2009 15:21:13 -0700 Subject: mesa: refactor x86 code Move _mesa_init_all_x86_transform_asm() into x86.c so that common_x86.c has no dependencies on the vertex transformation code. Plus some comments and clean-ups. --- src/mesa/x86/common_x86.c | 75 +++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 52 deletions(-) (limited to 'src/mesa/x86/common_x86.c') diff --git a/src/mesa/x86/common_x86.c b/src/mesa/x86/common_x86.c index 53215479358..18b1c2243ce 100644 --- a/src/mesa/x86/common_x86.c +++ b/src/mesa/x86/common_x86.c @@ -52,7 +52,10 @@ #include "common_x86_asm.h" -int _mesa_x86_cpu_features = 0; +/** Bitmask of X86_FEATURE_x bits */ +int _mesa_x86_cpu_features = 0x0; + + /* No reason for this to be public. */ @@ -73,9 +76,12 @@ extern GLuint _ASMAPI _mesa_x86_cpuid_edx(GLuint op); * kernels provide full SSE support on all processors that expose SSE via * the CPUID mechanism. */ + +/* These are assembly functions: */ extern void _mesa_test_os_sse_support( void ); extern void _mesa_test_os_sse_exception_support( void ); + #if defined(WIN32) #ifndef STATUS_FLOAT_MULTIPLE_TRAPS # define STATUS_FLOAT_MULTIPLE_TRAPS (0xC00002B5L) @@ -107,7 +113,11 @@ static LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS exp) #endif /* WIN32 */ -static void check_os_sse_support( void ) +/** + * Check if SSE is supported. + * If not, turn off the X86_FEATURE_XMM flag in _mesa_x86_cpu_features. + */ +void _mesa_check_os_sse_support( void ) { #if defined(__FreeBSD__) { @@ -187,10 +197,18 @@ static void check_os_sse_support( void ) #endif /* USE_SSE_ASM */ -void _mesa_init_all_x86_transform_asm( void ) +/** + * Initialize the _mesa_x86_cpu_features bitfield. + */ +void +_mesa_get_x86_features(void) { #ifdef USE_X86_ASM - _mesa_x86_cpu_features = 0; + _mesa_x86_cpu_features = 0x0; + + if (_mesa_getenv( "MESA_NO_ASM")) { + return; + } if (!_mesa_x86_has_cpuid()) { _mesa_debug(NULL, "CPUID not detected\n"); @@ -263,52 +281,5 @@ void _mesa_init_all_x86_transform_asm( void ) } } - - if ( _mesa_getenv( "MESA_NO_ASM" ) ) { - _mesa_x86_cpu_features = 0; - } - - if ( _mesa_x86_cpu_features ) { - _mesa_init_x86_transform_asm(); - } - -#ifdef USE_MMX_ASM - if ( cpu_has_mmx ) { - if ( _mesa_getenv( "MESA_NO_MMX" ) == 0 ) { - _mesa_debug(NULL, "MMX cpu detected.\n"); - } else { - _mesa_x86_cpu_features &= ~(X86_FEATURE_MMX); - } - } -#endif - -#ifdef USE_3DNOW_ASM - if ( cpu_has_3dnow ) { - if ( _mesa_getenv( "MESA_NO_3DNOW" ) == 0 ) { - _mesa_debug(NULL, "3DNow! cpu detected.\n"); - _mesa_init_3dnow_transform_asm(); - } else { - _mesa_x86_cpu_features &= ~(X86_FEATURE_3DNOW); - } - } -#endif - -#ifdef USE_SSE_ASM - if ( cpu_has_xmm ) { - if ( _mesa_getenv( "MESA_NO_SSE" ) == 0 ) { - _mesa_debug(NULL, "SSE cpu detected.\n"); - if ( _mesa_getenv( "MESA_FORCE_SSE" ) == 0 ) { - check_os_sse_support(); - } - if ( cpu_has_xmm ) { - _mesa_init_sse_transform_asm(); - } - } else { - _mesa_debug(NULL, "SSE cpu detected, but switched off by user.\n"); - _mesa_x86_cpu_features &= ~(X86_FEATURE_XMM); - } - } -#endif -#endif +#endif /* USE_X86_ASM */ } - -- cgit v1.2.3 From 16d72437eac3ea9c557424edfc98cd664f4c4ed3 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 4 Mar 2009 16:39:11 -0700 Subject: mesa: _mesa_get_x86_features() only needs to do its thing once --- src/mesa/x86/common_x86.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/mesa/x86/common_x86.c') diff --git a/src/mesa/x86/common_x86.c b/src/mesa/x86/common_x86.c index 18b1c2243ce..5efdb4f24a6 100644 --- a/src/mesa/x86/common_x86.c +++ b/src/mesa/x86/common_x86.c @@ -199,10 +199,18 @@ void _mesa_check_os_sse_support( void ) /** * Initialize the _mesa_x86_cpu_features bitfield. + * This is a no-op if called more than once. */ void _mesa_get_x86_features(void) { + static int called = 0; + + if (called) + return; + + called = 1; + #ifdef USE_X86_ASM _mesa_x86_cpu_features = 0x0; -- cgit v1.2.3