Gentoo Archives: gentoo-commits

From: Stephan Hartmann <sultan@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: www-client/chromium/files/, www-client/chromium/
Date: Mon, 04 Oct 2021 20:58:36
Message-Id: 1633381106.b2ffd5b5e35dea8fd3c9dc8ab89bc20133024cdc.sultan@gentoo
1 commit: b2ffd5b5e35dea8fd3c9dc8ab89bc20133024cdc
2 Author: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
3 AuthorDate: Mon Oct 4 20:57:33 2021 +0000
4 Commit: Stephan Hartmann <sultan <AT> gentoo <DOT> org>
5 CommitDate: Mon Oct 4 20:58:26 2021 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b2ffd5b5
7
8 www-client/chromium: fix building without AVX2
9
10 Closes: https://bugs.gentoo.org/815487
11 Package-Manager: Portage-3.0.20, Repoman-3.0.3
12 Signed-off-by: Stephan Hartmann <sultan <AT> gentoo.org>
13
14 www-client/chromium/chromium-95.0.4638.32.ebuild | 3 +
15 www-client/chromium/chromium-96.0.4655.0.ebuild | 3 +
16 .../chromium/files/chromium-95-eigen-avx-1.patch | 229 +++++++++++++++++++++
17 .../chromium/files/chromium-95-eigen-avx-2.patch | 30 +++
18 .../chromium/files/chromium-95-eigen-avx-3.patch | 44 ++++
19 5 files changed, 309 insertions(+)
20
21 diff --git a/www-client/chromium/chromium-95.0.4638.32.ebuild b/www-client/chromium/chromium-95.0.4638.32.ebuild
22 index 15e8a266530..96e6f24a0b1 100644
23 --- a/www-client/chromium/chromium-95.0.4638.32.ebuild
24 +++ b/www-client/chromium/chromium-95.0.4638.32.ebuild
25 @@ -234,6 +234,9 @@ src_prepare() {
26 "${FILESDIR}/chromium-93-EnumTable-crash.patch"
27 "${FILESDIR}/chromium-93-InkDropHost-crash.patch"
28 "${FILESDIR}/chromium-95-maldoca-zlib.patch"
29 + "${FILESDIR}/chromium-95-eigen-avx-1.patch"
30 + "${FILESDIR}/chromium-95-eigen-avx-2.patch"
31 + "${FILESDIR}/chromium-95-eigen-avx-3.patch"
32 "${FILESDIR}/chromium-use-oauth2-client-switches-as-default.patch"
33 "${FILESDIR}/chromium-shim_headers.patch"
34 )
35
36 diff --git a/www-client/chromium/chromium-96.0.4655.0.ebuild b/www-client/chromium/chromium-96.0.4655.0.ebuild
37 index 15e18722e20..d53a4e5b63b 100644
38 --- a/www-client/chromium/chromium-96.0.4655.0.ebuild
39 +++ b/www-client/chromium/chromium-96.0.4655.0.ebuild
40 @@ -233,6 +233,9 @@ src_prepare() {
41 "${WORKDIR}/patches"
42 "${FILESDIR}/chromium-93-EnumTable-crash.patch"
43 "${FILESDIR}/chromium-93-InkDropHost-crash.patch"
44 + "${FILESDIR}/chromium-95-eigen-avx-1.patch"
45 + "${FILESDIR}/chromium-95-eigen-avx-2.patch"
46 + "${FILESDIR}/chromium-95-eigen-avx-3.patch"
47 "${FILESDIR}/chromium-use-oauth2-client-switches-as-default.patch"
48 "${FILESDIR}/chromium-shim_headers.patch"
49 )
50
51 diff --git a/www-client/chromium/files/chromium-95-eigen-avx-1.patch b/www-client/chromium/files/chromium-95-eigen-avx-1.patch
52 new file mode 100644
53 index 00000000000..21d520cc4d4
54 --- /dev/null
55 +++ b/www-client/chromium/files/chromium-95-eigen-avx-1.patch
56 @@ -0,0 +1,229 @@
57 +From 3d4ba855e014987cad86d62a8dff533492255695 Mon Sep 17 00:00:00 2001
58 +From: Antonio Sanchez <cantonios@××××××.com>
59 +Date: Wed, 1 Sep 2021 14:11:21 -0700
60 +Subject: [PATCH] Fix AVX integer packet issues.
61 +
62 +Most are instances of AVX2 functions not protected by
63 +`EIGEN_VECTORIZE_AVX2`. There was also a missing semi-colon
64 +for AVX512.
65 +---
66 + Eigen/src/Core/arch/AVX/PacketMath.h | 83 ++++++++++++++++++-------
67 + Eigen/src/Core/arch/AVX512/PacketMath.h | 6 +-
68 + 2 files changed, 63 insertions(+), 26 deletions(-)
69 +
70 +diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
71 +index dc1a1d6b0..247ee4efd 100644
72 +--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
73 ++++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
74 +@@ -262,10 +262,6 @@ template<> EIGEN_STRONG_INLINE Packet4d peven_mask(const Packet4d& /*a*/) { retu
75 + template<> EIGEN_STRONG_INLINE Packet8f pload1<Packet8f>(const float* from) { return _mm256_broadcast_ss(from); }
76 + template<> EIGEN_STRONG_INLINE Packet4d pload1<Packet4d>(const double* from) { return _mm256_broadcast_sd(from); }
77 +
78 +-template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return _mm256_add_ps(_mm256_set1_ps(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
79 +-template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return _mm256_add_pd(_mm256_set1_pd(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
80 +-template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return _mm256_add_epi32(_mm256_set1_epi32(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
81 +-
82 + template<> EIGEN_STRONG_INLINE Packet8f padd<Packet8f>(const Packet8f& a, const Packet8f& b) { return _mm256_add_ps(a,b); }
83 + template<> EIGEN_STRONG_INLINE Packet4d padd<Packet4d>(const Packet4d& a, const Packet4d& b) { return _mm256_add_pd(a,b); }
84 + template<> EIGEN_STRONG_INLINE Packet8i padd<Packet8i>(const Packet8i& a, const Packet8i& b) {
85 +@@ -278,6 +274,10 @@ template<> EIGEN_STRONG_INLINE Packet8i padd<Packet8i>(const Packet8i& a, const
86 + #endif
87 + }
88 +
89 ++template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return padd(pset1(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
90 ++template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return padd(pset1(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
91 ++template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return padd(pset1(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
92 ++
93 + template<> EIGEN_STRONG_INLINE Packet8f psub<Packet8f>(const Packet8f& a, const Packet8f& b) { return _mm256_sub_ps(a,b); }
94 + template<> EIGEN_STRONG_INLINE Packet4d psub<Packet4d>(const Packet4d& a, const Packet4d& b) { return _mm256_sub_pd(a,b); }
95 + template<> EIGEN_STRONG_INLINE Packet8i psub<Packet8i>(const Packet8i& a, const Packet8i& b) {
96 +@@ -300,7 +300,7 @@ template<> EIGEN_STRONG_INLINE Packet4d pnegate(const Packet4d& a)
97 + }
98 + template<> EIGEN_STRONG_INLINE Packet8i pnegate(const Packet8i& a)
99 + {
100 +- return _mm256_sub_epi32(_mm256_set1_epi32(0), a);
101 ++ return psub(pzero(a), a);
102 + }
103 +
104 + template<> EIGEN_STRONG_INLINE Packet8f pconj(const Packet8f& a) { return a; }
105 +@@ -419,7 +419,13 @@ template<> EIGEN_STRONG_INLINE Packet4d pmin<Packet4d>(const Packet4d& a, const
106 + #endif
107 + }
108 + template<> EIGEN_STRONG_INLINE Packet8i pmin<Packet8i>(const Packet8i& a, const Packet8i& b) {
109 ++#ifdef EIGEN_VECTORIZE_AVX2
110 + return _mm256_min_epi32(a, b);
111 ++#else
112 ++ __m128i lo = _mm_min_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
113 ++ __m128i hi = _mm_min_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
114 ++ return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
115 ++#endif
116 + }
117 +
118 + template<> EIGEN_STRONG_INLINE Packet8f pmax<Packet8f>(const Packet8f& a, const Packet8f& b) {
119 +@@ -445,7 +451,13 @@ template<> EIGEN_STRONG_INLINE Packet4d pmax<Packet4d>(const Packet4d& a, const
120 + #endif
121 + }
122 + template<> EIGEN_STRONG_INLINE Packet8i pmax<Packet8i>(const Packet8i& a, const Packet8i& b) {
123 ++#ifdef EIGEN_VECTORIZE_AVX2
124 + return _mm256_max_epi32(a, b);
125 ++#else
126 ++ __m128i lo = _mm_max_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
127 ++ __m128i hi = _mm_max_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
128 ++ return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
129 ++#endif
130 + }
131 +
132 + // Add specializations for min/max with prescribed NaN progation.
133 +@@ -641,17 +653,25 @@ template<> EIGEN_STRONG_INLINE Packet8f ploaddup<Packet8f>(const float* from)
134 + // then we can perform a consistent permutation on the global register to get everything in shape:
135 + return _mm256_permute_ps(tmp, _MM_SHUFFLE(3,3,2,2));
136 + }
137 +-// Loads 2 doubles from memory a returns the packet {a0, a0 a1, a1}
138 ++// Loads 2 doubles from memory a returns the packet {a0, a0, a1, a1}
139 + template<> EIGEN_STRONG_INLINE Packet4d ploaddup<Packet4d>(const double* from)
140 + {
141 + Packet4d tmp = _mm256_broadcast_pd((const __m128d*)(const void*)from);
142 + return _mm256_permute_pd(tmp, 3<<2);
143 + }
144 +-// Loads 4 integers from memory a returns the packet {a0, a0 a1, a1, a2, a2, a3, a3}
145 ++// Loads 4 integers from memory a returns the packet {a0, a0, a1, a1, a2, a2, a3, a3}
146 + template<> EIGEN_STRONG_INLINE Packet8i ploaddup<Packet8i>(const int* from)
147 + {
148 +- Packet8i a = _mm256_castsi128_si256(pload<Packet4i>(from));
149 ++#ifdef EIGEN_VECTORIZE_AVX2
150 ++ const Packet8i a = _mm256_castsi128_si256(pload<Packet4i>(from));
151 + return _mm256_permutevar8x32_epi32(a, _mm256_setr_epi32(0, 0, 1, 1, 2, 2, 3, 3));
152 ++#else
153 ++ __m256 tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
154 ++ // mimic an "inplace" permutation of the lower 128bits using a blend
155 ++ tmp = _mm256_blend_ps(tmp,_mm256_castps128_ps256(_mm_permute_ps( _mm256_castps256_ps128(tmp), _MM_SHUFFLE(1,0,1,0))), 15);
156 ++ // then we can perform a consistent permutation on the global register to get everything in shape:
157 ++ return _mm256_castps_si256(_mm256_permute_ps(tmp, _MM_SHUFFLE(3,3,2,2)));
158 ++#endif
159 + }
160 +
161 + // Loads 2 floats from memory a returns the packet {a0, a0 a0, a0, a1, a1, a1, a1}
162 +@@ -662,7 +682,7 @@ template<> EIGEN_STRONG_INLINE Packet8f ploadquad<Packet8f>(const float* from)
163 + }
164 + template<> EIGEN_STRONG_INLINE Packet8i ploadquad<Packet8i>(const int* from)
165 + {
166 +- return _mm256_inserti128_si256(_mm256_set1_epi32(*from), _mm_set1_epi32(*(from+1)), 1);
167 ++ return _mm256_insertf128_si256(_mm256_set1_epi32(*from), _mm_set1_epi32(*(from+1)), 1);
168 + }
169 +
170 + template<> EIGEN_STRONG_INLINE void pstore<float>(float* to, const Packet8f& from) { EIGEN_DEBUG_ALIGNED_STORE _mm256_store_ps(to, from); }
171 +@@ -723,13 +743,13 @@ template<> EIGEN_DEVICE_FUNC inline void pscatter<double, Packet4d>(double* to,
172 + }
173 + template<> EIGEN_DEVICE_FUNC inline void pscatter<int, Packet8i>(int* to, const Packet8i& from, Index stride)
174 + {
175 +- __m128i low = _mm256_extracti128_si256(from, 0);
176 ++ __m128i low = _mm256_extractf128_si256(from, 0);
177 + to[stride*0] = _mm_extract_epi32(low, 0);
178 + to[stride*1] = _mm_extract_epi32(low, 1);
179 + to[stride*2] = _mm_extract_epi32(low, 2);
180 + to[stride*3] = _mm_extract_epi32(low, 3);
181 +
182 +- __m128i high = _mm256_extracti128_si256(from, 1);
183 ++ __m128i high = _mm256_extractf128_si256(from, 1);
184 + to[stride*4] = _mm_extract_epi32(high, 0);
185 + to[stride*5] = _mm_extract_epi32(high, 1);
186 + to[stride*6] = _mm_extract_epi32(high, 2);
187 +@@ -803,7 +823,13 @@ template<> EIGEN_STRONG_INLINE Packet4d pabs(const Packet4d& a)
188 + }
189 + template<> EIGEN_STRONG_INLINE Packet8i pabs(const Packet8i& a)
190 + {
191 ++#ifdef EIGEN_VECTORIZE_AVX2
192 + return _mm256_abs_epi32(a);
193 ++#else
194 ++ __m128i lo = _mm_abs_epi32(_mm256_extractf128_si256(a, 0));
195 ++ __m128i hi = _mm_abs_epi32(_mm256_extractf128_si256(a, 1));
196 ++ return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
197 ++#endif
198 + }
199 +
200 + template<> EIGEN_STRONG_INLINE Packet8f pfrexp<Packet8f>(const Packet8f& a, Packet8f& exponent) {
201 +@@ -989,16 +1015,27 @@ ptranspose(PacketBlock<Packet8f,4>& kernel) {
202 + #define MM256_SHUFFLE_EPI32(A, B, M) \
203 + _mm256_castps_si256(_mm256_shuffle_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B), M))
204 +
205 ++#ifdef EIGEN_VECTORIZE_AVX2
206 ++#define MM256_UNPACKLO_EPI32(A, B) \
207 ++ _mm256_castps_si256(_mm256_unpacklo_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
208 ++#define MM256_UNPACKHI_EPI32(A, B) \
209 ++ _mm256_castps_si256(_mm256_unpackhi_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
210 ++#else
211 ++#define MM256_UNPACKLO_EPI32(A, B) _mm256_unpacklo_ps(A, B)
212 ++#define MM256_UNPACKHI_EPI32(A, B) _mm256_unpackhi_ps(A, B)
213 ++#endif
214 ++
215 ++
216 + EIGEN_DEVICE_FUNC inline void
217 + ptranspose(PacketBlock<Packet8i,8>& kernel) {
218 +- __m256i T0 = _mm256_unpacklo_epi32(kernel.packet[0], kernel.packet[1]);
219 +- __m256i T1 = _mm256_unpackhi_epi32(kernel.packet[0], kernel.packet[1]);
220 +- __m256i T2 = _mm256_unpacklo_epi32(kernel.packet[2], kernel.packet[3]);
221 +- __m256i T3 = _mm256_unpackhi_epi32(kernel.packet[2], kernel.packet[3]);
222 +- __m256i T4 = _mm256_unpacklo_epi32(kernel.packet[4], kernel.packet[5]);
223 +- __m256i T5 = _mm256_unpackhi_epi32(kernel.packet[4], kernel.packet[5]);
224 +- __m256i T6 = _mm256_unpacklo_epi32(kernel.packet[6], kernel.packet[7]);
225 +- __m256i T7 = _mm256_unpackhi_epi32(kernel.packet[6], kernel.packet[7]);
226 ++ __m256i T0 = MM256_UNPACKLO_EPI32(kernel.packet[0], kernel.packet[1]);
227 ++ __m256i T1 = MM256_UNPACKHI_EPI32(kernel.packet[0], kernel.packet[1]);
228 ++ __m256i T2 = MM256_UNPACKLO_EPI32(kernel.packet[2], kernel.packet[3]);
229 ++ __m256i T3 = MM256_UNPACKHI_EPI32(kernel.packet[2], kernel.packet[3]);
230 ++ __m256i T4 = MM256_UNPACKLO_EPI32(kernel.packet[4], kernel.packet[5]);
231 ++ __m256i T5 = MM256_UNPACKHI_EPI32(kernel.packet[4], kernel.packet[5]);
232 ++ __m256i T6 = MM256_UNPACKLO_EPI32(kernel.packet[6], kernel.packet[7]);
233 ++ __m256i T7 = MM256_UNPACKHI_EPI32(kernel.packet[6], kernel.packet[7]);
234 + __m256i S0 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(1,0,1,0));
235 + __m256i S1 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(3,2,3,2));
236 + __m256i S2 = MM256_SHUFFLE_EPI32(T1,T3,_MM_SHUFFLE(1,0,1,0));
237 +@@ -1019,10 +1056,10 @@ ptranspose(PacketBlock<Packet8i,8>& kernel) {
238 +
239 + EIGEN_DEVICE_FUNC inline void
240 + ptranspose(PacketBlock<Packet8i,4>& kernel) {
241 +- __m256i T0 = _mm256_unpacklo_epi32(kernel.packet[0], kernel.packet[1]);
242 +- __m256i T1 = _mm256_unpackhi_epi32(kernel.packet[0], kernel.packet[1]);
243 +- __m256i T2 = _mm256_unpacklo_epi32(kernel.packet[2], kernel.packet[3]);
244 +- __m256i T3 = _mm256_unpackhi_epi32(kernel.packet[2], kernel.packet[3]);
245 ++ __m256i T0 = MM256_UNPACKLO_EPI32(kernel.packet[0], kernel.packet[1]);
246 ++ __m256i T1 = MM256_UNPACKHI_EPI32(kernel.packet[0], kernel.packet[1]);
247 ++ __m256i T2 = MM256_UNPACKLO_EPI32(kernel.packet[2], kernel.packet[3]);
248 ++ __m256i T3 = MM256_UNPACKHI_EPI32(kernel.packet[2], kernel.packet[3]);
249 +
250 + __m256i S0 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(1,0,1,0));
251 + __m256i S1 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(3,2,3,2));
252 +diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h
253 +index 6ce15c677..0810f66ee 100644
254 +--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h
255 ++++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h
256 +@@ -1028,7 +1028,7 @@ template<> EIGEN_STRONG_INLINE Packet8d pldexp<Packet8d>(const Packet8d& a, cons
257 +
258 + // AVX512F does not define _mm512_extracti32x8_epi32 to extract _m256i from _m512i
259 + #define EIGEN_EXTRACT_8i_FROM_16i(INPUT, OUTPUT) \
260 +- __m256i OUTPUT##_0 = _mm512_extracti32x8_epi32(INPUT, 0) \
261 ++ __m256i OUTPUT##_0 = _mm512_extracti32x8_epi32(INPUT, 0); \
262 + __m256i OUTPUT##_1 = _mm512_extracti32x8_epi32(INPUT, 1)
263 + #else
264 + #define EIGEN_EXTRACT_8f_FROM_16f(INPUT, OUTPUT) \
265 +@@ -1037,7 +1037,7 @@ template<> EIGEN_STRONG_INLINE Packet8d pldexp<Packet8d>(const Packet8d& a, cons
266 + _mm512_extractf32x4_ps(INPUT, 1), 1); \
267 + __m256 OUTPUT##_1 = _mm256_insertf128_ps( \
268 + _mm256_castps128_ps256(_mm512_extractf32x4_ps(INPUT, 2)), \
269 +- _mm512_extractf32x4_ps(INPUT, 3), 1);
270 ++ _mm512_extractf32x4_ps(INPUT, 3), 1)
271 +
272 + #define EIGEN_EXTRACT_8i_FROM_16i(INPUT, OUTPUT) \
273 + __m256i OUTPUT##_0 = _mm256_insertf128_si256( \
274 +@@ -1045,7 +1045,7 @@ template<> EIGEN_STRONG_INLINE Packet8d pldexp<Packet8d>(const Packet8d& a, cons
275 + _mm512_extracti32x4_epi32(INPUT, 1), 1); \
276 + __m256i OUTPUT##_1 = _mm256_insertf128_si256( \
277 + _mm256_castsi128_si256(_mm512_extracti32x4_epi32(INPUT, 2)), \
278 +- _mm512_extracti32x4_epi32(INPUT, 3), 1);
279 ++ _mm512_extracti32x4_epi32(INPUT, 3), 1)
280 + #endif
281 +
282 + #ifdef EIGEN_VECTORIZE_AVX512DQ
283 +--
284 +GitLab
285 +
286
287 diff --git a/www-client/chromium/files/chromium-95-eigen-avx-2.patch b/www-client/chromium/files/chromium-95-eigen-avx-2.patch
288 new file mode 100644
289 index 00000000000..1cb8007b6a6
290 --- /dev/null
291 +++ b/www-client/chromium/files/chromium-95-eigen-avx-2.patch
292 @@ -0,0 +1,30 @@
293 +From def145547fc6abd14236e103b9443a36064f664f Mon Sep 17 00:00:00 2001
294 +From: Antonio Sanchez <cantonios@××××××.com>
295 +Date: Thu, 2 Sep 2021 16:21:07 -0700
296 +Subject: [PATCH] Add missing packet types in pset1 call.
297 +
298 +Oops, introduced this when "fixing" integer packets.
299 +---
300 + Eigen/src/Core/arch/AVX/PacketMath.h | 6 +++---
301 + 1 file changed, 3 insertions(+), 3 deletions(-)
302 +
303 +diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
304 +index 247ee4efd..8da9031dc 100644
305 +--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
306 ++++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
307 +@@ -274,9 +274,9 @@ template<> EIGEN_STRONG_INLINE Packet8i padd<Packet8i>(const Packet8i& a, const
308 + #endif
309 + }
310 +
311 +-template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return padd(pset1(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
312 +-template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return padd(pset1(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
313 +-template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return padd(pset1(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
314 ++template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return padd(pset1<Packet8f>(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
315 ++template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return padd(pset1<Packet4d>(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
316 ++template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return padd(pset1<Packet8i>(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
317 +
318 + template<> EIGEN_STRONG_INLINE Packet8f psub<Packet8f>(const Packet8f& a, const Packet8f& b) { return _mm256_sub_ps(a,b); }
319 + template<> EIGEN_STRONG_INLINE Packet4d psub<Packet4d>(const Packet4d& a, const Packet4d& b) { return _mm256_sub_pd(a,b); }
320 +--
321 +GitLab
322 +
323
324 diff --git a/www-client/chromium/files/chromium-95-eigen-avx-3.patch b/www-client/chromium/files/chromium-95-eigen-avx-3.patch
325 new file mode 100644
326 index 00000000000..44e9ef4e0ec
327 --- /dev/null
328 +++ b/www-client/chromium/files/chromium-95-eigen-avx-3.patch
329 @@ -0,0 +1,44 @@
330 +From 7792b1e909a98703181aecb8810b4b654004c25d Mon Sep 17 00:00:00 2001
331 +From: Antonio Sanchez <cantonios@××××××.com>
332 +Date: Fri, 3 Sep 2021 10:41:35 -0700
333 +Subject: [PATCH] Fix AVX2 PacketMath.h.
334 +
335 +There were a couple typos ps -> epi32, and an unaligned load issue.
336 +---
337 + Eigen/src/Core/arch/AVX/PacketMath.h | 8 ++++----
338 + 1 file changed, 4 insertions(+), 4 deletions(-)
339 +
340 +diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
341 +index 8da9031dc..41cb7af9c 100644
342 +--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
343 ++++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
344 +@@ -663,7 +663,7 @@ template<> EIGEN_STRONG_INLINE Packet4d ploaddup<Packet4d>(const double* from)
345 + template<> EIGEN_STRONG_INLINE Packet8i ploaddup<Packet8i>(const int* from)
346 + {
347 + #ifdef EIGEN_VECTORIZE_AVX2
348 +- const Packet8i a = _mm256_castsi128_si256(pload<Packet4i>(from));
349 ++ const Packet8i a = _mm256_castsi128_si256(ploadu<Packet4i>(from));
350 + return _mm256_permutevar8x32_epi32(a, _mm256_setr_epi32(0, 0, 1, 1, 2, 2, 3, 3));
351 + #else
352 + __m256 tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
353 +@@ -1015,14 +1015,14 @@ ptranspose(PacketBlock<Packet8f,4>& kernel) {
354 + #define MM256_SHUFFLE_EPI32(A, B, M) \
355 + _mm256_castps_si256(_mm256_shuffle_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B), M))
356 +
357 +-#ifdef EIGEN_VECTORIZE_AVX2
358 ++#ifndef EIGEN_VECTORIZE_AVX2
359 + #define MM256_UNPACKLO_EPI32(A, B) \
360 + _mm256_castps_si256(_mm256_unpacklo_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
361 + #define MM256_UNPACKHI_EPI32(A, B) \
362 + _mm256_castps_si256(_mm256_unpackhi_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
363 + #else
364 +-#define MM256_UNPACKLO_EPI32(A, B) _mm256_unpacklo_ps(A, B)
365 +-#define MM256_UNPACKHI_EPI32(A, B) _mm256_unpackhi_ps(A, B)
366 ++#define MM256_UNPACKLO_EPI32(A, B) _mm256_unpacklo_epi32(A, B)
367 ++#define MM256_UNPACKHI_EPI32(A, B) _mm256_unpackhi_epi32(A, B)
368 + #endif
369 +
370 +
371 +--
372 +GitLab
373 +