[Pixman] [PATCH] test: Adjust for clang's removal of __builtin_shuffle
Matt Turner
mattst88 at gmail.com
Mon Jun 4 17:04:15 UTC 2018
From: Vladimir Smirnov <civil at gentoo.org>
__builtin_shuffle was removed in clang 5.0.
Build log says:
test/utils-prng.c:207:27: error: use of unknown builtin '__builtin_shuffle' [-Wimplicit-function-declaration]
randdata.vb = __builtin_shuffle (randdata.vb, bswap_shufflemask);
^
test/utils-prng.c:207:25: error: assigning to 'uint8x16' (vector of 16 'uint8_t' values) from incompatible type 'int'
randdata.vb = __builtin_shuffle (randdata.vb, bswap_shufflemask);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated
Link to original discussion:
http://lists.llvm.org/pipermail/cfe-dev/2017-August/055140.html
It's possible to build pixman if attached patch is applied. Basically
patch adds check for __builtin_shuffle support and in case there is
none, falls back to clang-specific __builtin_shufflevector that do the
same but have different API.
Bugzilla: https://bugs.gentoo.org/646360
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104886
Tested-by: Philip Chimento <philip.chimento at gmail.com>
Reviewed-by: Matt Turner <mattst88 at gmail.com>
---
I turned https://bugs.freedesktop.org/show_bug.cgi?id=104886#c2 into a
Tested-by tag for Philip.
I also reversed the order of the preprocessor conditions in order to
simplify it a bit (the !defined(__clang__) looked like a problem waiting
to happen).
Unfortunately combiner-test, gradient-crash-test, and stress-test fail
when built with clang for unrelated reasons.
test/utils-prng.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/test/utils-prng.c b/test/utils-prng.c
index c27b5be..0cf53dd 100644
--- a/test/utils-prng.c
+++ b/test/utils-prng.c
@@ -199,12 +199,25 @@ randmemset_internal (prng_t *prng,
}
else
{
+
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
+
#ifdef HAVE_GCC_VECTOR_EXTENSIONS
- const uint8x16 bswap_shufflemask =
+# if __has_builtin(__builtin_shufflevector)
+ randdata.vb =
+ __builtin_shufflevector (randdata.vb, randdata.vb,
+ 3, 2, 1, 0, 7, 6 , 5, 4,
+ 11, 10, 9, 8, 15, 14, 13, 12);
+# else
+ static const uint8x16 bswap_shufflemask =
{
3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12
};
randdata.vb = __builtin_shuffle (randdata.vb, bswap_shufflemask);
+# endif
+
store_rand_128_data (buf, &randdata, aligned);
buf += 16;
#else
--
2.16.1
More information about the Pixman
mailing list