@img/sharp-libvips-dev-wasm32 1.2.4 → 1.3.0-rc.10

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.
Files changed (217) hide show
  1. package/README.md +23 -22
  2. package/include/aom/aom_codec.h +1 -1
  3. package/include/aom/aom_decoder.h +4 -0
  4. package/include/aom/aom_encoder.h +19 -8
  5. package/include/aom/aom_ext_ratectrl.h +664 -0
  6. package/include/aom/aom_image.h +93 -30
  7. package/include/aom/aom_tpl.h +99 -0
  8. package/include/aom/aomcx.h +89 -16
  9. package/include/aom/aomdx.h +12 -0
  10. package/include/expat.h +15 -3
  11. package/include/expat_config.h +6 -6
  12. package/include/expat_external.h +4 -4
  13. package/include/glib-2.0/gio/gdbusconnection.h +2 -8
  14. package/include/glib-2.0/gio/gdbusinterfaceskeleton.h +8 -1
  15. package/include/glib-2.0/gio/gfileattribute.h +1 -1
  16. package/include/glib-2.0/gio/gfileinfo.h +12 -0
  17. package/include/glib-2.0/gio/gicon.h +1 -1
  18. package/include/glib-2.0/gio/gio-autocleanups.h +0 -1
  19. package/include/glib-2.0/gio/gio-visibility.h +68 -0
  20. package/include/glib-2.0/gio/gio.h +2 -0
  21. package/include/glib-2.0/gio/gioenums.h +66 -44
  22. package/include/glib-2.0/gio/gioenumtypes.h +2 -0
  23. package/include/glib-2.0/gio/giptosmessage.h +46 -0
  24. package/include/glib-2.0/gio/gipv6tclassmessage.h +46 -0
  25. package/include/glib-2.0/gio/gresolver.h +1 -1
  26. package/include/glib-2.0/gio/gsettings.h +1 -1
  27. package/include/glib-2.0/gio/gsocketcontrolmessage.h +2 -0
  28. package/include/glib-2.0/glib/gatomic.h +26 -2
  29. package/include/glib-2.0/glib/gfileutils.h +2 -2
  30. package/include/glib-2.0/glib/ghook.h +3 -1
  31. package/include/glib-2.0/glib/giochannel.h +1 -1
  32. package/include/glib-2.0/glib/gkeyfile.h +1 -1
  33. package/include/glib-2.0/glib/glib-visibility.h +68 -0
  34. package/include/glib-2.0/glib/gmacros.h +36 -0
  35. package/include/glib-2.0/glib/gmain.h +4 -0
  36. package/include/glib-2.0/glib/gmarkup.h +20 -1
  37. package/include/glib-2.0/glib/gmem.h +4 -4
  38. package/include/glib-2.0/glib/gmessages.h +7 -9
  39. package/include/glib-2.0/glib/gnode.h +1 -1
  40. package/include/glib-2.0/glib/goption.h +1 -1
  41. package/include/glib-2.0/glib/gsequence.h +2 -2
  42. package/include/glib-2.0/glib/gslice.h +12 -4
  43. package/include/glib-2.0/glib/gspawn.h +1 -1
  44. package/include/glib-2.0/glib/gstrfuncs.h +191 -1
  45. package/include/glib-2.0/glib/gtestutils.h +6 -3
  46. package/include/glib-2.0/glib/gtimer.h +1 -0
  47. package/include/glib-2.0/glib/gtypes.h +46 -4
  48. package/include/glib-2.0/glib/gunicode.h +13 -1
  49. package/include/glib-2.0/glib/guri.h +3 -3
  50. package/include/glib-2.0/glib/gutils.h +10 -1
  51. package/include/glib-2.0/glib/gvarianttype.h +16 -16
  52. package/include/glib-2.0/glib/gversionmacros.h +31 -0
  53. package/include/glib-2.0/glib-unix.h +4 -0
  54. package/include/glib-2.0/gmodule/gmodule-visibility.h +68 -0
  55. package/include/glib-2.0/gmodule.h +1 -1
  56. package/include/glib-2.0/gobject/gbinding.h +1 -1
  57. package/include/glib-2.0/gobject/genums.h +2 -2
  58. package/include/glib-2.0/gobject/gobject-visibility.h +68 -0
  59. package/include/glib-2.0/gobject/gobject.h +1 -1
  60. package/include/glib-2.0/gobject/gparam.h +1 -1
  61. package/include/glib-2.0/gobject/gsignal.h +8 -8
  62. package/include/glib-2.0/gobject/gtype.h +17 -17
  63. package/include/hwy/aligned_allocator.h +44 -2
  64. package/include/hwy/auto_tune.h +22 -6
  65. package/include/hwy/base.h +60 -90
  66. package/include/hwy/bit_set.h +410 -0
  67. package/include/hwy/cache_control.h +3 -2
  68. package/include/hwy/detect_compiler_arch.h +134 -14
  69. package/include/hwy/detect_targets.h +82 -36
  70. package/include/hwy/highway.h +15 -0
  71. package/include/hwy/nanobenchmark.h +12 -3
  72. package/include/hwy/ops/arm_neon-inl.h +96 -25
  73. package/include/hwy/ops/arm_sve-inl.h +250 -95
  74. package/include/hwy/ops/emu128-inl.h +12 -7
  75. package/include/hwy/ops/generic_ops-inl.h +271 -131
  76. package/include/hwy/ops/loongarch_lasx-inl.h +31 -9
  77. package/include/hwy/ops/loongarch_lsx-inl.h +33 -12
  78. package/include/hwy/ops/ppc_vsx-inl.h +99 -19
  79. package/include/hwy/ops/rvv-inl.h +239 -130
  80. package/include/hwy/ops/scalar-inl.h +22 -7
  81. package/include/hwy/ops/set_macros-inl.h +163 -107
  82. package/include/hwy/ops/wasm_128-inl.h +13 -22
  83. package/include/hwy/ops/x86_128-inl.h +223 -120
  84. package/include/hwy/ops/x86_256-inl.h +70 -134
  85. package/include/hwy/ops/x86_512-inl.h +130 -134
  86. package/include/hwy/print-inl.h +2 -0
  87. package/include/hwy/profiler.h +355 -264
  88. package/include/hwy/robust_statistics.h +3 -1
  89. package/include/hwy/timer.h +44 -0
  90. package/include/lcms2.h +35 -5
  91. package/include/lcms2_plugin.h +1 -1
  92. package/include/libexif/exif-utils.h +1 -1
  93. package/include/libheif/heif.h +2 -0
  94. package/include/libheif/heif_aux_images.h +2 -2
  95. package/include/libheif/heif_brands.h +16 -4
  96. package/include/libheif/heif_color.h +147 -25
  97. package/include/libheif/heif_components.h +264 -0
  98. package/include/libheif/heif_context.h +18 -4
  99. package/include/libheif/heif_cxx.h +20 -18
  100. package/include/libheif/heif_decoding.h +63 -9
  101. package/include/libheif/heif_encoding.h +46 -12
  102. package/include/libheif/heif_error.h +15 -6
  103. package/include/libheif/heif_export.h +48 -0
  104. package/include/libheif/heif_image.h +94 -32
  105. package/include/libheif/heif_image_handle.h +54 -3
  106. package/include/libheif/heif_items.h +25 -2
  107. package/include/libheif/heif_library.h +13 -18
  108. package/include/libheif/heif_metadata.h +5 -2
  109. package/include/libheif/heif_omaf.h +104 -0
  110. package/include/libheif/heif_plugin.h +80 -13
  111. package/include/libheif/heif_properties.h +259 -5
  112. package/include/libheif/heif_regions.h +5 -3
  113. package/include/libheif/heif_security.h +24 -2
  114. package/include/libheif/heif_sequences.h +163 -14
  115. package/include/libheif/heif_text.h +161 -0
  116. package/include/libheif/heif_tiling.h +2 -2
  117. package/include/libheif/heif_uncompressed.h +29 -5
  118. package/include/libheif/heif_version.h +2 -2
  119. package/include/libpng16/png.h +3526 -0
  120. package/include/libpng16/pngconf.h +615 -0
  121. package/include/libpng16/pnglibconf.h +233 -0
  122. package/include/png.h +3526 -0
  123. package/include/pngconf.h +615 -0
  124. package/include/pnglibconf.h +233 -0
  125. package/include/resvg.h +3 -3
  126. package/include/tiffconf.h +9 -10
  127. package/include/tiffio.h +10 -9
  128. package/include/tiffvers.h +1 -1
  129. package/include/ultrahdr_api.h +892 -0
  130. package/include/vips/VError8.h +17 -14
  131. package/include/vips/VImage8.h +235 -32
  132. package/include/vips/arithmetic.h +9 -9
  133. package/include/vips/basic.h +11 -1
  134. package/include/vips/colour.h +19 -2
  135. package/include/vips/conversion.h +8 -8
  136. package/include/vips/convolution.h +1 -1
  137. package/include/vips/create.h +2 -2
  138. package/include/vips/draw.h +1 -1
  139. package/include/vips/enumtypes.h +3 -0
  140. package/include/vips/foreign.h +74 -15
  141. package/include/vips/header.h +22 -0
  142. package/include/vips/image.h +8 -5
  143. package/include/vips/memory.h +1 -1
  144. package/include/vips/morphology.h +1 -1
  145. package/include/vips/operation.h +2 -1
  146. package/include/vips/private.h +5 -10
  147. package/include/vips/region.h +7 -1
  148. package/include/vips/resample.h +2 -2
  149. package/include/vips/semaphore.h +1 -5
  150. package/include/vips/threadpool.h +0 -1
  151. package/include/vips/version.h +6 -6
  152. package/include/zlib.h +5 -5
  153. package/lib/glib-2.0/include/glibconfig.h +2 -4
  154. package/lib/libaom.a +0 -0
  155. package/lib/libcgif.a +0 -0
  156. package/lib/libexif.a +0 -0
  157. package/lib/libexif.la +1 -1
  158. package/lib/libexpat.a +0 -0
  159. package/lib/libexpat.la +2 -2
  160. package/lib/libffi.a +0 -0
  161. package/lib/libgio-2.0.a +0 -0
  162. package/lib/libglib-2.0.a +0 -0
  163. package/lib/libgmodule-2.0.a +0 -0
  164. package/lib/libgobject-2.0.a +0 -0
  165. package/lib/libgthread-2.0.a +0 -0
  166. package/lib/libheif.a +0 -0
  167. package/lib/libhwy.a +0 -0
  168. package/lib/libimagequant.a +0 -0
  169. package/lib/libjpeg.a +0 -0
  170. package/lib/liblcms2.a +0 -0
  171. package/lib/libpng.a +0 -0
  172. package/lib/{libsharpyuv.la → libpng.la} +8 -8
  173. package/lib/libpng16.a +0 -0
  174. package/lib/{libwebp.la → libpng16.la} +7 -7
  175. package/lib/libresvg.a +0 -0
  176. package/lib/libsharpyuv.a +0 -0
  177. package/lib/libtiff.a +0 -0
  178. package/lib/libuhdr.a +0 -0
  179. package/lib/libvips-cpp.a +0 -0
  180. package/lib/libvips.a +0 -0
  181. package/lib/libwebp.a +0 -0
  182. package/lib/libwebpdecoder.a +0 -0
  183. package/lib/libwebpdemux.a +0 -0
  184. package/lib/libwebpmux.a +0 -0
  185. package/lib/libz.a +0 -0
  186. package/lib/pkgconfig/aom.pc +2 -2
  187. package/lib/pkgconfig/cgif.pc +1 -1
  188. package/lib/pkgconfig/expat.pc +1 -1
  189. package/lib/pkgconfig/gio-2.0.pc +1 -1
  190. package/lib/pkgconfig/glib-2.0.pc +1 -1
  191. package/lib/pkgconfig/gmodule-2.0.pc +1 -1
  192. package/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
  193. package/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
  194. package/lib/pkgconfig/gobject-2.0.pc +1 -1
  195. package/lib/pkgconfig/gthread-2.0.pc +1 -1
  196. package/lib/pkgconfig/lcms2.pc +1 -1
  197. package/lib/pkgconfig/libexif.pc +1 -1
  198. package/lib/pkgconfig/libheif.pc +1 -1
  199. package/lib/pkgconfig/libhwy.pc +3 -4
  200. package/lib/pkgconfig/libpng.pc +12 -0
  201. package/lib/pkgconfig/libpng16.pc +12 -0
  202. package/lib/pkgconfig/libsharpyuv.pc +1 -1
  203. package/lib/pkgconfig/libtiff-4.pc +2 -2
  204. package/lib/pkgconfig/libuhdr.pc +11 -0
  205. package/lib/pkgconfig/libwebp.pc +1 -1
  206. package/lib/pkgconfig/libwebpdecoder.pc +11 -0
  207. package/lib/pkgconfig/libwebpmux.pc +1 -1
  208. package/lib/pkgconfig/vips-cpp.pc +2 -2
  209. package/lib/pkgconfig/vips.pc +2 -2
  210. package/package.json +1 -1
  211. package/versions.json +15 -14
  212. package/include/spng.h +0 -537
  213. package/lib/libspng.a +0 -0
  214. package/lib/libtiff.la +0 -41
  215. package/lib/libwebpdemux.la +0 -41
  216. package/lib/libwebpmux.la +0 -41
  217. package/lib/pkgconfig/spng.pc +0 -10
