Name Description Size
arm_neon-inl.h 393202
arm_sve-inl.h 263481
emu128-inl.h tag 90027
generic_ops-inl.h .h. #if HWY_IDE && !defined(HWY_HIGHWAY_INCLUDED) #include "hwy/detect_targets.h" #include "hwy/ops/emu128-inl.h" #endif // HWY_IDE // Relies on the external include guard in highway.h. HWY_BEFORE_NAMESPACE(); namespace hwy { namespace HWY_NAMESPACE { // The lane type of a vector type, e.g. float for Vec<ScalableTag<float>>. template <class V> using LaneType = decltype(GetLane(V())); // Vector type, e.g. Vec128<float> for CappedTag<float, 4>. Useful as the return // type of functions that do not take a vector argument, or as an argument type // if the function only has a template argument for D, or for explicit type // names instead of auto. This may be a built-in type. template <class D> using Vec = decltype(Zero(D())); // Mask type. Useful as the return type of functions that do not take a mask // argument, or as an argument type if the function only has a template argument // for D, or for explicit type names instead of auto. template <class D> using Mask = decltype(MaskFromVec(Zero(D()))); // Returns the closest value to v within [lo, hi]. template <class V> HWY_API V Clamp(const V v, const V lo, const V hi) { return Min(Max(lo, v), hi); } // CombineShiftRightBytes (and -Lanes) are not available for the scalar target, // and RVV has its own implementation of -Lanes. #if (HWY_TARGET != HWY_SCALAR && HWY_TARGET != HWY_RVV) || HWY_IDE template <size_t kLanes, class D> HWY_API VFromD<D> CombineShiftRightLanes(D d, VFromD<D> hi, VFromD<D> lo) { constexpr size_t kBytes = kLanes * sizeof(TFromD<D>); static_assert(kBytes < 16, "Shift count is per-block"); return CombineShiftRightBytes<kBytes>(d, hi, lo); } #endif // Returns lanes with the most significant bit set and all other bits zero. template <class D> HWY_API Vec<D> SignBit(D d) { const RebindToUnsigned<decltype(d)> du; return BitCast(d, Set(du, SignMask<TFromD<D>>())); } // Returns quiet NaN. template <class D> HWY_API Vec<D> NaN(D d) { const RebindToSigned<D> di; // LimitsMax sets all exponent and mantissa bits to 1. The exponent plus // mantissa MSB (to indicate quiet) would be sufficient. return BitCast(d, Set(di, LimitsMax<TFromD<decltype(di)>>())); } // Returns positive infinity. template <class D> HWY_API Vec<D> Inf(D d) { const RebindToUnsigned<D> du; using T = TFromD<D>; using TU = TFromD<decltype(du)>; const TU max_x2 = static_cast<TU>(MaxExponentTimes2<T>()); return BitCast(d, Set(du, max_x2 >> 1)); } // ------------------------------ MaskedSetOr/MaskedSet template <class V, typename T = TFromV<V>, typename D = DFromV<V>, typename M = MFromD<D>> HWY_API V MaskedSetOr(V no, M m, T a) { D d; return IfThenElse(m, Set(d, a), no); } template <class D, typename V = VFromD<D>, typename M = MFromD<D>, typename T = TFromD<D>> HWY_API V MaskedSet(D d, M m, T a) { return IfThenElseZero(m, Set(d, a)); } // ------------------------------ ZeroExtendResizeBitCast // The implementation of detail::ZeroExtendResizeBitCast for the HWY_EMU128 // target is in emu128-inl.h, and the implementation of // detail::ZeroExtendResizeBitCast for the HWY_SCALAR target is in scalar-inl.h #if HWY_TARGET != HWY_EMU128 && HWY_TARGET != HWY_SCALAR namespace detail { #if HWY_HAVE_SCALABLE template <size_t kFromVectSize, size_t kToVectSize, class DTo, class DFrom> HWY_INLINE VFromD<DTo> ZeroExtendResizeBitCast( hwy::SizeTag<kFromVectSize> /* from_size_tag 308379
inside-inl.h tag 23665
loongarch_lasx-inl.h tag 178821
loongarch_lsx-inl.h tag 219888
ppc_vsx-inl.h 276125
rvv-inl.h tag 281495
scalar-inl.h tag 69588
set_macros-inl.h 23755
shared-inl.h 29433
wasm_128-inl.h tag 233537
wasm_256-inl.h 80865
x86_128-inl.h 523671
x86_256-inl.h 345601
x86_512-inl.h 301904
x86_avx3-inl.h 19232