AESDEC

Realizar una ronda de un flujo de descifrado AES

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 38 DE /rAESDEC xmm1, xmm2/m128AValidoValidoRealice una ronda de un flujo de descifrado AES, utilizando el Cipher Inverso Equivalente, utilizando uno de datos de 128 bits (estado) de xmm1 con una clave redondo de 128 bits de xmm2/m128.
VEX.128.66.0F38.WIG DE /rVAESDEC xmm1, xmm2, xmm3/m128BValidoValidoRealizar una ronda de un flujo de descifrado AES, utilizando AVX el Cipher Inverso Equivalente, utilizando uno de datos de 128 bits (estado) de xmm2 con una clave redondo de 128 bits de xmm3/m128; almacenar el resultado en xmm1.
VEX.256.66.0F38.WIG DE /rVAESDEC ymm1, ymm2, ymm3/m256BValidoValidoRealizar una ronda de un flujo de descifrado AES, utilizando el Cipher Inverso Equivalente, utilizando dos datos de 128 bits (estado) de ymm2 con dos claves redondo de 128 bits de ymm3/m256; almacenar el resultado en ymm1.
EVEX.128.66.0F38.WIG DE /rVAESDEC xmm1, xmm2, xmm3/m128CValidoValidoRealizar una ronda de un flujo de descifrado AES, utilizando (AVX512VL OR AVX10.1) el Cipher Inverso Equivalente, utilizando uno de datos de 128 bits (estado) de xmm2 con una clave redondo de 128 bits de xmm3/m128; almacenar el resultado en xmm1.
EVEX.256.66.0F38.WIG DE /rVAESDEC ymm1, ymm2, ymm3/m256CValidoValidoRealizar una ronda de un flujo de descifrado AES, utilizando (AVX512VL OR AVX10.1) el Cipher Inverso Equivalente, utilizando dos datos de 128 bits (estado) de ymm2 con dos claves redondo de 128 bits de ymm3/m256; almacenar el resultado en ymm1.
EVEX.512.66.0F38.WIG DE /rVAESDEC zmm1, zmm2, zmm3/m512CValidoValidoRealizar una ronda de un flujo de descifrado AES, utilizando (AVX512F OR AVX10.1) el Cipher Inverso Equivalente, utilizando cuatro datos de 128 bits (estado) de zmm2 con cuatro claves redondo de 128 bits de zmm3/m512; almacenar el resultado en zmm1.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

A

  1. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

B

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. vex.vvvv lecturaprefijo VEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

C

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. evex.vvvv lecturaprefijo EVEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Tupla: Full Mem

Coste medido

Cargando las mediciones de arch-data...

Descripción

Esta instrucción realiza una sola ronda del flujo de descifrado AES utilizando el Cipher Inverso Equivalente, utilizando uno/dos/cuatro (dependiendo de la longitud vectorial) datos de 128 bits (estado) del primer operando de origen con uno/dos/cuatro (dependiendo de la longitud vectorial) ronda clave(s) del segundo operando de origen, y almacena el resultado en el operando de destino.

Utilice la instrucción AESDEC para todos menos la última ronda de desciframiento. Para la última ronda de descifrado, utilice la instrucción AESDE- CLAST.

VEX y EVEX versiones codificadas de la instrucción permiten la operación 3-operando (no destructiva). El legado versiones codificadas de la instrucción requiere que el primer operando de origen y el operando de destino sean los mismos y deben ser un registro XMM.

La forma codificada EVEX de esta instrucción no soporta la supresión de falla de memoria.

Operación

AESDEC
STATE := SRC1;
RoundKey := SRC2;
STATE := InvShiftRows( STATE );
STATE := InvSubBytes( STATE );
STATE := InvMixColumns( STATE );
DEST[127:0] := STATE XOR RoundKey;
DEST[MAXVL-1:128] (Unmodified)

VAESDEC (128b and 256b VEX Encoded Versions)
(KL,VL) = (1,128), (2,256)
FOR i = 0 to KL-1:

    STATE := SRC1.xmm[i]
    RoundKey := SRC2.xmm[i]
    STATE := InvShiftRows( STATE )
    STATE := InvSubBytes( STATE )
    STATE := InvMixColumns( STATE )
    DEST.xmm[i] := STATE XOR RoundKey
DEST[MAXVL-1:VL] := 0

VAESDEC (EVEX Encoded Version)
(KL,VL) = (1,128), (2,256), (4,512)
FOR i = 0 to KL-1:

    STATE := SRC1.xmm[i]
    RoundKey := SRC2.xmm[i]
    STATE := InvShiftRows( STATE )
    STATE := InvSubBytes( STATE )
    STATE := InvMixColumns( STATE )
    DEST.xmm[i] := STATE XOR RoundKey
DEST[MAXVL-1:VL] :=0

Intel C/C++ compilador intrínseco

(V)AESDEC __m128i _mm_aesdec (__m128i, __m128i) VAESDEC __m256i _mm256_aesdec_epi128(__m256i, __m256i);
VAESDEC __m512i _mm512_aesdec_epi128(__m512i, __m512i);

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Tabla 2-21, "Tipo 4 Condiciones de Excepción".

EVEX-encoded: Ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".

Fuentes