
3:22
Volume 3: Instruction Reference
br
group as
br.ia
are not allowed, since
br.ia
may implicitly reads all ARs. If an
illegal RAW dependency is present between an AR write and
br.ia
, the first IA-32
instruction fetch and execution may or may not see the updated AR value.
IA-32 instruction set execution leaves the contents of the ALAT undefined. Software
can not rely on ALAT values being preserved across an instruction set transition. All
registers left in the current register stack frame are undefined across an instruction
set transition. On entry to IA-32 code, existing entries in the ALAT are ignored. If
the register stack contains any dirty registers, an Illegal Operation fault is raised on
the
br.ia
instruction. The current register stack frame is forced to zero. To flush
the register file of dirty registers, the
flushrs
instruction must be issued in an
instruction group preceding the
br.ia
instruction. To enhance the performance of
the instruction set transition, software can start the register stack flush in parallel
with starting the IA-32 instruction set by 1) ensuring
flushrs
is exactly one
instruction group before the
br.ia
, and 2)
br.ia
is in the first B-slot.
br.ia
should
always be executed in the first B-slot with a hint of “static-taken” (default),
otherwise processor performance will be degraded.
If a
br.ia
causes any Itanium traps (e.g., Single Step trap, Taken Branch trap, or
Unimplemented Instruction Address trap), IIP will contain the original 64-bit target
IP. (The value will not have been zero extended from 32 bits.)
Another branch type is provided for simple counted loops. This branch type uses the
Loop Count application register (LC) to determine the branch condition, and does not
use a qualifying predicate:
•
cloop:
If the LC register is not equal to zero, it is decremented and the branch is
taken.
In addition to these simple branch types, there are four types which are used for
accelerating modulo-scheduled loops (see also
Section 4.5.1, “Modulo-scheduled Loop
). Two of these are for counted loops (which use the LC register),
and two for while loops (which use the qualifying predicate). These loop types use
register rotation to provide register renaming, and they use predication to turn off
instructions that correspond to empty pipeline stages.
The Epilog Count application register (EC) is used to count epilog stages and, for some
while loops, a portion of the prolog stages. In the epilog phase, EC is decremented each
time around and, for most loops, when EC is one, the pipeline has been drained, and
the loop is exited. For certain types of optimized, unrolled software-pipelined loops, the
target of a
br.cexit
or
br.wexit
is set to the next sequential bundle. In this case, the
pipeline may not be fully drained when EC is one, and continues to drain while EC is
zero.
For these modulo-scheduled loop types, the calculation of whether the branch is taken
or not depends on the kernel branch condition (LC for counted types, and the qualifying
predicate for while types) and on the epilog condition (whether EC is greater than one
or not).
These branch types are of two categories: top and exit. The top types (ctop and wtop)
are used when the loop decision is located at the bottom of the loop body and therefore
a taken branch will continue the loop while a fall through branch will exit the loop. The
exit types (cexit and wexit) are used when the loop decision is located somewhere
other than the bottom of the loop and therefore a fall though branch will continue the
loop and a taken branch will exit the loop. The exit types are also used at intermediate
points in an unrolled pipelined loop. (For more details, see
“Modulo-scheduled Loop Support” on page 1:75
).
Содержание 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 ...