17#if defined(HIGHWAY_HWY_CONTRIB_ALGO_TRANSFORM_INL_H_) == \
18 defined(HWY_TARGET_TOGGLE)
19#ifdef HIGHWAY_HWY_CONTRIB_ALGO_TRANSFORM_INL_H_
20#undef HIGHWAY_HWY_CONTRIB_ALGO_TRANSFORM_INL_H_
22#define HIGHWAY_HWY_CONTRIB_ALGO_TRANSFORM_INL_H_
52template <
class D,
class Func,
typename T = TFromD<D>>
55 using TU =
TFromD<
decltype(du)>;
59 Vec<
decltype(du)> vidx =
Iota(du, 0);
61 for (; idx <= count - N; idx += N) {
63 vidx =
Add(vidx,
Set(du,
static_cast<TU
>(N)));
70 const size_t remaining = count - idx;
72 StoreN(func(
d, vidx),
d, out + idx, remaining);
77template <
class D,
class Func,
typename T = TFromD<D>>
84 for (; idx <= count - N; idx += N) {
93 const size_t remaining = count - idx;
101template <
class D,
class Func,
typename T = TFromD<D>>
103 const size_t N =
Lanes(
d);
107 for (; idx <= count - N; idx += N) {
116 const size_t remaining = count - idx;
119 StoreN(func(
d, v),
d, inout + idx, remaining);
124template <
class D,
class Func,
typename T = TFromD<D>>
127 const size_t N =
Lanes(
d);
131 for (; idx <= count - N; idx += N) {
134 StoreU(func(
d, v, v1),
d, inout + idx);
141 const size_t remaining = count - idx;
145 StoreN(func(
d, v, v1),
d, inout + idx, remaining);
150template <
class D,
class Func,
typename T = TFromD<D>>
154 const size_t N =
Lanes(
d);
158 for (; idx <= count - N; idx += N) {
162 StoreU(func(
d, v, v1, v2),
d, inout + idx);
169 const size_t remaining = count - idx;
174 StoreN(func(
d, v, v1, v2),
d, inout + idx, remaining);
177template <
class D,
typename T = TFromD<D>>
179 const size_t N =
Lanes(
d);
185 for (; idx <= count - N; idx += N) {
194 const size_t remaining = count - idx;
200template <
class D,
class Func,
typename T = TFromD<D>>
203 const size_t N =
Lanes(
d);
208 for (; idx <= count - N; idx += N) {
217 const size_t remaining = count - idx;
#define HWY_RESTRICT
Definition base.h:95
#define HWY_DASSERT(condition)
Definition base.h:290
#define HWY_UNLIKELY(expr)
Definition base.h:107
void Generate(D d, T *HWY_RESTRICT out, size_t count, const Func &func)
Definition transform-inl.h:53
void ReplaceIf(D d, T *HWY_RESTRICT inout, size_t count, T new_t, const Func &func)
Definition transform-inl.h:201
HWY_API auto Eq(V a, V b) -> decltype(a==b)
Definition generic_ops-inl.h:7331
D d
Definition arm_sve-inl.h:1915
HWY_API VFromD< D > LoadNOr(VFromD< D > no, D d, const TFromD< D > *HWY_RESTRICT p, size_t max_lanes_to_load)
Definition emu128-inl.h:1362
HWY_API void StoreN(VFromD< D > v, D d, TFromD< D > *HWY_RESTRICT p, size_t max_lanes_to_store)
Definition emu128-inl.h:1398
HWY_API V IfThenElse(MFromD< DFromV< V > > mask, V yes, V no)
Definition arm_neon-inl.h:2992
HWY_API Vec128< uint8_t > LoadU(D, const uint8_t *HWY_RESTRICT unaligned)
Definition arm_neon-inl.h:3442
void Transform2(D d, T *HWY_RESTRICT inout, size_t count, const T *HWY_RESTRICT in1, const T *HWY_RESTRICT in2, const Func &func)
Definition transform-inl.h:151
HWY_API void StoreU(Vec128< uint8_t > v, D, uint8_t *HWY_RESTRICT unaligned)
Definition arm_neon-inl.h:3689
typename D::T TFromD
Definition ops/shared-inl.h:426
HWY_API V Add(V a, V b)
Definition generic_ops-inl.h:7300
void Replace(D d, T *HWY_RESTRICT inout, size_t count, T new_t, T old_t)
Definition transform-inl.h:178
Rebind< MakeUnsigned< TFromD< D > >, D > RebindToUnsigned
Definition ops/shared-inl.h:465
void Transform(D d, T *HWY_RESTRICT inout, size_t count, const Func &func)
Definition transform-inl.h:102
HWY_API VFromD< D > Iota(D d, const T2 first)
Definition arm_neon-inl.h:1297
HWY_INLINE Vec128< TFromD< D > > Set(D, T t)
Definition arm_neon-inl.h:931
HWY_API VFromD< D > LoadN(D d, const TFromD< D > *HWY_RESTRICT p, size_t max_lanes_to_load)
Definition emu128-inl.h:1352
void Foreach(D d, const T *HWY_RESTRICT in, const size_t count, const Vec< D > no, const Func &func)
Definition transform-inl.h:78
decltype(Zero(D())) Vec
Definition generic_ops-inl.h:46
HWY_API size_t Lanes(D)
Definition rvv-inl.h:598
void Transform1(D d, T *HWY_RESTRICT inout, size_t count, const T *HWY_RESTRICT in1, const Func &func)
Definition transform-inl.h:125
FuncOutput(*)(const void *, FuncInput) Func
Definition nanobenchmark.h:87
#define HWY_NAMESPACE
Definition set_macros-inl.h:166