CMSIS-DSP  
CMSIS DSP Software Library
 
Loading...
Searching...
No Matches
vector_impl.hpp File Reference
#include <memory>
#include <cstring>
#include <algorithm>
#include "common.hpp"
#include "arch.hpp"
#include <type_traits>
#include "number.hpp"
#include "forward.hpp"
#include "fusion.hpp"
#include "unroll.hpp"
#include "algorithms.hpp"
#include "Scalar/basic.hpp"
#include "DSP/basic.hpp"
#include "Helium/basic.hpp"
#include "Neon/basic.hpp"

Data Structures

class  Scalar
 
class  DSP
 
class  Helium
 
class  Helium82
 
class  Neon
 
struct  fixed_storage_type< M, F, s, bool >
 Storage type for a fixed point number. More...
 
struct  fixed_storage_type< M, F, true, test64(M, F, 1)>
 Storage type for a fixed point number representable on int64. More...
 
struct  fixed_storage_type< M, F, false, test64(M, F, 0)>
 Storage type for a fixed point number representable on uint64. More...
 
struct  fixed_storage_type< M, F, true, test32(M, F, 1)>
 Storage type for a fixed point number representable on int32. More...
 
struct  fixed_storage_type< M, F, false, test32(M, F, 0)>
 Storage type for a fixed point number representable on uint32. More...
 
struct  fixed_storage_type< M, F, true, test16(M, F, 1)>
 Storage type for a fixed point number representable on int16. More...
 
struct  fixed_storage_type< M, F, false, test16(M, F, 0)>
 Storage type for a fixed point number representable on uint16. More...
 
struct  fixed_storage_type< M, F, true, test8(M, F, 1)>
 Storage type for a fixed point number representable on int8. More...
 
struct  fixed_storage_type< M, F, false, test8(M, F, 0)>
 Storage type for a fixed point number representable on uint8. More...
 
struct  Q< M, F, S, T >
 Fixed point template. More...
 
struct  Q< M, F, true, int64_t >
 Signed fixed point datatypes on 64 bits. More...
 
struct  Q< M, F, false, uint64_t >
 Unsigned fixed point datatypes on 64 bits. More...
 
struct  Q< M, F, true, int32_t >
 Signed fixed point datatypes on 32 bits. More...
 
struct  Q< M, F, false, uint32_t >
 Unsigned fixed point datatypes on 32 bits. More...
 
struct  Q< M, F, true, int16_t >
 Signed fixed point datatypes on 16 bits. More...
 
struct  Q< M, F, false, uint16_t >
 Unsigned fixed point datatypes on 16 bits. More...
 
struct  Q< M, F, true, int8_t >
 Signed fixed point datatypes on 8 bits. More...
 
struct  Q< M, F, false, uint8_t >
 Unsigned fixed point datatypes on 8 bits. More...
 
struct  FixedCastShift< M, FD, FS, S,(FD >FS)>
 Changed fractional representation of a fixed point number using a shift. More...
 
struct  FixedCastShift< M, FD, FS, S,(FD< FS)>
 Changed fractional representation of a fixed point number using a shift. More...
 
struct  Accumulate< MD, MS, F, S, true >
 Accumulation without saturation. More...
 
struct  vector_traits< T, arch, typename >
 Properties of a vector datatype linked to a scalar datatype. More...
 
struct  vctpq< T, typename >
 Predicate (only defined for vector architectures) More...
 
struct  number_traits< std::complex< double > >
 Features for complex double. More...
 
struct  vector_traits< std::complex< double >, arch, void >
 Default vector datatype description for this scalar datatype. More...
 
struct  number_traits< double >
 Features for double. More...
 
struct  vector_traits< double, arch, void >
 Default vector datatype description for this scalar datatype. More...
 
struct  number_traits< std::complex< float > >
 Features for complex float. More...
 
struct  vector_traits< std::complex< float >, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value >::type >
 Vector instructions for complex float when no Helium or Neon. More...
 
struct  number_traits< float >
 Features for float. More...
 
struct  vector_traits< float, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value >::type >
 Vector instructions for float when no Helium or Neon. More...
 
struct  number_traits< std::complex< float16_t > >
 Feature for complex float16. More...
 
struct  vector_traits< std::complex< float16_t >, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value >::type >
 float16 vector description when no vector architecture More...
 
struct  number_traits< float16_t >
 Feature of float16 datatype. More...
 
struct  number_traits< Q31 >
 Features for Q31. More...
 
struct  vector_traits< Q31, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value >::type >
 Vector features for Q31 when no vector instructions. More...
 
struct  number_traits< std::complex< Q31 > >
 Features for complex Q31. More...
 
struct  vector_traits< std::complex< Q31 >, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value >::type >
 Vector features for std::complex<Q31> when no vector instructions. More...
 
struct  number_traits< Q15 >
 Q15 features. More...
 
