![Intel ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3 Manual Download Page 166](http://html.mh-extra.com/html/intel/itanium-architecture-software-developers-volume-3-rev-2-3/itanium-architecture-software-developers-volume-3-rev-2-3_manual_2073404166.webp)
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.
Summary of Contents for ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3
Page 1: ......
Page 11: ...x Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 13: ...1 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 33: ...1 22 Volume 1 Part 1 Introduction to the Intel Itanium Architecture ...
Page 57: ...1 46 Volume 1 Part 1 Execution Environment ...
Page 147: ...1 136 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 149: ...1 138 Volume 1 Part 2 About the Optimization Guide ...
Page 191: ...1 180 Volume 1 Part 2 Predication Control Flow and Instruction Stream ...
Page 230: ......
Page 248: ...236 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 250: ...2 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 264: ...2 16 Volume 2 Part 1 Intel Itanium System Environment ...
Page 380: ...2 132 Volume 2 Part 1 Interruptions ...
Page 398: ...2 150 Volume 2 Part 1 Register Stack Engine ...
Page 486: ...2 238 Volume 2 Part 1 IA 32 Interruption Vector Descriptions ...
Page 750: ...2 502 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 754: ...2 506 Volume 2 Part 2 About the System Programmer s Guide ...
Page 796: ...2 548 Volume 2 Part 2 Interruptions and Serialization ...
Page 808: ...2 560 Volume 2 Part 2 Context Management ...
Page 842: ...2 594 Volume 2 Part 2 Floating point System Software ...
Page 850: ...2 602 Volume 2 Part 2 IA 32 Application Support ...
Page 862: ...2 614 Volume 2 Part 2 External Interrupt Architecture ...
Page 870: ...2 622 Volume 2 Part 2 Performance Monitoring Support ...
Page 891: ......
Page 1099: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault ...
Page 1295: ...3 396 Volume 3 Resource and Dependency Semantics ...
Page 1296: ......
Page 1302: ...402 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 1494: ...4 192 Volume 4 Base IA 32 Instruction Reference FWAIT Wait See entry for WAIT ...
Page 1647: ...Volume 4 Base IA 32 Instruction Reference 4 345 ROL ROR Rotate See entry for RCL RCR ROL ROR ...
Page 1884: ...4 582 Volume 4 IA 32 SSE Instruction Reference ...
Page 1885: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index ...
Page 1886: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Page 1898: ...INDEX Index 12 Index for Volumes 1 2 3 and 4 ...