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-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils