_mm_cvt_si2ss
TOC
Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

_mm_cvt_si2ss

Microsoft Specific

Generates the Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value (cvtsi2ss) instruction, which converts the 32-bit integer b to a single-precision floating-point value using the rounding behavior specified by the rounding control bits in MXCSR.

__m128 _mm_cvt_si2ss( 
   __m128 a, 
   int b 
);

[in] a

An __m128 structure containing four single-precision floating point values.

[in] b

A 32-bit integer to be converted.

An __m128 structure with the result of the conversion in the first element and the remaining elements copied from a.

Intrinsic

Architecture

__mm_cvt_si2ss

x86 with SSE2, x64

Header file <intrin.h>

The default rounding mode is round to nearest, rounding to the even number if the decimal part is 0.5. The result is placed in the first doubleword of the result; the other three doublewords of the result are copied from a. The __m128 structure represents an XMM register, so this intrinsic allows a value from system memory to be moved into the register.

This routine is only available as an intrinsic.

// _mm_cvt_si2ss.cpp
// processor: x86, x64
#include <intrin.h>
#include <stdio.h>

#pragma intrinsic(_mm_cvt_si2ss)
// _mm_empty is only available and only required on x86
#ifdef _M_IX86
#pragma intrinsic( _mm_empty)
#endif

int main()
{
    __m128 a;
    int b = 100;

    float af[4] = { 101.25, 200.75,300.5, 400.5 };

    // Load a with the floating point values.
    // The values will be copied to the XMM registers.
    a = _mm_loadu_ps(af);

    // Copy b into the first element of a
    a = _mm_cvt_si2ss(a, b);

    // Switch back to floating point (x86 only).
#ifdef _M_IX86
    _mm_empty();
#endif

    // Print out the values in a
    printf_s("%lf %lf %lf %lf\n", a.m128_f32[0], a.m128_f32[1],
             a.m128_f32[2], a.m128_f32[3] );
}
100.000000 200.750000 300.500000 400.500000
Show:
© 2016 Microsoft