Argon 0.1.0
Loading...
Searching...
No Matches
ArgonHalf< ScalarType > Class Template Reference
Inheritance diagram for ArgonHalf< ScalarType >:
Collaboration diagram for ArgonHalf< ScalarType >:

Public Types

using vector_type = neon::Vec64_t<ScalarType>
using lane_type = const argon::Lane<vector_type>
using vector_type = neon::Vec64_t<ScalarType>
using lane_type = const argon::Lane<vector_type>
Public Types inherited from argon::Vector< neon::Vec64_t< ScalarType > >
using const_lane_type
 The type of a single lane of the SIMD vector.
using lane_type
 The type of a single lane of the SIMD vector.
using scalar_type
 The scalar type of the SIMD vector.
using vector_type
 The SIMD vector type.
using argon_type
 The Argon type for the SIMD vector.
using predicate_type
 The type of a boolean SIMD vector.
using argon_bool_type
 The Argon type for the boolean vector.

Public Member Functions

ace ArgonHalf (argon::Vector< vector_type > vec)
ace ArgonHalf (const ArgonHalf &)=default
ace ArgonHalf (ArgonHalf &&)=default
ace ArgonHalfoperator= (const ArgonHalf &)=default
ace ArgonHalfoperator= (ArgonHalf &&)=default
template<typename NewScalarType>
ace ArgonHalf< NewScalarType > As () const
 reinterpret an ArgonHalf to a different type
ace ArgonHalf< ScalarType > TableLookup (ArgonHalf< ScalarType > idx)
ace ArgonHalf< ScalarType > TableExtension (ArgonHalf< ScalarType > b, ArgonHalf< ScalarType > idx)
template<size_t NumTables>
ace ArgonHalf< ScalarType > TableExtension (std::array< ArgonHalf< ScalarType >, NumTables > b, ArgonHalf< ScalarType > idx)
template<size_t NumTables>
ace ArgonHalf< ScalarType > TableExtension (vector_type *b, ArgonHalf< ScalarType > idx)
template<typename U>
ace ArgonHalf< U > ConvertTo ()
template<typename U, int fracbits>
requires (std::is_same_v<U, uint32_t> || std::is_same_v<U, int32_t> || std::is_same_v<U, float>)
ace ArgonHalf< U > ConvertTo ()
ace Argon< ScalarType > CombineWith (ArgonHalf< ScalarType > high) const
ace ArgonHalf< ScalarType > Reverse () const
template<typename NewScalarType>
ace ArgonHalf< NewScalarType > As () const
 reinterpret an ArgonHalf to a different type
ace argon_next_larger AddLong (ArgonHalf< ScalarType > b) const
 Add, widening.
ace argon_next_larger MultiplyLong (ArgonHalf< ScalarType > b) const
ace argon_next_larger MultiplyLong (ScalarType b) const
ace argon_next_larger MultiplyLong (lane_type b) const
ace argon_next_larger MultiplyAddLong (ArgonHalf< ScalarType > b) const
ace argon_next_larger MultiplyAddLong (ScalarType b) const
ace argon_next_larger MultiplyAddLong (lane_type b) const
ace argon_next_larger MultiplyDoubleSaturateLong (ArgonHalf< ScalarType > b) const
ace argon_next_larger MultiplyDoubleSaturateLong (ScalarType b) const
ace argon_next_larger MultiplyDoubleSaturateLong (lane_type b) const
ace argon_next_larger MultiplyDoubleAddSaturateLong (ArgonHalf< ScalarType > b) const
ace argon_next_larger MultiplyDoubleAddSaturateLong (ScalarType b) const
ace argon_next_larger MultiplyDoubleAddSaturateLong (lane_type b) const
ace argon_next_larger SubtractLong (ArgonHalf< ScalarType > b) const
ace argon_next_larger SubtractAbsoluteLong (ArgonHalf< ScalarType > b) const
ace argon_next_larger PairwiseAddLong () const
ace argon_next_larger PairwiseAddLong (ArgonHalf< typename argon::helpers::NextSmaller< ScalarType > > b) const
ace argon_next_larger Widen () const
template<size_t n>
ace argon_next_larger ShiftLeftLong ()
ace ArgonHalf< ScalarType > TableLookup (ArgonHalf< ScalarType > idx)
ace ArgonHalf< ScalarType > TableExtension (ArgonHalf< ScalarType > b, ArgonHalf< ScalarType > idx)
template<size_t NumTables>
ace ArgonHalf< ScalarType > TableExtension (std::array< ArgonHalf< ScalarType >, NumTables > b, ArgonHalf< ScalarType > idx)
template<size_t NumTables>
ace ArgonHalf< ScalarType > TableExtension (vector_type *b, ArgonHalf< ScalarType > idx)
template<typename U>
ace ArgonHalf< U > ConvertTo ()
template<typename U, int fracbits>
requires (std::is_same_v<U, uint32_t> || std::is_same_v<U, int32_t> || std::is_same_v<U, float>)
ace ArgonHalf< U > ConvertTo ()
ace Argon< ScalarType > CombineWith (ArgonHalf< ScalarType > high) const
ace ArgonHalf< ScalarType > Reverse () const
Public Member Functions inherited from argon::Vector< neon::Vec64_t< ScalarType > >
constexpr Vector ()=default
 The default constructor for the Vector class.
