@img/sharp-libvips-dev-wasm32 1.3.0-rc.6 → 1.3.0-rc.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -23
- package/include/expat.h +14 -2
- package/include/expat_config.h +6 -3
- package/include/expat_external.h +3 -2
- package/include/glib-2.0/glib/gvarianttype.h +16 -16
- package/include/glib-2.0/glib/gversionmacros.h +13 -0
- package/include/hwy/aligned_allocator.h +44 -2
- package/include/hwy/auto_tune.h +22 -6
- package/include/hwy/base.h +60 -90
- package/include/hwy/bit_set.h +410 -0
- package/include/hwy/cache_control.h +3 -2
- package/include/hwy/detect_compiler_arch.h +134 -14
- package/include/hwy/detect_targets.h +82 -36
- package/include/hwy/highway.h +15 -0
- package/include/hwy/nanobenchmark.h +12 -3
- package/include/hwy/ops/arm_neon-inl.h +96 -25
- package/include/hwy/ops/arm_sve-inl.h +250 -95
- package/include/hwy/ops/emu128-inl.h +12 -7
- package/include/hwy/ops/generic_ops-inl.h +271 -131
- package/include/hwy/ops/loongarch_lasx-inl.h +31 -9
- package/include/hwy/ops/loongarch_lsx-inl.h +33 -12
- package/include/hwy/ops/ppc_vsx-inl.h +99 -19
- package/include/hwy/ops/rvv-inl.h +239 -130
- package/include/hwy/ops/scalar-inl.h +22 -7
- package/include/hwy/ops/set_macros-inl.h +163 -107
- package/include/hwy/ops/wasm_128-inl.h +13 -22
- package/include/hwy/ops/x86_128-inl.h +223 -120
- package/include/hwy/ops/x86_256-inl.h +70 -134
- package/include/hwy/ops/x86_512-inl.h +130 -134
- package/include/hwy/print-inl.h +2 -0
- package/include/hwy/profiler.h +355 -264
- package/include/hwy/robust_statistics.h +3 -1
- package/include/hwy/timer.h +44 -0
- package/include/lcms2.h +34 -4
- package/include/libexif/exif-utils.h +1 -1
- package/include/libheif/heif_sequences.h +12 -2
- package/include/libheif/heif_uncompressed.h +8 -0
- package/include/libpng16/png.h +7 -7
- package/include/libpng16/pngconf.h +1 -1
- package/include/libpng16/pnglibconf.h +1 -1
- package/include/png.h +7 -7
- package/include/pngconf.h +1 -1
- package/include/pnglibconf.h +1 -1
- package/include/tiffconf.h +9 -10
- package/include/tiffio.h +10 -9
- package/include/tiffvers.h +1 -1
- package/include/ultrahdr_api.h +5 -11
- package/lib/glib-2.0/include/glibconfig.h +1 -1
- package/lib/libaom.a +0 -0
- package/lib/libcgif.a +0 -0
- package/lib/libexif.a +0 -0
- package/lib/libexif.la +1 -1
- package/lib/libexpat.a +0 -0
- package/lib/libexpat.la +3 -3
- package/lib/libffi.a +0 -0
- package/lib/libgio-2.0.a +0 -0
- package/lib/libglib-2.0.a +0 -0
- package/lib/libgmodule-2.0.a +0 -0
- package/lib/libgobject-2.0.a +0 -0
- package/lib/libgthread-2.0.a +0 -0
- package/lib/libheif.a +0 -0
- package/lib/libhwy.a +0 -0
- package/lib/libimagequant.a +0 -0
- package/lib/libjpeg.a +0 -0
- package/lib/liblcms2.a +0 -0
- package/lib/libpng.a +0 -0
- package/lib/libpng.la +2 -2
- package/lib/libpng16.a +0 -0
- package/lib/libpng16.la +2 -2
- package/lib/libresvg.a +0 -0
- package/lib/libsharpyuv.a +0 -0
- package/lib/libtiff.a +0 -0
- package/lib/libuhdr.a +0 -0
- package/lib/libvips-cpp.a +0 -0
- package/lib/libvips.a +0 -0
- package/lib/libwebp.a +0 -0
- package/lib/libwebpdecoder.a +0 -0
- package/lib/libwebpdemux.a +0 -0
- package/lib/libwebpmux.a +0 -0
- package/lib/libz.a +0 -0
- package/lib/pkgconfig/expat.pc +1 -1
- package/lib/pkgconfig/gio-2.0.pc +1 -1
- package/lib/pkgconfig/glib-2.0.pc +1 -1
- package/lib/pkgconfig/gmodule-2.0.pc +1 -1
- package/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
- package/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
- package/lib/pkgconfig/gobject-2.0.pc +1 -1
- package/lib/pkgconfig/gthread-2.0.pc +1 -1
- package/lib/pkgconfig/lcms2.pc +1 -1
- package/lib/pkgconfig/libexif.pc +1 -1
- package/lib/pkgconfig/libhwy.pc +3 -4
- package/lib/pkgconfig/libpng.pc +1 -1
- package/lib/pkgconfig/libpng16.pc +1 -1
- package/lib/pkgconfig/libsharpyuv.pc +1 -1
- package/lib/pkgconfig/libtiff-4.pc +2 -2
- package/lib/pkgconfig/libwebp.pc +1 -1
- package/lib/pkgconfig/libwebpdecoder.pc +11 -0
- package/lib/pkgconfig/libwebpmux.pc +1 -1
- package/package.json +1 -1
- package/versions.json +10 -10
- package/lib/libsharpyuv.la +0 -41
- package/lib/libtiff.la +0 -41
- package/lib/libwebp.la +0 -41
- package/lib/libwebpdemux.la +0 -41
- package/lib/libwebpmux.la +0 -41
|
@@ -253,13 +253,6 @@ HWY_API Vec1<T> operator^(const Vec1<T> a, const Vec1<T> b) {
|
|
|
253
253
|
return Xor(a, b);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
// ------------------------------ Xor3
|
|
257
|
-
|
|
258
|
-
template <typename T>
|
|
259
|
-
HWY_API Vec1<T> Xor3(Vec1<T> x1, Vec1<T> x2, Vec1<T> x3) {
|
|
260
|
-
return Xor(x1, Xor(x2, x3));
|
|
261
|
-
}
|
|
262
|
-
|
|
263
256
|
// ------------------------------ Or3
|
|
264
257
|
|
|
265
258
|
template <typename T>
|
|
@@ -310,6 +303,17 @@ HWY_API Mask1<T> FirstN(D /*tag*/, size_t n) {
|
|
|
310
303
|
return Mask1<T>::FromBool(n != 0);
|
|
311
304
|
}
|
|
312
305
|
|
|
306
|
+
#ifdef HWY_NATIVE_SET_MASK
|
|
307
|
+
#undef HWY_NATIVE_SET_MASK
|
|
308
|
+
#else
|
|
309
|
+
#define HWY_NATIVE_SET_MASK
|
|
310
|
+
#endif
|
|
311
|
+
|
|
312
|
+
template <class D>
|
|
313
|
+
HWY_API MFromD<D> SetMask(D /*d*/, bool val) {
|
|
314
|
+
return MFromD<D>::FromBool(val);
|
|
315
|
+
}
|
|
316
|
+
|
|
313
317
|
// ------------------------------ IfVecThenElse
|
|
314
318
|
template <typename T>
|
|
315
319
|
HWY_API Vec1<T> IfVecThenElse(Vec1<T> mask, Vec1<T> yes, Vec1<T> no) {
|
|
@@ -1673,6 +1677,17 @@ HWY_API V InterleaveOddBlocks(D, V a, V /*b*/) {
|
|
|
1673
1677
|
return a;
|
|
1674
1678
|
}
|
|
1675
1679
|
|
|
1680
|
+
// ------------------------------ InterleaveLowerBlocks
|
|
1681
|
+
template <class D, class V = VFromD<D>>
|
|
1682
|
+
HWY_API V InterleaveLowerBlocks(D, V a, V /*b*/) {
|
|
1683
|
+
return a;
|
|
1684
|
+
}
|
|
1685
|
+
// ------------------------------ InterleaveUpperBlocks
|
|
1686
|
+
template <class D, class V = VFromD<D>>
|
|
1687
|
+
HWY_API V InterleaveUpperBlocks(D, V a, V /*b*/) {
|
|
1688
|
+
return a;
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1676
1691
|
// ------------------------------ TableLookupLanes
|
|
1677
1692
|
|
|
1678
1693
|
// Returned by SetTableIndices for use by TableLookupLanes.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright 2020 Google LLC
|
|
2
|
-
// Copyright 2024 Arm Limited and/or its affiliates
|
|
2
|
+
// Copyright 2024-2025 Arm Limited and/or its affiliates
|
|
3
|
+
// <open-source-office@arm.com>
|
|
3
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
5
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
5
6
|
//
|
|
@@ -34,18 +35,39 @@
|
|
|
34
35
|
#undef HWY_NAMESPACE
|
|
35
36
|
#undef HWY_ALIGN
|
|
36
37
|
#undef HWY_MAX_BYTES
|
|
37
|
-
#undef
|
|
38
|
+
#undef HWY_MIN_BYTES
|
|
38
39
|
|
|
39
40
|
#undef HWY_HAVE_SCALABLE
|
|
40
41
|
#undef HWY_HAVE_TUPLE
|
|
42
|
+
#undef HWY_REGISTERS
|
|
41
43
|
#undef HWY_HAVE_INTEGER64
|
|
42
44
|
#undef HWY_HAVE_FLOAT16
|
|
43
45
|
#undef HWY_HAVE_FLOAT64
|
|
44
46
|
#undef HWY_MEM_OPS_MIGHT_FAULT
|
|
45
47
|
#undef HWY_NATIVE_FMA
|
|
46
48
|
#undef HWY_NATIVE_DOT_BF16
|
|
47
|
-
#undef
|
|
48
|
-
#undef
|
|
49
|
+
#undef HWY_NATIVE_MASK
|
|
50
|
+
#undef HWY_NATIVE_INTERLEAVE_WHOLE
|
|
51
|
+
|
|
52
|
+
#ifndef HWY_CAP_GE256
|
|
53
|
+
#define HWY_CAP_GE256 (HWY_MIN_BYTES >= 32)
|
|
54
|
+
#endif
|
|
55
|
+
#ifndef HWY_CAP_GE512
|
|
56
|
+
#define HWY_CAP_GE512 (HWY_MIN_BYTES >= 64)
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
// Almost all targets (except RVV and SCALAR) use this definition.
|
|
60
|
+
#undef HWY_LANES
|
|
61
|
+
#define HWY_LANES(T) (HWY_MAX_BYTES / sizeof(T))
|
|
62
|
+
|
|
63
|
+
// If 1, both __bf16 and a limited set of *_bf16 SVE intrinsics are available:
|
|
64
|
+
// create/get/set/dup, ld/st, sel, rev, trn, uzp, zip.
|
|
65
|
+
// Consulted below, hence define here rather than in arm_sve-inl.h.
|
|
66
|
+
#if HWY_ARM_HAVE_SCALAR_BF16_TYPE && defined(__ARM_FEATURE_SVE_BF16)
|
|
67
|
+
#define HWY_SVE_HAVE_BF16_FEATURE 1
|
|
68
|
+
#else
|
|
69
|
+
#define HWY_SVE_HAVE_BF16_FEATURE 0
|
|
70
|
+
#endif
|
|
49
71
|
|
|
50
72
|
#undef HWY_TARGET_IS_SVE
|
|
51
73
|
#if HWY_TARGET & HWY_ALL_SVE
|
|
@@ -84,6 +106,13 @@
|
|
|
84
106
|
#define HWY_HAVE_TUPLE 1
|
|
85
107
|
#endif
|
|
86
108
|
|
|
109
|
+
// Target-specific number of architectural vector registers available.
|
|
110
|
+
#if !HWY_ARCH_X86 || (HWY_TARGET <= HWY_AVX3)
|
|
111
|
+
#define HWY_REGISTERS 32
|
|
112
|
+
#else
|
|
113
|
+
#define HWY_REGISTERS 16
|
|
114
|
+
#endif
|
|
115
|
+
|
|
87
116
|
// For internal use (clamping/validating N for Simd<>)
|
|
88
117
|
#undef HWY_MAX_N
|
|
89
118
|
#if HWY_TARGET == HWY_SCALAR
|
|
@@ -141,57 +170,65 @@
|
|
|
141
170
|
#define HWY_TARGET_STR_AVX2 \
|
|
142
171
|
HWY_TARGET_STR_SSE4 ",avx,avx2" HWY_TARGET_STR_BMI2_FMA HWY_TARGET_STR_F16C
|
|
143
172
|
|
|
144
|
-
#
|
|
145
|
-
|
|
173
|
+
#ifndef HWY_HAVE_EVEX512 // allow override
|
|
174
|
+
// evex512 has been removed from clang 22, see
|
|
175
|
+
// https://github.com/llvm/llvm-project/pull/157034
|
|
176
|
+
#if (1400 <= HWY_COMPILER_GCC_ACTUAL && HWY_COMPILER_GCC_ACTUAL < 1600) || \
|
|
177
|
+
(1800 <= HWY_COMPILER_CLANG && HWY_COMPILER_CLANG < 2200)
|
|
178
|
+
#define HWY_HAVE_EVEX512 1
|
|
179
|
+
#else
|
|
180
|
+
#define HWY_HAVE_EVEX512 0
|
|
181
|
+
#endif
|
|
182
|
+
#endif
|
|
183
|
+
|
|
184
|
+
#if (HWY_HAVE_EVEX512 == 1)
|
|
146
185
|
#define HWY_TARGET_STR_AVX3_VL512 ",evex512"
|
|
147
186
|
#else
|
|
148
187
|
#define HWY_TARGET_STR_AVX3_VL512
|
|
149
188
|
#endif
|
|
150
189
|
|
|
151
|
-
#define
|
|
152
|
-
HWY_TARGET_STR_AVX2
|
|
190
|
+
#define HWY_TARGET_STR_AVX3 \
|
|
191
|
+
HWY_TARGET_STR_AVX2 \
|
|
153
192
|
",avx512f,avx512cd,avx512vl,avx512dq,avx512bw" HWY_TARGET_STR_AVX3_VL512
|
|
154
193
|
|
|
155
|
-
#define
|
|
156
|
-
|
|
157
|
-
#define HWY_TARGET_STR_AVX3_DL_256 \
|
|
158
|
-
HWY_TARGET_STR_AVX3_256 \
|
|
194
|
+
#define HWY_TARGET_STR_AVX3_DL \
|
|
195
|
+
HWY_TARGET_STR_AVX3 \
|
|
159
196
|
",vpclmulqdq,avx512vbmi,avx512vbmi2,vaes,avx512vnni,avx512bitalg," \
|
|
160
197
|
"avx512vpopcntdq,gfni"
|
|
161
198
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
//
|
|
166
|
-
#if
|
|
199
|
+
// Opt-out for compilers that do not properly support avx512bf16.
|
|
200
|
+
#ifndef HWY_AVX3_ENABLE_AVX512BF16 // allow override
|
|
201
|
+
// Default is to disable if the DISABLE macro is defined, or if old compiler.
|
|
202
|
+
// clang-cl 21.1.4 reportedly works; feel free to define this to 1 there.
|
|
203
|
+
#if defined(HWY_AVX3_DISABLE_AVX512BF16) || \
|
|
167
204
|
(HWY_COMPILER_CLANGCL || \
|
|
168
205
|
(HWY_COMPILER_GCC_ACTUAL && HWY_COMPILER_GCC_ACTUAL < 1000) || \
|
|
169
206
|
(HWY_COMPILER_CLANG && HWY_COMPILER_CLANG < 900))
|
|
170
|
-
#define
|
|
207
|
+
#define HWY_AVX3_ENABLE_AVX512BF16 0
|
|
208
|
+
#else
|
|
209
|
+
#define HWY_AVX3_ENABLE_AVX512BF16 1
|
|
171
210
|
#endif
|
|
211
|
+
#endif // HWY_AVX3_ENABLE_AVX512BF16
|
|
172
212
|
|
|
173
|
-
#if
|
|
174
|
-
#define
|
|
213
|
+
#if HWY_AVX3_ENABLE_AVX512BF16
|
|
214
|
+
#define HWY_TARGET_STR_AVX3_ZEN4 HWY_TARGET_STR_AVX3_DL ",avx512bf16"
|
|
175
215
|
#else
|
|
176
|
-
#define
|
|
216
|
+
#define HWY_TARGET_STR_AVX3_ZEN4 HWY_TARGET_STR_AVX3_DL
|
|
177
217
|
#endif
|
|
178
218
|
|
|
179
|
-
#define HWY_TARGET_STR_AVX3_ZEN4 \
|
|
180
|
-
HWY_TARGET_STR_AVX3_ZEN4_256 HWY_TARGET_STR_AVX3_VL512
|
|
181
|
-
|
|
182
219
|
#if HWY_COMPILER_GCC_ACTUAL >= 1200 || HWY_COMPILER_CLANG >= 1400
|
|
183
|
-
#define
|
|
220
|
+
#define HWY_TARGET_STR_AVX3_SPR HWY_TARGET_STR_AVX3_ZEN4 ",avx512fp16"
|
|
184
221
|
#else
|
|
185
|
-
#define
|
|
222
|
+
#define HWY_TARGET_STR_AVX3_SPR HWY_TARGET_STR_AVX3_ZEN4
|
|
186
223
|
#endif
|
|
187
224
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
#if HWY_COMPILER_GCC_ACTUAL >= 1500
|
|
192
|
-
#define HWY_TARGET_STR_AVX10_2 HWY_TARGET_STR_AVX3_SPR ",avx10.2"
|
|
193
|
-
#elif HWY_COMPILER_CLANG >= 2000
|
|
225
|
+
// Support for avx10.2-512 was removed between clang 22 and 23 without a
|
|
226
|
+
// feature test macro.
|
|
227
|
+
#if HWY_COMPILER_CLANG >= 2200 && HWY_HAVE_EVEX512
|
|
194
228
|
#define HWY_TARGET_STR_AVX10_2 HWY_TARGET_STR_AVX3_SPR ",avx10.2-512"
|
|
229
|
+
// Recent compilers drop the -512 suffix because 512 bits are always available.
|
|
230
|
+
#elif HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2200
|
|
231
|
+
#define HWY_TARGET_STR_AVX10_2 HWY_TARGET_STR_AVX3_SPR ",avx10.2"
|
|
195
232
|
#else
|
|
196
233
|
#define HWY_TARGET_STR_AVX10_2 HWY_TARGET_STR_AVX3_SPR
|
|
197
234
|
#endif
|
|
@@ -234,7 +271,7 @@
|
|
|
234
271
|
#define HWY_NAMESPACE N_SSE2
|
|
235
272
|
#define HWY_ALIGN alignas(16)
|
|
236
273
|
#define HWY_MAX_BYTES 16
|
|
237
|
-
#define
|
|
274
|
+
#define HWY_MIN_BYTES 16
|
|
238
275
|
|
|
239
276
|
#define HWY_HAVE_SCALABLE 0
|
|
240
277
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -243,8 +280,7 @@
|
|
|
243
280
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
244
281
|
#define HWY_NATIVE_FMA 0
|
|
245
282
|
#define HWY_NATIVE_DOT_BF16 0
|
|
246
|
-
#define
|
|
247
|
-
#define HWY_CAP_GE512 0
|
|
283
|
+
#define HWY_NATIVE_MASK 0 // a few actually are
|
|
248
284
|
|
|
249
285
|
#define HWY_TARGET_STR HWY_TARGET_STR_SSE2
|
|
250
286
|
//-----------------------------------------------------------------------------
|
|
@@ -254,7 +290,7 @@
|
|
|
254
290
|
#define HWY_NAMESPACE N_SSSE3
|
|
255
291
|
#define HWY_ALIGN alignas(16)
|
|
256
292
|
#define HWY_MAX_BYTES 16
|
|
257
|
-
#define
|
|
293
|
+
#define HWY_MIN_BYTES 16
|
|
258
294
|
|
|
259
295
|
#define HWY_HAVE_SCALABLE 0
|
|
260
296
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -263,8 +299,7 @@
|
|
|
263
299
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
264
300
|
#define HWY_NATIVE_FMA 0
|
|
265
301
|
#define HWY_NATIVE_DOT_BF16 0
|
|
266
|
-
#define
|
|
267
|
-
#define HWY_CAP_GE512 0
|
|
302
|
+
#define HWY_NATIVE_MASK 0 // a few actually are
|
|
268
303
|
|
|
269
304
|
#define HWY_TARGET_STR HWY_TARGET_STR_SSSE3
|
|
270
305
|
|
|
@@ -275,7 +310,7 @@
|
|
|
275
310
|
#define HWY_NAMESPACE N_SSE4
|
|
276
311
|
#define HWY_ALIGN alignas(16)
|
|
277
312
|
#define HWY_MAX_BYTES 16
|
|
278
|
-
#define
|
|
313
|
+
#define HWY_MIN_BYTES 16
|
|
279
314
|
|
|
280
315
|
#define HWY_HAVE_SCALABLE 0
|
|
281
316
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -284,8 +319,7 @@
|
|
|
284
319
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
285
320
|
#define HWY_NATIVE_FMA 0
|
|
286
321
|
#define HWY_NATIVE_DOT_BF16 0
|
|
287
|
-
#define
|
|
288
|
-
#define HWY_CAP_GE512 0
|
|
322
|
+
#define HWY_NATIVE_MASK 0 // a few actually are
|
|
289
323
|
|
|
290
324
|
#define HWY_TARGET_STR HWY_TARGET_STR_SSE4
|
|
291
325
|
|
|
@@ -296,7 +330,7 @@
|
|
|
296
330
|
#define HWY_NAMESPACE N_AVX2
|
|
297
331
|
#define HWY_ALIGN alignas(32)
|
|
298
332
|
#define HWY_MAX_BYTES 32
|
|
299
|
-
#define
|
|
333
|
+
#define HWY_MIN_BYTES 32
|
|
300
334
|
|
|
301
335
|
#define HWY_HAVE_SCALABLE 0
|
|
302
336
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -310,26 +344,22 @@
|
|
|
310
344
|
#define HWY_NATIVE_FMA 1
|
|
311
345
|
#endif
|
|
312
346
|
#define HWY_NATIVE_DOT_BF16 0
|
|
313
|
-
|
|
314
|
-
#define HWY_CAP_GE256 1
|
|
315
|
-
#define HWY_CAP_GE512 0
|
|
347
|
+
#define HWY_NATIVE_MASK 0 // a few actually are
|
|
316
348
|
|
|
317
349
|
#define HWY_TARGET_STR HWY_TARGET_STR_AVX2
|
|
318
350
|
|
|
319
351
|
//-----------------------------------------------------------------------------
|
|
320
|
-
// AVX3[_DL]/AVX10
|
|
321
|
-
#elif HWY_TARGET
|
|
322
|
-
HWY_TARGET == HWY_AVX3_ZEN4 || HWY_TARGET == HWY_AVX3_SPR || \
|
|
323
|
-
HWY_TARGET == HWY_AVX10_2
|
|
352
|
+
// AVX3[_DL/ZEN4/SPR]/AVX10
|
|
353
|
+
#elif HWY_TARGET <= HWY_AVX3
|
|
324
354
|
|
|
325
355
|
#define HWY_ALIGN alignas(64)
|
|
326
356
|
#define HWY_MAX_BYTES 64
|
|
327
|
-
#define
|
|
357
|
+
#define HWY_MIN_BYTES 64
|
|
328
358
|
|
|
329
359
|
#define HWY_HAVE_SCALABLE 0
|
|
330
360
|
#define HWY_HAVE_INTEGER64 1
|
|
331
361
|
#if HWY_TARGET <= HWY_AVX3_SPR && \
|
|
332
|
-
(HWY_COMPILER_GCC_ACTUAL || HWY_COMPILER_CLANG >=
|
|
362
|
+
(HWY_COMPILER_GCC_ACTUAL || HWY_COMPILER_CLANG >= 2200) && \
|
|
333
363
|
HWY_HAVE_SCALAR_F16_TYPE
|
|
334
364
|
#define HWY_HAVE_FLOAT16 1
|
|
335
365
|
#else
|
|
@@ -338,18 +368,12 @@
|
|
|
338
368
|
#define HWY_HAVE_FLOAT64 1
|
|
339
369
|
#define HWY_MEM_OPS_MIGHT_FAULT 0
|
|
340
370
|
#define HWY_NATIVE_FMA 1
|
|
341
|
-
#if (HWY_TARGET <= HWY_AVX3_ZEN4) &&
|
|
371
|
+
#if (HWY_TARGET <= HWY_AVX3_ZEN4) && HWY_AVX3_ENABLE_AVX512BF16
|
|
342
372
|
#define HWY_NATIVE_DOT_BF16 1
|
|
343
373
|
#else
|
|
344
374
|
#define HWY_NATIVE_DOT_BF16 0
|
|
345
375
|
#endif
|
|
346
|
-
#define
|
|
347
|
-
|
|
348
|
-
#if HWY_MAX_BYTES >= 64
|
|
349
|
-
#define HWY_CAP_GE512 1
|
|
350
|
-
#else
|
|
351
|
-
#define HWY_CAP_GE512 0
|
|
352
|
-
#endif
|
|
376
|
+
#define HWY_NATIVE_MASK 1
|
|
353
377
|
|
|
354
378
|
#if HWY_TARGET == HWY_AVX3
|
|
355
379
|
|
|
@@ -386,7 +410,7 @@
|
|
|
386
410
|
|
|
387
411
|
#define HWY_ALIGN alignas(16)
|
|
388
412
|
#define HWY_MAX_BYTES 16
|
|
389
|
-
#define
|
|
413
|
+
#define HWY_MIN_BYTES 16
|
|
390
414
|
|
|
391
415
|
#define HWY_HAVE_SCALABLE 0
|
|
392
416
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -395,8 +419,7 @@
|
|
|
395
419
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
396
420
|
#define HWY_NATIVE_FMA 1
|
|
397
421
|
#define HWY_NATIVE_DOT_BF16 0
|
|
398
|
-
#define
|
|
399
|
-
#define HWY_CAP_GE512 0
|
|
422
|
+
#define HWY_NATIVE_MASK 0
|
|
400
423
|
|
|
401
424
|
#if HWY_TARGET == HWY_PPC8
|
|
402
425
|
|
|
@@ -423,7 +446,7 @@
|
|
|
423
446
|
|
|
424
447
|
#define HWY_ALIGN alignas(16)
|
|
425
448
|
#define HWY_MAX_BYTES 16
|
|
426
|
-
#define
|
|
449
|
+
#define HWY_MIN_BYTES 16
|
|
427
450
|
|
|
428
451
|
#define HWY_HAVE_SCALABLE 0
|
|
429
452
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -432,8 +455,7 @@
|
|
|
432
455
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
433
456
|
#define HWY_NATIVE_FMA 1
|
|
434
457
|
#define HWY_NATIVE_DOT_BF16 0
|
|
435
|
-
#define
|
|
436
|
-
#define HWY_CAP_GE512 0
|
|
458
|
+
#define HWY_NATIVE_MASK 0
|
|
437
459
|
|
|
438
460
|
#if HWY_TARGET == HWY_Z14
|
|
439
461
|
|
|
@@ -478,7 +500,7 @@
|
|
|
478
500
|
|
|
479
501
|
#define HWY_ALIGN alignas(16)
|
|
480
502
|
#define HWY_MAX_BYTES 16
|
|
481
|
-
#define
|
|
503
|
+
#define HWY_MIN_BYTES 16
|
|
482
504
|
|
|
483
505
|
#define HWY_HAVE_SCALABLE 0
|
|
484
506
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -508,8 +530,7 @@
|
|
|
508
530
|
#define HWY_NATIVE_DOT_BF16 0
|
|
509
531
|
#endif
|
|
510
532
|
|
|
511
|
-
#define
|
|
512
|
-
#define HWY_CAP_GE512 0
|
|
533
|
+
#define HWY_NATIVE_MASK 0
|
|
513
534
|
|
|
514
535
|
#if HWY_TARGET == HWY_NEON_WITHOUT_AES
|
|
515
536
|
#define HWY_NAMESPACE N_NEON_WITHOUT_AES
|
|
@@ -553,12 +574,27 @@
|
|
|
553
574
|
#define HWY_TARGET_STR_FP16 "+fp16"
|
|
554
575
|
#endif
|
|
555
576
|
|
|
577
|
+
#if HWY_OS_APPLE
|
|
578
|
+
// Enable i8mm for the NEON_BF16 target if compiling for macOS, iOS, or iPadOS
|
|
579
|
+
// as all Apple Silicon CPU's that support BF16 have support for I8MM.
|
|
580
|
+
#define HWY_TARGET_STR_NEON_BF16_EXTRA "+i8mm"
|
|
581
|
+
#else
|
|
582
|
+
#define HWY_TARGET_STR_NEON_BF16_EXTRA ""
|
|
583
|
+
#endif
|
|
584
|
+
|
|
556
585
|
#if HWY_TARGET == HWY_NEON_WITHOUT_AES
|
|
586
|
+
#if HWY_COMPILER_GCC_ACTUAL && HWY_COMPILER_GCC_ACTUAL < 1400
|
|
587
|
+
// Prevents inadvertent use of SVE by GCC 13.4 and earlier, see #2689.
|
|
588
|
+
#define HWY_TARGET_STR "+nosve"
|
|
589
|
+
#else
|
|
557
590
|
// Do not define HWY_TARGET_STR (no pragma).
|
|
591
|
+
#endif // HWY_COMPILER_GCC_ACTUAL
|
|
558
592
|
#elif HWY_TARGET == HWY_NEON
|
|
559
593
|
#define HWY_TARGET_STR HWY_TARGET_STR_NEON
|
|
560
594
|
#elif HWY_TARGET == HWY_NEON_BF16
|
|
561
|
-
#define HWY_TARGET_STR
|
|
595
|
+
#define HWY_TARGET_STR \
|
|
596
|
+
HWY_TARGET_STR_FP16 \
|
|
597
|
+
"+bf16+dotprod" HWY_TARGET_STR_NEON_BF16_EXTRA HWY_TARGET_STR_NEON
|
|
562
598
|
#else
|
|
563
599
|
#error "Logic error, missing case"
|
|
564
600
|
#endif // HWY_TARGET
|
|
@@ -575,51 +611,65 @@
|
|
|
575
611
|
// SVE only requires lane alignment, not natural alignment of the entire vector.
|
|
576
612
|
#define HWY_ALIGN alignas(8)
|
|
577
613
|
|
|
578
|
-
// Value ensures MaxLanes() is the tightest possible upper bound to reduce
|
|
579
|
-
// overallocation.
|
|
580
|
-
#define HWY_LANES(T) ((HWY_MAX_BYTES) / sizeof(T))
|
|
581
|
-
|
|
582
614
|
#define HWY_HAVE_INTEGER64 1
|
|
583
615
|
#define HWY_HAVE_FLOAT16 1
|
|
584
616
|
#define HWY_HAVE_FLOAT64 1
|
|
585
617
|
#define HWY_MEM_OPS_MIGHT_FAULT 0
|
|
586
618
|
#define HWY_NATIVE_FMA 1
|
|
587
|
-
#if HWY_SVE_HAVE_BF16_FEATURE
|
|
619
|
+
#if HWY_SVE_HAVE_BF16_FEATURE || HWY_TARGET == HWY_SVE2_128
|
|
588
620
|
#define HWY_NATIVE_DOT_BF16 1
|
|
589
621
|
#else
|
|
590
622
|
#define HWY_NATIVE_DOT_BF16 0
|
|
591
623
|
#endif
|
|
592
|
-
#define
|
|
593
|
-
#define HWY_CAP_GE512 0
|
|
624
|
+
#define HWY_NATIVE_MASK 1
|
|
594
625
|
|
|
595
626
|
#if HWY_TARGET == HWY_SVE2
|
|
596
627
|
#define HWY_NAMESPACE N_SVE2
|
|
597
628
|
#define HWY_MAX_BYTES 256
|
|
629
|
+
#define HWY_MIN_BYTES 16
|
|
598
630
|
#define HWY_HAVE_SCALABLE 1
|
|
599
631
|
#elif HWY_TARGET == HWY_SVE_256
|
|
600
632
|
#define HWY_NAMESPACE N_SVE_256
|
|
601
633
|
#define HWY_MAX_BYTES 32
|
|
634
|
+
#define HWY_MIN_BYTES 32
|
|
602
635
|
#define HWY_HAVE_SCALABLE 0
|
|
603
636
|
#elif HWY_TARGET == HWY_SVE2_128
|
|
604
637
|
#define HWY_NAMESPACE N_SVE2_128
|
|
605
638
|
#define HWY_MAX_BYTES 16
|
|
639
|
+
#define HWY_MIN_BYTES 16
|
|
606
640
|
#define HWY_HAVE_SCALABLE 0
|
|
607
641
|
#else
|
|
608
642
|
#define HWY_NAMESPACE N_SVE
|
|
609
643
|
#define HWY_MAX_BYTES 256
|
|
644
|
+
#define HWY_MIN_BYTES 16
|
|
610
645
|
#define HWY_HAVE_SCALABLE 1
|
|
611
646
|
#endif
|
|
612
647
|
|
|
613
|
-
//
|
|
614
|
-
|
|
615
|
-
|
|
648
|
+
// Note: -march strings are delimited by + and GCC actually requires + before
|
|
649
|
+
// each pragma target, which are also comma-separated.
|
|
650
|
+
|
|
651
|
+
#undef HWY_TARGET_STR_SVE2_AES
|
|
616
652
|
// Static dispatch with -march=armv8-a+sve2+aes, or no baseline, hence dynamic
|
|
617
653
|
// dispatch, which checks for AES support at runtime.
|
|
618
654
|
#if defined(__ARM_FEATURE_SVE2_AES) || (HWY_BASELINE_SVE2 == 0)
|
|
619
|
-
#define
|
|
655
|
+
#define HWY_TARGET_STR_SVE2_AES ",+sve2-aes"
|
|
620
656
|
#else // SVE2 without AES
|
|
621
|
-
#define
|
|
657
|
+
#define HWY_TARGET_STR_SVE2_AES ""
|
|
622
658
|
#endif
|
|
659
|
+
|
|
660
|
+
#undef HWY_TARGET_STR_SVE2_128
|
|
661
|
+
// SVE2_128 implies/requires I8MM and BF16, see #2973.
|
|
662
|
+
#if HWY_TARGET == HWY_SVE2_128
|
|
663
|
+
#define HWY_TARGET_STR_SVE2_128 ",+i8mm,+bf16"
|
|
664
|
+
#else
|
|
665
|
+
#define HWY_TARGET_STR_SVE2_128 ""
|
|
666
|
+
#endif
|
|
667
|
+
|
|
668
|
+
// Can use pragmas instead of -march compiler flag
|
|
669
|
+
#if HWY_HAVE_RUNTIME_DISPATCH
|
|
670
|
+
#if HWY_TARGET == HWY_SVE2 || HWY_TARGET == HWY_SVE2_128
|
|
671
|
+
#define HWY_TARGET_STR \
|
|
672
|
+
"+sve,+sve2" HWY_TARGET_STR_SVE2_AES HWY_TARGET_STR_SVE2_128
|
|
623
673
|
#else // not SVE2 target
|
|
624
674
|
#define HWY_TARGET_STR "+sve"
|
|
625
675
|
#endif
|
|
@@ -633,7 +683,7 @@
|
|
|
633
683
|
|
|
634
684
|
#define HWY_ALIGN alignas(16)
|
|
635
685
|
#define HWY_MAX_BYTES 16
|
|
636
|
-
#define
|
|
686
|
+
#define HWY_MIN_BYTES 16
|
|
637
687
|
|
|
638
688
|
#define HWY_HAVE_SCALABLE 0
|
|
639
689
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -642,8 +692,7 @@
|
|
|
642
692
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
643
693
|
#define HWY_NATIVE_FMA 0
|
|
644
694
|
#define HWY_NATIVE_DOT_BF16 0
|
|
645
|
-
#define
|
|
646
|
-
#define HWY_CAP_GE512 0
|
|
695
|
+
#define HWY_NATIVE_MASK 0
|
|
647
696
|
|
|
648
697
|
#define HWY_NAMESPACE N_WASM
|
|
649
698
|
|
|
@@ -655,7 +704,7 @@
|
|
|
655
704
|
|
|
656
705
|
#define HWY_ALIGN alignas(32)
|
|
657
706
|
#define HWY_MAX_BYTES 32
|
|
658
|
-
#define
|
|
707
|
+
#define HWY_MIN_BYTES 32
|
|
659
708
|
|
|
660
709
|
#define HWY_HAVE_SCALABLE 0
|
|
661
710
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -664,8 +713,7 @@
|
|
|
664
713
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
665
714
|
#define HWY_NATIVE_FMA 0
|
|
666
715
|
#define HWY_NATIVE_DOT_BF16 0
|
|
667
|
-
#define
|
|
668
|
-
#define HWY_CAP_GE512 0
|
|
716
|
+
#define HWY_NATIVE_MASK 0
|
|
669
717
|
|
|
670
718
|
#define HWY_NAMESPACE N_WASM_EMU256
|
|
671
719
|
|
|
@@ -681,9 +729,11 @@
|
|
|
681
729
|
|
|
682
730
|
// The spec requires VLEN <= 2^16 bits, so the limit is 2^16 bytes (LMUL=8).
|
|
683
731
|
#define HWY_MAX_BYTES 65536
|
|
732
|
+
#define HWY_MIN_BYTES 16
|
|
684
733
|
|
|
685
734
|
// = HWY_MAX_BYTES divided by max LMUL=8 because MaxLanes includes the actual
|
|
686
735
|
// LMUL. This is the tightest possible upper bound.
|
|
736
|
+
#undef HWY_LANES
|
|
687
737
|
#define HWY_LANES(T) (8192 / sizeof(T))
|
|
688
738
|
|
|
689
739
|
#define HWY_HAVE_SCALABLE 1
|
|
@@ -692,8 +742,7 @@
|
|
|
692
742
|
#define HWY_MEM_OPS_MIGHT_FAULT 0
|
|
693
743
|
#define HWY_NATIVE_FMA 1
|
|
694
744
|
#define HWY_NATIVE_DOT_BF16 0
|
|
695
|
-
#define
|
|
696
|
-
#define HWY_CAP_GE512 0
|
|
745
|
+
#define HWY_NATIVE_MASK 1
|
|
697
746
|
|
|
698
747
|
#if HWY_RVV_HAVE_F16_VEC
|
|
699
748
|
#define HWY_HAVE_FLOAT16 1
|
|
@@ -717,12 +766,18 @@
|
|
|
717
766
|
#if HWY_TARGET == HWY_LSX
|
|
718
767
|
#define HWY_ALIGN alignas(16)
|
|
719
768
|
#define HWY_MAX_BYTES 16
|
|
769
|
+
#define HWY_MIN_BYTES 16
|
|
770
|
+
#ifndef __loongarch_sx
|
|
771
|
+
#define HWY_TARGET_STR "lsx"
|
|
772
|
+
#endif
|
|
720
773
|
#else
|
|
721
774
|
#define HWY_ALIGN alignas(32)
|
|
722
775
|
#define HWY_MAX_BYTES 32
|
|
776
|
+
#define HWY_MIN_BYTES 32
|
|
777
|
+
#ifndef __loongarch_asx
|
|
778
|
+
#define HWY_TARGET_STR "lsx,lasx"
|
|
779
|
+
#endif
|
|
723
780
|
#endif
|
|
724
|
-
|
|
725
|
-
#define HWY_LANES(T) (HWY_MAX_BYTES / sizeof(T))
|
|
726
781
|
|
|
727
782
|
#define HWY_HAVE_SCALABLE 0
|
|
728
783
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -731,14 +786,7 @@
|
|
|
731
786
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
732
787
|
#define HWY_NATIVE_FMA 1
|
|
733
788
|
#define HWY_NATIVE_DOT_BF16 0
|
|
734
|
-
|
|
735
|
-
#if HWY_TARGET == HWY_LSX
|
|
736
|
-
#define HWY_CAP_GE256 0
|
|
737
|
-
#else
|
|
738
|
-
#define HWY_CAP_GE256 1
|
|
739
|
-
#endif
|
|
740
|
-
|
|
741
|
-
#define HWY_CAP_GE512 0
|
|
789
|
+
#define HWY_NATIVE_MASK 0
|
|
742
790
|
|
|
743
791
|
#if HWY_TARGET == HWY_LSX
|
|
744
792
|
#define HWY_NAMESPACE N_LSX
|
|
@@ -754,7 +802,7 @@
|
|
|
754
802
|
|
|
755
803
|
#define HWY_ALIGN alignas(16)
|
|
756
804
|
#define HWY_MAX_BYTES 16
|
|
757
|
-
#define
|
|
805
|
+
#define HWY_MIN_BYTES 16
|
|
758
806
|
|
|
759
807
|
#define HWY_HAVE_SCALABLE 0
|
|
760
808
|
#define HWY_HAVE_INTEGER64 1
|
|
@@ -763,8 +811,7 @@
|
|
|
763
811
|
#define HWY_MEM_OPS_MIGHT_FAULT 1
|
|
764
812
|
#define HWY_NATIVE_FMA 0
|
|
765
813
|
#define HWY_NATIVE_DOT_BF16 0
|
|
766
|
-
#define
|
|
767
|
-
#define HWY_CAP_GE512 0
|
|
814
|
+
#define HWY_NATIVE_MASK 0
|
|
768
815
|
|
|
769
816
|
#define HWY_NAMESPACE N_EMU128
|
|
770
817
|
|
|
@@ -776,6 +823,8 @@
|
|
|
776
823
|
|
|
777
824
|
#define HWY_ALIGN
|
|
778
825
|
#define HWY_MAX_BYTES 8
|
|
826
|
+
#define HWY_MIN_BYTES 8
|
|
827
|
+
#undef HWY_LANES
|
|
779
828
|
#define HWY_LANES(T) 1
|
|
780
829
|
|
|
781
830
|
#define HWY_HAVE_SCALABLE 0
|
|
@@ -785,8 +834,7 @@
|
|
|
785
834
|
#define HWY_MEM_OPS_MIGHT_FAULT 0
|
|
786
835
|
#define HWY_NATIVE_FMA 0
|
|
787
836
|
#define HWY_NATIVE_DOT_BF16 0
|
|
788
|
-
#define
|
|
789
|
-
#define HWY_CAP_GE512 0
|
|
837
|
+
#define HWY_NATIVE_MASK 0
|
|
790
838
|
|
|
791
839
|
#define HWY_NAMESPACE N_SCALAR
|
|
792
840
|
|
|
@@ -812,7 +860,7 @@
|
|
|
812
860
|
|
|
813
861
|
// Clang <9 requires this be invoked at file scope, before any namespace.
|
|
814
862
|
#undef HWY_BEFORE_NAMESPACE
|
|
815
|
-
#if defined(HWY_TARGET_STR)
|
|
863
|
+
#if defined(HWY_TARGET_STR) && !defined(HWY_DISABLE_ATTR)
|
|
816
864
|
#define HWY_BEFORE_NAMESPACE() \
|
|
817
865
|
HWY_PUSH_ATTRIBUTES(HWY_TARGET_STR) \
|
|
818
866
|
static_assert(true, "For requiring trailing semicolon")
|
|
@@ -824,7 +872,7 @@
|
|
|
824
872
|
|
|
825
873
|
// Clang <9 requires any namespaces be closed before this macro.
|
|
826
874
|
#undef HWY_AFTER_NAMESPACE
|
|
827
|
-
#if defined(HWY_TARGET_STR)
|
|
875
|
+
#if defined(HWY_TARGET_STR) && !defined(HWY_DISABLE_ATTR)
|
|
828
876
|
#define HWY_AFTER_NAMESPACE() \
|
|
829
877
|
HWY_POP_ATTRIBUTES \
|
|
830
878
|
static_assert(true, "For requiring trailing semicolon")
|
|
@@ -835,8 +883,16 @@
|
|
|
835
883
|
#endif
|
|
836
884
|
|
|
837
885
|
#undef HWY_ATTR
|
|
838
|
-
#if defined(HWY_TARGET_STR) && HWY_HAS_ATTRIBUTE(target)
|
|
886
|
+
#if defined(HWY_TARGET_STR) && HWY_HAS_ATTRIBUTE(target) && \
|
|
887
|
+
!defined(HWY_DISABLE_ATTR)
|
|
839
888
|
#define HWY_ATTR __attribute__((target(HWY_TARGET_STR)))
|
|
840
889
|
#else
|
|
841
890
|
#define HWY_ATTR
|
|
842
891
|
#endif
|
|
892
|
+
|
|
893
|
+
#if (HWY_MAX_BYTES <= 16) || HWY_TARGET_IS_SVE || (HWY_TARGET == HWY_RVV) || \
|
|
894
|
+
(HWY_TARGET == HWY_WASM_EMU256)
|
|
895
|
+
#define HWY_NATIVE_INTERLEAVE_WHOLE 1
|
|
896
|
+
#else
|
|
897
|
+
#define HWY_NATIVE_INTERLEAVE_WHOLE 0
|
|
898
|
+
#endif
|