Compartir a través de


OPTION AVXENCODING

Selecciona la codificación preferida de las instrucciones AVX.

Sintaxis

OPTION AVXENCODING:preferencia

Fondo

Las instrucciones Intel AVX y AVX-512 se codifican de forma diferente a otras instrucciones de arquitectura de Intel. En lugar de depender de bytes de prefijo de instrucción y bytes de código de operación para seleccionar una instrucción, usan un único prefijo de varios bytes. Este prefijo puede codificar un operando de registro adicional. En el modo de 64 bits, también tiene bits para seleccionar los registros de 8 a 15 para los otros operandos y no se necesita un prefijo REX.

Se usan tres prefijos de varios bytes diferentes. Las instrucciones AVX se pueden codificar con un prefijo VEX de 3 bytes, donde el segundo y el tercer byte ayudan a seleccionar la operación específica ejecutada. Si algunos de los campos del prefijo VEX de 3 bytes tienen valores específicos, se puede usar en su lugar una forma de 2 bytes del prefijo VEX. Por último, algunas instrucciones AVX también tienen un formulario AVX-512, que se codifica con un prefijo EVEX de 4 bytes. El prefijo EVEX tiene campos adicionales para seleccionar la longitud de vector de 512 bits y otras opciones específicas de las instrucciones AVX-512.

Como algunas instrucciones AVX se pueden codificar de hasta tres maneras diferentes, hay reglas para seleccionar qué formulario usar. La directiva OPTION AVXENCODING se usa para seleccionar el conjunto de reglas que se van a usar.

Preferencias

Referencia Prioridad de preferencia de codificación
PREFER_FIRST Use el primer formulario definido si es posible.
PREFER_VEX Use la codificación VEX en preferencia para codificar EVEX.
PREFER_VEX3 Use la codificación VEX de 3 bytes en preferencia para codificar EVEX.
PREFER_EVEX Use la codificación EVEX en preferencia para codificar VEX.
NO_EVEX No codifique con EVEX.

El orden AVXENCODING solo se aplica si no se especifica el formulario de prefijo de instrucción para la instrucción. Si el prefijo de instrucción se codifica explícitamente, tiene prioridad sobre la opción AVXENCODING. Por ejemplo, evex vpmaddwd usará VPMADDWD con prefijo EVEX incluso si se especifica OPTION AVXENCODING:no_EVEX.

Si un origen de ensamblado no usa OPTION AVXENCODING para seleccionar las preferencias de codificación, las reglas PREFER_FIRST se usan de forma predeterminada. Por estas reglas, las codificaciones de instrucción más tempranas agregadas a Macro Assembler de Microsoft (MASM) tienen prioridad, y entre esas posibilidades se prefiere la codificación con el formato de prefijo más corto. Estas reglas garantizan que el código ensamblado por MASM siga generando el mismo código de objeto si se agregan nuevos formularios de instrucción luego.

Las reglas PREFER_VEX siempre intentan codificar con un prefijo VEX antes de intentar codificar con EVEX. Si es posible, se usa el formulario de 2 bytes de VEX en lugar del de 3 bytes.

La preferencia PREFER_VEX3 siempre intenta codificar con un prefijo VEX de 3 bytes antes de intentar codificar con EVEX. No se usará la forma de 2 bytes de VEX.

La opción PREFER_EVEX siempre intenta codificar con un prefijo EVEX y solo intenta usar VEX si la instrucción no tiene ningún formulario AVX-512.

La preferencia NO_EVEX solo intenta codificar mediante un prefijo VEX. No se permiten formularios de instrucción AVX-512. Esta opción le permite ensamblar código para su uso en plataformas que no tienen compatibilidad con AVX-512.

La directiva OPTION AVXENCODING está disponible en Visual Studio 2019 versión 16.7 y posteriores.

Ejemplo

En este ejemplo se usan instrucciones VPDPBUSD y VPMADDWD para ilustrar cómo funciona la opción AVXENCODING. VPDPBUSD se definió por primera vez para codificarse solo con EVEX, y luego se extendió con un formulario codificado por VEX para plataformas sin compatibilidad con AVX-512, mientras que VPMADDWD era AVX y se extendió a AVX-512. La salida de la lista del ensamblado del ejemplo muestra cómo cambiar el modo AVXENCODING afecta al código de objeto generado para cada instrucción. El prefijo de cada instrucción termina en "/".

 00000000  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 00000006  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:no_EVEX
 0000000A  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 0000000F  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_VEX
 00000013  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 00000018  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_VEX3
 0000001C  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 00000021  C4 E1 69/ F5 CB        vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_EVEX
 00000026  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 0000002C  62 F1 6D 08/ F5        vpmaddwd xmm1, xmm2, xmm3
           CB

                                  option avxencoding:prefer_first
 00000032  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 00000038  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

Consulte también

Option (MASM)
Referencia de directivas