Update language related to R_PPC64_PCREL_OPT usage.

master
Bill Schmidt 5 years ago
parent ee46fb7bb5
commit 4c46dde1db

@ -5192,12 +5192,14 @@ my_func:
</para>
<para revisionflag="added">R_PPC64_PCREL_OPT</para>
<para revisionflag="added">
This relocation type requests that the annotated
instruction and its immediately following instruction be optimized by
the linker when the referenced symbol can be statically resolved,
or when a more efficient PC-relative sequence can be chosen.
This relocation specifies that the instruction at r_offset and the
instruction at <emphasis>r_offset</emphasis> +
<emphasis>r_addend</emphasis> may be optimized by the linker.
Specifically, the register set by the first instruction and used by
the second is not used by any intervening instruction nor is the value
used by any following instruction.
See <xref linkend="dbdoclet.50655241_OptPCRel" /> and
<xref linkend="dbdoclet.50655241_OptMask" /> for details.
<xref linkend="dbdoclet.50655241_OptMask" /> for more details.
</para>
</section>
<section>
@ -5351,18 +5353,19 @@ target:
For example:
</para>
<programlisting>pld r10, symbol@got@pcrel
lvx v1, 0, r10</programlisting>
lxv vs1, 0(r10)</programlisting>
<para>The previous sequence may be replaced by:</para>
<programlisting>plxv v1, symbol@pcrel
<programlisting>plxv vs1, symbol@pcrel
nop</programlisting>
<para>
However, this optimization is not universally safe, since it
changes the value of r10 following the data reference. The
compiler or programmer must ensure that the value of r10 is not
subsequently used, and communicate a request for this optimization
used between the two instructions nor subsequently used,
and communicate a request for this optimization
by placing an R_PPC64_PCREL_OPT relocation on the first instruction
in the sequence. The compiler or programmer must further ensure that
the two instructions are not separated by intervening instructions.
in the sequence that provides the offset to the second instruction
in the sequence.
</para>
</section>
<section xml:id="dbdoclet.50655241_OptMask" revisionflag="added">
@ -5376,10 +5379,10 @@ nop</programlisting>
that can be optimized by a linker. For example:
</para>
<programlisting>paddi r10,symbol@pcrel
pmlxvx v1,r9,r10,VRM,MC,P,0</programlisting>
pmlxv vs1,0(r10),VRM,MC,P,0</programlisting>
<para>The previous sequence may be replaced by:</para>
<programlisting>dnop
pmlxv v1,symbol@pcrel(r9),VRM,MC,P,1</programlisting>
pmlxv vs1,symbol@pcrel(r0),VRM,MC,P,1</programlisting>
<para>
when the linker determines that the offset from the current
instruction address to symbol's address will fit in 28 bits.
@ -5387,11 +5390,12 @@ pmlxv v1,symbol@pcrel(r9),VRM,MC,P,1</programlisting>
<para>
Again, this optimization is not universally safe, since it changes
the value of r10 following the data reference. The compiler or
programmer must ensure that the value of r10 is not subsequently
programmer must ensure that the value of r10 is not used between
the two instructions nor subsequently
used, and communicate a request for this optimization by placing
an R_PPC64_PCREL_OPT relocation on the first instruction in the
sequence. The compiler or programmer must further ensure that the
two instructions are not separated by intervening instructions.
sequence that provides the offset to the second instruction in the
sequence.
</para>
</section>
</section>

Loading…
Cancel
Save