struct  vector_traits< Q15, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value &&!std::is_base_of< DSP, arch >::value >::type >
 Vector features for Q15 when no vector architecture. More...
 
struct  number_traits< std::complex< Q15 > >
 Features for complex Q15. More...
 
struct  vector_traits< std::complex< Q15 >, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value >::type >
 Vector features for Q15 when no vector architecture. More...
 
struct  number_traits< Q7 >
 Q7 features. More...
 
struct  vector_traits< Q7, arch, typename std::enable_if<!std::is_base_of< Helium, arch >::value &&!std::is_base_of< Neon, arch >::value &&!std::is_base_of< DSP, arch >::value >::type >
 Vector description when no vector architecture. More...
 
struct  number_traits< std::complex< Q7 > >
 Features for Complex Q7. More...
 
struct  vector_traits< std::complex< Q7 >, arch, void >
 Vector description when no vector architecture. More...
 
struct  Q15DSPVector
 Representation of a vector when DSP extension supported. More...
 
struct  vector_traits< Q15, DSP, typename std::enable_if< true >::type >
 Vector description for Q15 with DSP extensions. More...
 
struct  vector_traits< float, arch, typename std::enable_if< std::is_base_of< Helium, arch >::value >::type >
 Vector datatype for Helium. More...
 
struct  vctpq< float >
 vctpq for this datatype More...
 
struct  vload1_gen_stride< float32_t, 0, 1, 2, 3 >
 Load with generalized stride specialized for <0,1,2,3> More...
 
struct  vload1_gen_stride_z< float32_t, 0, 1, 2, 3 >
 Load with generalized stride (gather load) and tail predicate specialized for <0,1,2,3> More...
 
struct  vstore1_gen_stride< float32_t, 0, 1, 2, 3 >
 Generalized store with stride (Specialized for <0,1,2,3>) More...
 
struct  vstore1_gen_stride_z< float32_t, 0, 1, 2, 3 >
 Scatter store with tail predicate (specialized for <0,1,2,3>) More...
 
struct  vector_traits< std::complex< float >, arch, typename std::enable_if< std::is_base_of< Helium, arch >::value >::type >
 Vector datatype for Helium. More...
 
struct  vload1_gen_stride< std::complex< float >, 0, 1, 2, 3 >
 Load with generalized stride specialized for <0,1,2,3> More...
 
struct  vstore1_gen_stride< std::complex< float32_t >, 0, 1, 2, 3 >
 Generalized store with stride (Specialized for <0,1,2,3>) More...
 
struct  vector_traits< float16_t, arch, typename std::enable_if< std::is_base_of< Helium, arch >::value >::type >
 Vector features for f16 on Helium. More...
 
struct  vctpq< float16_t >
 vctpq for Helium and f16 More...
 
struct  vector_traits< std::complex< float16_t >, arch, typename std::enable_if< std::is_base_of< Helium, arch >::value >::type >
 Vector datatype for Helium. More...
 
struct  vload1_gen_stride< std::complex< float16_t >, 0, 1, 2, 3, 4, 5, 6, 7 >
 Load with generalized stride specialized for <0,1,2,3,4,5,6,7> More...
 
struct  vstore1_gen_stride< std::complex< float16_t >, 0, 1, 2, 3, 4, 5, 6, 7 >
 Generalized store with stride (Specialized for <0,1,2,3>) More...
 
struct  vector_traits< Q15, arch, typename std::enable_if< std::is_base_of< Helium, arch >::value >::type >
 Vector features for Q15 on Helium. More...
 
struct  number_traits< std::tuple< E... > >
 Number description for a tuple of numbers. More...
 
struct  vector_traits< std::tuple< E... >, arch >
 Tuple of compatible vectors. More...
 
struct  vctpq< std::tuple< E... > >
 Tuple of predicates. More...
 
struct  Vector_Base< P >
 Storage for a vector. More...
 
struct  Vector< P, L, Allocator >
 Vector template for size knonw at build time. More...
 
struct  Vector< P, DYNAMIC, Allocator >
 Vector template for dynamic vector (size known at runtime) More...
 

Namespaces

namespace  arm_cmsis_dsp
 
namespace  arm_cmsis_dsp::arm_cmsis_dsp::inner
 

Macros

#define ARM_MATH_TYPES_F16_H
 

Typedefs

using Q63 = Q<0,63>
 Q63 datatype.
 
using Q31 = Q<0,31>
 Q31 datatype.
 
using Q15 = Q<0,15>
 Q15 datatype.
 
using Q7 = Q<0,7>
 Q7 datatype.
 

Enumerations

