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 |
+ |