# Intrinsics for Carry-less Multiplication Instruction and Advanced Encryption Standard Instructions

The prototypes for the Carry-less multiplication intrinsic and the Advanced Encryption Standard (AES) intrinsics are defined in the wmmintrin.h file.

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

    #include <immintrin.h>

## Carry-less Multiplication Intrinsic

The single general purpose block encryption intrinsic description is provided below.

__m128i _mm_clmulepi64_si128(__m128i v1, __m128i v2, const int imm8);

Performs a carry-less multiplication of one quadword of `v1` by one quadword of `v2`, and returns the result. The `imm8` value is used to determine which quadwords of `v1` and `v2` should be used.

Corresponding Instruction: PCLMULQDQ

## Advanced Encryption Standard Intrinsics

The AES intrinsics are described below.

__m128i _mm_aesdec_si128(__m128i v, __m128i rkey);

Performs one round of an AES decryption flow using the Equivalent Inverse Cipher operating on a 128-bit data (state) from `v` with a 128-bit round key from `rkey`.

Corresponding Instruction: AESDEC

__m128i _mm_aesdeclast_si128(__m128i v, __m128i rkey);

Performs the last round of an AES decryption flow using the Equivalent Inverse Cipher operating on a 128-bit data (state) from `v` with a 128-bit round key from `rkey`.

Corresponding Instruction: AESDECLAST

__m128i _mm_aesenc_si128(__m128i v, __m128i rkey);

Performs one round of an AES encryption flow operating on a 128-bit data (state) from `v` with a 128-bit round key from `rkey`.

Corresponding Instruction:AESENC

__m128i _mm_aesenclast_si128(__m128i v, __m128i rkey);

Performs the last round of an AES encryption flow operating on a 128-bit data (state) from `v` with a 128-bit round key from `rkey`.

Corresponding Instruction: AESENCLAST

__m128i _mm_aesimc_si128(__m128i v);

Performs the InvMixColumn transformation on a 128-bit round key from`v` and returns the result.

Corresponding Instruction: AESIMC

__m128i _mm_aeskeygenassist_si128(__m128i ckey, const int rcon);

Assists in AES round key generation using an 8-bit Round Constant (RCON) specified in `rcon` operating on 128 bits of data specified in `ckey` and returns the result.

Corresponding Instruction: AESKEYGENASSIST

Parent topic: Intrinsics for Advanced Encryption Standard Implementation