You can define the following macros to enable/disable specific features:
If you want to force compilation against a specific implementation of the vector classes you can set the macro Vc_IMPL to either Scalar
, SSE
, SSE2
, SSE3
, SSSE3
, SSE4_1
, SSE4_2
, AVX
, AVX2
, or MIC
. Additionally, you may (should) append +XOP
, +FMA4
, +FMA
, +SSE4a
, +F16C
, +BMI2
, and/or +POPCNT
. For example, -D Vc_IMPL=SSE+XOP+FMA4
tells the Vc library to use the best SSE instructions available for the target (according to the information provided by the compiler) and additionally use XOP and FMA4 instructions (this might be a good choice for some AMD processors, which support AVX but may perform slightly better if only SSE widths are used). Setting Vc_IMPL
to SSE
forces the SSE instruction set, but lets the headers figure out the exact SSE revision to use, or, if that fails, uses SSE4.1.
If you do not specify Vc_IMPL
the Vc headers determine the implementation from compiler-specific pre-defined macros (which in turn are determined from compiler flags that determine the target micro-architecture, such as -mavx2
).
If this macro is defined, the Vc math functions are not imported into the std
namespace. They are still available in the Vc namespace and through ADL.
Define this macro to disable the safety check for the libVc version. The check generates a small check for every object file, which is called at startup, i.e. before the main function.
If this macro is defined Vc will assert correct alignment for all objects that require correct alignment. This can be very useful to debug crashes resulting from misaligned memory accesses. This check will introduce a significant overhead.
Define this macro to enable bitwise operators (&, |, ^, ~) on floating-point vectors. Since these operators are not provided for the builtin floating-point types, the default is to not provide them for SIMD vector types as well.