Conversion Operations for Streaming SIMD Extensions

To see the details about an intrinsic, click on that intrinsic name in the following table.

The results of each intrinsic operation are placed in a register. This register is illustrated for each intrinsic with R or R0-R3. R0, R1, R2 and R3 each represent one of the 4 32-bit pieces of the result register.

To see detailed information about an intrinsic, click on that intrinsic name in the following table.

The prototypes for Streaming SIMD Extensions (SSE) intrinsics are in the xmmintrin.h header file.

Intrinsic
Name
Operation Corresponding SSE
Instruction
_mm_cvtss_si32 Convert to 32-bit integer CVTSS2SI
_mm_cvtss_si64 Convert to 64-bit integer CVTSS2SI
_mm_cvtps_pi32 Convert to two 32-bit integers CVTPS2PI
_mm_cvttss_si32 Convert to 32-bit integer CVTTSS2SI
_mm_cvttss_si64 Convert to 64-bit integer CVTTSS2SI
_mm_cvttps_pi32 Convert to two 32-bit integers CVTTPS2PI
_mm_cvtsi32_ss Convert from 32-bit integer CVTSI2SS
_mm_cvtsi64_ss Convert from 64-bit integer CVTSI2SS
_mm_cvtpi32_ps Convert from two 32-bit integers CVTTPI2PS
_mm_cvtpi16_ps Convert from four 16-bit integers composite
_mm_cvtpu16_ps Convert from four 16-bit integers

composite

_mm_cvtpi8_ps Convert from four 8-bit integers composite
_mm_cvtpu8_ps Convert from four 8-bit integers composite
_mm_cvtpi32x2_ps Convert from four 32-bit integers composite
_mm_cvtps_pi16 Convert to four 16-bit integers composite
_mm_cvtps_pi8 Convert to four 8-bit integers composite
_mm_cvtss_f32 Extract composite

int _mm_cvtss_si32(__m128 a)

Convert the lower SP FP value of a to a 32-bit integer according to the current rounding mode.

R
(int)a0
 
__int64 _mm_cvtss_si64(__m128 a)
Convert the lower SP FP value of a to a 64-bit signed integer according to the current rounding mode.
R
(__int64)a0

 

__m64 _mm_cvtps_pi32(__m128 a)

Convert the two lower SP FP values of a to two 32-bit integers according to the current rounding mode, returning the integers in packed form.

R0 R1
(int)a0 (int)a1
 
  int _mm_cvttss_si32(__m128 a)
Convert the lower SP FP value of a to a 32-bit integer with truncation.
R
(int)a0
 
__int64 _mm_cvttss_si64(__m128 a)
Convert the lower SP FP value of a to a 64-bit signed integer with truncation.
R
(__int64)a0

 

__m64 _mm_cvttps_pi32(__m128 a)

Convert the two lower SP FP values of a to two 32-bit integer with truncation, returning the integers in packed form.

R0 R1
(int)a0 (int)a1

 

__m128 _mm_cvtsi32_ss(__m128 a, int b)

Convert the 32-bit integer value b to an SP FP value; the upper three SP FP values are passed through from a.

R0 R1 R2 R3
(float)b a1 a2 a3

 

__m128 _mm_cvtsi64_ss(__m128 a, __int64 b)

Convert the signed 64-bit integer value b to an SP FP value; the upper three SP FP values are passed through from a.

R0 R1 R2 R3
(float)b a1 a2 a3

 

__m128 _mm_cvtpi32_ps(__m128 a, __m64 b)

Convert the two 32-bit integer values in packed form in b to two SP FP values; the upper two SP FP values are passed through from a.

R0 R1 R2 R3
(float)b0 (float)b1 a2 a3

 

__m128 _mm_cvtpi16_ps(__m64 a)

Convert the four 16-bit signed integer values in a to four single precision FP values.

R0 R1 R2 R3
(float)a0 (float)a1 (float)a2 (float)a3

 

__m128 _mm_cvtpu16_ps(__m64 a)

Convert the four 16-bit unsigned integer values in a to four single precision FP values.

R0 R1 R2 R3
(float)a0 (float)a1 (float)a2 (float)a3

 

__m128 _mm_cvtpi8_ps(__m64 a)

Convert the lower four 8-bit signed integer values in a to four single precision FP values.

R0 R1 R2 R3
(float)a0 (float)a1 (float)a2 (float)a3

 

__m128 _mm_cvtpu8_ps(__m64 a)

Convert the lower four 8-bit unsigned integer values in a to four single precision FP values.

R0 R1 R2 R3
(float)a0 (float)a1 (float)a2 (float)a3

 

__m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b)

Convert the two 32-bit signed integer values in a and the two 32-bit signed integer values in b to four single precision FP values.

R0 R1 R2 R3
(float)a0 (float)a1 (float)b0 (float)b1

 

__m64 _mm_cvtps_pi16(__m128 a)

Convert the four single precision FP values in a to four signed 16-bit integer values.

R0 R1 R2 R3
(short)a0 (short)a1 (short)a2 (short)a3

 

__m64 _mm_cvtps_pi8(__m128 a)

Convert the four single precision FP values in a to the lower four signed 8-bit integer values of the result.

R0 R1 R2 R3
(char)a0 (char)a1 (char)a2 (char)a3

 

float _mm_cvtss_f32(__m128 a)

This intrinsic extracts a single precision floating point value from the first vector element of an __m128. It does so in the most effecient manner possible in the context used.