The package rpms/xscreensaver.git has added or updated architecture specific content in
its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/xscreensaver.git/commit/?id=01752....
Change:
-%ifarch aarch64
Thanks.
Full change:
============
commit 0175259029736247e7c25508a81d7190c9df7cdf
Author: Mamoru TASAKA <mtasaka(a)fedoraproject.org>
Date: Thu Nov 4 23:20:04 2021 +0900
marbling: fix signedness for x86_64 and aarch64 on vectorization
build marbling on aarch64 again
diff --git
a/xscreensaver-6.02-0003-marbling-fix-signedness-for-x86_64-and-aarch64-on-ve.patch
b/xscreensaver-6.02-0003-marbling-fix-signedness-for-x86_64-and-aarch64-on-ve.patch
new file mode 100644
index 0000000..cc09f1d
--- /dev/null
+++ b/xscreensaver-6.02-0003-marbling-fix-signedness-for-x86_64-and-aarch64-on-ve.patch
@@ -0,0 +1,150 @@
+From d68bca70579d141b1457f84ce5e6d022a4e458b9 Mon Sep 17 00:00:00 2001
+From: Mamoru TASAKA <mtasaka(a)fedoraproject.org>
+Date: Thu, 4 Nov 2021 22:38:26 +0900
+Subject: [PATCH] marbling: fix signedness for x86_64 and aarch64 on
+ vectorization
+
+---
+ hacks/marbling.c | 57 ++++++++++++++++++++++++++++--------------------
+ 1 file changed, 33 insertions(+), 24 deletions(-)
+
+diff --git a/hacks/marbling.c b/hacks/marbling.c
+index 0896aa5..bb00431 100644
+--- a/hacks/marbling.c
++++ b/hacks/marbling.c
+@@ -44,6 +44,13 @@
+ #include "thread_util.h"
+ #include "xshm.h"
+
++#if defined __GNUC__ || defined __clang__ || \
++ defined __STDC_VERSION__ && __STDC_VERSION__ > 199901L
++# define INLINE inline
++#else
++# define INLINE
++#endif
++
+ /* Use GCC/Clang's vector SIMD extensions, when possible.
+
https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
+ */
+@@ -59,17 +66,21 @@
+ */
+ # if defined __AVX2__
+ # define VSIZE 16
+-# define IMUL_HI __builtin_ia32_pmulhw256
+-# define MUL_HI __builtin_ia32_pmulhuw256
++# define IMUL_HI_OP __builtin_ia32_pmulhw256
++# define MUL_HI_OP __builtin_ia32_pmulhuw256
+ # elif defined __SSE2__
+ # define VSIZE 8
+-# define IMUL_HI __builtin_ia32_pmulhw128
+-# define MUL_HI __builtin_ia32_pmulhuw128
++# define IMUL_HI_OP __builtin_ia32_pmulhw128
++# define MUL_HI_OP __builtin_ia32_pmulhuw128
+ # endif
+
+ # ifdef VSIZE
+-typedef int16_t v_uhi __attribute__((vector_size(VSIZE * 2)));
++typedef uint16_t v_uhi __attribute__((vector_size(VSIZE * 2)));
+ typedef int16_t v_hi __attribute__((vector_size(VSIZE * 2)));
++
++static INLINE v_hi IMUL_HI(v_hi a, v_hi b) { return IMUL_HI_OP(a, b); }
++static INLINE v_uhi MUL_HI(v_uhi a, v_uhi b) { return (v_uhi)MUL_HI_OP((v_hi)a,
(v_hi)b); }
++
+ # endif
+ # endif
+
+@@ -114,13 +125,6 @@ typedef int16_t v_hi;
+ # define VEC_INDEX(v, i) ((v)[i])
+ #endif
+
+-#if defined __GNUC__ || defined __clang__ || \
+- defined __STDC_VERSION__ && __STDC_VERSION__ > 199901L
+-# define INLINE inline
+-#else
+-# define INLINE
+-#endif
+-
+ struct state {
+ Display *dpy;
+ Window window;
+@@ -159,15 +163,16 @@ const unsigned lerp_loss = 2; /* Min: 2 */
+ const unsigned noise_out_bits = noise_work_bits - 3 * lerp_loss + 1;
+ const unsigned noise_in_bits = 8;
+
+-static INLINE v_hi
++static INLINE v_uhi
+ broadcast (int16_t x)
+ {
+ #if VSIZE == 1
+- return x;
++ v_hi r = x;
+ #else
+ v_hi r = {0};
+- return r + x;
++ r = r + x;
+ #endif
++ return (v_uhi)r;
+ }
+
+ static INLINE v_uhi
+@@ -176,10 +181,13 @@ fade (v_uhi t)
+ const uint16_t F = 256;
+
+ #if __ARM_NEON
+- v_uhi t2 = (t * t) >> 1;
+- return
+- vqdmulhq_s16(t2, 10 * t - vqdmulhq_s16(t2, (uint16_t)(15 * F) - t * 6)) <<
++ v_uhi ut2 = (t * t) >> 1;
++ v_hi it2 = (v_hi)ut2;
++ v_hi it = (v_hi)t;
++ v_hi iret =
++ vqdmulhq_s16(it2, 10 * it - vqdmulhq_s16(it2, (int16_t)(15 * F) - it * 6)) <<
+ (noise_work_bits - noise_in_bits + 1);
++ return (v_uhi)iret;
+ #else
+ v_uhi t2 = t * t;
+ return
+@@ -239,7 +247,7 @@ noise (v_uhi x, v_uhi y, v_uhi z)
+ {
+ const v_uhi one = broadcast(1 << noise_work_bits);
+ v_uhi X, Y, Z, A, B, AA, AB, BA, BB;
+- v_uhi u, v, w;
++ v_hi u, v, w;
+ v_hi c0, c1, c2, c3, c4, c5, c6, c7;
+ X = x >> noise_in_bits; /* FIND UNIT CUBE THAT */
+ Y = y >> noise_in_bits; /* CONTAINS POINT. */
+@@ -247,9 +255,9 @@ noise (v_uhi x, v_uhi y, v_uhi z)
+ x &= (uint16_t)((1 << noise_in_bits) - 1); /* FIND RELATIVE X,Y,Z */
+ y &= (uint16_t)((1 << noise_in_bits) - 1); /* OF POINT IN CUBE. */
+ z &= (uint16_t)((1 << noise_in_bits) - 1);
+- u = fade(x); /* COMPUTE FADE CURVES */
+- v = fade(y); /* FOR EACH OF X,Y,Z. */
+- w = fade(z);
++ u = (v_hi)fade(x); /* COMPUTE FADE CURVES */
++ v = (v_hi)fade(y); /* FOR EACH OF X,Y,Z. */
++ w = (v_hi)fade(z);
+
+ A = noise_rand(X)+Y, AA = P(A)+Z, AB = P(A+1)+Z; /* HASH COORDINATES OF */
+ B = P(X+1)+Y, BA = P(B)+Z, BB = P(B+1)+Z; /* THE 8 CUBE CORNERS, */
+@@ -265,7 +273,8 @@ noise (v_uhi x, v_uhi y, v_uhi z)
+ c6 = grad(P(AB+1), x, y-one, z-one );
+ c7 = grad(P(BB+1), x-one, y-one, z-one );
+
+- return SCALE(LERP(w, LERP(v, LERP(u, c0, c1), /* AND ADD BLENDED */
++ return
++ (v_uhi)SCALE(LERP(w, LERP(v, LERP(u, c0, c1), /* AND ADD BLENDED */
+ LERP(u, c2, c3)), /* RESULTS FROM 8 */
+ LERP(v, LERP(u, c4, c5), /* CORNERS OF CUBE */
+ LERP(u, c6, c7))));
+@@ -292,7 +301,7 @@ fbm (v_uhi x, v_uhi y, v_uhi z)
+ for (i = 0; i < octaves; i++)
+ {
+ #if __ARM_NEON
+- t += vqdmulhq_n_s16(noise (f*x, f*y, f*z), a);
++ t += (v_uhi)vqdmulhq_n_s16((v_hi)noise (f*x, f*y, f*z), a);
+ a = ((uint32_t)a * iG) >> 16;
+ #else
+ t += MUL_HI(noise (f*x, f*y, f*z), a);
+--
+2.33.1
+
diff --git a/xscreensaver.spec b/xscreensaver.spec
index f8149c7..4bb19fa 100644
--- a/xscreensaver.spec
+++ b/xscreensaver.spec
@@ -11,7 +11,7 @@
%define split_getimage 1
%endif
-%define fedora_rel 3
+%define fedora_rel 4
%global use_clang_as_cc 0
%global use_clang_analyze 0
@@ -98,6 +98,8 @@ Patch3607:
xscreensaver-5.36-0007-misc-kill-gcc-warn_unused_result-warning
Patch5201:
xscreensaver-6.02-0001-xscreensaver_systemd_loop-avoid-use-after-free-on-fo.patch
# get_egl_config: reset loop counter with prefersGLSL option each loop
Patch5202:
xscreensaver-6.02-0002-get_egl_config-reset-loop-counter-with-prefersGLSL-o.patch
+# marbling: fix signedness for x86_64 and aarch64 on vectorization
+Patch5203:
xscreensaver-6.02-0003-marbling-fix-signedness-for-x86_64-and-aarch64-on-ve.patch
# Fedora specific
# window_init: search parenthesis first for searching year
Patch10001:
xscreensaver-6.00-0001-screensaver_id-search-parenthesis-first-for-searchin.patch
@@ -380,6 +382,7 @@ find . -name \*.c -exec chmod ugo-x {} \;
#%%__cat %PATCH3607 | %__git am
%__cat %PATCH5201 | %__git am
%__cat %PATCH5202 | %__git am
+%__cat %PATCH5203 | %__git am
%__cat %PATCH10001 | %__git am
%__cat %PATCH10003 | %__git am
%__cat %PATCH10005 | %__git am
@@ -536,14 +539,6 @@ sed -i.delay -e 's|60 \* 15|20|' driver/test-grab.c
sed -i 's|-Wunknown-warning-option|-Wfoo-bar-baz|' ax_pthread.m4
%__git commit -m "Really use unknowing warning option" -a
-# aarch64: don't build marbling for now, does not build
-%ifarch aarch64
-sed -i hacks/Makefile.in \
- -e 's@marbling binaryhorizon@binaryhorizon@'
-%__git commit -m "don't build marbling for now" -a
-%endif
-
-
aclocal
autoconf
autoheader
@@ -1129,6 +1124,10 @@ exit 0
%endif
%changelog
+* Thu Nov 4 2021 Mamoru TASAKA <mtasaka(a)fedoraproject.org> - 1:6.02-4
+- marbling: fix signedness for x86_64 and aarch64 on vectorization
+- build marbling on aarch64 again
+
* Mon Nov 1 2021 Mamoru TASAKA <mtasaka(a)fedoraproject.org> - 1:6.02-3
- get_egl_config: reset loop counter with prefersGLSL option each loop
(ref: bug 1983483)