# Details About Intrinsics for Half Floats

There are four intrinsics for converting half-floats to 32-bit floats and 32-bit floats to half-floats. The prototypes for these half-float conversion intrinsics are in the emmintrin.h file.

To use these intrinsics, include the immintrin.h file as follows:

    #include <immintrin.h>

float _cvtsh_ss(unsigned short x);

This intrinsic takes a half-float value, `x`, and converts it to a 32-bit float value, which is returned.

unsigned short _cvtss_sh(float x, int imm);

This intrinsic takes a 32-bit float value, `x`, and converts it to a half-float value, which is returned.

__m128 _mm_cvtph_ps(__m128i x);

This intrinsic takes four packed half-float values and converts them to four 32-bit float values, which are returned. The upper 64-bits of `x` are ignored. The lower 64-bits are taken as four 16-bit float values for conversion.

__m128i _mm_cvtps_ph(_m128 x, int imm);

This intrinsic takes four packed 32-bit float values and converts them to four half-float values, which are returned. The upper 64-bits in the returned result are all zeros. The lower 64-bits contain the four packed 16-bit float values.

Parent topic: Intrinsics for Converting Half Floats