constexpr Vector (Vector &&other)=default
 Move constructor for the Vector class.
constexpr Vector (const Vector &other)=default
 Copy constructor for the Vector class.
constexpr Vectoroperator= (Vector &&other)=default
 Move assignment operator for the Vector class.
constexpr Vectoroperator= (const Vector &other)=default
 Copy assignment operator for the Vector class.
ace Vector (neon::Vec64_t< ScalarType > vector)
 Constructs a Vector from a SIMD vector type.
ace Vector (scalar_type scalar)
 Constructs a Vector from a scalar value.
ace Vector (argon::Lane< neon::Vec64_t< ScalarType > > lane)
 Constructs a Vector from a Lane object.
ace Vector (argon::ConstLane< LaneIndex, neon::Vec64_t< ScalarType > > lane)
 Constructs a Vector from a ConstLane object.
ace Vector (ArgTypes... args)
ace argon_type operator- () const
 Negate the SIMD vector and return the result.
ace argon_type operator+ (argon_type b) const
 Add a vector and return the result.
ace argon_type operator- (argon_type b) const
 Subtract a vector and return the result.
ace argon_type operator* (argon_type b) const
 Multiply a vector and return the result.
ace argon_type operator/ (argon_type b) const
 Divide a vector and return the result.
ace argon_bool_type operator== (argon_type b) const
 Compare two vectors for equality.
ace argon_bool_type operator!= (argon_type b) const
 Compare two vectors for inequality.
ace argon_bool_type operator< (argon_type b) const
 Compare two vectors, checking if this vector is less than the other.
ace argon_bool_type operator> (argon_type b) const
 Compare two vectors, checking if this vector is greater than the other.
ace argon_bool_type operator<= (argon_type b) const
 Compare two vectors, checking if this vector is less than or equal to the other.
ace argon_bool_type operator>= (argon_type b) const
 Compare two vectors, checking if this vector is greater than or equal to the other.
ace argon_type operator++ () const
 Increment the vector by 1 and return the result.
ace argon_type operator-- () const
 Decrement the vector by 1 and return the result.
ace argon_type operator& (argon_type b) const
 Bitwise AND two vectors and return the result.
ace argon_type operator| (argon_type b) const
 Bitwise OR two vectors and return the result.
ace argon_type operator^ (argon_type b) const
 Bitwise XOR two vectors and return the result.
ace argon_type operator~ () const
 Bitwise NOT the vector and return the result.
ace Lane< const neon::Vec64_t< ScalarType > > operator[] (const size_t i) const
 Access a lane of the vector by index.
ace lane_type operator[] (const size_t i)
 Access a lane of the vector by index.
ace argon_type operator>> (const int i) const
 Shift the elements of the vector to the right by a specified number of bits.
ace argon_type operator<< (const int i) const
 Shift the elements of the vector to the left by a specified number of bits.
constexpr neon::Vec64_t< ScalarType > vec () const
 Get the underlying SIMD vector.
constexpr operator neon::Vec64_t< ScalarType > () const
 Convert the vector to the underlying SIMD vector type.
ace std::array< scalar_type, lanesto_array ()
 Convert the vector to an array of scalar values.
ace const lane_type GetLane (const size_t i) const
 Get a single lane of the vector by index.
