FXSAVE

Save x87 FPU, MMX Technology, and SSE State

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NP 0F AE /0FXSAVE m512byteMValidoValidoGuardar el estado de registro x87 FPU, MMX, XMM y MXCSR a m512byte.
NP REX.W + 0F AE /0FXSAVE64 m512byteMValidoNo codificableGuardar el estado de registro x87 FPU, MMX, XMM y MXCSR a m512byte.

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 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

Ahorra el estado actual de la tecnología x87 FPU, MMX, XMM y MXCSR se registra a una ubicación de memoria de 512 bytes especificado en el operando de destino. El diseño de contenido de la región de 512 byte depende de si el procesador está operando en modos de operación no-64-bit o submodo de 64-bits del modo IA-32e.

Los bytes 464:511 están disponibles para el uso del software. El procesador no escribe a bytes 464:511 de un área FXSAVE.

La operación de FXSAVE en modos no-64-bit se describe primero.

Operación del modo no 64-Bit

La tabla 3-45 muestra el diseño de la información del estado en memoria cuando el procesador está operando en modos heredados.

No-64-Bit-Mode Layout de FXSAVE y FXRSTOR Memory Region

1514131211109876543210
RsvdFCSFIP[31:0]FOPRsvdFTWFSWFCW 0

No-64-Bit-Mode Diseño de FXSAVE y FXRSTOR Región de la Memoria (Contd.)

1514131211109876543210
RsvdFCSFIP[31:0]FOPRsvdFTWFSWFCW 0

Recrear el formato FSAVE

ExponentExponentFracciónJ y MFTWválidobit
todo 1todo 0todo 0bitsx87 FTW
0000x1Especial 10
0001x1Válida 00
001001Especial 10
001101Válida 00
0100x1Especial 10
0101x1Especial 10
011001Cero 01
011101Especial 10
1001x1Especial 10
1001x1Especial 10
101001Especial 10
101101Especial 10

Disposición del Modo de 64-Bit FXSAVE64 Mapa (Requiere REX.W = 1)

1514131211109876543210
FIPFOPReservado FTWFSWFCW0

Elaboración del Modo de 64-Bit FXSAVE Mapa (REX.W = 0)

1514131211109876543210
ReservedFCSFIP[31:0]FOPReservadoFTWFSWFCW0
MXCSR_MASKMXCSRReservadoFDSFDP[31:0]16

Operación

IF 64-Bit Mode
    THEN
          IF REX.W = 1
                THEN
                      DEST := Save64BitPromotedFxsave(x87 FPU, MMX, XMM15-XMM0,
                      MXCSR);
                ELSE
                      DEST := Save64BitDefaultFxsave(x87 FPU, MMX, XMM15-XMM0, MXCSR);
          FI;
    ELSE
          DEST := SaveLegacyFxsave(x87 FPU, MMX, XMM7-XMM0, MXCSR);

FI;

Excepciones

Modo protegido
#GP(0)Para una dirección efectiva operando de memoria ilegal en los segmentos CS, DS, ES, FS o GS. Si un operando de memoria no está alineado en un límite de 16 bytes, independientemente del segmento. (Ver la descripción de la excepción de comprobación de alineación [#AC] abajo.)
#SS(0)Para una dirección ilegal en el segmento SS. #PF(fault-code) Para un fallo de pagina.
#NMSi CR0.TS[bit 3] = 1. Si CR0.EM[bit 2] = 1.
#UDSi CPUID.01H:EDX.FXSR[24] = 0.
#UDSi se utiliza el prefijo LOCK.
#ACSi esta excepción es deshabilitadauna excepción de protección general (#GP) se señalizasiel operando de memoriano está alineado en un límite de 16 bytes, como se describe anteriormente. Si la excepción de control 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 16 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. Si CR0.EM[bit 2] = 1.
#UDSi CPUID.01H:EDX.FXSR[24] = 0. Si el prefijo LOCK es usado.
Modo virtual-8086
Las mismas excepciones que en modo de dirección real.
#ACPara referencia de memoria no alineada.
#UDSi se utiliza el prefijo LOCK.
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 operando de memoria no está alineada en un límite de 16 bytes, independientemente del segmento. #PF(fault-code) Para un fallo de pagina.
#NMSi CR0.TS[bit 3] = 1. Si CR0.EM[bit 2] = 1.
#UDSi CPUID.01H:EDX.FXSR[24] = 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 está alineado en un límite de 16 bytes, como se describe anteriormente. Si la excepción de control 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-byte misalignments).#GP) y página por defecto (#PF) excepciones cuando ambos ocurren en un límite de instrucción se da en la Tabla 5-2 en el Intel(R) 64 e IA-32 Arquitecturas Software Developer's Manual, Volumen 3B.FXSAVEpara diferentes implementaciones de procesadores.

Fuentes