-
IA-32 Intel ArchitectureSoftware Developers Manual
Volume 3:System Programming Guide
NOTE: The IA-32 Intel Architecture Software Developers
Manualconsists of four volumes: Basic Architecture, Order Number
253665;Instruction Set Reference A-M, Order Number 253666;
Instruction SetReference N-Z, Order Number 253667; and the System
ProgrammingGuide, Order Number 253668. Refer to all four volumes
whenevaluating your design needs.
Order Number: 253668-017September 2005
-
INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH
INTEL PRODUCTS. NO LICENSE, EX-PRESS OR IMPLIED, BY ESTOPPEL OR
OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BYTHIS
DOCUMENT. EXCEPT AS PROVIDED IN INTELS TERMS AND CONDITIONS OF SALE
FOR SUCH PRODUCTS,INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL
DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RE-LATING TO SALE AND/OR
USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO
FIT-NESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT
OF ANY PATENT, COPYRIGHT OROTHER INTELLECTUAL PROPERTY RIGHT. INTEL
PRODUCTS ARE NOT INTENDED FOR USE IN MEDICAL, LIFESAVING, OR LIFE
SUSTAINING APPLICATIONS.
Intel may make changes to specifications and product
descriptions at any time, without notice.
Developers must not rely on the absence or characteristics of
any features or instructions marked reserved or undefined.Improper
use of reserved or undefined features or instructions may cause
unpredictable behavior or failure in developer'ssoftware code when
running on an Intel processor. Intel reserves these features or
instructions for future definition and shallhave no responsibility
whatsoever for conflicts or incompatibilities arising from their
unauthorized use.
The Intel IA-32 architecture processors (e.g., Pentium 4 and
Pentium III processors) may contain design defects or errorsknown
as errata. Current characterized errata are available on
request.
Hyper-Threading Technology requires a computer system with an
Intel Pentium 4 processor supporting Hyper-ThreadingTechnology and
an HT Technology enabled chipset, BIOS and operating system.
Performance will vary depending on thespecific hardware and
software you use. See
http://www.intel.com/techtrends/technologies/hyperthreading.htm for
more in-formation including details on which processors support HT
Technology.
Intel, Intel386, Intel486, Pentium, Intel Xeon, Intel NetBurst,
Intel SpeedStep, OverDrive, MMX, Celeron, and Itanium aretrademarks
or registered trademarks of Intel Corporation and its subsidiaries
in the United States and other countries.
*Other names and brands may be claimed as the property of
others.
Contact your local Intel sales office or your distributor to
obtain the latest specifications and before placing your product
order.
Copies of documents which have an ordering number and are
referenced in this document, or other Intel literature, may
beobtained from:
Intel CorporationP.O. Box 5937Denver, CO 80217-9808
or call 1-800-548-4725or visit Intels website at
http://www.intel.com
Copyright 1997-2005 Intel Corporation
http://www.intel.com/info/hyperthreading/http://www.intel.comhttp://www.intel.com/techtrends/technologies/hyperthreading.htm
-
CONTENTSPAGE
CHAPTER 1ABOUT THIS MANUAL1.1 IA-32 PROCESSORS COVERED IN THIS
MANUAL . . . . . . . . . . . . . . . . . . . . . . . 1-11.2
OVERVIEW OF THE SYSTEM PROGRAMMING GUIDE. . . . . . . . . . . . . .
. . . . . . 1-21.3 NOTATIONAL CONVENTIONS. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 1-41.3.1 Bit
and Byte Order . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .1-41.3.2 Reserved Bits
and Software Compatibility . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .1-41.3.3 Instruction Operands . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .1-51.3.4 Hexadecimal and Binary Numbers . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .1-61.3.5
Segmented Addressing . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .1-61.3.6 Syntax for
CPUID, CR, and MSR Values . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .1-61.3.7 Exceptions. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .1-71.4 RELATED LITERATURE . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8
CHAPTER 2SYSTEM ARCHITECTURE OVERVIEW2.1 OVERVIEW OF THE
SYSTEM-LEVEL ARCHITECTURE . . . . . . . . . . . . . . . . . . .
2-22.1.1 Global and Local Descriptor Tables . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .2-52.1.1.1 Global and
Local Descriptor Tables in IA-32 Mode . . . . . . . . . . . . . . .
. . . . . .2-52.1.2 System Segments, Segment Descriptors, and Gates
. . . . . . . . . . . . . . . . . . . . . .2-52.1.2.1 Gates in
IA-32e Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .2-62.1.3 Task-State Segments and
Task Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .2-62.1.3.1 Task-State Segments in IA-32e Mode . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .2-72.1.4 Interrupt
and Exception Handling . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .2-72.1.4.1 Interrupt and Exception
Handling IA-32e Mode . . . . . . . . . . . . . . . . . . . . . . .
.2-72.1.5 Memory Management . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .2-72.1.5.1
Memory Management in IA-32e Mode . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .2-82.1.6 System Registers . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .2-82.1.6.1 System Registers in IA-32e Mode . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .2-92.1.7
Other System Resources . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .2-92.2 MODES OF OPERATION
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 2-102.3 SYSTEM FLAGS AND FIELDS IN THE EFLAGS
REGISTER . . . . . . . . . . . . . . . 2-122.3.1 System Flags and
Fields in IA-32e Mode . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .2-142.4 MEMORY-MANAGEMENT REGISTERS . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 2-142.4.1 Global
Descriptor Table Register (GDTR). . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .2-152.4.2 Local Descriptor Table Register
(LDTR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.2-152.4.3 IDTR Interrupt Descriptor Table Register . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .2-162.4.4 Task Register
(TR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .2-162.5 CONTROL REGISTERS . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 2-162.5.1 CPUID Qualification of Control Register Flags .
. . . . . . . . . . . . . . . . . . . . . . . . .2-242.6 SYSTEM
INSTRUCTION SUMMARY . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 2-242.6.1 Loading and Storing System Registers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.2-252.6.2 Verifying of Access Privileges . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .2-262.6.3
Loading and Storing Debug Registers. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .2-272.6.4 Invalidating Caches and
TLBs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .2-272.6.5 Controlling the Processor . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.2-272.6.6 Reading Performance-Monitoring and Time-Stamp Counters .
. . . . . . . . . . . . .2-282.6.6.1 Reading Counters in 64-Bit
Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .2-29
Vol. 3 iii
-
CONTENTS
PAGE
2.6.7 Reading and Writing Model-Specific Registers . . . . . . .
. . . . . . . . . . . . . . . . . . .2-292.6.7.1 Reading and
Writing Model-Specific Registers in 64-Bit Mode . . . . . . . . . .
.2-29
CHAPTER 3PROTECTED-MODE MEMORY MANAGEMENT3.1 MEMORY MANAGEMENT
OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 3-13.2 USING SEGMENTS. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-33.2.1 Basic Flat Model . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .3-33.2.2
Protected Flat Model . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .3-33.2.3
Multi-Segment Model. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .3-53.2.4 Segmentation
in IA-32e Mode. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .3-63.2.5 Paging and Segmentation . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .3-63.3 PHYSICAL ADDRESS SPACE . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 3-63.3.1 Physical
Address Space for Processors with Intel EM64T . . . . . . . . . . .
. . . . . .3-73.4 LOGICAL AND LINEAR ADDRESSES . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 3-73.4.1 Logical
Address Translation in IA-32e Mode. . . . . . . . . . . . . . . . .
. . . . . . . . . . . .3-83.4.2 Segment Selectors . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .3-83.4.3 Segment Registers . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.3-93.4.4 Segment Loading Instructions in IA-32e Mode . . . . . . .
. . . . . . . . . . . . . . . . . . .3-113.4.5 Segment Descriptors
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .3-123.4.5.1 Code- and Data-Segment
Descriptor Types. . . . . . . . . . . . . . . . . . . . . . . . .
.3-153.5 SYSTEM DESCRIPTOR TYPES . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 3-173.5.1 Segment
Descriptor Tables . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .3-183.5.2 Segment Descriptor Tables
in IA-32e Mode . . . . . . . . . . . . . . . . . . . . . . . . . .
. .3-203.6 PAGING (VIRTUAL MEMORY) OVERVIEW . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 3-203.6.1 Paging Options . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .3-213.6.2 Page Tables and Directories in the
Absence of Intel EM64T . . . . . . . . . . . . . . .3-223.7 PAGE
TRANSLATION USING 32-BIT PHYSICAL ADDRESSING . . . . . . . . . . .
. 3-223.7.1 Linear Address Translation (4-KByte Pages) . . . . . .
. . . . . . . . . . . . . . . . . . . . .3-233.7.2 Linear Address
Translation (4-MByte Pages) . . . . . . . . . . . . . . . . . . . .
. . . . . . .3-243.7.3 Mixing 4-KByte and 4-MByte Pages . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .3-253.7.4
Memory Aliasing . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .3-253.7.5 Base Address
of the Page Directory . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .3-253.7.6 Page-Directory and Page-Table
Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.3-263.7.7 Not Present Page-Directory and Page-Table Entries . . .
. . . . . . . . . . . . . . . . . .3-303.8 36-BIT PHYSICAL
ADDRESSING USING THE PAE PAGING MECHANISM . . . 3-303.8.1 Enhanced
Legacy PAE Paging . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .3-313.8.2 Linear Address Translation With
PAE Enabled (4-KByte Pages) . . . . . . . . . . . .3-313.8.3 Linear
Address Translation With PAE Enabled (2-MByte Pages) . . . . . . .
. . . . .3-323.8.4 Accessing the Full Extended Physical Address
Space With the
Extended Page-Table Structure . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .3-333.8.5 Page-Directory and
Page-Table Entries With Extended Addressing
Enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .3-343.9
36-BIT PHYSICAL ADDRESSING USING THE PSE-36 PAGING
MECHANISM . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 3-373.10
PAE-ENABLED PAGING IN IA-32E MODE. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 3-393.10.1 IA-32e Mode Linear Address
Translation (4-KByte Pages). . . . . . . . . . . . . . . .
.3-393.10.2 IA-32e Mode Linear Address Translation (2-MByte Pages)
. . . . . . . . . . . . . . . .3-403.10.3 Enhanced Paging Data
Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .3-413.10.3.1 Reserved Bit Checking . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.3-433.11 MAPPING SEGMENTS TO PAGES . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 3-453.12 TRANSLATION
LOOKASIDE BUFFERS (TLBS) . . . . . . . . . . . . . . . . . . . . .
. . . . 3-46
iv Vol. 3
-
CONTENTS
PAGE
CHAPTER 4PROTECTION4.1 ENABLING AND DISABLING SEGMENT AND PAGE
PROTECTION . . . . . . . . . . 4-14.2 FIELDS AND FLAGS USED FOR
SEGMENT-LEVEL AND
PAGE-LEVEL PROTECTION. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 4-24.2.1 Code Segment
Descriptor in 64-bit Mode . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 4-44.3 LIMIT CHECKING . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 4-54.3.1 Limit Checking in 64-bit Mode . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 4-64.4 TYPE
CHECKING . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 4-64.4.1 Null Segment
Selector Checking . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 4-84.4.1.1 NULL Segment Checking in 64-bit
Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-84.5
PRIVILEGE LEVELS . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 4-84.6 PRIVILEGE
LEVEL CHECKING WHEN ACCESSING DATA SEGMENTS. . . . . . 4-114.6.1
Accessing Data in Code Segments . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 4-134.7 PRIVILEGE LEVEL CHECKING
WHEN LOADING THE SS REGISTER . . . . . . . 4-134.8 PRIVILEGE LEVEL
CHECKING WHEN TRANSFERRING PROGRAM
CONTROL BETWEEN CODE SEGMENTS. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 4-134.8.1 Direct Calls or Jumps to Code
Segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4-144.8.1.1 Accessing Nonconforming Code Segments . . . . . . . . .
. . . . . . . . . . . . . . . . 4-154.8.1.2 Accessing Conforming
Code Segments . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 4-164.8.2 Gate Descriptors . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-174.8.3
Call Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 4-184.8.3.1
IA-32e Mode Call Gates . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 4-194.8.4 Accessing a Code
Segment Through a Call Gate . . . . . . . . . . . . . . . . . . . .
. . . 4-204.8.5 Stack Switching . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4-234.8.5.1 Stack Switching in 64-bit Mode. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 4-264.8.6 Returning
from a Called Procedure . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 4-264.8.7 Performing Fast Calls to System
Procedures with the
SYSENTER and SYSEXIT Instructions. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 4-284.8.7.1 SYSENTER and SYSEXIT
Instructions in IA-32e Mode. . . . . . . . . . . . . . . .
4-294.8.8 Fast System Calls in 64-bit Mode . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 4-304.9 PRIVILEGED
INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 4-324.10 POINTER VALIDATION . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 4-324.10.1 Checking Access Rights (LAR Instruction) . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 4-334.10.2 Checking
Read/Write Rights (VERR and VERW Instructions) . . . . . . . . . .
. . . 4-344.10.3 Checking That the Pointer Offset Is Within Limits
(LSL Instruction) . . . . . . . . . 4-344.10.4 Checking Caller
Access Privileges (ARPL Instruction) . . . . . . . . . . . . . . .
. . . . 4-354.10.5 Checking Alignment . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4-374.11 PAGE-LEVEL PROTECTION. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 4-374.11.1
Page-Protection Flags . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 4-384.11.2 Restricting
Addressable Domain . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 4-384.11.3 Page Type . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 4-384.11.4 Combining Protection of Both Levels of
Page Tables . . . . . . . . . . . . . . . . . . . . 4-394.11.5
Overrides to Page Protection. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 4-394.12 COMBINING PAGE AND
SEGMENT PROTECTION . . . . . . . . . . . . . . . . . . . . . .
4-394.13 PAGE-LEVEL PROTECTION AND EXECUTE-DISABLE BIT . . . . . .
. . . . . . . . . . 4-404.13.1 Detecting and Enabling the
Execute-Disable Bit Capability. . . . . . . . . . . . . . . .
4-414.13.2 Execute-Disable Bit Page Protection. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 4-414.13.3 Reserved Bit
Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 4-434.13.4 Exception Handling . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 4-44
Vol. 3 v
-
CONTENTS
PAGE
CHAPTER 5INTERRUPT AND EXCEPTION HANDLING5.1 INTERRUPT AND
EXCEPTION OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 5-15.2 EXCEPTION AND INTERRUPT VECTORS . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 5-25.3 SOURCES OF
INTERRUPTS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 5-25.3.1 External Interrupts . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .5-25.3.2 Maskable Hardware Interrupts . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.5-45.3.3 Software-Generated Interrupts . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .5-45.4 SOURCES OF
EXCEPTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 5-55.4.1 Program-Error Exceptions . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .5-55.4.2 Software-Generated Exceptions . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .5-55.4.3
Machine-Check Exceptions . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .5-55.5 EXCEPTION
CLASSIFICATIONS . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 5-55.6 PROGRAM OR TASK RESTART . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5-65.7 NONMASKABLE INTERRUPT (NMI) . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 5-85.7.1 Handling Multiple
NMIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .5-85.8 ENABLING AND DISABLING INTERRUPTS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-85.8.1
Masking Maskable Hardware Interrupts . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .5-95.8.2 Masking Instruction
Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .5-105.8.3 Masking Exceptions and Interrupts When
Switching Stacks. . . . . . . . . . . . . . . .5-105.9 PRIORITY
AMONG SIMULTANEOUS EXCEPTIONS AND INTERRUPTS . . . . . 5-105.10
INTERRUPT DESCRIPTOR TABLE (IDT). . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 5-125.11 IDT DESCRIPTORS. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 5-135.12 EXCEPTION AND INTERRUPT HANDLING. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 5-145.12.1 Exception- or
Interrupt-Handler Procedures . . . . . . . . . . . . . . . . . . .
. . . . . . . . .5-155.12.1.1 Protection of Exception- and
Interrupt-Handler Procedures . . . . . . . . . . . . .
.5-175.12.1.2 Flag Usage By Exception- or Interrupt-Handler
Procedure . . . . . . . . . . . . . .5-185.12.2 Interrupt Tasks. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .5-195.13 ERROR CODE. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 5-215.14 EXCEPTION AND INTERRUPT HANDLING IN 64-BIT
MODE. . . . . . . . . . . . . . . 5-225.14.1 64-Bit Mode IDT . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .5-225.14.2 64-Bit Mode Stack Frame . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .5-235.14.3 IRET in IA-32e Mode. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.5-245.14.4 Stack Switching in IA-32e Mode . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .5-245.14.5
Interrupt Stack Table . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .5-255.15 EXCEPTION AND
INTERRUPT REFERENCE . . . . . . . . . . . . . . . . . . . . . . . .
. . . 5-26
Interrupt 0Divide Error Exception (#DE) . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .5-27Interrupt 1Debug Exception
(#DB). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .5-28Interrupt 2NMI Interrupt . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .5-29Interrupt
3Breakpoint Exception (#BP) . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .5-30Interrupt 4Overflow Exception (#OF) . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
.5-31Interrupt 5BOUND Range Exceeded Exception (#BR) . . . . . . .
. . . . . . . . . . .5-32Interrupt 6Invalid Opcode Exception (#UD)
. . . . . . . . . . . . . . . . . . . . . . . . . . .5-33Interrupt
7Device Not Available Exception (#NM) . . . . . . . . . . . . . . .
. . . . . . .5-35Interrupt 8Double Fault Exception (#DF) . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .5-37Interrupt
9Coprocessor Segment Overrun. . . . . . . . . . . . . . . . . . . .
. . . . . . . .5-39Interrupt 10Invalid TSS Exception (#TS) . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .5-40Interrupt
11Segment Not Present (#NP) . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .5-43Interrupt 12Stack Fault Exception (#SS) . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .5-45Interrupt
13General Protection Exception (#GP) . . . . . . . . . . . . . . .
. . . . . . . .5-47Interrupt 14Page-Fault Exception (#PF) . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .5-51
vi Vol. 3
-
CONTENTS
PAGE
Interrupt 16x87 FPU Floating-Point Error (#MF) . . . . . . . . .
. . . . . . . . . . . . . 5-55Interrupt 17Alignment Check Exception
(#AC). . . . . . . . . . . . . . . . . . . . . . . . 5-57Interrupt
18Machine-Check Exception (#MC) . . . . . . . . . . . . . . . . . .
. . . . . . 5-59Interrupt 19SIMD Floating-Point Exception (#XF) . .
. . . . . . . . . . . . . . . . . . . 5-61Interrupts 32 to 255User
Defined Interrupts . . . . . . . . . . . . . . . . . . . . . . . .
. . 5-64
CHAPTER 6TASK MANAGEMENT6.1 TASK MANAGEMENT OVERVIEW . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6-16.1.1 Task Structure . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-16.1.2
Task State . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 6-26.1.3
Executing a Task . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 6-36.2 TASK
MANAGEMENT DATA STRUCTURES . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 6-46.2.1 Task-State Segment (TSS) . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6-46.2.2 TSS Descriptor . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-76.2.3
TSS Descriptor in 64-bit mode. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 6-86.2.4 Task Register. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 6-96.2.5 Task-Gate Descriptor. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 6-116.3 TASK SWITCHING. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6-126.4 TASK LINKING. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-166.4.1
Use of Busy Flag To Prevent Recursive Task Switching. . . . . . . .
. . . . . . . . . . 6-186.4.2 Modifying Task Linkages . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 6-186.5 TASK ADDRESS SPACE. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 6-196.5.1 Mapping
Tasks to the Linear and Physical Address Spaces. . . . . . . . . .
. . . . . 6-196.5.2 Task Logical Address Space . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-206.6
16-BIT TASK-STATE SEGMENT (TSS). . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 6-216.7 TASK MANAGEMENT IN 64-BIT
MODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 6-23
CHAPTER 7MULTIPLE-PROCESSOR MANAGEMENT7.1 LOCKED ATOMIC
OPERATIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 7-27.1.1 Guaranteed Atomic Operations . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7-37.1.2 Bus Locking . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7-37.1.2.1 Automatic Locking. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 7-47.1.2.2
Software Controlled Bus Locking . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 7-57.1.3 Handling Self- and
Cross-Modifying Code. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 7-67.1.4 Effects of a LOCK Operation on Internal
Processor Caches. . . . . . . . . . . . . . . . 7-77.2 MEMORY
ORDERING . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 7-77.2.1 Memory Ordering in the
Pentium and Intel486 Processors . . . . . . . . . . . . . .
7-87.2.2 Memory Ordering Pentium 4, Intel Xeon, and P6 Family
Processors . . . . . . 7-87.2.3 Out-of-Order Stores For String
Operations in Pentium 4, Intel Xeon, and
P6 Family Processors . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 7-107.2.4 Strengthening
or Weakening the Memory Ordering Model . . . . . . . . . . . . . .
. . 7-117.3 PROPAGATION OF PAGE TABLE AND PAGE DIRECTORY
ENTRY CHANGES TO MULTIPLE PROCESSORS . . . . . . . . . . . . . .
. . . . . . . . . 7-137.4 SERIALIZING INSTRUCTIONS . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7-147.5 MULTIPLE-PROCESSOR (MP) INITIALIZATION . . . . . . . . . .
. . . . . . . . . . . . . . . 7-157.5.1 BSP and AP Processors . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 7-167.5.2 MP Initialization Protocol Requirements and
Restrictions
for Intel Xeon Processors . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 7-167.5.3 MP
Initialization Protocol Algorithm for Intel Xeon Processors . . . .
. . . . . . . . . 7-17
Vol. 3 vii
-
CONTENTS
PAGE
7.5.4 MP Initialization Example . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .7-187.5.4.1
Typical BSP Initialization Sequence . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .7-197.5.4.2 Typical AP
Initialization Sequence . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .7-217.5.5 Identifying Logical Processors in an
MP System. . . . . . . . . . . . . . . . . . . . . . . . .7-227.6
HYPER-THREADING AND MULTI-CORE TECHNOLOGY . . . . . . . . . . . . .
. . . . 7-237.7 DETECTING HARDWARE MULTI-THREADING SUPPORT AND
TOPOLOGY . 7-247.7.1 Initializing IA-32 Processors Supporting
Hyper-Threading Technology . . . . . . .7-247.7.2 Initializing
Dual-Core IA-32 Processors. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .7-257.7.3 Executing Multiple Threads on an
IA-32 Processor
Supporting Hardware Multi-Threading. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .7-257.7.4 Handling Interrupts on
an IA-32 Processor
Supporting Hardware Multi-Threading. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .7-257.8 INTEL HYPER-THREADING
TECHNOLOGY ARCHITECTURE . . . . . . . . . . . . 7-267.8.1 State of
the Logical Processors. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .7-277.8.2 APIC Functionality . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .7-287.8.3 Memory Type Range Registers (MTRR) . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .7-287.8.4
Page Attribute Table (PAT) . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .7-297.8.5 Machine Check
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .7-297.8.6 Debug Registers and Extensions .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.7-297.8.7 Performance Monitoring Counters. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .7-297.8.8
IA32_MISC_ENABLE MSR. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .7-307.8.9 Memory Ordering. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .7-307.8.10 Serializing Instructions. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .7-307.8.11 MICROCODE UPDATE Resources . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .7-307.8.12 Self
Modifying Code . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .7-317.8.13
Implementation-Specific HT Technology Facilities . . . . . . . . .
. . . . . . . . . . . . . .7-317.8.13.1 Processor Caches . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .7-317.8.13.2 Processor Translation Lookaside Buffers
(TLBs) . . . . . . . . . . . . . . . . . . . . . .7-317.8.13.3
Thermal Monitor . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .7-327.8.13.4 External
Signal Compatibility . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .7-327.9 DUAL-CORE ARCHITECTURE. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7-337.9.1 Logical Processor Support . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .7-337.9.2 Memory
Type Range Registers (MTRR) . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .7-347.9.3 Performance Monitoring Counters. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.7-347.9.4 IA32_MISC_ENABLE MSR. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .7-347.9.5 MICROCODE
UPDATE Resources . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .7-347.10 PROGRAMMING CONSIDERATIONS FOR HARDWARE
MULTI-THREADING
CAPABLE PROCESSORS . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 7-357.10.1 Hierarchical
Mapping of Shared Resources . . . . . . . . . . . . . . . . . . . .
. . . . . . . .7-357.10.2 Identifying Logical Processors in an MP
System. . . . . . . . . . . . . . . . . . . . . . . . .7-367.10.3
Algorithm for Three-Level Mappings of APIC_ID . . . . . . . . . . .
. . . . . . . . . . . . .7-387.10.4 Identifying Topological
Relationships in a MP System . . . . . . . . . . . . . . . . . . .
.7-417.11 MANAGEMENT OF IDLE AND BLOCKED CONDITIONS . . . . . . . .
. . . . . . . . . . 7-457.11.1 HLT Instruction . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .7-457.11.2 PAUSE Instruction. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.7-467.11.3 Detecting Support MONITOR/MWAIT Instruction . . . . . .
. . . . . . . . . . . . . . . . . .7-467.11.4 MONITOR/MWAIT
Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .7-477.11.5 Monitor/Mwait Address Range
Determination . . . . . . . . . . . . . . . . . . . . . . . . . .
.7-487.11.6 Required Operating System Support. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .7-497.11.6.1 Use the
PAUSE Instruction in Spin-Wait Loops . . . . . . . . . . . . . . .
. . . . . . . .7-497.11.6.2 Potential Usage of MONITOR/MWAIT in C0
Idle Loops . . . . . . . . . . . . . . . .7-507.11.6.3 Halt Idle
Logical Processors . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .7-52
viii Vol. 3
-
CONTENTS
PAGE
7.11.6.4 Potential Usage of MONITOR/MWAIT in C1 Idle Loops. . .
. . . . . . . . . . . . . 7-527.11.6.5 Guidelines for Scheduling
Threads on Logical Processors Sharing
Execution Resources . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 7-537.11.6.6 Eliminate
Execution-Based Timing Loops . . . . . . . . . . . . . . . . . . .
. . . . . . . 7-537.11.6.7 Place Locks and Semaphores in Aligned,
128-Byte Blocks of Memory . . . . 7-54
CHAPTER 8ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (APIC)8.1
LOCAL AND I/O APIC OVERVIEW . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 8-18.2 SYSTEM BUS VS. APIC BUS .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 8-58.3 THE INTEL 82489DX EXTERNAL APIC, THE APIC, AND
THE XAPIC . . . . . . . . 8-58.4 LOCAL APIC . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 8-58.4.1 The Local APIC Block Diagram . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8-68.4.2 Presence of the Local APIC. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 8-98.4.3 Enabling
or Disabling the Local APIC . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 8-108.4.4 Local APIC Status and Location .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 8-108.4.5 Relocating the Local APIC Registers. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 8-118.4.6 Local APIC
ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 8-128.4.7 Local APIC State . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 8-128.4.7.1 Local APIC State After Power-Up
or Reset . . . . . . . . . . . . . . . . . . . . . . . . .
8-138.4.7.2 Local APIC State After It Has Been Software Disabled .
. . . . . . . . . . . . . . . 8-138.4.7.3 Local APIC State After an
INIT Reset (Wait-for-SIPI State) . . . . . . . . . . . .
8-148.4.7.4 Local APIC State After It Receives an INIT-Deassert IPI
. . . . . . . . . . . . . . . 8-148.4.8 Local APIC Version Register
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 8-148.5 HANDLING LOCAL INTERRUPTS . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 8-158.5.1 Local
Vector Table. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 8-158.5.2 Valid Interrupt
Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 8-188.5.3 Error Handling . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 8-198.5.4 APIC Timer . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 8-208.5.5 Local Interrupt Acceptance . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-228.6
ISSUING INTERPROCESSOR INTERRUPTS . . . . . . . . . . . . . . . . .
. . . . . . . . . . 8-228.6.1 Interrupt Command Register (ICR) . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8-228.6.2 Determining IPI Destination . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 8-288.6.2.1
Physical Destination Mode . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 8-288.6.2.2 Logical Destination
Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 8-298.6.2.3 Broadcast/Self Delivery Mode. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8-318.6.2.4 Lowest Priority Delivery Mode . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 8-318.6.3 IPI Delivery
and Acceptance . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 8-328.7 SYSTEM AND APIC BUS ARBITRATION .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-328.8
HANDLING INTERRUPTS . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 8-338.8.1 Interrupt Handling
with the Pentium 4 and Intel Xeon Processors. . . . . . . . . . .
8-338.8.2 Interrupt Handling with the P6 Family and Pentium
Processors . . . . . . . . . . . . 8-348.8.3 Interrupt, Task, and
Processor Priority . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 8-368.8.3.1 Task and Processor Priorities . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8-378.8.4 Interrupt Acceptance for Fixed Interrupts . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 8-388.8.5 Signaling
Interrupt Servicing Completion. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 8-408.8.6 Task Priority in IA-32e Mode . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 8-408.8.6.1 Interaction of Task Priorities between CR8 and APIC
. . . . . . . . . . . . . . . . . 8-418.9 SPURIOUS INTERRUPT . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 8-418.10 APIC BUS MESSAGE PASSING MECHANISM AND
PROTOCOL (P6 FAMILY, PENTIUM PROCESSORS) . . . . . . . . . . . .
. . . . . . . . . 8-428.10.1 Bus Message Formats. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8-43
Vol. 3 ix
-
CONTENTS
PAGE
8.11 MESSAGE SIGNALLED INTERRUPTS . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 8-438.11.1 Message Address
Register Format . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .8-448.11.2 Message Data Register Format. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.8-45
CHAPTER 9PROCESSOR MANAGEMENT AND INITIALIZATION9.1
INITIALIZATION OVERVIEW. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 9-19.1.1 Processor State
After Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .9-29.1.2 Processor Built-In Self-Test
(BIST) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .9-29.1.3 Model and Stepping Information . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9-59.1.4
First Instruction Executed . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .9-69.2 X87 FPU
INITIALIZATION . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 9-69.2.1 Configuring the x87
FPU Environment . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .9-69.2.2 Setting the Processor for x87 FPU Software
Emulation . . . . . . . . . . . . . . . . . . . .9-79.3 CACHE
ENABLING . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 9-89.4 MODEL-SPECIFIC
REGISTERS (MSRS) . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 9-99.5 MEMORY TYPE RANGE REGISTERS (MTRRS) . . . . .
. . . . . . . . . . . . . . . . . . . . . 9-99.6 INITIALIZING
SSE/SSE2/SSE3 EXTENSIONS. . . . . . . . . . . . . . . . . . . . . .
. . . . . 9-109.7 SOFTWARE INITIALIZATION FOR REAL-ADDRESS MODE
OPERATION . . . . 9-109.7.1 Real-Address Mode IDT . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.9-119.7.2 NMI Interrupt Handling . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .9-119.8
SOFTWARE INITIALIZATION FOR PROTECTED-MODE OPERATION . . . . . . .
9-119.8.1 Protected-Mode System Data Structures . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .9-129.8.2 Initializing
Protected-Mode Exceptions and Interrupts . . . . . . . . . . . . .
. . . . . . .9-139.8.3 Initializing Paging. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .9-139.8.4 Initializing Multitasking. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.9-139.8.5 Initializing IA-32e Mode . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .9-149.8.5.1
IA-32e Mode System Data Structures . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .9-159.8.5.2 IA-32e Mode Interrupts and
Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.9-159.8.5.3 64-bit Mode and Compatibility Mode Operation . . . . .
. . . . . . . . . . . . . . . . . .9-159.8.5.4 Switching Out of
IA-32e Mode Operation . . . . . . . . . . . . . . . . . . . . . . .
. . . . .9-169.9 MODE SWITCHING. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9-179.9.1 Switching to Protected Mode. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .9-179.9.2
Switching Back to Real-Address Mode . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .9-189.10 INITIALIZATION AND MODE
SWITCHING EXAMPLE. . . . . . . . . . . . . . . . . . . . .
9-209.10.1 Assembler Usage . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .9-229.10.2
STARTUP.ASM Listing . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .9-239.10.3 MAIN.ASM Source
Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .9-339.10.4 Supporting Files. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .9-339.11 MICROCODE UPDATE FACILITIES . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 9-359.11.1
Microcode Update . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .9-369.11.2 Optional
Extended Signature Table. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .9-409.11.3 Processor Identification . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .9-419.11.4 Platform Identification . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.9-429.11.5 Microcode Update Checksum . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .9-439.11.6 Microcode
Update Loader . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .9-449.11.6.1 Hard Resets in Update
Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .9-459.11.6.2 Update in a Multiprocessor System . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .9-459.11.6.3
Update in a System Supporting Intel Hyper-Threading Technology. . .
. . . . .9-469.11.6.4 Update in a System Supporting Dual-Core
Technology . . . . . . . . . . . . . . . . .9-469.11.6.5 Update
Loader Enhancements . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .9-469.11.7 Update Signature and
Verification. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .9-46
x Vol. 3
-
CONTENTS
PAGE
9.11.7.1 Determining the Signature . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 9-479.11.7.2
Authenticating the Update. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 9-489.11.8 Pentium 4, Intel
Xeon, and P6 Family Processor
Microcode Update Specifications . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 9-499.11.8.1 Responsibilities
of the BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 9-499.11.8.2 Responsibilities of the Calling
Program . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9-519.11.8.3 Microcode Update Functions . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 9-549.11.8.4 INT
15H-based Interface. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 9-559.11.8.5 Function 00HPresence
Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 9-559.11.8.6 Function 01HWrite Microcode Update Data . . .
. . . . . . . . . . . . . . . . . . . . 9-569.11.8.7 Function
02HMicrocode Update Control . . . . . . . . . . . . . . . . . . . .
. . . . . . 9-619.11.8.8 Function 03HRead Microcode Update Data . .
. . . . . . . . . . . . . . . . . . . . . 9-629.11.8.9 Return Codes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 9-63
CHAPTER 10MEMORY CACHE CONTROL10.1 INTERNAL CACHES, TLBS, AND
BUFFERS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10-110.2 CACHING TERMINOLOGY . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 10-410.3 METHODS OF
CACHING AVAILABLE . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 10-510.3.1 Buffering of Write Combining Memory
Locations. . . . . . . . . . . . . . . . . . . . . . . . 10-810.3.2
Choosing a Memory Type . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 10-910.4 CACHE CONTROL
PROTOCOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 10-1010.5 CACHE CONTROL . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10-1010.5.1 Cache Control Registers and Bits . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 10-1110.5.2
Precedence of Cache Controls . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 10-1510.5.2.1 Selecting Memory
Types for Pentium Pro and Pentium II Processors . . . .
10-1610.5.2.2 Selecting Memory Types for Pentium 4, Intel Xeon,
and Pentium III Processors. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 10-1710.5.2.3 Writing Values
Across Pages with Different Memory Types. . . . . . . . . . . .
10-1810.5.3 Preventing Caching . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 10-1810.5.4
Disabling and Enabling the L3 Cache . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 10-1910.5.5 Cache Management
Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 10-1910.5.6 L1 Data Cache Context Mode . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10-2010.5.6.1 Adaptive Mode . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 10-2110.5.6.2
Shared Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 10-2110.6 SELF-MODIFYING CODE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 10-2110.7 IMPLICIT CACHING (PENTIUM 4, INTEL
XEON,
AND P6 FAMILY PROCESSORS) . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 10-2210.8 EXPLICIT CACHING . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 10-2210.9 INVALIDATING THE TRANSLATION LOOKASIDE
BUFFERS (TLBS) . . . . . . . 10-2310.10 STORE BUFFER . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 10-2410.11 MEMORY TYPE RANGE REGISTERS (MTRRS) . .
. . . . . . . . . . . . . . . . . . . . . . 10-2410.11.1 MTRR
Feature Identification . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 10-2610.11.2 Setting Memory Ranges
with MTRRs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 10-2710.11.2.1 IA32_MTRR_DEF_TYPE MSR. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 10-2710.11.2.2 Fixed
Range MTRRs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 10-2810.11.2.3 Variable Range MTRRs . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 10-2910.11.3 Example Base and Mask Calculations . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 10-3210.11.3.1 Base and
Mask Calculations with Intel EM64T. . . . . . . . . . . . . . . . .
. . . . . 10-3310.11.4 Range Size and Alignment Requirement. . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 10-3410.11.4.1
MTRR Precedences . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 10-3410.11.5 MTRR Initialization.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 10-35
Vol. 3 xi
-
CONTENTS
PAGE
10.11.6 Remapping Memory Types . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .10-3510.11.7 MTRR
Maintenance Programming Interface . . . . . . . . . . . . . . . . .
. . . . . . . . . .10-3610.11.7.1 MemTypeGet() Function. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.10-3610.11.7.2 MemTypeSet() Function . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .10-3710.11.8 MTRR
Considerations in MP Systems . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .10-3910.11.9 Large Page Size Considerations.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.10-4010.12 PAGE ATTRIBUTE TABLE (PAT) . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 10-4110.12.1 Detecting
Support for the PAT Feature . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .10-4110.12.2 IA32_CR_PAT MSR . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .10-4210.12.3 Selecting a Memory Type from the PAT . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .10-4310.12.4
Programming the PAT. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .10-4310.12.5 PAT
Compatibility with Earlier IA-32 Processors. . . . . . . . . . . .
. . . . . . . . . . . .10-45
CHAPTER 11INTEL MMX TECHNOLOGY SYSTEM PROGRAMMING11.1 EMULATION
OF THE MMX INSTRUCTION SET . . . . . . . . . . . . . . . . . . . .
. . . . . 11-111.2 THE MMX STATE AND MMX REGISTER ALIASING . . . .
. . . . . . . . . . . . . . . . . . 11-111.2.1 Effect of MMX, x87
FPU, FXSAVE, and FXRSTOR
Instructions on the x87 FPU Tag Word . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .11-311.3 SAVING AND RESTORING
THE MMX STATE AND REGISTERS . . . . . . . . . . . 11-411.4 SAVING
MMX STATE ON TASK OR CONTEXT SWITCHES . . . . . . . . . . . . . . .
11-511.5. EXCEPTIONS THAT CAN OCCUR WHEN EXECUTING MMX
INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 11-511.5.1 Effect
of MMX Instructions on Pending x87 Floating-Point Exceptions. . . .
. . . .11-611.6 DEBUGGING MMX CODE. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 11-6
CHAPTER 12SSE, SSE2 AND SSE3 SYSTEM PROGRAMMING12.1 PROVIDING
OPERATING SYSTEM SUPPORT FOR
SSE/SSE2/SSE3 EXTENSIONS . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 12-112.1.1 Adding Support to an
Operating System for SSE/SSE2/SSE3 Extensions. . . . .12-112.1.2
Checking for SSE/SSE2/SSE3 Extension Support . . . . . . . . . . .
. . . . . . . . . . . .12-212.1.3 Checking for Support for the
FXSAVE and FXRSTOR Instructions . . . . . . . . . .12-212.1.4
Initialization of the SSE/SSE2/SSE3 Extensions. . . . . . . . . . .
. . . . . . . . . . . . . .12-212.1.5 Providing Non-Numeric
Exception Handlers for Exceptions Generated
by the SSE/SSE2/SSE3 Instructions. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .12-412.1.6 Providing an Handler
for the SIMD Floating-Point Exception (#XF) . . . . . . . . .
.12-512.1.6.1 Numeric Error flag and IGNNE# . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .12-612.2 EMULATION OF
SSE/SSE2/SSE3 EXTENSIONS . . . . . . . . . . . . . . . . . . . . .
. . . 12-612.3 SAVING AND RESTORING THE SSE/SSE2/SSE3 STATE . . . .
. . . . . . . . . . . . . 12-612.4 SAVING THE SSE/SSE2/SSE3 STATE
ON TASK
OR CONTEXT SWITCHES . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 12-712.5 DESIGNING OS
FACILITIES FOR AUTOMATICALLY SAVING X87 FPU,
MMX, AND SSE/SSE2/SSE3 STATE ON TASK OR CONTEXT SWITCHES. . . .
12-712.5.1. Using the TS Flag to Control the Saving of the
x87 FPU, MMX, SSE, SSE2 and SSE3 State . . . . . . . . . . . . .
. . . . . . . . . . . . . .12-8
CHAPTER 13SYSTEM MANAGEMENT13.1 SYSTEM MANAGEMENT MODE OVERVIEW
. . . . . . . . . . . . . . . . . . . . . . . . . . . 13-113.2
SYSTEM MANAGEMENT INTERRUPT (SMI) . . . . . . . . . . . . . . . . .
. . . . . . . . . . 13-2
xii Vol. 3
-
CONTENTS
PAGE
13.3 SWITCHING BETWEEN SMM AND THE OTHER PROCESSOR OPERATING
MODES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 13-2
13.3.1 Entering SMM . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-313.3.2
Exiting From SMM . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 13-313.4 SMRAM . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 13-413.4.1 SMRAM State Save
Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 13-513.4.1.1 SMRAM State Save Map and Intel
EM64T. . . . . . . . . . . . . . . . . . . . . . . . . . 13-813.4.2
SMRAM Caching . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 13-1013.5 SMI HANDLER
EXECUTION ENVIRONMENT . . . . . . . . . . . . . . . . . . . . . . .
. . . 13-1113.6 EXCEPTIONS AND INTERRUPTS WITHIN SMM. . . . . . . .
. . . . . . . . . . . . . . . . 13-1213.7 MANAGING SYNCHRONOUS AND
ASYNCHRONOUS
SYSTEM MANAGEMENT INTERRUPTS . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 13-1413.7.1 I/O State Implementation . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 13-1413.8 NMI HANDLING WHILE IN SMM . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 13-1513.9 SAVING
THE X87 FPU STATE WHILE IN SMM . . . . . . . . . . . . . . . . . .
. . . . . . . 13-1613.10 SMM REVISION IDENTIFIER . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13-1713.11 AUTO HALT RESTART . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 13-1713.11.1
Executing the HLT Instruction in SMM . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 13-1813.12 SMBASE RELOCATION . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 13-1813.12.1 Relocating SMRAM to an Address Above 1
MByte. . . . . . . . . . . . . . . . . . . . . 13-1913.13 I/O
INSTRUCTION RESTART . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 13-1913.13.1 Back-to-Back SMI
Interrupts When I/O Instruction Restart Is Being Used . . .
13-2013.14 SMM MULTIPLE-PROCESSOR CONSIDERATIONS . . . . . . . . .
. . . . . . . . . . . . 13-2113.15 ENHANCED INTEL SPEEDSTEP
TECHNOLOGY . . . . . . . . . . . . . . . . . . . . . . 13-2113.15.1
Software Interface For Initiating Performance State Transitions . .
. . . . . . . . . 13-2213.16 THERMAL MONITORING AND PROTECTION. . .
. . . . . . . . . . . . . . . . . . . . . . . 13-2213.16.1
Catastrophic Shutdown Detector . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 13-2313.16.2 Thermal Monitor. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 13-2313.16.2.1 Thermal Monitor 1. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 13-2313.16.2.2 Thermal Monitor 2. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13-2413.16.2.3 Performance State Transitions and Thermal
Monitoring. . . . . . . . . . . . . . . 13-2513.16.2.4 Thermal
Status Information. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 13-2513.16.3 Software Controlled Clock
Modulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 13-2713.16.4 Detection of Thermal Monitor and Software
Controlled
Clock Modulation Facilities . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 13-28
CHAPTER 14MACHINE-CHECK ARCHITECTURE14.1 MACHINE-CHECK
EXCEPTIONS AND ARCHITECTURE . . . . . . . . . . . . . . . . . .
14-114.2 COMPATIBILITY WITH PENTIUM PROCESSOR . . . . . . . . . . .
. . . . . . . . . . . . . . 14-114.3 MACHINE-CHECK MSRS . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 14-214.3.1 Machine-Check Global Control MSRs . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 14-214.3.1.1
IA32_MCG_CAP MSR (Pentium 4 and Intel Xeon Processors) . . . . . .
. . . . 14-214.3.1.2 MCG_CAP MSR (P6 Family Processors) . . . . . .
. . . . . . . . . . . . . . . . . . . . . 14-314.3.1.3
IA32_MCG_STATUS MSR . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 14-414.3.1.4 IA32_MCG_CTL MSR . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 14-514.3.2 Error-Reporting Register Banks. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 14-514.3.2.1
IA32_MCi_CTL MSRs. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 14-514.3.2.2 IA32_MCi_STATUS MSRs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 14-614.3.2.3 IA32_MCi_ADDR MSRs . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 14-714.3.2.4
IA32_MCi_MISC MSRs . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 14-814.3.2.5 IA32_MCG Extended
Machine Check State MSRs . . . . . . . . . . . . . . . . . . .
14-8
Vol. 3 xiii
-
CONTENTS
PAGE
14.3.3 Mapping of the Pentium Processor Machine-Check Errorsto
the Machine-Check Architecture . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .14-9
14.4 MACHINE-CHECK AVAILABILITY . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 14-1014.5 MACHINE-CHECK
INITIALIZATION . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 14-1014.6. INTERPRETING THE MCA ERROR CODES . . . .
. . . . . . . . . . . . . . . . . . . . . . . 14-1114.6.1 Simple
Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .14-1214.6.2 Compound Error
Codes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .14-1214.6.3 Machine-Check Error Codes
Interpretation . . . . . . . . . . . . . . . . . . . . . . . . . .
. .14-1514.7 GUIDELINES FOR WRITING MACHINE-CHECK SOFTWARE . . . .
. . . . . . . . . 14-1514.7.1 Machine-Check Exception Handler . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.14-1614.7.2 Enabling BINIT# Drive and BINIT# Observation . . . . .
. . . . . . . . . . . . . . . . . . .14-1714.7.3 Pentium Processor
Machine-Check Exception Handling . . . . . . . . . . . . . . . .
.14-1814.7.4 Logging Correctable Machine-Check Errors . . . . . . .
. . . . . . . . . . . . . . . . . . . .14-18
CHAPTER 15DEBUGGING AND PERFORMANCE MONITORING15.1 OVERVIEW OF
THE DEBUGGING SUPPORT FACILITIES . . . . . . . . . . . . . . . .
15-115.2 DEBUG REGISTERS. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 15-215.2.1 Debug
Address Registers (DR0-DR3). . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .15-315.2.2 Debug Registers DR4 and DR5 . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-415.2.3 Debug Status Register (DR6) . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .15-415.2.4 Debug
Control Register (DR7) . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .15-515.2.5 Breakpoint Field
Recognition. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .15-615.2.6 Debug Registers and Intel EM64T .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-715.3 DEBUG EXCEPTIONS . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 15-715.3.1 Debug
Exception (#DB)Interrupt Vector 1 . . . . . . . . . . . . . . . . .
. . . . . . . . . . .15-815.3.1.1 Instruction-Breakpoint Exception
Condition . . . . . . . . . . . . . . . . . . . . . . . . .
.15-915.3.1.2 Data Memory and I/O Breakpoint Exception Conditions .
. . . . . . . . . . . . . .15-1015.3.1.3 General-Detect Exception
Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-1115.3.1.4 Single-Step Exception Condition . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .15-1115.3.1.5
Task-Switch Exception Condition . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .15-1115.3.2 Breakpoint Exception
(#BP)Interrupt Vector 3 . . . . . . . . . . . . . . . . . . . . . .
. .15-1215.4 LAST BRANCH RECORDING OVERVIEW. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 15-1215.5 LAST BRANCH, INTERRUPT,
AND EXCEPTION RECORDING
(PENTIUM 4 AND INTEL XEON PROCESSORS) . . . . . . . . . . . . .
. . . . . . . . . . 15-1215.5.1 CPL-Qualified Last Branch Recording
Mechanism . . . . . . . . . . . . . . . . . . . . . .15-1315.5.2
MSR_DEBUGCTLA MSR (Pentium 4 and Intel Xeon Processors). . . . . .
. . . .15-1515.5.3 LBR Stack (Pentium 4 and Intel Xeon Processors).
. . . . . . . . . . . . . . . . . . . . .15-1615.5.3.1 LBR Stack
and Intel EM64T . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .15-1815.5.4 Monitoring Branches, Exceptions,
and Interrupts (Pentium 4 and
Intel Xeon Processors) . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .15-1815.5.5
Single-Stepping on Branches, Exceptions, and Interrupts . . . . . .
. . . . . . . . . .15-1815.5.6 Branch Trace Messages . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-1915.5.7 Last Exception Records (Pentium 4 and Intel Xeon
Processors) . . . . . . . . . . .15-1915.5.7.1 Last Exception
Records and Intel EM64T . . . . . . . . . . . . . . . . . . . . . .
. . . .15-1915.5.8 Branch Trace Store (BTS) . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-1915.5.8.1 Detection of the BTS Facilities . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .15-2015.5.8.2
Setting Up the DS Save Area . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .15-2015.5.8.3 Setting Up the BTS
Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .15-2115.5.8.4 Setting Up CPL-Qualified BTS . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-2215.5.8.5 Writing the DS Interrupt Service Routine . . . . . .
. . . . . . . . . . . . . . . . . . . . .15-22
xiv Vol. 3
-
CONTENTS
PAGE
15.6 LAST BRANCH, INTERRUPT, AND EXCEPTIONRECORDING (PENTIUM M
PROCESSORS) . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-23
15.7 LAST BRANCH, INTERRUPT, AND EXCEPTIONRECORDING (P6 FAMILY
PROCESSORS) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-25
15.7.1 DebugCtlMSR Register (P6 Family Processors) . . . . . . .
. . . . . . . . . . . . . . . . 15-2515.7.2 Last Branch and Last
Exception MSRs (P6 Family Processors) . . . . . . . . . . .
15-2615.7.3 Monitoring Branches, Exceptions, and Interrupts (P6
Family Processors . . . . 15-2715.8 TIME-STAMP COUNTER. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 15-2815.9 PERFORMANCE MONITORING OVERVIEW. . . . . . . . . . .
. . . . . . . . . . . . . . . . 15-2915.10 PERFORMANCE MONITORING
(PENTIUM 4
AND INTEL XEON PROCESSORS) . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 15-3015.10.1 ESCR MSRs . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 15-3315.10.2 Performance Counters. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 15-3515.10.3 CCCR MSRs . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-3615.10.4 Debug Store (DS) Mechanism. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 15-3815.10.5 DS Save
Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 15-3915.10.5.1 DS Save Area and
IA-32e Mode Operation . . . . . . . . . . . . . . . . . . . . . . .
. 15-4215.10.6 Programming the Performance Counters for
Non-Retirement Events. . . . . . . 15-4315.10.6.1 Selecting Events
to Count. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 15-4415.10.6.2 Filtering Events . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 15-4715.10.6.3 Starting Event Counting . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
15-4815.10.6.4 Reading a Performance Counters Count . . . . . . . .
. . . . . . . . . . . . . . . . . . 15-4815.10.6.5 Halting Event
Counting . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 15-4915.10.6.6 Cascading Counters . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 15-4915.10.6.7 EXTENDED CASCADING . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 15-5015.10.6.8 EXTENDED
CASCADING . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 15-5115.10.6.9 Generating an Interrupt on Overflow.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-5115.10.6.10 Counter Usage Guideline . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 15-5215.10.7
At-Retirement Counting . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 15-5215.10.7.1 Using
At-Retirement Counting . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 15-5415.10.7.2 Tagging Mechanism for
Front_end_event . . . . . . . . . . . . . . . . . . . . . . . . .
15-5515.10.7.3 Tagging Mechanism For Execution_event . . . . . . .
. . . . . . . . . . . . . . . . . . 15-5515.10.7.4 Tagging
Mechanism for Replay_event . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 15-5615.10.8 Precise Event-Based Sampling (PEBS) .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-5615.10.8.1 Detection of the Availability of the PEBS Facilities
. . . . . . . . . . . . . . . . . . . 15-5615.10.8.2 Setting Up the
DS Save Area . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 15-5715.10.8.3 Setting Up the PEBS Buffer . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-5715.10.8.4 Writing a PEBS Interrupt Service Routine . . . . . .
. . . . . . . . . . . . . . . . . . . 15-5715.10.8.5 Other DS
Mechanism Implications . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 15-5715.10.9 Counting Clocks. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 15-5715.10.9.1 Non-Halted Clockticks. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-5815.10.9.2 Non-Sleep Clockticks . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 15-5915.10.9.3
Incrementing the Time-Stamp Counter . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 15-5915.10.10 Operating System Implications
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 15-6015.11 PERFORMANCE MONITORING AND HYPER-THREADING
TECHNOLOGY. . 15-6015.11.1 ESCR MSRs . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 15-6115.11.2 CCCR MSRs . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15-6215.11.3 IA32_PEBS_ENABLE MSR. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 15-6415.11.4
Performance Monitoring Events . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 15-6415.12 PERFORMANCE MONITORING
AND DUAL-CORE TECHNOLOGY . . . . . . . . 15-6615.13 PERFORMANCE
MONITORING ON 64-BIT INTEL XEON PROCESSOR
MP WITH UP TO 8-MBYTE L3 CACHE. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 15-66
Vol. 3 xv
-
CONTENTS
PAGE
15.14 PERFORMANCE MONITORING (P6 FAMILY PROCESSOR) . . . . . . .
. . . . . . . 15-7015.14.1 PerfEvtSel0 and PerfEvtSel1 MSRs . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.15-7115.14.2 PerfCtr0 and PerfCtr1 MSRs. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .15-7215.14.3
Starting and Stopping the Performance-Monitoring Counters. . . . .
. . . . . . . . .15-7315.14.4 Event and Time-Stamp Monitoring
Software. . . . . . . . . . . . . . . . . . . . . . . . . .
.15-7315.14.5 Monitoring Counter Overflow. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .15-7415.15
PERFORMANCE MONITORING (PENTIUM PROCESSORS) . . . . . . . . . . . .
. . 15-7415.15.1 Control and Event Select Register (CESR) . . . . .
. . . . . . . . . . . . . . . . . . . . . . .15-7515.15.2 Use of
the Performance-Monitoring Pins. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .15-7615.15.3 Events Counted. . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .15-77
CHAPTER 168086 EMULATION16.1 REAL-ADDRESS MODE . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 16-116.1.1 Address Translation in Real-Address Mode . . . . . . .
. . . . . . . . . . . . . . . . . . . . .16-316.1.2 Registers
Supported in Real-Address Mode . . . . . . . . . . . . . . . . . .
. . . . . . . . . .16-416.1.3 Instructions Supported in
Real-Address Mode . . . . . . . . . . . . . . . . . . . . . . . . .
.16-416.1.4 Interrupt and Exception Handling . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .16-616.2
VIRTUAL-8086 MODE . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 16-716.2.1 Enabling
Virtual-8086 Mode . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .16-916.2.2 Structure of a Virtual-8086
Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .16-916.2.3 Paging of Virtual-8086 Tasks . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.16-1016.2.4 Protection within a Virtual-8086 Task . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .16-1116.2.5 Entering
Virtual-8086 Mode. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .16-1116.2.6 Leaving Virtual-8086 Mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .16-1316.2.7 Sensitive Instructions. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.16-1416.2.8 Virtual-8086 Mode I/O . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
.16-1416.2.8.1 I/O-Port-Mapped I/O . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .16-1416.2.8.2
Memory-Mapped I/O. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .16-1516.2.8.3 Special I/O
Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .16-1516.3 INTERRUPT AND EXCEPTION
HANDLING IN VIRTUAL-8086 MODE . . . . . . . 16-1516.3.1 Class
1Hardware Interrupt and Exception Handling
in Virtual-8086 Mode . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .16-1716.3.1.1 Handling
an Interrupt or Exception Through a Protected-Mode Trap
or Interrupt Gate . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .16-1716.3.1.2 Handling
an Interrupt or Exception With an 8086 Program Interrupt
or Exception Handler . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .16-1916.3.1.3 Handling an
Interrupt or Exception Through a Task Gate . . . . . . . . . . . .
. .16-2016.3.2 Class 2Maskable Hardware Interrupt Handling in
Virtual-8086 Mode Using the Virtual Interrupt Mechanism . . . .
. . . . . . . . . . . .16-2016.3.3 Class 3Software Interrupt
Handling in Virtual-8086 Mode. . . . . . . . . . . . . .
.16-2316.3.3.1 Method 1: Software Interrupt Handling . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .16-2516.3.3.2 Methods 2
and 3: Software Interrupt Handling . . . . . . . . . . . . . . . .
. . . . . . .16-2616.3.3.3 Method 4: Software Interrupt Handling .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
.16-2616.3.3.4 Method 5: Software Interrupt Handling . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .16-2616.3.3.5 Method 6:
Software Interrupt Handling . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .16-2716.4 PROTECTED-MODE VIRTUAL INTERRUPTS . . .
. . . . . . . . . . . . . . . . . . . . . . . 16-28
CHAPTER 17MIXING 16-BIT AND 32-BIT CODE17.1 DEFINING 16-BIT AND
32-BIT PROGRAM MODULES . . . . . . . . . . . . . . . . . . . .
17-217.2 MIXING 16-BIT AND 32-BIT OPERATIONS WITHIN A CODE SEGMENT
. . . . . 17-2
xvi Vol. 3
-
CONTENTS
PAGE
17.3 SHARING DATA AMONG MIXED-SIZE CODE SEGMENTS . . . . . . . .
. . . . . . . . 17-317.4 TRANSFERRING CONTROL AMONG MIXED-SIZE CODE
SEGMENTS . . . . . . 17-417.4.1 Code-Segment Pointer Size . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17-517.4.2 Stack Management for Control Transfer . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 17-517.4.2.1 Controlling
the Operand-Size Attribute For a Call. . . . . . . . . . . . . . .
. . . . . . 17-717.4.2.2 Passing Parameters With a Gate . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 17-717.4.3
Interrupt Control Transfers. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 17-817.4.4 Parameter
Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 17-817.4.5 Writing Interface
Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 17-8
CHAPTER 18IA-32 COMPATIBILITY18.1. IA-32 PROCESSOR FAMILIES AND
CATEGORIES. . . . . . . . . . . . . . . . . . . . . . . 18-118.2.
RESERVED BITS. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 18-218.3. ENABLING
NEW FUNCTIONS AND MODES . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 18-218.4. DETECTING THE PRESENCE OF NEW FEATURES
THROUGH SOFTWARE . 18-218.5. INTEL MMX TECHNOLOGY . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-318.6. STREAMING SIMD EXTENSIONS (SSE) . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 18-318.7. STREAMING SIMD
EXTENSIONS 2 (SSE2). . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 18-318.8. STREAMING SIMD EXTENSIONS 3 (SSE3). . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 18-318.9.
HYPER-THREADING TECHNOLOGY. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 18-418.10. DUAL-CORE TECHNOLOGY . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 18-418.11. SPECIFIC FEATURES OF DUAL-CORE PROCESSOR . . . . . . .
. . . . . . . . . . . . 18-418.12. NEW INSTRUCTIONS IN THE PENTIUM
AND LATER IA-32 PROCESSORS . . 18-418.12.1. Instructions Added
Prior to the Pentium Processor . . . . . . . . . . . . . . . . . .
. . . . 18-518.13. OBSOLETE INSTRUCTIONS . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 18-618.14.
UNDEFINED OPCODES . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 18-618.15. NEW FLAGS IN THE
EFLAGS REGISTER . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 18-618.15.1. Using EFLAGS Flags to Distinguish Between
32-Bit IA-32 Processors . . . . . . 18-718.16. STACK OPERATIONS . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 18-718.16.1. PUSH SP . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 18-718.16.2. EFLAGS Pushed on the Stack . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-818.17. X87 FPU . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-818.17.1. Control Register CR0 Flags. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 18-818.17.2.
x87 FPU Status Word . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 18-918.17.2.1. Condition
Code Flags (C0 through C3). . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 18-918.17.2.2. Stack Fault Flag . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 18-1018.17.3. x87 FPU Control Word. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 18-1018.17.4.
x87 FPU Tag Word . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 18-1018.17.5. Data Types .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 18-1118.17.5.1. NaNs . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 18-1118.17.5.2. Pseudo-zero, Pseudo-NaN,
Pseudo-infinity, and Unnormal Formats. . . . . 18-1118.17.6.
Floating-Point Exceptions . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 18-1118.17.6.1. Denormal
Operand Exception (#D). . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 18-1118.17.6.2. Numeric Overflow Exception (#O) . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-1218.17.6.3. Numeric Underflow Exception (#U). . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 18-1218.17.6.4. Exception
Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 18-1318.17.6.5. CS and EIP For FPU
Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 18-1318.17.6.6. FPU Error Signals . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-1318.17.6.7. Assertion of the FERR# Pin . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 18-1318.17.6.8.
Invalid Operation Exception On Denormals . . . . . . . . . . . . .
. . . . . . . . . . . 18-1418.17.6.9. Alignment Check Exceptions
(#AC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-14
Vol. 3 xvii
-
CONTENTS
PAGE
18.17.6.10. Segment Not Present Exception During FLDENV . . . .
. . . . . . . . . . . . . . . .18-1418.17.6.11. Device Not
Available Exception (#NM). . . . . . . . . . . . . . . . . . . . .
. . . . . . . .18-1418.17.6.12. Coprocessor Segment Overrun
Exception . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1418.17.6.13. General Protection Exception (#GP) . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .18-1418.17.6.14.
Floating-Point Error Exception (#MF) . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .18-1518.17.7. Changes to
Floating-Point Instructions . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .18-1518.17.7.1. FDIV, FPREM, and FSQRT
Instructions . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1518.17.7.2. FSCALE Instruction . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1518.17.7.3. FPREM1 Instruction . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1518.17.7.4. FPREM Instruction . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1518.17.7.5. FUCOM, FUCOMP, and FUCOMPP Instructions. . . . . .
. . . . . . . . . . . . . . .18-1618.17.7.6. FPTAN Instruction . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .18-1618.17.7.7. Stack Overflow . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .18-1618.17.7.8. FSIN, FCOS, and FSINCOS Instructions . . . . . .
. . . . . . . . . . . . . . . . . . . . .18-1618.17.7.9. FPATAN
Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .18-1618.17.7.10. F2XM1 Instruction. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .18-1618.17.7.11. FLD Instruction . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .18-1718.17.7.12. FXTRACT Instruction . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1718.17.7.13. Load Constant Instructions. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .18-1718.17.7.14.
FSETPM Instruction . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .18-1718.17.7.15. FXAM
Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .18-1818.17.7.16. FSAVE and FSTENV
Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .18-1818.17.8. Transcendental Instructions . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1818.17.9. Obsolete Instructions. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-1818.17.10. WAIT/FWAIT Prefix Differences . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .18-1818.17.11.
Operands Split Across Segments and/or Pages . . . . . . . . . . . .
. . . . . . . . . . . .18-1918.17.12. FPU Instruction
Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .18-1918.18. SERIALIZING INSTRUCTIONS. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-1918.19. FPU AND MATH COPROCESSOR INITIALIZATION . . . . . . . .
. . . . . . . . . . . . . 18-1918.19.1. Intel 387 and Intel 287
Math Coprocessor Initialization. . . . . . . . . . . . . . . .
.18-2018.19.2. Intel486 SX Processor and Intel 487 SX Math
Coprocessor Initialization . . . . .18-2018.20. CONTROL REGISTERS .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 18-2118.21. MEMORY MANAGEMENT FACILITIES . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 18-2318.21.1.
New Memory Management Control Flags . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .18-2318.21.1.1. Physical Memory Addressing
Extension. . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-2318.21.1.2. Global Pages . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-2318.21.1.3. Larger Page Sizes . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-2418.21.2. CD and NW Cache Control Flags . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .18-2418.21.3.
Descriptor Types and Contents . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .18-2418.21.4. Changes in Segment
Descriptor Loads. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .18-2418.22. DEBUG FACILITIES . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-2418.22.1. Differences in Debug Register DR6 . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .18-2418.22.2.
Differences in Debug Register DR7 . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .18-2518.22.3. Debug Registers DR4
and DR5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .18-2518.23. RECOGNITION OF BREAKPOINTS . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 18-2518.24.
EXCEPTIONS AND/OR EXCEPTION CONDITIONS . . . . . . . . . . . . . .
. . . . . . . 18-2618.24.1. Machine-Check Architecture . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-2718.24.2. Priority OF Exceptions. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.18-2718.25. INTERRUPTS . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-2818.25.1. Interrupt Propagation Delay. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .18-2818.25.2.
NMI Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .18-2818.25.3. IDT
Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .18-28
xviii Vol. 3
-
CONTENTS
PAGE
18.26. ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (APIC) . . . .
. . . . 18-2818.26.1. Software Visible Differences Between the
Local APIC and the 82489DX. . . . 18-2918.26.2. New Features
Incorporated in the Local APIC for the P6 Family and
Pentium Processors. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 18-3018.26.3. New
Features Incorporated in the Local APIC of the Pentium 4 and
Intel Xeon Processors . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 18-3018.27. TASK
SWITCHING AND TSS . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 18-3018.27.1. P6 Family and Pentium
Processor TSS . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 18-3018.27.2. TSS Selector Writes . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-3118.27.3. Order of Reads/Writes to the TSS . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 18-3118.27.4. Using
A 16-Bit TSS with 32-Bit Constructs . . . . . . . . . . . . . . . .
. . . . . . . . . . . 18-3118.27.5. Differences in I/O Map Base
Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-3118.28. CACHE MANAGEMENT . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 18-3218.28.1.
Self-Modifying Code with Cache Enabled . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 18-3318.28.2. Disabling the L3 Cache .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 18-3418.29. PAGING . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 18-3418.29.1. Large Pages . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-3418.29.2. PCD and PWT Flags . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 18-3418.29.3.
Enabling and Disabling Paging . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 18-3518.30. STACK OPERATIONS . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 18-3518.30.1. Selector Pushes and Pops . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18-3518.30.2. Error Code Pushes . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 18-3618.30.3.
Fault Handling Effects on the Stack. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 18-3618.30.4. Interlevel RET/IRET
From a 16-Bit Interrupt or Call Gate . . . . . . . .