Grok  9.5.0
Classes | Namespaces | Macros | Typedefs | Functions
arm_sve-inl.h File Reference
#include <stddef.h>
#include <stdint.h>
#include <arm_sve.h>
#include "hwy/base.h"
#include "hwy/ops/shared-inl.h"

Go to the source code of this file.

Classes

struct  hwy::HWY_NAMESPACE::DFromV_t< V >
 

Namespaces

 hwy
 
 hwy::HWY_NAMESPACE
 
 hwy::HWY_NAMESPACE::detail
 

Macros

#define HWY_IF_UNSIGNED_V(V)   HWY_IF_UNSIGNED(TFromV<V>)
 
#define HWY_IF_SIGNED_V(V)   HWY_IF_SIGNED(TFromV<V>)
 
#define HWY_IF_FLOAT_V(V)   HWY_IF_FLOAT(TFromV<V>)
 
#define HWY_IF_LANE_SIZE_V(V, bytes)   HWY_IF_LANE_SIZE(TFromV<V>, bytes)
 
#define HWY_SVE_FOREACH_U08(X_MACRO, NAME, OP)   X_MACRO(uint, u, 8, NAME, OP)
 
#define HWY_SVE_FOREACH_U16(X_MACRO, NAME, OP)   X_MACRO(uint, u, 16, NAME, OP)
 
#define HWY_SVE_FOREACH_U32(X_MACRO, NAME, OP)   X_MACRO(uint, u, 32, NAME, OP)
 
#define HWY_SVE_FOREACH_U64(X_MACRO, NAME, OP)   X_MACRO(uint, u, 64, NAME, OP)
 
#define HWY_SVE_FOREACH_I08(X_MACRO, NAME, OP)   X_MACRO(int, s, 8, NAME, OP)
 
#define HWY_SVE_FOREACH_I16(X_MACRO, NAME, OP)   X_MACRO(int, s, 16, NAME, OP)
 
#define HWY_SVE_FOREACH_I32(X_MACRO, NAME, OP)   X_MACRO(int, s, 32, NAME, OP)
 
#define HWY_SVE_FOREACH_I64(X_MACRO, NAME, OP)   X_MACRO(int, s, 64, NAME, OP)
 
#define HWY_SVE_FOREACH_F16(X_MACRO, NAME, OP)   X_MACRO(float, f, 16, NAME, OP)
 
#define HWY_SVE_FOREACH_F32(X_MACRO, NAME, OP)   X_MACRO(float, f, 32, NAME, OP)
 
#define HWY_SVE_FOREACH_F64(X_MACRO, NAME, OP)   X_MACRO(float, f, 64, NAME, OP)
 
#define HWY_SVE_FOREACH_U(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_I(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_F(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_UI08(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_UI16(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_UI32(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_UI64(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_UIF3264(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_UI(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH_IF(X_MACRO, NAME, OP)
 
#define HWY_SVE_FOREACH(X_MACRO, NAME, OP)
 
#define HWY_SVE_T(BASE, BITS)   BASE##BITS##_t
 
#define HWY_SVE_D(BASE, BITS, N)   Simd<HWY_SVE_T(BASE, BITS), N>
 
#define HWY_SVE_V(BASE, BITS)   sv##BASE##BITS##_t
 
#define HWY_SPECIALIZE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGD(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGPV(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGV(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGPVN(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGVN(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGPVV(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGVV(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_FIRSTN(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_PTRUE(BITS)   svptrue_pat_b##BITS(SV_POW2)
 
#define HWY_SVE_WRAP_PTRUE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SET(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_CAST_NOP(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_CAST(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGPVN_SWAP(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGPVV_SWAP(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_NATIVE_POPCNT
 
#define HWY_SVE_POPCNT(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_RETV_ARGPVN_MASK(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SHIFT_N(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SHIFT(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_FMA(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_COUNT_TRUE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_COUNT_TRUE_FULL(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_IF_THEN_ELSE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_COMPARE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_COMPARE_N(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_LOAD(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_MASKED_LOAD(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_LOAD_DUP128(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_STORE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SCATTER_OFFSET(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SCATTER_INDEX(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_GATHER_OFFSET(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_GATHER_INDEX(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_STORE3(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_STORE4(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_PROMOTE_TO(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_CONCAT_EVERY_SECOND(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SPLICE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_CONVERT(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_IOTA(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_EXT(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_GET_LANE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_TABLE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_REVERSE(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_COMPRESS(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_SHUFFLE_2301(BASE, CHAR, BITS, NAME, OP)
 
#define HWY_SVE_REDUCE(BASE, CHAR, BITS, NAME, OP)
 

Typedefs

template<typename T , int kShift = 0>
using hwy::HWY_NAMESPACE::Full = Simd< T,(kShift<=0) ?(HWY_LANES(T) > >(-kShift)) :0 >
 

