@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.
- package/README.md +23 -23
- package/include/aom/aom_codec.h +1 -1
- package/include/aom/aom_decoder.h +4 -0
- package/include/aom/aom_encoder.h +19 -8
- package/include/aom/aom_ext_ratectrl.h +664 -0
- package/include/aom/aom_image.h +93 -30
- package/include/aom/aom_tpl.h +99 -0
- package/include/aom/aomcx.h +89 -16
- package/include/aom/aomdx.h +12 -0
- package/include/expat.h +15 -3
- package/include/expat_config.h +6 -6
- package/include/expat_external.h +4 -4
- package/include/glib-2.0/gio/gdbusconnection.h +2 -8
- package/include/glib-2.0/gio/gfileattribute.h +1 -1
- package/include/glib-2.0/gio/gfileinfo.h +5 -0
- package/include/glib-2.0/gio/gicon.h +1 -1
- package/include/glib-2.0/gio/gio-autocleanups.h +0 -1
- package/include/glib-2.0/gio/gio-visibility.h +34 -0
- package/include/glib-2.0/gio/gio.h +2 -0
- package/include/glib-2.0/gio/gioenums.h +66 -44
- package/include/glib-2.0/gio/gioenumtypes.h +2 -0
- package/include/glib-2.0/gio/giptosmessage.h +46 -0
- package/include/glib-2.0/gio/gipv6tclassmessage.h +46 -0
- package/include/glib-2.0/gio/gresolver.h +1 -1
- package/include/glib-2.0/gio/gsettings.h +1 -1
- package/include/glib-2.0/gio/gsocketcontrolmessage.h +2 -0
- package/include/glib-2.0/glib/gatomic.h +26 -2
- package/include/glib-2.0/glib/gfileutils.h +2 -2
- package/include/glib-2.0/glib/ghook.h +3 -1
- package/include/glib-2.0/glib/giochannel.h +1 -1
- package/include/glib-2.0/glib/gkeyfile.h +1 -1
- package/include/glib-2.0/glib/glib-visibility.h +34 -0
- package/include/glib-2.0/glib/gmacros.h +32 -0
- package/include/glib-2.0/glib/gmain.h +4 -0
- package/include/glib-2.0/glib/gmarkup.h +18 -1
- package/include/glib-2.0/glib/gmem.h +4 -4
- package/include/glib-2.0/glib/gmessages.h +7 -9
- package/include/glib-2.0/glib/gnode.h +1 -1
- package/include/glib-2.0/glib/goption.h +1 -1
- package/include/glib-2.0/glib/gsequence.h +2 -2
- package/include/glib-2.0/glib/gslice.h +12 -4
- package/include/glib-2.0/glib/gspawn.h +1 -1
- package/include/glib-2.0/glib/gstrfuncs.h +191 -1
- package/include/glib-2.0/glib/gtestutils.h +6 -3
- package/include/glib-2.0/glib/gtimer.h +1 -0
- package/include/glib-2.0/glib/guri.h +3 -3
- package/include/glib-2.0/glib/gutils.h +10 -1
- package/include/glib-2.0/glib/gvarianttype.h +16 -16
- package/include/glib-2.0/glib/gversionmacros.h +22 -0
- package/include/glib-2.0/gmodule/gmodule-visibility.h +34 -0
- package/include/glib-2.0/gmodule.h +1 -1
- package/include/glib-2.0/gobject/gbinding.h +1 -1
- package/include/glib-2.0/gobject/gobject-visibility.h +34 -0
- package/include/glib-2.0/gobject/gobject.h +1 -1
- package/include/glib-2.0/gobject/gparam.h +1 -1
- package/include/glib-2.0/gobject/gsignal.h +8 -8
- package/include/glib-2.0/gobject/gtype.h +17 -17
- 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 +35 -5
- package/include/lcms2_plugin.h +1 -1
- package/include/libexif/exif-utils.h +1 -1
- package/include/libheif/heif.h +2 -0
- package/include/libheif/heif_aux_images.h +2 -2
- package/include/libheif/heif_brands.h +16 -4
- package/include/libheif/heif_color.h +147 -25
- package/include/libheif/heif_components.h +264 -0
- package/include/libheif/heif_context.h +18 -4
- package/include/libheif/heif_cxx.h +20 -18
- package/include/libheif/heif_decoding.h +63 -9
- package/include/libheif/heif_encoding.h +46 -12
- package/include/libheif/heif_error.h +15 -6
- package/include/libheif/heif_export.h +48 -0
- package/include/libheif/heif_image.h +94 -32
- package/include/libheif/heif_image_handle.h +54 -3
- package/include/libheif/heif_items.h +25 -2
- package/include/libheif/heif_library.h +13 -18
- package/include/libheif/heif_metadata.h +5 -2
- package/include/libheif/heif_omaf.h +104 -0
- package/include/libheif/heif_plugin.h +80 -13
- package/include/libheif/heif_properties.h +259 -5
- package/include/libheif/heif_regions.h +5 -3
- package/include/libheif/heif_security.h +24 -2
- package/include/libheif/heif_sequences.h +163 -14
- package/include/libheif/heif_text.h +161 -0
- package/include/libheif/heif_tiling.h +2 -2
- package/include/libheif/heif_uncompressed.h +29 -5
- package/include/libheif/heif_version.h +2 -2
- package/include/libpng16/png.h +637 -488
- package/include/libpng16/pngconf.h +2 -2
- package/include/libpng16/pnglibconf.h +2 -2
- package/include/png.h +637 -488
- package/include/pngconf.h +2 -2
- package/include/pnglibconf.h +2 -2
- package/include/resvg.h +3 -3
- 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/include/vips/colour.h +2 -2
- package/include/vips/memory.h +1 -1
- package/include/vips/version.h +4 -4
- package/include/zlib.h +3 -3
- package/lib/glib-2.0/include/glibconfig.h +1 -3
- 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 +2 -2
- 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/aom.pc +2 -2
- package/lib/pkgconfig/cgif.pc +1 -1
- 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/libheif.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/lib/pkgconfig/vips-cpp.pc +1 -1
- package/lib/pkgconfig/vips.pc +1 -1
- package/package.json +1 -1
- package/versions.json +15 -15
- 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
|
@@ -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
|
-
//
|
|
2907
|
-
HWY_NEON_DEF_FUNCTION_INTS_UINTS(
|
|
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::
|
|
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::
|
|
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
|
-
|
|
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 //
|
|
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)>
|