enum  arm_status {
  ARM_MATH_SUCCESS = 0 ,
  ARM_MATH_ARGUMENT_ERROR = -1 ,
  ARM_MATH_LENGTH_ERROR = -2 ,
  ARM_MATH_SIZE_MISMATCH = -3 ,
  ARM_MATH_NANINF = -4 ,
  ARM_MATH_SINGULAR = -5 ,
  ARM_MATH_TEST_FAILURE = -6 ,
  ARM_MATH_DECOMPOSITION_FAILURE = -7 ,
  ARM_MATH_SUCCESS = 0 ,
  ARM_MATH_ARGUMENT_ERROR = -1 ,
  ARM_MATH_LENGTH_ERROR = -2 ,
  ARM_MATH_SIZE_MISMATCH = -3 ,
  ARM_MATH_NANINF = -4 ,
  ARM_MATH_SINGULAR = -5 ,
  ARM_MATH_TEST_FAILURE = -6 ,
  ARM_MATH_DECOMPOSITION_FAILURE = -7
}
 vector types More...
 
enum  arm_math_datatype {
  ARM_MATH_F16 = 16 ,
  ARM_MATH_F32 = 32 ,
  ARM_MATH_F64 = 64 ,
  ARM_MATH_Q7 = 7 ,
  ARM_MATH_Q15 = 15 ,
  ARM_MATH_Q31 = 31 ,
  ARM_MATH_F16 = 16 ,
  ARM_MATH_F32 = 32 ,
  ARM_MATH_F64 = 64 ,
  ARM_MATH_Q7 = 7 ,
  ARM_MATH_Q15 = 15 ,
  ARM_MATH_Q31 = 31
}
 Datatype identifier. More...
 
enum  arm_math_target_arch {
  ARM_MATH_SCALAR_ARCH = 1 ,
  ARM_MATH_DSP_EXTENSIONS_ARCH = 2 ,
  ARM_MATH_HELIUM_ARCH = 3 ,
  ARM_MATH_NEON_ARCH = 4 ,
  ARM_MATH_SCALAR_ARCH = 1 ,
  ARM_MATH_DSP_EXTENSIONS_ARCH = 2 ,
  ARM_MATH_HELIUM_ARCH = 3 ,
  ARM_MATH_NEON_ARCH = 4
}
 Architecture target identifier. More...
 

Functions

template<typename T, typename DST, typename std::enable_if< IsVector< DST >::value &&compatible_element< DST, T >(), bool >::type = true>
void _Fill (DST &v, const T val, vector_length_t l, const Scalar *=nullptr)
 Fill evaluator for scalar architecture.
 
template<typename T, typename DST, typename std::enable_if< must_use_matrix_idx< DST >() &&compatible_element< DST, T >(), bool >::type = true>
void _Fill2D (DST &v, const T val, const vector_length_t rows, const vector_length_t cols, const Scalar *=nullptr)
 Fill2D evaluator for scalar architecture.
 
template<typename DA, typename DB, typename std::enable_if< vector_idx_pair< DA, DB >(), bool >::type = true>
void eval (DA &v, const DB &other, const vector_length_t l, const Scalar *=nullptr)
 Expression evaluator for vector in scalar mode.
 
template<typename DA, typename DB, typename std::enable_if< must_use_matrix_idx_pair< DA, DB >(), bool >::type = true>
void eval2D (DA &v, const DB &other, const vector_length_t rows, const vector_length_t cols, const Scalar *=nullptr)
 2D expression evaluator for scalar architecture
 
template<typename DA, typename DB, typename std::enable_if< vector_idx_pair< DA, DB >(), bool >::type = true>
DotResult< DotFieldResult< DA, DB > > _dot (const DA &a, const DB &b, const vector_length_t l, const Scalar *=nullptr)
 Dot product evaluator for scalar architectuire.
 
template<typename DA, typename DB, typename std::enable_if< vector_idx_pair< DA, DB >(), bool >::type = true>
void _swap (DA &&a, DB &&b, const vector_length_t l, const Scalar *=nullptr)
 Swap evaluator for scalar architecture.
 
constexpr bool test64 (const int M, const int F, const int S)
 Function to identify the template for fixed number representable on 64 bits.
 
constexpr bool test32 (const int M, const int F, const int S)
 Function to identify the template for fixed number representable on 32 bits.
 
constexpr bool test16 (const int M, const int F, const int S)
 Function to identify the template for fixed number representable on 16 bits.
 
constexpr bool test8 (const int M, const int F, const int S)
 Function to identify the template for fixed number representable on 8 bits.
 
constexpr Q63 operator""_q63 (long double x)
 q63 literal
 
constexpr Q31 operator""_q31 (long double x)
 q31 literal
 
constexpr Q15 operator""_q15 (long double x)
 q15 literal
 
constexpr Q7 operator""_q7 (long double x)
 q7 literal
 
template<int MA, int FA, int MB, int FB, bool SA, bool SB>
Q< MA+MB+1, FA+FB, SA||SB > mult (const Q< MA, FA, SA > &a, const Q< MB, FB, SB > &b)
 Multiplication of two fixed point numbers A and B.
 
template<int M, int F, bool S>
Q< M, F, S > operator+ (const Q< M, F, S > &a, const Q< M, F, S > &b)
 Add two fixed point numbers with saturation.
 
template<int M, int F, bool S>
Q< M, F, S > operator- (const Q< M, F, S > &a, const Q< M, F, S > &b)
 Subtract two fixed point numbers with saturation.
 
template<int M, int F, bool S>
Q< M, F, S > operator- (const Q< M, F, S > &a)
 Negate a fixed point number with saturation.
 
template<int M, int F, bool S>
Q< M, F, S > add (const Q< M, F, S > &a, const Q< M, F, S > &b)
 Add two fixed point numbers without saturation.
 
template<int M, int F, bool S>
Q< M, F, S > sub (const Q< M, F, S > &a, const Q< M, F, S > &b)
 Subtract two fixed point numbers without saturation.
 
template<int M, int F, int N, bool S>
Q< M, F, S > operator>> (const Q< M, F, S > &a, std::integral_constant< int, N >) noexcept
 Shift right a fixed point number with a shift known at build time.
 
template<int M, int F, int N, bool S>
Q< M+N, F, S > operator<< (const Q< M, F, S > &a, std::integral_constant< int, N >) noexcept
 Shift left a fixed point number with a shift known at build time.
 
template<int MD = 0, int MS, int F>
Q< MD, F, true > saturate (const Q< MS, F, true > &src, typename std::enable_if<(MD< MS) &&((MD+F)< 31)>::type *=nullptr)
 Saturate a signed fixed point number.
 
template<int MD = 0, int MS, int F>
Q< MD, F, false > saturate (const Q< MS, F, false > &src, typename std::enable_if<(MD< MS) &&((MD+F)< 31)>::type *=nullptr)
 Saturate an unsigned fixed point number.
 
template<int FD, int M, int FS, bool S>
Q< M, FD, S > toFrac (const Q< M, FS, S > &src)
 Convert between different fractional part formats.
 
template<int MD, int MS, int F, bool S>
Q< MD, F, S > accumulate (const Q< MD, F, S > &a, const Q< MS, F, S > &b)
 Accumulate without saturation.
 
Q7 operator* (const Q7 &a, const Q7 &b)
 Multiplication operator.
 
Q15 operator* (const Q15 &a, const Q15 &b)
 Multiplication operator.
 
Q31 operator* (const Q31 &a, const Q31 &b)
 Multiplication operator.
 
template<int M, int F>
bool operator> (const Q< M, F > &a, const Q< M, F > &b)
 Greater-than comparison operator.
 
template<int M, int F>
bool operator< (const Q< M, F > &a, const Q< M, F > &b)
 Less-than comparison operator.
 
template<int M, int F>
bool operator>= (const Q< M, F > &a, const Q< M, F > &b)
 Greater-than-or-equal comparison operator.
 
template<int M, int F>
bool operator<= (const Q< M, F > &a, const Q< M, F > &b)
 Less-than-or-equal comparison operator.
 
template<int M, int F>
bool operator== (const Q< M, F > a, const Q< M, F > b)
 Equality operator.
 
template<int M, int F>
bool operator!= (const Q< M, F > a, const Q< M, F > b)
 Inequality operator.
 
template<int M, int F, bool S>
Q< M, F, S > operator/ (const Q< M, F, S > a, const int32_t b)
 Division operator.
 
template<int M, int F, bool S>
Q< M, F, S > operator+ (const Q< M, F, S > &a)
 No op operator.
 
std::complex< double > from_accumulator (const std::complex< double > &a)
 Convert from accumulator representation.
 
std::complex< double > mac (const std::complex< double > &acc, const std::complex< double > &a, const std::complex< double > &b)
 Multiply and accumulate for this datatype.
 
void accumulate (std::complex< double > &a, const std::complex< double > &b)
 Accumulate.
 
std::complex< double > mult (const std::complex< double > &a, const std::complex< double > &b)
 Multiply.
 
double from_accumulator (const double a)
 Convert from accumulator representation.
 
double mac (const double acc, const double a, const double b)
 Multiply and accumulate for this datatype.
 
void accumulate (double &a, const double &b)
 Accumulate.
 
double mult (const double &a, const double &b)
 Multiply.
 
std::complex< float > from_accumulator (const std::complex< float > &a)
 Convert from accumulator representtaion.
 
std::complex< float > mac (const std::complex< float > &acc, const std::complex< float > &a, const std::complex< float > &b)
 Scalar multiply and accumulate.
 
void accumulate (std::complex< float > &a, const std::complex< float > &b)
 Scalar accumulate.
 
std::complex< float > mult (const std::complex< float > &a, const std::complex< float > &b)
 Scalar multiply.
 
float from_accumulator (const float a)
 Convert from accumulator representtaion.
 
float mac (const float acc, const float a, const float b)
 Scalar multiply and accumulate.
 
void accumulate (float &a, const float &b)
 Scalar accumulate.
 
float mult (const float &a, const float &b)
 Scalar multiply.
 
std::complex< float16_t > from_accumulator (const std::complex< float16_t > a)
 Convert from accumulator datatype.
 
std::complex< float16_t > mac (const std::complex< float16_t > acc, const std::complex< float16_t > a, const std::complex< float16_t > b)
 Multiply and accumulate.
 
void accumulate (std::complex< float16_t > &a, const std::complex< float16_t > &b)
 Accumulate.
 
std::complex< float16_t > mult (const std::complex< float16_t > &a, const std::complex< float16_t > &b)
 Multiply.
 
float16_t from_accumulator (const float16_t a)
 Convert from accumulator datatype.
 
float16_t mac (const float16_t acc, const float16_t a, const float16_t b)
 Multiply and accumulate.
 
void accumulate (float16_t &a, const float16_t &b)
 Accumulate.
 
float16_t mult (float16_t &a, const float16_t &b)
 Multiply.
 
Q31 from_accumulator (const Q< 15, 48 > a)
 Convert from accumulator (with no saturation)
 
Q< 15, 48 > mac (const Q< 15, 48 > acc, const Q31 a, const Q31 b)
 Multiply and accumulate.
 
std::complex< Q31from_accumulator (const std::complex< Q< 15, 48 > > a)
 Convert from accumulator (with no saturation)
 
std::complex< Q< 15, 48 > > mac (const std::complex< Q< 15, 48 > > acc, const std::complex< Q31 > a, const std::complex< Q31 > b)
 Multiply and accumulate.
 
Q15 from_accumulator (const Q< 33, 30 > a)
 Convert from accumulator type.
 
Q< 33, 30 > mac (const Q< 33, 30 > acc, const Q15 a, const Q15 b)
 Multiply and accumulate.
 
std::complex< Q15from_accumulator (const std::complex< Q< 33, 30 > > &a)
 Convert from accumulator type.
 
std::complex< Q< 33, 30 > > mac (const std::complex< Q< 33, 30 > > &acc, const std::complex< Q15 > a, const std::complex< Q15 > b)
 Multiply and accumulate.
 
Q7 from_accumulator (const Q< 17, 14 > a)
 Convert from accumulator with saturation.
 
Q< 17, 14 > mac (const Q< 17, 14 > acc, const Q7 a, const Q7 b)
 Multiply and accumulate.
 
std::complex< Q7from_accumulator (const std::complex< Q< 17, 14 > > &a)
 Convert from accumulator with saturation.
 
std::complex< Q< 17, 14 > > mac (const std::complex< Q< 17, 14 > > acc, const std::complex< Q7 > a, const std::complex< Q7 > b)
 Multiply and accumulate.
 
Q15DSPVector vconst (Q15 val)
 Vector const.
 
Q< 33, 30 > vreduce (const Q< 33, 30 > sum)
 Reduce accumulation value.
 
float32x4_t vconst (const float v)
 Vector constant.
 
float32x4_t vconst_tail (const float v, const mve_pred16_t p0)
 Vector constant with tail.
 
float32x4_t vneg (const float32x4_t a)
 Vector negate.
 
float32x4_t vneg (const float32x4_t a, const mve_pred16_t p0)
 Vector negate with tail.
 
float32x4_t vconjugate (const float32x4_t a)
 Vector conjugate.
 
float32x4_t vconjugate (const float32x4_t a, const mve_pred16_t p0)
 Vector conjugate with tail.
 
float32x4_t vadd (const float32x4_t a, const float32x4_t b)
 Vector + Vector.
 
float32x4_t vadd (const float32x4_t a, const float b)
 Vector + Scalar.
 
float32x4_t vadd (const float a, const float32x4_t b)
 Scalar + Vector.
 
float32x4_t vadd (const float32x4_t a, const float32x4_t b, const mve_pred16_t p0)
 Vector + Vector with tail.
 
float32x4_t vadd (const float32x4_t a, const float b, const mve_pred16_t p0)
 Vector + scalar with tail.
 
float32x4_t vadd (const float a, const float32x4_t b, const mve_pred16_t p0)
 Scalar + vector with tail predicate.
 
float32x4_t vsub (const float32x4_t a, const float32x4_t b)
 Vector - Vector.
 
float32x4_t vsub (const float32x4_t a, const float b)
 Vector - Scalar.
 
float32x4_t vsub (const float a, const float32x4_t b)
 Scalar - Vector.
 
float32x4_t vsub (const float32x4_t a, const float32x4_t b, const mve_pred16_t p0)
 Vector - Vector with predicate.
 
float32x4_t vsub (const float32x4_t a, const float b, const mve_pred16_t p0)
 Vector - Scalar with predicate.
 
float32x4_t vsub (const float a, const float32x4_t b, const mve_pred16_t p0)
 Scalar - Vector with predicate.
 
float32x4_t vmul (const float32x4_t a, const float32x4_t b)
 Vector * Vector.
 
float32x4_t vmul (const float32x4_t a, const float b)
 Vector * Scalar.
 
float32x4_t vmul (const float a, const float32x4_t b)
 Scalar * Vector.
 
float32x4_t vmul (const float32x4_t a, const float32x4_t b, const mve_pred16_t p0)
 Vector * Vector with predicate.
 
float32x4_t vmul (const float32x4_t a, const float b, const mve_pred16_t p0)
 Vector * Scalar with predicate.
 
float32x4_t vmul (const float a, const float32x4_t b, const mve_pred16_t p0)
 Scalar * Vector with predicate.
 
float32x4_t vmacc (const float32x4_t acc, const float32x4_t a, const float32x4_t b)
 Multiply accumulate (Vector * Vector)
 
float32x4_t vmacc (const float32x4_t acc, const float32x4_t a, const float_t b)
 Multiply accumulate (Vector * Scalar)
 
float32x4_t vmacc (const float32x4_t acc, const float32x4_t a, const float32x4_t b, const mve_pred16_t p0)
 Multiply accumulate with predicate (Vector * Vector)
 
float vreduce (const float32x4_t in)
 Vector reduce.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
float32x4_t vload1 (const float32_t *p)
 Vector load with stride.
 
float32x4_t vload1 (const float32_t *p, const index_t stride)
 Vector load with dynamic stride.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
float32x4_t vload1_z (const float32_t *p, const std::size_t nb, const mve_pred16_t p0)
 Vector load with stride and predicate.
 
float32x4_t vload1_z (const float32_t *p, const index_t stride, const std::size_t nb, const mve_pred16_t p0)
 Vector load with dynamic stride and loop predication.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
void vstore1 (float32_t *p, const float32x4_t val)
 Store with stride.
 
void vstore1 (float32_t *p, const index_t stride, const float32x4_t val)
 Store with dynamic stride.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
void vstore1_z (float32_t *p, const float32x4_t val, const std::size_t nb, const mve_pred16_t p0)
 Store with stride and tail predicate.
 
void vstore1_z (float32_t *p, const index_t stride, const float32x4_t val, const std::size_t nb, const mve_pred16_t p0)
 Store with dynamic stride.
 
ComplexVector< float32x4_t > vconst (const std::complex< float > v)
 Vector constant.
 
ComplexVector< float32x4_t > vneg (const ComplexVector< float32x4_t > &a)
 Vector negate.
 
ComplexVector< float32x4_t > vconjugate (const ComplexVector< float32x4_t > &a)
 Vector conjugate.
 
ComplexVector< float32x4_t > vadd (const ComplexVector< float32x4_t > &a, const ComplexVector< float32x4_t > &b)
 Vector + Vector.
 
ComplexVector< float32x4_t > vadd (const ComplexVector< float32x4_t > &a, const std::complex< float > &b)
 Vector + Scalar.
 
ComplexVector< float32x4_t > vadd (const std::complex< float > &a, const ComplexVector< float32x4_t > &b)
 Scalar + Vector.
 
ComplexVector< float32x4_t > vsub (const ComplexVector< float32x4_t > &a, const ComplexVector< float32x4_t > &b)
 Vector - Vector.
 
ComplexVector< float32x4_t > vsub (const ComplexVector< float32x4_t > &a, const std::complex< float > &b)
 Vector - Scalar.
 
ComplexVector< float32x4_t > vsub (const std::complex< float > &a, const ComplexVector< float32x4_t > &b)
 Scalar - Vector.
 
ComplexVector< float32x4_t > vmul (const ComplexVector< float32x4_t > &a, const ComplexVector< float32x4_t > &b)
 Vector * Vector.
 
ComplexVector< float32x4_t > vmul (const ComplexVector< float32x4_t > &a, const std::complex< float > &b)
 Vector * Scalar.
 
ComplexVector< float32x4_t > vmul (const std::complex< float > &a, const ComplexVector< float32x4_t > &b)
 Scalar * Vector.
 
ComplexVector< float32x4_t > vmacc (const ComplexVector< float32x4_t > &acc, const ComplexVector< float32x4_t > &a, const ComplexVector< float32x4_t > &b)
 Multiply accumulate (Vector * Vector)
 
ComplexVector< float32x4_t > vmacc (const ComplexVector< float32x4_t > &acc, const ComplexVector< float32x4_t > &a, const std::complex< float > &b)
 Multiply accumulate (Vector * Scalar)
 
std::complex< float > vreduce (const ComplexVector< float32x4_t > &in)
 Vector reduce.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
ComplexVector< float32x4_t > vload1 (const std::complex< float32_t > *p)
 Vector load with stride.
 
ComplexVector< float32x4_t > vload1 (const std::complex< float32_t > *p, const index_t stride)
 Vector load with dynamic stride.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
void vstore1 (std::complex< float32_t > *p, const ComplexVector< float32x4_t > &val)
 Store with stride.
 
void vstore1 (std::complex< float32_t > *p, const index_t stride, const ComplexVector< float32x4_t > &val)
 Store with dynamic stride.
 
float16x8_t vconst (float16_t v)
 Vector const.
 
float16x8_t vconst_tail (const float16_t v, const mve_pred16_t p0)
 Vector of const with tail predicate.
 
float16x8_t vneg (const float16x8_t a)
 Vector negate.
 
float16x8_t vneg (const float16x8_t a, const mve_pred16_t p0)
 Vector negate with tail predicate.
 
float16x8_t vconjugate (const float16x8_t a)
 Vector conjugate.
 
float16x8_t vconjugate (const float16x8_t a, const mve_pred16_t p0)
 Vector conjugate with tail predicate.
 
float16x8_t vadd (const float16x8_t a, const float16x8_t b)
 Vector + Vector.
 
float16x8_t vadd (const float16x8_t a, const float16_t b)
 Vector + Scalar.
 
float16x8_t vadd (const float16_t a, const float16x8_t b)
 Scalar + Vector.
 
float16x8_t vadd (const float16x8_t a, const float16x8_t b, const mve_pred16_t p0)
 Vector + Vector with tail predicate.
 
float16x8_t vadd (const float16x8_t a, const float16_t b, const mve_pred16_t p0)
 Vector + Scalar with tail predicate.
 
float16x8_t vadd (const float16_t a, const float16x8_t b, const mve_pred16_t p0)
 Scalar + Vector with tail predicate.
 
ComplexVector< float16x8_t > vconst (const std::complex< float16_t > v)
 Vector constant.
 
ComplexVector< float16x8_t > vneg (const ComplexVector< float16x8_t > &a)
 Vector negate.
 
ComplexVector< float16x8_t > vconjugate (const ComplexVector< float16x8_t > &a)
 Vector conjugate.
 
ComplexVector< float16x8_t > vadd (const ComplexVector< float16x8_t > &a, const ComplexVector< float16x8_t > &b)
 Vector + Vector.
 
ComplexVector< float16x8_t > vadd (const ComplexVector< float16x8_t > &a, const std::complex< float16_t > &b)
 Vector + Scalar.
 
ComplexVector< float16x8_t > vadd (const std::complex< float16_t > &a, const ComplexVector< float16x8_t > &b)
 Scalar + Vector.
 
ComplexVector< float16x8_t > vsub (const ComplexVector< float16x8_t > &a, const ComplexVector< float16x8_t > &b)
 Vector - Vector.
 
ComplexVector< float16x8_t > vsub (const ComplexVector< float16x8_t > &a, const std::complex< float16_t > &b)
 Vector - Scalar.
 
ComplexVector< float16x8_t > vsub (const std::complex< float16_t > &a, const ComplexVector< float16x8_t > &b)
 Scalar - Vector.
 
ComplexVector< float16x8_t > vmul (const ComplexVector< float16x8_t > &a, const ComplexVector< float16x8_t > &b)
 Vector * Vector.
 
ComplexVector< float16x8_t > vmul (const ComplexVector< float16x8_t > &a, const std::complex< float16_t > &b)
 Vector * Scalar.
 
ComplexVector< float16x8_t > vmul (const std::complex< float16_t > &a, const ComplexVector< float16x8_t > &b)
 Scalar * Vector.
 
ComplexVector< float16x8_t > vmacc (const ComplexVector< float16x8_t > &acc, const ComplexVector< float16x8_t > &a, const ComplexVector< float16x8_t > &b)
 Multiply accumulate (Vector * Vector)
 
ComplexVector< float16x8_t > vmacc (const ComplexVector< float16x8_t > &acc, const ComplexVector< float16x8_t > &a, const std::complex< float16_t > &b)
 Multiply accumulate (Vector * Scalar)
 
std::complex< float16_t > vreduce (const ComplexVector< float16x8_t > &in)
 Vector reduce.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
ComplexVector< float16x8_t > vload1 (const std::complex< float16_t > *p)
 Vector load with stride.
 
ComplexVector< float16x8_t > vload1 (const std::complex< float16_t > *p, const index_t stride)
 Vector load with dynamic stride.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
void vstore1 (std::complex< float16_t > *p, const ComplexVector< float16x8_t > &val)
 Store with stride.
 
void vstore1 (std::complex< float16_t > *p, const index_t stride, const ComplexVector< float16x8_t > &val)
 Store with dynamic stride.
 
template<int S, typename std::enable_if< S==1, bool >::type = true>
int16x8_t vload1 (const Q15 *p)
 Vector load with stride.
 
Q< 33, 30 > vmacc (const Q< 33, 30 > sum, const int16x8_t vala, const int16x8_t valb)
 Vector accumulate into scalar.
 
