[Pixman] [PATCH 3/3] mmx: compile on ARM for iwmmxt optimizations
Soeren Sandmann
sandmann at cs.au.dk
Wed Jul 27 11:43:55 PDT 2011
mattst88 at gmail.com writes:
> diff --git a/configure.ac b/configure.ac
> index 4c62102..3123ad9 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -540,6 +540,54 @@ if test $enable_arm_neon = yes && test $have_arm_neon = no ; then
> AC_MSG_ERROR([ARM NEON intrinsics not detected])
> fi
>
> +dnl ===========================================================================
> +dnl Check for IWMMXT
> +
> +if test "x$IWMMXT_CFLAGS" = "x" ; then
> + IWMMXT_CFLAGS="-march=iwmmxt -flax-vector-conversions -Winline"
> +fi
> +
> +have_iwmmxt_intrinsics=no
> +AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
> +xserver_save_CFLAGS=$CFLAGS
> +CFLAGS="$IWMMXT_CFLAGS $CFLAGS"
> +AC_COMPILE_IFELSE([
> +#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
> +error "Need GCC >= 3.4 for IWMMXT intrinsics"
> +#endif
As mentioned, we probably need a check for 4.7 here. The check for 3.4
is only there because that was the first version of GCC to generate MMX
code that wasn't completely broken.
> -#endif /* USE_ARM_SIMD || USE_ARM_NEON */
> +#endif /* USE_ARM_SIMD || USE_ARM_NEON || USE_ARM_IWMMXT */
>
> #if defined(USE_MMX) || defined(USE_SSE2)
> /* The CPU detection code needs to be in a file not compiled with
> @@ -600,6 +613,11 @@ _pixman_choose_implementation (void)
> if (pixman_have_arm_neon ())
> imp = _pixman_implementation_create_arm_neon (imp);
> #endif
> +
> +#ifdef USE_ARM_IWMMXT
> + if (pixman_have_arm_iwmmxt ())
> + imp = _pixman_implementation_create_mmx (imp);
> +#endif
It looks like iwmmxt is selected ahead of NEON if both are present
(which seems to be the case for Marvell 628). I might be wrong, but my
suspicion would be that NEON is the better choice in that case.
Soren
More information about the Pixman
mailing list