Perform the AES "Inverse Mix Columns" Transformation

Encoding

EncodingOperand 1Operand 2
rmModRM.reg[w]ModRM.r/m[r]

Description

The (V)AESIMC instruction performs the "inverse mix columns" transformation on a round key stored in the source operand. The result is stored in in the destination operand.

This instruction should be applied to the expanded AES round keys (excepting the first and last) to prepare them for decryption using the "Equivalent Inverse Cipher" (see FIPS 197).

VEX.vvvv is reserved and must be b1111 (0 inverted). Any other values will raise a #UD exception. All forms except the legacy SSE one will zero the upper (untouched) bits.

Operation

public void AESIMC(SimdU128 dest, SimdU128 src)
{
    dest[0] = AesInvMixColumns(src[0]);
    // dest[1..] is unmodified
}

public void VAESIMC_Vex128(SimdU128 dest, SimdU128 src)
{
    dest[0] = AesInvMixColumns(src[0]);
    dest[1..] = 0;
}

Intrinsics

Exceptions

SIMD Floating-Point

None.

Other Exceptions

VEX Encoded Form: See Type 4 Exception Conditions.

#UD
  • If VEX.vvvv is not 1111b.