CLWB
Cache Line Write Back
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F AE /6 | CLWB m8 Op/En M ModRM:r/m (w) | M | Valido | Valido | Escribe la línea de caché modificada que contiene m8, y puede retener la línea en jerarquía de caché en estado no modificado. En la estructura Opera nd Encoding1 operando 1 operando 2 operando 3 operando 4 N/A N/A N/A N/A |
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
Escribe de nuevo a la memoria la línea de caché (si modificada) que contiene la dirección lineal especificada con el operando de memoria de cualquier nivel de la jerarquía de caché en el dominio de coherencia de caché. La línea puede mantenerse en la jerarquía de caché en estado no modificado. Retener la línea en la jerarquía de caché es una optimización de rendimiento (tratado como una pista por hardware) para reducir la posibilidad de falta de caché en un acceso posterior. Hardware puede optar por retener la línea en cualquiera de los niveles en la jerarquía de caché, y en algunos casos, puede invalidar la línea de la jerarquía de caché. El operando de origen es un byte ubicación de memoria.
La disponibilidad de instrucción CLWB es indicada por CPUID.07H.00H:EBX.CLWB[24]. El tamaño de línea de caché alineado afectado también se indica por el valor en CPUID.01H:EBX[15:8].
El atributo de memoria de la página que contiene la línea afectada no tiene efecto en el comportamiento de esta instrucción. Cabe señalar que los procesadores son libres de buscar y guardar datos de forma especulativa de las regiones de memoria del sistema que se asignan un tipo de memoria que permite lecturas especulativas (como, los tipos de memoria WB, WC y WT). Las instrucciones de PREFETCHh se pueden utilizar para proporcionar al procesador consejos para este comportamiento especulativo. Debido a que esta captura especulativa puede ocurrir en cualquier momento y no está vinculada a la ejecución de la instrucción, la instrucción CLWB no se ordena con respecto a las instrucciones PREFETCHh o cualquiera de los mecanismos especulativos de captura (es decir, los datos pueden ser cargados especulativamente en una línea de caché justo antes, durante o después de la ejecución de una instrucción CLWB que hace referencia a la línea de caché).
Las ejecuciones de la instrucción CLWB se ordenan con respecto a las instrucciones de la valla y a las instrucciones de escritura-modificación bloqueadas; también se ordenan con respecto a las escrituras anteriores a la línea de caché que se escribe de nuevo. No se les ordena con respecto a otras ejecuciones de CLWB, a las ejecuciones de CLFLUSH y CLFLUSHOPT, o a los más jóvenes escribe a la línea de caché que se escribe de vuelta. El software puede utilizar la instrucción SFENCE para ordenar una ejecución de CLWB relativa a una de esas operaciones.
Para los usos que sólo requieren la escritura de datos modificados de las líneas de caché a la memoria (no requieren que la línea sea invalidada), y espera acceder posteriormente a los datos, se recomienda que el software utilice CLWB (con cerramiento apropiado) en lugar de CLFLUSH o CLFLUSHOPT para mejorar el rendimiento.
La instrucción CLWB se puede utilizar en todos los niveles de privilegios y está sujeta a todas las comprobaciones de permiso y fallas asociadas con una carga de byte. Como una carga, la instrucción CLWB establece la bandera accedida pero no la bandera sucia en las tablas de página.
En algunas implementaciones, la instrucción CLWB siempre puede causar un aborto transaccional con extensiones de sincronización transaccional (TSX). No se espera que la instrucción CLWB sea utilizada comúnmente en las regiones transaccionales típicas. Sin embargo, los programadores no deben confiar en la instrucción CLWB para forzar un aborto transaccional, ya que si causan un aborto transaccional depende de la aplicación.
Operación
Cache_Line_Write_Back(m8);
1. The Mod field of the ModR/M byte cannot have value 11B.Banderas afectadas
None.
C/C++ Compiler Intrinsic Equivalent CLWB void mm clwb(void const *p);
Excepciones
Modo protegido
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.CLWB[24] = 0. |
#GP(0) | For an illegal operando de memoria effective address in the CS, DS, ES, FS or GS segments. |
#SS(0) | Para una dirección ilegal en el segmento SS. #PF(fault-code) Para un fallo de pagina. |
Modo real
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.CLWB[24] = 0. |
#GP | Si alguna parte del operando se encuentra fuera del espacio de dirección eficaz de 0 a FFFFH. |
Modo virtual-8086
| Las mismas excepciones que en modo de dirección real. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.CLWB[24] = 0. |
#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. #PF(fault-code) Para un fallo de pagina. |