@@ -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 <open-source-office@arm.com>
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 HWY_LANES
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 HWY_CAP_GE256
48
- #undef HWY_CAP_GE512
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
- #if (HWY_COMPILER_GCC_ACTUAL >= 1400 && HWY_COMPILER_GCC_ACTUAL < 1600) || \
145
- HWY_COMPILER_CLANG >= 1800
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 HWY_TARGET_STR_AVX3_256 \
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 HWY_TARGET_STR_AVX3 HWY_TARGET_STR_AVX3_256 HWY_TARGET_STR_AVX3_VL512
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
- #define HWY_TARGET_STR_AVX3_DL \
163
- HWY_TARGET_STR_AVX3_DL_256 HWY_TARGET_STR_AVX3_VL512
164
-
165
- // Force-disable for compilers that do not properly support avx512bf16.
166
- #if !defined(HWY_AVX3_DISABLE_AVX512BF16) && \
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 HWY_AVX3_DISABLE_AVX512BF16
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 !defined(HWY_AVX3_DISABLE_AVX512BF16)
174
- #define HWY_TARGET_STR_AVX3_ZEN4_256 HWY_TARGET_STR_AVX3_DL ",avx512bf16"
213
+ #if HWY_AVX3_ENABLE_AVX512BF16
214
+ #define HWY_TARGET_STR_AVX3_ZEN4 HWY_TARGET_STR_AVX3_DL ",avx512bf16"
175
215
  #else