ace lane_type GetLane (const size_t i)
ace const lane_type GetLane (const int i) const
 Get a single lane of the vector by index.
ace lane_type GetLane (const int i)
ace const const_lane_type< LaneIndex > GetLane () const
 Get a single lane of the vector by index.
ace const_lane_type< LaneIndex > GetLane ()
ace const_lane_type< lanes - 1 > LastLane ()
 Get the last lane of the vector.
ace argon_type ShiftRight (const int i) const
 Shift the elements of the vector to the right by a specified number of bits.
ace argon_type ShiftLeft (const int i) const
 Shift the elements of the vector to the left by a specified number of bits.
ace argon_type Negate () const
 Bitwise negate the vector and return the result.
ace argon_type Add (argon_type b) const
 Add two vectors.
ace argon_type AddHalve (argon_type b) const
 Adds two vectors, halving the result.
ace argon_type AddHalveRound (argon_type b) const
 Adds two vectors, halving and rounding the result.
ace argon_type AddSaturate (argon_type b) const
 Adds two vectors, saturating the result.
ace argon_type Subtract (argon_type b) const
 Subtract two vectors.
ace argon_type SubtractHalve (argon_type b) const
 Subtract two vectors, halving the result.
ace argon_type SubtractSaturate (argon_type b) const
 Subtract two vectors, saturating the result.
ace argon_type SubtractAbs (argon_type b) const
 Subtract two vectors, taking the absolute value of the result.
ace argon_type SubtractAbsAdd (argon_type b, argon_type c) const
 Subtract two vectors, taking the absolute value of the result and adding a third vector.
ace argon_type Multiply (argon_type b) const
 Multiply two vectors.
ace argon_type Multiply (scalar_type b) const
 Multiply a vector by a scalar value.
ace argon_type Multiply (lane_type b) const
 Multiply a vector by a lane value.
ace argon_type Multiply (const_lane_type< LaneIndex > b) const
 Multiply a vector by a lane value.
ace argon_type MultiplyAdd (argon_type b, argon_type c) const
 Multiply two vectors and add a third vector.
ace argon_type MultiplyAdd (argon_type b, scalar_type c) const
 Multiply a vector by a scalar value and add a third vector.
ace argon_type MultiplyAdd (scalar_type b, argon_type c) const
 Multiply a vector by a scalar value and add a third vector.
ace argon_type MultiplyAdd (argon_type b, lane_type c) const
 Multiply a vector by a lane value and add a third vector.
ace argon_type MultiplyAdd (lane_type b, argon_type c) const
 Multiply a vector by a lane value and add a third vector.
ace argon_type MultiplyAdd (argon_type b, const_lane_type< LaneIndex > c) const
 Multiply a vector by a lane value and add a third vector.
ace argon_type MultiplyAdd (const_lane_type< LaneIndex > b, argon_type c) const
 Multiply a vector by a lane value and add a third vector.
ace argon_type MultiplySubtract (argon_type b, argon_type c) const
 Multiply two vectors and subtract from a third vector.
ace argon_type MultiplySubtract (argon_type b, scalar_type c) const
 Multiply a vector by a scalar value and subtract from a third vector.
ace argon_type MultiplySubtract (scalar_type b, argon_type c) const
 Multiply a vector by a scalar value and subtract from a third vector.
ace argon_type MultiplySubtract (argon_type b, lane_type c) const
 Multiply a vector by a lane value and subtract from a third vector.
ace argon_type MultiplyFixedQMax (argon_type v) const
 Multiply two QMax fixed-point vectors, returning a fixed-point product.
ace argon_type MultiplyFixedQMax (scalar_type s) const
 Multiply a QMax fixed-point vector by a scalar value, returning a fixed-point product.
ace argon_type MultiplyFixedQMax (lane_type l) const
 Multiply a QMax fixed-point vector by a lane value, returning a fixed-point product.
ace argon_type MultiplyRoundFixedQMax (argon_type v) const
 Multiply two fixed-point vectors, returning a fixed-point product.
ace argon_type MultiplyRoundFixedQMax (scalar_type s) const
 Multiply a fixed-point vector by a scalar value, returning a fixed-point product.
ace argon_type MultiplyRoundFixedQMax (lane_type l) const
 Multiply a fixed-point vector by a lane value, returning a fixed-point product.
