[PATCH] Make pixman-mmx.c compile on x86-32 without optimization

Matt Turner mattst88 at gmail.com
Mon Jul 9 19:19:18 PDT 2012


On Mon, Jul 9, 2012 at 7:31 AM, Søren Sandmann <sandmann at cs.au.dk> wrote:
> From: Søren Sandmann Pedersen <ssp at redhat.com>
>
> When not optimizing, write _mm_shuffle_pi16() as a statement
> expression with inline assembly. That way we avoid
> __builtin_ia32_pshufw(), which is only available when compiling with
> -msse, while still allowing the non-optimizing gcc to understand that
> the second argument is a compile time constant.
>
> Cc: mattst88 at gmail.com
> ---
>  pixman/pixman-mmx.c |   13 +++++++++++--
>  1 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
> index 5441d6b..74a5e87 100644
> --- a/pixman/pixman-mmx.c
> +++ b/pixman/pixman-mmx.c
> @@ -105,8 +105,17 @@ _mm_shuffle_pi16 (__m64 __A, int8_t const __N)
>      return ret;
>  }
>  #  else
> -#   define _mm_shuffle_pi16(A, N) \
> -    ((__m64) __builtin_ia32_pshufw ((__v4hi)(__m64)(A), (int)(N)))
> +#   define _mm_shuffle_pi16(A, N)                                      \
> +    ({                                                                 \
> +       __m64 ret;                                                      \
> +                                                                       \
> +       asm ("pshufw %2, %1, %0\n\t"                                    \
> +            : "=y" (ret)                                               \
> +            : "y" (A), "K" ((const int8_t)N)                           \
> +       );                                                              \
> +                                                                       \
> +       ret;                                                            \
> +    })
>  #  endif
>  # endif
>  #endif
> --
> 1.7.4

Works for me.


More information about the xorg-devel mailing list