_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 
);

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

See Also

Reference

Compiler Intrinsics