Fix issue #25, Review usage of hyphens.

Signed-off-by: Bill Schmidt <wschmidt@linux.vnet.ibm.com>
master
Bill Schmidt 8 years ago
parent d3131a5ac9
commit 6516b1aaf8

@ -2323,7 +2323,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<phrase revisionflag="added">approximation</phrase><phrase revisionflag="deleted">estimate</phrase>
of the value of the corresponding
element of ARG1 divided by 2 to the power of ARG2, which should
be in the range 0 - 31.</para>
be in the range 0&#8211;31.</para>
</entry>
</row>
<row>
@ -2355,7 +2355,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<phrase revisionflag="added">signed-integer</phrase> value<phrase revisionflag="added">,
truncated towards zero,</phrase> obtained by
multiplying the corresponding element of ARG1 by 2 to the power
of ARG2, which should be in the range 0 - 31.</para>
of ARG2, which should be in the range 0&#8211;31.</para>
</entry>
</row>
<row>
@ -2378,7 +2378,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<phrase revisionflag="added">unsigned-integer</phrase> value<phrase revisionflag="added">,
truncated towards zero,</phrase> obtained by
multiplying the corresponding element of ARG1 by 2 to the power
of ARG2, which should be in the range 0 - 31.</para>
of ARG2, which should be in the range 0&#8211;31.</para>
</entry>
</row>
<row>
@ -2950,7 +2950,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
</row>
<row revisionflag="added">
<entry>
<para>VEC_EXTRACT_FP32-_FROM_SHORTH (ARG1)</para>
<para>VEC_EXTRACT_FP32_ FROM_SHORTH (ARG1)</para>
<para>POWER ISA 3.0</para>
</entry>
<entry>
@ -2977,7 +2977,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
</row>
<row revisionflag="added">
<entry>
<para>VEC_EXTRACT_FP32-_FROM_SHORTL (ARG1)</para>
<para>VEC_EXTRACT_FP32_ FROM_SHORTL (ARG1)</para>
<para>POWER ISA 3.0</para>
</entry>
<entry>
@ -3050,8 +3050,8 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>Result value:</para>
<para>The first doubleword element of the result contains the
zero-extended extracted word from ARG1. The second doubleword is
set to 0. ARG2 specifies the least-significant byte number (0 -
12) of the word to be extracted.</para>
set to 0. ARG2 specifies the least-significant byte number
(0&#8211;12) of the word to be extracted.</para>
</entry>
</row>
<row revisionflag="added">
@ -3790,7 +3790,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>Result value:</para>
<para>The first doubleword element of the result contains the
zero-extended extracted word from ARG1. The second doubleword is
set to 0. ARG2 specifies the least-significant byte (0 - 12) of
set to 0. ARG2 specifies the least-significant byte (0&#8211;12) of
the extracted word.</para>
</entry>
</row>
@ -4723,7 +4723,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
beginning with 0. If ARG1 is a vector signed char or a vector
unsigned char vector, then let m be 4. Otherwise, let m be 2. For
each element n of the result vector, the value is obtained in the
following way: For p = mn to mn+m-1, multiply element p of ARG1
following way: For p = mn to mn + m &#8211; 1, multiply element p of ARG1
by element p of ARG2. Add the sum of these products to element n
of ARG3. All additions are performed using 32-bit modular
arithmetic.</para>
@ -5353,8 +5353,8 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>Result value:</para>
<para>The value of each element of the result is the product of
the corresponding elements of ARG1 and ARG2, added to the
corresponding elements of ARG3, and then multiplied by
-1.0.</para>
corresponding elements of ARG3, then multiplied by
&#8211;1.0.</para>
</entry>
</row>
<row>
@ -5387,7 +5387,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>The value of each element of the result is the product of
the corresponding elements of ARG1 and ARG2, subtracted from the
corresponding element of ARG3, and then multiplied by
-1.0.</para>
&#8211;1.0.</para>
</entry>
</row>
<row>
@ -6408,8 +6408,8 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>Applies a permute and exclusive-OR operation on two vectors
of byte elements.</para>
<para>Result value:</para>
<para>For each i (0 ≤ i &lt; 16), let index1 be bits 0 - 3 and
index2 be bits 4 - 7 of byte element i of mask ARG3.</para>
<para>For each i (0 ≤ i &lt; 16), let index1 be bits 0&#8211;3 and
index2 be bits 4&#8211;7 of byte element i of mask ARG3.</para>
<para>Byte element i of the result is set to the exclusive-OR of
byte elements index1 of ARG1 and index2 of ARG2.</para>
</entry>
@ -7696,8 +7696,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>Result value:</para>
<para>The result is the most-significant 16 bytes obtained by
concatenating ARG1 and ARG2 and shifting left by the number of
bytes specified by ARG3, which should be in the range 0 -
15.</para>
bytes specified by ARG3, which should be in the range 0&#8211;15.</para>
</entry>
</row>
<row>
@ -7852,7 +7851,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
element of the concatenated vectors ARG1 and ARG2, with the word
offset to its right<superscript>1</superscript>
specified by ARG3, which should be in the
range 0 - 3.</para>
range 0&#8211;3.</para>
<para><superscript>1</superscript>A shift left picks values
from the right.</para>
</entry>
@ -8978,7 +8977,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
(octets).</para>
<para>Result value:</para>
<para>The result is the contents of ARG1, shifted right by the
number of bytes specified by bits 121 - 124 of ARG2. The bits
number of bytes specified by bits 121&#8211;124 of ARG2. The bits
that are shifted out are replaced by zeros.</para>
</entry>
</row>
@ -9178,16 +9177,19 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>Result value:</para>
<para>For each integer 1
<emphasis>≤</emphasis> i
<emphasis>≤</emphasis> 15, let X
<emphasis>i</emphasis> be the halfword formed by concatenating
elements i and i+1 of ARG1. Let X
<emphasis>0</emphasis> be the halfword formed by concatenating a
zero byte with element 0 of ARG1. Let S
<emphasis>i</emphasis> be the value in the three least-significant
<emphasis>≤</emphasis> 15, let
X<subscript>i</subscript>
be the halfword formed by concatenating
elements i and i + 1 of ARG1. Let
X<subscript>0</subscript>
be the halfword formed by concatenating a
zero byte with element 0 of ARG1. Let
S<subscript>i</subscript>
be the value in the three least-significant
bits of element i of ARG2. Then element i of the result vector
contains the value formed from bits 8 - S
<emphasis>i</emphasis> through 15 - S
<emphasis>i</emphasis>.</para>
contains the value formed from bits 8 &#8211;
S<subscript>i</subscript> through 15 &#8211;
S<subscript>i</subscript>.</para>
</entry>
</row>
<row revisionflag="added">
@ -9588,7 +9590,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
beginning with 0. If ARG1 is a vector signed char vector or a
vector unsigned char vector, then let m be 4. Otherwise, let m be
2. For each element n of the result vector, the value is obtained
by adding elements mn through mn+m-1 of ARG1 and element n of
by adding elements mn through mn + m &#8211; 1 of ARG1 and element n of
ARG2 using saturated addition.</para>
</entry>
</row>
@ -10351,7 +10353,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>At least 0 and at most 16 bytes will be loaded. The length
is specified by the least-significant byte of ARG2, as min (mod
(ARG2, 256), 16). The behavior is undefined if the length
argument is outside of the range 0 - 255, or if it is not a
argument is outside of the range 0&#8211;255, or if it is not a
multiple of the vector element size.</para>
</entry>
</row>
@ -10488,7 +10490,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>At least 0 and at most 16 bytes will be loaded. The length
is specified by the least-significant byte of ARG2, as min (mod
(ARG2, 256), 16). The behavior is undefined if the length
argument is outside of the range 0 - 255, or if it is not a
argument is outside of the range 0&#8211;255, or if it is not a
multiple of the vector element size.</para>
</entry>
</row>
@ -10934,7 +10936,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>At least 0 and at most 16 bytes will be stored. The length
is specified by the least-significant byte of ARG3, as min (mod
(ARG3, 256), 16). The behavior is undefined if the length
argument is outside of the range 0 - 255, or if it is not a
argument is outside of the range 0&#8211;255, or if it is not a
multiple of the vector element size.</para>
</entry>
</row>
@ -11069,7 +11071,7 @@ xml:id="dbdoclet.50655245_pgfId-1138128">
<para>At least 0 and at most 16 bytes will be stored. The length
is specified by the least-significant byte of ARG3, as min (mod
(ARG2, 256), 16). The behavior is undefined if the length
argument is outside of the range 0 - 255, or if it is not a
argument is outside of the range 0&#8211;255, or if it is not a
multiple of the vector element size.</para>
</entry>
</row>

@ -17,8 +17,8 @@ xml:id="dbdoclet.50655245_pgfId-1450875" revisionflag="added">
<para>Binary-coded decimal (BCD) values are compressed; each decimal digit
and sign bit occupies 4 bits. Digits are ordered right-to-left in the order
of significance. The final 4 bits encode the sign. A valid encoding must
have a value in the range 0 - 9 in each of its 31 digits, and a value in
the range 10 - 15 for the sign field.</para>
have a value in the range 0&#8211;9 in each of its 31 digits, and a value in
the range 10&#8211;15 for the sign field.</para>
<para>Source operands with sign codes of 0b1010, 0b1100, 0b1110, or 0b1111
are interpreted as positive values. Source operands with sign codes of
0b1011 or 0b1101 are interpreted as negative values.</para>
@ -27,7 +27,7 @@ xml:id="dbdoclet.50655245_pgfId-1450875" revisionflag="added">
indicate positive values or zero, depending on the value of the positive
sign (PS) bit.</para>
<para>These built-in functions can operate on values of at most 31 digits.
BCD values are stored in memory as contiguous arrays of 1 - 16
BCD values are stored in memory as contiguous arrays of 1&#8211;16
bytes.</para>
<note>
<para>BCD built-in functions are valid only when -<emphasis role="bold">march</emphasis> or

@ -98,7 +98,7 @@
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Revision 1.2b - initial conversion from framemaker</para>
<para>Revision 1.3b: initial conversion from framemaker</para>
</listitem>
</itemizedlist>
</revdescription>
@ -108,7 +108,18 @@
<revdescription>
<itemizedlist revisionflag="added" spacing="compact">
<listitem>
<para>Version 1.2 - POWER8 erratum and POWER9 support.
<para>Version 1.3: POWER9 support.
</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date revisionflag="added">2016-06-13</date>
<revdescription>
<itemizedlist revisionflag="added" spacing="compact">
<listitem>
<para>Version 1.2: POWER8 errata.
</para>
</listitem>
</itemizedlist>
@ -119,7 +130,7 @@
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Version 1.1 - initial conversion from framemaker</para>
<para>Version 1.1: Incorporate errata.</para>
</listitem>
</itemizedlist>
</revdescription>

@ -99,8 +99,8 @@
</listitem>
<listitem>
<para>
<emphasis>ISO/IEC TR 24732:2009 - Programming languages, their
environments and system software interfaces - Extension for the
<emphasis>ISO/IEC TR 24732:2009 &#8211; Programming languages, their
environments and system software interfaces &#8211; Extension for the
programming language C to support decimal floating-point
arithmetic</emphasis>, ISO/IEC, January 05, 2009. Available from ISO.
<emphasis>

@ -2042,7 +2042,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>
<emphasis role="bold">FPSCR Formats:</emphasis> As of Power ISA version 2.05, the
FPSCR is extended from 32 bits to 64 bits. The fields of the original
32-bit FPSCR are now held in bits 32 - 63 of the 64-bit FPSCR. The
32-bit FPSCR are now held in bits 32&#8211;63 of the 64-bit FPSCR. The
assembly instructions that operate upon the 64-bit FPSCR have either
a W instruction field added to select the operative word for the
instruction (for example,
@ -2558,7 +2558,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</entry>
<entry>
<para>Vector of 16 bytes with a value of either 0 or
2<superscript>8</superscript>- 1.</para>
2<superscript>8</superscript> &#8211; 1.</para>
</entry>
</row>
<row>
@ -2610,7 +2610,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</entry>
<entry>
<para>Vector of 8 halfwords with a value of either 0 or
2<superscript>16</superscript>- 1.</para>
2<superscript>16</superscript> &#8211; 1.</para>
</entry>
</row>
<row>
@ -2662,7 +2662,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</entry>
<entry>
<para>Vector of 4 words with a value of either 0 or
2<superscript>32</superscript>- 1.</para>
2<superscript>32</superscript> &#8211; 1.</para>
</entry>
</row>
<row>
@ -2721,7 +2721,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</entry>
<entry>
<para>Vector of 2 doublewords with a value of either 0 or
2<superscript>64</superscript>- 1.</para>
2<superscript>64</superscript> &#8211; 1.</para>
</entry>
</row>
<row revisionflag="changed">
@ -3147,7 +3147,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</listitem>
<listitem>
<para>IBM EXTENDED PRECISION form provides the same range as double
precision (about 10<superscript>-308</superscript> to
precision (about 10<superscript>&#8211;308</superscript> to
10<superscript>308</superscript>) but more precision (a variable amount,
about 31 decimal digits or more).</para>
</listitem>
@ -3328,9 +3328,9 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
union where the number of bits in the bit field is specified.</para>
<para>In
<xref linkend="dbdoclet.50655240_47126" />, a signed range goes from
-2<superscript>w - 1</superscript> to
2<superscript>w - 1</superscript>- 1 and an unsigned range goes from 0 to
2<superscript>w</superscript>- 1.</para>
&#8211;2<superscript>w &#8211; 1</superscript> to
2<superscript>w &#8211; 1</superscript> &#8211; 1 and an unsigned range goes from 0 to
2<superscript>w</superscript> &#8211; 1.</para>

<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_47126">
<title>Bit Field Types</title>
@ -3365,7 +3365,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>signed char</para>
</entry>
<entry morerows="1">
<para>1 - 8</para>
<para>1&#8211;8</para>
</entry>
</row>
<row>
@ -3378,7 +3378,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>signed short</para>
</entry>
<entry morerows="1">
<para>1 - 16</para>
<para>1&#8211;16</para>
</entry>
</row>
<row>
@ -3391,7 +3391,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>signed int</para>
</entry>
<entry morerows="2">
<para>1 - 32</para>
<para>1&#8211;32</para>
</entry>
</row>
<row>
@ -3409,7 +3409,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>signed long</para>
</entry>
<entry morerows="3">
<para>1 - 64</para>
<para>1&#8211;64</para>
</entry>
</row>
<row>
@ -3432,7 +3432,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<para>signed __int128</para>
</entry>
<entry morerows="1">
<para>1 - 128</para>
<para>1&#8211;128</para>
</entry>
</row>
<row>
@ -4235,7 +4235,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>r3 - r10</para>
<para>r3&#8211;r10</para>
</entry>
<entry>
<para>Volatile</para>
@ -4284,7 +4284,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>r14 - r31<footnote>
<para>r14&#8211;r31<footnote>
<para>If a function needs a frame pointer, assigning r31 to
the role of the frame pointer is recommended.</para>
</footnote></para>
@ -4343,7 +4343,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>CR0 - CR1</para>
<para>CR0&#8211;CR1</para>
</entry>
<entry>
<para>Volatile</para>
@ -4354,7 +4354,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>CR2 - CR4</para>
<para>CR2&#8211;CR4</para>
</entry>
<entry>
<para>Nonvolatile</para>
@ -4365,7 +4365,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>CR5 - CR7</para>
<para>CR5&#8211;CR7</para>
</entry>
<entry>
<para>Volatile</para>
@ -4559,7 +4559,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
number, to refer to floating-point register N.</para>
<para>For the purpose of function calls, the right half of VSX
registers, corresponding to the classic floating-point registers (that
is, vsr0 - vsr31), is volatile.</para>
is, vsr0&#8211;vsr31), is volatile.</para>

<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_83567">
<title>Floating-Point Register Roles for Binary Floating-Point
@ -4601,7 +4601,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>f1 - f13</para>
<para>f1&#8211;f13</para>
</entry>
<entry>
<para>Volatile</para>
@ -4613,7 +4613,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>f14 - f31</para>
<para>f14&#8211;f31</para>
</entry>
<entry>
<para>Nonvolatile</para>
@ -4755,7 +4755,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<tbody>
<row>
<entry>
<para>v0 - v1</para>
<para>v0&#8211;v1</para>
</entry>
<entry>
<para>Volatile</para>
@ -4766,7 +4766,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>v2 - v13</para>
<para>v2&#8211;v13</para>
</entry>
<entry>
<para>Volatile</para>
@ -4777,7 +4777,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>v14 - v19</para>
<para>v14&#8211;v19</para>
</entry>
<entry>
<para>Volatile</para>
@ -4788,7 +4788,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
</row>
<row>
<entry>
<para>v20 - v31</para>
<para>v20&#8211;v31</para>
</entry>
<entry>
<para>Nonvolatile</para>
@ -5198,7 +5198,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
general-purpose register save and restore functions are to be used, the
general-purpose registers shall be saved in a contiguous range.
General-purpose register rN is saved in the doubleword located 8 x
(32-N) bytes before the back-chain word of the previous frame, as shown
(32 &#8211; N) bytes before the back-chain word of the previous frame, as shown
in
<xref linkend="dbdoclet.50655240_97610" />.</para>
<para>The General-Purpose Register Save Area is always doubleword
@ -5215,7 +5215,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
saved in arbitrary locations in the stack frame. If the system vector
register save and restore functions are to be used, the vector
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 &#8211; N) bytes before the
General-Purpose Register Save Areas plus alignment padding, as shown in
<xref linkend="dbdoclet.50655240_97610" />.</para>
@ -5299,7 +5299,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
to the memory location of the next parameter. Therefore, regardless of
type, variable arguments must always be in the same location so that
they can be found at runtime. The first 8 doublewords are located in
general registers r3 - r10. Any additional doublewords are located in
general registers r3&#8211;r10. Any additional doublewords are located in
the stack Parameter Save Area. Alignment requirements such as those for
vector types may require the va_list pointer to first be aligned before
accessing a value.</para>
@ -5469,25 +5469,24 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<itemizedlist>
<listitem>
<para>Up to eight arguments can be passed in general-purpose
registers r3 - r10.</para>
registers r3&#8211;r10.</para>
</listitem>
<listitem>
<para>Up to thirteen qualified floating-point arguments can be passed
in floating-point registers f1 - f13 or up to twelve in vector
registers v2 - v13.</para>
in floating-point registers f1&#8211;f13 or up to twelve in vector
registers v2&#8211;v13.</para>
</listitem>
<listitem>
<para>Up to thirteen single-precision or double-precision decimal
floating-point arguments can be passed in floating-point registers f1
- f13.</para>
floating-point arguments can be passed in floating-point registers
f1&#8211;f13.</para>
</listitem>
<listitem>
<para>Up to six quad-precision decimal floating-point arguments can
be passed in even-odd floating-point register pairs f2 - f13.</para>
be passed in even-odd floating-point register pairs f2&#8211;f13.</para>
</listitem>
<listitem>
<para>Up to 12 qualified vector arguments can be passed in v2 -
v13.</para>
<para>Up to 12 qualified vector arguments can be passed in v2&#8211;v13.</para>
</listitem>
</itemizedlist>
<para>A qualified floating-point argument corresponds to:</para>
@ -5595,7 +5594,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
<bridgehead>IEEE BINARY 128 EXTENDED PRECISION</bridgehead>
<itemizedlist mark="none">
<listitem>
<para>Up to 12 quad-precision parameters can be passed in v2 - v13.
<para>Up to 12 quad-precision parameters can be passed in v2&#8211;v13.
For the purpose of determining qualified floating-point and vector
arguments, an IEEE 128b type shall be considered a "like" vector
type, and a complex _Float128 shall be treated as two individual
@ -5620,7 +5619,7 @@ xml:id="dbdoclet.50655240_pgfId-1156194">
frame. When this happens, only the minimum storage needed to contain all
arguments (including allocating space for parameters passed in registers)
needs to be allocated in the stack frame.</para>
<para>General-purpose registers r3 - r10 correspond to the allocation of
<para>General-purpose registers r3&#8211;r10 correspond to the allocation of
parameters to the first 8 doublewords of the Parameter Save Areah.
Specifically, this requires a suitable number of general-purpose
registers to be skipped to correspond to parameters passed in
@ -5695,7 +5694,7 @@ unnamed parameter:
goto mem_argument
size = size_in_DW(argument)
reg_size = min(size, 11-gr)
reg_size = min(size, 11 &#8211; gr)
pass (GPR, gr, first_n_DW (argument, reg_size));
if remaining_members
@ -5720,7 +5719,7 @@ aggregate:
goto use_vrs;
n_fregs = n_fregs_for_type(member_type(argument,0))
agg_size = members(argument) * n_fregs
reg_size = min(agg_size, 15-fr)
reg_size = min(agg_size, 15 &#8211; fr)
pass(FPR,fr,first_n_DW(argument,reg_size)
fr += reg_size;
gr += size_in_DW (first_n_DW(argument,reg_size))
@ -5734,7 +5733,7 @@ aggregate:
if (homogeneous(argument,vector) and members(argument) &lt;= 8)
use_vrs:
agg_size = members(argument)
reg_size = min(agg_size, 14-vr)
reg_size = min(agg_size, 14 &#8211; vr)
if (gr&amp;1 = 0) // align vector in memory
gr++
pass(VR,vr,first_n_elements(argument,reg_size);
@ -5752,7 +5751,7 @@ aggregate:
size = size_in_DW(argument)

gpr_struct:
reg_size = min(size, 11-gr)
reg_size = min(size, 11 &#8211; gr)
pass (GPR, gr, first_n_DW (argument, reg_size));
gr += size_in_DW (first_n_DW (argument, reg_size))
@ -5855,15 +5854,15 @@ double ff, gg, hh;
x = func(c, ff, d, ld, s, gg, t, e, hh);

Parameter Register Offset in parameter save area
c r3 0-7 (not stored in parameter save area)
ff f1 8-15 (not stored)
d r5 16-23 (not stored)
ld f2,f3 24-39 (not stored)
s r8,r9 40-55 (not stored)
gg f4 56-63 (not stored)
t (none) 64-79 (stored in parameter save area)
e (none) 80-87 (stored)
hh f5 88-95 (not stored)</programlisting>
c r3 0&#8211;7 (not stored in parameter save area)
ff f1 8&#8211;15 (not stored)
d r5 16&#8211;23 (not stored)
ld f2,f3 24&#8211;39 (not stored)
s r8,r9 40&#8211;55 (not stored)
gg f4 56&#8211;63 (not stored)
t (none) 64&#8211;79 (stored in parameter save area)
e (none) 80&#8211;87 (stored)
hh f5 88&#8211;95 (not stored)</programlisting>
</figure>
<note>
<para>If a prototype is not in scope:</para>
@ -6505,7 +6504,7 @@ or r0, r0, r1</programlisting>
functions:</para>
<itemizedlist>
<listitem>
<para>Restore all registers and liminted-acces bits that wee saved
<para>Restore all registers and limited-access bits that we saved
by the function's prologue.</para>
</listitem>
<listitem>
@ -6631,13 +6630,13 @@ or r0, r0, r1</programlisting>
<section xml:id="dbdoclet.50655240_41483">
<title>GPR Save and Restore Functions</title>
<para>Each _savegpr0_<emphasis>N</emphasis> routine saves the general registers from
r<emphasis>N</emphasis>- r31, inclusive. Each routine also saves the LR.
r<emphasis>N</emphasis>&#8211;r31, inclusive. Each routine also saves the LR.
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
of the general register save area, and r0 must contain the value of the
LR on function entry.</para>
<para>The _restgpr0_<emphasis>N</emphasis> routines restore the general registers from
r<emphasis>N</emphasis>- r31, and then return to their caller's caller.
r<emphasis>N</emphasis>&#8211;r31, and then return to their caller's caller.
The caller's stack frame must already have been deallocated. When the
routine is called, r1 contains the address of the word immediately
beyond the end of the general register save area, and the LR must
@ -6691,11 +6690,11 @@ or r0, r0, r1</programlisting>
ld r31,-8(r1)
mtlr r0
blr</programlisting>
<para>Each _savegpr1_N routine saves the general registers from rN -
r31, inclusive. When the routine is called, r12 contains the address of
<para>Each _savegpr1_N routine saves the general registers from
rN&#8211;r31, inclusive. When the routine is called, r12 contains the address of
the word just beyond the end of the general register save area.</para>
<para>The _restgpr1_N routines restore the general registers from rN -
r31. When the routine is called, r12 contains the address of the word
<para>The _restgpr1_N routines restore the general registers from
rN&#8211;r31. When the routine is called, r12 contains the address of the word
just beyond the end of the general register save area, superseding the
normal use of r12 on a call.</para>
<para>A sample implementation of _savegpr1_N and _restgpr1_N
@ -6743,13 +6742,13 @@ or r0, r0, r1</programlisting>
<section xml:id="dbdoclet.50655240_56788">
<title>FPR Save and Restore Functions</title>
<para>Each _savefpr_<emphasis>N</emphasis> routine saves the floating-point registers from
f<emphasis>N</emphasis>- f31, inclusive. When the routine is called, r1
f<emphasis>N</emphasis>&#8211;f31, inclusive. When the routine is called, r1
contains the address of the word immediately beyond the end of the
Floating-Point Register Save Area, which means that the stack frame
must not have been allocated yet. Register r0 must contain the value of
the LR on function entry.</para>
<para>The _restfpr_<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>&#8211;f31, inclusive. When the routine is called, r1
contains the address of the word immediately beyond the end of the
Floating-Point Register Save Area, which means that the stack frame
must not have been allocated yet.</para>
@ -6810,7 +6809,7 @@ or r0, r0, r1</programlisting>
</section>
<section xml:id="dbdoclet.50655240_96790">
<title>Vector Save and Restore Functions</title>
<para>Each _savevr_M routine saves the vector registers from vM - v31
<para>Each _savevr_M routine saves the vector registers from vM&#8211;v31
inclusive.
<anchor xml:id="dbdoclet.50655240_page74" xreflabel="" />
<anchor xml:id="dbdoclet.50655240_page73" xreflabel="" />
@ -6821,7 +6820,7 @@ or r0, r0, r1</programlisting>
this function, r0 contains the address of the word just beyond the end
of the Vector Register Save Area. The routines leave r0 undisturbed.
They modify the value of r12.</para>
<para>The _restvr_M routines restore the vector registers from vM - v31
<para>The _restvr_M routines restore the vector registers from vM&#8211;v31
inclusive. On entry to this function, r0 contains the address of the
word just beyond the end of the Vector Register Save Area. The routines
leave r0 undisturbed. They modify the value of r12. The following code
@ -8080,9 +8079,9 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
described in <xref linkend="dbdoclet.50655240_94513" />.</para>
<para>All instances of the Power Architecture use the mapping shown in
<xref linkend="dbdoclet.50655240_94513" /> for encoding registers into
DWARF. DWARF register numbers 32 - 63 and 77 - 108 are also used to
indicate the location of variables in VSX registers vsr0 - vsr31 and vsr32
- vsr63, respectively, in DWARF debug information.</para>
DWARF. DWARF register numbers 32&#8211;63 and 77&#8211;108 are also used to
indicate the location of variables in VSX registers vsr0&#8211;vsr31 and
vsr32&#8211;vsr63, respectively, in DWARF debug information.</para>

<table frame="all" pgwide="1" xml:id="dbdoclet.50655240_94513">
<title>Mappings of Common Registers</title>
@ -8121,10 +8120,10 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
<para>Reg</para>
</entry>
<entry>
<para>0 - 31</para>
<para>0&#8211;31</para>
</entry>
<entry>
<para>r0 - r31</para>
<para>r0&#8211;r31</para>
</entry>
<entry>
<para>8</para>
@ -8135,10 +8134,10 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
<para>Reg</para>
</entry>
<entry>
<para>32 - 63</para>
<para>32&#8211;63</para>
</entry>
<entry>
<para>f0 - f31</para>
<para>f0&#8211;f31</para>
</entry>
<entry>
<para>8</para>
@ -8205,10 +8204,10 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
<para>Reg</para>
</entry>
<entry>
<para>68 - 75</para>
<para>68&#8211;75</para>
</entry>
<entry>
<para>cr0 - cr7</para>
<para>cr0&#8211;cr7</para>
</entry>
<entry>
<para>0.5<footnote>
@ -8237,10 +8236,10 @@ addi r3,r1,p ; R3 = new data area following parameter save area.</pro
<para>Reg</para>
</entry>
<entry>
<para>77 - 108</para>
<para>77&#8211;108</para>
</entry>
<entry>
<para>vr0 - vr31</para>
<para>vr0&#8211;vr31</para>
</entry>
<entry>
<para>16</para>

@ -454,7 +454,7 @@ my_func:
<para>Functions called via symbols with an st_other value of 0 may be
called without a valid TOC pointer in r2. Symbols of functions that
require a local entry with a valid TOC pointer should generate a symbol
with an st_other field value of 2 - 6 and both local and global entry
with an st_other field value of 2&#8211;6 and both local and global entry
points, even if the global entry point will not be used. (In such a case,
the instructions of the global entry setup sequence may optionally be
initialized with TRAP instructions.)</para>
@ -716,7 +716,7 @@ my_func:
</tgroup>
</informaltable>
<para>In the following figure, word30 specifies a 30-bit field taking up
bits 0 - 29 of a word and maintaining 4-byte alignment unless otherwise
bits 0&#8211;29 of a word and maintaining 4-byte alignment unless otherwise
indicated.</para>
<para> </para>
<informaltable frame="all" rowsep="0" colsep="0">
@ -965,7 +965,7 @@ my_func:
</tgroup>
</informaltable>
<para>In the following figure, low24 specifies a 24-bit field taking up
bits 6 - 29 of a word and maintaining 4-byte alignment. The other bits
bits 6&#8211;29 of a word and maintaining 4-byte alignment. The other bits
remain unchanged. A call or unconditional branch instruction is an
example of this field.</para>
<para> </para>
@ -1517,7 +1517,7 @@ my_func:
</tgroup>
</informaltable>
<para>In the following figure, low14 specifies a 14-bit field taking up
bits 16 - 29 and possibly bit 10 (the branch prediction bit) of a word
bits 16&#8211;29 and possibly bit 10 (the branch prediction bit) of a word
and maintaining 4-byte alignment. The other bits remain unchanged. A
conditional branch instruction is an example usage.</para>
<para> </para>
@ -2202,7 +2202,7 @@ my_func:
</row>
<row>
<entry>
<para>-</para>
<para>&#8211;</para>
</entry>
<entry>
<para>Denotes 64-bit modulus subtraction.</para>
@ -2231,7 +2231,7 @@ my_func:
<para>#hi(value)</para>
</entry>
<entry>
<para>Denotes bits 16 - 63 of the indicated value. That
<para>Denotes bits 16&#8211;63 of the indicated value. That
is:</para>
<para>#hi(x) = x &gt;&gt; 16</para>
</entry>
@ -2241,7 +2241,7 @@ my_func:
<para>#ha(value)</para>
</entry>
<entry>
<para>Denotes the high adjusted value: bits 16 - 63 of the
<para>Denotes the high adjusted value: bits 16&#8211;63 of the
indicated value, compensating for #lo( ) being treated as a
signed number. That is:</para>
<para>#ha(x) = (x + 0x8000) &gt;&gt; 16</para>
@ -2282,7 +2282,7 @@ my_func:
</entry>
<entry>
<para>Represents the base address of the TCB.</para>
<para>tcb = (tp - (TLS_TP_OFFSET + TCB_LENGTH))</para>
<para>tcb = (tp &#8211; (TLS_TP_OFFSET + TCB_LENGTH))</para>
</entry>
</row>
<row>
@ -2396,8 +2396,8 @@ my_func:
fit in the allocated bits.</para>
</listitem>
<listitem>
<para>Relocations that refer to half16ds (56 - 66, 87 - 88, 91 - 92,
95 - 96, and 101 - 102) are to be used to direct the linker to look
<para>Relocations that refer to half16ds (56&#8211;66, 87&#8211;88, 91&#8211;92,
95&#8211;96, and 101&#8211;102) are to be used to direct the linker to look
at the underlying instruction and treat the field as a DS or DQ
field. ABI-compliant tools should give an error for attempts to
relocate an address to a value that is not divisible by 4.</para>
@ -2571,7 +2571,7 @@ my_func:
<para>low24*</para>
</entry>
<entry>
<para>(S + A - P) &gt;&gt; 2</para>
<para>(S + A &#8211; P) &gt;&gt; 2</para>
</entry>
</row>
<row>
@ -2585,7 +2585,7 @@ my_func:
<para>low14*</para>
</entry>
<entry>
<para>(S + A - P) &gt;&gt; 2</para>
<para>(S + A &#8211; P) &gt;&gt; 2</para>
</entry>
</row>
<row>
@ -2741,7 +2741,7 @@ my_func:
<para>word32*</para>
</entry>
<entry>
<para>S + A - P</para>
<para>S + A &#8211; P</para>
</entry>
</row>
<row>
@ -2769,7 +2769,7 @@ my_func:
<para>word32*</para>
</entry>
<entry>
<para>L - P</para>
<para>L &#8211; P</para>
</entry>
</row>
<row>
@ -2881,7 +2881,7 @@ my_func:
<para>word30</para>
</entry>
<entry>
<para>(S + A - P) &gt;&gt; 2</para>
<para>(S + A &#8211; P) &gt;&gt; 2</para>
</entry>
</row>
<row>
@ -2979,7 +2979,7 @@ my_func:
<para>doubleword64</para>
</entry>
<entry>
<para>S + A - P</para>
<para>S + A &#8211; P</para>
</entry>
</row>
<row>
@ -3007,7 +3007,7 @@ my_func:
<para>doubleword64</para>
</entry>
<entry>
<para>L - P</para>
<para>L &#8211; P</para>
</entry>
</row>
<row>
@ -3021,7 +3021,7 @@ my_func:
<para>half16*</para>
</entry>
<entry>
<para>S + A - .TOC.</para>
<para>S + A &#8211; .TOC.</para>
</entry>
</row>
<row>
@ -3035,7 +3035,7 @@ my_func:
<para>half16</para>
</entry>
<entry>
<para>#lo(S + A - .TOC.)</para>
<para>#lo(S + A &#8211; .TOC.)</para>
</entry>
</row>
<row>
@ -3049,7 +3049,7 @@ my_func:
<para>half16*</para>
</entry>
<entry>
<para>#hi(S + A - .TOC.)</para>
<para>#hi(S + A &#8211; .TOC.)</para>
</entry>
</row>
<row>
@ -3063,7 +3063,7 @@ my_func:
<para>half16*</para>
</entry>
<entry>
<para>#ha(S + A - .TOC.)</para>
<para>#ha(S + A &#8211; .TOC.)</para>
</entry>
</row>
<row>
@ -3245,7 +3245,7 @@ my_func:
<para>half16ds*</para>
</entry>
<entry>
<para>(S + A - .TOC.) &gt;&gt; 2</para>
<para>(S + A &#8211; .TOC.) &gt;&gt; 2</para>
</entry>
</row>
<row>
@ -3259,7 +3259,7 @@ my_func:
<para>half16ds</para>
</entry>
<entry>
<para>#lo(S + A - .TOC.) &gt;&gt; 2</para>
<para>#lo(S + A &#8211; .TOC.) &gt;&gt; 2</para>
</entry>
</row>
<row>
@ -3987,7 +3987,7 @@ my_func:
<para>low24*</para>
</entry>
<entry>
<para>(S + A - P) &gt;&gt; 2</para>
<para>(S + A &#8211; P) &gt;&gt; 2</para>
</entry>
</row>
<row>
@ -4031,7 +4031,7 @@ my_func:
<para>half16*</para>
</entry>
<entry>
<para>S + A - P</para>
<para>S + A &#8211; P</para>
</entry>
</row>
<row>
@ -4045,7 +4045,7 @@ my_func:
<para>half16</para>
</entry>
<entry>
<para>#lo(S + A - P)</para>
<para>#lo(S + A &#8211; P)</para>
</entry>
</row>
<row>
@ -4059,7 +4059,7 @@ my_func:
<para>half16*</para>
</entry>
<entry>
<para>#hi(S + A - P)</para>
<para>#hi(S + A &#8211; P)</para>
</entry>
</row>
<row>
@ -4073,7 +4073,7 @@ my_func:
<para>half16*</para>
</entry>
<entry>
<para>#ha(S + A - P)</para>
<para>#ha(S + A &#8211; P)</para>
</entry>
</row>
<row>
@ -4212,11 +4212,11 @@ ld r3,x@got@l(r3)</programlisting>
the high adjusted, high, and low parts of the GOT offset. (For an
explanation of the meaning of “high adjusted,” see
<xref linkend="dbdoclet.50655241_18894" />). SYMBOL@got@ha corresponds to
bits 32 - 63 of the offset within the global offset table with adjustment
bits 32&#8211;63 of the offset within the global offset table with adjustment
for the sign extension of the low-order offset bits. SYMBOL@got@l
corresponds to the 16 low-order bits of the offset within the global
offset table.</para>
<para>The syntax SYMBOL@toc refers to the value (SYMBOL - .TOC.), where
<para>The syntax SYMBOL@toc refers to the value (SYMBOL &#8211; .TOC.), where
.TOC. represents the TOC base for the current object file. This provides
the address of the variable whose name is SYMBOL as an offset from the
TOC base.</para>
@ -4433,8 +4433,8 @@ addi r4, r4, lower</programlisting>
the TLS blocks for these are created consecutively and immediately follow
the TCB. The offset of the TLS block of an initially available module
from the TCB remains fixed after program start.</para>
<para>The tlsoffset(m) values for a module with index m, where m ranges 1
- M, M being the total number of modules, are computed as follows:</para>
<para>The tlsoffset(m) values for a module with index m, where m ranges
from 1&#8211;M, M being the total number of modules, are computed as follows:</para>
<programlisting>tlsoffset(1) = round(16, align(1))
tlsoffset(m + 1) = round(tlsoffset(m) + tlssize(m), align(m + 1))</programlisting>
<itemizedlist>
@ -4447,8 +4447,8 @@ tlsoffset(m + 1) = round(tlsoffset(m) + tlssize(m), align(m + 1))</programlistin
<itemizedlist>
<listitem>
<para>The function ceiling( ) returns the smallest integer greater
than or equal to its argument, where n is an integer satisfying: n -
1 &lt; x ≤ n:</para>
than or equal to its argument, where n is an integer satisfying:
n &#8211; 1 &lt; x ≤ n:</para>
</listitem>
</itemizedlist>
<programlisting>ceiling(x) = n</programlisting>
@ -4467,7 +4467,8 @@ tlsoffset(m + 1) = round(tlsoffset(m) + tlssize(m), align(m + 1))</programlistin
extern void *__tls_get_addr (tls_index *ti);</programlisting>
<para>The thread pointer (TP) is held in r13 and is used to access the
TCB. The TP is initialized to point 0x7000 bytes past the end of the TCB.
The TP offset allows for efficient addressing of the TCB and up to 4 KB -
The TP offset allows for efficient addressing of the TCB and up to 4 KB
&#8211;
8 B of other thread library information (placed before the TCB).</para>
<para>
<xref linkend="dbdoclet.50655241_11666" /> shows the region of memory
@ -6861,8 +6862,8 @@ nop</programlisting>
</row>
<row>
<entry nameend="c2" namest="c1">
<para>The codes 0xf - 0xfa are reserved. The codes
0xfb - 0xff are reserved for IBM.</para></entry>
<para>The codes 0xf&#8211;0xfa are reserved. The codes
0xfb&#8211;0xff are reserved for IBM.</para></entry>
</row>
</tbody>
</tgroup>

@ -42,10 +42,10 @@ xml:id="dbdoclet.50655244_pgfId-1095944">
vector elements at a time in 128-bit registers. On a big-endian POWER
platform, vector elements are loaded from memory into a register so that
the 0th element occupies the high-order bits of the register, and the
(N-1)th element occupies the low-order bits of the register. This is
(N &#8211; 1)th element occupies the low-order bits of the register. This is
referred to as big-endian element order. On a little-endian POWER platform,
vector elements are loaded from memory such that the 0th element occupies
the low-order bits of the register, and the (N-1)th element occupies the
the low-order bits of the register, and the (N &#8211; 1)th element occupies the
high-order bits. This is referred to as little-endian element order.</para>
<section xml:id="dbdoclet.50655244_39970">
<title>Vector Data Types</title>
@ -102,7 +102,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
pointers; these operators are also valid for pointers to vector
types.</para>
<para>The traditional C/C++ operators are defined on vector types with “do
all” semantics for unary and binary +, unary and binary -, binary *, binary
all” semantics for unary and binary +, unary and binary &#8211;, binary *, binary
%, and binary / as well as the unary and binary logical and comparison
operators.</para>
<para>For unary operators, the specified operation is performed on the
@ -497,7 +497,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
<para>vspltb, vsplth, vspltw</para>
</entry>
<entry>
<para>Subtract the element number from N-1 for LE.</para>
<para>Subtract the element number from N &#8211; 1 for LE.</para>
</entry>
</row>
<row>
@ -557,7 +557,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
</entry>
<entry>
<para>For LE, the bytes are loaded left justified then shifted
right 16-cnt bytes or rotated left cnt bytes. Let “cnt” be the
right 16 &#8211; cnt bytes or rotated left cnt bytes. Let “cnt” be the
number of bytes specified to be loaded by vec_xl_len_r.</para>
</entry>
</row>
@ -569,7 +569,7 @@ register vector double vd = vec_splats(*double_ptr);</programlisting>
<para> </para>
</entry>
<entry>
<para>For LE, the bytes are shifted left 16-cnt bytes or rotated
<para>For LE, the bytes are shifted left 16 &#8211; cnt bytes or rotated
right cnt bytes so they are left justified to be stored. Let
“cnt” be the number of bytes specified to be stored by
vec_xst_len_r.</para>

Loading…
Cancel
Save