template<typename A, typename VA, typename VB, std::size_t... Ns>
vmacc_impl (const A &acc, const VA &a, const VB &b, std::index_sequence< Ns... >)
 Vector accumulate for tuples of vectors.
 
template<typename A, typename ... EA, typename ... EB>
vmacc (const A &acc, const std::tuple< EA... > &a, const std::tuple< EB... > &b)
 Vector accumulate for tuples of vectors.
 
template<typename A, typename VA, typename VB, typename B, std::size_t... Ns>
vmacc_impl (const A &acc, const VA &a, const VB &b, const B p0, std::index_sequence< Ns... >)
 Predicated vector accumulate for tuple.
 
template<typename A, typename B, typename ... EA, typename ... EB>
vmacc (const A &acc, const std::tuple< EA... > &a, const std::tuple< EB... > &b, const B p0)
 Predicated vector accumulate for tuples.
 
template<typename A, std::size_t... Ns>
auto vreduce_impl (const A &acc, std::index_sequence< Ns... >)
 Reduce function for tuple.
 
template<typename ... E>
auto vreduce (const std::tuple< E... > &acc)
 Reduce function for tuples.
 
template<typename A, std::size_t... Ns>
auto from_accumulator_impl (const A &acc, std::index_sequence< Ns... >)
 Convert from accumulator value.
 
template<typename ... E>
auto from_accumulator (const std::tuple< E... > &acc)
 Convert from tuple of accumulator values.
 
template<typename A, typename VA, typename VB, std::size_t... Ns>
mac_impl (const A &acc, const VA &a, const VB &b, std::index_sequence< Ns... >)
 Multiply accumulate for tuple of scalar.
 
template<typename A, typename ... EA, typename ... EB>
mac (const A &acc, const std::tuple< EA... > &a, const std::tuple< EB... > &b)
 Multiply accumulate.
 
template<typename A, typename VA, typename VB, typename B, std::size_t... Ns>
mac_impl (const A &acc, const VA &a, const VB &b, const B p0, std::index_sequence< Ns... >)
 Multiply accumulate for tuple of scalar.
 
template<typename A, typename B, typename ... EA, typename ... EB>
mac (const A &acc, const std::tuple< EA... > &a, const std::tuple< EB... > &b, const B p0)
 Multiply accumulate.
 
template<typename T, typename DST, typename std::enable_if< has_vector_inst< DST >() &&IsVector< DST >::value &&compatible_element< DST, T >() &&has_predicate< DST >(), bool >::type = true>
void _Fill (DST &v, const T val, const vector_length_t l, const Helium *=nullptr)
 Fill evaluator for Helium.
 
template<typename T, typename DST, typename std::enable_if< has_vector_inst< DST >() &&must_use_matrix_idx< DST >() &&compatible_element< DST, T >() &&has_predicate< DST >(), bool >::type = true>
void _Fill2D (DST &v, const T val, const vector_length_t rows, const vector_length_t cols, const Helium *=nullptr)
 Fill2D evaluator for Helium.
 
template<typename DA, typename DB, typename std::enable_if< has_vector_inst< DA >() &&has_vector_inst< DB >() &&vector_idx_pair< DA, DB >() &&same_nb_lanes< DA, DB >() &&has_predicate< DA >(), bool >::type = true>
void eval (DA &v, const DB &other, const vector_length_t l, const Helium *=nullptr)
 Eval function for Helium.
 
template<typename DA, typename DB, typename std::enable_if< has_vector_inst< DA >() &&has_vector_inst< DB >() &&must_use_matrix_idx_pair< DA, DB >() &&same_nb_lanes< DA, DB >() &&(has_predicate< DA >() &&has_predicate< DB >()), bool >::type = true>
void eval2D (DA &v, const DB &other, const vector_length_t rows, const vector_length_t cols, const Helium *=nullptr)
 Eval2D function for Helium.
 
template<class TupType, size_t... I>
void printt (const TupType &_tup, std::index_sequence< I... >)
 Print tuple for debug.
 
template<class... T>
void printt (const std::tuple< T... > &_tup)
 Print tuple.
 
template<typename DA, typename DB, typename std::enable_if< has_vector_inst< DA >() &&has_vector_inst< DB >() &&vector_idx_pair< DA, DB >() &&same_nb_lanes< DA, DB >() &&has_predicate< DotFieldResult< DA, DB > >(), bool >::type = true>
DotResult< DotFieldResult< DA, DB > > _dot (const DA &a, const DB &b, const vector_length_t l, const Helium *=nullptr)
 Dor product for Helium.
 
template<typename DA, typename DB, typename std::enable_if< has_vector_inst< DA >() &&has_vector_inst< DB >() &&vector_idx_pair< DA, DB >() &&has_predicate< DA >(), bool >::type = true>
void _swap (DA &&a, DB &&b, const vector_length_t l, const Helium *=nullptr)
 Swap operator for Helium.