Argon 0.1.0
Loading...
Searching...
No Matches
Argon< ScalarType > Class Template Reference

A 128-bit SIMD vector wrapping a scalar type, providing arithmetic, logical, and data-movement operations. More...

#include <argon_full.hpp>

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)
 Construct from an underlying argon::Vector.
ace Argon (std::array< ScalarType, 4 > value_list)
 Construct from a four-element array (loaded as a 128-bit vector).
ace Argon (ArgonHalf< ScalarType > low, ArgonHalf< ScalarType > high)
 Construct by combining a low and high 64-bit half-vector.
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
 Reinterpret the vector bits as a vector of a different element type.
ace Argon< ScalarType > Reverse ()
 Reverse the order of all elements across the full 128-bit vector.
template<typename U>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, ArgonHalf< U > c)
 Multiply two narrower half-vectors and add the widened result to this vector (vector × vector).
template<typename U, typename C>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, C c)
 Multiply two narrower vectors and add the widened result (vector × raw intrinsic).
template<typename U>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, U c)
 Multiply a half-vector by a scalar and add the widened result (vector × scalar).
template<typename U>
ace Argon< ScalarType > MultiplyAddLong (ArgonHalf< U > b, typename ArgonHalf< U >::lane_type c)
 Multiply a half-vector by a lane and add the widened result (vector × lane).
template<typename U>
ace Argon< ScalarType > MultiplySubtractLong (ArgonHalf< U > b, ArgonHalf< U > c)
 Multiply two narrower half-vectors and subtract the widened result from this vector (vector × vector).
template<typename U>
ace Argon< ScalarType > MultiplySubtractLong (ArgonHalf< U > b, U c)
 Multiply a half-vector by a scalar and subtract the widened result (vector × scalar).
template<typename U>
ace Argon< ScalarType > MultiplySubtractLong (ArgonHalf< U > b, typename ArgonHalf< U >::lane_type c)
 Multiply a half-vector by a lane and subtract the widened result (vector × lane).
ace auto AddNarrow (Argon< ScalarType > b) const
 Add and narrow: add b to this vector and truncate each lane to the next-smaller type.
ace auto AddRoundNarrow (Argon< ScalarType > b) const
 Add, round, and narrow: add b, round the result, and truncate to the next-smaller type.
ace auto SubtractNarrow (Argon< ScalarType > b) const
 Subtract and narrow: subtract b and truncate each lane to the next-smaller type.
ace auto SubtractRoundNarrow (Argon< ScalarType > b) const
 Subtract, round, and narrow: subtract b, round the result, and truncate to the next-smaller type.
template<size_t n>
ace auto ShiftRightNarrow () const
 Shift each lane right by n bits and narrow the result to the next-smaller type.
template<size_t n>
ace auto ShiftRightSaturateNarrow () const
 Shift right, saturate, and narrow: shift each lane right by n bits with unsigned saturation.
template<size_t n>
ace auto ShiftRightRoundSaturateNarrow () const
 Shift right, round, saturate, and narrow.
template<size_t n>
ace auto ShiftRightRoundNarrow () const
 Shift right, round, and narrow.
ace auto Narrow () const
 Truncate each lane to the next-smaller element type (no saturation).
ace auto SaturateNarrow () const
 Saturate and narrow each lane to the next-smaller element type.
template<typename NextSmallerType>
ace Argon< ScalarType > MultiplyDoubleAddSaturateLong (ArgonHalf< NextSmallerType > b, ArgonHalf< NextSmallerType > c)
 Multiply, double, add, and saturate long: this + saturate(2 * b * c) widening to ScalarType.
ace ArgonHalf< ScalarType > GetHigh () const
 Return the upper 64 bits as an ArgonHalf.
ace ArgonHalf< ScalarType > GetLow () const
 Return the lower 64 bits as an ArgonHalf.
template<typename U>
ace Argon< U > ConvertTo () const
 Convert each lane to a different element type.
template<typename U, int fracbits>
ace Argon< U > ConvertTo () const
 Convert each lane to a different type using a fixed-point fractional bit count.
ace Argon< ScalarType > Reverse () const
 Reverse the order of all elements in the 128-bit vector.
template<typename CommutableOpType>
ScalarType Reduce (CommutableOpType op)
 Fold all lanes into a single scalar using a commutative binary operation.
ScalarType ReduceAdd ()
 Sum all lanes and return the scalar result.
ScalarType ReduceMax ()
 Return the maximum value across all lanes.
ScalarType ReduceMin ()
 Return the minimum value across all lanes.
ace Argon< ScalarType > SwapDoublewords ()
 Swap the upper and lower 64-bit halves of the vector.
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 ReciprocalSqrtEstimate () const
 1 / sqrt(value), using an estimate for speed
ace argon_type ReciprocalStep (argon_type b) const
 Newton-Raphson step for reciprocal refinement: (2 - a * b) / 2.
ace argon_type ReciprocalSqrtStep (argon_type b) const
 Newton-Raphson step for reciprocal-sqrt refinement: (3 - a * b) / 2.
