Coverage Report

Created: 2025-06-16 07:00

/src/libjxl/third_party/highway/hwy/ops/shared-inl.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright 2020 Google LLC
2
// SPDX-License-Identifier: Apache-2.0
3
//
4
// Licensed under the Apache License, Version 2.0 (the "License");
5
// you may not use this file except in compliance with the License.
6
// You may obtain a copy of the License at
7
//
8
//      http://www.apache.org/licenses/LICENSE-2.0
9
//
10
// Unless required by applicable law or agreed to in writing, software
11
// distributed under the License is distributed on an "AS IS" BASIS,
12
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
// See the License for the specific language governing permissions and
14
// limitations under the License.
15
16
// Per-target definitions shared by ops/*.h and user code.
17
18
// IWYU pragma: begin_exports
19
// Export does not seem to be recursive, so re-export these (also in base.h)
20
#include <stddef.h>
21
22
#include "hwy/base.h"
23
// "IWYU pragma: keep" does not work for this include, so hide it from the IDE.
24
#if !HWY_IDE
25
#include <stdint.h>
26
#endif
27
28
#include "hwy/detect_compiler_arch.h"
29
#include "hwy/detect_targets.h"
30
31
// Separate header because foreach_target.h re-enables its include guard.
32
#include "hwy/ops/set_macros-inl.h"
33
34
// IWYU pragma: end_exports
35
36
#if HWY_IS_MSAN
37
#include <sanitizer/msan_interface.h>
38
#endif
39
40
// We are covered by the highway.h include guard, but generic_ops-inl.h
41
// includes this again #if HWY_IDE.
42
// clang-format off
43
#if defined(HIGHWAY_HWY_OPS_SHARED_TOGGLE) == defined(HWY_TARGET_TOGGLE)  // NOLINT
44
// clang-format on
45
#ifdef HIGHWAY_HWY_OPS_SHARED_TOGGLE
46
#undef HIGHWAY_HWY_OPS_SHARED_TOGGLE
47
#else
48
#define HIGHWAY_HWY_OPS_SHARED_TOGGLE
49
#endif
50
51
HWY_BEFORE_NAMESPACE();
52
namespace hwy {
53
namespace HWY_NAMESPACE {
54
55
// NOTE: GCC generates incorrect code for vector arguments to non-inlined
56
// functions in two situations:
57
// - on Windows and GCC 10.3, passing by value crashes due to unaligned loads:
58
//   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54412.
59
// - on aarch64 and GCC 9.3.0 or 11.2.1, passing by value causes many (but not
60
//   all) tests to fail.
61
//
62
// We therefore pass by const& only on GCC and (Windows or aarch64). This alias
63
// must be used for all vector/mask parameters of functions marked HWY_NOINLINE,
64
// and possibly also other functions that are not inlined.
65
//
66
// Even better is to avoid passing vector arguments to non-inlined functions,
67
// because the SVE and RISC-V ABIs are still works in progress and may lead to
68
// incorrect codegen.
69
#if HWY_COMPILER_GCC_ACTUAL && (HWY_OS_WIN || HWY_ARCH_ARM_A64)
70
template <class V>
71
using VecArg = const V&;
72
#else
73
template <class V>
74
using VecArg = V;
75
#endif
76
77
namespace detail {
78
79
template <typename T>
80
struct NativeLaneTypeT {
81
  using type = T;
82
};
83
template <>
84
struct NativeLaneTypeT<hwy::float16_t> {
85
#if HWY_HAVE_SCALAR_F16_TYPE
86
  using type = hwy::float16_t::Native;
87
#else
88
  using type = uint16_t;
89
#endif
90
};
91
template <>
92
struct NativeLaneTypeT<hwy::bfloat16_t> {
93
#if HWY_HAVE_SCALAR_BF16_TYPE
94
  using type = hwy::bfloat16_t::Native;
95
#else
96
  using type = uint16_t;
97
#endif
98
};
99
100
// The type expected by intrinsics for the given Highway lane type T. This
101
// usually matches T, but differs for our wrapper types [b]float16_t. Use this
102
// only when defining intrinsic wrappers, and NOT for casting, which is UB.
103
template <typename T>
104
using NativeLaneType = typename NativeLaneTypeT<T>::type;
105
106
// Returns the same pointer after changing type to NativeLaneType. Use this only
107
// for wrapper functions that call intrinsics (e.g. load/store) where some of
108
// the overloads expect _Float16* or __bf16* arguments. For non-special floats,
109
// this returns the same pointer and type.
110
//
111
// This makes use of the fact that a wrapper struct is pointer-interconvertible
112
// with its first member (a union), thus also with the union members. Do NOT
113
// call both this and U16LanePointer on the same object - they access different
114
// union members, and this is not guaranteed to be safe.
115
template <typename T, HWY_IF_NOT_SPECIAL_FLOAT(T)>
116
HWY_INLINE T* NativeLanePointer(T* p) {
117
  return p;
118
}
119
template <typename T, typename NT = NativeLaneType<RemoveConst<T>>,
120
          HWY_IF_F16(T)>
121
HWY_INLINE constexpr If<IsConst<T>(), const NT*, NT*> NativeLanePointer(T* p) {
122
#if HWY_HAVE_SCALAR_F16_TYPE
123
  return &p->native;
124
#else
125
  return &p->bits;
126
#endif
127
}
128
template <typename T, typename NT = NativeLaneType<RemoveConst<T>>,
129
          HWY_IF_BF16(T)>
130
HWY_INLINE constexpr If<IsConst<T>(), const NT*, NT*> NativeLanePointer(T* p) {
131
#if HWY_HAVE_SCALAR_BF16_TYPE
132
  return &p->native;
133
#else
134
  return &p->bits;
135
#endif
136
}
137
138
// Returns a pointer to the u16 member of our [b]float16_t wrapper structs.
139
// Use this in Highway targets that lack __bf16 intrinsics; for storing to
140
// memory, we BitCast vectors to u16 and write to the pointer returned here.
141
// Do NOT call both this and U16LanePointer on the same object - they access
142
// different union members, and this is not guaranteed to be safe.
143
template <typename T, HWY_IF_SPECIAL_FLOAT(T)>
144
HWY_INLINE If<IsConst<T>(), const uint16_t*, uint16_t*> U16LanePointer(T* p) {
145
  return &p->bits;
146
}
147
148
// Returns N * 2^pow2. N is the number of lanes in a full vector and pow2 the
149
// desired fraction or multiple of it, see Simd<>. `pow2` is most often in
150
// [-3, 3] but can also be lower for user-specified fractions.
151
0
constexpr size_t ScaleByPower(size_t N, int pow2) {
152
0
  return pow2 >= 0 ? (N << pow2) : (N >> (-pow2));
153
0
}
Unexecuted instantiation: hwy::N_SSE4::detail::ScaleByPower(unsigned long, int)
Unexecuted instantiation: hwy::N_AVX2::detail::ScaleByPower(unsigned long, int)
Unexecuted instantiation: hwy::N_SSE2::detail::ScaleByPower(unsigned long, int)
154
155
template <typename T>
156
HWY_INLINE void MaybeUnpoison(T* HWY_RESTRICT unaligned, size_t count) {
157
  // Workaround for MSAN not marking compressstore as initialized (b/233326619)
158
#if HWY_IS_MSAN
159
  __msan_unpoison(unaligned, count * sizeof(T));
160
#else
161
  (void)unaligned;
162
  (void)count;
163
#endif
164
}
165
166
}  // namespace detail
167
168
// Highway operations are implemented as overloaded functions selected using a
169
// zero-sized tag type D := Simd<T, N, kPow2>. T denotes the lane type.
170
//
171
// N defines how many lanes are in a 'full' vector, typically equal to
172
// HWY_LANES(T) (which is the actual count on targets with vectors of known
173
// size, and an upper bound in case of scalable vectors), otherwise a
174
// user-specified limit at most that large.
175
//
176
// 2^kPow2 is a _subsequently_ applied scaling factor that indicates the
177
// desired fraction of a 'full' vector: 0 means full, -1 means half; 1,2,3
178
// means two/four/eight full vectors ganged together. The largest supported
179
// kPow2 is `HWY_MAX_POW2` and the aliases below take care of clamping
180
// user-specified values to that. Note that `Simd<T, 1, 0>` and `Simd<T, 2, -1>`
181
// have the same `MaxLanes` and `Lanes`.
182
//
183
// We can theoretically keep halving Lanes(), but recursive instantiations of
184
// kPow2 - 1 will eventually fail e.g. because -64 is not a valid shift count.
185
// Users must terminate such compile-time recursions at or above HWY_MIN_POW2.
186
//
187
// WARNING: do not use N directly because it may be a special representation of
188
// a fractional MaxLanes. This arises when we Rebind Simd<uint8_t, 1, 0> to
189
// Simd<uint32_t, ??, 2>. RVV requires that the last argument (kPow2) be two,
190
// but we want MaxLanes to be the same in both cases. Hence ?? is a
191
// fixed-point encoding of 1/4.
192
//
193
// Instead of referring to Simd<> directly, users create D via aliases:
194
// - ScalableTag<T> for a full vector;
195
// - ScalableTag<T, kPow2>() for a fraction/group, where `kPow2` is
196
//   interpreted as `HWY_MIN(kPow2, HWY_MAX_POW2)`;
197
// - CappedTag<T, kLimit> for a vector with up to kLimit lanes; or
198
// - FixedTag<T, kNumLanes> for a vector with exactly kNumLanes lanes.
199
//
200
// Instead of N, use Lanes(D()) for the actual number of lanes at runtime and
201
// D().MaxLanes() for a constexpr upper bound. Both are powers of two.
202
template <typename Lane, size_t N, int kPow2>
203
struct Simd {
204
  constexpr Simd() = default;
205
  using T = Lane;
206
207
 private:
208
  static_assert(sizeof(Lane) <= 8, "Lanes are up to 64-bit");
209
  static_assert(IsSame<Lane, RemoveCvRef<Lane>>(),
210
                "Lane must not be a reference type, const-qualified type, or "
211
                "volatile-qualified type");
212
  static_assert(IsIntegerLaneType<Lane>() || IsFloat<Lane>() ||
213
                    IsSpecialFloat<Lane>(),
214
                "IsIntegerLaneType<T>(), IsFloat<T>(), or IsSpecialFloat<T>() "
215
                "must be true");
216
  // 20 bits are sufficient for any HWY_MAX_BYTES. This is the 'normal' value of
217
  // N when kFrac == 0, otherwise it is one (see FracN).
218
  static constexpr size_t kWhole = N & 0xFFFFF;
219
  // Fractional part is in the bits above kWhole.
220
  static constexpr int kFrac = static_cast<int>(N >> 20);
221
  // Can be 8x larger because kPow2 may be as low as -3 (Rebind of a larger
222
  // type to u8 results in fractions).
223
  static_assert(kWhole <= 8 * HWY_MAX_N && kFrac <= 3, "Out of range");
224
  static_assert(kFrac == 0 || kWhole == 1, "If frac, whole must be 1");
225
  static_assert((kWhole & (kWhole - 1)) == 0 && kWhole != 0, "Not 2^x");
226
  // Important to check this here because kPow2 <= -64 causes confusing
227
  // compile errors (invalid shift count).
228
  static_assert(kPow2 >= HWY_MIN_POW2, "Forgot kPow2 recursion terminator?");
229
  // However, do NOT verify kPow2 <= HWY_MAX_POW2 - users should be able to
230
  // Rebind<uint64_t, ScalableTag<uint8_t, 3>> in order to discover that its
231
  // kPow2 is out of bounds.
232
233
 public:
234
  // Upper bound on the number of lanes (tight if !HWY_HAVE_SCALABLE). In the
235
  // common case, N == kWhole, but if kFrac is nonzero, we deduct it from kPow2.
236
  // E.g. Rebind<uint32_t, Simd<uint8_t, 1, 0>> is Simd<uint32_t, 0x200001, 2>.
237
  // The resulting number of lanes is still 1 because this N represents 1/4
238
  // (the ratio of the sizes). Note that RVV requires kPow2 to be the ratio of
239
  // the sizes so that the correct LMUL overloads are chosen, even if N is
240
  // small enough that it would fit in an LMUL=1 vector.
241
  //
242
  // Cannot be an enum because GCC warns when using enums and non-enums in the
243
  // same expression. Cannot be a static constexpr function (MSVC limitation).
244
  // Rounded up to one so this is a valid array length.
245
  //
246
  // Do not use this directly - only 'public' so it is visible from the accessor
247
  // macro required by MSVC.
248
  static constexpr size_t kPrivateLanes =
249
      HWY_MAX(size_t{1}, detail::ScaleByPower(kWhole, kPow2 - kFrac));
250
  // Do not use this directly - only 'public' so it is visible from the accessor
251
  // macro required by MSVC.
252
  static constexpr int kPrivatePow2 = kPow2;
253
254
0
  constexpr size_t MaxLanes() const { return kPrivateLanes; }
Unexecuted instantiation: hwy::N_SSE4::Simd<float, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<long, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<int, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<int, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<long, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<long, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 1ul, 1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<float, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<double, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<float, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<int, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<float, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<int, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<double, 2ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 1ul, 1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 2ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<float, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 16ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<short, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<short, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<int, 8ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<float, 4ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<signed char, 16ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<signed char, 16ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 16ul, -1>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::MaxLanes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::MaxLanes() const
255
0
  constexpr size_t MaxBytes() const { return kPrivateLanes * sizeof(Lane); }
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<long, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<float, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<double, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<int, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<float, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<int, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<float, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<long, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<double, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<short, 16ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<int, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<float, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<long, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<double, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 1ul, 1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 1048577ul, 1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 2ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 2ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<int, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<float, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<float, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<short, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<short, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 8ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<short, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<int, 4ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::MaxBytes() const
Unexecuted instantiation: hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::MaxBytes() const
Unexecuted instantiation: hwy::N_SSE2::Simd<signed char, 16ul, 0>::MaxBytes() const
256
  constexpr size_t MaxBlocks() const { return (MaxBytes() + 15) / 16; }
257
  // For SFINAE (HWY_IF_POW2_GT_D).
258
  constexpr int Pow2() const { return kPow2; }
259
260
  // ------------------------------ Changing lane type or count
261
  // Do not use any of these directly. Anything used from member typedefs cannot
262
  // be made private, but functions only used within other functions can.
263
264
  // Returns number of NewT lanes that fit within MaxBytes().
265
  template <typename NewT>
266
0
  static constexpr size_t RepartitionLanes() {
267
0
    // Round up to correctly handle larger NewT.
268
0
    return (kPrivateLanes * sizeof(T) + sizeof(NewT) - 1) / sizeof(NewT);
269
0
  }
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 4ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 2ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 8ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::RepartitionLanes<double>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 8ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1048577ul, 1>::RepartitionLanes<signed char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<long, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::RepartitionLanes<double>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 1ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 1ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::RepartitionLanes<double>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 1ul, 0>::RepartitionLanes<signed char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 1>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 1ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 1ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<signed char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RepartitionLanes<hwy::float16_t>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RepartitionLanes<hwy::float16_t>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RepartitionLanes<hwy::float16_t>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::RepartitionLanes<short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::RepartitionLanes<unsigned long>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::RepartitionLanes<long>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 4ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::RepartitionLanes<signed char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::RepartitionLanes<double>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RepartitionLanes<signed char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::RepartitionLanes<signed char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 16ul, 0>::RepartitionLanes<unsigned char>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::RepartitionLanes<unsigned int>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RepartitionLanes<unsigned short>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::RepartitionLanes<double>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::RepartitionLanes<float>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RepartitionLanes<float>()
270
271
  // Returns the new kPow2 required for lanes of type NewT.
272
  template <typename NewT>
273
0
  static constexpr int RebindPow2() {
274
0
    return kPow2 +
275
0
           ((sizeof(NewT) >= sizeof(T))
276
0
                ? static_cast<int>(CeilLog2(sizeof(NewT) / sizeof(T)))
277
0
                : -static_cast<int>(CeilLog2(sizeof(T) / sizeof(NewT))));
278
0
  }
Unexecuted instantiation: int hwy::N_SSE4::Simd<double, 2ul, 0>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<long, 2ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 4ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<double, 2ul, 0>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<short, 16ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 8ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<long, 4ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 8ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<double, 2ul, 0>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 4ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<signed char, 1ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<long, 2ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 1ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<int, 1ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<int, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<long, 2ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<signed char, 32ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 8ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 8ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<short, 16ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<short, 16ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 1ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<int, 1ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 8ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<int, 8ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<short, 1ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<signed char, 1ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 2ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 1ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 1ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 4ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 1ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 1ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<int, 4ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<int, 8ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 4ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RebindPow2<signed char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 4ul, 0>::RebindPow2<hwy::float16_t>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<double>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 8ul, 0>::RebindPow2<hwy::float16_t>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::RebindPow2<double>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 4ul, 0>::RebindPow2<hwy::float16_t>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<double>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<short, 8ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<short, 8ul, -1>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<short, 8ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<short, 8ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<short, 8ul, -1>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<short, 8ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<int, 4ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<int, 4ul, 0>::RebindPow2<signed char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<int, 8ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<short, 16ul, -1>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<short, 16ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 4ul, 0>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 4ul, 0>::RebindPow2<signed char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<short, 8ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<short, 8ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<short, 8ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<short, 8ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<int, 8ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 4ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<int, 4ul, 0>::RebindPow2<float>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 4ul, 0>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 4ul, 0>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 4ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 8ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 4ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<float, 4ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::RebindPow2<signed char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::RebindPow2<signed char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<float, 8ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<float, 4ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::RebindPow2<signed char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<signed char, 16ul, 0>::RebindPow2<unsigned char>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RebindPow2<int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RebindPow2<unsigned int>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RebindPow2<long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RebindPow2<unsigned long>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<int, 4ul, 0>::RebindPow2<unsigned short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RebindPow2<short>()
Unexecuted instantiation: int hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::RebindPow2<unsigned short>()
279
280
 private:
281
  // Returns 0 or whole NewN such that kNewMaxLanes = NewN * 2^kNewPow2.
282
  template <int kNewPow2, size_t kNewMaxLanes>
283
0
  static constexpr size_t WholeN() {
284
0
    return detail::ScaleByPower(kNewMaxLanes, -kNewPow2);
285
0
  }
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<long, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 4ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 8ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 0>::WholeN<1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1048577ul, 1>::WholeN<1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::WholeN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::WholeN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::WholeN<-1, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::WholeN<-1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::WholeN<-1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 1>::WholeN<1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, -1>::WholeN<-1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::WholeN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::WholeN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::WholeN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::WholeN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::WholeN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::WholeN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::WholeN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::WholeN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::WholeN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::WholeN<-2, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::WholeN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::WholeN<-2, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::WholeN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::WholeN<-1, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::WholeN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::WholeN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::WholeN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 16ul, 0>::WholeN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::WholeN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::WholeN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::WholeN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::WholeN<0, 2ul>()
286
287
  // Returns fractional NewN such that kNewMaxLanes = NewN * 2^kNewPow2.
288
  template <int kNewPow2, size_t kNewMaxLanes>
289
0
  static constexpr size_t FracN() {
290
0
    // Only reached if kNewPow2 > CeilLog2(kNewMaxLanes) >= 0 (else WholeN
291
0
    // would not have been zero), but clamp to zero to avoid warnings. kFrac is
292
0
    // the difference, stored in the upper bits of N, and we also set kWhole =
293
0
    // 1 so that the new kPrivateLanes = kNewMaxLanes.
294
0
    static_assert(HWY_MAX_N <= (size_t{1} << 20), "Change bit shift");
295
0
    return static_cast<size_t>(
296
0
        1 + (HWY_MAX(0, kNewPow2 - static_cast<int>(CeilLog2(kNewMaxLanes)))
297
0
             << 20));
298
0
  }
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<long, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 4ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 8ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 0>::FracN<1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1048577ul, 1>::FracN<1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::FracN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::FracN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::FracN<-1, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::FracN<-1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::FracN<-1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 1>::FracN<1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, -1>::FracN<-1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::FracN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::FracN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::FracN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::FracN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::FracN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::FracN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::FracN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::FracN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::FracN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::FracN<-2, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::FracN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::FracN<-2, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::FracN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::FracN<-1, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::FracN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::FracN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::FracN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 16ul, 0>::FracN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::FracN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::FracN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::FracN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::FracN<0, 2ul>()
299
300
 public:
301
  // Returns (whole or fractional) NewN, see above.
302
  template <int kNewPow2, size_t kNewMaxLanes>
303
0
  static constexpr size_t NewN() {
304
0
    // We require a fraction if inverting kNewPow2 results in 0.
305
0
    return WholeN<kNewPow2, kNewMaxLanes>() == 0
306
0
               ? FracN<kNewPow2, kNewMaxLanes>()
307
0
               : WholeN<kNewPow2, kNewMaxLanes>();
308
0
  }
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<long, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned long, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<double, 4ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 8ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<double, 2ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 0>::NewN<1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1048577ul, 1>::NewN<1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned long, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<long, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, 0>::NewN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<signed char, 32ul, 0>::NewN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -1>::NewN<-1, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, -1>::NewN<-1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned long, 4ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, -1>::NewN<-1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 1ul, 1>::NewN<1, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, -1>::NewN<-1, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 2ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 1ul, 0>::NewN<0, 1ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::NewN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<hwy::float16_t, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<hwy::float16_t, 16ul, -1>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<hwy::float16_t, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::NewN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, -1>::NewN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<int, 4ul, 0>::NewN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<short, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<short, 16ul, 0>::NewN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<short, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<int, 4ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<int, 8ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<long, 2ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::NewN<0, 32ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::NewN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -2>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 16ul, -1>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned char, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, -1>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned short, 8ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<unsigned int, 4ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<float, 4ul, 0>::NewN<0, 2ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE4::Simd<double, 2ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<float, 8ul, 0>::NewN<-2, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::NewN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 32ul, -2>::NewN<-2, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned char, 16ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 8ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::NewN<1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::NewN<-1, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned short, 16ul, -1>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_AVX2::Simd<unsigned int, 8ul, -1>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::NewN<-2, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::NewN<-1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -2>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 16ul, -1>::NewN<-1, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned char, 8ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<signed char, 16ul, 0>::NewN<0, 16ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, -1>::NewN<1, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned short, 8ul, 0>::NewN<0, 4ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<unsigned int, 4ul, 0>::NewN<0, 8ul>()
Unexecuted instantiation: unsigned long hwy::N_SSE2::Simd<float, 4ul, 0>::NewN<0, 2ul>()
309
310
  // PromoteTo/DemoteTo() with another lane type, but same number of lanes.
311
  template <typename NewT>
312
  using Rebind =
313
      Simd<NewT, NewN<RebindPow2<NewT>(), kPrivateLanes>(), RebindPow2<NewT>()>;
314
315
  // Change lane type while keeping the same vector size, e.g. for MulEven.
316
  template <typename NewT>
317
  using Repartition =
318
      Simd<NewT, NewN<kPow2, RepartitionLanes<NewT>()>(), kPow2>;
319
320
  // Half the lanes while keeping the same lane type, e.g. for LowerHalf.
321
  using Half = Simd<T, N, kPow2 - 1>;
322
323
  // Twice the lanes while keeping the same lane type, e.g. for Combine.
324
  using Twice = Simd<T, N, kPow2 + 1>;
325
};
326
327
namespace detail {
328
329
template <typename T, size_t N, int kPow2>
330
constexpr bool IsFull(Simd<T, N, kPow2> /* d */) {
331
  return N == HWY_LANES(T) && kPow2 == 0;
332
}
333
334
// Struct wrappers enable validation of arguments via static_assert.
335
template <typename T, size_t N, int kPow2>
336
struct ClampNAndPow2 {
337
  using type = Simd<T, HWY_MIN(N, HWY_MAX_N), HWY_MIN(kPow2, HWY_MAX_POW2)>;
338
};
339
340
template <typename T, int kPow2>
341
struct ScalableTagChecker {
342
  using type = typename ClampNAndPow2<T, HWY_LANES(T), kPow2>::type;
343
};
344
345
template <typename T, size_t kLimit, int kPow2>
346
struct CappedTagChecker {
347
  static_assert(kLimit != 0, "Does not make sense to have zero lanes");
348
  // Safely handle non-power-of-two inputs by rounding down, which is allowed by
349
  // CappedTag. Otherwise, Simd<T, 3, 0> would static_assert.
350
  static constexpr size_t kLimitPow2 = size_t{1} << hwy::FloorLog2(kLimit);
351
  static constexpr size_t N = HWY_MIN(kLimitPow2, HWY_LANES(T));
352
  using type = typename ClampNAndPow2<T, N, kPow2>::type;
353
};
354
355
template <typename T, size_t kNumLanes>
356
struct FixedTagChecker {
357
  static_assert(kNumLanes != 0, "Does not make sense to have zero lanes");
358
  static_assert(kNumLanes <= HWY_LANES(T), "Too many lanes");
359
  using type = Simd<T, kNumLanes, 0>;
360
};
361
362
}  // namespace detail
363
364
// ------------------------------ Aliases for Simd<>
365
366
// Tag describing a full vector (kPow2 == 0: the most common usage, e.g. 1D
367
// loops where the application does not care about the vector size) or a
368
// fraction/multiple of one. Fractions (kPow2 < 0) are useful for arguments or
369
// return values of type promotion and demotion. User-specified kPow2 is
370
// interpreted as `HWY_MIN(kPow2, HWY_MAX_POW2)`.
371
template <typename T, int kPow2 = 0>
372
using ScalableTag = typename detail::ScalableTagChecker<T, kPow2>::type;
373
374
// Tag describing a vector with *up to* kLimit active lanes, even on targets
375
// with scalable vectors and HWY_SCALAR. The runtime lane count `Lanes(tag)` may
376
// be less than kLimit, and is 1 on HWY_SCALAR. This alias is typically used for
377
// 1D loops with a relatively low application-defined upper bound, e.g. for 8x8
378
// DCTs. However, it is better if data structures are designed to be
379
// vector-length-agnostic (e.g. a hybrid SoA where there are chunks of `M >=
380
// MaxLanes(d)` DC components followed by M AC1, .., and M AC63; this would
381
// enable vector-length-agnostic loops using ScalableTag). User-specified kPow2
382
// is interpreted as `HWY_MIN(kPow2, HWY_MAX_POW2)`.
383
template <typename T, size_t kLimit, int kPow2 = 0>
384
using CappedTag = typename detail::CappedTagChecker<T, kLimit, kPow2>::type;
385
386
#if !HWY_HAVE_SCALABLE
387
// If the vector size is known, and the app knows it does not want more than
388
// kLimit lanes, then capping can be beneficial. For example, AVX-512 has lower
389
// IPC and potentially higher costs for unaligned load/store vs. 256-bit AVX2.
390
template <typename T, size_t kLimit, int kPow2 = 0>
391
using CappedTagIfFixed = CappedTag<T, kLimit, kPow2>;
392
#else  // HWY_HAVE_SCALABLE
393
// .. whereas on RVV/SVE, the cost of clamping Lanes() may exceed the benefit.
394
template <typename T, size_t kLimit, int kPow2 = 0>
395
using CappedTagIfFixed = ScalableTag<T, kPow2>;
396
#endif
397
398
// Alias for a tag describing a vector with *exactly* kNumLanes active lanes,
399
// even on targets with scalable vectors. Requires `kNumLanes` to be a power of
400
// two not exceeding `HWY_LANES(T)`.
401
//
402
// NOTE: if the application does not need to support HWY_SCALAR (+), use this
403
// instead of CappedTag to emphasize that there will be exactly kNumLanes lanes.
404
// This is useful for data structures that rely on exactly 128-bit SIMD, but
405
// these are discouraged because they cannot benefit from wider vectors.
406
// Instead, applications would ideally define a larger problem size and loop
407
// over it with the (unknown size) vectors from ScalableTag.
408
//
409
// + e.g. if the baseline is known to support SIMD, or the application requires
410
//   ops such as TableLookupBytes not supported by HWY_SCALAR.
411
template <typename T, size_t kNumLanes>
412
using FixedTag = typename detail::FixedTagChecker<T, kNumLanes>::type;
413
414
// Convenience form for fixed sizes.
415
template <typename T>
416
using Full16 = Simd<T, 2 / sizeof(T), 0>;
417
418
template <typename T>
419
using Full32 = Simd<T, 4 / sizeof(T), 0>;
420
421
template <typename T>
422
using Full64 = Simd<T, 8 / sizeof(T), 0>;
423
424
template <typename T>
425
using Full128 = Simd<T, 16 / sizeof(T), 0>;
426
427
// ------------------------------ Accessors for Simd<>
428
429
// Lane type.
430
template <class D>
431
using TFromD = typename D::T;
432
433
// Upper bound on the number of lanes, typically used for SFINAE conditions and
434
// to allocate storage for targets with known vector sizes. Note: this may be a
435
// loose bound, instead use Lanes() as the actual size for AllocateAligned.
436
// MSVC workaround: use static constant directly instead of a function.
437
1.70G
#define HWY_MAX_LANES_D(D) D::kPrivateLanes
438
439
// Same as D().Pow2(), but this is too complex for SFINAE with MSVC, so we use a
440
// static constant directly.
441
#define HWY_POW2_D(D) D::kPrivatePow2
442
443
// Non-macro form of HWY_MAX_LANES_D in case that is preferable. WARNING: the
444
// macro form may be required for MSVC, which has limitations on deducing
445
// arguments.
446
template <class D>
447
1.29M
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t MaxLanes(D) {
448
1.29M
  return HWY_MAX_LANES_D(D);
449
1.29M
}
Unexecuted instantiation: unsigned long hwy::N_SSE4::MaxLanes<hwy::N_SSE4::Simd<float, 4ul, 0> >(hwy::N_SSE4::Simd<float, 4ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_AVX2::MaxLanes<hwy::N_AVX2::Simd<float, 8ul, 0> >(hwy::N_AVX2::Simd<float, 8ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE2::MaxLanes<hwy::N_SSE2::Simd<float, 4ul, 0> >(hwy::N_SSE2::Simd<float, 4ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE2::MaxLanes<hwy::N_SSE2::Simd<unsigned char, 16ul, 0> >(hwy::N_SSE2::Simd<unsigned char, 16ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE4::MaxLanes<hwy::N_SSE4::Simd<unsigned char, 16ul, -2> >(hwy::N_SSE4::Simd<unsigned char, 16ul, -2>)
Unexecuted instantiation: unsigned long hwy::N_SSE4::MaxLanes<hwy::N_SSE4::Simd<unsigned short, 8ul, 0> >(hwy::N_SSE4::Simd<unsigned short, 8ul, 0>)
unsigned long hwy::N_AVX2::MaxLanes<hwy::N_AVX2::Simd<unsigned char, 16ul, 0> >(hwy::N_AVX2::Simd<unsigned char, 16ul, 0>)
Line
Count
Source
447
1.29M
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t MaxLanes(D) {
448
1.29M
  return HWY_MAX_LANES_D(D);
449
1.29M
}
Unexecuted instantiation: unsigned long hwy::N_SSE2::MaxLanes<hwy::N_SSE2::Simd<unsigned char, 16ul, -2> >(hwy::N_SSE2::Simd<unsigned char, 16ul, -2>)
Unexecuted instantiation: unsigned long hwy::N_SSE2::MaxLanes<hwy::N_SSE2::Simd<unsigned short, 8ul, 0> >(hwy::N_SSE2::Simd<unsigned short, 8ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE4::MaxLanes<hwy::N_SSE4::Simd<unsigned char, 16ul, -1> >(hwy::N_SSE4::Simd<unsigned char, 16ul, -1>)
Unexecuted instantiation: unsigned long hwy::N_SSE4::MaxLanes<hwy::N_SSE4::Simd<unsigned char, 16ul, 0> >(hwy::N_SSE4::Simd<unsigned char, 16ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_AVX2::MaxLanes<hwy::N_AVX2::Simd<unsigned short, 16ul, -1> >(hwy::N_AVX2::Simd<unsigned short, 16ul, -1>)
Unexecuted instantiation: unsigned long hwy::N_SSE2::MaxLanes<hwy::N_SSE2::Simd<unsigned char, 16ul, -1> >(hwy::N_SSE2::Simd<unsigned char, 16ul, -1>)
450
451
#if !HWY_HAVE_SCALABLE
452
453
// If non-scalable, this is constexpr; otherwise the target's header defines a
454
// non-constexpr version of this function. This is the actual vector length,
455
// used when advancing loop counters.
456
template <class D>
457
1.70G
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t Lanes(D) {
458
1.70G
  return HWY_MAX_LANES_D(D);
459
1.70G
}
Unexecuted instantiation: unsigned long hwy::N_SSE4::Lanes<hwy::N_SSE4::Simd<int, 4ul, 0> >(hwy::N_SSE4::Simd<int, 4ul, 0>)
unsigned long hwy::N_AVX2::Lanes<hwy::N_AVX2::Simd<int, 8ul, 0> >(hwy::N_AVX2::Simd<int, 8ul, 0>)
Line
Count
Source
457
142M
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t Lanes(D) {
458
142M
  return HWY_MAX_LANES_D(D);
459
142M
}
Unexecuted instantiation: unsigned long hwy::N_SSE2::Lanes<hwy::N_SSE2::Simd<int, 4ul, 0> >(hwy::N_SSE2::Simd<int, 4ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE4::Lanes<hwy::N_SSE4::Simd<float, 4ul, 0> >(hwy::N_SSE4::Simd<float, 4ul, 0>)
unsigned long hwy::N_AVX2::Lanes<hwy::N_AVX2::Simd<float, 8ul, 0> >(hwy::N_AVX2::Simd<float, 8ul, 0>)
Line
Count
Source
457
1.49G
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t Lanes(D) {
458
1.49G
  return HWY_MAX_LANES_D(D);
459
1.49G
}
Unexecuted instantiation: unsigned long hwy::N_SSE2::Lanes<hwy::N_SSE2::Simd<float, 4ul, 0> >(hwy::N_SSE2::Simd<float, 4ul, 0>)
unsigned long hwy::N_SSE2::Lanes<hwy::N_SSE2::Simd<unsigned char, 16ul, 0> >(hwy::N_SSE2::Simd<unsigned char, 16ul, 0>)
Line
Count
Source
457
212k
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t Lanes(D) {
458
212k
  return HWY_MAX_LANES_D(D);
459
212k
}
Unexecuted instantiation: unsigned long hwy::N_SSE4::Lanes<hwy::N_SSE4::Simd<short, 8ul, 0> >(hwy::N_SSE4::Simd<short, 8ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_AVX2::Lanes<hwy::N_AVX2::Simd<short, 16ul, 0> >(hwy::N_AVX2::Simd<short, 16ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE2::Lanes<hwy::N_SSE2::Simd<short, 8ul, 0> >(hwy::N_SSE2::Simd<short, 8ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE4::Lanes<hwy::N_SSE4::Simd<unsigned long, 2ul, 0> >(hwy::N_SSE4::Simd<unsigned long, 2ul, 0>)
unsigned long hwy::N_AVX2::Lanes<hwy::N_AVX2::Simd<unsigned long, 4ul, 0> >(hwy::N_AVX2::Simd<unsigned long, 4ul, 0>)
Line
Count
Source
457
66.0M
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t Lanes(D) {
458
66.0M
  return HWY_MAX_LANES_D(D);
459
66.0M
}
Unexecuted instantiation: unsigned long hwy::N_SSE2::Lanes<hwy::N_SSE2::Simd<unsigned long, 2ul, 0> >(hwy::N_SSE2::Simd<unsigned long, 2ul, 0>)
unsigned long hwy::N_AVX2::Lanes<hwy::N_AVX2::Simd<float, 4ul, 0> >(hwy::N_AVX2::Simd<float, 4ul, 0>)
Line
Count
Source
457
1.30M
HWY_INLINE HWY_MAYBE_UNUSED constexpr size_t Lanes(D) {
458
1.30M
  return HWY_MAX_LANES_D(D);
459
1.30M
}
Unexecuted instantiation: unsigned long hwy::N_SSE4::Lanes<hwy::N_SSE4::Simd<unsigned short, 8ul, 0> >(hwy::N_SSE4::Simd<unsigned short, 8ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_AVX2::Lanes<hwy::N_AVX2::Simd<unsigned short, 16ul, 0> >(hwy::N_AVX2::Simd<unsigned short, 16ul, 0>)
Unexecuted instantiation: unsigned long hwy::N_SSE2::Lanes<hwy::N_SSE2::Simd<unsigned short, 8ul, 0> >(hwy::N_SSE2::Simd<unsigned short, 8ul, 0>)
460
461
#endif  // !HWY_HAVE_SCALABLE
462
463
// Tag for the same number of lanes as D, but with the LaneType T.
464
template <class T, class D>
465
using Rebind = typename D::template Rebind<T>;
466
467
template <class D>
468
using RebindToSigned = Rebind<MakeSigned<TFromD<D>>, D>;
469
template <class D>
470
using RebindToUnsigned = Rebind<MakeUnsigned<TFromD<D>>, D>;
471
template <class D>
472
using RebindToFloat = Rebind<MakeFloat<TFromD<D>>, D>;
473
474
// Tag for the same total size as D, but with the LaneType T.
475
template <class T, class D>
476
using Repartition = typename D::template Repartition<T>;
477
478
template <class D>
479
using RepartitionToWide = Repartition<MakeWide<TFromD<D>>, D>;
480
template <class D>
481
using RepartitionToNarrow = Repartition<MakeNarrow<TFromD<D>>, D>;
482
483
// Shorthand for applying RepartitionToWide twice (for 8/16-bit types).
484
template <class D>
485
using RepartitionToWideX2 = RepartitionToWide<RepartitionToWide<D>>;
486
// Shorthand for applying RepartitionToWide three times (for 8-bit types).
487
template <class D>
488
using RepartitionToWideX3 = RepartitionToWide<RepartitionToWideX2<D>>;
489
490
// Tag for the same lane type as D, but half the lanes.
491
template <class D>
492
using Half = typename D::Half;
493
494
// Tag for the same lane type as D, but twice the lanes.
495
template <class D>
496
using Twice = typename D::Twice;
497
498
// Tag for a 16-byte block with the same lane type as D
499
#if HWY_HAVE_SCALABLE
500
namespace detail {
501
502
template <class D>
503
class BlockDFromD_t {};
504
505
template <typename T, size_t N, int kPow2>
506
class BlockDFromD_t<Simd<T, N, kPow2>> {
507
  using D = Simd<T, N, kPow2>;
508
  static constexpr int kNewPow2 = HWY_MIN(kPow2, 0);
509
  static constexpr size_t kMaxLpb = HWY_MIN(16 / sizeof(T), HWY_MAX_LANES_D(D));
510
  static constexpr size_t kNewN = D::template NewN<kNewPow2, kMaxLpb>();
511
512
 public:
513
  using type = Simd<T, kNewN, kNewPow2>;
514
};
515
516
}  // namespace detail
517
518
template <class D>
519
using BlockDFromD = typename detail::BlockDFromD_t<RemoveConst<D>>::type;
520
#else
521
template <class D>
522
using BlockDFromD =
523
    Simd<TFromD<D>, HWY_MIN(16 / sizeof(TFromD<D>), HWY_MAX_LANES_D(D)), 0>;
524
#endif
525
526
// Returns whether `ptr` is a multiple of `Lanes(d)` elements.
527
template <class D, typename T>
528
HWY_API bool IsAligned(D d, T* ptr) {
529
  const size_t N = Lanes(d);
530
  return reinterpret_cast<uintptr_t>(ptr) % (N * sizeof(T)) == 0;
531
}
532
533
// ------------------------------ Choosing overloads (SFINAE)
534
535
// Same as base.h macros but with a Simd<T, N, kPow2> argument instead of T.
536
#define HWY_IF_UNSIGNED_D(D) HWY_IF_UNSIGNED(hwy::HWY_NAMESPACE::TFromD<D>)
537
#define HWY_IF_NOT_UNSIGNED_D(D) \
538
  HWY_IF_NOT_UNSIGNED(hwy::HWY_NAMESPACE::TFromD<D>)
539
#define HWY_IF_SIGNED_D(D) HWY_IF_SIGNED(hwy::HWY_NAMESPACE::TFromD<D>)
540
#define HWY_IF_FLOAT_D(D) HWY_IF_FLOAT(hwy::HWY_NAMESPACE::TFromD<D>)
541
#define HWY_IF_NOT_FLOAT_D(D) HWY_IF_NOT_FLOAT(hwy::HWY_NAMESPACE::TFromD<D>)
542
#define HWY_IF_FLOAT3264_D(D) HWY_IF_FLOAT3264(hwy::HWY_NAMESPACE::TFromD<D>)
543
#define HWY_IF_NOT_FLOAT3264_D(D) \
544
  HWY_IF_NOT_FLOAT3264(hwy::HWY_NAMESPACE::TFromD<D>)
545
#define HWY_IF_SPECIAL_FLOAT_D(D) \
546
  HWY_IF_SPECIAL_FLOAT(hwy::HWY_NAMESPACE::TFromD<D>)
547
#define HWY_IF_NOT_SPECIAL_FLOAT_D(D) \
548
  HWY_IF_NOT_SPECIAL_FLOAT(hwy::HWY_NAMESPACE::TFromD<D>)
549
#define HWY_IF_FLOAT_OR_SPECIAL_D(D) \
550
  HWY_IF_FLOAT_OR_SPECIAL(hwy::HWY_NAMESPACE::TFromD<D>)
551
#define HWY_IF_NOT_FLOAT_NOR_SPECIAL_D(D) \
552
  HWY_IF_NOT_FLOAT_NOR_SPECIAL(hwy::HWY_NAMESPACE::TFromD<D>)
553
554
#define HWY_IF_T_SIZE_D(D, bytes) \
555
  HWY_IF_T_SIZE(hwy::HWY_NAMESPACE::TFromD<D>, bytes)
556
#define HWY_IF_NOT_T_SIZE_D(D, bytes) \
557
  HWY_IF_NOT_T_SIZE(hwy::HWY_NAMESPACE::TFromD<D>, bytes)
558
#define HWY_IF_T_SIZE_ONE_OF_D(D, bit_array) \
559
  HWY_IF_T_SIZE_ONE_OF(hwy::HWY_NAMESPACE::TFromD<D>, bit_array)
560
#define HWY_IF_T_SIZE_LE_D(D, bytes) \
561
  HWY_IF_T_SIZE_LE(hwy::HWY_NAMESPACE::TFromD<D>, bytes)
562
#define HWY_IF_T_SIZE_GT_D(D, bytes) \
563
  HWY_IF_T_SIZE_GT(hwy::HWY_NAMESPACE::TFromD<D>, bytes)
564
565
#define HWY_IF_LANES_D(D, lanes) HWY_IF_LANES(HWY_MAX_LANES_D(D), lanes)
566
#define HWY_IF_LANES_LE_D(D, lanes) HWY_IF_LANES_LE(HWY_MAX_LANES_D(D), lanes)
567
#define HWY_IF_LANES_GT_D(D, lanes) HWY_IF_LANES_GT(HWY_MAX_LANES_D(D), lanes)
568
#define HWY_IF_LANES_PER_BLOCK_D(D, lanes)                                  \
569
  HWY_IF_LANES_PER_BLOCK(hwy::HWY_NAMESPACE::TFromD<D>, HWY_MAX_LANES_D(D), \
570
                         lanes)
571
572
#if HWY_COMPILER_MSVC
573
#define HWY_IF_POW2_LE_D(D, pow2) \
574
  hwy::EnableIf<HWY_POW2_D(D) <= pow2>* = nullptr
575
#define HWY_IF_POW2_GT_D(D, pow2) \
576
  hwy::EnableIf<(HWY_POW2_D(D) > pow2)>* = nullptr
577
#else
578
#define HWY_IF_POW2_LE_D(D, pow2) hwy::EnableIf<D().Pow2() <= pow2>* = nullptr
579
#define HWY_IF_POW2_GT_D(D, pow2) hwy::EnableIf<(D().Pow2() > pow2)>* = nullptr
580
#endif  // HWY_COMPILER_MSVC
581
582
#define HWY_IF_U8_D(D) HWY_IF_U8(hwy::HWY_NAMESPACE::TFromD<D>)
583
#define HWY_IF_U16_D(D) HWY_IF_U16(hwy::HWY_NAMESPACE::TFromD<D>)
584
#define HWY_IF_U32_D(D) HWY_IF_U32(hwy::HWY_NAMESPACE::TFromD<D>)
585
#define HWY_IF_U64_D(D) HWY_IF_U64(hwy::HWY_NAMESPACE::TFromD<D>)
586
587
#define HWY_IF_I8_D(D) HWY_IF_I8(hwy::HWY_NAMESPACE::TFromD<D>)
588
#define HWY_IF_I16_D(D) HWY_IF_I16(hwy::HWY_NAMESPACE::TFromD<D>)
589
#define HWY_IF_I32_D(D) HWY_IF_I32(hwy::HWY_NAMESPACE::TFromD<D>)
590
#define HWY_IF_I64_D(D) HWY_IF_I64(hwy::HWY_NAMESPACE::TFromD<D>)
591
592
// Use instead of HWY_IF_T_SIZE_D to avoid ambiguity with float16_t/float/double
593
// overloads.
594
#define HWY_IF_UI8_D(D) HWY_IF_UI8(hwy::HWY_NAMESPACE::TFromD<D>)
595
#define HWY_IF_UI16_D(D) HWY_IF_UI16(hwy::HWY_NAMESPACE::TFromD<D>)
596
#define HWY_IF_UI32_D(D) HWY_IF_UI32(hwy::HWY_NAMESPACE::TFromD<D>)
597
#define HWY_IF_UI64_D(D) HWY_IF_UI64(hwy::HWY_NAMESPACE::TFromD<D>)
598
599
#define HWY_IF_BF16_D(D) HWY_IF_BF16(hwy::HWY_NAMESPACE::TFromD<D>)
600
#define HWY_IF_NOT_BF16_D(D) HWY_IF_NOT_BF16(hwy::HWY_NAMESPACE::TFromD<D>)
601
602
#define HWY_IF_F16_D(D) HWY_IF_F16(hwy::HWY_NAMESPACE::TFromD<D>)
603
#define HWY_IF_NOT_F16_D(D) HWY_IF_NOT_F16(hwy::HWY_NAMESPACE::TFromD<D>)
604
605
#define HWY_IF_F32_D(D) HWY_IF_F32(hwy::HWY_NAMESPACE::TFromD<D>)
606
#define HWY_IF_F64_D(D) HWY_IF_F64(hwy::HWY_NAMESPACE::TFromD<D>)
607
608
#define HWY_V_SIZE_D(D) \
609
  (HWY_MAX_LANES_D(D) * sizeof(hwy::HWY_NAMESPACE::TFromD<D>))
610
#define HWY_IF_V_SIZE_D(D, bytes) \
611
  HWY_IF_V_SIZE(hwy::HWY_NAMESPACE::TFromD<D>, HWY_MAX_LANES_D(D), bytes)
612
#define HWY_IF_V_SIZE_LE_D(D, bytes) \
613
  HWY_IF_V_SIZE_LE(hwy::HWY_NAMESPACE::TFromD<D>, HWY_MAX_LANES_D(D), bytes)
614
#define HWY_IF_V_SIZE_GT_D(D, bytes) \
615
  HWY_IF_V_SIZE_GT(hwy::HWY_NAMESPACE::TFromD<D>, HWY_MAX_LANES_D(D), bytes)
616
617
// Same, but with a vector argument. ops/*-inl.h define their own TFromV.
618
#define HWY_IF_UNSIGNED_V(V) HWY_IF_UNSIGNED(hwy::HWY_NAMESPACE::TFromV<V>)
619
#define HWY_IF_NOT_UNSIGNED_V(V) \
620
  HWY_IF_NOT_UNSIGNED(hwy::HWY_NAMESPACE::TFromV<V>)
621
#define HWY_IF_SIGNED_V(V) HWY_IF_SIGNED(hwy::HWY_NAMESPACE::TFromV<V>)
622
#define HWY_IF_FLOAT_V(V) HWY_IF_FLOAT(hwy::HWY_NAMESPACE::TFromV<V>)
623
#define HWY_IF_NOT_FLOAT_V(V) HWY_IF_NOT_FLOAT(hwy::HWY_NAMESPACE::TFromV<V>)
624
#define HWY_IF_SPECIAL_FLOAT_V(V) \
625
  HWY_IF_SPECIAL_FLOAT(hwy::HWY_NAMESPACE::TFromV<V>)
626
#define HWY_IF_NOT_FLOAT_NOR_SPECIAL_V(V) \
627
  HWY_IF_NOT_FLOAT_NOR_SPECIAL(hwy::HWY_NAMESPACE::TFromV<V>)
628
629
#define HWY_IF_T_SIZE_V(V, bytes) \
630
  HWY_IF_T_SIZE(hwy::HWY_NAMESPACE::TFromV<V>, bytes)
631
#define HWY_IF_NOT_T_SIZE_V(V, bytes) \
632
  HWY_IF_NOT_T_SIZE(hwy::HWY_NAMESPACE::TFromV<V>, bytes)
633
#define HWY_IF_T_SIZE_ONE_OF_V(V, bit_array) \
634
  HWY_IF_T_SIZE_ONE_OF(hwy::HWY_NAMESPACE::TFromV<V>, bit_array)
635
636
#define HWY_MAX_LANES_V(V) HWY_MAX_LANES_D(DFromV<V>)
637
#define HWY_IF_V_SIZE_V(V, bytes) \
638
  HWY_IF_V_SIZE(hwy::HWY_NAMESPACE::TFromV<V>, HWY_MAX_LANES_V(V), bytes)
639
#define HWY_IF_V_SIZE_LE_V(V, bytes) \
640
  HWY_IF_V_SIZE_LE(hwy::HWY_NAMESPACE::TFromV<V>, HWY_MAX_LANES_V(V), bytes)
641
#define HWY_IF_V_SIZE_GT_V(V, bytes) \
642
  HWY_IF_V_SIZE_GT(hwy::HWY_NAMESPACE::TFromV<V>, HWY_MAX_LANES_V(V), bytes)
643
644
// Use in implementations of ReduceSum etc. to avoid conflicts with the N=1 and
645
// N=4 8-bit specializations in generic_ops-inl.
646
#undef HWY_IF_REDUCE_D
647
#define HWY_IF_REDUCE_D(D)                  \
648
  hwy::EnableIf<HWY_MAX_LANES_D(D) != 1 &&  \
649
                (HWY_MAX_LANES_D(D) != 4 || \
650
                 sizeof(hwy::HWY_NAMESPACE::TFromD<D>) != 1)>* = nullptr
651
652
#undef HWY_IF_SUM_OF_LANES_D
653
#define HWY_IF_SUM_OF_LANES_D(D) HWY_IF_LANES_GT_D(D, 1)
654
655
#undef HWY_IF_MINMAX_OF_LANES_D
656
#define HWY_IF_MINMAX_OF_LANES_D(D) HWY_IF_LANES_GT_D(D, 1)
657
658
#undef HWY_IF_ADDSUB_V
659
#define HWY_IF_ADDSUB_V(V) HWY_IF_LANES_GT_D(DFromV<V>, 1)
660
661
#undef HWY_IF_MULADDSUB_V
662
#define HWY_IF_MULADDSUB_V(V) HWY_IF_LANES_GT_D(DFromV<V>, 1)
663
664
// HWY_IF_U2I_DEMOTE_FROM_LANE_SIZE_V is used to disable the default
665
// implementation of unsigned to signed DemoteTo/ReorderDemote2To in
666
// generic_ops-inl.h for at least some of the unsigned to signed demotions on
667
// SCALAR/EMU128/SSE2/SSSE3/SSE4/AVX2/SVE/SVE2
668
669
#undef HWY_IF_U2I_DEMOTE_FROM_LANE_SIZE_V
670
#define HWY_IF_U2I_DEMOTE_FROM_LANE_SIZE_V(V) void* = nullptr
671
672
// Old names (deprecated)
673
#define HWY_IF_LANE_SIZE_D(D, bytes) HWY_IF_T_SIZE_D(D, bytes)
674
#define HWY_IF_NOT_LANE_SIZE_D(D, bytes) HWY_IF_NOT_T_SIZE_D(D, bytes)
675
676
// NOLINTNEXTLINE(google-readability-namespace-comments)
677
}  // namespace HWY_NAMESPACE
678
}  // namespace hwy
679
HWY_AFTER_NAMESPACE();
680
681
#endif  // HIGHWAY_HWY_OPS_SHARED_TOGGLE