![Intel ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3 Manual Download Page 85](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_2073404085.webp)
1:74
Volume 1, Part 1: Application Programming Model
summarizes memory ordering instructions related to cacheable memory. For
definitions of the ordering rules related to non-cacheable memory, cache
synchronization, and privileged instructions, refer to
Attribute and Ordering” on page 2:82
4.5
Branch Instructions
Branch instructions effect a transfer of control flow to a new address. Branch targets
are bundle-aligned, which means control is always passed to the first instruction slot of
the target bundle (slot 0). Branch instructions are not required to be the last instruction
in an instruction group. In fact, an instruction group can contain arbitrarily many
branches (provided that the normal RAW and WAW dependency requirements are met).
If a branch is taken, only instructions up to the taken branch will be executed. After a
taken branch, the next instruction executed will be at the target of the branch.
There are three categories of branches: IP-relative branches, long branches, and
indirect branches. IP-relative branches specify their target with a signed 21-bit
displacement, which is added to the IP of the bundle containing the branch to give the
address of the target bundle. The displacement allows a branch reach of
16MBytes.
Long branches are IP-relative with a 60-bit displacement, allowing the target to be
anywhere in the 64-bit address space. Because of the long immediate, long branches
occupy two instruction slots. Indirect branches use the branch registers to specify the
target address.
There are several branch types, as shown in
. The conditional branch
br.cond
or
br
is a branch which is taken if the specified predicate is 1, and not-taken
otherwise. The conditional call branch
br.call
does the same thing, and in addition,
writes a link address to a specified branch register and adjusts the general register
stack (see
). The conditional return
br.ret
does the
same thing as an indirect conditional branch, plus it adjusts the general register stack.
Unconditional branches, calls and returns are executed by specifying PR 0 (which is
always 1) as the predicate for the branch instruction. The long branches,
brl.cond
or
brl
, and
brl.call
are identical to
br.cond
or
br
, and
br.call
, respectively, except for
their longer displacement.
Table 4-21.
Memory Ordering Instructions
Mnemonic
Operation
ld.acq, ld.c.clr.acq
Ordered load and ordered check load
st.rel
Ordered store
xchg
Exchange memory and general register
cmpxchg.acq, cmpxchg.rel
Conditional exchange of memory and general register
fetchadd.acq,fetchadd.rel
Add immediate to memory
mf
Memory ordering fence
Table 4-22.
Branch Types
Mnemonic
Function
Branch Condition
Target Address
br.cond or br
Conditional branch
Qualifying predicate
IP-rel or Indirect
br.call
Conditional procedure call
Qualifying predicate
IP-rel or Indirect
br.ret
Conditional procedure return
Qualifying predicate
Indirect
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 ...