[Pixman] mmx build regression

Jeremy Huddleston jeremyhu at freedesktop.org
Thu Feb 23 09:35:21 PST 2012


It doesn't look like it's an issue with clang not knowing that __N is a compile-time constant.  It does look like it's not understanding K.

With Søren's patch, I'm now getting:
fatal error: error in backend: Unsupported asm: input constraint with a matching output constraint of
      incompatible type!

<sarcasm>These errors are so wonderfully helpful and specific</sarcasm>

I'll file a radar for this, but you may need to find a solution for __clang__ until it's resolved.

FWIW:
$ /usr/bin/clang -DHAVE_CONFIG_H -I. -I.. -DDEBUG -DXP_NO_X_HEADERS -DXPLUGIN_DOCK_SUPPORT -mmmx -Winline -arch i386 -arch x86_64 -O0 -g3 -gdwarf-2 -Wall -fno-strict-aliasing -fvisibility=hidden -c pixman-mmx.c  -fno-common -DPIC -o .libs/libpixman_mmx_la-pixman-mmx.o
pixman-mmx.c:63:73: warning: unknown attribute '__artificial__' ignored [-Wattributes]
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
                                                                        ^
fatal error: error in backend: Unsupported asm: input constraint with a matching output constraint of
      incompatible type!

$ /usr/bin/llvm-gcc-4.2 -DHAVE_CONFIG_H -I. -I.. -DDEBUG -DXP_NO_X_HEADERS -DXPLUGIN_DOCK_SUPPORT -mmmx -Winline -arch i386 -arch x86_64 -O0 -g3 -gdwarf-2 -Wall -fno-strict-aliasing -fvisibility=hidden -c pixman-mmx.c  -fno-common -DPIC -o .libs/libpixman_mmx_la-pixman-mmx.o
pixman-mmx.c:65: warning: ‘__artificial__’ attribute directive ignored
pixman-mmx.c:65: warning: ‘__artificial__’ attribute directive ignored
<success>


On Feb 22, 2012, at 7:53 PM, Søren Sandmann <sandmann at cs.au.dk> wrote:

> Matt Turner <mattst88 at gmail.com> writes:
> 
>> This looks like an LLVM/clang bug.
>> 
>> The 'K' constraint is documented here
>> http://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html#Machine-Constraints
>> as an 8-bit immediate.
> 
> Maybe clang just doesn't realize that the __N is compile-time
> constant. If so, changing _mm_shuffle_pi16 to be a macro might help. See
> patch below.
> 
> 
> Søren
> 
> 
> From 77f1fcc1bf54f81aa27fd0d309c0190bf53bff66 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= <ssp at redhat.com>
> Date: Wed, 22 Feb 2012 22:52:03 -0500
> Subject: [PATCH] mmx: Make _mm_shuffle_pi16() a macro
> 
> That way compilers can have a better chance of realizing that the __N
> argument is compile-time constant.
> ---
> pixman/pixman-mmx.c |   22 +++++++++++-----------
> 1 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
> index a3500ce..9591c84 100644
> --- a/pixman/pixman-mmx.c
> +++ b/pixman/pixman-mmx.c
> @@ -70,18 +70,18 @@ _mm_mulhi_pu16 (__m64 __A, __m64 __B)
>     return __A;
> }
> 
> -extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
> -_mm_shuffle_pi16 (__m64 __A, int8_t const __N)
> -{
> -    __m64 ret;
> -
> -    asm ("pshufw %2, %1, %0\n\t"
> -	: "=y" (ret)
> -	: "y" (__A), "K" (__N)
> -    );
> +/* This has to be a macro; otherwise the compiler may not realize
> + * that __N is a compile-time constant.
> + */
> +#define _mm_shuffle_pi16(__A, __N)                                     \
> +    ({                                                                 \
> +       __m64 __retval;                                                 \
> +       asm ("pshufw %2, %1, %0\n\t"                                    \
> +            : "=y" (__retval)                                          \
> +            : "y" (__A), "K" ((int8_t)__N));                           \
> +       __retval;                                                       \
> +    })
> 
> -    return ret;
> -}
> #endif
> 
> #define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \
> -- 
> 1.7.4





More information about the Pixman mailing list