ace argon_type Absolute () const
 Get the absolute value of the vector.
ace argon_type ReciprocalEstimate () const
 1 / value, using an estimate for speed
ace argon_type MultiplyAddFixedQMax (argon_type b, arg_type c) const
 Multiply-add three fixed-point vectors, returning a fixed-point sum.
ace argon_type MultiplyRoundAddFixedQMax (argon_type b, arg_type c) const
 Multiply-round-add three fixed-point vectors, returning a fixed-point sum.
ace argon_type Divide (argon_type b) const
 Divide two vectors.
ace argon_type Modulo (argon_type b) const
 Get the modulo of two vectors.
ace argon_type Modulo (scalar_type b) const
 Get the modulo of a vector and a scalar value.
ace argon_type Max (argon_type b) const
 Compare the lanes of two vectors, copying the larger of each lane to the result.
ace argon_type Min (argon_type b) const
 Compare the lanes of two vectors, copying the smaller of each lane to the result.
ace argon_bool_type Equal (argon_type b) const
 Compare the lanes of two vectors, setting the result lane's bits to ON if are equal.
ace argon_bool_type GreaterThanOrEqual (argon_type b) const
 Compare the lanes of two vectors, setting the result lane's bits to ON if a is greater than or equal to b.
ace argon_bool_type LessThanOrEqual (argon_type b) const
 Compare the lanes of two vectors, setting the result lane's bits to ON if a is less than or equal to b.
ace argon_bool_type GreaterThan (argon_type b) const
 Compare the lanes of two vectors, setting the result lane's bits to ON if a is greater than b.
ace argon_bool_type LessThan (argon_type b) const
 Compare the lanes of two vectors, setting the result lane's bits to ON if a is less than b.
ace argon_type ShiftLeft (helpers::ArgonFor_t< simd::make_signed_t< Bool_t< neon::Vec64_t< ScalarType > > > > b) const
 Shift the elemnets of the vector to the left by a specified number of bits.
ace argon_type ShiftLeft (std::make_signed_t< simd::Scalar_t< Bool_t< neon::Vec64_t< ScalarType > > > > n) const
 Shift the elements of the vector to the left by a specified number of bits.
ace argon_type ShiftLeft () const
 Shift the elements of the vector to the left by a specified number of bits.
ace argon_type ShiftLeftSaturate (helpers::ArgonFor_t< simd::make_signed_t< Bool_t< neon::Vec64_t< ScalarType > > > > b) const
 Shift the elements of the vector to the left by a specified number of bits, saturating the result.
ace argon_type ShiftLeftRound (argon_type b) const
 Shift the elements of the vector to the left by a specified number of bits, rounding the result.
ace argon_type ShiftLeftRoundSaturate (argon_type b) const
 Shift the elements of the vector to the left by a specified number of bits, rounding and saturating the result.
ace argon_type ShiftLeftSaturate () const
 Shift the elements of the vector to the left by a specified number of bits, saturating the result.
ace argon_type ShiftLeftInsert (argon_type b) const
 Shift the elements of the vector to the left by a specified number of bits, and then OR the result with another vector masked to the number of shift bits.
ace argon_type ShiftRight () const
 Shift the elements of the vector to the right by a specified number of bits.
ace argon_type ShiftRightRound () const
 Shift the elements of the vector to the right by a specified number of bits, rounding the result.
ace argon_type ShiftRightAccumulate (argon_type b) const
 Shift the elements of the b vector to the right by a specified number of bits, and then add the result to this vector.
ace argon_type ShiftRightAccumulateRound (argon_type b) const
 Shift the elements of the b vector to the right by a specified number of bits, and then add the result to this vector.
ace argon_type ShiftRightInsert (argon_type b) const
 Shift the elements of the vector to the right by a specified number of bits, ORing the result with the vector masked to the number of shift bits.
ace argon_type LoadToLane (const scalar_type *ptr)
 Load a lane from a pointer.
ace void StoreTo (scalar_type *ptr) const
 Store the vector to a pointer.
ace void StoreLaneTo (scalar_type *ptr)
 Store a lane of the vector to a pointer.
ace argon_type PairwiseAdd (argon_type b) const
 Pairwise ops.
