32 #include "scalar/vector.h" 35 # include "avx/vector.h" 36 #elif defined(Vc_IMPL_SSE) 37 # include "sse/vector.h" 40 #if defined(Vc_IMPL_MIC) 41 # include "mic/vector.h" 44 namespace Vc_VERSIONED_NAMESPACE
152 #if defined INT64_MAX && defined UINT64_MAX 158 #if defined INT32_MAX && defined UINT32_MAX 164 #if defined INT16_MAX && defined UINT16_MAX 170 #if defined INT8_MAX && defined UINT8_MAX 178 static_assert(double_v::Size ==
Vc_DOUBLE_V_SIZE,
"Vc_DOUBLE_V_SIZE macro defined to an incorrect value");
179 static_assert(float_v::Size ==
Vc_FLOAT_V_SIZE ,
"Vc_FLOAT_V_SIZE macro defined to an incorrect value ");
180 static_assert(int_v::Size ==
Vc_INT_V_SIZE ,
"Vc_INT_V_SIZE macro defined to an incorrect value ");
181 static_assert(uint_v::Size ==
Vc_UINT_V_SIZE ,
"Vc_UINT_V_SIZE macro defined to an incorrect value ");
182 static_assert(short_v::Size ==
Vc_SHORT_V_SIZE ,
"Vc_SHORT_V_SIZE macro defined to an incorrect value ");
183 static_assert(ushort_v::Size ==
Vc_USHORT_V_SIZE,
"Vc_USHORT_V_SIZE macro defined to an incorrect value");
189 #include "common/operators.h" 191 #include "common/simdarray.h" 195 #include "common/alignedbase.h" 196 namespace Vc_VERSIONED_NAMESPACE {
221 #define Vc_VECTOR_DECLARED_ 1 223 #include "scalar/helperimpl.h" 224 #include "scalar/math.h" 225 #include "scalar/simd_cast_caller.tcc" 226 #if defined(Vc_IMPL_SSE) 227 # include "sse/helperimpl.h" 228 # include "sse/math.h" 229 # include "sse/simd_cast_caller.tcc" 231 #if defined(Vc_IMPL_AVX) 232 # include "avx/helperimpl.h" 233 # include "avx/math.h" 234 # include "avx/simd_cast_caller.tcc" 236 #if defined(Vc_IMPL_MIC) 237 # include "mic/helperimpl.h" 238 # include "mic/math.h" 239 # include "mic/simd_cast_caller.tcc" 242 #include "common/math.h" 251 #include "common/vectortuple.h" 252 #include "common/algorithms.h" 253 #include "common/where.h" 254 #include "common/iif.h" 256 #ifndef Vc_NO_STD_FUNCTIONS 286 #endif // VC_VECTOR_H_ SimdArray< T, N, V, M > ceil(const SimdArray< T, N, V, M > &x)
Applies the std:: ceil function component-wise and concurrently.
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)
SimdArray< T, N, V, M > floor(const SimdArray< T, N, V, M > &x)
Applies the std:: floor function component-wise and concurrently.
The main vector class for expressing data parallelism.
Vc::Vector< T > sin(const Vc::Vector< T > &v)
Vc::Vector< T > cos(const Vc::Vector< T > &v)
#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)
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.
Vc::Vector< T > max(const Vc::Vector< T > &x, const Vc::Vector< T > &y)
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.
SimdArray< T, N, V, M > trunc(const SimdArray< T, N, V, M > &x)
Applies the std:: trunc function component-wise and concurrently.
#define Vc_FLOAT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a float_v.
Vc::Vector< T > atan2(const Vc::Vector< T > &y, const Vc::Vector< T > &x)
Calculates the angle given the lengths of the opposite and adjacent legs in a right triangle...
Vc::Vector< T > atan(const Vc::Vector< T > &v)
Vc::Vector< T > asin(const Vc::Vector< T > &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...
Vc::Vector< T > sqrt(const Vc::Vector< T > &v)
Returns the square root of v.
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...