_mm_cvt_ps2pi

Microsoft Specific

Generates the Convert Packed Single Precision Floating Point Values to Packed Doubleword Integers (cvtps2pi) instruction, which converts the floating point values in the first two elements in the __m128 structure valueto 32-bit integers and returns an __m64 structure containing the two 32-bit integers.

__m64 _mm_cvt_ps2pi( 
   __m128 value 
);

Parameters

  • [in] value
    An __m128 structure containing four single-precision floating point values.

Return Value

An __m64 structure containing the two 32-bit integers resulting from the conversion.

Requirements

Intrinsic

Architecture

__mm_cvt_ps2pi

x86 with SSE2

Header file <intrin.h>

Remarks

Rounding occurs according the rounding control bits of the MXCSR register. The default rounding mode is round-to-nearest, rounding to the even number if the decimal part is 0.5. If an overflow occurs, 0x80000000 is placed in the appropriate elements of the return value. The __m128 structure represents an XMM register and the __m64 structure represents an MMX register, so the instruction generated does not involve system memory.

This routine is only available as an intrinsic.

Example

// _mm_cvt_ps2pi.cpp
// processor: x86
#include <intrin.h>
#include <stdio.h>

#pragma intrinsic(_mm_cvt_ps2pi)

int main()
{
    __m128 a;
    __m64 b;

    float af[4] = { 101.5, 200.5,300.5, 400.5 };

    // Load a with the floating point values
    // _mm_loadu_ps allowed unaligned addresses
    a = _mm_loadu_ps(af);

    //
    b = _mm_cvt_ps2pi(a);

   _mm_empty();

    // Print out the values in b
    printf_s("%d %d\n", b.m64_i32[0], b.m64_i32[1]);
}

102 200

See Also

Concepts

__m64

__m128d

Compiler Intrinsics