@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.
Files changed (105) hide show
  1. package/README.md +23 -23
  2. package/include/expat.h +14 -2
  3. package/include/expat_config.h +6 -3
  4. package/include/expat_external.h +3 -2
  5. package/include/glib-2.0/glib/gvarianttype.h +16 -16
  6. package/include/glib-2.0/glib/gversionmacros.h +13 -0
  7. package/include/hwy/aligned_allocator.h +44 -2
  8. package/include/hwy/auto_tune.h +22 -6
  9. package/include/hwy/base.h +60 -90
  10. package/include/hwy/bit_set.h +410 -0
  11. package/include/hwy/cache_control.h +3 -2
  12. package/include/hwy/detect_compiler_arch.h +134 -14
  13. package/include/hwy/detect_targets.h +82 -36
  14. package/include/hwy/highway.h +15 -0
  15. package/include/hwy/nanobenchmark.h +12 -3
  16. package/include/hwy/ops/arm_neon-inl.h +96 -25
  17. package/include/hwy/ops/arm_sve-inl.h +250 -95
  18. package/include/hwy/ops/emu128-inl.h +12 -7
  19. package/include/hwy/ops/generic_ops-inl.h +271 -131
  20. package/include/hwy/ops/loongarch_lasx-inl.h +31 -9
  21. package/include/hwy/ops/loongarch_lsx-inl.h +33 -12
  22. package/include/hwy/ops/ppc_vsx-inl.h +99 -19
  23. package/include/hwy/ops/rvv-inl.h +239 -130
  24. package/include/hwy/ops/scalar-inl.h +22 -7
  25. package/include/hwy/ops/set_macros-inl.h +163 -107
  26. package/include/hwy/ops/wasm_128-inl.h +13 -22
  27. package/include/hwy/ops/x86_128-inl.h +223 -120
  28. package/include/hwy/ops/x86_256-inl.h +70 -134
  29. package/include/hwy/ops/x86_512-inl.h +130 -134
  30. package/include/hwy/print-inl.h +2 -0
  31. package/include/hwy/profiler.h +355 -264
  32. package/include/hwy/robust_statistics.h +3 -1
  33. package/include/hwy/timer.h +44 -0
  34. package/include/lcms2.h +34 -4
  35. package/include/libexif/exif-utils.h +1 -1
  36. package/include/libheif/heif_sequences.h +12 -2
  37. package/include/libheif/heif_uncompressed.h +8 -0
  38. package/include/libpng16/png.h +7 -7
  39. package/include/libpng16/pngconf.h +1 -1
  40. package/include/libpng16/pnglibconf.h +1 -1
  41. package/include/png.h +7 -7
  42. package/include/pngconf.h +1 -1
  43. package/include/pnglibconf.h +1 -1
  44. package/include/tiffconf.h +9 -10
  45. package/include/tiffio.h +10 -9
  46. package/include/tiffvers.h +1 -1
  47. package/include/ultrahdr_api.h +5 -11
  48. package/lib/glib-2.0/include/glibconfig.h +1 -1
  49. package/lib/libaom.a +0 -0
  50. package/lib/libcgif.a +0 -0
  51. package/lib/libexif.a +0 -0
  52. package/lib/libexif.la +1 -1
  53. package/lib/libexpat.a +0 -0
  54. package/lib/libexpat.la +3 -3
  55. package/lib/libffi.a +0 -0
  56. package/lib/libgio-2.0.a +0 -0
  57. package/lib/libglib-2.0.a +0 -0
  58. package/lib/libgmodule-2.0.a +0 -0
  59. package/lib/libgobject-2.0.a +0 -0
  60. package/lib/libgthread-2.0.a +0 -0
  61. package/lib/libheif.a +0 -0
  62. package/lib/libhwy.a +0 -0
  63. package/lib/libimagequant.a +0 -0
  64. package/lib/libjpeg.a +0 -0
  65. package/lib/liblcms2.a +0 -0
  66. package/lib/libpng.a +0 -0
  67. package/lib/libpng.la +2 -2
  68. package/lib/libpng16.a +0 -0
  69. package/lib/libpng16.la +2 -2
  70. package/lib/libresvg.a +0 -0
  71. package/lib/libsharpyuv.a +0 -0
  72. package/lib/libtiff.a +0 -0
  73. package/lib/libuhdr.a +0 -0
  74. package/lib/libvips-cpp.a +0 -0
  75. package/lib/libvips.a +0 -0
  76. package/lib/libwebp.a +0 -0
  77. package/lib/libwebpdecoder.a +0 -0
  78. package/lib/libwebpdemux.a +0 -0
  79. package/lib/libwebpmux.a +0 -0
  80. package/lib/libz.a +0 -0
  81. package/lib/pkgconfig/expat.pc +1 -1
  82. package/lib/pkgconfig/gio-2.0.pc +1 -1
  83. package/lib/pkgconfig/glib-2.0.pc +1 -1
  84. package/lib/pkgconfig/gmodule-2.0.pc +1 -1
  85. package/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
  86. package/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
  87. package/lib/pkgconfig/gobject-2.0.pc +1 -1
  88. package/lib/pkgconfig/gthread-2.0.pc +1 -1
  89. package/lib/pkgconfig/lcms2.pc +1 -1
  90. package/lib/pkgconfig/libexif.pc +1 -1
  91. package/lib/pkgconfig/libhwy.pc +3 -4
  92. package/lib/pkgconfig/libpng.pc +1 -1
  93. package/lib/pkgconfig/libpng16.pc +1 -1
  94. package/lib/pkgconfig/libsharpyuv.pc +1 -1
  95. package/lib/pkgconfig/libtiff-4.pc +2 -2
  96. package/lib/pkgconfig/libwebp.pc +1 -1
  97. package/lib/pkgconfig/libwebpdecoder.pc +11 -0
  98. package/lib/pkgconfig/libwebpmux.pc +1 -1
  99. package/package.json +1 -1
  100. package/versions.json +10 -10
  101. package/lib/libsharpyuv.la +0 -41
  102. package/lib/libtiff.la +0 -41
  103. package/lib/libwebp.la +0 -41
  104. package/lib/libwebpdemux.la +0 -41
  105. package/lib/libwebpmux.la +0 -41
@@ -13,9 +13,30 @@
13
13
  // See the License for the specific language governing permissions and
14
14
  // limitations under the License.
15
15
 
16
- #include <lsxintrin.h>
17
16
  #include <stdio.h>
18
17
 
18
+ #ifndef __loongarch_sx
19
+ // If LSX is to be runtime dispatched (instead of in baseline), we need
20
+ // to enable it *and* define __loongarch_sx or the intrinsic header will
21
+ // fail to compile.
22
+ //
23
+ // We cannot simply move lsxintrin.h after HWY_BEFORE_NAMESPACE because
24
+ // doing so may cause the first (the only effective) inclusion of
25
+ // lsxintrin.h to be compiled with both LSX and LASX enabled. Then when
26
+ // we call the inline functions in the header with only LSX enabled,
27
+ // we'll get an "always_inline function requires lasx but would be inlined
28
+ // into a function that is compiled without suport for lasx" error.
29
+ HWY_PUSH_ATTRIBUTES("lsx")
30
+ #define __loongarch_sx
31
+ #include <lsxintrin.h>
32
+ #undef __loongarch_sx
33
+ // Prevent "unused push_attribute" warning from Clang.
34
+ HWY_MAYBE_UNUSED static void HWY_CONCAT(hwy_lsx_dummy, __COUNTER__) () {}
35
+ HWY_POP_ATTRIBUTES
36
+ #else
37
+ #include <lsxintrin.h>
38
+ #endif
39
+
19
40
  #include "hwy/base.h"
20
41
  #include "hwy/ops/shared-inl.h"
21
42
 
@@ -415,12 +436,6 @@ HWY_API Vec128<T, N> Not(const Vec128<T, N> v) {
415
436
  __lsx_vnor_v(BitCast(du, v).raw, BitCast(du, v).raw)});
416
437
  }
417
438
 
418
- // ------------------------------ Xor3
419
- template <typename T, size_t N>
420
- HWY_API Vec128<T, N> Xor3(Vec128<T, N> x1, Vec128<T, N> x2, Vec128<T, N> x3) {
421
- return Xor(x1, Xor(x2, x3));
422
- }
423
-
424
439
  // ------------------------------ Or3
425
440
  template <typename T, size_t N>
426
441
  HWY_API Vec128<T, N> Or3(Vec128<T, N> o1, Vec128<T, N> o2, Vec128<T, N> o3) {
@@ -4297,6 +4312,17 @@ HWY_API V InterleaveOddBlocks(D, V a, V /*b*/) {
4297
4312
  return a;
4298
4313
  }
4299
4314
 
4315
+ // ------------------------------ InterleaveLowerBlocks
4316
+ template <class D, class V = VFromD<D>, HWY_IF_V_SIZE_LE_D(D, 16)>
4317
+ HWY_API V InterleaveLowerBlocks(D, V a, V /*b*/) {
4318
+ return a;
4319
+ }
4320
+ // ------------------------------ InterleaveUpperBlocks
4321
+ template <class D, class V = VFromD<D>, HWY_IF_V_SIZE_LE_D(D, 16)>
4322
+ HWY_API V InterleaveUpperBlocks(D, V a, V /*b*/) {
4323
+ return a;
4324
+ }
4325
+
4300
4326
  // ------------------------------ Shl
4301
4327
 
4302
4328
  template <typename T, size_t N, HWY_IF_UI8(T)>
@@ -4427,11 +4453,6 @@ HWY_API Vec128<uint32_t, N> RearrangeToOddPlusEven(
4427
4453
  return sum0; // invariant already holds
4428
4454
  }
4429
4455
 
4430
- template <class VW>
4431
- HWY_API VW RearrangeToOddPlusEven(const VW sum0, const VW sum1) {
4432
- return Add(sum0, sum1);
4433
- }
4434
-
4435
4456
  // ------------------------------ Demotions
4436
4457
 
4437
4458
  // NOTE: hwy::EnableIf<!hwy::IsSame<V, V>()>* = nullptr is used instead of
@@ -459,12 +459,17 @@ HWY_INLINE V TernaryLogic(V a, V b, V c) {
459
459
  }
460
460
 
461
461
  } // namespace detail
462
- #endif // HWY_PPC_HAVE_10
463
462
 
464
463
  // ------------------------------ Xor3
464
+
465
+ #ifdef HWY_NATIVE_XOR3
466
+ #undef HWY_NATIVE_XOR3
467
+ #else
468
+ #define HWY_NATIVE_XOR3
469
+ #endif
470
+
465
471
  template <typename T, size_t N>
