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

Public Types

using vector_type = simd::Vec128_t<ScalarType>
using lane_type = const argon::Lane<vector_type>
Public Types inherited from argon::Vector< simd::Vec128_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 Argon (argon::Vector< vector_type > vec)
ace Argon (std::array< ScalarType, 4 > value_list)
ace Argon (ArgonHalf< ScalarType > low, ArgonHalf< ScalarType > high)
ace Argon (argon::Lane< vector_type > b)
ace Argon (argon::ConstLane< 0, vector_type > b)
template<simd::is_vector_type intrinsic_type>
ace Argon (argon::Lane< intrinsic_type > b)
template<typename new_scalar_type>
ace Argon< new_scalar_type > As () const
ace Argon< ScalarType > Reverse ()
template<typename U>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<U, typename argon::helpers::NextSmaller<ScalarType>::type>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, ArgonHalf< U > c)
template<typename U, typename C>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<C, simd::Vec64_t<argon::helpers::NextSmaller_t<ScalarType>>>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, C c)
template<typename U>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<U, typename argon::helpers::NextSmaller<ScalarType>::type>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, U c)
template<typename U>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<U, typename argon::helpers::NextSmaller<ScalarType>::type>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, typename ArgonHalf< U >::lane_type c)
template<typename U>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<U, typename argon::helpers::NextSmaller<ScalarType>::type>
ace Argon< ScalarType > MultiplySubtractLong (ArgonHalf< U > b, ArgonHalf< U > c)
template<typename U>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<U, typename argon::helpers::NextSmaller<ScalarType>::type>
ace Argon< ScalarType > MultiplySubtractLong (ArgonHalf< U > b, U c)
template<typename U>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<U, typename argon::helpers::NextSmaller<ScalarType>::type>
ace Argon< ScalarType > MultiplySubtractLong (ArgonHalf< U > b, typename ArgonHalf< U >::lane_type c)
ace auto AddNarrow (Argon< ScalarType > b) const
ace auto AddRoundNarrow (Argon< ScalarType > b) const
ace auto SubtractNarrow (Argon< ScalarType > b) const
ace auto SubtractRoundNarrow (Argon< ScalarType > b) const
template<size_t n>
requires argon::helpers::has_smaller_v<ScalarType>
ace auto ShiftRightNarrow () const
template<size_t n>
requires argon::helpers::has_smaller_v<ScalarType>
ace auto ShiftRightSaturateNarrow () const
template<size_t n>
requires argon::helpers::has_smaller_v<ScalarType>
ace auto ShiftRightRoundSaturateNarrow () const
template<size_t n>
requires argon::helpers::has_smaller_v<ScalarType>
ace auto ShiftRightRoundNarrow () const
ace auto Narrow () const
ace auto SaturateNarrow () const
template<typename NextSmallerType>
requires argon::helpers::has_smaller_v<ScalarType> && std::is_same_v<NextSmallerType, argon::helpers::NextSmaller_t<ScalarType>>
ace Argon< ScalarType > MultiplyDoubleAddSaturateLong (ArgonHalf< NextSmallerType > b, ArgonHalf< NextSmallerType > c)
ace ArgonHalf< ScalarType > GetHigh () const
ace ArgonHalf< ScalarType > GetLow () const
template<typename U>
ace Argon< U > ConvertTo () const
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 Argon< U > ConvertTo () const
ace Argon< ScalarType > Reverse () const
template<typename CommutableOpType>
ScalarType Reduce (CommutableOpType op)
ScalarType ReduceAdd ()
ScalarType ReduceMax ()
ScalarType ReduceMin ()
ace Argon< ScalarType > SwapDoublewords ()
Public Member Functions inherited from argon::Vector< simd::Vec128_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 (simd::Vec128_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< simd::Vec128_t< ScalarType > > lane)
 Constructs a Vector from a Lane object.
ace Vector (argon::ConstLane< LaneIndex, simd::Vec128_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 simd::Vec128_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 simd::Vec128_t< ScalarType > vec () const
 Get the underlying SIMD vector.
constexpr operator simd::Vec128_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< simd::Vec128_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< simd::Vec128_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< simd::Vec128_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< simd::Vec128_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 simd::Vec128_t< ScalarType > () const
 Convert the vector to the underlying SIMD vector type.

Static Public Member Functions

static ace Argon< ScalarType > Combine (ArgonHalf< ScalarType > low, ArgonHalf< ScalarType > high)
Static Public Member Functions inherited from argon::Vector< simd::Vec128_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, simd::Vec128_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< simd::Vec128_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< simd::Vec128_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< simd::Vec128_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< simd::Vec128_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 = 16
static constexpr size_t lanes = bytes / sizeof(ScalarType)
Static Public Attributes inherited from argon::Vector< simd::Vec128_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< simd::Vec128_t< ScalarType > >
static ace argon_type IotaHelper (scalar_type start, std::index_sequence< Ints... >)
Protected Attributes inherited from argon::Vector< simd::Vec128_t< ScalarType > >
simd::Vec128_t< ScalarType > vec_

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