Round 2 documentation review updates

Pervasive corrections:
- Miscellaneous formating
- Insert space in () and []
- Correct footnote spacing
- Use <note> tag for notes
- Cleanup spacing around <anchor> tags
- Add a couple missing paragraphs
- Correct list nesting in a couple places
- Correct subsection nesting
- Correct spacing around subscript, superscripts, and emphasis tags
- Bolding of some <emphasis> statements
- Build xref links for manual footnotes in a couple tables and remove explicit numerals.
- Return POWER ISA 3.0 text

Specific updates:
- Update a couple tables on bit/byte positions in chapter 2
- Return figures in place of some tables for the coding examples in
  chapter 2

Signed-off-by: Jeff Scheel <scheel@us.ibm.com>
pull/92/head
Jeff Scheel 8 years ago
parent e099f45c46
commit 7c0660293e

File diff suppressed because it is too large Load Diff

@ -18,9 +18,8 @@ xml:id="dbdoclet.50655245_pgfId-1450875" revisionflag="added">
BCD values are stored in memory as contiguous arrays of 1 - 16 BCD values are stored in memory as contiguous arrays of 1 - 16
bytes.</para> bytes.</para>
<note> <note>
<para>BCD built-in functions are valid only when - <para>BCD built-in functions are valid only when -<emphasis role="bold">march</emphasis> or
<emphasis role="bold">march</emphasis> or - -<emphasis role="bold">qarch</emphasis> is set to target POWER8 processors or
<emphasis role="bold">qarch</emphasis> is set to target POWER8 processors or
later.</para> later.</para>
</note> </note>
<para> <para>
@ -424,8 +423,7 @@ xml:id="dbdoclet.50655245_pgfId-1450875" revisionflag="added">
<row> <row>
<entry align="center"> <entry align="center">
<para> <para>
<emphasis role="bold">Macro <emphasis role="bold">Macro<footnote xml:id="tabb2fna"><para>Or static inline function.</para></footnote></emphasis>
<footnote xml:id="tabb2fna"><para>Or static inline function.</para></footnote></emphasis>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -529,8 +527,7 @@ xml:id="dbdoclet.50655245_pgfId-1450875" revisionflag="added">
<para>bcd_xl(a,b)</para> <para>bcd_xl(a,b)</para>
</entry> </entry>
<entry> <entry>
<para>(bcd)vec_xl_len_r(a,b) <para>(bcd)vec_xl_len_r(a,b)<footnote xml:id="tabb2fnb"><para>Optionaly, __builtin_ldrmb (a,b) for previous
<footnote xml:id="tabb2fnb"><para>Optionaly, __builtin_ldrmb (a,b) for previous
generations of XL compilers.</para></footnote> generations of XL compilers.</para></footnote>
</para> </para>
</entry> </entry>
@ -540,8 +537,7 @@ xml:id="dbdoclet.50655245_pgfId-1450875" revisionflag="added">
<para>bcd_xst(a,b)</para> <para>bcd_xst(a,b)</para>
</entry> </entry>
<entry> <entry>
<para>(bcd)vec_xst_len_r(a,b) <para>(bcd)vec_xst_len_r(a,b)<footnote xml:id="tabb2fnc"><para>Optionaly, __builti_strmb (a,b) for previous
<footnote xml:id="tabb2fnc"><para>Optionaly, __builti_strmb (a,b) for previous
generatoin f XL compilers.</para></footnote> generatoin f XL compilers.</para></footnote>
</para> </para>
</entry> </entry>

@ -27,7 +27,7 @@
<xref linkend="dbdoclet.50655240___RefHeading___Toc377640574" />). <xref linkend="dbdoclet.50655240___RefHeading___Toc377640574" />).
OpenPOWER-compliant processors in the 64-bit Power Architecture can execute OpenPOWER-compliant processors in the 64-bit Power Architecture can execute
in either big-endian or little-endian mode. Executables and in either big-endian or little-endian mode. Executables and
executable-generated data (in general) that subscribes to either byte executable-generated data (in general) that subscribe to either byte
ordering is not portable to a system running in the other mode.</para> ordering is not portable to a system running in the other mode.</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
@ -155,8 +155,7 @@
</emphasis></para> </emphasis></para>
</listitem> </listitem>
<listitem> <listitem>
<para>ELF Assembly Users Guide, Fourth edition, IBM, 2000.</para> <para>ELF Assembly Users Guide, Fourth edition, IBM, 2000.
<para>
<emphasis> <emphasis>
<link xl:href="https://www-03.ibm.com/technologyconnect/tgcm/TGCMFileServlet.wss/assem_um.pdf?id=109917A251EFD64C872569D900656D07&amp;linkid=1h3000&amp;c_t=md515o6ntgh671shz9ioar20oyfp1grs"> <link xl:href="https://www-03.ibm.com/technologyconnect/tgcm/TGCMFileServlet.wss/assem_um.pdf?id=109917A251EFD64C872569D900656D07&amp;linkid=1h3000&amp;c_t=md515o6ntgh671shz9ioar20oyfp1grs">



@ -1588,16 +1588,16 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para></para> <para></para>
</entry> </entry>
<entry align="right" colsep="1"> <entry align="right" colsep="1">
<para>3</para> <para></para>
</entry> </entry>
<entry align="left" colsep="0"> <entry align="left" colsep="0">
<para></para> <para>3</para>
</entry> </entry>
<entry align="center" colsep="0"> <entry align="center" colsep="0">
<para></para> <para></para>
</entry> </entry>
<entry align="right" colsep="1"> <entry align="right" colsep="1">
<para>4</para> <para></para>
</entry> </entry>
</row> </row>
<row> <row>
@ -2658,8 +2658,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para></para> <para></para>
</entry> </entry>
<entry> <entry>
<para>vector unsigned long <para>vector unsigned long<footnote xml:id="vlong">
<footnote xml:id="vlong">
<para>The vector long types are deprecated due to their <para>The vector long types are deprecated due to their
ambiguity between 32-bit and 64-bit environments. The use ambiguity between 32-bit and 64-bit environments. The use
of the vector long long types is preferred.</para> of the vector long long types is preferred.</para>
@ -2681,8 +2680,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para></para> <para></para>
</entry> </entry>
<entry> <entry>
<para>vector signed long <para>vector signed long<footnoteref linkend="vlong" /></para>
<footnoteref linkend="vlong" /></para>
<para>vector signed long long</para> <para>vector signed long long</para>
</entry> </entry>
<entry> <entry>
@ -2700,8 +2698,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para></para> <para></para>
</entry> </entry>
<entry> <entry>
<para>vector bool long <para>vector bool long<footnoteref linkend="vlong" /></para>
<footnoteref linkend="vlong" /></para>
<para>vector bool long long</para> <para>vector bool long long</para>
</entry> </entry>
<entry> <entry>
@ -2807,8 +2804,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>Elements of Boolean vector data types must have a value <para>Elements of Boolean vector data types must have a value
corresponding to all bits set to either 0 or 1. The result of corresponding to all bits set to either 0 or 1. The result of
computations on Boolean vectors, where at least one element is not computations on Boolean vectors, where at least one element is not
well formed well formed<footnote xml:id="pgfId-1172304">
<footnote xml:id="pgfId-1172304">
<para>An element is well formed if it has all bits set to 0 or all <para>An element is well formed if it has all bits set to 0 or all
bits set to 1.</para> bits set to 1.</para>
</footnote>, is undefined for all vector elements.</para> </footnote>, is undefined for all vector elements.</para>
@ -3517,16 +3513,16 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>6</para> <para>6</para>
</entry> </entry>
<entry align="left" colsep="0"> <entry align="left" colsep="0">
<para>15</para> <para></para>
</entry> </entry>
<entry align="center" colsep="0"> <entry align="center" colsep="0">
<para></para> <para>5</para>
</entry> </entry>
<entry align="right" colsep="1"> <entry align="right" colsep="1">
<para></para> <para></para>
</entry> </entry>
<entry align="left" colsep="0"> <entry align="left" colsep="0">
<para>5</para> <para></para>
</entry> </entry>
<entry align="center" colsep="0"> <entry align="center" colsep="0">
<para></para> <para></para>
@ -3637,7 +3633,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para></para> <para></para>
</entry> </entry>
<entry align="right" colsep="1"> <entry align="right" colsep="1">
<para>2</para> <para>1</para>
</entry> </entry>
<entry align="left" colsep="0"> <entry align="left" colsep="0">
<para></para> <para></para>
@ -3646,7 +3642,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para></para> <para></para>
</entry> </entry>
<entry align="right" colsep="1"> <entry align="right" colsep="1">
<para>1</para> <para>0</para>
</entry> </entry>
</row> </row>
<row> <row>
@ -4214,8 +4210,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>r2</para> <para>r2</para>
</entry> </entry>
<entry> <entry>
<para>Nonvolatile <para>Nonvolatile<footnote>
<footnote>
<para>Register r2 is nonvolatile with respect to calls <para>Register r2 is nonvolatile with respect to calls
between functions in the same compilation unit. It is saved between functions in the same compilation unit. It is saved
and restored by code inserted by the linker resolving a and restored by code inserted by the linker resolving a
@ -4278,8 +4273,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row> </row>
<row> <row>
<entry> <entry>
<para>r14 - r31 <para>r14 - r31<footnote>
<footnote>
<para>If a function needs a frame pointer, assigning r31 to <para>If a function needs a frame pointer, assigning r31 to
the role of the frame pointer is recommended.</para> the role of the frame pointer is recommended.</para>
</footnote></para> </footnote></para>
@ -4491,8 +4485,8 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</listitem> </listitem>
</itemizedlist> </itemizedlist>


<para> <note>
<emphasis role="bold"><phrase revisionflag="added">Note</phrase><phrase revisionflag="deleted">Erratum</phrase>:</emphasis> <para><emphasis role="bold"><phrase revisionflag="deleted">Erratum:</phrase></emphasis>
When executing an When executing an
<emphasis role="bold">mfocr</emphasis> instruction, the POWER8 processor does not <emphasis role="bold">mfocr</emphasis> instruction, the POWER8 processor does not
implement the behavior described in the "Fixed-Point Invalid Forms implement the behavior described in the "Fixed-Point Invalid Forms
@ -4507,15 +4501,14 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<emphasis role="bold">mfocr</emphasis> to avoid corruption of the resulting <emphasis role="bold">mfocr</emphasis> to avoid corruption of the resulting
(partial) condition register word.</para> (partial) condition register word.</para>
<para>This erratum does not apply to the POWER9 processor.</para> <para>This erratum does not apply to the POWER9 processor.</para>
</note>


<para> <para><anchor xml:id="dbdoclet.50655240_Power-ISA-version-and-the-user-s-manual"
<anchor xml:id="dbdoclet.50655240_Power-ISA-version-and-the-user-s-manual"
xreflabel="" />For more information, see xreflabel="" />For more information, see
<citetitle>Power ISA</citetitle>, version 3.0 and "Fixed-Point Invalid <citetitle>Power ISA</citetitle>, version 3.0 and "Fixed-Point Invalid
Forms and Undefined Conditions" in Forms and Undefined Conditions" in
<citetitle>POWER9 Processor User's Manual.</citetitle></para> <citetitle>POWER9 Processor User's Manual.</citetitle></para>
<para> <para><anchor xml:id="dbdoclet.50655240_page33" xreflabel="" />In
<anchor xml:id="dbdoclet.50655240_page33" xreflabel="" /> In
OpenPOWER-compliant processors, floating-point and vector functions are OpenPOWER-compliant processors, floating-point and vector functions are
implemented using a unified vector-scalar model. As shown in implemented using a unified vector-scalar model. As shown in
<xref linkend="dbdoclet.50655240_97144" /> and <xref linkend="dbdoclet.50655240_97144" /> and
@ -4528,310 +4521,26 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
with VMX instructions to refer to a 32-register subset of 128-bit wide with VMX instructions to refer to a 32-register subset of 128-bit wide
registers.</para> registers.</para>


<table frame="top" pgwide="1" colsep="1" rowsep="1" <figure pgwide="1" xml:id="dbdoclet.50655240_97144">
xml:id="dbdoclet.50655240_97144">
<title>Floating-Point Registers as Part of VSRs</title> <title>Floating-Point Registers as Part of VSRs</title>
<tgroup cols="6"> <mediaobject>
<colspec colname="c1" colwidth="10*" /> <imageobject>
<colspec colname="c2" colwidth="22*" /> <imagedata fileref="figures/fig2-16.png" format="PNG"
<colspec colname="c3" colwidth="22*" /> scalefit="1" width="100%" />
<colspec colname="c4" colwidth="22*" /> </imageobject>
<colspec colname="c5" colwidth="22*" /> </mediaobject>
<colspec colname="c6" colwidth="0*" /> </figure>
<tbody>
<row>
<entry align="right" rowsep="0">
<para>VSR(0)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>FPR[0]</para>
</entry>
<entry nameend="c5" namest="c4" colsep="1">
<para />
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(1)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>FPR1]</para>
</entry>
<entry nameend="c5" namest="c4" colsep="1">
<para />
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry rowsep="0">
<para></para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>
<emphasis role="bold">...</emphasis>
</para>
<para>
<emphasis role="bold">...</emphasis>
</para>
</entry>
<entry nameend="c5" namest="c4" colsep="1">
<para />
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(30)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>FPR[30]</para>
</entry>
<entry nameend="c5" namest="c4" colsep="1">
<para />
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(31)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>FP[31]</para>
</entry>
<entry nameend="c5" namest="c4" colsep="1">
<para />
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(32)</para>
</entry>
<entry nameend="c5" namest="c2" colsep="1">
<para></para>
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(33)</para>
</entry>
<entry nameend="c5" namest="c2" colsep="1">
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
<para></para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para></para>
<para></para>
</entry>
<entry nameend="c5" namest="c2" align="center" colsep="1">
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
<para>
<emphasis role="bold">...</emphasis>
</para>
<para>
<emphasis role="bold">...</emphasis>
</para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(62)</para>
</entry>
<entry nameend="c5" namest="c2" colsep="1">
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
<para></para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right">
<para>VSR(63)</para>
</entry>
<entry nameend="c5" namest="c2" colsep="1">
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
<para />
</entry>
<entry></entry>
</row>
<row>
<entry rowsep="0">
<para></para>
</entry>
<entry align="left" colsep="0">
<para>0</para>
</entry>
<entry align="right">
<para>63</para>
</entry>
<entry align="left" colsep="0">
<para>127</para>
</entry>
<entry align="right" colsep="1">
<para>255</para>
</entry>
<entry></entry>
</row>
</tbody>
</tgroup>
</table>


<table frame="top" pgwide="1" xml:id="dbdoclet.50655240_56800" rowsep="1" colsep="1"> <figure pgwide="1" xml:id="dbdoclet.50655240_56800">
<title>Vector Registers as Part of VSRs</title> <title>Vector Registers as Part of VSRs</title>
<tgroup cols="4"> <mediaobject>
<colspec colname="c1" colwidth="10*" /> <imageobject>
<colspec colname="c2" colwidth="44*" /> <imagedata fileref="figures/fig2-17.png" format="PNG"
<colspec colname="c3" colwidth="44*" /> scalefit="1" width="100%" />
<colspec colname="c4" colwidth="0*" /> </imageobject>
<tbody> </mediaobject>
<row> </figure>
<entry align="right" rowsep="0">
<para>VSR(0)</para>
</entry>
<entry nameend="c3" namest="c2">
<para></para>
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(1)</para>
</entry>
<entry nameend="c3" namest="c2">
<para></para>
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para></para>
<para></para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>
<emphasis role="bold">...</emphasis>
</para>
<para>
<emphasis role="bold">...</emphasis>
</para>
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(30)</para>
</entry>
<entry nameend="c3" namest="c2">
<para></para>
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(31)</para>
</entry>
<entry nameend="c3" namest="c2">
<para></para>
<?dbhtml bgcolor="#EEEEEE" ?>
<?dbfo bgcolor="#EEEEEE" ?>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(32)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>VR[0]</para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(33)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>VR[1]</para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para></para>
<para></para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>
<emphasis role="bold">...</emphasis>
</para>
<para>
<emphasis role="bold">...</emphasis>
</para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right" rowsep="0">
<para>VSR(62)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>VR[30]</para>
</entry>
<entry rowsep="0"></entry>
</row>
<row>
<entry align="right">
<para>VSR(63)</para>
</entry>
<entry nameend="c3" namest="c2" align="center">
<para>VR[31]</para>
</entry>
<entry></entry>
</row>
<row>
<entry>
<para></para>
</entry>
<entry align="left" colsep="0">
<para>0</para>
</entry>
<entry align="right">
<para>127</para>
</entry>
<entry></entry>
</row>
</tbody>
</tgroup>
</table>
<para>The classic floating-point repertoire consists of 32 <para>The classic floating-point repertoire consists of 32
floating-point registers, each 64 bits wide, and an associated floating-point registers, each 64 bits wide, and an associated
special-purpose register to provide floating-point status and control. special-purpose register to provide floating-point status and control.
@ -5312,7 +5021,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</mediaobject> </mediaobject>
</figure> </figure>
<para>In <para>In
<xref linkend="dbdoclet.50655240_page39" /> the white areas indicate an <xref linkend="dbdoclet.50655240_97610" xrefstyle="select: nopage"/> the white areas indicate an
optional save area of the stack frame. For a description of the optional optional save area of the stack frame. For a description of the optional
save areas described by this ABI, see save areas described by this ABI, see
<xref linkend="dbdoclet.50655240_15141" />.</para> <xref linkend="dbdoclet.50655240_15141" />.</para>
@ -5452,6 +5161,15 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>If a function changes the value in any nonvolatile floating-point <para>If a function changes the value in any nonvolatile floating-point
register fN, it shall first save the value in fN in the Floating-Point register fN, it shall first save the value in fN in the Floating-Point
Register Save Area and restore the register upon function exit.</para> Register Save Area and restore the register upon function exit.</para>
<para>If full unwind information such as
<emphasis role="underline">DWARF</emphasis> is present, registers can be
saved in arbitrary locations in the stack
frame. If the system floating-point register save and restore
functions are to be used, the floating-point registers
shall be saved in a contiguous range. Floating-point register fN
is saved in the doubleword located 8 × (32 N) bytes before the back-chain
word of the previous frame, as shown in
<xref linkend="dbdoclet.50655240_97610" /></para>
<para>The Floating-Point Register Save Area is always doubleword <para>The Floating-Point Register Save Area is always doubleword
aligned. The size of the Floating-Point Register Save Area depends upon aligned. The size of the Floating-Point Register Save Area depends upon
the number of floating-point registers that must be saved. If no the number of floating-point registers that must be saved. If no
@ -5464,15 +5182,14 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
general-purpose register rN, it shall first save the value in rN in the general-purpose register rN, it shall first save the value in rN in the
General-Purpose Register Save Area and restore the register upon General-Purpose Register Save Area and restore the register upon
function exit.</para> function exit.</para>
<para>If full unwind information such as <para>If full unwind information such as DWARF is present, registers can be
<emphasis role="underline">DWARF</emphasis> is present, registers can be
saved in arbitrary locations in the stack frame. If the system saved in arbitrary locations in the stack frame. If the system
floating-point register save and restore functions are to be used, the floating-point register save and restore functions are to be used, the
floading-point registers shall be saved in a contiguous range. floating-point registers shall be saved in a contiguous range.
Floating-point register fN is saved in the doubleword located 8 x Floating-point register fN is saved in the doubleword located 8 x
(32-N) bytes before the back-chain word of the previous frame, as shown (32-N) bytes before the back-chain word of the previous frame, as shown
in in
<xref linkend="dbdoclet.50655240_97610" /></para> <xref linkend="dbdoclet.50655240_97610" />.</para>
<para>The General-Purpose Register Save Area is always doubleword <para>The General-Purpose Register Save Area is always doubleword
aligned. The size of the General-Purpose Register Save Area depends aligned. The size of the General-Purpose Register Save Area depends
upon the number of general registers that must be saved. If no upon the number of general registers that must be saved. If no
@ -5483,15 +5200,14 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>If a function changes the value in any nonvolatile vector <para>If a function changes the value in any nonvolatile vector
register vN, it shall first save the value in vN in the Vector Register register vN, it shall first save the value in vN in the Vector Register
Save Area and restore the register upon function exit.</para> Save Area and restore the register upon function exit.</para>
<para>If full unwind information such as <para>If full unwind information such as DWARF is present, registers can be
<emphasis role="underline">DWARF</emphasis> is present, registers can be
saved in arbitrary locations in the stack frame. If the system vector saved in arbitrary locations in the stack frame. If the system vector
register save and restore functions are to be used, the vector register save and restore functions are to be used, the vector
registers shall be saved in a contiguous range. Vector register vN is registers shall be saved in a contiguous range. Vector register vN is
saved in the doubleword located 16 x (32-N) bytes before the saved in the doubleword located 16 x (32-N) bytes before the
General-Purpose Register Save Areas plus alignment padding, as shown in General-Purpose Register Save Areas plus alignment padding, as shown in
<xref linkend="dbdoclet.50655240_97610" /></para> <xref linkend="dbdoclet.50655240_97610" />.</para>
<para>The Vector Register Save Area is always quadword aligned. If <para>The Vector Register Save Area is always quadword aligned. If
necessary to ensure suitable alignment of the vector save area, a necessary to ensure suitable alignment of the vector save area, a
padding doubleword may be introduced between the vector register and padding doubleword may be introduced between the vector register and
@ -5599,8 +5315,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<listitem> <listitem>
<para>When 128-bit integer types are passed by value, map each to <para>When 128-bit integer types are passed by value, map each to
two consecutive GPRs, two consecutive doublewords, or a GPR and a two consecutive GPRs, two consecutive doublewords, or a GPR and a
doubleword. doubleword.<footnote xml:id="pgfId-1151735">
<footnote xml:id="pgfId-1151735">
<para>In big-endian environments, the most-significant doubleword <para>In big-endian environments, the most-significant doubleword
of the quadword (__int128) parameter is stored in the lower of the quadword (__int128) parameter is stored in the lower
numbered GPR or parameter word. The least-significant doubleword numbered GPR or parameter word. The least-significant doubleword
@ -5653,8 +5368,8 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<listitem> <listitem>
<para>Map fixed-size aggregates and unions passed by value to as <para>Map fixed-size aggregates and unions passed by value to as
many doublewords of the Parameter Save Area as the value uses in many doublewords of the Parameter Save Area as the value uses in
memory. Align aggregates and unions as follows:</para> memory. Align aggregates and unions as follows:
</listitem> <itemizedlist>
<listitem> <listitem>
<para>Aggregates that contain qualified floating-point or vector <para>Aggregates that contain qualified floating-point or vector
arguments are normally aligned at the alignment of their base type. arguments are normally aligned at the alignment of their base type.
@ -5669,7 +5384,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>The alignment will never be larger than the stack frame <para>The alignment will never be larger than the stack frame
alignment (16 bytes).</para> alignment (16 bytes).</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist></para>
<para>This might result in doublewords being skipped for alignment. <para>This might result in doublewords being skipped for alignment.
When a doubleword in the Parameter Save Area (or its GPR copy) contains When a doubleword in the Parameter Save Area (or its GPR copy) contains
at least a portion of a structure, that doubleword must contain all at least a portion of a structure, that doubleword must contain all
@ -5677,7 +5392,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
can either be completely valid, or completely invalid, but not can either be completely valid, or completely invalid, but not
partially valid and invalid, except in the last doubleword where partially valid and invalid, except in the last doubleword where
invalid padding may be present.)</para> invalid padding may be present.)</para>
<itemizedlist> </listitem>
<listitem> <listitem>
<para>Pad an aggregate or union smaller than one doubleword in <para>Pad an aggregate or union smaller than one doubleword in
size<phrase revisionflag="added">, but having a non-zero size,</phrase> size<phrase revisionflag="added">, but having a non-zero size,</phrase>
@ -5773,8 +5488,6 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<listitem> <listitem>
<para>A member of a homogeneous aggregate of multiple like data types <para>A member of a homogeneous aggregate of multiple like data types
passed in up to eight floating-point registers</para> passed in up to eight floating-point registers</para>
</listitem>
</itemizedlist>
<para>A homogeneous aggregate can consist of a variety of nested <para>A homogeneous aggregate can consist of a variety of nested
constructs including structures, unions, and array members, which shall constructs including structures, unions, and array members, which shall
be traversed to determine the types and number of members of the base be traversed to determine the types and number of members of the base
@ -5791,6 +5504,8 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
vector registers if parameters of that type would be passed in vector vector registers if parameters of that type would be passed in vector
registers. They are passed as if each member was specified as a separate registers. They are passed as if each member was specified as a separate
parameter.</para> parameter.</para>
</listitem>
</itemizedlist>
<para>A qualified vector argument corresponds to:</para> <para>A qualified vector argument corresponds to:</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
@ -5804,8 +5519,6 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>Any future type requiring 16-byte alignment (see <para>Any future type requiring 16-byte alignment (see
<xref linkend="dbdoclet.50655240_15141" />) or processed in vector <xref linkend="dbdoclet.50655240_15141" />) or processed in vector
registers</para> registers</para>
</listitem>
</itemizedlist>
<para>For the purpose of determining a qualified floating-point argument, <para>For the purpose of determining a qualified floating-point argument,
_Float128 shall be considered a vector data type. In addition, _Float128 _Float128 shall be considered a vector data type. In addition, _Float128
is like a vector data type for determining if multiple aggregate members is like a vector data type for determining if multiple aggregate members
@ -5819,6 +5532,8 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
homogeneous unions, different union alternatives may have different homogeneous unions, different union alternatives may have different
sizes, provided that all union members are homogeneous with respect to sizes, provided that all union members are homogeneous with respect to
each other.)</para> each other.)</para>
</listitem>
</itemizedlist>
<note> <note>
<para>Floating-point and vector aggregates that contain padding <para>Floating-point and vector aggregates that contain padding
words and integer fields with a width of 0 should not be treated as words and integer fields with a width of 0 should not be treated as
@ -5851,8 +5566,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
size of the corresponding in-memory representation of the passed size of the corresponding in-memory representation of the passed
argument's type.</para> argument's type.</para>
<para><phrase revisionflag="changed">The parameter size is always rounded up to the next multiple of a <para><phrase revisionflag="changed">The parameter size is always rounded up to the next multiple of a
doubleword.</phrase> doubleword.</phrase><footnote xml:id="pgfId-1184124" revisionflag="added">
<footnote xml:id="pgfId-1184124" revisionflag="added">
<para>Consequently, each parameter of a non-zero size is allocated to <para>Consequently, each parameter of a non-zero size is allocated to
at least one doubleword.</para> at least one doubleword.</para>
</footnote></para> </footnote></para>
@ -6373,8 +6087,7 @@ s6 - 72 (stored)</programlisting>
architectures that pass some of the arguments in registers. The Power architectures that pass some of the arguments in registers. The Power
Architecture is one of the architectures that passes some of the Architecture is one of the architectures that passes some of the
arguments in registers.</para> arguments in registers.</para>
<para> <para><anchor xml:id="dbdoclet.50655240_page61" xreflabel="" />The parameter
<anchor xml:id="dbdoclet.50655240_page61" xreflabel="" /> The parameter
list may be zero length and is only allocated when parameters are list may be zero length and is only allocated when parameters are
spilled, when a function has unnamed parameters, or when no prototype is spilled, when a function has unnamed parameters, or when no prototype is
provided. When the Parameter Save Area is allocated, the Parameter Save provided. When the Parameter Save Area is allocated, the Parameter Save
@ -6387,8 +6100,7 @@ s6 - 72 (stored)</programlisting>
registers as if the return value was the first named input argument to a registers as if the return value was the first named input argument to a
function unless the return value is a nonhomogeneous aggregate larger function unless the return value is a nonhomogeneous aggregate larger
than 2 doublewords or a homogeneous aggregate with more than eight than 2 doublewords or a homogeneous aggregate with more than eight
registers. registers.<footnote xml:id="pgfId-1163117">
<footnote xml:id="pgfId-1163117">
<para>For a definition of homogeneous aggregates, see <para>For a definition of homogeneous aggregates, see
<xref linkend="dbdoclet.50655240_60588" />.</para> <xref linkend="dbdoclet.50655240_60588" />.</para>
</footnote> (Homogeneous aggregates are arrays, structs, or unions of a </footnote> (Homogeneous aggregates are arrays, structs, or unions of a
@ -6572,9 +6284,13 @@ lvx v1, 0, r12</programlisting>
and branch instructions that use registers. In both cases, absolute and branch instructions that use registers. In both cases, absolute
addressing is not required.</para> addressing is not required.</para>
</listitem> </listitem>
<listitem xml:id="dbdoclet.50655240_page64"> <listitem>
<para> <para>Second, when absolute addressing is required, the value can be
<xref linkend="dbdoclet.50655242_page119" /> computed with a Global Offset Table (GOT), which holds the information
for address computation. Static and const references can be
accessed using a TOC pointer relative addressing model, while (shared)
extern references must be accessed using the GOT-indirect addressing
scheme. Both addressing schemes require a TOC pointer to be initialized.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
@ -6892,23 +6608,20 @@ or r0, r0, r1</programlisting>
<xref linkend="dbdoclet.50655243_49403" />.</para> <xref linkend="dbdoclet.50655243_49403" />.</para>
<section xml:id="dbdoclet.50655240_41483"> <section xml:id="dbdoclet.50655240_41483">
<title>GPR Save and Restore Functions</title> <title>GPR Save and Restore Functions</title>
<para>Each _savegpr0_ <para>Each _savegpr0_<emphasis>N</emphasis> routine saves the general registers from
<emphasis>N</emphasis> routine saves the general registers from r r<emphasis>N</emphasis>- r31, inclusive. Each routine also saves the LR.
<emphasis>N</emphasis>- r31, inclusive. Each routine also saves the LR.
The stack frame must not have been allocated yet. When the routine is The stack frame must not have been allocated yet. When the routine is
called, r1 contains the address of the word immediately beyond the end called, r1 contains the address of the word immediately beyond the end
of the general register save area, and r0 must contain the value of the of the general register save area, and r0 must contain the value of the
LR on function entry.</para> LR on function entry.</para>
<para>The _restgpr0_ <para>The _restgpr0_<emphasis>N</emphasis> routines restore the general registers from
<emphasis>N</emphasis> routines restore the general registers from r r<emphasis>N</emphasis>- r31, and then return to their caller's caller.
<emphasis>N</emphasis>- r31, and then return to their caller's caller.
The caller's stack frame must already have been deallocated. When the The caller's stack frame must already have been deallocated. When the
routine is called, r1 contains the address of the word immediately routine is called, r1 contains the address of the word immediately
beyond the end of the general register save area, and the LR must beyond the end of the general register save area, and the LR must
contain the return address.</para> contain the return address.</para>
<para>A sample implementation of _savegpr0_ <para>A sample implementation of _savegpr0_<emphasis>N</emphasis> and
<emphasis>N</emphasis> and _restgpr0_ _restgpr0_<emphasis>N</emphasis> follows:</para>
<emphasis>N</emphasis> follows:</para>
<programlisting> _savegpr0_14: std r14,-144(r1) <programlisting> _savegpr0_14: std r14,-144(r1)
_savegpr0_15: std r15,-136(r1) _savegpr0_15: std r15,-136(r1)
_savegpr0_16: std r16,-128(r1) _savegpr0_16: std r16,-128(r1)
@ -7007,17 +6720,14 @@ or r0, r0, r1</programlisting>
</section> </section>
<section xml:id="dbdoclet.50655240_56788"> <section xml:id="dbdoclet.50655240_56788">
<title>FPR Save and Restore Functions</title> <title>FPR Save and Restore Functions</title>
<para>Each _savefpr_ <para>Each _savefpr_<emphasis>N</emphasis> routine saves the floating-point registers from
<emphasis>N</emphasis> routine saves the floating-point registers from f f<emphasis>N</emphasis>- f31, inclusive. When the routine is called, r1
<emphasis>N</emphasis>- f31, inclusive. When the routine is called, r1
contains the address of the word immediately beyond the end of the contains the address of the word immediately beyond the end of the
Floating-Point Register Save Area, which means that the stack frame Floating-Point Register Save Area, which means that the stack frame
must not have been allocated yet. Register r0 must contain the value of must not have been allocated yet. Register r0 must contain the value of
the LR on function entry.</para> the LR on function entry.</para>
<para>The _restfpr_ <para>The _restfpr_<emphasis>N</emphasis> routines restore the floating-point registers
<emphasis>N</emphasis> routines restore the floating-point registers from f<emphasis>N</emphasis>- f31, inclusive. When the routine is called, r1
from f
<emphasis>N</emphasis>- f31, inclusive. When the routine is called, r1
contains the address of the word immediately beyond the end of the contains the address of the word immediately beyond the end of the
Floating-Point Register Save Area, which means that the stack frame Floating-Point Register Save Area, which means that the stack frame
must not have been allocated yet.</para> must not have been allocated yet.</para>
@ -7025,9 +6735,8 @@ or r0, r0, r1</programlisting>
same prologue, or _restfpr_M and _restgpr0_M in the same epilogue. It same prologue, or _restfpr_M and _restgpr0_M in the same epilogue. It
is correct to call _savegpr1_M and _savefpr_M in either order, and to is correct to call _savegpr1_M and _savefpr_M in either order, and to
call _restgpr1_M and then _restfpr_M.</para> call _restgpr1_M and then _restfpr_M.</para>
<para>A sample implementation of _savefpr_ <para>A sample implementation of _savefpr_<emphasis>N</emphasis> and
<emphasis>N</emphasis> and _restfpr_ _restfpr_<emphasis>N</emphasis> follows:</para>
<emphasis>N</emphasis> follows:</para>
<programlisting> _savefpr_14: stfd f14,-144(r1) <programlisting> _savefpr_14: stfd f14,-144(r1)
_savefpr_15: stfd f15,-136(r1) _savefpr_15: stfd f15,-136(r1)
_savefpr_16: stfd f16,-128(r1) _savefpr_16: stfd f16,-128(r1)
@ -7450,8 +7159,7 @@ stw r0,0,(r7)</programlisting>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para>Due to fusion hardware support, the preferred code forms are <para>Due to fusion hardware support, the preferred code forms are
destructive destructive<footnote xml:id="pgfId-1139524">
<footnote xml:id="pgfId-1139524">
<para>Destructive in this context refers to a code sequence where <para>Destructive in this context refers to a code sequence where
the first intermediate result computed by a first instruction is the first intermediate result computed by a first instruction is
overwritten (that is, "destroyed") by the result of a second overwritten (that is, "destroyed") by the result of a second
@ -7520,13 +7228,10 @@ stw r0,0,(r7)</programlisting>
<para>Low part of the offset: symbol@l</para> <para>Low part of the offset: symbol@l</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para>If the instruction using symbol@got@ <para>If the instruction using symbol@got@<emphasis role="bold">l</emphasis> has a signed immediate operand (for example,
<emphasis role="bold">l</emphasis> has a signed immediate operand (for example, addi), use symbol@got@<emphasis role="bold">ha</emphasis>(high adjusted) for the high part of the offset.
addi), use symbol@got@
<emphasis role="bold">ha</emphasis>(high adjusted) for the high part of the offset.
If it has an unsigned immediate operand (for example, ori), use If it has an unsigned immediate operand (for example, ori), use
symbol@got@ symbol@got@<emphasis role="bold">h</emphasis>. For a description of high-adjusted values, see
<emphasis role="bold">h</emphasis>. For a description of high-adjusted values, see
<xref linkend="dbdoclet.50655241_51269" />.</para> <xref linkend="dbdoclet.50655241_51269" />.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
@ -7557,7 +7262,16 @@ stw r0,0,(r7)</programlisting>
<xref linkend="dbdoclet.50655240_85319" />.</para> <xref linkend="dbdoclet.50655240_85319" />.</para>
</listitem> </listitem>
</orderedlist> </orderedlist>
<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_85319"> <figure xml:id="dbdoclet.50655240_85319">
<title>Direct Function Call</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-32.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1" xml:id="dbdoclet.50655240_85319">
<title>Direct Function Call</title> <title>Direct Function Call</title>
<tgroup cols="2"> <tgroup cols="2">
<colspec colname="c1" colwidth="30*" /> <colspec colname="c1" colwidth="30*" />
@ -7590,7 +7304,7 @@ nop</programlisting>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table -->
<orderedlist continuation="continues"> <orderedlist continuation="continues">
<listitem> <listitem>
<para>The called function is not in the same executable or shared <para>The called function is not in the same executable or shared
@ -7603,13 +7317,22 @@ nop</programlisting>
</orderedlist> </orderedlist>
<para>For indirect function calls, the address of the function to be <para>For indirect function calls, the address of the function to be
called is placed in r12 and the CTR register. A bctrl instruction is used called is placed in r12 and the CTR register. A bctrl instruction is used
to pereform the indirect branch as shown in to perform the indirect branch as shown in
<xref linkend="dbdoclet.50655240_16744" />, and <xref linkend="dbdoclet.50655240_16744" />, and
<xref linkend="dbdoclet.50655240_95225" />. The ELF V2 ABI requires the <xref linkend="dbdoclet.50655240_95225" />. The ELF V2 ABI requires the
address of the called function to be in r12 when a cross-module function address of the called function to be in r12 when a cross-module function
call is made.</para> call is made.</para>


<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_95364"> <figure xml:id="dbdoclet.50655240_95364">
<title>Indirect Function Call (Absolute Medium Model)</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-33.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!-- table frame="all" pgwide="1" xml:id="dbdoclet.50655240_95364">
<title>Indirect Function Call (Absolute Medium Model)</title> <title>Indirect Function Call (Absolute Medium Model)</title>
<tgroup cols="2"> <tgroup cols="2">
<colspec colname="c1" colwidth="30*" /> <colspec colname="c1" colwidth="30*" />
@ -7659,12 +7382,21 @@ bctrl</programlisting>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table -->
<para> <para>
<xref linkend="dbdoclet.50655240_16744" /> shows how to make an indirect <xref linkend="dbdoclet.50655240_16744" /> shows how to make an indirect
function call using small-model position-independent code.</para> function call using small-model position-independent code.</para>


<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_16744"> <figure xml:id="dbdoclet.50655240_16744">
<title>Small-Model Position-Independent Indirect Function Call</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-34.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1" xml:id="dbdoclet.50655240_16744">
<title>Small-Model Position-Independent Indirect Function Call</title> <title>Small-Model Position-Independent Indirect Function Call</title>
<tgroup cols="2"> <tgroup cols="2">
<colspec colname="c1" colwidth="30*" /> <colspec colname="c1" colwidth="30*" />
@ -7720,12 +7452,21 @@ ld r2,24(r1)</programlisting>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table -->
<para> <para>
<xref linkend="dbdoclet.50655240_95225" /> shows how to make an indirect <xref linkend="dbdoclet.50655240_95225" /> shows how to make an indirect
function call using large-model position-independent code.</para> function call using large-model position-independent code.</para>


<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_95225"> <figure xml:id="dbdoclet.50655240_95225">
<title>Large-Model Position-Independent Indirect Function Call</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-35.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1" xml:id="dbdoclet.50655240_95225">
<title>Large-Model Position-Independent Indirect Function Call</title> <title>Large-Model Position-Independent Indirect Function Call</title>
<tgroup cols="2"> <tgroup cols="2">
<colspec colname="c1" colwidth="30*" /> <colspec colname="c1" colwidth="30*" />
@ -7783,7 +7524,7 @@ ld r2,24(r1)</programlisting>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table -->
<para>Function calls need to be performed in conjunction with <para>Function calls need to be performed in conjunction with
establishing, maintaining, and restoring addressability through the TOC establishing, maintaining, and restoring addressability through the TOC
pointer register, r2. When a function is called, the TOC pointer register pointer register, r2. When a function is called, the TOC pointer register
@ -7828,7 +7569,16 @@ bl target
<xref linkend="dbdoclet.50655240_66111" /> shows the model for branch <xref linkend="dbdoclet.50655240_66111" /> shows the model for branch
instructions.</para> instructions.</para>


<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_66111"> <figure xml:id="dbdoclet.50655240_66111">
<title>Branch Instruction Model</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-36.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1" xml:id="dbdoclet.50655240_66111">
<title>Branch Instruction Model</title> <title>Branch Instruction Model</title>
<tgroup cols="2"> <tgroup cols="2">
<colspec colname="c1" colwidth="50*" /> <colspec colname="c1" colwidth="50*" />
@ -7862,7 +7612,7 @@ b .L01</programlisting>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table-->
<para>Selecting one of multiple branches is accomplished in C with switch <para>Selecting one of multiple branches is accomplished in C with switch
statements. An address table is used by the compiler to implement the statements. An address table is used by the compiler to implement the
switch statement selections in cases where the case labels satisfy switch statement selections in cases where the case labels satisfy
@ -7886,7 +7636,17 @@ b .L01</programlisting>
application) loaded into the low or high address range, absolute application) loaded into the low or high address range, absolute
addressing of a branch table yields the best performance.</para> addressing of a branch table yields the best performance.</para>


<table frame="all" pgwide="1"> <figure>
<title>Absolute Switch Code (Within) for static modules located in low
or high 2 GB of address space</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-37.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1">
<title>Absolute Switch Code (Within) for static modules located in low <title>Absolute Switch Code (Within) for static modules located in low
or high 2 GB of address space</title> or high 2 GB of address space</title>
<tgroup cols="2"> <tgroup cols="2">
@ -7943,13 +7703,24 @@ bctr
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table-->
<note> <note>
<para>A faster variant of this code may be used to locate branch <para>A faster variant of this code may be used to locate branch
targets in the bottom 2 GB of the address space in conjunction with the targets in the bottom 2 GB of the address space in conjunction with the
lwz instruction in place of the lwa instruction.</para> lwz instruction in place of the lwa instruction.</para>
</note> </note>
<table frame="all" pgwide="1">
<figure>
<title>Absolute Switch Code (Beyond) for static modules beyond the top
or bottom 2 GB of the address space</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-38.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1">
<title>Absolute Switch Code (Beyond) for static modules beyond the top <title>Absolute Switch Code (Beyond) for static modules beyond the top
or bottom 2 GB of the address space</title> or bottom 2 GB of the address space</title>
<tgroup cols="2"> <tgroup cols="2">
@ -8006,7 +7777,7 @@ bctr
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table -->
<para>For position-independent code targeted at being dynamically loaded <para>For position-independent code targeted at being dynamically loaded
to different address ranges as DSO, the preferred code pattern uses to different address ranges as DSO, the preferred code pattern uses
TOC-relative addressing by taking advantage of the fact that the TOC TOC-relative addressing by taking advantage of the fact that the TOC
@ -8014,7 +7785,18 @@ bctr
relative offsets from the start address of the branch table ensures relative offsets from the start address of the branch table ensures
position-independence when code is loaded at different addresses.</para> position-independence when code is loaded at different addresses.</para>


<table frame="all" pgwide="1">
<figure>
<title>Position-Independent Switch Code for Small/Medium Models
(preferred with TOC-relative addressing)</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-39.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1">
<title>Position-Independent Switch Code for Small/Medium Models</title> <title>Position-Independent Switch Code for Small/Medium Models</title>
<tgroup cols="2"> <tgroup cols="2">
<colspec colname="c1" colwidth="30*" /> <colspec colname="c1" colwidth="30*" />
@ -8070,7 +7852,7 @@ bctr
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table-->
<para>For position-independent code targeted at being dynamically loaded <para>For position-independent code targeted at being dynamically loaded
to different address ranges as a DSO or a position-independent executable to different address ranges as a DSO or a position-independent executable
(PIE), the preferred code pattern uses TOC-indirect addresses for code (PIE), the preferred code pattern uses TOC-indirect addresses for code
@ -8079,7 +7861,17 @@ bctr
table ensures position independence when code is loaded at different table ensures position independence when code is loaded at different
addresses.</para> addresses.</para>


<table frame="all" pgwide="1"> <figure>
<title>Position-Independent Switch Code for All Models (alternate, with
GOT-indirect addressing)</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/fig2-40.png" format="PNG"
scalefit="1" width="100%" />
</imageobject>
</mediaobject>
</figure>
<!--table frame="all" pgwide="1">
<title>Position-Independent Switch Code for All Models (alternate, with <title>Position-Independent Switch Code for All Models (alternate, with
GOT-indirect addressing)</title> GOT-indirect addressing)</title>
<tgroup cols="2"> <tgroup cols="2">
@ -8136,7 +7928,7 @@ bctr
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table-->
<para> <para>
<xref linkend="dbdoclet.50655240_11405" /> shows how, in the medium code <xref linkend="dbdoclet.50655240_11405" /> shows how, in the medium code
model, PIC code can be used to avoid using the lwa instruction, which may model, PIC code can be used to avoid using the lwa instruction, which may
@ -8262,7 +8054,7 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
<para>The DWARF specification is used by compilers and debuggers to aid <para>The DWARF specification is used by compilers and debuggers to aid
source-level or symbolic debugging. However, the format is not biased toward source-level or symbolic debugging. However, the format is not biased toward
any particular compiler or debugger. Per the DWARF specification, a any particular compiler or debugger. Per the DWARF specification, a
mapping from Power Archtecture regiters to register numbers is required as mapping from Power Archtecture registers to register numbers is required as
described in <xref linkend="dbdoclet.50655240_94513" />.</para> described in <xref linkend="dbdoclet.50655240_94513" />.</para>
<para>All instances of the Power Architecture use the mapping shown in <para>All instances of the Power Architecture use the mapping shown in
<xref linkend="dbdoclet.50655240_94513" /> for encoding registers into <xref linkend="dbdoclet.50655240_94513" /> for encoding registers into
@ -8397,8 +8189,7 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
<para>cr0 - cr7</para> <para>cr0 - cr7</para>
</entry> </entry>
<entry> <entry>
<para>0.5 <para>0.5<footnote>
<footnote>
<para>The CRx registers correspond to 4-bit fields within a <para>The CRx registers correspond to 4-bit fields within a
word where the offset of the 4-bit group within a word is a word where the offset of the 4-bit group within a word is a
function of the CRFx number (x).</para> function of the CRFx number (x).</para>

@ -116,8 +116,7 @@ e_ident[EI_DATA] ELFDATA2LSB For all little-endian implementations.</progra
</row> </row>
<row> <row>
<entry> <entry>
<para>.plt <para>.plt<footnote>
<footnote>
<para>The type of the OpenPOWER ABI .plt section is <para>The type of the OpenPOWER ABI .plt section is
SHT_NOBITS, not SHT_PROGBITS as on most other processors.</para> SHT_NOBITS, not SHT_PROGBITS as on most other processors.</para>
</footnote></para> </footnote></para>
@ -184,7 +183,7 @@ e_ident[EI_DATA] ELFDATA2LSB For all little-endian implementations.</progra
is linker generated. The linker must ensure that .got is aligned to an is linker generated. The linker must ensure that .got is aligned to an
8-byte boundary. In an executable or shared library, it may contain 8-byte boundary. In an executable or shared library, it may contain
part or all of the TOC. For more information, see part or all of the TOC. For more information, see
<xref revisionflag='deleted' linkend="dbdoclet.50655240___RefHeading___Toc377640591" /> and <xref linkend="dbdoclet.50655240___RefHeading___Toc377640591" /> and
<xref linkend="dbdoclet.50655242_47739" />.</para> <xref linkend="dbdoclet.50655242_47739" />.</para>
</listitem> </listitem>
<listitem> <listitem>
@ -319,7 +318,7 @@ e_ident[EI_DATA] ELFDATA2LSB For all little-endian implementations.</progra
pointer can use a common entry point for the local and global pointer can use a common entry point for the local and global
entry points.</para> entry points.</para>
<note> <note>
<para>Note: If the function is not a leaf function, it must <para>If the function is not a leaf function, it must
call subroutines using the R_PPC64_REL24_NOTOC relocation call subroutines using the R_PPC64_REL24_NOTOC relocation
to indicate that the TOC register is not initialized. In to indicate that the TOC register is not initialized. In
turn, this may lead to more expensive procedure linkage turn, this may lead to more expensive procedure linkage
@ -852,7 +851,7 @@ my_func:
</entry> </entry>
</row> </row>
<row> <row>
<entry align="left"> <entry align="right">
<para>0</para> <para>0</para>
</entry> </entry>
<entry> <entry>
@ -2360,7 +2359,7 @@ my_func:
</tgroup> </tgroup>
</informaltable> </informaltable>
<note> <note>
<para>Note: Relocations flagged with an asterisk(*) will <para>Relocations flagged with an asterisk(*) will
trigger a relocation failure if the value computed does trigger a relocation failure if the value computed does
not fit in the field specified.</para> not fit in the field specified.</para>
</note> </note>
@ -2426,11 +2425,12 @@ my_func:
<tfoot> <tfoot>
<row> <row>
<entry nameend="c4" namest="c1" align="left"> <entry nameend="c4" namest="c1" align="left">
<para><emphasis role="bold">Note:</emphasis>Relocation values 8, 9, 12, 13, 18, 23, 32, <note>
<para>Relocation values 8, 9, 12, 13, 18, 23, 32,
and 247 are not used. This is to maintain a and 247 are not used. This is to maintain a
correspondence to the relocation values used by the correspondence to the relocation values used by the
32-bit PowerPC ELF ABI. 32-bit PowerPC ELF ABI.
</para> </para></note>
</entry> </entry>
</row> </row>
</tfoot> </tfoot>
@ -3204,7 +3204,7 @@ my_func:
<para>half16ds*</para> <para>half16ds*</para>
</entry> </entry>
<entry> <entry>
<para></para> <para>(R + A) &gt;&gt; 2</para>
</entry> </entry>
</row> </row>
<row> <row>
@ -4119,9 +4119,7 @@ my_func:
resolved through a call to the symbols procedure linkage table entry. resolved through a call to the symbols procedure linkage table entry.
Additionally, it instructs the link editor to build a procedure linkage Additionally, it instructs the link editor to build a procedure linkage
table for the executable or shared object if one is not created.</para> table for the executable or shared object if one is not created.</para>
<para> <para><anchor xml:id="dbdoclet.50655241_R_PPC_COPY" xreflabel="" />R_PPC64_COPY</para>
<anchor xml:id="dbdoclet.50655241_R_PPC_COPY"
xreflabel="" /> R_PPC64_COPY</para>
<para>This relocation type is created by the link editor for dynamic <para>This relocation type is created by the link editor for dynamic
linking. Its offset member refers to a location in a writable segment. linking. Its offset member refers to a location in a writable segment.
The symbol table index specifies a symbol that should exist both in the The symbol table index specifies a symbol that should exist both in the
@ -4219,7 +4217,7 @@ ld r3,x@got@l(r3)</programlisting>
<para> </para> <para> </para>
<note> <note>
<para> <para>
<emphasis role="bold">Note:</emphasis> If X is a variable stored in the TOC, If X is a variable stored in the TOC,
then X@got is the offset within the TOC of a doubleword whose then X@got is the offset within the TOC of a doubleword whose
value is X@toc.</para> value is X@toc.</para>
</note> </note>
@ -4274,7 +4272,7 @@ lwz rt, offset(r2)</programlisting>
<para>Compilers and programmers <para>Compilers and programmers
<emphasis>must</emphasis> ensure that r2 is live at the actual data access <emphasis>must</emphasis> ensure that r2 is live at the actual data access
point associated with extended displacement addressing.</para> point associated with extended displacement addressing.</para>
</section>
<section xml:id="dbdoclet.50655241_19147"> <section xml:id="dbdoclet.50655241_19147">
<title>TOC Pointer Usage</title> <title>TOC Pointer Usage</title>
<para>To enable linker-based optimizations when global data is accessed, <para>To enable linker-based optimizations when global data is accessed,
@ -4320,6 +4318,8 @@ target:
rewrite address references created using GOT-indirect loads and bl+4 rewrite address references created using GOT-indirect loads and bl+4
sequences to use TOC-relative address computation.</para> sequences to use TOC-relative address computation.</para>
</section> </section>
</section>
<section> <section>
<title>Fusion</title> <title>Fusion</title>
<para>Code generation in compilers, linkers, and by programmers should <para>Code generation in compilers, linkers, and by programmers should
@ -5717,8 +5717,7 @@ static __thread unsigned int x3;
the following code, which makes no reference to GOT entries. The GOT the following code, which makes no reference to GOT entries. The GOT
entries in entries in
<xref linkend="dbdoclet.50655241_16273" /> can be removed from the GOT by <xref linkend="dbdoclet.50655241_16273" /> can be removed from the GOT by
the linker when performing this code transformation. the linker when performing this code transformation.<footnote xml:id="pgfId-1134055">
<footnote xml:id="pgfId-1134055">
<para>To further optimize the code in <para>To further optimize the code in
<xref linkend="dbdoclet.50655241_16273" />, a linker may reschedule the <xref linkend="dbdoclet.50655241_16273" />, a linker may reschedule the
sequence to exploit fusion by generating a sequence that may be fused sequence to exploit fusion by generating a sequence that may be fused
@ -6251,7 +6250,7 @@ nop</programlisting>
<para> <para>
<orderedlist> <orderedlist>
<listitem xml:id="dbdoclet.50655241_21152"> <listitem xml:id="dbdoclet.50655241_21152">
<para>1. The linker may prefer to schedule the addis and <para>The linker may prefer to schedule the addis and
addi to be adjacent to take advantage of fusion as a addi to be adjacent to take advantage of fusion as a
microarchitecture optimization opportunity.</para> microarchitecture optimization opportunity.</para>
</listitem> </listitem>

@ -141,7 +141,7 @@ xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
</tgroup> </tgroup>
</table> </table>
<note> <note>
<para>Note: For the PT_LOAD entry describing the data segment, the <para>For the PT_LOAD entry describing the data segment, the
p_memsz may be greater than the p_filesz. The difference is the size of p_memsz may be greater than the p_filesz. The difference is the size of
the .bss section. On implementations that use virtual memory file the .bss section. On implementations that use virtual memory file
mapping, only the portion of the file between the .data p_offset mapping, only the portion of the file between the .data p_offset
@ -152,7 +152,7 @@ xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
data through p_vaddr + p_memsz.</para> data through p_vaddr + p_memsz.</para>
</note> </note>
<para> <para>
<xref linkend="dbdoclet.50655242_44623" /> demonstrates a typical mapping of <xref linkend="dbdoclet.50655242_45730" /> demonstrates a typical mapping of
file to memory segments.</para> file to memory segments.</para>
<table frame="all" pgwide="1" xml:id="dbdoclet.50655242_45730"> <table frame="all" pgwide="1" xml:id="dbdoclet.50655242_45730">
<title>Memory Segment Mappings</title> <title>Memory Segment Mappings</title>
@ -366,11 +366,9 @@ int main(int argc, char *argv[], char *envp[], ElfW(auxv_t) *auxvec)</programlis
</itemizedlist> </itemizedlist>
<para>This section explains how to implement the call to main or to the <para>This section explains how to implement the call to main or to the
entry point.</para> entry point.</para>
</section>
<section xml:id="dbdoclet.50655242___RefHeading___Toc377640653"> <section xml:id="dbdoclet.50655242___RefHeading___Toc377640653">
<title>Registers <title xml:id="dbdoclet.50655242_PROC-REG">Registers</title>
<anchor xml:id="dbdoclet.50655242_PROC-REG"
xreflabel="" /> Registers</title>
<para>The contents of most registers are <para>The contents of most registers are
<emphasis>not</emphasis> specified when a process is first entered from an <emphasis>not</emphasis> specified when a process is first entered from an
exec system call. A program should not expect the operating system to set exec system call. A program should not expect the operating system to set
@ -699,6 +697,8 @@ PPC_FEATURE2_HAS_VCRYPTO 0x02000000 /* The processor implements the
information block.</para> information block.</para>
</section> </section>
</section> </section>
</section>
<section> <section>
<title>Dynamic Linking</title> <title>Dynamic Linking</title>
<section xml:id="dbdoclet.50655242___RefHeading___Toc377640656"> <section xml:id="dbdoclet.50655242___RefHeading___Toc377640656">
@ -709,8 +709,7 @@ PPC_FEATURE2_HAS_VCRYPTO 0x02000000 /* The processor implements the
</section> </section>
<section> <section>
<title>Dynamic Section</title> <title>Dynamic Section</title>
<para> <para><anchor xml:id="dbdoclet.50655242_page119" xreflabel="" />The dynamic
<anchor xml:id="dbdoclet.50655242_page119" xreflabel="" /> The dynamic
section provides information used by the dynamic linker to manage section provides information used by the dynamic linker to manage
dynamically loaded shared objects, including relocation, initialization, dynamically loaded shared objects, including relocation, initialization,
and termination when loaded or unloaded, resolving dependencies on other and termination when loaded or unloaded, resolving dependencies on other
@ -877,7 +876,7 @@ PPC_FEATURE2_HAS_VCRYPTO 0x02000000 /* The processor implements the
stored in the file image. The individual PLT entries are populated by the stored in the file image. The individual PLT entries are populated by the
dynamic linker using one of the following binding methods. Execution can dynamic linker using one of the following binding methods. Execution can
then be redirected to a dependent shared object or executable.</para> then be redirected to a dependent shared object or executable.</para>
</section>
<section> <section>
<title>Lazy Binding</title> <title>Lazy Binding</title>
<para>The lazy binding method is the default. It delays the resolution of <para>The lazy binding method is the default. It delays the resolution of
@ -966,8 +965,7 @@ bctr</programlisting>
ld r12,func@plt@toc@l(r12) ld r12,func@plt@toc@l(r12)
mtctr r12 mtctr r12
bctr</programlisting> bctr</programlisting>
<para> <para><anchor xml:id="dbdoclet.50655242___DdeLink__61883_1749258592"
<anchor xml:id="dbdoclet.50655242___DdeLink__61883_1749258592"
xreflabel="" />A possible implementation for case 3 looks as xreflabel="" />A possible implementation for case 3 looks as
follows:</para> follows:</para>
<programlisting> mflr r0 <programlisting> mflr r0
@ -1062,4 +1060,6 @@ res_1: b PLTresolve
<para> </para> <para> </para>
</section> </section>
</section> </section>
</section>

</chapter> </chapter>

@ -195,8 +195,7 @@ xml:id="dbdoclet.50655243_pgfId-1099317">
<entry> <entry>
<para>__PPC64__</para> <para>__PPC64__</para>
<para>__powerpc64__</para> <para>__powerpc64__</para>
<para>__64BIT__ <para>__64BIT__<footnote xml:id="pgfId-1101811">
<footnote xml:id="pgfId-1101811">
<para>Phased in.</para> <para>Phased in.</para>
</footnote></para> </footnote></para>
</entry> </entry>

@ -203,9 +203,9 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
<table frame="all" pgwide="1" xml:id="dbdoclet.50655244_35023"> <table frame="all" pgwide="1" xml:id="dbdoclet.50655244_35023">
<title>Endian-Sensitive Operations</title> <title>Endian-Sensitive Operations</title>
<tgroup cols="3"> <tgroup cols="3">
<colspec colname="c1" colwidth="15*" align="center" /> <colspec colname="c1" colwidth="25*" align="center" />
<colspec colname="c2" colwidth="35*" align="center" /> <colspec colname="c2" colwidth="30*" align="center" />
<colspec colname="c3" colwidth="50*" /> <colspec colname="c3" colwidth="45*" />
<thead> <thead>
<row> <row>
<entry> <entry>
@ -274,8 +274,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row revisionflag="added"> <row revisionflag="added">
<entry> <entry>
<para>vec_extract_fp32_</para> <para>vec_extract_fp32_from_shorth</para>
<para>from_shorth</para>
</entry> </entry>
<entry> <entry>
<para> </para> <para> </para>
@ -286,8 +285,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row revisionflag="added"> <row revisionflag="added">
<entry> <entry>
<para>vec_extract_fp32_</para> <para>vec_extract_fp32_from_shortl</para>
<para>from_shortl</para>
</entry> </entry>
<entry> <entry>
<para> </para> <para> </para>
@ -310,8 +308,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row revisionflag="added"> <row revisionflag="added">
<entry> <entry>
<para>vec_first_match</para> <para>vec_first_match_index</para>
<para>_index</para>
</entry> </entry>
<entry> <entry>
<para> </para> <para> </para>
@ -322,8 +319,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row revisionflag="added"> <row revisionflag="added">
<entry> <entry>
<para>vec_first_match</para> <para>vec_first_match_index_or_eos</para>
<para>_index_or_eos</para>
</entry> </entry>
<entry> <entry>
<para> </para> <para> </para>
@ -364,8 +360,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
<para>vmrgew</para> <para>vmrgew</para>
</entry> </entry>
<entry> <entry>
<para>Swap inputs and use vmrgow for LE. Phased in. <para>Swap inputs and use vmrgow for LE. Phased in.<footnote xml:id="pgfId-1105723">
<footnote xml:id="pgfId-1105723">
<para>This optional function is being phased in, and it may not <para>This optional function is being phased in, and it may not
be available on all implementations.</para> be available on all implementations.</para>
</footnote></para> </footnote></para>
@ -401,8 +396,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
<para>vmrgow</para> <para>vmrgow</para>
</entry> </entry>
<entry> <entry>
<para>Swap inputs and use vmrgew for LE. Phased in. <para>Swap inputs and use vmrgew for LE. Phased in.<footnoteref linkend="pgfId-1105723" /> </para>
<footnoteref linkend="pgfId-1105723" /> </para>
</entry> </entry>
</row> </row>
<row> <row>
@ -754,8 +748,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xlw4 <para>vec_xlw4<footnote xml:id="dbdoclet.50655244_73052"><para>
<footnote xml:id="dbdoclet.50655244_73052"><para>
Deprecated. The use of vector data type Deprecated. The use of vector data type
assignment and overloaded vec_xl and vec_xst vector assignment and overloaded vec_xl and vec_xst vector
built-in functions are preferred forms for assigning built-in functions are preferred forms for assigning
@ -774,8 +767,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xld2 <para>vec_xld2<footnoteref linkend="dbdoclet.50655244_73052"/>
<footnoteref linkend="dbdoclet.50655244_73052"/>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -798,8 +790,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xstw4 <para>vec_xstw4<footnoteref linkend="dbdoclet.50655244_73052"/>
<footnoteref linkend="dbdoclet.50655244_73052"/>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -811,8 +802,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xstd2 <para>vec_xstd2<footnoteref linkend="dbdoclet.50655244_73052"/>
<footnoteref linkend="dbdoclet.50655244_73052"/>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -1173,8 +1163,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xlw<phrase revisionflag="added">4</phrase> <para>vec_xlw<phrase revisionflag="added">4</phrase><footnote xml:id="dbdoclet.50655244_78719">
<footnote xml:id="dbdoclet.50655244_78719">
<para>Deprecated. The use of vector data type <para>Deprecated. The use of vector data type
assignment and overloaded vec_xl and vec_xst vector assignment and overloaded vec_xl and vec_xst vector
built-in functions are preferred forms for assigning built-in functions are preferred forms for assigning
@ -1193,8 +1182,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xld2 <para>vec_xld2<footnoteref linkend="dbdoclet.50655244_78719"/>
<footnoteref linkend="dbdoclet.50655244_78719"/>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -1219,8 +1207,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xstw4 <para>vec_xstw4<footnoteref linkend="dbdoclet.50655244_78719"/>
<footnoteref linkend="dbdoclet.50655244_78719"/>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -1232,8 +1219,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
<row> <row>
<entry> <entry>
<para>vec_xstd2 <para>vec_xstd2<footnoteref linkend="dbdoclet.50655244_78719"/>
<footnoteref linkend="dbdoclet.50655244_78719"/>
</para> </para>
</entry> </entry>
<entry> <entry>
@ -1295,6 +1281,53 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</row> </row>
</thead> </thead>
<tbody> <tbody>
<row revisionflag="added">
<entry>
<para>VEC_CONCAT (ARG1, ARG2)<?linebreak?>(Fortran)</para>
<para></para>
</entry>
<entry>
<para>Purpose:</para>
<para>Concatenates two elements to form a vector.</para>
<para>Result value:</para>
<para>The resulting vector consists of the two scalar elements,
ARG1 and ARG2, assigned to elements 0 and 1 (using the
environments native endian numbering), respectively.</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Note: </emphasis>This function corresponds to the C/C++ vector
constructor (vector type){a,b}. It is provided only for
languages without vector constructors.</para>
</listitem>
</itemizedlist>
</entry>
</row>
<row revisionflag="added">
<entry>
<para></para>
</entry>
<entry>
<para>vector signed long long vec_concat (signed long long,
signed long long);</para>
</entry>
</row>
<row revisionflag="added">
<entry>
<para></para>
</entry>
<entry>
<para>vector unsigned long long vec_concat (unsigned long long,
unsigned long long);</para>
</entry>
</row>
<row revisionflag="added">
<entry>
<para></para>
</entry>
<entry>
<para>vector double vec_concat (double, double);</para>
</entry>
</row>
<row> <row>
<entry> <entry>
<para>VEC_CONVERT(V, MOLD)</para> <para>VEC_CONVERT(V, MOLD)</para>

Loading…
Cancel
Save