Functions

 HWY_BEFORE_NAMESPACE ()
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::AllHardwareLanes (hwy::SizeTag< 1 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::AllHardwareLanes (hwy::SizeTag< 2 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::AllHardwareLanes (hwy::SizeTag< 4 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::AllHardwareLanes (hwy::SizeTag< 8 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::HardwareLanes (hwy::SizeTag< 1 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::HardwareLanes (hwy::SizeTag< 2 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::HardwareLanes (hwy::SizeTag< 4 >)
 
HWY_INLINE size_t hwy::HWY_NAMESPACE::detail::HardwareLanes (hwy::SizeTag< 8 >)
 
template<typename T , size_t N, HWY_IF_LE128(T, N) >
constexpr HWY_API size_t hwy::HWY_NAMESPACE::Lanes (Simd< T, N >)
 
template<typename T , size_t N, HWY_IF_GT128(T, N) >
HWY_API size_t hwy::HWY_NAMESPACE::Lanes (Simd< T, N >)
 
 hwy::HWY_NAMESPACE::detail::HWY_SVE_FOREACH (HWY_SVE_WRAP_PTRUE, PTrue, ptrue) HWY_API svbool_t PFalse()
 
template<typename T , size_t N>
svbool_t hwy::HWY_NAMESPACE::detail::Mask (Simd< T, N > d)
 
template<size_t N>
svuint16_t hwy::HWY_NAMESPACE::Set (Simd< bfloat16_t, N > d, bfloat16_t arg)
 
template<class D >
VFromD< D > hwy::HWY_NAMESPACE::Zero (D d)
 
template<size_t N>
HWY_INLINE svuint16_t hwy::HWY_NAMESPACE::detail::BitCastFromByte (Simd< bfloat16_t, N >, svuint8_t v)
 
template<class D , class FromV >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::BitCast (D d, FromV v)
 
template<class V , HWY_IF_FLOAT_V(V) >
HWY_APIhwy::HWY_NAMESPACE::And (const V a, const V b)
 
template<class V , HWY_IF_FLOAT_V(V) >
HWY_APIhwy::HWY_NAMESPACE::Or (const V a, const V b)
 
template<class V , HWY_IF_FLOAT_V(V) >
HWY_APIhwy::HWY_NAMESPACE::Xor (const V a, const V b)
 
template<class V , HWY_IF_FLOAT_V(V) >
HWY_APIhwy::HWY_NAMESPACE::AndNot (const V a, const V b)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::CopySign (const V magn, const V sign)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::CopySignToAbs (const V abs, const V sign)
 
template<class D , typename MFrom >
HWY_API svbool_t hwy::HWY_NAMESPACE::RebindMask (const D, const MFrom mask)
 
HWY_API svbool_t hwy::HWY_NAMESPACE::Not (svbool_t m)
 
HWY_API svbool_t hwy::HWY_NAMESPACE::And (svbool_t a, svbool_t b)
 
HWY_API svbool_t hwy::HWY_NAMESPACE::AndNot (svbool_t a, svbool_t b)
 
HWY_API svbool_t hwy::HWY_NAMESPACE::Or (svbool_t a, svbool_t b)
 
HWY_API svbool_t hwy::HWY_NAMESPACE::Xor (svbool_t a, svbool_t b)
 
template<typename T , size_t N>
HWY_API bool hwy::HWY_NAMESPACE::AllFalse (Simd< T, N > d, svbool_t m)
 
template<typename T , size_t N>
HWY_API bool hwy::HWY_NAMESPACE::AllTrue (Simd< T, N > d, svbool_t m)
 
template<typename T , size_t N>
HWY_API intptr_t hwy::HWY_NAMESPACE::FindFirstTrue (Simd< T, N > d, svbool_t m)
 
template<class M , class V >
HWY_APIhwy::HWY_NAMESPACE::IfThenElseZero (const M mask, const V yes)
 
template<class M , class V >
HWY_APIhwy::HWY_NAMESPACE::IfThenZeroElse (const M mask, const V no)
 
template<class V >
HWY_API svbool_t hwy::HWY_NAMESPACE::Gt (const V a, const V b)
 
template<class V >
HWY_API svbool_t hwy::HWY_NAMESPACE::Ge (const V a, const V b)
 
template<class V >
HWY_API svbool_t hwy::HWY_NAMESPACE::TestBit (const V a, const V bit)
 
template<class V >
HWY_API svbool_t hwy::HWY_NAMESPACE::MaskFromVec (const V v)
 
template<class D , HWY_IF_NOT_FLOAT_D(D) >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::VecFromMask (const D d, svbool_t mask)
 
template<size_t N>
HWY_API svuint16_t hwy::HWY_NAMESPACE::Load (Simd< bfloat16_t, N > d, const bfloat16_t *HWY_RESTRICT p)
 
template<size_t N>
HWY_API void hwy::HWY_NAMESPACE::Store (svuint16_t v, Simd< bfloat16_t, N > d, bfloat16_t *HWY_RESTRICT p)
 
template<class D >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::LoadU (D d, const TFromD< D > *HWY_RESTRICT p)
 
template<class V , class D >
HWY_API void hwy::HWY_NAMESPACE::StoreU (const V v, D d, TFromD< D > *HWY_RESTRICT p)
 
template<size_t N>
HWY_API svuint32_t hwy::HWY_NAMESPACE::PromoteTo (Simd< uint32_t, N > dto, svuint8_t vfrom)
 
template<size_t N>
HWY_API svint32_t hwy::HWY_NAMESPACE::PromoteTo (Simd< int32_t, N > dto, svint8_t vfrom)
 
template<size_t N>
HWY_API svuint32_t hwy::HWY_NAMESPACE::U32FromU8 (svuint8_t v)
 
template<size_t N>
HWY_API svint16_t hwy::HWY_NAMESPACE::PromoteTo (Simd< int16_t, N > dto, svuint8_t vfrom)
 
template<size_t N>
HWY_API svint32_t hwy::HWY_NAMESPACE::PromoteTo (Simd< int32_t, N > dto, svuint16_t vfrom)
 
template<size_t N>
HWY_API svint32_t hwy::HWY_NAMESPACE::PromoteTo (Simd< int32_t, N > dto, svuint8_t vfrom)
 
template<size_t N>
HWY_API svfloat32_t hwy::HWY_NAMESPACE::PromoteTo (Simd< float32_t, N >, const svfloat16_t v)
 
template<size_t N>
HWY_API svfloat64_t hwy::HWY_NAMESPACE::PromoteTo (Simd< float64_t, N >, const svfloat32_t v)
 
template<size_t N>
HWY_API svfloat64_t hwy::HWY_NAMESPACE::PromoteTo (Simd< float64_t, N >, const svint32_t v)
 
template<size_t N>
HWY_API svfloat32_t hwy::HWY_NAMESPACE::detail::PromoteUpperTo (Simd< float, N > df, const svfloat16_t v)
 
template<typename TN , class VU >
VU hwy::HWY_NAMESPACE::detail::SaturateU (VU v)
 
template<typename TN , class VI >
VI hwy::HWY_NAMESPACE::detail::SaturateI (VI v)
 
template<size_t N>
HWY_API svuint8_t hwy::HWY_NAMESPACE::DemoteTo (Simd< uint8_t, N > dn, const svint16_t v)
 
template<size_t N>
HWY_API svuint16_t hwy::HWY_NAMESPACE::DemoteTo (Simd< uint16_t, N > dn, const svint32_t v)
 
template<size_t N>
HWY_API svuint8_t hwy::HWY_NAMESPACE::DemoteTo (Simd< uint8_t, N > dn, const svint32_t v)
 
HWY_API svuint8_t hwy::HWY_NAMESPACE::U8FromU32 (const svuint32_t v)
 
template<size_t N>
HWY_API svint8_t hwy::HWY_NAMESPACE::DemoteTo (Simd< int8_t, N > dn, const svint16_t v)
 
template<size_t N>
HWY_API svint16_t hwy::HWY_NAMESPACE::DemoteTo (Simd< int16_t, N > dn, const svint32_t v)
 
template<size_t N>
HWY_API svint8_t hwy::HWY_NAMESPACE::DemoteTo (Simd< int8_t, N > dn, const svint32_t v)
 
template<class D >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::ConcatOdd (D d, VFromD< D > hi, VFromD< D > lo)
 
template<class D >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::ConcatEven (D d, VFromD< D > hi, VFromD< D > lo)
 
template<size_t N>
HWY_API svfloat16_t hwy::HWY_NAMESPACE::DemoteTo (Simd< float16_t, N > d, const svfloat32_t v)
 
template<size_t N>
HWY_API svuint16_t hwy::HWY_NAMESPACE::DemoteTo (Simd< bfloat16_t, N > d, const svfloat32_t v)
 
template<size_t N>
HWY_API svfloat32_t hwy::HWY_NAMESPACE::DemoteTo (Simd< float32_t, N > d, const svfloat64_t v)
 
template<size_t N>
HWY_API svint32_t hwy::HWY_NAMESPACE::DemoteTo (Simd< int32_t, N > d, const svfloat64_t v)
 
template<class VF , class DI = RebindToSigned<DFromV<VF>>>
HWY_API VFromD< DI > hwy::HWY_NAMESPACE::NearestInt (VF v)
 
template<class D , HWY_IF_FLOAT_D(D) >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::Iota (const D d, TFromD< D > first)
 
template<typename T , size_t N>
svbool_t hwy::HWY_NAMESPACE::detail::MaskLowerHalf (Simd< T, N > d)
 
template<typename T , size_t N>
svbool_t hwy::HWY_NAMESPACE::detail::MaskUpperHalf (Simd< T, N > d)
 
template<class D , class V >
HWY_APIhwy::HWY_NAMESPACE::ConcatUpperLower (const D d, const V hi, const V lo)
 
template<class D , class V >
HWY_APIhwy::HWY_NAMESPACE::ConcatLowerLower (const D d, const V hi, const V lo)
 
template<class D , class V >
HWY_APIhwy::HWY_NAMESPACE::ConcatLowerUpper (const D d, const V hi, const V lo)
 
template<class D , class V >
HWY_APIhwy::HWY_NAMESPACE::ConcatUpperUpper (const D d, const V hi, const V lo)
 
template<class D , class V2 >
HWY_API VFromD< D > hwy::HWY_NAMESPACE::Combine (const D d, const V2 hi, const V2 lo)
 
template<class D , class V >
HWY_APIhwy::HWY_NAMESPACE::ZeroExtendVector (const D d, const V lo)
 
template<class D2 , class V >
HWY_APIhwy::HWY_NAMESPACE::LowerHalf (D2, const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::LowerHalf (const V v)
 
template<class D2 , class V >
HWY_APIhwy::HWY_NAMESPACE::UpperHalf (const D2 d2, const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::OddEven (const V odd, const V even)
 
template<class D , class DI = RebindToSigned<D>>
HWY_API VFromD< DI > hwy::HWY_NAMESPACE::SetTableIndices (D d, const TFromD< DI > *idx)
 
template<class V , HWY_IF_LANE_SIZE_V(V, 2) >
HWY_APIhwy::HWY_NAMESPACE::Compress (V v, svbool_t mask16)
 
HWY_API svfloat16_t hwy::HWY_NAMESPACE::Compress (svfloat16_t v, svbool_t mask16)
 
template<class V , class M , class D >
HWY_API size_t hwy::HWY_NAMESPACE::CompressStore (const V v, const M mask, const D d, TFromD< D > *HWY_RESTRICT unaligned)
 
template<typename T , size_t N>
constexpr size_t hwy::HWY_NAMESPACE::detail::LanesPerBlock (Simd< T, N >)
 
template<class D , class V >
HWY_INLINEhwy::HWY_NAMESPACE::detail::OffsetsOf128BitBlocks (const D d, const V iota0)
 
template<size_t kLanes, class D >
svbool_t hwy::HWY_NAMESPACE::detail::FirstNPerBlock (D d)
 
template<size_t kBytes, class D , class V = VFromD<D>>
HWY_APIhwy::HWY_NAMESPACE::CombineShiftRightBytes (const D d, const V hi, const V lo)
 
template<class V , HWY_IF_FLOAT_V(V) >
HWY_APIhwy::HWY_NAMESPACE::Shuffle2301 (const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::Shuffle2103 (const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::Shuffle0321 (const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::Shuffle1032 (const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::Shuffle01 (const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::Shuffle0123 (const V v)
 
template<class V , class VI >
HWY_API VI hwy::HWY_NAMESPACE::TableLookupBytes (const V v, const VI idx)
 
template<class V , class VI >
HWY_API VI hwy::HWY_NAMESPACE::TableLookupBytesOr0 (const V bytes, const VI from)
 
template<int kLane, class V >
HWY_APIhwy::HWY_NAMESPACE::Broadcast (const V v)
 
template<size_t kLanes, class D , class V = VFromD<D>>
HWY_APIhwy::HWY_NAMESPACE::ShiftLeftLanes (D d, const V v)
 
template<size_t kLanes, class V >
HWY_APIhwy::HWY_NAMESPACE::ShiftLeftLanes (const V v)
 
template<size_t kLanes, typename T , size_t N, class V = VFromD<Simd<T, N>>>
HWY_APIhwy::HWY_NAMESPACE::ShiftRightLanes (Simd< T, N > d, V v)
 
template<int kBytes, class D , class V = VFromD<D>>
HWY_APIhwy::HWY_NAMESPACE::ShiftLeftBytes (const D d, const V v)
 
template<int kBytes, class V >
HWY_APIhwy::HWY_NAMESPACE::ShiftLeftBytes (const V v)
 
template<int kBytes, class D , class V = VFromD<D>>
HWY_APIhwy::HWY_NAMESPACE::ShiftRightBytes (const D d, const V v)
 
template<class D , class V >
HWY_APIhwy::HWY_NAMESPACE::InterleaveLower (D d, const V a, const V b)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::InterleaveLower (const V a, const V b)
 
template<typename T , class V = VFromD<Full<T>>>
HWY_APIhwy::HWY_NAMESPACE::InterleaveUpper (Simd< T, HWY_LANES(T)> d, const V a, const V b)
 
template<typename T , size_t N, HWY_IF_GE64(T, N) , class V = Vec128<T, N>>
HWY_APIhwy::HWY_NAMESPACE::InterleaveUpper (Simd< T, N >, V a, V b)
 
template<class V , class DW = RepartitionToWide<DFromV<V>>>
HWY_API VFromD< DW > hwy::HWY_NAMESPACE::ZipLower (DW dw, V a, V b)
 
template<class V , class D = DFromV<V>, class DW = RepartitionToWide<D>>
HWY_API VFromD< DW > hwy::HWY_NAMESPACE::ZipLower (const V a, const V b)
 
template<class V , class DW = RepartitionToWide<DFromV<V>>>
HWY_API VFromD< DW > hwy::HWY_NAMESPACE::ZipUpper (DW dw, V a, V b)
 
template<size_t N>
HWY_API svfloat32_t hwy::HWY_NAMESPACE::PromoteTo (Simd< float32_t, N > df32, const svuint16_t v)
 
template<size_t N>
HWY_API svuint16_t hwy::HWY_NAMESPACE::ReorderDemote2To (Simd< bfloat16_t, N > dbf16, svfloat32_t a, svfloat32_t b)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::ZeroIfNegative (const V v)
 
template<class V >
HWY_APIhwy::HWY_NAMESPACE::BroadcastSignBit (const V v)
 
template<class D , HWY_IF_LANE_SIZE_D(D, 1) >
HWY_INLINE svbool_t hwy::HWY_NAMESPACE::LoadMaskBits (D d, const uint8_t *HWY_RESTRICT bits)
 
template<typename T , size_t N, HWY_IF_LANE_SIZE(T, 1) >
HWY_API svuint8_t hwy::HWY_NAMESPACE::detail::BoolFromMask (Simd< T, N > d, svbool_t m)
 
template<typename T , size_t N>
HWY_API size_t hwy::HWY_NAMESPACE::StoreMaskBits (Simd< T, N > d, svbool_t m, uint8_t *bits)
 
template<class V >
HWY_INLINEhwy::HWY_NAMESPACE::CompressBits (V v, const uint8_t *HWY_RESTRICT bits)
 
template<class D >
HWY_API size_t hwy::HWY_NAMESPACE::CompressBitsStore (VFromD< D > v, const uint8_t *HWY_RESTRICT bits, D d, TFromD< D > *HWY_RESTRICT unaligned)
 
template<class V , class DW = RepartitionToWide<DFromV<V>>>
HWY_API VFromD< DW > hwy::HWY_NAMESPACE::MulEven (const V a, const V b)
 
HWY_API svuint64_t hwy::HWY_NAMESPACE::MulEven (const svuint64_t a, const svuint64_t b)
 
HWY_API svuint64_t hwy::HWY_NAMESPACE::MulOdd (const svuint64_t a, const svuint64_t b)
 
template<size_t N>
HWY_API svfloat32_t hwy::HWY_NAMESPACE::ReorderWidenMulAccumulate (Simd< float, N > df32, svuint16_t a, svuint16_t b, const svfloat32_t sum0, svfloat32_t &sum1)
 
 HWY_AFTER_NAMESPACE ()
 

Macro Definition Documentation

◆ HWY_IF_FLOAT_V

#define HWY_IF_FLOAT_V (   V)    HWY_IF_FLOAT(TFromV<V>)

◆ HWY_IF_LANE_SIZE_V

#define HWY_IF_LANE_SIZE_V (   V,
  bytes 
)    HWY_IF_LANE_SIZE(TFromV<V>, bytes)

◆ HWY_IF_SIGNED_V

#define HWY_IF_SIGNED_V (   V)    HWY_IF_SIGNED(TFromV<V>)

◆ HWY_IF_UNSIGNED_V

#define HWY_IF_UNSIGNED_V (   V)    HWY_IF_UNSIGNED(TFromV<V>)

◆ HWY_NATIVE_POPCNT

#define HWY_NATIVE_POPCNT

◆ HWY_SPECIALIZE

#define HWY_SPECIALIZE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <> \
struct DFromV_t<HWY_SVE_V(BASE, BITS)> { \
using type = HWY_SVE_D(BASE, BITS, HWY_LANES(HWY_SVE_T(BASE, BITS))); \
};
#define HWY_SVE_V(BASE, BITS)
Definition: arm_sve-inl.h:133
#define HWY_SVE_T(BASE, BITS)
Definition: arm_sve-inl.h:131
#define HWY_SVE_D(BASE, BITS, N)
Definition: arm_sve-inl.h:132
#define HWY_LANES(T)
Definition: set_macros-inl.h:80

◆ HWY_SVE_CAST

#define HWY_SVE_CAST (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_INLINE svuint8_t BitCastToByte(HWY_SVE_V(BASE, BITS) v) { \
return sv##OP##_u8_##CHAR##BITS(v); \
} \
template <size_t N> \
HWY_INLINE HWY_SVE_V(BASE, BITS) \
BitCastFromByte(HWY_SVE_D(BASE, BITS, N) /* d */, svuint8_t v) { \
return sv##OP##_##CHAR##BITS##_u8(v); \
}
#define HWY_INLINE
Definition: base.h:59
HWY_INLINE Vec128< uint8_t, N > BitCastToByte(Vec128< uint8_t, N > v)
Definition: arm_neon-inl.h:551

◆ HWY_SVE_CAST_NOP

#define HWY_SVE_CAST_NOP (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) BitCastToByte(HWY_SVE_V(BASE, BITS) v) { \
return v; \
} \
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) BitCastFromByte( \
HWY_SVE_D(BASE, BITS, N) /* d */, HWY_SVE_V(BASE, BITS) v) { \
return v; \
}
#define HWY_API
Definition: base.h:117
HWY_INLINE svuint16_t BitCastFromByte(Simd< bfloat16_t, N >, svuint8_t v)
Definition: arm_sve-inl.h:361

◆ HWY_SVE_COMPARE

#define HWY_SVE_COMPARE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API svbool_t NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_V(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS(HWY_SVE_PTRUE(BITS), a, b); \
}
#define HWY_SVE_PTRUE(BITS)
Definition: arm_sve-inl.h:259

◆ HWY_SVE_COMPARE_N

#define HWY_SVE_COMPARE_N (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API svbool_t NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_T(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS(HWY_SVE_PTRUE(BITS), a, b); \
}

◆ HWY_SVE_COMPRESS

#define HWY_SVE_COMPRESS (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v, svbool_t mask) { \
return sv##OP##_##CHAR##BITS(mask, v); \
}

◆ HWY_SVE_CONCAT_EVERY_SECOND

#define HWY_SVE_CONCAT_EVERY_SECOND (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_INLINE HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) hi, HWY_SVE_V(BASE, BITS) lo) { \
return sv##OP##_##CHAR##BITS(lo, hi); \
}

◆ HWY_SVE_CONVERT

#define HWY_SVE_CONVERT (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) /* d */, HWY_SVE_V(int, BITS) v) { \
return sv##OP##_##CHAR##BITS##_s##BITS##_x(HWY_SVE_PTRUE(BITS), v); \
} \
/* Truncates (rounds toward zero). */ \
template <size_t N> \
HWY_API HWY_SVE_V(int, BITS) \
NAME(HWY_SVE_D(int, BITS, N) /* d */, HWY_SVE_V(BASE, BITS) v) { \
return sv##OP##_s##BITS##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), v); \
}

◆ HWY_SVE_COUNT_TRUE

#define HWY_SVE_COUNT_TRUE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API size_t NAME(HWY_SVE_D(BASE, BITS, N) d, svbool_t m) { \
return sv##OP##_b##BITS(detail::Mask(d), m); \
}
svbool_t Mask(Simd< T, N > d)
Definition: arm_sve-inl.h:277

◆ HWY_SVE_COUNT_TRUE_FULL

#define HWY_SVE_COUNT_TRUE_FULL (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API size_t NAME(HWY_SVE_D(BASE, BITS, N) d, svbool_t m) { \
return sv##OP##_b##BITS(svptrue_b##BITS(), m); \
}

◆ HWY_SVE_D

#define HWY_SVE_D (   BASE,
  BITS,
 
)    Simd<HWY_SVE_T(BASE, BITS), N>

◆ HWY_SVE_EXT

#define HWY_SVE_EXT (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t kIndex> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) hi, HWY_SVE_V(BASE, BITS) lo) { \
return sv##OP##_##CHAR##BITS(lo, hi, kIndex); \
}

