/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 |