17 #if defined(HIGHWAY_HWY_CONTRIB_SORT_TRAITS_TOGGLE) == \
18 defined(HWY_TARGET_TOGGLE)
19 #ifdef HIGHWAY_HWY_CONTRIB_SORT_TRAITS_TOGGLE
20 #undef HIGHWAY_HWY_CONTRIB_SORT_TRAITS_TOGGLE
22 #define HIGHWAY_HWY_CONTRIB_SORT_TRAITS_TOGGLE
86 template <
class D, HWY_IF_LANE_SIZE_D(D, 2)>
91 template <
class D, HWY_IF_LANE_SIZE_D(D, 4)>
95 template <
class D, HWY_IF_LANE_SIZE_D(D, 8)>
100 template <
class D, HWY_IF_NOT_LANE_SIZE_D(D, 8)>
109 template <
class D, HWY_IF_LANE_SIZE_D(D, 8)>
115 template <
class D, HWY_IF_NOT_LANE_SIZE_D(D, 8)>
117 const Vec<D> even)
const {
125 template <
class D, HWY_IF_LANE_SIZE_D(D, 8)>
130 template <
class D, HWY_IF_NOT_LANE_SIZE_D(D, 8)>
139 template <
class D, HWY_IF_LANE_SIZE_D(D, 8)>
155 template <
typename T>
202 template <
typename T>
246 template <
class Base>
248 constexpr
bool Is128()
const {
return false; }
256 const Base* base =
static_cast<const Base*
>(
this);
261 #if HWY_AVX3 < HWY_TARGET && HWY_TARGET <= HWY_SSSE3
263 const Mask<D> cmp = base->Compare(
d, a, b);
269 a = base->First(
d, a, b);
270 b = base->Last(
d, a_copy, b);
274 template <
class D, HWY_IF_LANE_SIZE_D(D, 8)>
276 const Base* base =
static_cast<const Base*
>(
this);
277 Vec<D> swapped = base->ReverseKeys2(
d,
v);
280 #if HWY_AVX3 < HWY_TARGET && HWY_TARGET <= HWY_SSSE3
285 return base->OddEvenKeys(swapped,
v);
290 template <
class D, HWY_IF_NOT_LANE_SIZE_D(D, 8)>
292 const Base* base =
static_cast<const Base*
>(
this);
293 Vec<D> swapped = base->ReverseKeys2(
d,
v);
295 return base->OddEvenKeys(swapped,
v);
301 const Base* base =
static_cast<const Base*
>(
this);
302 Vec<D> swapped = base->ReverseKeys4(
d,
v);
304 return base->OddEvenPairs(
d, swapped,
v);
310 const Base* base =
static_cast<const Base*
>(
this);
311 Vec<D> swapped = base->SwapAdjacentQuads(
d,
v);
315 return base->OddEvenQuads(
d, swapped,
v);
#define HWY_RESTRICT
Definition: base.h:63
#define HWY_INLINE
Definition: base.h:64
HWY_INLINE Vec128< T, N > OddEven(hwy::SizeTag< 1 >, const Vec128< T, N > a, const Vec128< T, N > b)
Definition: wasm_128-inl.h:2568
HWY_INLINE Vec128< T, 1 > MinOfLanes(hwy::SizeTag< sizeof(T)>, const Vec128< T, 1 > v)
Definition: arm_neon-inl.h:4309
HWY_INLINE Vec128< T, 1 > MaxOfLanes(hwy::SizeTag< sizeof(T)>, const Vec128< T, 1 > v)
Definition: arm_neon-inl.h:4314
HWY_INLINE Vec128< T, N > IfThenElse(hwy::SizeTag< 1 >, Mask128< T, N > mask, Vec128< T, N > yes, Vec128< T, N > no)
Definition: x86_128-inl.h:680
d
Definition: rvv-inl.h:1656
HWY_API Vec128< T, N > OddEvenBlocks(Vec128< T, N >, Vec128< T, N > even)
Definition: arm_neon-inl.h:4038
HWY_API Vec128< T, N > DupOdd(Vec128< T, N > v)
Definition: arm_neon-inl.h:4003
HWY_API Vec128< T > Shuffle1032(const Vec128< T > v)
Definition: arm_neon-inl.h:3531
HWY_API auto Lt(V a, V b) -> decltype(a==b)
Definition: arm_neon-inl.h:5252
Repartition< MakeWide< TFromD< D > >, D > RepartitionToWide
Definition: ops/shared-inl.h:210
HWY_API Vec128< uint64_t, N > Min(const Vec128< uint64_t, N > a, const Vec128< uint64_t, N > b)
Definition: arm_neon-inl.h:1957
HWY_API Vec128< uint64_t, N > Max(const Vec128< uint64_t, N > a, const Vec128< uint64_t, N > b)
Definition: arm_neon-inl.h:1995
HWY_API Vec128< T, N > ConcatLowerUpper(const Simd< T, N, 0 > d, Vec128< T, N > hi, Vec128< T, N > lo)
Definition: arm_neon-inl.h:3869
HWY_API Vec128< T, N > IfVecThenElse(Vec128< T, N > mask, Vec128< T, N > yes, Vec128< T, N > no)
Definition: arm_neon-inl.h:1505
HWY_API Vec128< T, N > VecFromMask(Simd< T, N, 0 > d, const Mask128< T, N > v)
Definition: arm_neon-inl.h:1681
HWY_API Vec128< T, N > Reverse4(Simd< T, N, 0 > d, const Vec128< T, N > v)
Definition: arm_neon-inl.h:3490
HWY_API Vec128< T, N > SwapAdjacentBlocks(Vec128< T, N > v)
Definition: arm_neon-inl.h:4045
HWY_API Vec128< T, N > Reverse2(Simd< T, N, 0 > d, const Vec128< T, N > v)
Definition: arm_neon-inl.h:3461
svuint16_t Set(Simd< bfloat16_t, N, kPow2 > d, bfloat16_t arg)
Definition: arm_sve-inl.h:282
HWY_API Vec128< T, N > Reverse8(Simd< T, N, 0 > d, const Vec128< T, N > v)
Definition: arm_neon-inl.h:3513
HWY_API Vec128< T, N > ConcatUpperLower(Simd< T, N, 0 > d, Vec128< T, N > hi, Vec128< T, N > lo)
Definition: arm_neon-inl.h:3895
HWY_API Vec128< T, N > BitCast(Simd< T, N, 0 > d, Vec128< FromT, N *sizeof(T)/sizeof(FromT)> v)
Definition: arm_neon-inl.h:710
HWY_API Vec64< uint32_t > Shuffle2301(const Vec64< uint32_t > v)
Definition: arm_neon-inl.h:1778
typename D::template Repartition< T > Repartition
Definition: ops/shared-inl.h:207
decltype(MaskFromVec(Zero(D()))) Mask
Definition: generic_ops-inl.h:38
HWY_API Vec128< T, 1 > Reverse(Simd< T, 1, 0 >, const Vec128< T, 1 > v)
Definition: arm_neon-inl.h:3430
const vfloat64m1_t v
Definition: rvv-inl.h:1656
typename D::T TFromD
Definition: ops/shared-inl.h:192
decltype(Zero(D())) Vec
Definition: generic_ops-inl.h:32
Definition: aligned_allocator.h:27
constexpr HWY_API T LowestValue()
Definition: base.h:512
constexpr HWY_API T HighestValue()
Definition: base.h:525
#define HWY_NAMESPACE
Definition: set_macros-inl.h:80
Definition: traits-inl.h:38
HWY_INLINE Vec< D > ReverseKeys2(D d, Vec< D > v) const
Definition: traits-inl.h:61
HWY_INLINE V OddEvenKeys(const V odd, const V even) const
Definition: traits-inl.h:82
constexpr size_t LanesPerKey() const
Definition: traits-inl.h:39
HWY_INLINE Vec< D > OddEvenQuads(D d, Vec< D > odd, Vec< D > even) const
Definition: traits-inl.h:131
HWY_INLINE Vec< D > SwapAdjacentQuads(D d, const Vec< D > v) const
Definition: traits-inl.h:101
HWY_INLINE Vec< D > ReverseKeys(D d, Vec< D > v) const
Definition: traits-inl.h:56
HWY_INLINE Vec< D > SetKey(D d, const TFromD< D > *key) const
Definition: traits-inl.h:51
HWY_INLINE void Swap(T *a, T *b) const
Definition: traits-inl.h:43
HWY_INLINE Vec< D > ReverseKeys8(D d, Vec< D > v) const
Definition: traits-inl.h:71
HWY_INLINE Vec< D > OddEvenPairs(D d, const Vec< D > odd, const Vec< D > even) const
Definition: traits-inl.h:116
HWY_INLINE Vec< D > SwapAdjacentPairs(D d, const Vec< D > v) const
Definition: traits-inl.h:87
HWY_INLINE Vec< D > SwapAdjacentPairs(D, const Vec< D > v) const
Definition: traits-inl.h:92
HWY_INLINE Vec< D > OddEvenPairs(D, Vec< D > odd, Vec< D > even) const
Definition: traits-inl.h:126
HWY_INLINE Vec< D > ReverseKeys4(D d, Vec< D > v) const
Definition: traits-inl.h:66
HWY_INLINE Vec< D > ReverseKeys16(D d, Vec< D > v) const
Definition: traits-inl.h:76
Definition: traits-inl.h:152
HWY_INLINE Vec< D > LastOfLanes(D d, Vec< D > v, TFromD< D > *HWY_RESTRICT) const
Definition: traits-inl.h:183
HWY_INLINE Vec< D > Last(D, const Vec< D > a, const Vec< D > b) const
Definition: traits-inl.h:172
HWY_INLINE Vec< D > First(D, const Vec< D > a, const Vec< D > b) const
Definition: traits-inl.h:167
HWY_INLINE Vec< D > LastValue(D d) const
Definition: traits-inl.h:194
HWY_INLINE bool Compare1(const T *a, const T *b)
Definition: traits-inl.h:156
HWY_INLINE Vec< D > FirstValue(D d) const
Definition: traits-inl.h:189
HWY_INLINE Mask< D > Compare(D, Vec< D > a, Vec< D > b) const
Definition: traits-inl.h:161
HWY_INLINE Vec< D > FirstOfLanes(D d, Vec< D > v, TFromD< D > *HWY_RESTRICT) const
Definition: traits-inl.h:177
Definition: traits-inl.h:199
HWY_INLINE bool Compare1(const T *a, const T *b)
Definition: traits-inl.h:203
HWY_INLINE Mask< D > Compare(D, Vec< D > a, Vec< D > b) const
Definition: traits-inl.h:208
HWY_INLINE Vec< D > First(D, const Vec< D > a, const Vec< D > b) const
Definition: traits-inl.h:213
HWY_INLINE Vec< D > Last(D, const Vec< D > a, const Vec< D > b) const
Definition: traits-inl.h:218
HWY_INLINE Vec< D > FirstValue(D d) const
Definition: traits-inl.h:235
HWY_INLINE Vec< D > FirstOfLanes(D d, Vec< D > v, TFromD< D > *HWY_RESTRICT) const
Definition: traits-inl.h:223
HWY_INLINE Vec< D > LastOfLanes(D d, Vec< D > v, TFromD< D > *HWY_RESTRICT) const
Definition: traits-inl.h:229
HWY_INLINE Vec< D > LastValue(D d) const
Definition: traits-inl.h:240
Definition: traits-inl.h:247
HWY_INLINE Vec< D > SortPairsReverse4(D d, Vec< D > v) const
Definition: traits-inl.h:300
HWY_INLINE void Sort2(D d, Vec< D > &a, Vec< D > &b) const
Definition: traits-inl.h:255
constexpr bool Is128() const
Definition: traits-inl.h:248
HWY_INLINE Vec< D > SortPairsDistance1(D d, Vec< D > v) const
Definition: traits-inl.h:275
HWY_INLINE Vec< D > SortPairsDistance4(D d, Vec< D > v) const
Definition: traits-inl.h:309
static constexpr size_t kMaxCols
Definition: contrib/sort/shared-inl.h:34