<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE register_page SYSTEM "registers.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. -->
<!--The data contained in this document is preliminary and subject to change or correction following further review. -->
<?xml-stylesheet href="one_register.xsl" type="text/xsl" ?>







<register_page>
  <registers>
  
    <register execution_state="AArch64" is_register="True" is_internal="True" is_stub_entry="False">
      <reg_short_name>ID_ISAR3_EL1</reg_short_name>
        
        <reg_long_name>AArch32 Instruction Set Attribute Register 3</reg_long_name>



      
            <reg_condition otherwise="UNDEFINED">when FEAT_AA64 is implemented</reg_condition>
      




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        



    
      
      <reg_mapping>
        
  

    

  

    <mapped_name filename="AArch32-id_isar3.xml">ID_ISAR3</mapped_name>
  <mapped_type>Architectural</mapped_type>
      <mapped_execution_state>AArch32</mapped_execution_state>
    <mapped_from_startbit>31</mapped_from_startbit>
    <mapped_from_endbit>0</mapped_from_endbit>
    <mapped_to_startbit>31</mapped_to_startbit>
    <mapped_to_endbit>0</mapped_to_endbit>
    <mapped_from_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_from_rangeset>
    <mapped_to_rangeset output="31:0">
      <range>
        <msb>31</msb>
        <lsb>0</lsb>
      </range>
    </mapped_to_rangeset>

      </reg_mapping>

      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Provides information about the instruction sets implemented by the PE in AArch32 state.</para>

      </purpose_text>
      <purpose_text>
        <para>Must be interpreted with <register_link state="AArch64" id="AArch64-id_isar0_el1.xml">ID_ISAR0_EL1</register_link>, <register_link state="AArch64" id="AArch64-id_isar1_el1.xml">ID_ISAR1_EL1</register_link>, <register_link state="AArch64" id="AArch64-id_isar2_el1.xml">ID_ISAR2_EL1</register_link>, <register_link state="AArch64" id="AArch64-id_isar4_el1.xml">ID_ISAR4_EL1</register_link>, and <register_link state="AArch64" id="AArch64-id_isar5_el1.xml">ID_ISAR5_EL1</register_link>. </para>

      </purpose_text>
      <purpose_text>
        <para>For general information about the interpretation of the ID registers see <xref linkend="#BABFAFHI">'Principles of the ID scheme for fields in ID registers'</xref>.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
          <reg_group>Identification Registers</reg_group>
      </reg_groups>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>ID_ISAR3_EL1 is a 64-bit register.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="64">
  <fields_condition>When FEAT_AA32 is implemented</fields_condition>
  <text_before_fields/>
  <field id="fieldset_0-63_32" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="False" is_partial_field="False" is_conditional_field_name="False" rwtype="RES0">
    <field_msb>63</field_msb>
    <field_lsb>32</field_lsb>
    <rel_range>63:32</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
  </field>
  <field id="fieldset_0-31_28" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>T32EE</field_name>
    <field_msb>31</field_msb>
    <field_lsb>28</field_lsb>
    <rel_range>31:28</rel_range>
    <field_description order="before">
      <para>Indicates the implemented T32EE instructions.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0000</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>None implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds the ENTERX and LEAVEX instructions, and modifies the load behavior to include null checking.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-27_24" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>TrueNOP</field_name>
    <field_msb>27</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>27:24</rel_range>
    <field_description order="before">
      <para>Indicates the implemented true NOP instructions.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>None implemented. This means there are no NOP instructions that do not have any register dependencies.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds true NOP instructions in both the T32 and A32 instruction sets. This also permits additional NOP-compatible hints.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-23_20" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>T32Copy</field_name>
    <field_msb>23</field_msb>
    <field_lsb>20</field_lsb>
    <rel_range>23:20</rel_range>
    <field_description order="before">
      <para>Indicates the support for T32 non flag-setting MOV instructions.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Not supported. This means that in the T32 instruction set, encoding T1 of the MOV (register) instruction does not support a copy from a low register to a low register.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds support for T32 instruction set encoding T1 of the MOV (register) instruction, copying from a low register to a low register.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-19_16" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>TabBranch</field_name>
    <field_msb>19</field_msb>
    <field_lsb>16</field_lsb>
    <rel_range>19:16</rel_range>
    <field_description order="before">
      <para>Indicates the implemented Table Branch instructions in the T32 instruction set.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>None implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds the TBB and TBH instructions.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-15_12" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>SynchPrim</field_name>
    <field_msb>15</field_msb>
    <field_lsb>12</field_lsb>
    <rel_range>15:12</rel_range>
    <field_description order="before">
      <para>Used in conjunction with ID_ISAR4.SynchPrim_frac to indicate the implemented Synchronization Primitive instructions.</para>
    </field_description>
    <field_description order="after"><para>All other combinations of SynchPrim and SynchPrim_frac are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0010</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>If SynchPrim_frac == <binarynumber>0b0000</binarynumber>, no Synchronization Primitives implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description><para>If SynchPrim_frac == <binarynumber>0b0000</binarynumber>, adds the LDREX and STREX instructions.</para>
