__SIMDd _SIMD_sel_pd(__SIMDd a, __SIMDd b, void** resultPtr) { #ifdef USE_SSE __SIMDd* result = (__SIMDd*) (*resultPtr); return _mm_or_pd(_mm_andnot_pd(*result,a),_mm_and_pd(*result,b)); #elif defined USE_AVX __SIMDd* result = (__SIMDd*) resultPtr; return _mm256_or_pd(_mm256_andnot_pd(*result,a),_mm256_and_pd(*result,b)); #elif defined USE_IBM return vec_sel(a,b,c); #endif }
inline vector4d operator|(const vector4d& lhs, const vector4d& rhs) { return _mm256_or_pd(lhs, rhs); }
inline F64vec4 mask_or(const F64vec4 &l, const F64vec4 &r) { return _mm256_or_pd(l, r); }