PTWRITE
Escriba datos a un paquete Trace del procesador
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 REX.W 0F AE /4 | PTWRITE r64/m64 | RM | Valido | n.e | Lea los datos de r64/m64 para codificar en un paquete PTW si se cumplen las dependencias (ver detalles a continuación). |
F3 0F AE /4 | PTWRITE r32/m32 | RM | Valido | Valido | Lea los datos de r32/m32 para codificar en un paquete PTW si se cumplen las dependencias (ver detalles a continuación). |
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.
RM
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
Esta instrucción lee los datos en el operando de origen y lo envía al hardware Intel Processor Trace para ser codificado en un paquete PTW si TriggerEn, ContextEn, FilterEn y PTWEn están listos para 1. Para más detalles sobre estos valores, consulte Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 3C, Sección 36.2.2, "Software Trace Instrumentation with PTWRITE." El tamaño de los datos es de 64 bits si se utiliza REX.W en modo de 64 bits, de lo contrario 32 bits de datos se copian desde el operando de origen.
Nota: La instrucción será #UD si se utiliza el prefijo 66H.
Operación
IF (IA32_RTIT_STATUS.TriggerEn & IA32_RTIT_STATUS.ContextEn & IA32_RTIT_STATUS.FilterEn & IA32_RTIT_CTL.PTWEn) = 1
PTW.PayloadBytes := Encoded payload size;
PTW.IP := IA32_RTIT_CTL.FUPonPTW
IF IA32_RTIT_CTL.FUPonPTW = 1
Insert FUP packet with IP of PTWRITE;
FI;
FI;Banderas afectadas
None.
Excepciones
Modo protegido
#GP(0) | Si un operando de memoria dirección efectiva está fuera de los segmentos CS, DS, ES, FS o GS. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF (código predeterminado) Para un fallo de pagina. |
#AC(0) | Si se hace una referencia de memoria no alineada mientras que el nivel actual de privilegios es 3 y la comprobación de alineación está habilitada. |
#UD | Si CPUID.14H.00H:EBX.PTWRITE[4] = 0. Si se usa el prefijo LOCK. Si se usa el prefijo 66H. |
Modo real
#GP(0) | Si alguna parte del operando está fuera del espacio de dirección eficaz de 0 a 0FFFFH. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#UD | Si CPUID.14H.00H:EBX.PTWRITE[4] = 0. Si se utiliza el prefijo LOCK. Si se utiliza el prefijo 66H. |
#GP(0) | Si alguna parte del operando está fuera del espacio de dirección eficaz de 0 a 0FFFFH. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF (código predeterminado) Para un fallo de pagina. |
#AC(0) | Si se hace una referencia de memoria no alineada mientras se activa la comprobación de alineación. |
#UD | Si CPUID.14H.00H:EBX.PTWRITE[4] = 0. Si se usa el prefijo LOCK. Si se usa el prefijo 66H. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#GP(0) | Si la dirección de memoria está en forma no canónica. |
#SS(0) | Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica. #PF (código predeterminado) Para un fallo de pagina. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si CPUID.14H.00H:EBX.PTWRITE[4] = 0. Si se usa el prefijo LOCK. Si se usa el prefijo 66H. |