Intel® C++ Compiler Classic Developer Guide and Reference

ID 767249
Date 7/13/2023
Public
Document Table of Contents

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 fromv 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