◆ HWY_SVE_FIRSTN

#define HWY_SVE_FIRSTN (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t KN> \
HWY_API svbool_t NAME(HWY_SVE_D(BASE, BITS, KN) /* d */, uint32_t N) { \
return sv##OP##_b##BITS##_u32(uint32_t(0), N); \
}

◆ HWY_SVE_FMA

#define HWY_SVE_FMA (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) mul, HWY_SVE_V(BASE, BITS) x, \
HWY_SVE_V(BASE, BITS) add) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), x, mul, add); \
}

◆ HWY_SVE_FOREACH

#define HWY_SVE_FOREACH (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_F(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_U(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:76

◆ HWY_SVE_FOREACH_F

#define HWY_SVE_FOREACH_F (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_F16(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_F32(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_F64(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_F16(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:71

◆ HWY_SVE_FOREACH_F16

#define HWY_SVE_FOREACH_F16 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(float, f, 16, NAME, OP)

◆ HWY_SVE_FOREACH_F32

#define HWY_SVE_FOREACH_F32 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(float, f, 32, NAME, OP)

◆ HWY_SVE_FOREACH_F64

#define HWY_SVE_FOREACH_F64 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(float, f, 64, NAME, OP)

◆ HWY_SVE_FOREACH_I

#define HWY_SVE_FOREACH_I (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_I08(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I16(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I32(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I64(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_I08(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:65

◆ HWY_SVE_FOREACH_I08

#define HWY_SVE_FOREACH_I08 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(int, s, 8, NAME, OP)

◆ HWY_SVE_FOREACH_I16

#define HWY_SVE_FOREACH_I16 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(int, s, 16, NAME, OP)

◆ HWY_SVE_FOREACH_I32

#define HWY_SVE_FOREACH_I32 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(int, s, 32, NAME, OP)

◆ HWY_SVE_FOREACH_I64

#define HWY_SVE_FOREACH_I64 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(int, s, 64, NAME, OP)

◆ HWY_SVE_FOREACH_IF

#define HWY_SVE_FOREACH_IF (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_I(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_F(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_I(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:82

◆ HWY_SVE_FOREACH_U

#define HWY_SVE_FOREACH_U (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U08(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_U16(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_U32(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_U64(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_U08(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:59

◆ HWY_SVE_FOREACH_U08

#define HWY_SVE_FOREACH_U08 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(uint, u, 8, NAME, OP)

◆ HWY_SVE_FOREACH_U16

#define HWY_SVE_FOREACH_U16 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(uint, u, 16, NAME, OP)

◆ HWY_SVE_FOREACH_U32

#define HWY_SVE_FOREACH_U32 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(uint, u, 32, NAME, OP)

