stringtranslate.com

prefijo EVEX

El prefijo EVEX (extensión vectorial mejorada) y el esquema de codificación correspondiente es una extensión de la arquitectura del conjunto de instrucciones x86 (IA-32) de 32 bits y x86-64 ( AMD64) de 64 bits . EVEX se basa en el prefijo MVEX [1] utilizado por el procesador Knights Corner , pero no debe confundirse con él .

El esquema EVEX es una extensión de 4 bytes del esquema VEX que admite el conjunto de instrucciones AVX-512 y permite direccionar nuevos registros ZMM de 512 bits y nuevos registros de máscara de operandos de 64 bits.

Con Advanced Performance Extensions , el prefijo EVEX extendido redefine la semántica de varios bits de carga útil. [2]

Características

La codificación EVEX puede direccionar 8 registros de máscara de operandos, 16 registros de uso general y 32 registros vectoriales en modo de 64 bits (de lo contrario, 8 de uso general y 8 vectoriales) y puede admitir hasta 4 operandos.

Al igual que el esquema de codificación VEX, el prefijo EVEX unifica los prefijos de códigos de operación y códigos de escape existentes, el direccionamiento de memoria y los modificadores de longitud de operandos del conjunto de instrucciones x86.

Las siguientes características se transfieren del esquema VEX:

EVEX también amplía VEX con capacidades adicionales:

Por ejemplo, el esquema de codificación EVEX permite la adición de vectores condicionales en forma de

VADDPS zmm1 {k1}{z}, zmm2, zmm3

donde el modificador {k1} junto al operando de destino codifica el uso del registro de máscara de operación k1 para procesamiento condicional y actualizaciones al destino, y el modificador {z} (codificado por EVEX.z) proporciona los dos tipos de enmascaramiento (fusión y puesta a cero), con fusionándose de forma predeterminada cuando no se adjunta ningún modificador.

Descripción técnica

El esquema de codificación EVEX utiliza un prefijo de código que consta de 4 bytes ; el primer byte es siempre 62h y deriva de un código de operación no utilizado de la instrucción BOUND de 32 bits, que no se admite en el modo de 64 bits. [3]

El byte ModR/M especifica un operando (siempre un registro) con el campo reg , y el segundo operando está codificado con los campos mod y r/m , especificando un registro o una ubicación en la memoria. El direccionamiento de base más índice y escala más índice requiere el byte SIB, que codifica un factor de escala de 2 bits , así como un índice de 3 bits y registros base de 3 bits . Dependiendo del modo de direccionamiento, el campo Disp8/Disp16/Disp32 puede seguir con un desplazamiento que debe agregarse a la dirección.

El prefijo EVEX conserva los campos introducidos en el prefijo VEX :

Nuevas funciones de los campos existentes:

Hay varios campos de bits nuevos:

La codificación del prefijo EVEX es la siguiente:

La siguiente tabla enumera posibles combinaciones de direccionamiento de registros (el bit 4 siempre es cero al codificar los 16 registros de uso general):

Algunas instrucciones de combinación AVX codificadas en VEX tienen 4 operandos. Para adaptarse a esto, VEX tiene el modo de direccionamiento IS4, que codifica el cuarto operando (un registro vectorial) en bits Imm8[7:4] de la constante inmediata. Instrucciones de mezcla similares codificadas en EVEX tienen su cuarto operando en un registro de máscara. Ninguna instrucción codificada en EVEX utiliza codificación en modo de direccionamiento IS4.

Prefijo EVEX extendido

Las extensiones de rendimiento avanzado de Intel introducen varias variantes nuevas de la carga útil de 3 bytes en el prefijo EVEX, que se utilizan para codificar los registros GPR extendidos R16-R31 y nuevas instrucciones condicionales.

Extensión EVEX de las instrucciones EVEX:

Extensión EVEX de instrucciones VEX:

Extensión EVEX para instrucciones heredadas:

Prefijo EVEX para CMP y PRUEBA condicionales:

Cuando los nuevos registros EGPR y destinos de operandos pueden codificarse mediante prefijos EVEX y REX2 extendidos, se prefiere este último.

Referencias

  1. ^ Manual de referencia de la arquitectura del conjunto de instrucciones del coprocesador Intel® Xeon Phi ™ (PDF) . 7 de septiembre de 2012. p. 42. 327364-001. Archivado (PDF) desde el original el 4 de agosto de 2021.
  2. ^ Especificación de arquitectura Intel® Advanced Performance Extensions (Intel® APX) (PDF) (2 ed.). Agosto de 2023. pág. 21. 355828-002US. Archivado (PDF) desde el original el 10 de septiembre de 2023.
  3. ^ Intel Corporation (julio de 2013). "Referencia de programación de extensiones del conjunto de instrucciones de la arquitectura Intel".