A 128-bit SIMD vector wrapping a scalar type, providing arithmetic, logical, and data-movement operations.
More...
|
|
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.
|
|
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 | 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_type > | get () |
|
constexpr | operator simd::Vec128_t< ScalarType > () const |
| | Convert the vector to the underlying SIMD vector type.
|