[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