Argon 0.1.0
|
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 Vector & | operator= (Vector &&other)=default |
Move assignment operator for the Vector class. | |
constexpr Vector & | operator= (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, lanes > | to_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_type > | get () |
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_ |