FXSAVE
Save x87 FPU, MMX Technology, and SSE State
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
NP 0F AE /0 | FXSAVE m512byte | M | Valido | Valido | Guardar el estado de registro x87 FPU, MMX, XMM y MXCSR a m512byte. |
NP REX.W + 0F AE /0 | FXSAVE64 m512byte | M | Valido | No codificable | Guardar 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
modrm.rmescriturabyte 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
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rsvd | FCS | FIP[31:0] | FOP | Rsvd | FTW | FSW | FCW 0 |
No-64-Bit-Mode Diseño de FXSAVE y FXRSTOR Región de la Memoria (Contd.)
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rsvd | FCS | FIP[31:0] | FOP | Rsvd | FTW | FSW | FCW 0 |
Recrear el formato FSAVE
| Exponent | Exponent | Fracción | J y M | FTW | válido | bit |
|---|---|---|---|---|---|---|
| todo 1 | todo 0 | todo 0 | bits | x87 FTW | ||
| 0 | 0 | 0 | 0x | 1 | Especial 10 | |
| 0 | 0 | 0 | 1x | 1 | Válida 00 | |
| 0 | 0 | 1 | 00 | 1 | Especial 10 | |
| 0 | 0 | 1 | 10 | 1 | Válida 00 | |
| 0 | 1 | 0 | 0x | 1 | Especial 10 | |
| 0 | 1 | 0 | 1x | 1 | Especial 10 | |
| 0 | 1 | 1 | 00 | 1 | Cero 01 | |
| 0 | 1 | 1 | 10 | 1 | Especial 10 | |
| 1 | 0 | 0 | 1x | 1 | Especial 10 | |
| 1 | 0 | 0 | 1x | 1 | Especial 10 | |
| 1 | 0 | 1 | 00 | 1 | Especial 10 | |
| 1 | 0 | 1 | 10 | 1 | Especial 10 |
Disposición del Modo de 64-Bit FXSAVE64 Mapa (Requiere REX.W = 1)
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FIP | FOP | Reservado FT | W | FSW | FCW | 0 |
Elaboración del Modo de 64-Bit FXSAVE Mapa (REX.W = 0)
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Rese | rved | FCS | FIP[31: | 0] | FOP | Reservado | FTW | FSW | FCW | 0 | |||||
| MXCSR_ | MASK | MXCSR | Reservado | FDS | FDP[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. |
#NM | Si CR0.TS[bit 3] = 1. Si CR0.EM[bit 2] = 1. |
#UD | Si CPUID.01H:EDX.FXSR[24] = 0. |
#UD | Si se utiliza el prefijo LOCK. |
#AC | Si 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
#GP | Si 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. |
#NM | Si CR0.TS[bit 3] = 1. Si CR0.EM[bit 2] = 1. |
#UD | Si 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. | |
#AC | Para referencia de memoria no alineada. |
#UD | Si 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. |
#NM | Si CR0.TS[bit 3] = 1. Si CR0.EM[bit 2] = 1. |
#UD | Si CPUID.01H:EDX.FXSR[24] = 0. Si el prefijo LOCK es usado. |
#AC | Si 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. |