XSAVEOPT

Save Processor Extended States Optimized

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NP 0F AE /6XSAVEOPT memMValidoValidoGuardar componentes estatales especificados por EDX:EAX a mem, optimizando si es posible.
NP REX.W + 0F AE /6XSAVEOPT64 memMValidoValidoGuardar componentes estatales especificados por EDX:EAX a mem, optimizando si es posible.

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.

M

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

Coste medido

Cargando las mediciones de arch-data...

Descripción

Realiza un ahorro total o parcial de componentes estatales procesadores en la zona XSAVE ubicada en la dirección de memoria especificada por el operando de destino. El par de registro implícito EDX:EAX especifica una máscara de instrucciones de 64 bits. Los componentes específicos del estado guardados corresponden a los bits fijados en el bitmap (RFBM), que es el lógico-AND de EDX:EAX y XCR0.

El formato del área XSAVE se detalla en la Sección 13.4, "XSAVE Area", de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1. Como FXRSTOR y FXSAVE, el formato de memoria utilizado para el estado x87 depende de un prefijo REX.W; ver Sección 13.5.1, "x87 Estado" de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1.

Sección 13.9, "Operación de XSAVEOPT", de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1 proporciona una descripción detallada del funcionamiento de la instrucción XSAVEOPT. Los siguientes temas proporcionan un esbozo de alto nivel:

optimizaciones modificadas. El rendimiento de XSAVEOPT será igual o mejor que el de XSAVE.

procesador rastrea el estado de varios componentes del estado. Véase Sección 13.6, "Processor Tracking ofXSAVE- Estado gestionado", de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1.) Incluso si ambas partes son 1,XSAVEOPTpuede optimizar y no guardar el componente de estado i si (1) componente de estado no se ha modificado desde la última ejecución deXRSTORoXRSTORS; y 2) esta ejecución deXSAVEScorresponde a la última ejecución deXRSTORoXRSTORSpor el valor interno XRSTOR INFO (véase la sección de la Operación infra).

64 e IA-32 Architectures Software Developer's Manual, Volumen 1) y escribe un valor modificado de nuevo a la memoria como sigue. Si RFBM[i] = 1, XSAVEOPT escribe XSTATE BV[i] con el valor de XINUSE[i]. Si RFBM[i] = 0, XSAVEOPT escribe XSTATE BV[i] con el valor que lee de la memoria (no modifica el bit). XSAVEOPT no escribe a ninguna parte del encabezado XSAVE aparte del campo XSTATE BV.

