Check for MMX in the build system
authorSøren Sandmann <sandmann@redhat.com>
Tue, 22 May 2007 13:49:23 +0000 (09:49 -0400)
committerSøren Sandmann <sandmann@redhat.com>
Tue, 22 May 2007 13:49:23 +0000 (09:49 -0400)
configure.ac
pixman/Makefile.am
pixman/pixman-compose.c
pixman/pixman-image.c
pixman/pixman-mmx.c
pixman/pixman-pict.c
pixman/pixman-private.h
pixman/pixman-region.c
pixman/pixman-utils.c

index 18a0ce4..20e335b 100644 (file)
@@ -31,6 +31,9 @@ AM_CONFIG_HEADER(config.h)
 AC_PROG_CC
 AC_PROG_LIBTOOL
 
+# endianness
+AC_C_BIGENDIAN
+
 # Check for dependencies
 #PKG_CHECK_MODULES(DEP, x11)
 
@@ -41,6 +44,40 @@ if test "x$GCC" = "xyes"; then
   *) CFLAGS="$CFLAGS -Wall" ;;
   esac fi changequote([,])dnl
 
+dnl ===========================================================================
+dnl Check for MMX
+
+MMX_CFLAGS="-mmmx -msse -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)
+xserver_save_CFLAGS=$CFLAGS
+CFLAGS="$CFLAGS $MMX_CFLAGS"
+AC_COMPILE_IFELSE([
+#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
+#error "Need GCC >= 3.4 for MMX intrinsics"
+#endif
+#include <mmintrin.h>
+#include <xmmintrin.h>
+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
+AC_MSG_RESULT($have_mmx_intrinsics)
+
+if test $have_mmx_intrinsics = yes ; then
+   AC_DEFINE(USE_MMX, 1, [use MMX compiler intrinsics])
+else
+   MMX_CFLAGS=
+fi
+AC_SUBST(MMX_CFLAGS)
+
+AM_CONDITIONAL(USE_MMX, test $have_mmx_intrinsics = yes)
+
+dnl ========================================================
+
 PKG_CHECK_MODULES(GTK, [gtk+-2.0], [HAVE_GTK=yes], [HAVE_GTK=no])
 AM_CONDITIONAL(HAVE_GTK, [test "x$HAVE_GTK" = xyes])
 
index 1a336c1..19f5cf8 100644 (file)
@@ -1,6 +1,5 @@
 lib_LTLIBRARIES = libpixman.la
 
-libpixman_la_CFLAGS = -DUSE_MMX # FIXME - detect it properly
 libpixman_la_LIBADD = @DEP_LIBS@ -lm
 
 libpixman_la_SOURCES =    \
@@ -13,13 +12,15 @@ libpixman_la_SOURCES =    \
         pixman-utils.c
 
 
+if USE_MMX
 noinst_LTLIBRARIES = libpixman-mmx.la
 libpixman_mmx_la_SOURCES = \
        pixman-mmx.c \
        pixman-mmx.h
-libpixman_mmx_la_CFLAGS = $(DEP_CFLAGS) -mmmx -DUSE_MMX
+libpixman_mmx_la_CFLAGS = $(DEP_CFLAGS) $(MMX_CFLAGS)
 libpixman_mmx_la_LIBADD = $(DEP_LIBS)
 libpixman_la_LIBADD += libpixman-mmx.la
+endif
 
 libpixmanincludedir = $(includedir)/pixman
 libpixmaninclude_HEADERS = pixman.h
index ea153a4..6293ce9 100644 (file)
@@ -23,9 +23,7 @@
  * SOFTWARE.
  */
 
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
+#include <config.h>
 
 #include <stdlib.h>
 #include <string.h>
index 7b0c574..0802b86 100644 (file)
@@ -20,6 +20,8 @@
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <config.h>
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
index 0335a09..7645d2e 100644 (file)
@@ -28,9 +28,7 @@
  *
  * Based on work by Owen Taylor
  */
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
+#include <config.h>
 
 #ifdef USE_MMX
 
index e9cc3db..f486305 100644 (file)
@@ -22,6 +22,7 @@
  * Author:  Keith Packard, SuSE, Inc.
  */
 
+#include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "pixman.h"
index f34506a..ab3f2d2 100644 (file)
@@ -1,3 +1,7 @@
+#ifndef PACKAGE
+#  error config.h must be included before pixman-private.h
+#endif
+
 #ifndef PIXMAN_PRIVATE_H
 #define PIXMAN_PRIVATE_H
 
index 8d0b06b..f5d2f45 100644 (file)
@@ -45,6 +45,7 @@ SOFTWARE.
 
 ******************************************************************/
 
+#include <config.h>
 #include <stdlib.h>
 #include <limits.h>
 #include <string.h>
index d3b7f4a..e27d0d6 100644 (file)
@@ -21,6 +21,7 @@
  * Author:  Keith Packard, SuSE, Inc.
  */
 
+#include <config.h>
 #include "pixman.h"
 #include "pixman-private.h"