ace argon_type PairwiseMax (argon_type b) const
 Select the maximum of each pair of lanes in the two vectors.
ace argon_type PairwiseMin (argon_type b) const
 Select the maximum of each pair of lanes in the two vectors.
ace argon_type BitwiseNot () const
 Bitwise ops.
ace argon_type BitwiseAnd (argon_type b) const
 Bitwise AND of the vector with another vector.
ace argon_type BitwiseOr (argon_type b) const
 Bitwise OR of the vector with another vector.
ace argon_type BitwiseXor (argon_type b) const
 Bitwise XOR of the vector with another vector.
ace argon_type BitwiseOrNot (argon_type b) const
 Bitwise OR of the vector with the NOT of another vector.
ace argon_type BitwiseAndNot (argon_type b) const
 Bitwise AND of the vector with the NOT of another vector.
ace argon_type BitwiseClear (argon_type b) const
 Bitwise AND of the vector with the NOT of another vector.
ace argon_type BitwiseSelect (ArgType true_value, ArgType false_value) const
 Bitwise select between two vectors, using the current vector as a mask.
ace argon_type Select (ArgType true_value, ArgType false_value) const
 Bitwise select between two vectors, using the current vector as a mask.
ace predicate_type CompareTestNonzero (argon_type b) const
 Ands the current vector with the given vector, then checks if nonzero.
ace predicate_type TestNonzero () const
 Ands the current vector with the given vector, then checks if nonzero.
ace helpers::ArgonFor_t< simd::make_signed_t< Bool_t< neon::Vec64_t< ScalarType > > > > CountLeadingSignBits () const
 Count the number of consecutive bits following the sign bit that are set to the same value as the sign bit.
ace argon_type CountLeadingZeroBits () const
 Count the number of consecutive top bits that are set to zero.
ace argon_type CountActiveBits () const
 Count the number of bits that are set to one in the vector.
ace argon_type Popcount () const
 Count the number of bits that are set to one in the vector.
ace argon_type Extract (argon_type b) const
 Extract n elements from the lower end of the operand, and the remaining elements from the top end of this vector, combining them into the result vector.
ace argon_type Reverse64bit () const
ace argon_type Reverse32bit () const
ace argon_type Reverse16bit () const
ace std::array< argon_type, 2 > ZipWith (argon_type b) const
 Zip two vectors together, returning two vectors of pairs.
std::array< argon_type, 2 > UnzipWith (argon_type b)
 Unzip two vectors, returning two vectors of pairs.
std::array< argon_type, 2 > TransposeWith (argon_type b) const
 Perform a 2x2 matrix transpose on two vectors, returning two vectors of pairs.
ace argon_type map (FuncType body) const
ace argon_type map_with_index (FuncType body) const
ace argon_type map2 (argon_type other, FuncType body) const
ace argon_type each_lane (FuncType body)
ace argon_type each_lane_with_index (FuncType body)
ace void if_lane (FuncType true_branch)
ace void if_else_lane (FuncType true_branch, FuncType false_branch)
ace void if_lane_with_index (FuncType true_branch)
ace void if_else_lane_with_index (FuncType1 true_branch, FuncType2 false_branch)
ace bool any ()
ace bool all ()
std::tuple_element_t< Index, argon_typeget ()
constexpr operator neon::Vec64_t< ScalarType > () const
 Convert the vector to the underlying SIMD vector type.

Static Public Member Functions

static ace ArgonHalf< ScalarType > Create (uint64_t a)
 Create a new ArgonHalf from a raw 64-bit value.
static ace ArgonHalf< ScalarType > Create (uint64_t a)
 Create a new ArgonHalf from a raw 64-bit value.
Static Public Member Functions inherited from argon::Vector< neon::Vec64_t< ScalarType > >
static ace argon_type LoadScalar (const scalar_type *ptr)
 Constructs a Vector from a scalar pointer.
static ace argon_type FromScalar (scalar_type scalar)
 Constructs a Vector from a scalar value.
static ace argon_type FromLane (argon::Lane< IntrinsicType > lane)
 Constructs a Vector from a Lane object.
static ace argon_type FromLane (argon::ConstLane< LaneIndex, neon::Vec64_t< ScalarType > > lane)
 Constructs a Vector from a ConstLane object.
static ace argon_type Iota (scalar_type start)
 Constructs a Vector from an incrementing sequence.