◆ HWY_SVE_FOREACH_U64

#define HWY_SVE_FOREACH_U64 (   X_MACRO,
  NAME,
  OP 
)    X_MACRO(uint, u, 64, NAME, OP)

◆ HWY_SVE_FOREACH_UI

#define HWY_SVE_FOREACH_UI (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I(X_MACRO, NAME, OP)

◆ HWY_SVE_FOREACH_UI08

#define HWY_SVE_FOREACH_UI08 (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U08(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I08(X_MACRO, NAME, OP)

◆ HWY_SVE_FOREACH_UI16

#define HWY_SVE_FOREACH_UI16 (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U16(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I16(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_U16(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:60

◆ HWY_SVE_FOREACH_UI32

#define HWY_SVE_FOREACH_UI32 (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U32(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I32(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_U32(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:61

◆ HWY_SVE_FOREACH_UI64

#define HWY_SVE_FOREACH_UI64 (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_U64(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_I64(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_U64(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:62

◆ HWY_SVE_FOREACH_UIF3264

#define HWY_SVE_FOREACH_UIF3264 (   X_MACRO,
  NAME,
  OP 
)
Value:
HWY_SVE_FOREACH_UI32(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_UI64(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_F32(X_MACRO, NAME, OP) \
HWY_SVE_FOREACH_F64(X_MACRO, NAME, OP)
#define HWY_SVE_FOREACH_UI32(X_MACRO, NAME, OP)
Definition: arm_sve-inl.h:102

◆ HWY_SVE_GATHER_INDEX

#define HWY_SVE_GATHER_INDEX (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, \
const HWY_SVE_T(BASE, BITS) * HWY_RESTRICT base, \
HWY_SVE_V(int, BITS) index) { \
return sv##OP##_s##BITS##index_##CHAR##BITS(detail::Mask(d), base, index); \
}
#define HWY_RESTRICT
Definition: base.h:58

◆ HWY_SVE_GATHER_OFFSET

#define HWY_SVE_GATHER_OFFSET (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, \
const HWY_SVE_T(BASE, BITS) * HWY_RESTRICT base, \
HWY_SVE_V(int, BITS) offset) { \
return sv##OP##_s##BITS##offset_##CHAR##BITS(detail::Mask(d), base, \
offset); \
}

