CLFLUSHOPT

Flush Cache Line Optimizado

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NFx 66 0F AE /7CLFLUSHOPT m8MValidoValidoLínea de caché Flushes que contiene m8.

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

Invalida de cada nivel de la jerarquía de caché en el dominio de coherencia de caché la línea de caché que contiene la dirección lineal especificada con el operando de memoria. Si esa línea de caché contiene datos modificados a cualquier nivel de la jerarquía de caché, que los datos se escriben de nuevo a la memoria. El operando de origen es un byte ubicación de memoria.

La disponibilidad de CLFLUSHOPT se indica por la presencia de la bandera CPUID CLFLUSHOPT (CPUID.07H.00H:EBX[23]). 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 asignadas a 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 CLFLUSH 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 CLFLUSH que hace referencia a la línea de caché).

Las ejecuciones de la instrucción CLFLUSHOPT se ordenan con respecto a las instrucciones de cerca y a las instrucciones de escritura de readmodificación bloqueadas; también se ordenan con respecto a los escritos antiguos a la línea de caché que se invalida. No se les ordena con respecto a otras ejecuciones de CLFLUSHOPT, a las ejecuciones de CLFLUSH y CLWB, o a los menores escribe a la línea de caché siendo invalidado. El software puede utilizar la instrucción SFENCE para ordenar una ejecución de CLFLUSHOPT relativa a una de esas operaciones.

La instrucción CLFLUSHOPT se puede utilizar en todos los niveles de privilegios y está sujeta a todas las comprobaciones de permisos y fallas asociadas con una carga de byte (y además, se permite una instrucción CLFLUSHOPT para cambiar una dirección lineal en un segmento de ejecución solamente). Como una carga, la instrucción CLFLUSHOPT establece el bit A pero no el bit D en las tablas de página.

En algunas implementaciones, la instrucción CLFLUSHOPT siempre puede causar un aborto transaccional con extensiones de sincronización transaccional (TSX). No se espera que la instrucción CLFLUSHOPT sea utilizada comúnmente en las regiones transaccionales típicas. Sin embargo, los programadores no deben confiar en la instrucción CLFLUSHOPT para forzar un aborto transaccional, ya que si causan un aborto transaccional depende de la aplicación.

La operación CLFLUSHOPT es la misma en modos no-64-bit y modo 64-bit.

Operación

Flush_Cache_Line_Optimized(SRC);

Intel C/C++ compilador intrínseco

CLFLUSHOPT void _mm_clflushopt(void const *p);

Excepciones

Modo protegido
#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.
#UDSi CPUID.07H.00H:EBX.CLFLUSHOPT[23] = 0. Si se utiliza el prefijo LOCK. Si se utiliza un prefijo de instrucción F2H o F3H.
Modo real
#GPSi alguna parte del operando se encuentra fuera del espacio de dirección eficaz de 0 a FFFFH.
#UDSi CPUID.07H.00H:EBX.CLFLUSHOPT[23] = 0. Si se utiliza el prefijo LOCK. Si se utiliza un prefijo de instrucción F2H o F3H.
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
#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.
#UDSi CPUID.07H.00H:EBX.CLFLUSHOPT[23] = 0. Si se utiliza el prefijo LOCK. Si se utiliza un prefijo de instrucción F2H o F3H.

Fuentes