<para>If SynchPrim_frac == <binarynumber>0b0011</binarynumber>, also adds the CLREX, LDREXB, STREXB, and STREXH instructions.</para></field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0010</field_value>
        <field_value_description>
          <para>If SynchPrim_frac == <binarynumber>0b0000</binarynumber>, as for [<binarynumber>0b0001</binarynumber>, <binarynumber>0b0011</binarynumber>] and also adds the LDREXD and STREXD instructions.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-11_8" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>SVC</field_name>
    <field_msb>11</field_msb>
    <field_lsb>8</field_lsb>
    <rel_range>11:8</rel_range>
    <field_description order="before">
      <para>Indicates the implemented SVC instructions.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Not implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds the SVC instruction.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-7_4" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>SIMD</field_name>
    <field_msb>7</field_msb>
    <field_lsb>4</field_lsb>
    <rel_range>7:4</rel_range>
    <field_description order="before">
      <para>Indicates the implemented SIMD instructions.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0011</binarynumber>.</para>
<para>The SIMD field relates only to implemented instructions that perform SIMD operations on the general-purpose registers. In an implementation that supports Advanced SIMD and floating-point instructions, <register_link state="AArch32" id="AArch32-mvfr0.xml">MVFR0</register_link>, <register_link state="AArch32" id="AArch32-mvfr1.xml">MVFR1</register_link>, and <register_link state="AArch32" id="AArch32-mvfr2.xml">MVFR2</register_link> give information about the implemented Advanced SIMD instructions.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>None implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds the SSAT and USAT instructions, and the Q bit in the PSRs.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0011</field_value>
        <field_value_description>
          <para>As for <binarynumber>0b0001</binarynumber>, and adds the PKHBT, PKHTB, QADD16, QADD8, QASX, QSUB16, QSUB8, QSAX, SADD16, SADD8, SASX, SEL, SHADD16, SHADD8, SHASX, SHSUB16, SHSUB8, SHSAX, SSAT16, SSUB16, SSUB8, SSAX, SXTAB16, SXTB16, UADD16, UADD8, UASX, UHADD16, UHADD8, UHASX, UHSUB16, UHSUB8, UHSAX, UQADD16, UQADD8, UQASX, UQSUB16, UQSUB8, UQSAX, USAD8, USADA8, USAT16, USUB16, USUB8, USAX, UXTAB16, and UXTB16 instructions. Also adds support for the GE[3:0] bits in the PSRs.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <field id="fieldset_0-3_0" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="True" is_partial_field="False" is_conditional_field_name="False">
    <field_name>Saturate</field_name>
    <field_msb>3</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>3:0</rel_range>
    <field_description order="before">
      <para>Indicates the implemented Saturate instructions.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>In Armv8-A, the only permitted value is <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>None implemented. This means no non-Advanced SIMD saturate instructions are implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Adds the QADD, QDADD, QDSUB, and QSUB instructions, and the Q bit in the PSRs.</para>
        </field_value_description>
      </field_value_instance>
    </field_values>
    <field_access>
      <field_access_state>
        <field_access_type>RO</field_access_type>
      </field_access_state>
    </field_access>
  </field>
  <text_after_fields/>
