summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Hartmann <sultan@gentoo.org>2022-08-20 10:17:43 +0200
committerStephan Hartmann <sultan@gentoo.org>2022-08-20 10:18:03 +0200
commit2197ac9c808d24fdf1f039cec0b9d40038a4e784 (patch)
tree0cf627a5d58042078a26022678715948727d539a
parentwww-apps/nextcloud: drop 23.0.5 (diff)
downloadgentoo-2197ac9c.tar.gz
gentoo-2197ac9c.tar.bz2
gentoo-2197ac9c.zip
www-client/chromium: fix building on arm64
Closes: https://bugs.gentoo.org/858587 Signed-off-by: Stephan Hartmann <sultan@gentoo.org>
-rw-r--r--www-client/chromium/chromium-104.0.5112.101.ebuild1
-rw-r--r--www-client/chromium/files/chromium-104-v8-neon.patch72
2 files changed, 73 insertions, 0 deletions
diff --git a/www-client/chromium/chromium-104.0.5112.101.ebuild b/www-client/chromium/chromium-104.0.5112.101.ebuild
index 21b76aac3497..21adbac9cf6b 100644
--- a/www-client/chromium/chromium-104.0.5112.101.ebuild
+++ b/www-client/chromium/chromium-104.0.5112.101.ebuild
@@ -316,6 +316,7 @@ src_prepare() {
"${FILESDIR}/chromium-98-gtk4-build.patch"
"${FILESDIR}/chromium-104-tflite-system-zlib.patch"
"${FILESDIR}/chromium-104-swiftshader-no-wayland.patch"
+ "${FILESDIR}/chromium-104-v8-neon.patch"
"${FILESDIR}/chromium-use-oauth2-client-switches-as-default.patch"
"${FILESDIR}/chromium-shim_headers.patch"
"${FILESDIR}/chromium-cross-compile.patch"
diff --git a/www-client/chromium/files/chromium-104-v8-neon.patch b/www-client/chromium/files/chromium-104-v8-neon.patch
new file mode 100644
index 000000000000..ee573f8862e6
--- /dev/null
+++ b/www-client/chromium/files/chromium-104-v8-neon.patch
@@ -0,0 +1,72 @@
+From 0fc6592cf8867f0cd6d8d41b43392fb52d359649 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jdapena@igalia.com>
+Date: Tue, 07 Jun 2022 15:44:35 +0200
+Subject: [PATCH] GCC: fix compilation of NEON64 extract_first_nonzero_index
+
+GCC fails to compile extract_first_nonzero_index because of the
+signedness type mismatch in the NEON intrinsics.
+
+Bug: chromium:819294
+Change-Id: I9b73e5fa1d5fbf161740ab1b5d77f5c494369dfa
+Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3693709
+Reviewed-by: Toon Verwaest <verwaest@chromium.org>
+Commit-Queue: José Dapena Paz <jdapena@igalia.com>
+Cr-Commit-Position: refs/heads/main@{#81063}
+---
+
+diff --git a/v8/src/objects/simd.cc b/v8/src/objects/simd.cc
+index d3cedfe..0a73b9c 100644
+--- a/v8/src/objects/simd.cc
++++ b/v8/src/objects/simd.cc
+@@ -95,24 +95,21 @@
+ }
+
+ template <>
+-inline int extract_first_nonzero_index(int32x4_t v) {
+- int32x4_t mask = {4, 3, 2, 1};
++inline int extract_first_nonzero_index(uint32x4_t v) {
++ uint32x4_t mask = {4, 3, 2, 1};
+ mask = vandq_u32(mask, v);
+ return 4 - vmaxvq_u32(mask);
+ }
+
+ template <>
+-inline int extract_first_nonzero_index(int64x2_t v) {
+- int32x4_t mask = {2, 0, 1, 0}; // Could also be {2,2,1,1} or {0,2,0,1}
+- mask = vandq_u32(mask, vreinterpretq_s32_s64(v));
++inline int extract_first_nonzero_index(uint64x2_t v) {
++ uint32x4_t mask = {2, 0, 1, 0}; // Could also be {2,2,1,1} or {0,2,0,1}
++ mask = vandq_u32(mask, vreinterpretq_u32_u64(v));
+ return 2 - vmaxvq_u32(mask);
+ }
+
+-template <>
+-inline int extract_first_nonzero_index(float64x2_t v) {
+- int32x4_t mask = {2, 0, 1, 0}; // Could also be {2,2,1,1} or {0,2,0,1}
+- mask = vandq_u32(mask, vreinterpretq_s32_f64(v));
+- return 2 - vmaxvq_u32(mask);
++inline int32_t reinterpret_vmaxvq_u64(uint64x2_t v) {
++ return vmaxvq_u32(vreinterpretq_u32_u64(v));
+ }
+ #endif
+
+@@ -204,14 +201,14 @@
+ }
+ #elif defined(NEON64)
+ if constexpr (std::is_same<T, uint32_t>::value) {
+- VECTORIZED_LOOP_Neon(int32x4_t, int32x4_t, vdupq_n_u32, vceqq_u32,
++ VECTORIZED_LOOP_Neon(uint32x4_t, uint32x4_t, vdupq_n_u32, vceqq_u32,
+ vmaxvq_u32)
+ } else if constexpr (std::is_same<T, uint64_t>::value) {
+- VECTORIZED_LOOP_Neon(int64x2_t, int64x2_t, vdupq_n_u64, vceqq_u64,
+- vmaxvq_u32)
++ VECTORIZED_LOOP_Neon(uint64x2_t, uint64x2_t, vdupq_n_u64, vceqq_u64,
++ reinterpret_vmaxvq_u64)
+ } else if constexpr (std::is_same<T, double>::value) {
+- VECTORIZED_LOOP_Neon(float64x2_t, float64x2_t, vdupq_n_f64, vceqq_f64,
+- vmaxvq_f64)
++ VECTORIZED_LOOP_Neon(float64x2_t, uint64x2_t, vdupq_n_f64, vceqq_f64,
++ reinterpret_vmaxvq_u64)
+ }
+ #else
+ UNREACHABLE();