◆ HWY_SVE_GET_LANE

#define HWY_SVE_GET_LANE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_T(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v) { \
return sv##OP##_##CHAR##BITS(detail::PFalse(), v); \
}

◆ HWY_SVE_IF_THEN_ELSE

#define HWY_SVE_IF_THEN_ELSE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(svbool_t m, HWY_SVE_V(BASE, BITS) yes, HWY_SVE_V(BASE, BITS) no) { \
return sv##OP##_##CHAR##BITS(m, yes, no); \
}

◆ HWY_SVE_IOTA

#define HWY_SVE_IOTA (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, HWY_SVE_T(BASE, BITS) first) { \
return sv##OP##_##CHAR##BITS(first, 1); \
}

◆ HWY_SVE_LOAD

#define HWY_SVE_LOAD (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, \
const HWY_SVE_T(BASE, BITS) * HWY_RESTRICT p) { \
return sv##OP##_##CHAR##BITS(detail::Mask(d), p); \
}

◆ HWY_SVE_LOAD_DUP128

#define HWY_SVE_LOAD_DUP128 (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, \
const HWY_SVE_T(BASE, BITS) * HWY_RESTRICT p) { \
/* All-true predicate to load all 128 bits. */ \
return sv##OP##_##CHAR##BITS(HWY_SVE_PTRUE(8), p); \
}

