FXRSTOR
Restaurar x87 FPU, MMX, XMM y MXCSR State
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
NP 0F AE /1 | FXRSTOR m512byte | M | Valido | Valido | Restaurar el estado de registro x87 FPU, MMX, XMM y MXCSR de m512byte. |
NP REX.W + 0F AE /1 | FXRSTOR64 m512byte | M | Valido | No codificable | Restaurar el estado de registro x87 FPU, MMX, XMM y MXCSR de 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.rmlecturabyte 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
Recarga los registros x87 FPU, MMX tecnología, XMM y MXCSR de la imagen de memoria de 512 bytes especificada en el operando de origen. Estos datos deben haber sido escritos a la memoria previamente utilizando la instrucción FXSAVE, y en el mismo formato que los modos operativos. El primer byte de los datos debe situarse en un límite de 16 bytes. Hay tres diseños distintos del mapa de estado FXSAVE: uno para el modo legado y compatibilidad, un segundo formato para el modo de 64 bits FXSAVE/FXRSTOR con REX.W=0, y el tercer formato es para el modo 64-bit con FXSAVE64/FXRSTOR64. La tabla 3-45 muestra el diseño de la información del estado del modo legado/compatibilidad en memoria y describe los campos en la imagen de memoria para las instrucciones FXRSTOR y FXSAVE. La tabla 3-48 muestra el diseño de la información del estado del modo 64-bit cuando se establece REX.W (FXSAVE64/FXRSTOR64). En la tabla 3-49 se muestra el diseño de la información del estado del modo 64 bits cuando REX.W está claro (FXSAVE/FXRSTOR).
La imagen del estado referenciada con una instrucción FXRSTOR debe haber sido guardada usando una instrucción FXSAVE o estar en el mismo formato que el requerido por Tabla 3-45, Tabla 3-48, o Tabla 3-49. La referencia a una imagen del estado guardada con una instrucción FSAVE, FNSAVE o diseño de campo incompatible resultará en una restauración incorrecta del estado.
La instrucción FXRSTOR no vacia hasta las excepciones x87 FPU. Para comprobar y plantear excepciones al cargar la información del estado x87 FPU con la instrucción FXRSTOR, utilice una instrucción FWAIT después de la instrucción FXRSTOR.
Si el bit OSFXSR en registro de control CR4 no está establecido, la instrucción FXRSTOR no puede restaurar los estados de los registros XMM y MXCSR. Este comportamiento depende de la implementación.
Si el estado MXCSR contiene una excepción desenmascarada con una bandera de estado correspondiente también conjunto, cargando el registro con la instrucción FXRSTOR no resultará en una condición de error SIMD coma flotante que se genera. Sólo la próxima ocurrencia de esta excepción desenmascarada resultará en la excepción que se genera.
Los bits 16 a 32 del registro MXCSR se definen como reservados y deben establecerse a 0. El intento de escribir un 1 en cualquiera de estos bits de la imagen del estado salvado resultará en que se genere una excepción de protección general (#GP).
Bytes 464:511 de una imagen FXSAVE están disponibles para el uso de software. FXRSTOR ignora el contenido de bytes 464:511 en una imagen de estado FXSAVE.
Operación
IF 64-Bit Mode
THEN
(x87 FPU, MMX, XMM15-XMM0, MXCSR) Load(SRC);
ELSE
(x87 FPU, MMX, XMM7-XMM0, MXCSR) := Load(SRC);
FI;
x87 FPU and SIMD Floating-Point Exceptions
None.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 excepción de comprobación de alineación [#AC] abajo.) Para un intento de establecer bits reservados en MXCSR. |
#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. Si la instrucción es precedida por un 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). |
#UD | Si se utiliza el prefijo LOCK. |
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. Para un intento de establecer bits reservados en MXCSR. |
#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. Para un intento de establecer bits reservados en MXCSR. #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 la instrucción es precedida por un 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). |