<?xml version="1.0" ?><?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-2026 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="RFE" title="RFE, RFEDA, RFEDB, RFEIA, RFEIB -- AArch32" type="instruction">
  <docvars>
    <docvar key="instr-class" value="general"/>
    <docvar key="mnemonic" value="RFE"/>
  </docvars>
  <heading>RFE, RFEDA, RFEDB, RFEIA, RFEIB</heading>
  <desc>
    <brief>
      <para>Return From Exception</para>
    </brief>
    <authored>
      <para>Return From Exception loads two consecutive memory locations using
an address in a base register:</para>
      <list type="unordered">
        <listitem>
          <content>The word loaded from the lower address is treated as an instruction address. The PE branches to it.</content>
        </listitem>
        <listitem>
          <content>The word loaded from the higher address is used to restore <xref linkend="ARMARM_CHDEDFDC">PSTATE</xref>. This word must be in the format of an SPSR.</content>
        </listitem>
      </list>
      <para>An address adjusted by the size of the data loaded can optionally be
written back to the base register.</para>
      <para>The PE checks the value of the word loaded from the higher address
for an illegal return event. See <xref linkend="ARMARM_CHDDDJDB">Illegal
return events from AArch32 state</xref>.</para>
      <para><instruction>RFE</instruction> is <arm-defined-word>UNDEFINED</arm-defined-word> in Hyp mode and
