@img/sharp-libvips-dev-wasm32 1.3.0-rc.1 → 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 (191) hide show
  1. package/README.md +23 -23
  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/gfileattribute.h +1 -1
  15. package/include/glib-2.0/gio/gfileinfo.h +5 -0
  16. package/include/glib-2.0/gio/gicon.h +1 -1
  17. package/include/glib-2.0/gio/gio-autocleanups.h +0 -1
  18. package/include/glib-2.0/gio/gio-visibility.h +34 -0
  19. package/include/glib-2.0/gio/gio.h +2 -0
  20. package/include/glib-2.0/gio/gioenums.h +66 -44
  21. package/include/glib-2.0/gio/gioenumtypes.h +2 -0
  22. package/include/glib-2.0/gio/giptosmessage.h +46 -0
  23. package/include/glib-2.0/gio/gipv6tclassmessage.h +46 -0
  24. package/include/glib-2.0/gio/gresolver.h +1 -1
  25. package/include/glib-2.0/gio/gsettings.h +1 -1
  26. package/include/glib-2.0/gio/gsocketcontrolmessage.h +2 -0
  27. package/include/glib-2.0/glib/gatomic.h +26 -2
  28. package/include/glib-2.0/glib/gfileutils.h +2 -2
  29. package/include/glib-2.0/glib/ghook.h +3 -1
  30. package/include/glib-2.0/glib/giochannel.h +1 -1
  31. package/include/glib-2.0/glib/gkeyfile.h +1 -1
  32. package/include/glib-2.0/glib/glib-visibility.h +34 -0
  33. package/include/glib-2.0/glib/gmacros.h +32 -0
  34. package/include/glib-2.0/glib/gmain.h +4 -0
  35. package/include/glib-2.0/glib/gmarkup.h +18 -1
  36. package/include/glib-2.0/glib/gmem.h +4 -4
  37. package/include/glib-2.0/glib/gmessages.h +7 -9
  38. package/include/glib-2.0/glib/gnode.h +1 -1
  39. package/include/glib-2.0/glib/goption.h +1 -1
  40. package/include/glib-2.0/glib/gsequence.h +2 -2
  41. package/include/glib-2.0/glib/gslice.h +12 -4
  42. package/include/glib-2.0/glib/gspawn.h +1 -1
  43. package/include/glib-2.0/glib/gstrfuncs.h +191 -1
  44. package/include/glib-2.0/glib/gtestutils.h +6 -3
  45. package/include/glib-2.0/glib/gtimer.h +1 -0
  46. package/include/glib-2.0/glib/guri.h +3 -3
  47. package/include/glib-2.0/glib/gutils.h +10 -1
  48. package/include/glib-2.0/glib/gvarianttype.h +16 -16
  49. package/include/glib-2.0/glib/gversionmacros.h +22 -0
  50. package/include/glib-2.0/gmodule/gmodule-visibility.h +34 -0
  51. package/include/glib-2.0/gmodule.h +1 -1
  52. package/include/glib-2.0/gobject/gbinding.h +1 -1
  53. package/include/glib-2.0/gobject/gobject-visibility.h +34 -0
  54. package/include/glib-2.0/gobject/gobject.h +1 -1
  55. package/include/glib-2.0/gobject/gparam.h +1 -1
  56. package/include/glib-2.0/gobject/gsignal.h +8 -8
  57. package/include/glib-2.0/gobject/gtype.h +17 -17
  58. package/include/hwy/aligned_allocator.h +44 -2
  59. package/include/hwy/auto_tune.h +22 -6
  60. package/include/hwy/base.h +60 -90
  61. package/include/hwy/bit_set.h +410 -0
  62. package/include/hwy/cache_control.h +3 -2
  63. package/include/hwy/detect_compiler_arch.h +134 -14
  64. package/include/hwy/detect_targets.h +82 -36
  65. package/include/hwy/highway.h +15 -0
  66. package/include/hwy/nanobenchmark.h +12 -3
  67. package/include/hwy/ops/arm_neon-inl.h +96 -25
  68. package/include/hwy/ops/arm_sve-inl.h +250 -95
  69. package/include/hwy/ops/emu128-inl.h +12 -7
  70. package/include/hwy/ops/generic_ops-inl.h +271 -131
  71. package/include/hwy/ops/loongarch_lasx-inl.h +31 -9
  72. package/include/hwy/ops/loongarch_lsx-inl.h +33 -12
  73. package/include/hwy/ops/ppc_vsx-inl.h +99 -19
  74. package/include/hwy/ops/rvv-inl.h +239 -130
  75. package/include/hwy/ops/scalar-inl.h +22 -7
  76. package/include/hwy/ops/set_macros-inl.h +163 -107
  77. package/include/hwy/ops/wasm_128-inl.h +13 -22
  78. package/include/hwy/ops/x86_128-inl.h +223 -120
  79. package/include/hwy/ops/x86_256-inl.h +70 -134
  80. package/include/hwy/ops/x86_512-inl.h +130 -134
  81. package/include/hwy/print-inl.h +2 -0
  82. package/include/hwy/profiler.h +355 -264
  83. package/include/hwy/robust_statistics.h +3 -1
  84. package/include/hwy/timer.h +44 -0
  85. package/include/lcms2.h +35 -5
  86. package/include/lcms2_plugin.h +1 -1
  87. package/include/libexif/exif-utils.h +1 -1
  88. package/include/libheif/heif.h +2 -0
  89. package/include/libheif/heif_aux_images.h +2 -2
  90. package/include/libheif/heif_brands.h +16 -4
  91. package/include/libheif/heif_color.h +147 -25
  92. package/include/libheif/heif_components.h +264 -0
  93. package/include/libheif/heif_context.h +18 -4
  94. package/include/libheif/heif_cxx.h +20 -18
  95. package/include/libheif/heif_decoding.h +63 -9
  96. package/include/libheif/heif_encoding.h +46 -12
  97. package/include/libheif/heif_error.h +15 -6
  98. package/include/libheif/heif_export.h +48 -0
  99. package/include/libheif/heif_image.h +94 -32
  100. package/include/libheif/heif_image_handle.h +54 -3
  101. package/include/libheif/heif_items.h +25 -2
  102. package/include/libheif/heif_library.h +13 -18
  103. package/include/libheif/heif_metadata.h +5 -2
  104. package/include/libheif/heif_omaf.h +104 -0
  105. package/include/libheif/heif_plugin.h +80 -13
  106. package/include/libheif/heif_properties.h +259 -5
  107. package/include/libheif/heif_regions.h +5 -3
  108. package/include/libheif/heif_security.h +24 -2
  109. package/include/libheif/heif_sequences.h +163 -14
  110. package/include/libheif/heif_text.h +161 -0
  111. package/include/libheif/heif_tiling.h +2 -2
  112. package/include/libheif/heif_uncompressed.h +29 -5
  113. package/include/libheif/heif_version.h +2 -2
  114. package/include/libpng16/png.h +637 -488
  115. package/include/libpng16/pngconf.h +2 -2
  116. package/include/libpng16/pnglibconf.h +2 -2
  117. package/include/png.h +637 -488
  118. package/include/pngconf.h +2 -2
  119. package/include/pnglibconf.h +2 -2
  120. package/include/resvg.h +3 -3
  121. package/include/tiffconf.h +9 -10
  122. package/include/tiffio.h +10 -9
  123. package/include/tiffvers.h +1 -1
  124. package/include/ultrahdr_api.h +5 -11
  125. package/include/vips/colour.h +2 -2
  126. package/include/vips/memory.h +1 -1
  127. package/include/vips/version.h +4 -4
  128. package/include/zlib.h +3 -3
  129. package/lib/glib-2.0/include/glibconfig.h +1 -3
  130. package/lib/libaom.a +0 -0
  131. package/lib/libcgif.a +0 -0
  132. package/lib/libexif.a +0 -0
  133. package/lib/libexif.la +1 -1
  134. package/lib/libexpat.a +0 -0
  135. package/lib/libexpat.la +2 -2
  136. package/lib/libffi.a +0 -0
  137. package/lib/libgio-2.0.a +0 -0
  138. package/lib/libglib-2.0.a +0 -0
  139. package/lib/libgmodule-2.0.a +0 -0
  140. package/lib/libgobject-2.0.a +0 -0
  141. package/lib/libgthread-2.0.a +0 -0
  142. package/lib/libheif.a +0 -0
  143. package/lib/libhwy.a +0 -0
  144. package/lib/libimagequant.a +0 -0
  145. package/lib/libjpeg.a +0 -0
  146. package/lib/liblcms2.a +0 -0
  147. package/lib/libpng.a +0 -0
  148. package/lib/libpng.la +2 -2
  149. package/lib/libpng16.a +0 -0
  150. package/lib/libpng16.la +2 -2
  151. package/lib/libresvg.a +0 -0
  152. package/lib/libsharpyuv.a +0 -0
  153. package/lib/libtiff.a +0 -0
  154. package/lib/libuhdr.a +0 -0
  155. package/lib/libvips-cpp.a +0 -0
  156. package/lib/libvips.a +0 -0
  157. package/lib/libwebp.a +0 -0
  158. package/lib/libwebpdecoder.a +0 -0
  159. package/lib/libwebpdemux.a +0 -0
  160. package/lib/libwebpmux.a +0 -0
  161. package/lib/libz.a +0 -0
  162. package/lib/pkgconfig/aom.pc +2 -2
  163. package/lib/pkgconfig/cgif.pc +1 -1
  164. package/lib/pkgconfig/expat.pc +1 -1
  165. package/lib/pkgconfig/gio-2.0.pc +1 -1
  166. package/lib/pkgconfig/glib-2.0.pc +1 -1
  167. package/lib/pkgconfig/gmodule-2.0.pc +1 -1
  168. package/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
  169. package/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
  170. package/lib/pkgconfig/gobject-2.0.pc +1 -1
  171. package/lib/pkgconfig/gthread-2.0.pc +1 -1
  172. package/lib/pkgconfig/lcms2.pc +1 -1
  173. package/lib/pkgconfig/libexif.pc +1 -1
  174. package/lib/pkgconfig/libheif.pc +1 -1
  175. package/lib/pkgconfig/libhwy.pc +3 -4
  176. package/lib/pkgconfig/libpng.pc +1 -1
  177. package/lib/pkgconfig/libpng16.pc +1 -1
  178. package/lib/pkgconfig/libsharpyuv.pc +1 -1
  179. package/lib/pkgconfig/libtiff-4.pc +2 -2
  180. package/lib/pkgconfig/libwebp.pc +1 -1
  181. package/lib/pkgconfig/libwebpdecoder.pc +11 -0
  182. package/lib/pkgconfig/libwebpmux.pc +1 -1
  183. package/lib/pkgconfig/vips-cpp.pc +1 -1
  184. package/lib/pkgconfig/vips.pc +1 -1
  185. package/package.json +1 -1
  186. package/versions.json +15 -15
  187. package/lib/libsharpyuv.la +0 -41
  188. package/lib/libtiff.la +0 -41
  189. package/lib/libwebp.la +0 -41
  190. package/lib/libwebpdemux.la +0 -41
  191. package/lib/libwebpmux.la +0 -41
@@ -1,5 +1,5 @@
1
1
  // Copyright 2019 Google LLC
2
- // Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
2
+ // Copyright 2024-2026 Arm Limited and/or its affiliates <open-source-office@arm.com>
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  // SPDX-License-Identifier: BSD-3-Clause
5
5
  //
@@ -2903,15 +2903,15 @@ HWY_API Vec128<T, N> And(const Vec128<T, N> a, const Vec128<T, N> b) {
2903
2903
  // ------------------------------ AndNot
2904
2904
 
2905
2905
  namespace detail {
2906
- // reversed_andnot returns a & ~b.
2907
- HWY_NEON_DEF_FUNCTION_INTS_UINTS(reversed_andnot, vbic, _, 2)
2906
+ // AndNotSwap returns a & ~b, whereas AndNot is defined as ~a & b.
2907
+ HWY_NEON_DEF_FUNCTION_INTS_UINTS(AndNotSwap, vbic, _, 2)
2908
2908
  } // namespace detail
2909
2909
 
2910
2910
  // Returns ~not_mask & mask.
2911
2911
  template <typename T, size_t N, HWY_IF_NOT_FLOAT(T)>
2912
2912
  HWY_API Vec128<T, N> AndNot(const Vec128<T, N> not_mask,
2913
2913
  const Vec128<T, N> mask) {
2914
- return detail::reversed_andnot(mask, not_mask);
2914
+ return detail::AndNotSwap(mask, not_mask);
2915
2915
  }
2916
2916
 
2917
2917
  // Uses the u32/64 defined above.
@@ -2921,7 +2921,7 @@ HWY_API Vec128<T, N> AndNot(const Vec128<T, N> not_mask,
2921
2921
  const DFromV<decltype(mask)> d;
2922
2922
  const RebindToUnsigned<decltype(d)> du;
2923
2923
  VFromD<decltype(du)> ret =
2924
- detail::reversed_andnot(BitCast(du, mask), BitCast(du, not_mask));
2924
+ detail::AndNotSwap(BitCast(du, mask), BitCast(du, not_mask));
2925
2925
  return BitCast(d, ret);
2926
2926
  }
2927
2927
 
@@ -2951,6 +2951,13 @@ HWY_API Vec128<T, N> Xor(const Vec128<T, N> a, const Vec128<T, N> b) {
2951
2951
 
2952
2952
  // ------------------------------ Xor3
2953
2953
  #if HWY_ARCH_ARM_A64 && defined(__ARM_FEATURE_SHA3)
2954
+
2955
+ #ifdef HWY_NATIVE_XOR3
2956
+ #undef HWY_NATIVE_XOR3
2957
+ #else
2958
+ #define HWY_NATIVE_XOR3
2959
+ #endif
2960
+
2954
2961
  HWY_NEON_DEF_FUNCTION_FULL_UI(Xor3, veor3, _, 3)
2955
2962
 
2956
2963
  // Half vectors are not natively supported. Two Xor are likely more efficient
@@ -2968,11 +2975,6 @@ HWY_API Vec128<T, N> Xor3(const Vec128<T, N> x1, const Vec128<T, N> x2,
2968
2975
  return BitCast(d, Xor3(BitCast(du, x1), BitCast(du, x2), BitCast(du, x3)));
2969
2976
  }
2970
2977
 
2971
- #else
2972
- template <typename T, size_t N>
2973
- HWY_API Vec128<T, N> Xor3(Vec128<T, N> x1, Vec128<T, N> x2, Vec128<T, N> x3) {
2974
- return Xor(x1, Xor(x2, x3));
2975
- }
2976
2978
  #endif
2977
2979
 
2978
2980
  // ------------------------------ Or3
@@ -2987,6 +2989,45 @@ HWY_API Vec128<T, N> OrAnd(Vec128<T, N> o, Vec128<T, N> a1, Vec128<T, N> a2) {
2987
2989
  return Or(o, And(a1, a2));
2988
2990
  }
2989
2991
 
2992
+ // ------------------------------ XorAndNot
2993
+ #if HWY_ARCH_ARM_A64 && defined(__ARM_FEATURE_SHA3)
2994
+
2995
+ #ifdef HWY_NATIVE_BCAX
2996
+ #undef HWY_NATIVE_BCAX
2997
+ #else
2998
+ #define HWY_NATIVE_BCAX
2999
+ #endif
3000
+
3001
+ namespace detail {
3002
+ HWY_NEON_DEF_FUNCTION_FULL_UI(XorAndNotSwap, vbcax, _, 3)
3003
+ } // namespace detail
3004
+
3005
+ // As with AndNot, swap the last two arguments because our "negated first"
3006
+ // convention mismatches the intrinsics, which have the negated arg last.
3007
+ template <class V, HWY_IF_V_SIZE_V(V, 16), HWY_IF_NOT_FLOAT_V(V)>
3008
+ HWY_API V XorAndNot(V x, V a1, V a2) {
3009
+ return detail::XorAndNotSwap(x, a2, a1);
3010
+ }
3011
+
3012
+ // Half vectors are not natively supported. Two ops are likely more efficient
3013
+ // than Combine to 128-bit.
3014
+ template <typename T, size_t N, HWY_IF_V_SIZE_LE(T, N, 8), HWY_IF_NOT_FLOAT(T)>
3015
+ HWY_API Vec128<T, N> XorAndNot(Vec128<T, N> x, Vec128<T, N> a1,
3016
+ Vec128<T, N> a2) {
3017
+ return Xor(x, AndNot(a1, a2));
3018
+ }
3019
+
3020
+ template <typename T, size_t N, HWY_IF_FLOAT(T)>
3021
+ HWY_API Vec128<T, N> XorAndNot(const Vec128<T, N> x, const Vec128<T, N> a1,
3022
+ const Vec128<T, N> a2) {
3023
+ const DFromV<decltype(x)> d;
3024
+ const RebindToUnsigned<decltype(d)> du;
3025
+ return BitCast(d,
3026
+ XorAndNot(BitCast(du, x), BitCast(du, a1), BitCast(du, a2)));
3027
+ }
3028
+
3029
+ #endif
3030
+
2990
3031
  // ------------------------------ Operator overloads (internal-only if float)
2991
3032
 
2992
3033
  template <typename T, size_t N>
@@ -7352,6 +7393,9 @@ static HWY_INLINE bfloat16x8_t BitCastToRawNeonBF16(bfloat16x8_t raw) {
7352
7393
  // The uint16x4_t or uint16x8_t vector neets to be bitcasted to a bfloat16x4_t
7353
7394
  // or a bfloat16x8_t vector for the vbfdot_f32 and vbfdotq_f32 intrinsics if
7354
7395
  // HWY_NEON_HAVE_F32_TO_BF16C && !HWY_NEON_HAVE_BFLOAT16 is true
7396
+
7397
+ // NOTE: vbfdot uses round to odd unless the additional FEAT_EBF16 feature is
7398
+ // available and enabled.
7355
7399
  static HWY_INLINE bfloat16x4_t BitCastToRawNeonBF16(uint16x4_t raw) {
7356
7400
  return vreinterpret_bf16_u16(raw);
7357
7401
  }
@@ -7417,6 +7461,12 @@ HWY_API VFromD<D> ReorderWidenMulAccumulate(
7417
7461
  detail::BitCastToRawNeonBF16(b.raw)));
7418
7462
  }
7419
7463
 
7464
+ template <size_t N>
7465
+ HWY_API Vec128<float, N> RearrangeToOddPlusEven(Vec128<float, N> sum0,
7466
+ Vec128<float, N>) {
7467
+ return sum0;
7468
+ }
7469
+
7420
7470
  #endif // HWY_NEON_HAVE_F32_TO_BF16C
7421
7471
 
7422
7472
  template <class D, HWY_IF_I32_D(D)>
@@ -7543,17 +7593,6 @@ HWY_NEON_DEF_PAIRWISE_OPS(Max, vpmax)
7543
7593
  #undef HWY_NEON_DEF_PAIRWISE_OP
7544
7594
  } // namespace detail
7545
7595
 
7546
- template <size_t N>
7547
- HWY_API Vec128<float, N> RearrangeToOddPlusEven(Vec128<float, N> sum0,
7548
- Vec128<float, N> sum1) {
7549
- #if HWY_NEON_HAVE_BFLOAT16
7550
- (void)sum1; // unused by bf16 ReorderWidenMulAccumulate
7551
- return sum0;
7552
- #else
7553
- return Add(sum0, sum1);
7554
- #endif
7555
- }
7556
-
7557
7596
  HWY_API Vec128<int32_t> RearrangeToOddPlusEven(Vec128<int32_t> sum0,
7558
7597
  Vec128<int32_t> sum1) {
7559
7598
  // vmlal_s16 multiplied the lower half into sum0 and upper into sum1.
@@ -7612,7 +7651,8 @@ HWY_API Vec32<uint32_t> RearrangeToOddPlusEven(Vec32<uint32_t> sum0,
7612
7651
 
7613
7652
  // ------------------------------ SumOfMulQuadAccumulate
7614
7653
 
7615
- #if HWY_TARGET == HWY_NEON_BF16
7654
+
7655
+ #if HWY_TARGET == HWY_NEON_BF16 || defined(__ARM_FEATURE_DOTPROD)
7616
7656
 
7617
7657
  #ifdef HWY_NATIVE_I8_I8_SUMOFMULQUADACCUMULATE
7618
7658
  #undef HWY_NATIVE_I8_I8_SUMOFMULQUADACCUMULATE
@@ -7656,18 +7696,38 @@ HWY_API VFromD<DU32> SumOfMulQuadAccumulate(
7656
7696
  return VFromD<DU32>(vdotq_u32(sum.raw, a.raw, b.raw));
7657
7697
  }
7658
7698
 
7699
+ #endif //__ARM_FEATURE_DOTPROD || HWY_TARGET == HWY_NEON_BF16
7700
+
7659
7701
  #ifdef HWY_NATIVE_U8_I8_SUMOFMULQUADACCUMULATE
7660
7702
  #undef HWY_NATIVE_U8_I8_SUMOFMULQUADACCUMULATE
7661
7703
  #else
7662
7704
  #define HWY_NATIVE_U8_I8_SUMOFMULQUADACCUMULATE
7663
7705
  #endif
7664
7706
 
7707
+ #if defined(__ARM_FEATURE_MATMUL_INT8) || \
7708
+ (HWY_TARGET == HWY_NEON_BF16 && HWY_OS_APPLE && HWY_ARCH_ARM_A64 && \
7709
+ HWY_HAVE_RUNTIME_DISPATCH)
7710
+
7711
+ template <class DI32, HWY_IF_I32_D(DI32), HWY_IF_V_SIZE_LE_D(DI32, 8)>
7712
+ HWY_API VFromD<DI32> SumOfMulQuadAccumulate(
7713
+ DI32 /*di32*/, VFromD<Repartition<uint8_t, DI32>> a_u,
7714
+ VFromD<Repartition<int8_t, DI32>> b_i, VFromD<DI32> sum) {
7715
+ return VFromD<DI32>(vusdot_s32(sum.raw, a_u.raw, b_i.raw));
7716
+ }
7717
+
7718
+ template <class DI32, HWY_IF_I32_D(DI32), HWY_IF_V_SIZE_D(DI32, 16)>
7719
+ HWY_API VFromD<DI32> SumOfMulQuadAccumulate(
7720
+ DI32 /*di32*/, VFromD<Repartition<uint8_t, DI32>> a_u,
7721
+ VFromD<Repartition<int8_t, DI32>> b_i, VFromD<DI32> sum) {
7722
+ return VFromD<DI32>(vusdotq_s32(sum.raw, a_u.raw, b_i.raw));
7723
+ }
7724
+
7725
+ #else
7726
+
7665
7727
  template <class DI32, HWY_IF_I32_D(DI32)>
7666
7728
  HWY_API VFromD<DI32> SumOfMulQuadAccumulate(
7667
7729
  DI32 di32, VFromD<Repartition<uint8_t, DI32>> a_u,
7668
7730
  VFromD<Repartition<int8_t, DI32>> b_i, VFromD<DI32> sum) {
7669
- // TODO: use vusdot[q]_s32 on NEON targets that require support for NEON I8MM
7670
-
7671
7731
  const RebindToUnsigned<decltype(di32)> du32;
7672
7732
  const Repartition<uint8_t, decltype(di32)> du8;
7673
7733
 
@@ -7680,7 +7740,7 @@ HWY_API VFromD<DI32> SumOfMulQuadAccumulate(
7680
7740
  return BitCast(di32, Sub(result_sum0, result_sum1));
7681
7741
  }
7682
7742
 
7683
- #endif // HWY_TARGET == HWY_NEON_BF16
7743
+ #endif // __ARM_FEATURE_MATMUL_INT8
7684
7744
 
7685
7745
  // ------------------------------ WidenMulPairwiseAdd
7686
7746
 
@@ -8099,6 +8159,17 @@ HWY_API V InterleaveOddBlocks(D, V a, V /*b*/) {
8099
8159
  return a;
8100
8160
  }
8101
8161
 
8162
+ // ------------------------------ InterleaveLowerBlocks
8163
+ template <class D, class V = VFromD<D>>
8164
+ HWY_API V InterleaveLowerBlocks(D, V a, V /*b*/) {
8165
+ return a;
8166
+ }
8167
+ // ------------------------------ InterleaveUpperBlocks
8168
+ template <class D, class V = VFromD<D>>
8169
+ HWY_API V InterleaveUpperBlocks(D, V a, V /*b*/) {
8170
+ return a;
8171
+ }
8172
+
8102
8173
  // ------------------------------ ReverseBlocks
8103
8174
  // Single block: no change
8104
8175
  template <class D, HWY_IF_V_SIZE_LE_D(D, 16)>