ace argon_type ReciprocalEstimateRefine (int n_iters=1) const
 Compute a refined reciprocal estimate using Newton-Raphson iterations.
ace argon_type ReciprocalSqrtEstimateRefine (int n_iters=1) const
 Compute a refined reciprocal-sqrt estimate using Newton-Raphson iterations.
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)
 Combine two 64-bit half-vectors into a single 128-bit vector.
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_

Detailed Description

template<typename ScalarType>
requires std::is_arithmetic_v<ScalarType>
class Argon< ScalarType >

A 128-bit SIMD vector wrapping a scalar type, providing arithmetic, logical, and data-movement operations.

Template Parameters
ScalarTypeThe element type (e.g., int32_t, float, uint8_t).

Inherits all lane-wise operations from argon::Vector and adds 128-bit-specific operations such as narrowing, widening multiplies, cross-half operations, reductions, and (optionally) AES acceleration. Use ArgonHalf<ScalarType> for the 64-bit sibling.

Member Function Documentation

◆ AddNarrow()

template<typename ScalarType>
ace auto Argon< ScalarType >::AddNarrow ( Argon< ScalarType > b) const
inline

Add and narrow: add b to this vector and truncate each lane to the next-smaller type.

Returns
An ArgonHalf-width vector of the next-smaller element type.

◆ As()

template<typename ScalarType>
template<typename new_scalar_type>
ace Argon< new_scalar_type > Argon< ScalarType >::As ( ) const
inline

Reinterpret the vector bits as a vector of a different element type.

Template Parameters
new_scalar_typeThe target element type.
Returns
The same 128 bits viewed as Argon<new_scalar_type>.

◆ Combine()

template<typename ScalarType>
ace Argon< ScalarType > Argon< ScalarType >::Combine ( ArgonHalf< ScalarType > low,
ArgonHalf< ScalarType > high )
inlinestatic

Combine two 64-bit half-vectors into a single 128-bit vector.

Parameters
lowThe lower 64 bits.
highThe upper 64 bits.

◆ ConvertTo() [1/2]

template<typename ScalarType>
template<typename U, int fracbits>
ace Argon< U > Argon< ScalarType >::ConvertTo ( ) const
inline

Convert each lane to a different type using a fixed-point fractional bit count.

Template Parameters
UThe destination element type (float, int32_t, or uint32_t).
fracbitsThe number of fractional bits in the fixed-point representation.

◆ ConvertTo() [2/2]

template<typename ScalarType>
template<typename U>
ace Argon< U > Argon< ScalarType >::ConvertTo ( ) const
inline

Convert each lane to a different element type.

Template Parameters
UThe destination element type.

◆ MultiplyAddLong()

template<typename ScalarType>
template<typename U>
ace Argon< ScalarType > Argon< ScalarType >::MultiplyAddLong ( ArgonHalf< U > b,
ArgonHalf< U > c )
inline

Multiply two narrower half-vectors and add the widened result to this vector (vector × vector).

Template Parameters
UThe narrower element type (must be the next-smaller type of ScalarType).

◆ Reduce()

template<typename ScalarType>
template<typename CommutableOpType>
ScalarType Argon< ScalarType >::Reduce ( CommutableOpType op)
inline

Fold all lanes into a single scalar using a commutative binary operation.

Template Parameters
CommutableOpTypeA callable (Argon, Argon) -> Argon (e.g., addition, max).
Parameters
opThe commutative binary operation.
Returns
The scalar result after all lanes have been folded.

◆ Reverse() [1/2]

template<typename ScalarType>
ace Argon< ScalarType > Argon< ScalarType >::Reverse ( )
inline

Reverse the order of all elements across the full 128-bit vector.

Reverses within each 64-bit half, then swaps the two halves.

◆ Reverse() [2/2]

template<typename ScalarType>
ace Argon< ScalarType > Argon< ScalarType >::Reverse ( ) const
inline

Reverse the order of all elements in the 128-bit vector.

Reverses elements within each 64-bit doubleword, then swaps the two doublewords.

◆ ShiftRightNarrow()

template<typename ScalarType>
template<size_t n>
ace auto Argon< ScalarType >::ShiftRightNarrow ( ) const
inline

Shift each lane right by n bits and narrow the result to the next-smaller type.

Template Parameters
nShift amount (must be in range [1, sizeof(ScalarType)*8]).

◆ ShiftRightRoundNarrow()

template<typename ScalarType>
template<size_t n>
ace auto Argon< ScalarType >::ShiftRightRoundNarrow ( ) const
inline

Shift right, round, and narrow.

Template Parameters
nShift amount.

◆ ShiftRightRoundSaturateNarrow()

template<typename ScalarType>
template<size_t n>
ace auto Argon< ScalarType >::ShiftRightRoundSaturateNarrow ( ) const
inline

Shift right, round, saturate, and narrow.

Template Parameters
nShift amount.

◆ ShiftRightSaturateNarrow()

template<typename ScalarType>
template<size_t n>
ace auto Argon< ScalarType >::ShiftRightSaturateNarrow ( ) const
inline

Shift right, saturate, and narrow: shift each lane right by n bits with unsigned saturation.

Template Parameters
nShift amount.

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