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
288 #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 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 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 type (us...