<?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-2025 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="MOV_r" title="MOV, MOVS (register) -- AArch32" type="instruction">
  <docvars>
    <docvar key="instr-class" value="general"/>
  </docvars>
  <heading>MOV, MOVS (register)</heading>
  <desc>
    <brief>
      <para>Move (register)</para>
    </brief>
    <authored>
      <para>Move (register) copies a value from a register to the destination
register.</para>
      <para>If the destination register is not the PC, the MOVS variant of the
instruction updates the condition flags based on the result.</para>
      <para>The field descriptions for <syntax>&lt;Rd&gt;</syntax> identify the encodings
where the PC is permitted as the destination register. If the
destination register is the PC:</para>
      <list type="unordered">
        <listitem>
          <content>The MOV variant of the instruction is a branch. In the T32 instruction set (encoding T1) this is a simple branch, and in the A32 instruction set it is an interworking branch, see <xref linkend="ARMARM_BEICJFEH">Pseudocode description of operations on the AArch32 general-purpose registers and the PC</xref>.</content>
        </listitem>
        <listitem>
          <content>The MOVS variant of the instruction performs an exception return without the use of the stack. In this case:<list type="unordered">
              <listitem>
                <content>The PE branches to the address written to the PC, and restores <xref linkend="ARMARM_CHDEDFDC">PSTATE</xref> from SPSR_&lt;current_mode&gt;.</content>
              </listitem>
              <listitem>
                <content>The PE checks SPSR_&lt;current_mode&gt; for an illegal return event. See <xref linkend="ARMARM_CHDDDJDB">Illegal return events from AArch32 state</xref>.</content>
              </listitem>
              <listitem>
                <content>The instruction is <arm-defined-word>UNDEFINED</arm-defined-word> in Hyp mode.</content>
              </listitem>
              <listitem>
                <content>The instruction is <arm-defined-word>CONSTRAINED UNPREDICTABLE</arm-defined-word> in User mode and System mode.</content>
              </listitem>
            </list>
          </content>
        </listitem>
      </list>
    </authored>
    <encodingnotes>
      <para>For more information about the <arm-defined-word>CONSTRAINED UNPREDICTABLE</arm-defined-word> behavior of this instruction, see <xref linkend="ARMARM_CJAEGDJC">Architectural Constraints on UNPREDICTABLE behaviors</xref>.</para>
    </encodingnotes>
  </desc>
  <operationalnotes>
    <operationalnote>
      <operationalnote_content>
        <para>This instruction is a data-independent-time instruction as described in <xref linkend="ARMARM_BEIIDCEG">About the DIT bit</xref>.</para>
      </operationalnote_content>
    </operationalnote>
  </operationalnotes>
  <alias_list howmany="10">
    <alias_list_intro>This instruction is used by the aliases </alias_list_intro>
    <aliasref aliaspageid="ASRS_MOV_r" aliasfile="asrs_mov_r.xml" hover="Arithmetic Shift Right, setting flags (immediate)" punct=", ">
      <text>ASRS (immediate)</text>
      <aliaspref labels="T3 MOVS, shift or rotate by value, A1 MOVS, shift or rotate by value">S == '1' &amp;&amp; stype == '10'</aliaspref>
      <aliaspref labels="T2">op == '10' &amp;&amp; !InITBlock()</aliaspref>
    </aliasref>
    <aliasref aliaspageid="ASR_MOV_r" aliasfile="asr_mov_r.xml" hover="Arithmetic Shift Right (immediate)" punct=", ">
      <text>ASR (immediate)</text>
      <aliaspref labels="T3 MOV, shift or rotate by value, A1 MOV, shift or rotate by value">S == '0' &amp;&amp; stype == '10'</aliaspref>
      <aliaspref labels="T2">op == '10' &amp;&amp; InITBlock()</aliaspref>
    </aliasref>
    <aliasref aliaspageid="LSLS_MOV_r" aliasfile="lsls_mov_r.xml" hover="Logical Shift Left, setting flags (immediate)" punct=", ">
      <text>LSLS (immediate)</text>
      <aliaspref labels="A1 MOVS, shift or rotate by value">S == '1' &amp;&amp; imm5 != '00000' &amp;&amp; stype == '00'</aliaspref>
      <aliaspref labels="T2">op == '00' &amp;&amp; imm5 != '00000' &amp;&amp; !InITBlock()</aliaspref>
      <aliaspref labels="T3 MOVS, shift or rotate by value">(S == '1' &amp;&amp; stype == '00' &amp;&amp; !(imm3 == '000')) || (S == '1' &amp;&amp; stype == '00' &amp;&amp; !(imm2 == '00'))</aliaspref>
    </aliasref>
    <aliasref aliaspageid="LSL_MOV_r" aliasfile="lsl_mov_r.xml" hover="Logical Shift Left (immediate)" punct=", ">
      <text>LSL (immediate)</text>
      <aliaspref labels="A1 MOV, shift or rotate by value">S == '0' &amp;&amp; imm5 != '00000' &amp;&amp; stype == '00'</aliaspref>
      <aliaspref labels="T2">op == '00' &amp;&amp; imm5 != '00000' &amp;&amp; InITBlock()</aliaspref>
      <aliaspref labels="T3 MOV, shift or rotate by value">(S == '0' &amp;&amp; stype == '00' &amp;&amp; !(imm3 == '000')) || (S == '0' &amp;&amp; stype == '00' &amp;&amp; !(imm2 == '00'))</aliaspref>
    </aliasref>
    <aliasref aliaspageid="LSRS_MOV_r" aliasfile="lsrs_mov_r.xml" hover="Logical Shift Right, setting flags (immediate)" punct=", ">
      <text>LSRS (immediate)</text>
      <aliaspref labels="T3 MOVS, shift or rotate by value, A1 MOVS, shift or rotate by value">S == '1' &amp;&amp; stype == '01'</aliaspref>
      <aliaspref labels="T2">op == '01' &amp;&amp; !InITBlock()</aliaspref>
    </aliasref>
    <aliasref aliaspageid="LSR_MOV_r" aliasfile="lsr_mov_r.xml" hover="Logical Shift Right (immediate)" punct=", ">
      <text>LSR (immediate)</text>
      <aliaspref labels="T3 MOV, shift or rotate by value, A1 MOV, shift or rotate by value">S == '0' &amp;&amp; stype == '01'</aliaspref>
      <aliaspref labels="T2">op == '01' &amp;&amp; InITBlock()</aliaspref>
    </aliasref>
    <aliasref aliaspageid="RORS_MOV_r" aliasfile="rors_mov_r.xml" hover="Rotate Right, setting flags (immediate)" punct=", ">
      <text>RORS (immediate)</text>
      <aliaspref labels="A1 MOVS, shift or rotate by value">S == '1' &amp;&amp; imm5 != '00000' &amp;&amp; stype == '11'</aliaspref>
      <aliaspref labels="T3 MOVS, shift or rotate by value">(S == '1' &amp;&amp; stype == '11' &amp;&amp; !(imm3 == '000')) || (S == '1' &amp;&amp; stype == '11' &amp;&amp; !(imm2 == '00'))</aliaspref>
    </aliasref>
    <aliasref aliaspageid="ROR_MOV_r" aliasfile="ror_mov_r.xml" hover="Rotate Right (immediate)" punct=", ">
      <text>ROR (immediate)</text>
      <aliaspref labels="A1 MOV, shift or rotate by value">S == '0' &amp;&amp; imm5 != '00000' &amp;&amp; stype == '11'</aliaspref>
      <aliaspref labels="T3 MOV, shift or rotate by value">(S == '0' &amp;&amp; stype == '11' &amp;&amp; !(imm3 == '000')) || (S == '0' &amp;&amp; stype == '11' &amp;&amp; !(imm2 == '00'))</aliaspref>
    </aliasref>
    <aliasref aliaspageid="RRXS_MOV_r" aliasfile="rrxs_mov_r.xml" hover="Rotate Right with Extend, setting flags" punct=" and ">
      <text>RRXS</text>
      <aliaspref labels="A1 MOVS, rotate right with extend">S == '1' &amp;&amp; imm5 == '00000' &amp;&amp; stype == '11'</aliaspref>
      <aliaspref labels="T3 MOVS, rotate right with extend">S == '1' &amp;&amp; imm3 == '000' &amp;&amp; imm2 == '00' &amp;&amp; stype == '11'</aliaspref>
    </aliasref>
    <aliasref aliaspageid="RRX_MOV_r" aliasfile="rrx_mov_r.xml" hover="Rotate Right with Extend" punct=".">
      <text>RRX</text>
      <aliaspref labels="A1 MOV, rotate right with extend">S == '0' &amp;&amp; imm5 == '00000' &amp;&amp; stype == '11'</aliaspref>
      <aliaspref labels="T3 MOV, rotate right with extend">S == '0' &amp;&amp; imm3 == '000' &amp;&amp; imm2 == '00' &amp;&amp; stype == '11'</aliaspref>
    </aliasref>
    <alias_list_outro>
      <text>  See </text>
      <aliastablelink/>
      <text> below for details of when each alias is preferred.</text>
    </alias_list_outro>
  </alias_list>
  <classes>
    <classesintro count="4">
      <txt>It has encodings from the following instruction sets:</txt>
      <txt> A32 (</txt>
      <a href="#iclass_a1">A1</a>
      <txt>)</txt>
      <txt> and </txt>
      <txt> T32 (</txt>
      <a href="#iclass_t1">T1</a>
      <txt>, </txt>
      <a href="#iclass_t2">T2</a>
      <txt> and </txt>
      <a href="#iclass_t3">T3</a>
      <txt>)</txt>
      <txt>.</txt>
    </classesintro>
    <iclass name="A1" oneof="4" id="iclass_a1" no_encodings="4" isa="A32">
      <docvars>
        <docvar key="armarmheading" value="A1"/>
        <docvar key="instr-class" value="general"/>
        <docvar key="isa" value="A32"/>
      </docvars>
      <iclassintro count="4"/>
      <regdiagram form="32" psname="A32.dp.dpregis.logic3reg_immsh.MOV_r_A1_RRX" tworows="1">
        <box hibit="31" width="4" name="cond" usename="1" settings="4" constraint="!= 1111">
          <c colspan="4">!= 1111</c>
        </box>
        <box hibit="27" width="5" settings="5">
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>1</c>
          <c>1</c>
        </box>
        <box hibit="22" width="2" name="opc" usename="1" settings="2" psbits="xx">
          <c>0</c>
          <c>1</c>
        </box>
        <box hibit="20" width="1" name="S" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="19" width="4" name="Rn" usename="1" settings="4" psbits="xxxx">
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
        </box>
        <box hibit="15" width="4" name="Rd" usename="1">
          <c colspan="4"/>
        </box>
        <box hibit="11" width="5" name="imm5" usename="1">
          <c colspan="5"/>
        </box>
        <box hibit="6" width="2" name="stype" usename="1">
          <c colspan="2"/>
        </box>
        <box hibit="4" width="1" settings="1">
          <c>0</c>
        </box>
        <box hibit="3" width="4" name="Rm" usename="1">
          <c colspan="4"/>
        </box>
      </regdiagram>
      <encoding name="MOV_r_A1_RRX" oneofinclass="4" oneof="10" label="MOV, rotate right with extend" bitdiffs="S == 0 &amp;&amp; imm5 == 00000 &amp;&amp; stype == 11">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="mnemonic" value="MOV"/>
          <docvar key="mnemonic-shift-type" value="MOV-rrx"/>
          <docvar key="shift-type" value="rrx"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>0</c>
        </box>
        <box hibit="11" width="5" name="imm5">
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="6" width="2" name="stype">
          <c>1</c>
          <c>1</c>
        </box>
        <asmtemplate><text>MOV{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, and &quot;A1 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field. If the PC is used:" link="Rd__13">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, and &quot;T1&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field. The PC can be used. Arm deprecates use of the instruction if &lt;Rd&gt; is the PC." link="Rm__6">&lt;Rm&gt;</a><text>, RRX</text></asmtemplate>
      </encoding>
      <encoding name="MOV_r_A1" oneofinclass="4" oneof="10" label="MOV, shift or rotate by value" bitdiffs="S == 0 &amp;&amp; !(imm5 == 00000 &amp;&amp; stype == 11)">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="mnemonic-shift-type" value="MOV-shift-no-rrx"/>
          <docvar key="shift-type" value="shift-no-rrx"/>
          <docvar key="mnemonic" value="MOV"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>0</c>
        </box>
        <asmtemplate><text>MOV{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, and &quot;A1 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field. If the PC is used:" link="Rd__13">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, and &quot;T1&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field. The PC can be used. Arm deprecates use of the instruction if &lt;Rd&gt; is the PC." link="Rm__6">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, &quot;T3 MOV, shift or rotate by value&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the type of shift to be applied to the source register, " link="shift_option__6">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot; and &quot;A1 MOVS, shift or rotate by value&quot; variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL), or 1 to 31 (when &lt;shift&gt; = ROR) or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm5&quot; field as &lt;amount&gt; modulo 32." link="amount__13">&lt;amount&gt;</a><text>}</text></asmtemplate>
      </encoding>
      <encoding name="MOVS_r_A1_RRX" oneofinclass="4" oneof="10" label="MOVS, rotate right with extend" bitdiffs="S == 1 &amp;&amp; imm5 == 00000 &amp;&amp; stype == 11">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="mnemonic" value="MOVS"/>
          <docvar key="mnemonic-shift-type" value="MOVS-rrx"/>
          <docvar key="shift-type" value="rrx"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>1</c>
        </box>
        <box hibit="11" width="5" name="imm5">
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="6" width="2" name="stype">
          <c>1</c>
          <c>1</c>
        </box>
        <asmtemplate><text>MOVS{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, and &quot;A1 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field. If the PC is used:" link="Rd__13">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, and &quot;T1&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field. The PC can be used. Arm deprecates use of the instruction if &lt;Rd&gt; is the PC." link="Rm__6">&lt;Rm&gt;</a><text>, RRX</text></asmtemplate>
      </encoding>
      <encoding name="MOVS_r_A1" oneofinclass="4" oneof="10" label="MOVS, shift or rotate by value" bitdiffs="S == 1 &amp;&amp; !(imm5 == 00000 &amp;&amp; stype == 11)">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="mnemonic-shift-type" value="MOVS-shift-no-rrx"/>
          <docvar key="shift-type" value="shift-no-rrx"/>
          <docvar key="mnemonic" value="MOVS"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>1</c>
        </box>
        <asmtemplate><text>MOVS{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, and &quot;A1 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field. If the PC is used:" link="Rd__13">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, and &quot;T1&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field. The PC can be used. Arm deprecates use of the instruction if &lt;Rd&gt; is the PC." link="Rm__6">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, &quot;T3 MOV, shift or rotate by value&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the type of shift to be applied to the source register, " link="shift_option__6">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot; and &quot;A1 MOVS, shift or rotate by value&quot; variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL), or 1 to 31 (when &lt;shift&gt; = ROR) or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm5&quot; field as &lt;amount&gt; modulo 32." link="amount__13">&lt;amount&gt;</a><text>}</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="A32.dp.dpregis.logic3reg_immsh.MOV_r_A1_RRX" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let d : integer = UInt(Rd);
let m : integer = UInt(Rm);
let setflags : boolean = (S == '1');
let (shift_t, shift_n) : (<a link="SRType" file="shared_pseudocode.xml" hover="type SRType">SRType</a>, integer) = DecodeImmShift(stype, imm5);</pstext></ps>
      </ps_section>
    </iclass>
    <iclass name="T1" oneof="4" id="iclass_t1" no_encodings="1" isa="T32">
      <docvars>
        <docvar key="armarmheading" value="T1"/>
        <docvar key="instr-class" value="general"/>
        <docvar key="isa" value="T32"/>
        <docvar key="mnemonic" value="MOV"/>
      </docvars>
      <iclassintro count="1"/>
      <regdiagram form="16" psname="T32.n.spcd.addsub16_2h.MOV_r_T1" tworows="1">
        <box hibit="15" width="6" settings="6">
          <c>0</c>
          <c>1</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>1</c>
        </box>
        <box hibit="9" width="2" name="op" usename="1" settings="2" psbits="xx">
          <c>1</c>
          <c>0</c>
        </box>
        <box hibit="7" width="1" name="D" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="6" width="4" name="Rm" usename="1">
          <c colspan="4"/>
        </box>
        <box hibit="2" width="3" name="Rd" usename="1">
          <c colspan="3"/>
        </box>
      </regdiagram>
      <encoding name="MOV_r_T1" oneofinclass="1" oneof="10" label="">
        <docvars>
          <docvar key="armarmheading" value="T1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="mnemonic" value="MOV"/>
        </docvars>
        <asmtemplate><text>MOV{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T1&quot; variant: is the general-purpose destination register, encoded in the &quot;D:Rd&quot; field. If the PC is used:" link="D_Rd">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;A1 MOV, rotate right with extend&quot;, &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, rotate right with extend&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, and &quot;T1&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field. The PC can be used. Arm deprecates use of the instruction if &lt;Rd&gt; is the PC." link="Rm__6">&lt;Rm&gt;</a></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="T32.n.spcd.addsub16_2h.MOV_r_T1" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let d : integer = UInt(D::Rd);
let m : integer = UInt(Rm);
let setflags : boolean = FALSE;
let shift_t : <a link="SRType" file="shared_pseudocode.xml" hover="type SRType">SRType</a> = SRType_LSL;
let shift_n : integer = 0;
if d == 15 &amp;&amp; InITBlock() &amp;&amp; !LastInITBlock() then UnpredictableProcedure(); end;</pstext></ps>
      </ps_section>
    </iclass>
    <iclass name="T2" oneof="4" id="iclass_t2" no_encodings="1" isa="T32">
      <docvars>
        <docvar key="armarmheading" value="T2"/>
        <docvar key="instr-class" value="general"/>
        <docvar key="isa" value="T32"/>
        <docvar key="mnemonic" value="MOV"/>
      </docvars>
      <iclassintro count="1"/>
      <regdiagram form="16" psname="T32.n.sftdpi.shift16_imm.MOV_r_T2" tworows="1">
        <box hibit="15" width="2" settings="2">
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="13" width="1" settings="1">
          <c>0</c>
        </box>
        <box hibit="12" width="2" name="op" usename="1" settings="2" constraint="!= 11">
          <c colspan="2">!= 11</c>
        </box>
        <box hibit="10" width="5" name="imm5" usename="1">
          <c colspan="5"/>
        </box>
        <box hibit="5" width="3" name="Rm" usename="1">
          <c colspan="3"/>
        </box>
        <box hibit="2" width="3" name="Rd" usename="1">
          <c colspan="3"/>
        </box>
      </regdiagram>
      <encoding name="MOV_r_T2" oneofinclass="1" oneof="10" label="">
        <docvars>
          <docvar key="armarmheading" value="T2"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="mnemonic" value="MOV"/>
        </docvars>
        <asmtemplate comment="InITBlock()"><text>MOV</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;T2&quot; variant: is the type of shift to be applied to the source register, " link="shift_option__10">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;T2&quot; variant: is the shift amount, in the range 1 to 31 (when &lt;shift&gt; = LSL or ROR) or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm5&quot; field as &lt;amount&gt; modulo 32." link="amount__11">&lt;amount&gt;</a><text>}</text></asmtemplate>
        <asmtemplate comment="Outside IT block"><text>MOVS{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;T2&quot; variant: is the type of shift to be applied to the source register, " link="shift_option__10">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;T2&quot; variant: is the shift amount, in the range 1 to 31 (when &lt;shift&gt; = LSL or ROR) or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm5&quot; field as &lt;amount&gt; modulo 32." link="amount__11">&lt;amount&gt;</a><text>}</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="T32.n.sftdpi.shift16_imm.MOV_r_T2" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let d : integer = UInt(Rd);
let m : integer = UInt(Rm);
let setflags : boolean = !InITBlock();
let (shift_t, shift_n) : (<a link="SRType" file="shared_pseudocode.xml" hover="type SRType">SRType</a>, integer) = DecodeImmShift(op, imm5);
if op == '00' &amp;&amp; imm5 == '00000' &amp;&amp; InITBlock() then UnpredictableProcedure(); end;</pstext></ps>
      </ps_section>
      <constrained_unpredictables encoding="T2" ps_block="Decode">
        <cu_case>
          <cu_cause>
            <pstext mayhavelinks="1">op == '00' &amp;&amp; imm5 == '00000' &amp;&amp; InITBlock()</pstext></cu_cause>
          <cu_type constraint="Constraint_UNDEF"/>
          <cu_type>
            <cu_type_text>The instruction executes as if it passed its condition code check.</cu_type_text>
          </cu_type>
          <cu_type>
            <cu_type_text>The instruction executes as <instruction>NOP</instruction>, as if it failed its condition code check.</cu_type_text>
          </cu_type>
          <cu_type>
            <cu_type_text>The instruction executes as <instruction>MOV</instruction> Rd, Rm.</cu_type_text>
          </cu_type>
        </cu_case>
      </constrained_unpredictables>
    </iclass>
    <iclass name="T3" oneof="4" id="iclass_t3" no_encodings="4" isa="T32">
      <docvars>
        <docvar key="armarmheading" value="T3"/>
        <docvar key="instr-class" value="general"/>
        <docvar key="isa" value="T32"/>
      </docvars>
      <iclassintro count="4"/>
      <regdiagram form="16x2" psname="T32.w.dpint_shiftr.MOV_r_T3_RRX" tworows="1">
        <box hibit="31" width="7" settings="7">
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>0</c>
          <c>1</c>
          <c>0</c>
          <c>1</c>
        </box>
        <box hibit="24" width="4" name="op1" usename="1" settings="4" psbits="xxxx">
          <c>0</c>
          <c>0</c>
          <c>1</c>
          <c>0</c>
        </box>
        <box hibit="20" width="1" name="S" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="19" width="4" name="Rn" usename="1" settings="4" psbits="xxxx">
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>1</c>
        </box>
        <box hibit="15" width="1" settings="1">
          <c>(0)</c>
        </box>
        <box hibit="14" width="3" name="imm3" usename="1">
          <c colspan="3"/>
        </box>
        <box hibit="11" width="4" name="Rd" usename="1">
          <c colspan="4"/>
        </box>
        <box hibit="7" width="2" name="imm2" usename="1">
          <c colspan="2"/>
        </box>
        <box hibit="5" width="2" name="stype" usename="1">
          <c colspan="2"/>
        </box>
        <box hibit="3" width="4" name="Rm" usename="1">
          <c colspan="4"/>
        </box>
      </regdiagram>
      <encoding name="MOV_r_T3_RRX" oneofinclass="4" oneof="10" label="MOV, rotate right with extend" bitdiffs="S == 0 &amp;&amp; imm3 == 000 &amp;&amp; imm2 == 00 &amp;&amp; stype == 11">
        <docvars>
          <docvar key="armarmheading" value="T3"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="mnemonic" value="MOV"/>
          <docvar key="mnemonic-shift-type" value="MOV-rrx"/>
          <docvar key="shift-type" value="rrx"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>0</c>
        </box>
        <box hibit="14" width="3" name="imm3">
          <c>0</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="7" width="2" name="imm2">
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="5" width="2" name="stype">
          <c>1</c>
          <c>1</c>
        </box>
        <asmtemplate><text>MOV{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text>, RRX</text></asmtemplate>
      </encoding>
      <encoding name="MOV_r_T3" oneofinclass="4" oneof="10" label="MOV, shift or rotate by value" bitdiffs="S == 0 &amp;&amp; !(imm3 == 000 &amp;&amp; imm2 == 00 &amp;&amp; stype == 11)">
        <docvars>
          <docvar key="armarmheading" value="T3"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="mnemonic" value="MOV"/>
          <docvar key="mnemonic-shift-type" value="MOV-shift-no-rrx"/>
          <docvar key="shift-type" value="shift-no-rrx"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>0</c>
        </box>
        <asmtemplate><text>MOV{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, &quot;T3 MOV, shift or rotate by value&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the type of shift to be applied to the source register, " link="shift_option__6">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;T3 MOV, shift or rotate by value&quot; and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL) or 1 to 31 (when &lt;shift&gt; = ROR), or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm3:imm2&quot; field as &lt;amount&gt; modulo 32." link="imm3_imm2__2">&lt;amount&gt;</a><text>}</text></asmtemplate>
        <asmtemplate comment="&lt;Rd&gt;, &lt;Rm&gt; can be represented in T1"><text>MOV{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}.W  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, LSL #0}</text></asmtemplate>
        <asmtemplate comment="Inside IT block, and &lt;Rd&gt;, &lt;Rm&gt;, &lt;shift&gt;, &lt;amount&gt; can be represented in T2"><text>MOV</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>.W  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, &quot;T3 MOV, shift or rotate by value&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the type of shift to be applied to the source register, " link="shift_option__6">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;T3 MOV, shift or rotate by value&quot; and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL) or 1 to 31 (when &lt;shift&gt; = ROR), or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm3:imm2&quot; field as &lt;amount&gt; modulo 32." link="imm3_imm2__2">&lt;amount&gt;</a><text>}</text></asmtemplate>
      </encoding>
      <encoding name="MOVS_r_T3_RRX" oneofinclass="4" oneof="10" label="MOVS, rotate right with extend" bitdiffs="S == 1 &amp;&amp; imm3 == 000 &amp;&amp; imm2 == 00 &amp;&amp; stype == 11">
        <docvars>
          <docvar key="armarmheading" value="T3"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="mnemonic" value="MOVS"/>
          <docvar key="mnemonic-shift-type" value="MOVS-rrx"/>
          <docvar key="shift-type" value="rrx"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>1</c>
        </box>
        <box hibit="14" width="3" name="imm3">
          <c>0</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="7" width="2" name="imm2">
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="5" width="2" name="stype">
          <c>1</c>
          <c>1</c>
        </box>
        <asmtemplate><text>MOVS{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text>, RRX</text></asmtemplate>
      </encoding>
      <encoding name="MOVS_r_T3" oneofinclass="4" oneof="10" label="MOVS, shift or rotate by value" bitdiffs="S == 1 &amp;&amp; !(imm3 == 000 &amp;&amp; imm2 == 00 &amp;&amp; stype == 11)">
        <docvars>
          <docvar key="armarmheading" value="T3"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="mnemonic" value="MOVS"/>
          <docvar key="mnemonic-shift-type" value="MOVS-shift-no-rrx"/>
          <docvar key="shift-type" value="shift-no-rrx"/>
        </docvars>
        <box hibit="20" width="1" name="S">
          <c>1</c>
        </box>
        <asmtemplate><text>MOVS{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="cond__2">&lt;c&gt;</a><text>}{</text><a hover="See x[Standard assembler syntax fields](Babbefhf)." link="qw_option">&lt;q&gt;</a><text>}  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, &quot;T3 MOV, shift or rotate by value&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the type of shift to be applied to the source register, " link="shift_option__6">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;T3 MOV, shift or rotate by value&quot; and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL) or 1 to 31 (when &lt;shift&gt; = ROR), or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm3:imm2&quot; field as &lt;amount&gt; modulo 32." link="imm3_imm2__2">&lt;amount&gt;</a><text>}</text></asmtemplate>
        <asmtemplate comment="Outside IT block, and &lt;Rd&gt;, &lt;Rm&gt;, &lt;shift&gt;, &lt;amount&gt; can be represented in T1 or T2"><text>MOVS.W  </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose destination register, encoded in the &quot;Rd&quot; field." link="Rd__25">&lt;Rd&gt;</a><text>, </text><a hover="For the &quot;T2&quot;, &quot;T3 MOV, rotate right with extend&quot;, &quot;T3 MOV, shift or rotate by value&quot;, &quot;T3 MOVS, rotate right with extend&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the general-purpose source register, encoded in the &quot;Rm&quot; field." link="Rm__10">&lt;Rm&gt;</a><text> {, </text><a hover="For the &quot;A1 MOV, shift or rotate by value&quot;, &quot;A1 MOVS, shift or rotate by value&quot;, &quot;T3 MOV, shift or rotate by value&quot;, and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the type of shift to be applied to the source register, " link="shift_option__6">&lt;shift&gt;</a><text> #</text><a hover="For the &quot;T3 MOV, shift or rotate by value&quot; and &quot;T3 MOVS, shift or rotate by value&quot; variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL) or 1 to 31 (when &lt;shift&gt; = ROR), or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the &quot;imm3:imm2&quot; field as &lt;amount&gt; modulo 32." link="imm3_imm2__2">&lt;amount&gt;</a><text>}</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="T32.w.dpint_shiftr.MOV_r_T3_RRX" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let d : integer = UInt(Rd);
let m : integer = UInt(Rm);
let setflags : boolean = (S == '1');
let (shift_t, shift_n) : (<a link="SRType" file="shared_pseudocode.xml" hover="type SRType">SRType</a>, integer) = DecodeImmShift(stype, imm3::imm2);
// Armv8-A removes UNPREDICTABLE for R13
if d == 15 || m == 15 then UnpredictableProcedure(); end;</pstext></ps>
      </ps_section>
    </iclass>
  </classes>
  <explanations scope="all">
    <explanation enclist="MOV_r_A1_RRX, MOV_r_A1, MOVS_r_A1_RRX, MOVS_r_A1, MOV_r_T1, MOV_r_T2, MOV_r_T3_RRX, MOV_r_T3, T3B_MOV_r_T3, T3C_MOV_r_T3, MOVS_r_T3_RRX, MOVS_r_T3" symboldefcount="1">
      <symbol link="cond__2">&lt;c&gt;</symbol>
      <account encodedin="cond">
        <intro>
          <para>See <xref linkend="Babbefhf">Standard assembler syntax fields</xref>.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_A1_RRX, MOV_r_A1, MOVS_r_A1_RRX, MOVS_r_A1, MOV_r_T1, MOV_r_T2, T2B_MOV_r_T2, MOV_r_T3_RRX, MOV_r_T3, MOVS_r_T3_RRX, MOVS_r_T3" symboldefcount="1">
      <symbol link="qw_option">&lt;q&gt;</symbol>
      <account encodedin="">
        <intro>
          <para>See <xref linkend="Babbefhf">Standard assembler syntax fields</xref>.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_A1_RRX, MOV_r_A1, MOVS_r_A1_RRX, MOVS_r_A1" symboldefcount="1">
      <symbol link="Rd__13">&lt;Rd&gt;</symbol>
      <account encodedin="Rd">
        <intro>
          <para>For the "A1 MOV, rotate right with extend", "A1 MOV, shift or rotate by value", "A1 MOVS, rotate right with extend", and "A1 MOVS, shift or rotate by value" variants: is the general-purpose destination register, encoded in the "Rd" field. If the PC is used:</para>
          <list type="unordered">
            <listitem>
              <content>For the MOV variant, the instruction is a branch to the address calculated by the operation. This is an interworking branch, see <xref linkend="BEICJFEH">Pseudocode description of operations on the AArch32 general-purpose registers and the PC</xref>. Arm deprecates use of the instruction if <syntax>&lt;Rn&gt;</syntax> is the PC.</content>
            </listitem>
            <listitem>
              <content>For the MOVS variant, the instruction performs an exception return, that restores <xref linkend="CHDEDFDC">PSTATE</xref> from SPSR_&lt;current_mode&gt;. Arm deprecates use of the instruction if &lt;Rn&gt; is not the LR, or if the optional shift or <value>RRX</value> argument is specified.</content>
            </listitem>
          </list>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_T1" symboldefcount="2">
      <symbol link="D_Rd">&lt;Rd&gt;</symbol>
      <account encodedin="(D :: Rd)">
        <intro>
          <para>For the "T1" variant: is the general-purpose destination register, encoded in the "D:Rd" field. If the PC is used:</para>
          <list type="unordered">
            <listitem>
              <content>The instruction causes a branch to the address moved to the PC. This is a simple branch, see <xref linkend="BEICJFEH">Pseudocode description of operations on the AArch32 general-purpose registers and the PC</xref>.</content>
            </listitem>
            <listitem>
              <content>The instruction must either be outside an IT block or the last instruction of an IT block.</content>
            </listitem>
          </list>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_T2, T2B_MOV_r_T2, MOV_r_T3_RRX, MOV_r_T3, T3B_MOV_r_T3, T3C_MOV_r_T3, MOVS_r_T3_RRX, MOVS_r_T3, T3B_MOVS_r_T3" symboldefcount="3">
      <symbol link="Rd__25">&lt;Rd&gt;</symbol>
      <account encodedin="Rd">
        <intro>
          <para>For the "T2", "T3 MOV, rotate right with extend", "T3 MOV, shift or rotate by value", "T3 MOVS, rotate right with extend", and "T3 MOVS, shift or rotate by value" variants: is the general-purpose destination register, encoded in the "Rd" field.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_A1_RRX, MOV_r_A1, MOVS_r_A1_RRX, MOVS_r_A1, MOV_r_T1" symboldefcount="1">
      <symbol link="Rm__6">&lt;Rm&gt;</symbol>
      <account encodedin="Rm">
        <intro>
          <para>For the "A1 MOV, rotate right with extend", "A1 MOV, shift or rotate by value", "A1 MOVS, rotate right with extend", "A1 MOVS, shift or rotate by value", and "T1" variants: is the general-purpose source register, encoded in the "Rm" field. The PC can be used. Arm deprecates use of the instruction if <syntax>&lt;Rd&gt;</syntax> is the PC.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_T2, T2B_MOV_r_T2, MOV_r_T3_RRX, MOV_r_T3, T3B_MOV_r_T3, T3C_MOV_r_T3, MOVS_r_T3_RRX, MOVS_r_T3, T3B_MOVS_r_T3" symboldefcount="2">
      <symbol link="Rm__10">&lt;Rm&gt;</symbol>
      <account encodedin="Rm">
        <intro>
          <para>For the "T2", "T3 MOV, rotate right with extend", "T3 MOV, shift or rotate by value", "T3 MOVS, rotate right with extend", and "T3 MOVS, shift or rotate by value" variants: is the general-purpose source register, encoded in the "Rm" field.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_A1, MOVS_r_A1, MOV_r_T3, T3C_MOV_r_T3, MOVS_r_T3, T3B_MOVS_r_T3" symboldefcount="1">
      <symbol link="shift_option__6">&lt;shift&gt;</symbol>
      <definition encodedin="stype">
        <intro>For the "A1 MOV, shift or rotate by value", "A1 MOVS, shift or rotate by value", "T3 MOV, shift or rotate by value", and "T3 MOVS, shift or rotate by value" variants: is the type of shift to be applied to the source register, </intro>
        <table class="valuetable">
          <tgroup cols="2">
            <thead>
              <row>
                <entry class="bitfield">stype</entry>
                <entry class="symbol">&lt;shift&gt;</entry>
              </row>
            </thead>
            <tbody>
              <row>
                <entry class="bitfield">00</entry>
                <entry class="symbol">LSL</entry>
              </row>
              <row>
                <entry class="bitfield">01</entry>
                <entry class="symbol">LSR</entry>
              </row>
              <row>
                <entry class="bitfield">10</entry>
                <entry class="symbol">ASR</entry>
              </row>
              <row>
                <entry class="bitfield">11</entry>
                <entry class="symbol">ROR</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </definition>
    </explanation>
    <explanation enclist="MOV_r_T2, T2B_MOV_r_T2" symboldefcount="2">
      <symbol link="shift_option__10">&lt;shift&gt;</symbol>
      <definition encodedin="op">
        <intro>For the "T2" variant: is the type of shift to be applied to the source register, </intro>
        <table class="valuetable">
          <tgroup cols="2">
            <thead>
              <row>
                <entry class="bitfield">op</entry>
                <entry class="symbol">&lt;shift&gt;</entry>
              </row>
            </thead>
            <tbody>
              <row>
                <entry class="bitfield">00</entry>
                <entry class="symbol">LSL</entry>
              </row>
              <row>
                <entry class="bitfield">01</entry>
                <entry class="symbol">LSR</entry>
              </row>
              <row>
                <entry class="bitfield">10</entry>
                <entry class="symbol">ASR</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </definition>
    </explanation>
    <explanation enclist="MOV_r_A1, MOVS_r_A1" symboldefcount="1">
      <symbol link="amount__13">&lt;amount&gt;</symbol>
      <account encodedin="imm5">
        <intro>
          <para>For the "A1 MOV, shift or rotate by value" and "A1 MOVS, shift or rotate by value" variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL), or 1 to 31 (when &lt;shift&gt; = ROR) or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the "imm5" field as &lt;amount&gt; modulo 32.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_T2, T2B_MOV_r_T2" symboldefcount="2">
      <symbol link="amount__11">&lt;amount&gt;</symbol>
      <account encodedin="imm5">
        <intro>
          <para>For the "T2" variant: is the shift amount, in the range 1 to 31 (when &lt;shift&gt; = LSL or ROR) or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the "imm5" field as &lt;amount&gt; modulo 32.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="MOV_r_T3, T3C_MOV_r_T3, MOVS_r_T3, T3B_MOVS_r_T3" symboldefcount="3">
      <symbol link="imm3_imm2__2">&lt;amount&gt;</symbol>
      <account encodedin="(imm3 :: imm2)">
        <intro>
          <para>For the "T3 MOV, shift or rotate by value" and "T3 MOVS, shift or rotate by value" variants: is the shift amount, in the range 0 to 31 (when &lt;shift&gt; = LSL) or 1 to 31 (when &lt;shift&gt; = ROR), or 1 to 32 (when &lt;shift&gt; = LSR or ASR), encoded in the "imm3:imm2" field as &lt;amount&gt; modulo 32.</para>
        </intro>
      </account>
    </explanation>
  </explanations>
  <aliastablehook anchor="aliasconditions">Alias Conditions</aliastablehook>
  <ps_section howmany="1">
    <ps name="A32.dp.dpregis.logic3reg_immsh.MOV_r_A1_RRX" sections="1" secttype="Operation">
      <pstext mayhavelinks="1" section="Execute" rep_section="execute">if ConditionPassed() then
    EncodingSpecificOperations();
    let (shifted, carry) : (bits(32), bit) = Shift_C{32}(R(m), shift_t, shift_n, PSTATE.C);
    let result : bits(32) = shifted;
    if d == 15 then
        if setflags then
            ALUExceptionReturn(result);
        else
            ALUWritePC(result);
        end;
    else
        R(d) = result;
        if setflags then
            PSTATE.N = result[31];
            PSTATE.Z = IsZeroBit{32}(result);
            PSTATE.C = carry;
            // PSTATE.V unchanged
        end;
    end;
end;</pstext></ps>
  </ps_section>
  <timestamp>2026-03-12 12:23:09</timestamp>
  <commit_id>2025-09_rel_asl1</commit_id>
</instructionsection>
