@img/sharp-libvips-dev-wasm32 1.3.0-rc.6 → 1.3.0-rc.8
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 +14 -2
- package/include/expat_config.h +6 -3
- package/include/expat_external.h +3 -2
- package/include/glib-2.0/gio/gdbusconnection.h +2 -8
- package/include/glib-2.0/gio/gio-visibility.h +34 -0
- package/include/glib-2.0/gio/gioenums.h +5 -4
- package/include/glib-2.0/glib/glib-visibility.h +34 -0
- package/include/glib-2.0/glib/gmacros.h +3 -3
- package/include/glib-2.0/glib/gmarkup.h +10 -0
- package/include/glib-2.0/glib/gmem.h +4 -4
- package/include/glib-2.0/glib/gmessages.h +6 -8
- package/include/glib-2.0/glib/gsequence.h +2 -2
- package/include/glib-2.0/glib/gstrfuncs.h +190 -0
- package/include/glib-2.0/glib/gutils.h +9 -0
- 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/gobject/gobject-visibility.h +34 -0
- package/include/glib-2.0/gobject/gsignal.h +5 -5
- package/include/glib-2.0/gobject/gtype.h +14 -14
- 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.h +2 -0
- package/include/libheif/heif_color.h +127 -11
- package/include/libheif/heif_components.h +264 -0
- package/include/libheif/heif_context.h +2 -1
- package/include/libheif/heif_cxx.h +10 -10
- package/include/libheif/heif_decoding.h +51 -7
- package/include/libheif/heif_encoding.h +15 -9
- package/include/libheif/heif_error.h +9 -2
- package/include/libheif/heif_export.h +48 -0
- package/include/libheif/heif_image.h +81 -66
- package/include/libheif/heif_image_handle.h +2 -2
- package/include/libheif/heif_items.h +1 -1
- package/include/libheif/heif_library.h +8 -16
- package/include/libheif/heif_omaf.h +104 -0
- package/include/libheif/heif_plugin.h +16 -9
- package/include/libheif/heif_properties.h +250 -12
- package/include/libheif/heif_security.h +16 -4
- package/include/libheif/heif_sequences.h +86 -4
- package/include/libheif/heif_tiling.h +2 -2
- package/include/libheif/heif_uncompressed.h +44 -324
- package/include/libheif/heif_version.h +2 -2
- 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/include/vips/version.h +4 -4
- 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 +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/aom.pc +2 -2
- 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 +2 -2
- 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 +12 -12
- package/include/libheif/heif_uncompressed_types.h +0 -143
- 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
|
@@ -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
|
-
|
|
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 <
|
|
3556
|
-
HWY_API
|
|
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
|
-
#
|
|
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>(
|