Files
archived-ballistic/spec/arm64_xml/ucvtf_z_p_z.xml
Ronald Caesar 26a677f8b4 decoder: Add ARM specification docs
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-12 18:11:36 -04:00

629 lines
32 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" encoding="UTF-8" href="iform.xsl" version="1.0"?>
<!DOCTYPE instructionsection PUBLIC "-//ARM//DTD instructionsection //EN" "iform-p.dtd">
<!-- Copyright (c) 2010-2022 Arm Limited or its affiliates. All rights reserved. -->
<!-- This document is Non-Confidential. This document may only be used and distributed in accordance with the terms of the agreement entered into by Arm and the party that Arm delivered this document to. -->
<instructionsection id="ucvtf_z_p_z" title="UCVTF" type="instruction">
<docvars>
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<heading>UCVTF</heading>
<desc>
<brief>Unsigned integer convert to floating-point (predicated)</brief>
<description>
<para>Convert to floating-point from the unsigned integer in each active element of the source vector, and place the results in the corresponding elements of the destination vector. Inactive elements in the destination vector register remain unmodified.</para>
<para>If the input and result types have a different size the smaller type is held unpacked in the least significant bits of elements of the larger size. When the input is the smaller type the upper bits of each source element are ignored. When the result is the smaller type the results are zero-extended to fill each destination element.</para>
</description>
<status>Green</status>
<predicated>True</predicated>
<takes_movprfx>True</takes_movprfx>
<takes_pred_movprfx>True</takes_pred_movprfx>
</desc>
<alias_list howmany="0"></alias_list>
<classes>
<classesintro count="7">
<txt>It has encodings from 7 classes:</txt>
<a href="#iclass_16_to_half">16-bit to half-precision</a>
<txt>, </txt>
<a href="#iclass_32_to_half">32-bit to half-precision</a>
<txt>, </txt>
<a href="#iclass_32_to_single">32-bit to single-precision</a>
<txt>, </txt>
<a href="#iclass_32_to_double">32-bit to double-precision</a>
<txt>, </txt>
<a href="#iclass_64_to_half">64-bit to half-precision</a>
<txt>, </txt>
<a href="#iclass_64_to_single">64-bit to single-precision</a>
<txt> and </txt>
<a href="#iclass_64_to_double">64-bit to double-precision</a>
</classesintro>
<iclass name="16-bit to half-precision" oneof="7" id="iclass_16_to_half" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="16-to-half" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-H2FP16" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>0</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>0</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_h2fp16" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="16-to-half" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.H, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.H</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-H2FP16" mylink="UCVTF-Z.P.Z-H2FP16" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 16;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 16;
constant integer d_esize = 16;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
<iclass name="32-bit to half-precision" oneof="7" id="iclass_32_to_half" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="32-to-half" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-W2FP16" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>0</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>0</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_w2fp16" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="32-to-half" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.H, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.S</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-W2FP16" mylink="UCVTF-Z.P.Z-W2FP16" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 32;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 32;
constant integer d_esize = 16;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
<iclass name="32-bit to single-precision" oneof="7" id="iclass_32_to_single" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="32-to-single" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-W2S" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>0</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>0</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_w2s" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="32-to-single" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.S, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.S</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-W2S" mylink="UCVTF-Z.P.Z-W2S" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 32;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 32;
constant integer d_esize = 32;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
<iclass name="32-bit to double-precision" oneof="7" id="iclass_32_to_double" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="32-to-double" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-W2D" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>0</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>0</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_w2d" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="32-to-double" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.D, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.S</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-W2D" mylink="UCVTF-Z.P.Z-W2D" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 64;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 32;
constant integer d_esize = 64;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
<iclass name="64-bit to half-precision" oneof="7" id="iclass_64_to_half" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="64-to-half" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-X2FP16" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>0</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_x2fp16" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="64-to-half" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.H, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.D</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-X2FP16" mylink="UCVTF-Z.P.Z-X2FP16" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 64;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 64;
constant integer d_esize = 16;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
<iclass name="64-bit to single-precision" oneof="7" id="iclass_64_to_single" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="64-to-single" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-X2S" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>0</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_x2s" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="64-to-single" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.S, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.D</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-X2S" mylink="UCVTF-Z.P.Z-X2S" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 64;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 64;
constant integer d_esize = 32;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
<iclass name="64-bit to double-precision" oneof="7" id="iclass_64_to_double" no_encodings="1" isa="A64">
<docvars>
<docvar key="convert-type" value="64-to-double" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<iclassintro count="1"></iclassintro>
<regdiagram form="32" psname="UCVTF-Z.P.Z-X2D" tworows="1">
<box hibit="31" width="8" settings="8">
<c>0</c>
<c>1</c>
<c>1</c>
<c>0</c>
<c>0</c>
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="23" name="opc&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="22" name="opc&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="21" width="3" settings="3">
<c>0</c>
<c>1</c>
<c>0</c>
</box>
<box hibit="18" name="opc2&lt;1&gt;" settings="1">
<c>1</c>
</box>
<box hibit="17" name="opc2&lt;0&gt;" settings="1">
<c>1</c>
</box>
<box hibit="16" name="int_U" usename="1" settings="1">
<c>1</c>
</box>
<box hibit="15" width="3" settings="3">
<c>1</c>
<c>0</c>
<c>1</c>
</box>
<box hibit="12" width="3" name="Pg" usename="1">
<c colspan="3"></c>
</box>
<box hibit="9" width="5" name="Zn" usename="1">
<c colspan="5"></c>
</box>
<box hibit="4" width="5" name="Zd" usename="1">
<c colspan="5"></c>
</box>
</regdiagram>
<encoding name="ucvtf_z_p_z_x2d" oneofinclass="1" oneof="7" label="">
<docvars>
<docvar key="convert-type" value="64-to-double" />
<docvar key="instr-class" value="sve" />
<docvar key="isa" value="A64" />
<docvar key="mnemonic" value="UCVTF" />
</docvars>
<asmtemplate><text>UCVTF </text><a link="sa_zd" hover="Destination scalable vector register (field &quot;Zd&quot;)">&lt;Zd&gt;</a><text>.D, </text><a link="sa_pg" hover="Governing scalable predicate register P0-P7 (field &quot;Pg&quot;)">&lt;Pg&gt;</a><text>/M, </text><a link="sa_zn" hover="Source scalable vector register (field &quot;Zn&quot;)">&lt;Zn&gt;</a><text>.D</text></asmtemplate>
</encoding>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-X2D" mylink="UCVTF-Z.P.Z-X2D" enclabels="" sections="1" secttype="noheading">
<pstext mayhavelinks="1" section="Decode" rep_section="decode">if !<a link="impl-aarch64.HaveSVE.0" file="shared_pseudocode.xml" hover="function: boolean HaveSVE()">HaveSVE</a>() &amp;&amp; !<a link="impl-aarch64.HaveSME.0" file="shared_pseudocode.xml" hover="function: boolean HaveSME()">HaveSME</a>() then UNDEFINED;
constant integer esize = 64;
integer g = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Pg);
integer n = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zn);
integer d = <a link="impl-shared.UInt.1" file="shared_pseudocode.xml" hover="function: integer UInt(bits(N) x)">UInt</a>(Zd);
constant integer s_esize = 64;
constant integer d_esize = 64;
boolean unsigned = TRUE;
<a link="FPRounding" file="shared_pseudocode.xml" hover="enumeration FPRounding {FPRounding_TIEEVEN, FPRounding_POSINF, FPRounding_NEGINF, FPRounding_ZERO, FPRounding_TIEAWAY, FPRounding_ODD}">FPRounding</a> rounding = <a link="impl-shared.FPRoundingMode.1" file="shared_pseudocode.xml" hover="function: FPRounding FPRoundingMode(FPCRType fpcr)">FPRoundingMode</a>(FPCR[]);</pstext>
</ps>
</ps_section>
</iclass>
</classes>
<explanations scope="all">
<explanation enclist="ucvtf_z_p_z_h2fp16, ucvtf_z_p_z_w2d, ucvtf_z_p_z_w2fp16, ucvtf_z_p_z_w2s, ucvtf_z_p_z_x2d, ucvtf_z_p_z_x2fp16, ucvtf_z_p_z_x2s" symboldefcount="1">
<symbol link="sa_zd">&lt;Zd&gt;</symbol>
<account encodedin="Zd">
<intro>
<para>Is the name of the destination scalable vector register, encoded in the "Zd" field.</para>
</intro>
</account>
</explanation>
<explanation enclist="ucvtf_z_p_z_h2fp16, ucvtf_z_p_z_w2d, ucvtf_z_p_z_w2fp16, ucvtf_z_p_z_w2s, ucvtf_z_p_z_x2d, ucvtf_z_p_z_x2fp16, ucvtf_z_p_z_x2s" symboldefcount="1">
<symbol link="sa_pg">&lt;Pg&gt;</symbol>
<account encodedin="Pg">
<intro>
<para>Is the name of the governing scalable predicate register P0-P7, encoded in the "Pg" field.</para>
</intro>
</account>
</explanation>
<explanation enclist="ucvtf_z_p_z_h2fp16, ucvtf_z_p_z_w2d, ucvtf_z_p_z_w2fp16, ucvtf_z_p_z_w2s, ucvtf_z_p_z_x2d, ucvtf_z_p_z_x2fp16, ucvtf_z_p_z_x2s" symboldefcount="1">
<symbol link="sa_zn">&lt;Zn&gt;</symbol>
<account encodedin="Zn">
<intro>
<para>Is the name of the source scalable vector register, encoded in the "Zn" field.</para>
</intro>
</account>
</explanation>
</explanations>
<ps_section howmany="1">
<ps name="UCVTF-Z.P.Z-H2FP16" mylink="execute" enclabels="" sections="1" secttype="Operation">
<pstext mayhavelinks="1" section="Execute" rep_section="execute"><a link="impl-aarch64.CheckSVEEnabled.0" file="shared_pseudocode.xml" hover="function: CheckSVEEnabled()">CheckSVEEnabled</a>();
constant integer VL = <a link="impl-aarch64.CurrentVL.read.none" file="shared_pseudocode.xml" hover="accessor: integer CurrentVL">CurrentVL</a>;
constant integer PL = VL DIV 8;
constant integer elements = VL DIV esize;
bits(PL) mask = <a link="impl-aarch64.P.read.2" file="shared_pseudocode.xml" hover="accessor: bits(width) P[integer n, integer width]">P</a>[g, PL];
bits(VL) operand = if <a link="impl-aarch64.AnyActiveElement.2" file="shared_pseudocode.xml" hover="function: boolean AnyActiveElement(bits(N) mask, integer esize)">AnyActiveElement</a>(mask, esize) then <a link="impl-aarch64.Z.read.2" file="shared_pseudocode.xml" hover="accessor: bits(width) Z[integer n, integer width]">Z</a>[n, VL] else <a link="impl-shared.Zeros.1" file="shared_pseudocode.xml" hover="function: bits(N) Zeros(integer N)">Zeros</a>(VL);
bits(VL) result = <a link="impl-aarch64.Z.read.2" file="shared_pseudocode.xml" hover="accessor: bits(width) Z[integer n, integer width]">Z</a>[d, VL];
for e = 0 to elements-1
if <a link="impl-aarch64.ActivePredicateElement.3" file="shared_pseudocode.xml" hover="function: boolean ActivePredicateElement(bits(N) pred, integer e, integer esize)">ActivePredicateElement</a>(mask, e, esize) then
bits(esize) element = <a link="impl-shared.Elem.read.3" file="shared_pseudocode.xml" hover="accessor: bits(size) Elem[bits(N) vector, integer e, integer size]">Elem</a>[operand, e, esize];
bits(d_esize) fpval = <a link="impl-shared.FixedToFP.6" file="shared_pseudocode.xml" hover="function: bits(N) FixedToFP(bits(M) op, integer fbits, boolean unsigned, FPCRType fpcr, FPRounding rounding, integer N)">FixedToFP</a>(element&lt;s_esize-1:0&gt;, 0, unsigned, FPCR[], rounding, d_esize);
<a link="impl-shared.Elem.write.3" file="shared_pseudocode.xml" hover="accessor: Elem[bits(N) &amp;vector, integer e, integer size] = bits(size) value">Elem</a>[result, e, esize] = <a link="impl-shared.ZeroExtend.2" file="shared_pseudocode.xml" hover="function: bits(N) ZeroExtend(bits(M) x, integer N)">ZeroExtend</a>(fpval, esize);
<a link="impl-aarch64.Z.write.2" file="shared_pseudocode.xml" hover="accessor: Z[integer n, integer width] = bits(width) value">Z</a>[d, VL] = result;</pstext>
</ps>
</ps_section>
</instructionsection>