|
|
|
@ -13210,9 +13210,16 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -13210,9 +13210,16 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
single-precision IEEE numbers.</para> |
|
|
|
|
<para><emphasis role="bold">Endian considerations:</emphasis> |
|
|
|
|
The element numbering within a register is left-to-right for big-endian |
|
|
|
|
targets, and right-to-left for little-endian targets. Thus the |
|
|
|
|
permute control vector at address <emphasis role="bold">pcv</emphasis> |
|
|
|
|
in the example implementation will differ for big- and little-endian. |
|
|
|
|
targets, and right-to-left for little-endian targets. |
|
|
|
|
</para> |
|
|
|
|
<para><emphasis role="bold">Notes:</emphasis> The example |
|
|
|
|
implementation assumes that the vperm instruction is used for |
|
|
|
|
big-endian, and the vpermr instruction is used for |
|
|
|
|
little-endian. The permute control vector for the vperm or |
|
|
|
|
vpermr instruction is in a memory location identified by pcv. |
|
|
|
|
The value located at pcv is identical in natural element order |
|
|
|
|
for big- and little-endian: { 15, 14, 0, 0, 13, 12, 0, 0, 11, |
|
|
|
|
10, 0, 0, 9, 8, 0, 0 }. |
|
|
|
|
</para> |
|
|
|
|
|
|
|
|
|
<indexterm> |
|
|
|
@ -13223,6 +13230,10 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -13223,6 +13230,10 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
<primary>vperm</primary> |
|
|
|
|
<secondary>vec_extract_fp32_from_shorth</secondary> |
|
|
|
|
</indexterm> |
|
|
|
|
<indexterm> |
|
|
|
|
<primary>vpermr</primary> |
|
|
|
|
<secondary>vec_extract_fp32_from_shorth</secondary> |
|
|
|
|
</indexterm> |
|
|
|
|
<indexterm> |
|
|
|
|
<primary>xvcvhpsp</primary> |
|
|
|
|
<secondary>vec_extract_fp32_from_shorth</secondary> |
|
|
|
@ -13266,7 +13277,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -13266,7 +13277,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
<entry> |
|
|
|
|
<programlisting> |
|
|
|
|
lxv t,0(pcv) |
|
|
|
|
vperm u,a,a,t |
|
|
|
|
vperm[r] u,a,a,t |
|
|
|
|
xvcvhpsp r,u |
|
|
|
|
</programlisting> |
|
|
|
|
</entry> |
|
|
|
@ -13300,9 +13311,16 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -13300,9 +13311,16 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
single-precision IEEE numbers.</para> |
|
|
|
|
<para><emphasis role="bold">Endian considerations:</emphasis> |
|
|
|
|
The element numbering within a register is left-to-right for big-endian |
|
|
|
|
targets, and right-to-left for little-endian targets. Thus the |
|
|
|
|
permute control vector at address <emphasis role="bold">pcv</emphasis> |
|
|
|
|
in the example implementation will differ for big- and little-endian. |
|
|
|
|
targets, and right-to-left for little-endian targets. |
|
|
|
|
</para> |
|
|
|
|
<para><emphasis role="bold">Notes:</emphasis> The example |
|
|
|
|
implementation assumes that the vperm instruction is used for |
|
|
|
|
big-endian, and the vpermr instruction is used for |
|
|
|
|
little-endian. The permute control vector for the vperm or |
|
|
|
|
vpermr instruction is in a memory location identified by pcv. |
|
|
|
|
The value located at pcv is identical in natural element order |
|
|
|
|
for big- and little-endian: { 7, 6, 0, 0, 5, 4, 0, 0, 3, 2, 0, |
|
|
|
|
0, 1, 0, 0, 0 }. |
|
|
|
|
</para> |
|
|
|
|
|
|
|
|
|
<indexterm> |
|
|
|
@ -13313,6 +13331,10 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -13313,6 +13331,10 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
<primary>vperm</primary> |
|
|
|
|
<secondary>vec_extract_fp32_from_shortl</secondary> |
|
|
|
|
</indexterm> |
|
|
|
|
<indexterm> |
|
|
|
|
<primary>vpermr</primary> |
|
|
|
|
<secondary>vec_extract_fp32_from_shortl</secondary> |
|
|
|
|
</indexterm> |
|
|
|
|
<indexterm> |
|
|
|
|
<primary>xvcvhpsp</primary> |
|
|
|
|
<secondary>vec_extract_fp32_from_shortl</secondary> |
|
|
|
@ -13356,7 +13378,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -13356,7 +13378,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
<entry> |
|
|
|
|
<programlisting> |
|
|
|
|
lxv t,0(pcv) |
|
|
|
|
vperm u,a,a,t |
|
|
|
|
vperm[r] u,a,a,t |
|
|
|
|
xvcvhpsp r,u |
|
|
|
|
</programlisting> |
|
|
|
|
</entry> |
|
|
|
@ -25636,8 +25658,81 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
@@ -25636,8 +25658,81 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.vec-ref">
|
|
|
|
|
<para><emphasis role="bold">Notes:</emphasis> The example |
|
|
|
|
implementations assume that the permute control vector for the |
|
|
|
|
vperm or vpermr instruction is in a register identified by pcv. |
|
|
|
|
The value of pcv differs based on the element size. |
|
|
|
|
The value of pcv differs based on the element size, and is the |
|
|
|
|
same (in natural element order) for big- and little-endian, |
|
|
|
|
assuming the use of vperm for big-endian and vpermr for |
|
|
|
|
little-endian. |
|
|
|
|
</para> |
|
|
|
|
<informaltable> |
|
|
|
|
<tgroup cols="2"> |
|
|
|
|
<colspec colname="c0" colwidth="10*" /> |
|
|
|
|
<colspec colname="c1" colwidth="10*" /> |
|
|
|
|
<thead> |
|
|
|
|
<row> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<emphasis role="bold">Vector types</emphasis> |
|
|
|
|
</entry> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<emphasis role="bold">Permute control vector</emphasis> |
|
|
|
|
</entry> |
|
|
|
|
</row> |
|
|
|
|
</thead> |
|
|
|
|
<tbody> |
|
|
|
|
<row> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
vector char |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
{ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, |
|
|
|
|
0 } |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
</row> |
|
|
|
|
<row> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
vector short |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
{ 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, |
|
|
|
|
1 } |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
</row> |
|
|
|
|
<row> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
vector int, vector float |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
{ 12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, |
|
|
|
|
3 } |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
</row> |
|
|
|
|
<row> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
vector long long, vector double |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
<entry align="center"> |
|
|
|
|
<para> |
|
|
|
|
{ 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, |
|
|
|
|
7 } |
|
|
|
|
</para> |
|
|
|
|
</entry> |
|
|
|
|
</row> |
|
|
|
|
</tbody> |
|
|
|
|
</tgroup> |
|
|
|
|
</informaltable> |
|
|
|
|
|
|
|
|
|
<indexterm> |
|
|
|
|
<primary>vperm</primary> |
|
|
|
|