◆ HWY_SVE_MASKED_LOAD

#define HWY_SVE_MASKED_LOAD (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(svbool_t m, HWY_SVE_D(BASE, BITS, N) d, \
const HWY_SVE_T(BASE, BITS) * HWY_RESTRICT p) { \
return sv##OP##_##CHAR##BITS(m, p); \
}

◆ HWY_SVE_POPCNT

#define HWY_SVE_POPCNT (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v) { \
return BitCast(DFromV<decltype(v)>(), \
sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), v)); \
}
HWY_API VFromD< D > BitCast(D d, FromV v)
Definition: arm_sve-inl.h:369
decltype(detail::DeduceD()(V())) DFromV
Definition: arm_neon-inl.h:532

◆ HWY_SVE_PROMOTE_TO

#define HWY_SVE_PROMOTE_TO (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) /* tag */, \
VFromD<Simd<MakeNarrow<HWY_SVE_T(BASE, BITS)>, \
HWY_LANES(HWY_SVE_T(BASE, BITS)) * 2>> \
v) { \
return sv##OP##_##CHAR##BITS(v); \
}
decltype(Zero(D())) VFromD
Definition: arm_neon-inl.h:720
typename detail::Relations< T >::Narrow MakeNarrow
Definition: base.h:531

◆ HWY_SVE_PTRUE

#define HWY_SVE_PTRUE (   BITS)    svptrue_pat_b##BITS(SV_POW2)

◆ HWY_SVE_REDUCE

#define HWY_SVE_REDUCE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, HWY_SVE_V(BASE, BITS) v) { \
return Set(d, sv##OP##_##CHAR##BITS(detail::Mask(d), v)); \
}
svuint16_t Set(Simd< bfloat16_t, N > d, bfloat16_t arg)
Definition: arm_sve-inl.h:299

◆ HWY_SVE_RETV_ARGD

#define HWY_SVE_RETV_ARGD (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_D(BASE, BITS, N) d) { \
return sv##OP##_##CHAR##BITS(); \
}

◆ HWY_SVE_RETV_ARGPV

#define HWY_SVE_RETV_ARGPV (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), v); \
}

◆ HWY_SVE_RETV_ARGPVN

#define HWY_SVE_RETV_ARGPVN (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_T(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), a, b); \
}

◆ HWY_SVE_RETV_ARGPVN_MASK

#define HWY_SVE_RETV_ARGPVN_MASK (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(svbool_t pg, HWY_SVE_V(BASE, BITS) a, HWY_SVE_T(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS##_z(pg, a, b); \
}

◆ HWY_SVE_RETV_ARGPVN_SWAP

#define HWY_SVE_RETV_ARGPVN_SWAP (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_T(BASE, BITS) a, HWY_SVE_V(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), b, a); \
}

◆ HWY_SVE_RETV_ARGPVV

#define HWY_SVE_RETV_ARGPVV (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_V(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), a, b); \
}

◆ HWY_SVE_RETV_ARGPVV_SWAP

#define HWY_SVE_RETV_ARGPVV_SWAP (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_V(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), b, a); \
}

◆ HWY_SVE_RETV_ARGV

#define HWY_SVE_RETV_ARGV (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v) { \
return sv##OP##_##CHAR##BITS(v); \
}

◆ HWY_SVE_RETV_ARGVN

#define HWY_SVE_RETV_ARGVN (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_T(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS(a, b); \
}

◆ HWY_SVE_RETV_ARGVV

#define HWY_SVE_RETV_ARGVV (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) a, HWY_SVE_V(BASE, BITS) b) { \
return sv##OP##_##CHAR##BITS(a, b); \
}

◆ HWY_SVE_REVERSE

#define HWY_SVE_REVERSE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(Simd<HWY_SVE_T(BASE, BITS), N> d, HWY_SVE_V(BASE, BITS) v) { \
const auto reversed = sv##OP##_##CHAR##BITS(v); \
/* Shift right to remove extra (non-pow2 and remainder) lanes. */ \
const size_t all_lanes = \
/* TODO(janwas): on SVE2, use whilege. */ \
const svbool_t mask = Not(FirstN(d, all_lanes - Lanes(d))); \
return detail::Splice(reversed, reversed, mask); \
}
HWY_INLINE size_t AllHardwareLanes(hwy::SizeTag< 8 >)
Definition: arm_sve-inl.h:204
HWY_API Mask128< T, N > FirstN(const Simd< T, N > d, size_t num)
Definition: arm_neon-inl.h:1806
HWY_API size_t Lanes(Simd< T, N >)
Definition: arm_sve-inl.h:234
HWY_API svbool_t Not(svbool_t m)
Definition: arm_sve-inl.h:639
Definition: base.h:290

◆ HWY_SVE_SCATTER_INDEX

#define HWY_SVE_SCATTER_INDEX (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API void NAME(HWY_SVE_V(BASE, BITS) v, HWY_SVE_D(BASE, BITS, N) d, \
HWY_SVE_T(BASE, BITS) * HWY_RESTRICT base, \
HWY_SVE_V(int, BITS) index) { \
sv##OP##_s##BITS##index_##CHAR##BITS(detail::Mask(d), base, index, v); \
}

