INVPCID
Identificador de procesos invalidados
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 38 82 /r | INVPCID r32, m128 | RM | No codificable | Valido | Invalida las entradas en los TLB y los caches de paging-estructura basados en el tipo de invalidación en r32 y descrip- tor en m128. |
66 0F 38 82 /r | INVPCID r64, m128 | RM | Valido | No codificable | Invalida las entradas en los TLB y los caches de paging-estructura basados en el tipo de invalidación en r64 y descrip- tor en m128. |
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.reglecturabyte ModRM, campo reg (bits 5-3)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
Invalidates mappings in the translation lookaside buffers (TLBs) and paging-structure caches based on processcontext identifier (PCID). (Ver Sección 5.10, "Caching Translation Information", en el Manual del Desarrollador de Software de Arquitectura Intel 64 e IA-32, Volumen 3A.) La invalidación se basa en el tipo INVPCID especificado en el registro operando y el descriptor INVPCID especificado en el operando de memoria.
Fuera del modo 64-bit, el registro operando es siempre 32 bits, independientemente del valor de CS.D. En modo de 64 bits el registro operando tiene 64 bits.
Actualmente hay cuatro tipos INVPCID definidos:
- Inválido de dirección individual: Si el tipo INVPCID es 0, el procesador lógico invalida las asignaciones -excepto las traducciones globales- para la dirección lineal y PCID especificados en el descriptor INVPCID.1 En algunos casos, la instrucción puede invalidar traducciones o asignaciones globales para otras direcciones lineales (o otros PCIDs) también.
- Anulación de un solo contexto: Si el tipo INVPCID es 1, el procesador lógico invalida todas las asignaciones - excepto
traducción global - asociado con el PCID especificado en el descriptor INVPCID. En algunos casos, la instrucción puede invalidar traducciones o asignaciones globales para otros PCIDs también.
- La invalidación de todo contexto, incluidas las traducciones globales: Si el tipo INVPCID es 2, el procesador lógico invalida
todos los mapas, incluyendo traducciones globales, asociados con cualquier PCID.
- Inválido de todo contexto: Si el tipo INVPCID es 3, el procesador lógico invalida todas las asignaciones--excepto global
traducción - asociado con cualquier PCID. En algún caso, la instrucción también puede invalidar las traducciones globales.
El descriptor INVPCID consta de 128 bits y consta de un PCID y una dirección lineal como se muestra en la Figura 3-20. Para INVPCID tipo 0, el procesador utiliza los 64 bits completos de la dirección lineal incluso fuera del modo 64-bit; la dirección lineal no se utiliza para otros tipos INVPCID.
127 64 63 12 11 0 Linear Address Reserved (must be zero) PCIDFigura 3-20. INVPCID Descriptor
- Si las estructuras de paging mapean la dirección lineal usando una página más grande de 4 KBytes y hay múltiples entradas de TLB para esa página (ver Sección 5.10.2.3, "Detalles de uso TLB", en el Manual de Desarrolladores de Software de Arquitecturas Intel(R) 64 e IA-32, Volumen 3A), la instrucción invalida todos ellos.
Si CR4.PCIDE = 0, un procesador lógico no cache información para cualquier PCID que no sea 000H. En este caso,
las ejecuciones con los tipos de INVPCID 0 y 1 sólo se permiten si el PCID especificado en el descriptor INVPCID es 000H;
ejecuciones con INVPCID tipos 2 y 3 mapas invalidados sólo para PCID 000H. Tenga en cuenta que CR4.PCIDE debe ser 0 fuera del modo IA-32e (ver Sección 5.10.1, "Procesos-Context Identificadores (PCIDs)," del Intel(R) 64 e IA-32 Archi-
tectures Software Developer's Manual, Volumen 3A).
Operación
INVPCID_TYPE := value of register operand; // must be in the range of 03
INVPCID_DESC := value of memory operand;
CASE INVPCID_TYPE OF
0: // individual-address invalidation
PCID := INVPCID_DESC[11:0];
L_ADDR := INVPCID_DESC[127:64];
Invalidate mappings for L_ADDR associated with PCID except global translations;
BREAK;
1: // single PCID invalidation
PCID := INVPCID_DESC[11:0];
Invalidate all mappings associated with PCID except global translations;
BREAK;
2: // all PCID invalidation including global translations
Invalidate all mappings for all PCIDs, including global translations;
BREAK;
3: // all PCID invalidation retaining global translations
Invalidate all mappings for all PCIDs except global translations;
BREAK;
ESAC;Intel C/C++ compilador intrínseco
INVPCID void _invpcid(unsigned __int32 type, void * descriptor);SIMD coma flotante Excepciones
None.
Excepciones
Modo protegido
#GP(0) | Si el nivel actual de privilegios no es 0. Siel operando de memoriadirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS contiene un segmento inutilizable.el operando de origense encuentra en un segmento de código de ejecución solamente. Si un tipo inválido se especifica en el registrooperando, es decir, INVPCID TYPE>3. Si los bits 63:12 de INVPCID DESC no son todos cero. Si INVPCID TYPE es 0 o 1 y INVPCID DESC[11:0] no es cero. Si INVPCID TYPE es 0 y la dirección lineal en INVPCID DESC[127:64] no es canónica.#PF(fault-code)Siun fallo de paginaocurre en el accesoel operando de memoria. |
#SS(0) | Si la dirección efectiva el operando de memoria está fuera del límite del segmento SS. Si el registro SS contiene un segmento inutilizable. #UDIf si CPUID.07H.00H:EBX.INVPCID[10] = 0. Si el prefijo LOCK se utiliza. |
Modo real
#GP | Si un tipo inválido se especifica en el registro operando, es decir, INVPCID TYPE > 3. Si los bits 63:12 de INVPCID DESC no son todos cero. Si INVPCID TYPE es 0 o 1 y INVPCID DESC[11:0] no es cero. |
#UD | Si CPUID.07H.00H:EBX.INVPCID[10] = 0. Si el prefijo LOCK es usado. |
Modo virtual-8086
#GP(0) | La instrucción INVPCID no se reconoce en modo virtual-8086. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#GP(0) | Si el nivel actual de privilegios no es 0. Siel operando de memoriaestá en los segmentos CS, DS, ES, FS o GS y la dirección de memoria está en forma no canónica. Si un tipo inválido se especifica en el registrooperando, es decir, INVPCID TYPE>3. Si los bits 63:12 de INVPCID DESC no son todos cero.CR4.PCIDE=0, INVPCID TYPE es 0 o 1, e INVPCID DESC[11:0] no es cero. Si INVPCID TYPE es 0 y la dirección lineal en INVPCID DESC[127:64] no es canónica.#PF(fault-code)Siun fallo de paginaocurre en el accesoel operando de memoria. |
#SS(0) | Si la memoria operando de destino está en el segmento SS y la dirección de memoria está en forma no canónica. |
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.INVPCID[10] = 0. |