Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2012 / 319433-011.pdf
Скачиваний:
27
Добавлен:
02.02.2015
Размер:
2.31 Mб
Скачать

INSTRUCTION SET REFERENCE - VEX-ENCODED GPR INSTRUCTIONS

INVPCID - Invalidate Processor Context ID

Opcode/

Op/

64/32

CPUID

Description

Instruction

En

-bit

Feature

 

 

 

Mode

Flag

 

66 0F 38 82 /r

A

NE/V

INVPCID

Invalidates entries in the TLBs and

INVPCID r32, m128

 

 

 

paging-structure caches based on

 

 

 

 

invalidation type in r32 and

 

 

 

 

descriptor in m128.

66 0F 38 82 /r

A

V/NE

INVPCID

Invalidates entries in the TLBs and

INVPCID r64, m128

 

 

 

paging-structure caches based on

 

 

 

 

invalidation type in r64 and

 

 

 

 

descriptor in m128.

 

 

 

 

 

Instruction Operand Encoding

Op/En

Operand 1

Operand 2

Operand 3

Operand 4

A

ModRM:reg (R)

ModRM:r/m (R)

NA

NA

 

 

 

 

 

Description

Invalidates mappings in the translation lookaside buffers (TLBs) and paging-struc- ture caches based on the invalidation type specified in the first operand and processor context identifier (PCID) invalidate descriptor specified in the second operand. The INVPCID descriptor is specified as a 16-byte memory operand and has no alignment restriction.

The layout of the INVPCID descriptor is shown in Figure 7-3. In 64-bit mode the linear address field (bits 127:64) in the INVPCID descriptor must satisfy canonical requirement unless the linear address field is ignored.

127

64 63

12 11

0

 

Linear Address

 

Reserved (must be zero)

 

 

PCID

Figure 7-3. INVPCID Descriptor

Outside IA-32e mode, the register operand is always 32 bits, regardless of the value of CS.D. In 64-bit mode the register operand has 64 bits; however, if bits 63:32 of the register operand are not zero, INVPCID fails due to an attempt to use an unsupported INVPCID type (see below).

Ref. # 319433-011

7-29

INSTRUCTION SET REFERENCE - VEX-ENCODED GPR INSTRUCTIONS

The INVPCID types supported by a logical processors are:

Individual-address invalidation: If the INVPCID type is 0, the logical processor invalidates mappings for a single linear address and tagged with the PCID specified in the INVPCID descriptor, except global translations. The instruction may also invalidate global translations, mappings for other linear addresses, or mappings tagged with other PCIDs.

Single-context invalidation: If the INVPCID type is 1, the logical processor invalidates all mappings tagged with the PCID specified in the INVPCID descriptor except global translations. In some cases, it may invalidate mappings for other PCIDs as well.

All-context invalidation: If the INVPCID type is 2, the logical processor invalidates all mappings tagged with any PCID.

All-context invalidation, retaining global translations: If the INVPCID type is 3, the logical processor invalidates all mappings tagged with any PCID except global translations, ignoring the INVPCID descriptor. The instruction may also invalidate global translations as well.

If an unsupported INVPCID type is specified, or if the reserved field in the descriptor is not zero, the instruction fails.

Outside IA-32e mode, the processor treats INVPCID as if all mappings are associated with PCID 000H.

Operation

INVPCID_TYPE ← value of register operand; // must be in the range of 0-3 INVPCID_DESC ← value of memory operand;

CASE INVPCID_TYPE OF

0: // individual-address invalidation retaining global translations OP_PCID ← INVPCID_DESC[11:0];

ADDR ← INVPCID_DESC[127:64];

Invalidate mappings for ADDR tagged with OP_PCID except global translations; BREAK;

1:

// single PCID invalidation retaining globals

 

OP_PCID ← INVPCID_DESC[11:0];

 

Invalidate all mappings tagged with OP_PCID except global translations;

 

BREAK;

2:

// all PCID invalidation

 

Invalidate all mappings tagged with any PCID;

 

BREAK;

3:

// all PCID invalidation retaining global translations

 

Invalidate all mappings tagged with any PCID except global translations;

BREAK;

ESAC;

7-30

Ref. # 319433-011

INSTRUCTION SET REFERENCE - VEX-ENCODED GPR INSTRUCTIONS

Intel C/C++ Compiler Intrinsic Equivalent

INVPCID void _invpcid(unsigned __int32 type, void * descriptor);

SIMD Floating-Point Exceptions

None

Protected Mode Exceptions

#GP(0)

If the current privilege level is not 0.

 

If the memory operand effective address is outside the CS, DS,

 

ES, FS, or GS segment limit.

 

If the DS, ES, FS, or GS register contains an unusable segment.

 

If the source operand is located in an execute-only code

 

segment.

 

If an invalid type is specified in the register operand, i.e.,

 

INVPCID_TYPE > 3.

 

If bits 63:12 of INVPCID_DESC are not all zero.

 

If CR4.PCIDE=0, INVPCID_DESC[11:0] is not zero, and

 

INVPCID_TYPE is either 0, or 1.

#PF(fault-code)

If a page fault occurs in accessing the memory operand.

#SS(0)

If the memory operand effective address is outside the SS

 

segment limit.

 

If the SS register contains an unusable segment.

#UD

If if CPUID.(EAX=07H, ECX=0H):EBX.INVPCID (bit 10) = 0.

 

If the LOCK prefix is used.

Real-Address Mode Exceptions

#GP(0)

If an invalid type is specified in the register operand, i.e

 

INVPCID_TYPE > 3.

 

If bits 63:12 of INVPCID_DESC are not all zero.

 

If CR4.PCIDE=0, INVPCID_DESC[11:0] is not zero, and

 

INVPCID_TYPE is either 0, or 1.

#UD

If CPUID.(EAX=07H, ECX=0H):EBX.INVPCID (bit 10) = 0.

 

If the LOCK prefix is used.

Virtual-8086 Mode Exceptions

#UD The INVPCID instruction is not recognized in virtual-8086 mode.

Compatibility Mode Exceptions

Same exceptions as in protected mode.

Ref. # 319433-011

7-31

INSTRUCTION SET REFERENCE - VEX-ENCODED GPR INSTRUCTIONS

64-Bit Mode Exceptions

#GP(0)

If the current privilege level is not 0.

 

If the memory operand is in the CS, DS, ES, FS, or GS segments

 

and the memory address is in a non-canonical form.

 

If an invalid type is specified in the register operand.

 

If an invalid type is specified in the register operand, i.e

 

INVPCID_TYPE > 3.

 

If bits 63:12 of INVPCID_DESC are not all zero.

 

If CR4.PCIDE=0, INVPCID_DESC[11:0] is not zero, and

 

INVPCID_TYPE is either 0, or 1.

 

If INVPCID_TYPE is 0, INVPCID_DESC[127:64] is not a canon-

 

ical address.

#PF(fault-code)

If a page fault occurs in accessing the memory operand.

#SS(0)

If the memory destination operand is in the SS segment and the

 

memory address is in a non-canonical form.

#UD

If the LOCK prefix is used.

 

If CPUID.(EAX=07H, ECX=0H):EBX.INVPCID (bit 10) = 0.

7-32

Ref. # 319433-011

Соседние файлы в папке Лаб2012