◆ HWY_SVE_SCATTER_OFFSET

#define HWY_SVE_SCATTER_OFFSET (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API void NAME(HWY_SVE_V(BASE, BITS) v, HWY_SVE_D(BASE, BITS, N) d, \
HWY_SVE_T(BASE, BITS) * HWY_RESTRICT base, \
HWY_SVE_V(int, BITS) offset) { \
sv##OP##_s##BITS##offset_##CHAR##BITS(detail::Mask(d), base, offset, v); \
}

◆ HWY_SVE_SET

#define HWY_SVE_SET (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_D(BASE, BITS, N) d, HWY_SVE_T(BASE, BITS) arg) { \
return sv##OP##_##CHAR##BITS(arg); \
}

◆ HWY_SVE_SHIFT

#define HWY_SVE_SHIFT (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) v, HWY_SVE_V(BASE, BITS) bits) { \
using TU = HWY_SVE_T(uint, BITS); \
return sv##OP##_##CHAR##BITS##_x( \
HWY_SVE_PTRUE(BITS), v, BitCast(Simd<TU, HWY_LANES(TU)>(), bits)); \
}

◆ HWY_SVE_SHIFT_N

#define HWY_SVE_SHIFT_N (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <int kBits> \
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), v, kBits); \
} \
HWY_API HWY_SVE_V(BASE, BITS) \
NAME##Same(HWY_SVE_V(BASE, BITS) v, HWY_SVE_T(uint, BITS) bits) { \
return sv##OP##_##CHAR##BITS##_x(HWY_SVE_PTRUE(BITS), v, bits); \
}

◆ HWY_SVE_SHUFFLE_2301

#define HWY_SVE_SHUFFLE_2301 (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) NAME(HWY_SVE_V(BASE, BITS) v) { \
const DFromV<decltype(v)> d; \
const svuint64_t vu64 = BitCast(Repartition<uint64_t, decltype(d)>(), v); \
return BitCast(d, sv##OP##_u64_x(HWY_SVE_PTRUE(64), vu64)); \
}
typename D::template Repartition< T > Repartition
Definition: shared-inl.h:155

◆ HWY_SVE_SPLICE

#define HWY_SVE_SPLICE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) NAME( \
HWY_SVE_V(BASE, BITS) hi, HWY_SVE_V(BASE, BITS) lo, svbool_t mask) { \
return sv##OP##_##CHAR##BITS(mask, lo, hi); \
}

◆ HWY_SVE_STORE

#define HWY_SVE_STORE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API void NAME(HWY_SVE_V(BASE, BITS) v, HWY_SVE_D(BASE, BITS, N) d, \
HWY_SVE_T(BASE, BITS) * HWY_RESTRICT p) { \
sv##OP##_##CHAR##BITS(detail::Mask(d), p, v); \
}

◆ HWY_SVE_STORE3

#define HWY_SVE_STORE3 (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API void NAME(HWY_SVE_V(BASE, BITS) v0, HWY_SVE_V(BASE, BITS) v1, \
HWY_SVE_V(BASE, BITS) v2, HWY_SVE_D(BASE, BITS, N) d, \
HWY_SVE_T(BASE, BITS) * HWY_RESTRICT unaligned) { \
const sv##BASE##BITS##x3_t triple = svcreate3##_##CHAR##BITS(v0, v1, v2); \
sv##OP##_##CHAR##BITS(detail::Mask(d), unaligned, triple); \
}

◆ HWY_SVE_STORE4

#define HWY_SVE_STORE4 (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API void NAME(HWY_SVE_V(BASE, BITS) v0, HWY_SVE_V(BASE, BITS) v1, \
HWY_SVE_V(BASE, BITS) v2, HWY_SVE_V(BASE, BITS) v3, \
HWY_SVE_D(BASE, BITS, N) d, \
HWY_SVE_T(BASE, BITS) * HWY_RESTRICT unaligned) { \
const sv##BASE##BITS##x4_t quad = \
svcreate4##_##CHAR##BITS(v0, v1, v2, v3); \
sv##OP##_##CHAR##BITS(detail::Mask(d), unaligned, quad); \
}

◆ HWY_SVE_T

#define HWY_SVE_T (   BASE,
  BITS 
)    BASE##BITS##_t

◆ HWY_SVE_TABLE

#define HWY_SVE_TABLE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
HWY_API HWY_SVE_V(BASE, BITS) \
NAME(HWY_SVE_V(BASE, BITS) v, HWY_SVE_V(int, BITS) idx) { \
const auto idx_u = BitCast(RebindToUnsigned<DFromV<decltype(v)>>(), idx); \
return sv##OP##_##CHAR##BITS(v, idx_u); \
}
Rebind< MakeUnsigned< TFromD< D > >, D > RebindToUnsigned
Definition: shared-inl.h:149

◆ HWY_SVE_V

#define HWY_SVE_V (   BASE,
  BITS 
)    sv##BASE##BITS##_t

◆ HWY_SVE_WRAP_PTRUE

#define HWY_SVE_WRAP_PTRUE (   BASE,
  CHAR,
  BITS,
  NAME,
  OP 
)
Value:
template <size_t N> \
HWY_API svbool_t NAME(HWY_SVE_D(BASE, BITS, N) d) { \
return HWY_SVE_PTRUE(BITS); \
}

Function Documentation

◆ HWY_AFTER_NAMESPACE()

HWY_AFTER_NAMESPACE ( )

◆ HWY_BEFORE_NAMESPACE()

HWY_BEFORE_NAMESPACE ( )