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