176
- #define HWY_TARGET_STR_AVX3_ZEN4_256 HWY_TARGET_STR_AVX3_DL
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 HWY_TARGET_STR_AVX3_SPR_256 HWY_TARGET_STR_AVX3_ZEN4_256 ",avx512fp16"
220
+ #define HWY_TARGET_STR_AVX3_SPR HWY_TARGET_STR_AVX3_ZEN4 ",avx512fp16"
184
221
  #else
185
- #define HWY_TARGET_STR_AVX3_SPR_256 HWY_TARGET_STR_AVX3_ZEN4_256
222
+ #define HWY_TARGET_STR_AVX3_SPR HWY_TARGET_STR_AVX3_ZEN4
186
223
  #endif
187
224
 
188
- #define HWY_TARGET_STR_AVX3_SPR \
189
- HWY_TARGET_STR_AVX3_SPR_256 HWY_TARGET_STR_AVX3_VL512
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (32 / sizeof(T))
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 == HWY_AVX3 || HWY_TARGET == HWY_AVX3_DL || \
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 HWY_LANES(T) (64 / sizeof(T))
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 >= 1901) && \
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) && !defined(HWY_AVX3_DISABLE_AVX512BF16)
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 HWY_CAP_GE256 1
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_TARGET_STR_FP16 "+bf16+dotprod" HWY_TARGET_STR_NEON
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 HWY_CAP_GE256 0
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
- // Can use pragmas instead of -march compiler flag
614
- #if HWY_HAVE_RUNTIME_DISPATCH
615
- #if HWY_TARGET == HWY_SVE2 || HWY_TARGET == HWY_SVE2_128
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 HWY_TARGET_STR "+sve2+sve2-aes,+sve"
655
+ #define HWY_TARGET_STR_SVE2_AES ",+sve2-aes"
620
656
  #else // SVE2 without AES
621
- #define HWY_TARGET_STR "+sve2,+sve"
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (32 / sizeof(T))
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 HWY_CAP_GE256 1
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 HWY_CAP_GE256 0
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 HWY_LANES(T) (16 / sizeof(T))
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 HWY_CAP_GE256 0
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 HWY_CAP_GE256 0
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