<arm-defined-word>CONSTRAINED UNPREDICTABLE</arm-defined-word> in User mode.</para>
    </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>
    <syntaxnotes>
      <para><instruction>RFEFA</instruction>, <instruction>RFEEA</instruction>, <instruction>RFEFD</instruction>, and <instruction>RFEED</instruction> are pseudo-instructions for <instruction>RFEDA</instruction>, <instruction>RFEDB</instruction>, <instruction>RFEIA</instruction>, and <instruction>RFEIB</instruction> respectively, referring to their use for popping data from Full Ascending, Empty Ascending, Full Descending, and Empty Descending stacks.</para>
    </syntaxnotes>
  </desc>
  <alias_list howmany="0"/>
  <classes>
    <classesintro count="3">
      <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> and </txt>
      <a href="#iclass_t2">T2</a>
      <txt>)</txt>
      <txt>.</txt>
    </classesintro>
    <iclass name="A1" oneof="3" 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"/>
        <docvar key="mnemonic" value="RFE"/>
      </docvars>
      <iclassintro count="4"/>
      <regdiagram form="32" psname="A32.brblk.ldstexcept.RFEDA_A1_AS" tworows="1">
        <box hibit="31" width="7" settings="7">
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="24" width="1" name="P" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="23" width="1" name="U" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="22" name="S" usename="1" settings="1" psbits="x">
          <c>0</c>
        </box>
        <box hibit="21" width="1" name="W" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="20" name="L" usename="1" settings="1" psbits="x">
          <c>1</c>
        </box>
        <box hibit="19" width="4" name="Rn" usename="1">
          <c colspan="4"/>
        </box>
        <box hibit="15" width="11" name="op" usename="1" settings="11" psbits="xxxxxxxxxxx">
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(1)</c>
          <c>(0)</c>
          <c>(1)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
        </box>
        <box hibit="4" width="5" name="mode" usename="1" settings="5" psbits="xxxxx">
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
        </box>
      </regdiagram>
      <encoding name="RFEDA_A1_AS" oneofinclass="4" oneof="6" label="Decrement After" bitdiffs="P == 0 &amp;&amp; U == 0">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="ldmstm-mode" value="dec-after"/>
          <docvar key="mnemonic" value="RFE"/>
        </docvars>
        <box hibit="24" width="1" name="P">
          <c>0</c>
        </box>
        <box hibit="23" width="1" name="U">
          <c>0</c>
        </box>
        <asmtemplate comment="Preferred syntax"><text>RFEDA{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
        <asmtemplate comment="Alternate syntax, Full Ascending stack"><text>RFEFA{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
      </encoding>
      <encoding name="RFEDB_A1_AS" oneofinclass="4" oneof="6" label="Decrement Before" bitdiffs="P == 1 &amp;&amp; U == 0">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="ldmstm-mode" value="dec-before"/>
          <docvar key="mnemonic" value="RFE"/>
        </docvars>
        <box hibit="24" width="1" name="P">
          <c>1</c>
        </box>
        <box hibit="23" width="1" name="U">
          <c>0</c>
        </box>
        <asmtemplate comment="Preferred syntax"><text>RFEDB{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
        <asmtemplate comment="Alternate syntax, Empty Ascending stack"><text>RFEEA{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
      </encoding>
      <encoding name="RFEIA_A1_AS" oneofinclass="4" oneof="6" label="Increment After" bitdiffs="P == 0 &amp;&amp; U == 1">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="ldmstm-mode" value="inc-after"/>
          <docvar key="mnemonic" value="RFE"/>
        </docvars>
        <box hibit="24" width="1" name="P">
          <c>0</c>
        </box>
        <box hibit="23" width="1" name="U">
          <c>1</c>
        </box>
        <asmtemplate comment="Preferred syntax"><text>RFE{</text><a hover="For the &quot;Increment After&quot; variant: is an optional suffix to indicate the Increment After variant." link="IA">IA</a><text>}{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
        <asmtemplate comment="Alternate syntax, Full Descending stack"><text>RFEFD{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
      </encoding>
      <encoding name="RFEIB_A1_AS" oneofinclass="4" oneof="6" label="Increment Before" bitdiffs="P == 1 &amp;&amp; U == 1">
        <docvars>
          <docvar key="armarmheading" value="A1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A32"/>
          <docvar key="ldmstm-mode" value="inc-before"/>
          <docvar key="mnemonic" value="RFE"/>
        </docvars>
        <box hibit="24" width="1" name="P">
          <c>1</c>
        </box>
        <box hibit="23" width="1" name="U">
          <c>1</c>
        </box>
        <asmtemplate comment="Preferred syntax"><text>RFEIB{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
        <asmtemplate comment="Alternate syntax, Empty Descending stack"><text>RFEED{</text><a hover="For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see x[Standard assembler syntax fields](Babbefhf). &lt;c&gt; must be AL or omitted." link="AL_option">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="A32.brblk.ldstexcept.RFEDA_A1_AS" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let n : integer = UInt(Rn);
let wback : boolean = (W == '1');
let increment : boolean = (U == '1');
let wordhigher : boolean = (P == U);
if n == 15 then UnpredictableProcedure(); end;</pstext></ps>
      </ps_section>
    </iclass>
    <iclass name="T1" oneof="3" 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="ldmstm-mode" value="dec-before"/>
        <docvar key="mnemonic" value="RFE"/>
      </docvars>
      <iclassintro count="1"/>
      <regdiagram form="16x2" psname="T32.w.ldstm.RFE_T1_AS" tworows="1">
        <box hibit="31" width="3" settings="3">
          <c>1</c>
          <c>1</c>
          <c>1</c>
        </box>
        <box hibit="28" width="4" settings="4">
          <c>0</c>
          <c>1</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="24" width="2" name="opc" usename="1" settings="2" psbits="xx">
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="22" width="1" settings="1">
          <c>0</c>
        </box>
        <box hibit="21" width="1" name="W" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="20" name="L" usename="1" settings="1" psbits="x">
          <c>1</c>
        </box>
        <box hibit="19" width="4" name="Rn" usename="1">
          <c colspan="4"/>
        </box>
        <box hibit="15" name="P" usename="1" settings="1" psbits="x">
          <c>(1)</c>
        </box>
        <box hibit="14" name="M" usename="1" settings="1" psbits="x">
          <c>(1)</c>
        </box>
        <box hibit="13" width="14" name="register_list" usename="1" settings="14" psbits="xxxxxxxxxxxxxx">
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
        </box>
      </regdiagram>
      <encoding name="RFE_T1_AS" oneofinclass="1" oneof="6" label="">
        <docvars>
          <docvar key="armarmheading" value="T1"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="ldmstm-mode" value="dec-before"/>
          <docvar key="mnemonic" value="RFE"/>
        </docvars>
        <asmtemplate comment="Outside or last in IT block, preferred syntax"><text>RFEDB{</text><a hover="For the &quot;T1&quot; and &quot;T2&quot; variants: see x[Standard assembler syntax fields](Babbefhf)." link="AL_option__6">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
        <asmtemplate comment="Outside or last in IT block, alternate syntax, Full Ascending stack"><text>RFEFA{</text><a hover="For the &quot;T1&quot; and &quot;T2&quot; variants: see x[Standard assembler syntax fields](Babbefhf)." link="AL_option__6">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="T32.w.ldstm.RFE_T1_AS" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let n : integer = UInt(Rn);
let wback : boolean = (W == '1');
let increment : boolean = FALSE;
let wordhigher : boolean = FALSE;
if n == 15 then UnpredictableProcedure(); end;
if <a link="func_InITBlock_0" file="shared_pseudocode.xml">InITBlock</a>() &amp;&amp; !<a link="func_LastInITBlock_0" file="shared_pseudocode.xml">LastInITBlock</a>() then UnpredictableProcedure(); end;</pstext></ps>
      </ps_section>
    </iclass>
    <iclass name="T2" oneof="3" 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="ldmstm-mode" value="inc-after"/>
        <docvar key="mnemonic" value="RFE"/>
      </docvars>
      <iclassintro count="1"/>
      <regdiagram form="16x2" psname="T32.w.ldstm.RFE_T2_AS" tworows="1">
        <box hibit="31" width="3" settings="3">
          <c>1</c>
          <c>1</c>
          <c>1</c>
        </box>
        <box hibit="28" width="4" settings="4">
          <c>0</c>
          <c>1</c>
          <c>0</c>
          <c>0</c>
        </box>
        <box hibit="24" width="2" name="opc" usename="1" settings="2" psbits="xx">
          <c>1</c>
          <c>1</c>
        </box>
        <box hibit="22" width="1" settings="1">
          <c>0</c>
        </box>
        <box hibit="21" width="1" name="W" usename="1">
          <c colspan="1"/>
        </box>
        <box hibit="20" name="L" usename="1" settings="1" psbits="x">
          <c>1</c>
        </box>
        <box hibit="19" width="4" name="Rn" usename="1">
          <c colspan="4"/>
        </box>
        <box hibit="15" name="P" usename="1" settings="1" psbits="x">
          <c>(1)</c>
        </box>
        <box hibit="14" name="M" usename="1" settings="1" psbits="x">
          <c>(1)</c>
        </box>
        <box hibit="13" width="14" name="register_list" usename="1" settings="14" psbits="xxxxxxxxxxxxxx">
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
          <c>(0)</c>
        </box>
      </regdiagram>
      <encoding name="RFE_T2_AS" oneofinclass="1" oneof="6" label="">
        <docvars>
          <docvar key="armarmheading" value="T2"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="T32"/>
          <docvar key="ldmstm-mode" value="inc-after"/>
          <docvar key="mnemonic" value="RFE"/>
        </docvars>
        <asmtemplate comment="Outside or last in IT block, preferred syntax"><text>RFE{</text><a hover="For the &quot;T2&quot; variant: is an optional suffix for the Increment After form." link="IA__4">IA</a><text>}{</text><a hover="For the &quot;T1&quot; and &quot;T2&quot; variants: see x[Standard assembler syntax fields](Babbefhf)." link="AL_option__6">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
        <asmtemplate comment="Outside or last in IT block, alternate syntax, Full Descending stack"><text>RFEFD{</text><a hover="For the &quot;T1&quot; and &quot;T2&quot; variants: see x[Standard assembler syntax fields](Babbefhf)." link="AL_option__6">&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="Is the general-purpose base register, encoded in the &quot;Rn&quot; field." link="Rn__12">&lt;Rn&gt;</a><text>{</text><a hover="The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0." link="bang_choice">!</a><text>}</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="T32.w.ldstm.RFE_T2_AS" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let n : integer = UInt(Rn);
let wback : boolean = (W == '1');
let increment : boolean = TRUE;
let wordhigher : boolean = FALSE;
if n == 15 then UnpredictableProcedure(); end;
if <a link="func_InITBlock_0" file="shared_pseudocode.xml">InITBlock</a>() &amp;&amp; !<a link="func_LastInITBlock_0" file="shared_pseudocode.xml">LastInITBlock</a>() then UnpredictableProcedure(); end;</pstext></ps>
      </ps_section>
    </iclass>
  </classes>
  <explanations scope="all">
    <explanation enclist="RFEDA_A1_AS, A1B_RFEDA_A1_AS, RFEDB_A1_AS, A1B_RFEDB_A1_AS, RFEIA_A1_AS, A1B_RFEIA_A1_AS, RFEIB_A1_AS, A1B_RFEIB_A1_AS" symboldefcount="1">
      <symbol link="AL_option">&lt;c&gt;</symbol>
      <account encodedin="">
        <intro>
          <para>For the &quot;A1 Decrement After&quot;, &quot;A1 Decrement Before&quot;, &quot;A1 Increment After&quot;, and &quot;A1 Increment Before&quot; variants: see <xref linkend="Babbefhf">Standard assembler syntax fields</xref>. <syntax>&lt;c&gt;</syntax> must be <value>AL</value> or omitted.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="RFE_T1_AS, T1B_RFE_T1_AS, RFE_T2_AS, T2B_RFE_T2_AS" symboldefcount="2">
      <symbol link="AL_option__6">&lt;c&gt;</symbol>
      <account encodedin="">
        <intro>
          <para>For the &quot;T1&quot; and &quot;T2&quot; variants: see <xref linkend="Babbefhf">Standard assembler syntax fields</xref>.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="RFEDA_A1_AS, A1B_RFEDA_A1_AS, RFEDB_A1_AS, A1B_RFEDB_A1_AS, RFEIA_A1_AS, A1B_RFEIA_A1_AS, RFEIB_A1_AS, A1B_RFEIB_A1_AS, RFE_T1_AS, T1B_RFE_T1_AS, RFE_T2_AS, T2B_RFE_T2_AS" 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="RFEDA_A1_AS, A1B_RFEDA_A1_AS, RFEDB_A1_AS, A1B_RFEDB_A1_AS, RFEIA_A1_AS, A1B_RFEIA_A1_AS, RFEIB_A1_AS, A1B_RFEIB_A1_AS, RFE_T1_AS, T1B_RFE_T1_AS, RFE_T2_AS, T2B_RFE_T2_AS" symboldefcount="1">
      <symbol link="Rn__12">&lt;Rn&gt;</symbol>
      <account encodedin="Rn">
        <intro>
          <para>Is the general-purpose base register, encoded in the &quot;Rn&quot; field.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="RFEDA_A1_AS, A1B_RFEDA_A1_AS, RFEDB_A1_AS, A1B_RFEDB_A1_AS, RFEIA_A1_AS, A1B_RFEIA_A1_AS, RFEIB_A1_AS, A1B_RFEIB_A1_AS, RFE_T1_AS, T1B_RFE_T1_AS, RFE_T2_AS, T2B_RFE_T2_AS" symboldefcount="1">
      <symbol link="bang_choice">!</symbol>
      <account encodedin="W">
        <intro>
          <para>The address adjusted by the size of the data loaded is written back to the base register. If specified, it is encoded in the &quot;W&quot; field as 1, otherwise this field defaults to 0.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="RFEIA_A1_AS" symboldefcount="1">
      <symbol link="IA">IA</symbol>
      <account encodedin="">
        <intro>
          <para>For the &quot;Increment After&quot; variant: is an optional suffix to indicate the Increment After variant.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="RFE_T2_AS" symboldefcount="2">
      <symbol link="IA__4">IA</symbol>
      <account encodedin="">
        <intro>
          <para>For the &quot;T2&quot; variant: is an optional suffix for the Increment After form.</para>
        </intro>
      </account>
    </explanation>
  </explanations>
  <ps_section howmany="1">
    <ps name="A32.brblk.ldstexcept.RFEDA_A1_AS" sections="1" secttype="Operation">
      <pstext mayhavelinks="1" section="Execute" rep_section="execute">if <a link="func_ConditionPassed_0" file="shared_pseudocode.xml">ConditionPassed</a>() then
    EncodingSpecificOperations();
    if <a link="global_PSTATE" file="shared_pseudocode.xml">PSTATE</a>.EL == <a link="global_EL2" file="shared_pseudocode.xml">EL2</a> then
        Undefined();
    elsif <a link="global_PSTATE" file="shared_pseudocode.xml">PSTATE</a>.EL == <a link="global_EL0" file="shared_pseudocode.xml">EL0</a> then
        UnpredictableProcedure();                        // UNDEFINED or NOP
    else
        var address : bits(32) = if increment then <a link="accessor_R_1" file="shared_pseudocode.xml">R</a>(n) else <a link="accessor_R_1" file="shared_pseudocode.xml">R</a>(n)-8;
        if wordhigher then address = address+4; end;
        let new_pc_value : bits(32) = <a link="accessor_MemA_2" file="shared_pseudocode.xml">MemA</a>{32}(address);
        let spsr : bits(32) = <a link="accessor_MemA_2" file="shared_pseudocode.xml">MemA</a>{32}(address+4);
        if wback then <a link="accessor_R_1" file="shared_pseudocode.xml">R</a>(n) = if increment then <a link="accessor_R_1" file="shared_pseudocode.xml">R</a>(n)+8 else <a link="accessor_R_1" file="shared_pseudocode.xml">R</a>(n)-8; end;
        <a link="func_AArch32_ExceptionReturn_2" file="shared_pseudocode.xml">AArch32_ExceptionReturn</a>(new_pc_value, spsr);
    end;
end;</pstext></ps>
  </ps_section>
  <constrained_unpredictables ps_block="Operation">
    <cu_case>
      <cu_cause>
        <pstext mayhavelinks="1">PSTATE.EL == EL0</pstext></cu_cause>
      <cu_type constraint="Constraint_UNDEF"/>
      <cu_type constraint="Constraint_NOP"/>
    </cu_case>
  </constrained_unpredictables>
  <timestamp>2026-03-26 20:27:25</timestamp>
  <commit_id>2026-03_rel</commit_id>
</instructionsection>