From 28532430efeb4a1aba8f3e30a790531d2a9e1472 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann?= Date: Wed, 17 Oct 2007 20:01:27 -0400 Subject: [PATCH] Only compile with -msse on x86-64. --- configure.ac | 43 ++++++++++++++++++++++++++++++++++++++----- pixman/pixman-mmx.c | 4 ---- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 5bb6c27..fded892 100644 --- a/configure.ac +++ b/configure.ac @@ -86,10 +86,10 @@ if test "x$GCC" = "xyes"; then dnl =========================================================================== dnl Check for MMX -MMX_CFLAGS="-mmmx -msse -Winline --param inline-unit-growth=10000 --param large-function-growth=10000" +MMX_CFLAGS="-mmmx -Winline --param inline-unit-growth=10000 --param large-function-growth=10000" have_mmx_intrinsics=no -AC_MSG_CHECKING(For MMX/SSE intrinsics in the compiler) +AC_MSG_CHECKING(whether to use MMX intrinsics) xserver_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $MMX_CFLAGS" AC_COMPILE_IFELSE([ @@ -97,10 +97,8 @@ AC_COMPILE_IFELSE([ #error "Need GCC >= 3.4 for MMX intrinsics" #endif #include -#include int main () { __m64 v = _mm_cvtsi32_si64 (1); - v = _mm_shuffle_pi16 (v, _MM_SHUFFLE(3, 3, 3, 3)); return _mm_cvtsi64_si32 (v); }], have_mmx_intrinsics=yes) CFLAGS=$xserver_save_CFLAGS @@ -111,11 +109,46 @@ if test $have_mmx_intrinsics = yes ; then else MMX_CFLAGS= fi -AC_SUBST(MMX_CFLAGS) AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes) +dnl ======================================================= + +dnl GCC 4.2 when compiling with -msse will generate SSE instructions +dnl on its own. This means anything compiled with -mss can only be +dnl run after a runtime check for SSE. Unfortunately, since we still +dnl need to support MMX-but-not-SSE (such as the OLPC), this means we +dnl can only use SSE when compiling for x86-64 (where SSE is always +dnl supported). + +have_sse_intrinsics=no +AC_MSG_CHECKING(whether to use SSE intrinsics) +xserver_save_CFLAGS=$CFLAGS +CFLAGS="$CFLAGS -msse $MMX_CFLAGS" + +AC_COMPILE_IFELSE([ +#if !defined(__amd64__) && !defined(__x86_64__) +#error "Need x86-64 for SSE" +#endif +#include +#include +int main () { + __m64 v = _mm_cvtsi32_si64 (1); + v = _mm_shuffle_pi16 (v, _MM_SHUFFLE(3, 3, 3, 3)); + return _mm_cvtsi64_si32 (v); +}], have_sse_intrinsics=yes) +CFLAGS=$xserver_save_CFLAGS +AC_MSG_RESULT($have_sse_intrinsics) + +if test $have_sse_intrinsics = yes ; then + AC_DEFINE(USE_SSE, 1, [use SSE compiler intrinsics]) + MMX_CFLAGS="-msse $MMX_CFLAGS" +fi + +AM_CONDITIONAL(USE_SSE, test $have_sse_intrinsics = yes) + dnl ======================================================== +AC_SUBST(MMX_CFLAGS) PKG_CHECK_MODULES(GTK, [gtk+-2.0], [HAVE_GTK=yes], [HAVE_GTK=no]) AM_CONDITIONAL(HAVE_GTK, [test "x$HAVE_GTK" = xyes]) diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c index be79124..52061c7 100644 --- a/pixman/pixman-mmx.c +++ b/pixman/pixman-mmx.c @@ -35,10 +35,6 @@ #ifdef USE_MMX -#if defined(__amd64__) || defined(__x86_64__) -#define USE_SSE -#endif - #include #ifdef USE_SSE #include /* for _mm_shuffle_pi16 and _MM_SHUFFLE */ -- 2.7.4