_mm_blendv_pd
Microsoft Specific
Emits the Streaming SIMD Extensions 4 (SSE4) instruction blendvpd. This function blends packed double precision floating point values.
__m128d _mm_blendv_pd( __m128d a, __m128d b, __m128d mask );
#include <stdio.h>
#include <smmintrin.h>
int main () {
__m128d a, b, mask;
unsigned __int64 maskValue = 0x8000000000000000;
mask.m128d_f64[1] = *reinterpret_cast<double *>(&maskValue);
mask.m128d_f64[0] = 0x0000000000000000;
a.m128d_f64[1] = -500.17;
a.m128d_f64[0] = -21734.56;
b.m128d_f64[1] = 3.141592;
b.m128d_f64[0] = 10.5;
__m128d res = _mm_blendv_pd( a, b, mask );
printf_s("Original a: %14f %14f\nOriginal b: %14f %14f\n",
a.m128d_f64[1], a.m128d_f64[0],
b.m128d_f64[1], b.m128d_f64[0]);
printf_s("Result res: %14f %14f\n",
res.m128d_f64[1], res.m128d_f64[0]);
return 0;
}