# Intrinsics for Typecast Operations

The prototypes for Intel® Advanced Vector Extensions 512 (Intel® AVX-512) intrinsics are located in the zmmintrin.h header file.
To use these intrinsics, include the immintrin.h file as follows:

    #include <immintrin.h>

### Note

These intrinsics are used for compilation and do not generate any instructions.

Intrinsic Name | Operation | Corresponding Intel® AVX-512 Instruction
--- | --- | ---
`_mm512_castpd512_pd128` | Casts from larger type to smaller type. | None.
`_mm512_castps512_ps128` | Casts from larger type to smaller type. | None.
`_mm512_castsi512_si128` | Casts from larger type to smaller type. | None.
`_mm512_castpd512_pd256` | Casts from larger type to smaller type. | None.
`_mm512_castps512_ps256` | Casts from larger type to smaller type. | None.
`_mm512_castsi512_si256` | Casts from larger type to smaller type. | None.
`_mm512_castpd256_pd512` | Casts from smaller type to larger type. | None.
`_mm512_castps128_ps512` | Casts from smaller type to larger type. | None.
`_mm512_castsi128_si512` | Casts from smaller type to larger type. | None.
`_mm512_castpd256_pd512` | Casts from smaller type to larger type. | None.
`_mm512_castps256_ps512` | Casts from smaller type to larger type. | None.
`_mm512_castsi256_si512` | Casts from smaller type to larger type. | None.
`_mm512_castpd_ps` | Casts from smaller type to larger type. | None.
`_mm512_castpd_si512` | Casts from smaller type to larger type. | None.
`_mm512_castps_pd` | Casts from smaller type to larger type. | None.
`_mm512_castps_si512` | Casts from smaller type to larger type. | None.
`_mm512_castsi512_pd` | Casts from smaller type to larger type. | None.
`_mm512_castsi512_ps` | Casts from smaller type to larger type. | None.

variable | definition
--- | ---
a | vector element for casting operation

_mm512_castpd_ps

    extern __m512 __cdecl _mm512_castpd_ps(__m512d a);

Casts vector a of type `__m512d` to type `__m512`, with no change in value.

_mm512_castpd_si512

    extern __m512i __cdecl _mm512_castpd_si512(__m512d a);

Casts vector a of type `__m512d` to type `__m512i`, with no change in value.

_mm512_castps_pd

    extern __m512d __cdecl _mm512_castps_pd(__m512 a);

Casts vector a of type `__m512` to type `__m512d`, with no change in value.

_mm512_castps_si512

    extern __m512i __cdecl _mm512_castps_si512(__m512 a);

Casts vector a of type `__m512` to type `__m512i`, with no change in value.

_mm512_castpd128_pd512

    extern __m512d __cdecl _mm512_castpd128_pd512(__m128d a);

Casts vector a of type `__m128d` to type `__m512d`.

### Note

The upper 384-bits of the result are undefined.

_mm512_castpd256_pd512

    extern __m512d __cdecl _mm512_castpd256_pd512(__m256d a);

Casts vector a of type `__m256d` to type `__m512d`.

### Note

The upper 256-bits of the result are undefined.

_mm512_castpd512_pd128

    extern __m128d __cdecl _mm512_castpd512_pd128(__m512d a);

Casts vector a of type `__m512d` to type `__m128d`.

_mm512_castps512_ps128

    extern __m128 __cdecl _mm512_castps512_ps128(__m512 a);

Casts vector a of type `__m512` to type `__m128`.

_mm512_castpd512_pd256

    extern __m256d __cdecl _mm512_castpd512_pd256(__m512d a);

Casts vector a of type `__m512d` to type `__m256d`.

_mm512_castps128_ps512

    extern __m512 __cdecl _mm512_castps128_ps512(__m128 a);

Casts vector a of type `__m128` to type `__m512`.

### Note

The upper 384-bits of the result are undefined.

_mm512_castps256_ps512

    extern __m512 __cdecl _mm512_castps256_ps512(__m256 a);

Casts vector a of type `__m256` to type`__m512`.

### Note

The upper 256-bits of the result are undefined.

_mm512_castps512_ps256

    extern __m256 __cdecl _mm512_castps512_ps256(__m512 a);

Casts vector a of type `__m512` to type `__m256`.

_mm512_castsi128_si512

    extern __m512i __cdecl _mm512_castsi128_si512(__m128i a);

Casts vector a of type `__m128i` to type `__m512i`.

### Note

The upper 384-bits of the result are undefined.

_mm512_castsi256_si512

    extern __m512i __cdecl _mm512_castsi256_si512(__m256i a);

Casts vector a of type `__m256i` to type `__m512i`.

### Note

The upper 256-bits of the result are undefined.

_mm512_castsi512_pd

    extern __m512d __cdecl _mm512_castsi512_pd(__m512i a);

Casts vector a of type `__m512i` to type `__m512d`, with no change in value.

_mm512_castsi512_ps

    extern __m512 __cdecl _mm512_castsi512_ps(__m512i a);

Casts vector a of type `__m512i` to type `__m512`, with no change in value.

_mm512_castsi512_si128

    extern __m128i __cdecl _mm512_castsi512_si128(__m512i a);

Casts vector a of type `__m512d` to type `__m256d`.

_mm512_castsi512_si256

    extern __m256i __cdecl _mm512_castsi512_si256(__m512i a);

Casts vector a of type `__m512i` to type `__m256i`.

Parent topic: Intrinsics for Intel® Advanced Vector Extensions 512 (Intel® AVX-512) Instructions