[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


------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]