[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/834] New: IA64: Change br to brl for "far" branches when possibl
From: |
jsworley at qwest dot net |
Subject: |
[Bug ld/834] New: IA64: Change br to brl for "far" branches when possible |
Date: |
8 Apr 2005 04:22:02 -0000 |
This suggestion owes much to David Mosberger
Currently, when the loader detects that a branch symbol is beyond
the 16MB range of the 25-bit IP-relative branch (br), it adds a
trampoline bundle with a 64-bit IP-relative branch (brl). This
construct, however, is likely to incur a branch miss penalty.
However, for br.call, where a "far" branch is most likely, it has
been observed that the instruction preceeding the branch is frequently
a NOP. In this case, the bundle can be changed from (e.g):
{ .mib (or .mmb or .mbb)
<any M-op>
nop 0
br<br completers> TargetSymbol
}
to the faster and more compact
{ .mlx
<same M-op>
brl<br completers> TargetSymbol
}
If the previous instruction was not a NOP, then the trampoline
bundle can be appended as is currently done. The linker is already
looking at the code in this case (for the relocation), so it should
just be some straightforward logic added at that point.
--
Summary: IA64: Change br to brl for "far" branches when possible
Product: binutils
Version: 2.14
Status: NEW
Severity: enhancement
Priority: P2
Component: ld
AssignedTo: unassigned at sources dot redhat dot com
ReportedBy: jsworley at qwest dot net
CC: bug-binutils at gnu dot org
GCC build triplet: ia64-redhat-linux
GCC host triplet: ia64-redhat-linux
GCC target triplet: ia64-redhat-linux
http://sources.redhat.com/bugzilla/show_bug.cgi?id=834
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
- [Bug ld/834] New: IA64: Change br to brl for "far" branches when possible,
jsworley at qwest dot net <=