El uso de un operando de destino no alineado a los límites de 64 bytes (en modos de 64 bits o de 32 bits) resultará en una excepción de protección general (#GP). En modo de 64 bits, se ignoran los 32 bits superiores de RDX y RAX.

  1. Hay una excepción hecha para MXCSR y MXCSR MASK, que pertenecen al componente estatal 1 - SSE. XSAVEOPT siempre guarda estos a la memoria si RFBM[1] = 1 o RFBM[2] = 1, independientemente del valor de XINUSE.

Véase Sección 13.6, "Processor Tracking ofXSAVE-Managed State", de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1 para la discusión del bitmapXMODIFIEDy de la cantidad XRSTOR INFO.

Operación

RFBM := XCR0 AND EDX:EAX; /* bitwise logical AND */
OLD_BV := XSTATE_BV field from XSAVE header;
TO_BE_SAVED := RFBM AND XINUSE;

IF in VMX non-root operation
    THEN VMXNR := 1;
    ELSE VMXNR := 0;

FI;
LAXA := linear address of XSAVE area;

IF XRSTOR_INFO = CPL,VMXNR,LAXA,00000000_00000000H

    THEN TO_BE_SAVED := TO_BE_SAVED AND XMODIFIED;
FI;

IF TO_BE_SAVED[0] = 1
    THEN store x87 state into legacy region of XSAVE area;

FI;

IF TO_BE_SAVED[1]
    THEN store XMM registers into legacy region of XSAVE area; // this step does not save MXCSR or MXCSR_MASK

FI;

IF RFBM[1] = 1 or RFBM[2] = 1
    THEN store MXCSR and MXCSR_MASK into legacy region of XSAVE area;

FI;

FOR i := 2 TO 62
    IF TO_BE_SAVED[i] = 1

THEN save XSAVE state component i at offset n from base of XSAVE area (n enumerated by CPUID.0DH.i:EBX);
    FI;

ENDFOR;

XSTATE_BV field in XSAVE header := (OLD_BV AND NOT RFBM) OR (XINUSE AND RFBM);

Banderas afectadas

None.

Intel C/C++ compilador intrínseco

XSAVEOPT void _xsaveopt( void * , unsigned __int64);
XSAVEOPT void _xsaveopt64( void * , unsigned __int64);

Excepciones

Modo protegido
#GP(0)Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si un operando de memoria no está alineado en un límite de 64 bytes, independientemente del segmento.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre.
#NMSi CR0.TS[bit 3] = 1.
#UDSi CPUID.01H:ECX.XSAVE[26] = 0 o CPUID.0DH.01H:EAX.XSAVEOPT[0] = 0.
#ACSiCR4.OSXSAVE[bit 18]= 0. SiLOCKprefijo se utiliza. Si esta excepción es deshabilitadauna excepción de protección general (#GP) se señalizasiel operando de memoriano se alinea en un límite de 64 bytes, como se describe anteriormente. Si la excepción de comprobación de alineación (#AC) está habilitado (y elCPL3), señalización de#ACno se garantiza y puede variar con la aplicación, como se indica a continuación.#ACno es señalizado,una excepción de protección general se señalizaAdemás, el ancho del control de alineación también puede variar con la implementación. Por ejemplo, para una implementación determinada, una excepción de control de alineación puede ser señalizada para un mal alineamiento de 2 bytes, mientras queuna excepción de protección generalpuede ser señalizado para todas las otras mal alineaciones (4-, 8-, o 16-bytes).
Modo real
#GPSi un operando de memoria no está alineado en un límite de 64 bytes, independientemente del segmento. Si alguna parte del operando se encuentra fuera del espacio de dirección eficaz de 0 a FFFFH.
#NMSi CR0.TS[bit 3] = 1.
#UDSi CPUID.01H:ECX.XSAVE[26] = 0 o CPUID.0DH.01H:EAX.XSAVEOPT[0] = 0. Si CR4.OSXSAVE[bit 18] = 0. Si el prefijo LOCK es usado.
Modo virtual-8086
Las mismas excepciones que en modo protegido.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#SS(0)Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica.
#GP(0)Si la dirección de memoria está en forma no canónica. Si un operando de memoria no está alineada en un límite de 64 bytes, independientemente del segmento. #PF(fault-code) Si un fallo de pagina ocurre.
#NMSi CR0.TS[bit 3] = 1.
#UDSi CPUID.01H:ECX.XSAVE[26] = 0 o CPUID.0DH.01H:EAX.XSAVEOPT[0] = 0. Si CR4.OSXSAVE[bit 18] = 0. Si el prefijo LOCK es usado.
#ACSi esta excepción es deshabilitadauna excepción de protección general (#GP) se señalizasiel operando de memoriano se alinea en un límite de 64 bytes, como se describe anteriormente. Si la excepción de comprobación de alineación (#AC) está habilitado (y elCPL3), señalización de#ACno se garantiza y puede variar con la aplicación, como se indica a continuación.#ACno es señalizado,una excepción de protección general se señalizaAdemás, el ancho del control de alineación también puede variar con la implementación. Por ejemplo, para una implementación determinada, una excepción de control de alineación puede ser señalizada para un mal alineamiento de 2 bytes, mientras queuna excepción de protección generalpuede ser señalizado para todas las otras mal alineaciones (4-, 8-, o 16-bytes).

Fuentes