diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2012-07-09 06:58:59 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2012-07-09 12:21:04 -0400 |
commit | 7dbb75ddb09948b719d6e4bb29b9fe26a4c116d9 (patch) | |
tree | 726cf0fee463afcbcdeb5203c63f6eab54e49578 | |
parent | 4d641c3803d508ba1eb40e61257949422ae2b90d (diff) |
Make pixman-mmx.c compile on x86-32 without optimizationmmxfix
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.
Tested-by: Knut Petersen <knut_petersen@t-online.de>
-rw-r--r-- | 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 5441d6bc..74a5e87a 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 |