466
472
  HWY_API Vec128<T, N> Xor3(Vec128<T, N> x1, Vec128<T, N> x2, Vec128<T, N> x3) {
467
- #if HWY_PPC_HAVE_10
468
473
  #if defined(__OPTIMIZE__)
469
474
  if (static_cast<int>(detail::IsConstantRawAltivecVect(x1.raw)) +
470
475
  static_cast<int>(detail::IsConstantRawAltivecVect(x2.raw)) +
@@ -476,11 +481,34 @@ HWY_API Vec128<T, N> Xor3(Vec128<T, N> x1, Vec128<T, N> x2, Vec128<T, N> x3) {
476
481
  {
477
482
  return detail::TernaryLogic<0x69>(x1, x2, x3);
478
483
  }
484
+ }
485
+
486
+ // ------------------------------ XorAndNot
487
+
488
+ #ifdef HWY_NATIVE_BCAX
489
+ #undef HWY_NATIVE_BCAX
479
490
  #else
480
- return Xor(x1, Xor(x2, x3));
491
+ #define HWY_NATIVE_BCAX
492
+ #endif
493
+
494
+ template <typename T, size_t N>
495
+ HWY_API Vec128<T, N> XorAndNot(Vec128<T, N> x, Vec128<T, N> a1,
496
+ Vec128<T, N> a2) {
497
+ #if defined(__OPTIMIZE__)
498
+ if (static_cast<int>(detail::IsConstantRawAltivecVect(x.raw)) +
499
+ static_cast<int>(detail::IsConstantRawAltivecVect(a1.raw)) +
500
+ static_cast<int>(detail::IsConstantRawAltivecVect(a2.raw)) >=
501
+ 2) {
502
+ return Xor(x, AndNot(a1, a2));
503
+ } else // NOLINT
481
504
  #endif
505
+ {
506
+ return detail::TernaryLogic<0x4B>(x, a1, a2);
507
+ }
482
508
  }
483
509
 
510
+ #endif // HWY_PPC_HAVE_10
511
+
484
512
  // ------------------------------ Or3
485
513
  template <typename T, size_t N>
486
514
  HWY_API Vec128<T, N> Or3(Vec128<T, N> o1, Vec128<T, N> o2, Vec128<T, N> o3) {
@@ -560,6 +588,19 @@ HWY_API Vec128<T, N> operator^(Vec128<T, N> a, Vec128<T, N> b) {
560
588
  return Xor(a, b);
561
589
  }
562
590
 
591
+ // ------------------------------ PopulationCount
592
+
593
+ #ifdef HWY_NATIVE_POPCNT
594
+ #undef HWY_NATIVE_POPCNT
595
+ #else
596
+ #define HWY_NATIVE_POPCNT
597
+ #endif
598
+
599
+ template <typename T, size_t N, HWY_IF_UNSIGNED(T)>
600
+ HWY_API Vec128<T, N> PopulationCount(Vec128<T, N> v) {
601
+ return Vec128<T, N>{vec_popcnt(v.raw)};
602
+ }
603
+
563
604
  // ================================================== SIGN
564
605
 
565
606
  // ------------------------------ Neg
@@ -3372,6 +3413,17 @@ HWY_API V InterleaveOddBlocks(D, V a, V /*b*/) {
3372
3413
  return a;
3373
3414
  }
3374
3415
 
3416
+ // ------------------------------ InterleaveLowerBlocks
3417
+ template <class D, class V = VFromD<D>>
3418
+ HWY_API V InterleaveLowerBlocks(D, V a, V /*b*/) {
3419
+ return a;
3420
+ }
3421
+ // ------------------------------ InterleaveUpperBlocks
3422
+ template <class D, class V = VFromD<D>>
3423
+ HWY_API V InterleaveUpperBlocks(D, V a, V /*b*/) {
3424
+ return a;
3425
+ }
3426
+
3375
3427
  // ------------------------------ MulFixedPoint15 (OddEven)
3376
3428
 
3377
3429
  #if HWY_S390X_HAVE_Z14
@@ -3552,23 +3604,11 @@ HWY_API VFromD<D32> ReorderWidenMulAccumulate(D32 /*d32*/, V16 a, V16 b,
3552
3604
  }
3553
3605
 
3554
3606
  // ------------------------------ RearrangeToOddPlusEven
3555
- template <size_t N>
3556
- HWY_API Vec128<int32_t, N> RearrangeToOddPlusEven(Vec128<int32_t, N> sum0,
3557
- Vec128<int32_t, N> /*sum1*/) {
3558
- return sum0; // invariant already holds
3559
- }
3560
-
3561
- template <size_t N>
3562
- HWY_API Vec128<uint32_t, N> RearrangeToOddPlusEven(
3563
- Vec128<uint32_t, N> sum0, Vec128<uint32_t, N> /*sum1*/) {
3607
+ template <class VW, HWY_IF_NOT_FLOAT_V(VW)>
3608
+ HWY_API VW RearrangeToOddPlusEven(const VW sum0, const VW) {
3564
3609
  return sum0; // invariant already holds
3565
3610
  }
3566
3611
 
3567
- template <class VW>
3568
- HWY_API VW RearrangeToOddPlusEven(const VW sum0, const VW sum1) {
3569
- return Add(sum0, sum1);
3570
- }
3571
-
3572
3612
  // ------------------------------ SatWidenMulPairwiseAccumulate
3573
3613
  #if !HWY_S390X_HAVE_Z14
3574
3614
 
@@ -5369,9 +5409,21 @@ HWY_INLINE uint64_t ExtractSignBits(Vec128<uint8_t, N> sign_bits,
5369
5409
  // vec_vbpermq: unsigned or signed, so cast to avoid a warning.
5370
5410
  using VU64 = detail::Raw128<uint64_t>::type;
5371
5411
  #if HWY_S390X_HAVE_Z14
5412
+
5413
+ #if HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2100
5414
+ // GCC 15 and Clang 20 have added the vec_bperm intrinsic
5415
+
5416
+ // Need to use vec_bperm instead of vec_bperm_u128 with GCC 15 and later to
5417
+ // avoid compiler warning
5418
+ using VU128 = __vector unsigned __int128;
5419
+ const Vec128<uint64_t> extracted{reinterpret_cast<VU64>(
5420
+ vec_bperm(reinterpret_cast<VU128>(sign_bits.raw), bit_shuffle))};
5421
+ #else // !(HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2100)
5372
5422
  const Vec128<uint64_t> extracted{
5373
5423
  reinterpret_cast<VU64>(vec_bperm_u128(sign_bits.raw, bit_shuffle))};
5374
- #else
5424
+ #endif // HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2100
5425
+
5426
+ #else // !HWY_S390X_HAVE_Z14
5375
5427
  const Vec128<uint64_t> extracted{
5376
5428
  reinterpret_cast<VU64>(vec_vbpermq(sign_bits.raw, bit_shuffle))};
5377
5429
  #endif
@@ -6380,8 +6432,13 @@ HWY_INLINE V Per128BitBlkRevLanesOnBe(V v) {
6380
6432
  template <class V>
6381
6433
  HWY_INLINE V I128Subtract(V a, V b) {
6382
6434
  #if HWY_S390X_HAVE_Z14
6383
- #if HWY_COMPILER_CLANG
6435
+ #if HWY_COMPILER_CLANG || HWY_COMPILER_GCC_ACTUAL >= 1500
6384
6436
  // Workaround for bug in vec_sub_u128 in Clang vecintrin.h
6437
+
6438
+ // The vec_sub_u128 intrinsic is also now deprecated in GCC 15 and later.
6439
+ // The built-in U128x1 vector subtraction operator should be used instead of
6440
+ // vec_sub_u128 with GCC 15 and later to avoid compiler warnings.
6441
+
6385
6442
  typedef __uint128_t VU128 __attribute__((__vector_size__(16)));
6386
6443
  const V diff_i128{reinterpret_cast<typename detail::Raw128<TFromV<V>>::type>(
6387
6444
  reinterpret_cast<VU128>(a.raw) - reinterpret_cast<VU128>(b.raw))};
@@ -6909,8 +6966,18 @@ template <class T, HWY_IF_NOT_FLOAT_NOR_SPECIAL(T),
6909
6966
  HWY_INLINE Vec128<T> SumOfU32OrU64LanesAsU128(Vec128<T> v) {
6910
6967
  const DFromV<decltype(v)> d;
6911
6968
  const RebindToUnsigned<decltype(d)> du;
6969
+ #if HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2100
6970
+ // GCC 15 and Clang 20 have new vec_sum intrinsics that replaced the
6971
+ // vec_sum_u128 intrinsic
6972
+
6973
+ // vec_sum needs to be used instead of vec_sum_u128 with GCC 15 or later to
6974
+ // avoid compiler warnings
6975
+ return Vec128<T>{reinterpret_cast<typename detail::Raw128<T>::type>(
6976
+ vec_sum(BitCast(du, v).raw, Zero(du).raw))};
6977
+ #else
6912
6978
  return BitCast(
6913
6979
  d, Vec128<uint8_t>{vec_sum_u128(BitCast(du, v).raw, Zero(du).raw)});
6980
+ #endif
6914
6981
  }
6915
6982
  #endif
6916
6983
 
@@ -7153,8 +7220,21 @@ HWY_API V BitShuffle(V v, VI idx) {
7153
7220
  #endif
7154
7221
 
7155
7222
  #if HWY_S390X_HAVE_Z14
7223
+
7224
+ #if HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2100
7225
+ // GCC 15 and Clang 20 have added the vec_bperm intrinsic
7226
+
7227
+ // Need to use vec_bperm instead of vec_bperm_u128 with GCC 15 and later to
7228
+ // avoid compiler warning
7229
+ using RawVU128 = __vector unsigned __int128;
7230
+
7231
+ const VFromD<decltype(d_full_u64)> bit_shuf_result{reinterpret_cast<RawVU64>(
7232
+ vec_bperm(reinterpret_cast<RawVU128>(v.raw), bit_idx.raw))};
7233
+ #else
7156
7234
  const VFromD<decltype(d_full_u64)> bit_shuf_result{reinterpret_cast<RawVU64>(
7157
7235
  vec_bperm_u128(BitCast(du8, v).raw, bit_idx.raw))};
7236
+ #endif // !(HWY_COMPILER_GCC_ACTUAL >= 1500 || HWY_COMPILER_CLANG >= 2100)
7237
+
7158
7238
  #elif defined(__SIZEOF_INT128__)
7159
7239
  using RawVU128 = __vector unsigned __int128;
7160
7240
  const VFromD<decltype(d_full_u64)> bit_shuf_result{reinterpret_cast<RawVU64>(