pixman: Branch 'master'

Jeff Muizelaar jrmuizel at kemper.freedesktop.org
Wed May 6 10:58:54 PDT 2009


 configure.ac         |   76 ++++++++++++++++++++++++++++++++++++++++++++++++---
 pixman/Makefile.am   |   15 ++++++++--
 pixman/pixman-pict.c |    1 
 3 files changed, 87 insertions(+), 5 deletions(-)

New commits:
commit a589afa3a7f3430a5b37bb9efb6574fe6ac8d9af
Author: Jeff Muizelaar <jmuizelaar at mozilla.com>
Date:   Wed May 6 13:30:29 2009 -0400

    Enable NEON assembly when we can build it
    
    This adds detection for ARM NEON build support as well as gnu assembler
    syntax detection from Jonathan Morton.

diff --git a/configure.ac b/configure.ac
index c35862f..f1998c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -326,11 +326,12 @@ AC_SUBST(VMX_CFLAGS)
 AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
 
 dnl Check for ARM SIMD instructions
+ARM_SIMD_CFLAGS=""
 
 have_arm_simd=no
 AC_MSG_CHECKING(whether to use ARM SIMD assembler)
 xserver_save_CFLAGS=$CFLAGS
-CFLAGS="$CFLAGS $ARM_CFLAGS"
+CFLAGS="$CFLAGS $ARM_SIMD_CFLAGS"
 AC_COMPILE_IFELSE([
 int main () {
     asm("uqadd8 r1, r1, r2");
@@ -350,7 +351,7 @@ fi
 if test $have_arm_simd = yes ; then
    AC_DEFINE(USE_ARM_SIMD, 1, [use ARM SIMD compiler intrinsics])
 else
-   ARM_CFLAGS=
+   ARM_SIMD_CFLAGS=
 fi
 
 AC_MSG_RESULT($have_arm_simd)
@@ -358,9 +359,78 @@ if test $enable_arm_simd = yes && test $have_arm_simd = no ; then
    AC_MSG_ERROR([ARM SIMD intrinsics not detected])
 fi
 
-AC_SUBST(ARM_CFLAGS)
+dnl Check for ARM NEON instructions
+ARM_NEON_CFLAGS="-mfpu=neon -mfloat-abi=softfp"
+
+have_arm_neon=no
+AC_MSG_CHECKING(whether to use ARM NEON)
+xserver_save_CFLAGS=$CFLAGS
+CFLAGS="$CFLAGS $ARM_NEON_CFLAGS"
+AC_COMPILE_IFELSE([
+#include <arm_neon.h>
+int main () {
+    uint8x8_t neon_test=vmov_n_u8(0);
+    return 0;
+}], have_arm_neon=yes)
+CFLAGS=$xserver_save_CFLAGS
+
+AC_ARG_ENABLE(arm-neon,
+   [AC_HELP_STRING([--disable-arm-neon],
+                   [disable ARM NEON fast paths])],
+   [enable_arm_neon=$enableval], [enable_arm_neon=auto])
+
+if test $enable_arm_neon = no ; then
+   have_arm_neon=disabled
+fi
+
+if test $have_arm_neon = yes ; then
+   AC_DEFINE(USE_ARM_NEON, 1, [use ARM NEON compiler intrinsics])
+else
+   ARM_NEON_CFLAGS=
+fi
+
+AC_MSG_RESULT($have_arm_neon)
+if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
+   AC_MSG_ERROR([ARM NEON intrinsics not detected])
+fi
+
+dnl Check for GNU-style inline assembly support
+
+have_gcc_inline_asm=no
+AC_MSG_CHECKING(whether to use GNU-style inline assembler)
+AC_COMPILE_IFELSE([
+int main () {
+    /* Most modern architectures have a NOP instruction, so this is a fairly generic test. */
+	asm volatile ( "\tnop\n" : : : "cc", "memory" );
+    return 0;
+}], have_gcc_inline_asm=yes)
+
+AC_ARG_ENABLE(gcc-inline-asm,
+   [AC_HELP_STRING([--disable-gcc-inline-asm],
+                   [disable GNU-style inline assembler])],
+   [enable_gcc_inline_asm=$enableval], [enable_gcc_inline_asm=auto])
+
+if test $enable_gcc_inline_asm = no ; then
+   have_gcc_inline_asm=disabled
+fi
+
+if test $have_gcc_inline_asm = yes ; then
+   AC_DEFINE(USE_GCC_INLINE_ASM, 1, [use GNU-style inline assembler])
+fi
+
+AC_MSG_RESULT($have_gcc_inline_asm)
+if test $enable_gcc_inline_asm = yes && test $have_gcc_inline_asm = no ; then
+   AC_MSG_ERROR([GNU-style inline assembler not detected])
+fi
+
+
+AC_SUBST(ARM_SIMD_CFLAGS)
+AC_SUBST(ARM_NEON_CFLAGS)
 
 AM_CONDITIONAL(USE_ARM_SIMD, test $have_arm_simd = yes)
+AM_CONDITIONAL(USE_ARM_NEON, test $have_arm_neon = yes)
+AM_CONDITIONAL(USE_GCC_INLINE_ASM, test $have_gcc_inline_asm = yes)
+
 
 
 AC_ARG_ENABLE(gtk,
diff --git a/pixman/Makefile.am b/pixman/Makefile.am
index 7fdb085..e976fe4 100644
--- a/pixman/Makefile.am
+++ b/pixman/Makefile.am
@@ -83,15 +83,26 @@ libpixman_1_la_LDFLAGS += $(SSE2_LDFLAGS)
 libpixman_1_la_LIBADD += libpixman-sse2.la
 endif
 
-# arm code
+# arm simd code
 if USE_ARM_SIMD
 noinst_LTLIBRARIES += libpixman-arm-simd.la
 libpixman_arm_simd_la_SOURCES = \
 	pixman-arm-simd.c \
 	pixman-arm-simd.h
-libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) $(ARM_CFLAGS)
+libpixman_arm_simd_la_CFLAGS = $(DEP_CFLAGS) $(ARM_SIMD_CFLAGS)
 libpixman_arm_simd_la_LIBADD = $(DEP_LIBS)
 libpixman_1_la_LIBADD += libpixman-arm-simd.la
 endif
 
+# arm neon code
+if USE_ARM_NEON
+noinst_LTLIBRARIES += libpixman-arm-neon.la
+libpixman_arm_neon_la_SOURCES = \
+        pixman-arm-neon.c \
+        pixman-arm-neon.h
+libpixman_arm_neon_la_CFLAGS = $(DEP_CFLAGS) $(ARM_NEON_CFLAGS)
+libpixman_arm_neon_la_LIBADD = $(DEP_LIBS)
+libpixman_1_la_LIBADD += libpixman-arm-neon.la
+endif
+
 
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index 2b64342..1aef166 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -35,6 +35,7 @@
 #include "pixman-vmx.h"
 #include "pixman-sse2.h"
 #include "pixman-arm-simd.h"
+#include "pixman-arm-neon.h"
 #include "pixman-combine32.h"
 
 #if defined(USE_ARM_SIMD) && defined(_MSC_VER)


More information about the xorg-commit mailing list