static ace argon_type Generate (FuncType body)
 Constructs a Vector from a function that generates values.
static ace argon_type GenerateWithIndex (FuncType body)
 Constructs a Vector from a function that generates values with an index.
static ace argon_type Load (const scalar_type *ptr)
 Load a vector from a pointer.
static ace argon_type LoadCopy (const scalar_type *ptr)
 Load a vector from a pointer, duplicating the value across all lanes.
static ace argon_type LoadGatherOffsetBytes (const scalar_type *base, helpers::ArgonFor_t< simd::make_unsigned_t< Bool_t< neon::Vec64_t< ScalarType > > > > offset_vector)
 Using a base address and a vector of offset bytes and a base pointer, create a new vector.
static ace argon_type LoadGatherOffsetIndex (const scalar_type *base, helpers::ArgonFor_t< simd::make_unsigned_t< Bool_t< neon::Vec64_t< ScalarType > > > > offset_vector)
 Using a base address and a vector of offset indices and a base pointer, create a new vector.
static ace std::array< argon_type, stride > LoadInterleaved (const scalar_type *ptr)
 Load multiple vectors from a pointer, de-interleaving.
static ace std::array< argon_type, stride > LoadCopyInterleaved (const scalar_type *ptr)
 Load multiple vectors from a pointer, duplicating the value across all lanes.
static ace std::array< argon_type, Stride > LoadToLaneInterleaved (simd::MultiVector_t< neon::Vec64_t< ScalarType >, Stride > multi, const scalar_type *ptr)
 Load a value from a pointer into a vector at the lane index lane, de-interleaving.
static ace std::array< argon_type, stride > LoadToLaneInterleaved (std::array< argon_type, stride > multi, const scalar_type *ptr)
 Load a value from a pointer into a vector at the lane index lane, de-interleaving.
static ace std::array< argon_type, stride > LoadGatherOffsetIndexInterleaved (const scalar_type *base_ptr, helpers::ArgonFor_t< simd::make_unsigned_t< Bool_t< neon::Vec64_t< ScalarType > > > > offset_vector)
 Perform a Load-Gather of interleaved elements.
static ace std::array< argon_type, n > LoadMulti (const scalar_type *ptr)
 Load n vectors from a single contiguous set of memory.
static ace int size ()
 Get the number of elements.

Static Public Attributes

static constexpr size_t bytes = 8
static constexpr size_t lanes = bytes / sizeof(ScalarType)
Static Public Attributes inherited from argon::Vector< neon::Vec64_t< ScalarType > >
static constexpr size_t lanes
 The number of lanes in the SIMD vector.

Additional Inherited Members

Static Protected Member Functions inherited from argon::Vector< neon::Vec64_t< ScalarType > >
static ace argon_type IotaHelper (scalar_type start, std::index_sequence< Ints... >)
Protected Attributes inherited from argon::Vector< neon::Vec64_t< ScalarType > >
neon::Vec64_t< ScalarType > vec_

Member Function Documentation

◆ As() [1/2]

template<typename ScalarType>
template<typename NewScalarType>
ace ArgonHalf< NewScalarType > ArgonHalf< ScalarType >::As ( ) const
inline

reinterpret an ArgonHalf to a different type

Template Parameters
NewScalarTypeThe type to reinterpret to

◆ As() [2/2]

template<typename ScalarType>
template<typename NewScalarType>
ace ArgonHalf< NewScalarType > ArgonHalf< ScalarType >::As ( ) const
inline

reinterpret an ArgonHalf to a different type

Template Parameters
NewScalarTypeThe type to reinterpret to

◆ Create() [1/2]

template<typename ScalarType>
ace ArgonHalf< ScalarType > ArgonHalf< ScalarType >::Create ( uint64_t a)
inlinestatic

Create a new ArgonHalf from a raw 64-bit value.

Parameters
aThe raw 64-bit value to create the ArgonHalf from

◆ Create() [2/2]

template<typename ScalarType>
ace ArgonHalf< ScalarType > ArgonHalf< ScalarType >::Create ( uint64_t a)
inlinestatic

Create a new ArgonHalf from a raw 64-bit value.

Parameters
aThe raw 64-bit value to create the ArgonHalf from

The documentation for this class was generated from the following file: