summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/x86/common_x86.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/mesa/x86/common_x86.c b/src/mesa/x86/common_x86.c
index 90fa7e48ff3..2d830b4b0fd 100644
--- a/src/mesa/x86/common_x86.c
+++ b/src/mesa/x86/common_x86.c
@@ -22,13 +22,16 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-/*
+/**
+ * \file common_x86.c
+ *
* Check CPU capabilities & initialize optimized funtions for this particular
* processor.
*
- * Written by Holger Waechtler <[email protected]>
- * Changed by Andre Werthmann <[email protected]> for using the
- * new SSE functions.
+ * Changed by Andre Werthmann for using the new SSE functions.
+ *
+ * \author Holger Waechtler <[email protected]>
+ * \author Andre Werthmann <[email protected]>
*/
/* XXX these includes should probably go into imports.h or glheader.h */
@@ -87,12 +90,19 @@ static void message( const char *msg )
* loop in the signal delivery from the kernel as we can't interact with
* the SIMD FPU state to clear the exception bits. Either way, this is
* not good.
+ *
+ * However, I have been told by Alan Cox that all 2.4 (and later) Linux
+ * kernels provide full SSE support on all processors that expose SSE via
+ * the CPUID mechanism. It just so happens that this is the exact set of
+ * kernels supported DRI. Therefore, when building for DRI the funky SSE
+ * exception test is omitted.
*/
extern void _mesa_test_os_sse_support( void );
extern void _mesa_test_os_sse_exception_support( void );
-#if defined(__linux__) && defined(_POSIX_SOURCE) && defined(X86_FXSR_MAGIC)
+#if defined(__linux__) && defined(_POSIX_SOURCE) && defined(X86_FXSR_MAGIC) \
+ && !defined(DRI_NEW_INTERFACE_ONLY)
static void sigill_handler( int signal, struct sigcontext sc )
{
message( "SIGILL, " );
@@ -142,7 +152,7 @@ static void sigfpe_handler( int signal, struct sigcontext sc )
*/
static void check_os_sse_support( void )
{
-#if defined(__linux__)
+#if defined(__linux__) && !defined(DRI_NEW_INTERFACE_ONLY)
#if defined(_POSIX_SOURCE) && defined(X86_FXSR_MAGIC)
struct sigaction saved_sigill;
struct sigaction saved_sigfpe;