32#include "scalar/vector.h"
34#if defined(Vc_IMPL_SSE)
35# include "sse/vector.h"
38# include "avx/vector.h"
41namespace 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"
193namespace 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
The main SIMD mask class.
The main vector class for expressing data parallelism.
Vc::Vector< T > ldexp(Vc::Vector< T > x, Vc::SimdArray< int, size()> e)
Multiply floating-point number by integral power of 2.
Vc::Vector< T > max(const Vc::Vector< T > &x, const Vc::Vector< T > &y)
Vc::Vector< T > log(const Vc::Vector< T > &v)
Vc::Vector< T > log2(const Vc::Vector< T > &v)
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 > 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 > abs(const Vc::Vector< T > &v)
Returns the absolute value of v.
Vc::Vector< T > exp(const Vc::Vector< T > &v)
Vc::Vector< T > log10(const Vc::Vector< T > &v)
Vc::Vector< T > sqrt(const Vc::Vector< T > &v)
Returns the square root of v.
Vc::Mask< T > isnan(const Vc::Vector< T > &x)
Vc::Vector< T > min(const Vc::Vector< T > &x, const Vc::Vector< T > &y)
Vc::Vector< T > round(const Vc::Vector< T > &v)
Returns the closest integer to v; 0.5 is rounded to even.
Vc::Mask< T > isfinite(const Vc::Vector< T > &x)
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 > trunc(const SimdArray< T, N, V, M > &x)
Applies the std::trunc function component-wise and concurrently.
fixed_size_simd< T, N > ceil(const SimdArray< T, N, V, M > &x)
Applies the std::ceil 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 > cos(const SimdArray< T, N, V, M > &x)
Applies the std::cos function component-wise and concurrently.
fixed_size_simd< T, N > atan(const SimdArray< T, N, V, M > &x)
Applies the std::atan function component-wise and concurrently.
fixed_size_simd< T, N > floor(const SimdArray< T, N, V, M > &x)
Applies the std::floor 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.
#define Vc_SHORT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a short_v.
#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.
#define Vc_INT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a int_v.
#define Vc_USHORT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a ushort_v.
#define Vc_UINT_V_SIZE
An integer (for use with the preprocessor) that gives the number of entries in a uint_v.
constexpr std::size_t MemoryAlignment
Specifies the most conservative memory alignment necessary for aligned loads and stores of Vector typ...
constexpr std::size_t VectorAlignment
Specifies the most conservative memory alignment necessary for Vector<T> objects with default VectorA...
Helper class to ensure a given alignment.