
Volume 1, Part 2: Memory Reference
1:155
3.4.3
Using Control Speculation in the Intel
®
Itanium
®
Architecture
The check to determine if control speculation was successful is similar to that for data
speculation.
3.4.3.1
The NaT Bit
The Not A Thing (NaT) bit is an extra bit on each of the general registers. A register
NaT bit indicates whether the content of a register is valid. If the NaT bit is set to one,
the register contains a deferred exception token due to an earlier speculation fault. In
a floating-point register, the presence of a special value called the NaTVal signals a
deferred exception.
During a control speculative load, the NaT bit on the destination register of the load
may be set if an exception occurs and it is deferred. The exact set of events and
exceptions that cause an exception to be deferred (thus causing the NaT bit to be set),
depends in part upon operating system policy. When a speculative instruction reads a
source register that has its NaT bit set, NaT bits of the target registers of that
instruction are also set. That is, NaT bits are propagated through dependent
computations.
3.4.3.2
Control Speculation Example
When a control speculative load is scheduled, the compiler must insert a speculative
check,
chk.s
, along all paths on which results of the speculative load are consumed. If
a non-speculative instruction (other than a
chk.s
) reads a register with its NaT bit set,
a NaT consumption fault occurs, and the operating system will terminate the program.
The code sequence below illustrates a basic use of control speculation:
(p1)
br.cond some_label
// Cycle 0
ld8
r1=[r5];;
// Cycle 1
add
r2=r1,r3
// Cycle 3
This code can be rewritten using a control speculative load and check. The check can be
placed in the same basic block as the original load:
ld8.s
r1=[r5];;
// Cycle -2
// Other instructions
(p1)
br.cond some_label
// Cycle 0
chk.s
r1,recovery
// Cycle 0
add
r2=r1,r3
// Cycle 0
Until a speculation check is reached dynamically, the results of the control speculative
chain of instructions cannot be stored to memory or otherwise accessed
non-speculatively without the possibility of a fault. If a speculation check is executed
and the NaT bit on the checked register is set, the processor will branch to recovery
code pointed to by the check instruction.
It is also possible to test for the presence of set NaT bits and NaTVals using the test NaT
(
tnat
) and floating-point class (
fclass
) instructions.
Содержание ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3
Страница 1: ......
Страница 11: ...x Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 12: ...1 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I Application Architecture Guide ...
Страница 13: ...1 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 33: ...1 22 Volume 1 Part 1 Introduction to the Intel Itanium Architecture ...
Страница 57: ...1 46 Volume 1 Part 1 Execution Environment ...
Страница 147: ...1 136 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 149: ...1 138 Volume 1 Part 2 About the Optimization Guide ...
Страница 191: ...1 180 Volume 1 Part 2 Predication Control Flow and Instruction Stream ...
Страница 230: ......
Страница 248: ...236 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 249: ...2 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I System Architecture Guide ...
Страница 250: ...2 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 264: ...2 16 Volume 2 Part 1 Intel Itanium System Environment ...
Страница 380: ...2 132 Volume 2 Part 1 Interruptions ...
Страница 398: ...2 150 Volume 2 Part 1 Register Stack Engine ...
Страница 486: ...2 238 Volume 2 Part 1 IA 32 Interruption Vector Descriptions ...
Страница 749: ...2 501 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part II System Programmer s Guide ...
Страница 750: ...2 502 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 754: ...2 506 Volume 2 Part 2 About the System Programmer s Guide ...
Страница 796: ...2 548 Volume 2 Part 2 Interruptions and Serialization ...
Страница 808: ...2 560 Volume 2 Part 2 Context Management ...
Страница 842: ...2 594 Volume 2 Part 2 Floating point System Software ...
Страница 850: ...2 602 Volume 2 Part 2 IA 32 Application Support ...
Страница 862: ...2 614 Volume 2 Part 2 External Interrupt Architecture ...
Страница 870: ...2 622 Volume 2 Part 2 Performance Monitoring Support ...
Страница 891: ......
Страница 941: ...3 42 Volume 3 Instruction Reference cmp illegal_operation_fault PR p1 0 PR p2 0 Interruptions Illegal Operation fault ...
Страница 1099: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault ...
Страница 1191: ...3 292 Volume 3 Pseudo Code Functions Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1295: ...3 396 Volume 3 Resource and Dependency Semantics ...
Страница 1296: ......
Страница 1302: ...402 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1494: ...4 192 Volume 4 Base IA 32 Instruction Reference FWAIT Wait See entry for WAIT ...
Страница 1564: ...4 262 Volume 4 Base IA 32 Instruction Reference LES Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1565: ...Volume 4 Base IA 32 Instruction Reference 4 263 LFS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1568: ...4 266 Volume 4 Base IA 32 Instruction Reference LGS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1583: ...Volume 4 Base IA 32 Instruction Reference 4 281 LSS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1647: ...Volume 4 Base IA 32 Instruction Reference 4 345 ROL ROR Rotate See entry for RCL RCR ROL ROR ...
Страница 1663: ...Volume 4 Base IA 32 Instruction Reference 4 361 SHL SHR Shift Instructions See entry for SAL SAR SHL SHR ...
Страница 1668: ...4 366 Volume 4 Base IA 32 Instruction Reference SIDT Store Interrupt Descriptor Table Register See entry for SGDT SIDT ...
Страница 1884: ...4 582 Volume 4 IA 32 SSE Instruction Reference ...
Страница 1885: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index ...
Страница 1886: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1898: ...INDEX Index 12 Index for Volumes 1 2 3 and 4 ...