21 #ifndef FUB_EXT_VC_HPP
22 #define FUB_EXT_VC_HPP
24 #include <Vc/vector.h>
25 #include <immintrin.h>
26 #include <xmmintrin.h>
30 template <
typename Abi>
31 Vc::Vector<double, Abi>
mask_load(
const double* p, Vc::Mask<double, Abi> mask) {
32 if constexpr (std::is_same_v<Abi, Vc::VectorAbi::Sse>) {
34 __m128i native_mask = *
reinterpret_cast<__m128i*
>(&mask);
35 __m128d xmm = _mm_maskload_pd(p, native_mask);
36 Vc::Vector<double, Abi> x(xmm);
39 Vc::Vector<double, Abi> x;
46 }
else if constexpr (std::is_same_v<Abi, Vc::VectorAbi::Avx>) {
47 __m256i native_mask = *
reinterpret_cast<__m256i*
>(&mask);
48 __m256d ymm = _mm256_maskload_pd(p, native_mask);
49 Vc::Vector<double, Abi> x(ymm);
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
Vc::Vector< double, Abi > mask_load(const double *p, Vc::Mask< double, Abi > mask)
Definition: Vc.hpp:31