32 #include "scalar/vector.h" 34 #if defined(Vc_IMPL_SSE) 35 # include "sse/vector.h" 38 # include "avx/vector.h" 41 namespace Vc_VERSIONED_NAMESPACE
149 #if defined INT64_MAX && defined UINT64_MAX 155 #if defined INT32_MAX && defined UINT32_MAX 161 #if defined INT16_MAX && defined UINT16_MAX 167 #if defined INT8_MAX && defined UINT8_MAX 175 static_assert(double_v::Size ==
Vc_DOUBLE_V_SIZE,
"Vc_DOUBLE_V_SIZE macro defined to an incorrect value");
176 static_assert(float_v::Size ==
Vc_FLOAT_V_SIZE ,
"Vc_FLOAT_V_SIZE macro defined to an incorrect value ");
177 static_assert(int_v::Size ==
Vc_INT_V_SIZE ,
"Vc_INT_V_SIZE macro defined to an incorrect value ");
178 static_assert(uint_v::Size ==
Vc_UINT_V_SIZE ,
"Vc_UINT_V_SIZE macro defined to an incorrect value ");
179 static_assert(short_v::Size ==
Vc_SHORT_V_SIZE ,
"Vc_SHORT_V_SIZE macro defined to an incorrect value ");
180 static_assert(ushort_v::Size ==
Vc_USHORT_V_SIZE,
"Vc_USHORT_V_SIZE macro defined to an incorrect value");
186 #include "common/operators.h" 188 #include "common/simdarray.h" 192 #include "common/alignedbase.h" 193 namespace Vc_VERSIONED_NAMESPACE {
218 #define Vc_VECTOR_DECLARED_ 1 220 #include "scalar/helperimpl.h" 221 #include "scalar/math.h" 222 #include "scalar/simd_cast_caller.tcc" 223 #if defined(Vc_IMPL_SSE) 224 # include "sse/helperimpl.h" 225 # include "sse/math.h" 226 # include "sse/simd_cast_caller.tcc" 228 #if defined(Vc_IMPL_AVX) 229 # include "avx/helperimpl.h" 230 # include "avx/math.h" 231 # include "avx/simd_cast_caller.tcc" 234 #include "common/math.h" 243 #include "common/vectortuple.h" 244 #include "common/where.h" 245 #include "common/iif.h" 247 #ifndef Vc_NO_STD_FUNCTIONS 279 #endif // VC_VECTOR_H_ Vc::Vector< T > frexp(const Vc::Vector< T > &x, Vc::SimdArray< int, size()> *e)
Convert floating-point number to fractional and integral components.
Vc::Vector< T > log2(const Vc::Vector< T > &v)
Vc::Vector< T > exp(const Vc::Vector< T > &v)
The main vector class for expressing data parallelism.
#define Vc_UINT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a uint_v.
Vc::Vector< T > min(const Vc::Vector< T > &x, const Vc::Vector< T > &y)
fixed_size_simd< T, N > floor(const SimdArray< T, N, V, M > &x)
Applies the std:: floor function component-wise and concurrently.
Vc::Vector< T > ldexp(Vc::Vector< T > x, Vc::SimdArray< int, size()> e)
Multiply floating-point number by integral power of 2.
constexpr std::size_t VectorAlignment
Specifies the most conservative memory alignment necessary for Vector<T> objects with default VectorA...
#define Vc_SHORT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a short_v.
Vc::Vector< T > abs(const Vc::Vector< T > &v)
Returns the absolute value of v.
fixed_size_simd< T, N > atan(const SimdArray< T, N, V, M > &x)
Applies the std:: atan function component-wise and concurrently.
Vc::Vector< T > max(const Vc::Vector< T > &x, const Vc::Vector< T > &y)
fixed_size_simd< T, N > atan2(const SimdArray< T, N, V, M > &x, const SimdArray< T, N, V, M > &y)
Applies the std:: atan2 function component-wise and concurrently.
fixed_size_simd< T, N > asin(const SimdArray< T, N, V, M > &x)
Applies the std:: asin function component-wise and concurrently.
Vc::Vector< T > log(const Vc::Vector< T > &v)
AlignedBase< Detail::max(alignof(Vector< float >), alignof(Vector< double >), alignof(Vector< ullong >), alignof(Vector< llong >), alignof(Vector< ulong >), alignof(Vector< long >), alignof(Vector< uint >), alignof(Vector< int >), alignof(Vector< ushort >), alignof(Vector< short >), alignof(Vector< uchar >), alignof(Vector< schar >))> VectorAlignedBase
Helper type to ensure suitable alignment for any Vc::Vector<T> type (using the default VectorAbi)...
Vc::Vector< T > fma(Vc::Vector< T > a, Vc::Vector< T > b, Vc::Vector< T > c)
Multiplies a with b and then adds c, without rounding between the multiplication and the addition...
Vc::Vector< T > round(const Vc::Vector< T > &v)
Returns the closest integer to v; 0.5 is rounded to even.
#define Vc_USHORT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a ushort_v.
Vc::Vector< T > log10(const Vc::Vector< T > &v)
Vector< double > double_v
vector of double precision
#define Vc_DOUBLE_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a double_v.
#define Vc_FLOAT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a float_v.
Vc::Mask< T > isfinite(const Vc::Vector< T > &x)
The main SIMD mask class.
Vc::Mask< T > isnan(const Vc::Vector< T > &x)
#define Vc_INT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a int_v.
constexpr std::size_t MemoryAlignment
Specifies the most conservative memory alignment necessary for aligned loads and stores of Vector typ...
fixed_size_simd< T, N > cos(const SimdArray< T, N, V, M > &x)
Applies the std:: cos function component-wise and concurrently.
fixed_size_simd< T, N > sin(const SimdArray< T, N, V, M > &x)
Applies the std:: sin function component-wise and concurrently.
fixed_size_simd< T, N > trunc(const SimdArray< T, N, V, M > &x)
Applies the std:: trunc function component-wise and concurrently.
Vc::Vector< T > sqrt(const Vc::Vector< T > &v)
Returns the square root of v.
fixed_size_simd< T, N > ceil(const SimdArray< T, N, V, M > &x)
Applies the std:: ceil function component-wise and concurrently.
AlignedBase< Detail::max(Vector< float >::MemoryAlignment, Vector< double >::MemoryAlignment, Vector< ullong >::MemoryAlignment, Vector< llong >::MemoryAlignment, Vector< ulong >::MemoryAlignment, Vector< long >::MemoryAlignment, Vector< uint >::MemoryAlignment, Vector< int >::MemoryAlignment, Vector< ushort >::MemoryAlignment, Vector< short >::MemoryAlignment, Vector< uchar >::MemoryAlignment, Vector< schar >::MemoryAlignment)> MemoryAlignedBase
Helper class to ensure suitable alignment for arrays of scalar objects for any Vc::Vector<T> type (us...