</fields>



<fields id="fieldset_1" length="64">
  <fields_condition/>
  <text_before_fields/>
  <field id="fieldset_1-63_0" has_partial_fieldset="False" is_linked_to_partial_fieldset="False" is_access_restriction_possible="False" is_variable_length="False" is_constant_value="False" is_partial_field="False" is_conditional_field_name="False" rwtype="UNKNOWN">
    <field_msb>63</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>63:0</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>UNKNOWN</arm-defined-word>.</para>
    </field_description>
  </field>
  <text_after_fields/>
</fields>





<reg_fieldset length="64">
  <fields_condition>When FEAT_AA32 is implemented</fields_condition>
  <fieldat id="fieldset_0-63_32" msb="63" lsb="32"/>
  <fieldat id="fieldset_0-31_28" msb="31" lsb="28"/>
  <fieldat id="fieldset_0-27_24" msb="27" lsb="24"/>
  <fieldat id="fieldset_0-23_20" msb="23" lsb="20"/>
  <fieldat id="fieldset_0-19_16" msb="19" lsb="16"/>
  <fieldat id="fieldset_0-15_12" msb="15" lsb="12"/>
  <fieldat id="fieldset_0-11_8" msb="11" lsb="8"/>
  <fieldat id="fieldset_0-7_4" msb="7" lsb="4"/>
  <fieldat id="fieldset_0-3_0" msb="3" lsb="0"/>
</reg_fieldset>

<reg_fieldset length="64">
  <fields_condition/>
  <fieldat id="fieldset_1-63_0" msb="63" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          






    
        
        <access_mechanism accessor="MRS ID_ISAR3_EL1" type="SystemAccessor">
            <encoding>
            <access_instruction>MRS &lt;Xt&gt;, ID_ISAR3_EL1</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b000"/>
                
                <enc n="CRn" v="0b0000"/>
                
                <enc n="CRm" v="0b0010"/>
                
                <enc n="op2" v="0b011"/>
            </encoding>
            <access_permission>
                <ps name="MRS" sections="1" secttype="access_permission">
                <pstext>
if !IsFeatureImplemented(FEAT_AA64) then
    UnimplementedIDRegister();
elsif PSTATE.EL == EL0 then
    if IsFeatureImplemented(FEAT_IDST) then
        if EL2Enabled() &amp;&amp; HCR_EL2().TGE == '1' then
            AArch64_SystemAccessTrap(EL2, 0x18);
        else
            AArch64_SystemAccessTrap(EL1, 0x18);
        end;
    else
        Undefined();
    end;
elsif PSTATE.EL == EL1 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_IDTE3) &amp;&amp; SCR_EL3().TID3 == '1' then
        Undefined();
    elsif EL2Enabled() &amp;&amp; HCR_EL2().TID3 == '1' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_IDTE3) &amp;&amp; SCR_EL3().TID3 == '1' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_SystemAccessTrap(EL3, 0x18);
        end;
    else
        X{64}(t) = ID_ISAR3_EL1();
    end;
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; EL3SDDUndefPriority() &amp;&amp; IsFeatureImplemented(FEAT_IDTE3) &amp;&amp; SCR_EL3().TID3 == '1' then
        Undefined();
    elsif HaveEL(EL3) &amp;&amp; IsFeatureImplemented(FEAT_IDTE3) &amp;&amp; SCR_EL3().TID3 == '1' then
        if EL3SDDUndef() then
            Undefined();
        else
            AArch64_SystemAccessTrap(EL3, 0x18);
        end;
    else
        X{64}(t) = ID_ISAR3_EL1();
    end;
elsif PSTATE.EL == EL3 then
    X{64}(t) = ID_ISAR3_EL1();
end;
                </pstext>
                </ps>
            </access_permission>
        </access_mechanism>

      </access_mechanisms>

      <arch_variants>
      </arch_variants>
  </register>
</registers>
<timestamp>2026-03-26 20:27:25</timestamp>
<commit_id>2026-03_rel</commit_id>
</register_page>