Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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
);
Parameters
[in] a
A 128-bit parameter that contains two 64-bit floating point values to be blended.[in] b
A 128-bit parameter that contains two 64-bit floating point values to be blended.[in] mask
A 128-bit mask that selects components for the blend operation.
Return value
r0 := (mask0 & 0x8000000000000000) ? b0 : a0
r1 := (mask1 & 0x8000000000000000) ? b1 : a1
Requirements
Intrinsic |
Architecture |
---|---|
_mm_blendv_pd |
x86, x64 |
Header file <smmintrin.h>
Remarks
r0, a0, b0, and mask0 are the low order 64 bits of return value r and parameters a, b, and mask. r1, a1, b1, and mask1 are the high order 64 bits of return value r and parameters a, b, and mask.
Before using this intrinsic, software must ensure that the processor supports the instruction.
Example
#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;
}
Original a: -500.170000 -21734.560000 Original b: 3.141592 10.500000 Result res: 3.141592 -21734.560000