<?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_AA64MMFR4_EL1</reg_short_name>
        
        <reg_long_name>AArch64 Memory Model Feature Register 4</reg_long_name>



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




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Provides additional information about implemented memory model and memory management support in AArch64.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
          <reg_group>Identification Registers</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <note><para>Prior to the introduction of the features described by this register, this register was unnamed and reserved, <arm-defined-word>RES0</arm-defined-word> from EL1, EL2, and EL3.</para></note>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>ID_AA64MMFR4_EL1 is a 64-bit register.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="64">
  <text_before_fields/>
  <field id="fieldset_0-63_48" 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>48</field_lsb>
    <rel_range>63:48</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-47_44" 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>SRMASK</field_name>
    <field_msb>47</field_msb>
    <field_lsb>44</field_lsb>
    <rel_range>47:44</rel_range>
    <field_description order="before"><para>Indicates support for bitwise write masks for the following registers:</para>
<list type="unordered">
<listitem><content><register_link state="AArch64" id="AArch64-actlr_el1.xml">ACTLR_EL1</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-cpacr_el1.xml">CPACR_EL1</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-sctlr_el1.xml">SCTLR_EL1</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-sctlr2_el1.xml">SCTLR2_EL1</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-tcr_el1.xml">TCR_EL1</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-tcr2_el1.xml">TCR2_EL1</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-actlr_el2.xml">ACTLR_EL2</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-cptr_el2.xml">CPTR_EL2</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-sctlr_el2.xml">SCTLR_EL2</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-sctlr2_el2.xml">SCTLR2_EL2</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-tcr_el2.xml">TCR_EL2</register_link>.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-tcr2_el2.xml">TCR2_EL2</register_link>.</content>
</listitem></list></field_description>
    <field_description order="after"><para><xref linkend="#FEAT_SRMASK">FEAT_SRMASK</xref> implements the functionality identified by the value <binarynumber>0b0001</binarynumber>.</para>
<para>From Armv9.6, the value <binarynumber>0b0000</binarynumber> is not permitted.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Bitwise write masks for the specified registers are not supported.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Bitwise write masks for the specified registers are supported.</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-43_40" 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>43</field_msb>
    <field_lsb>40</field_lsb>
    <rel_range>43:40</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-39_36" 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>E3DSE</field_name>
    <field_msb>39</field_msb>
    <field_lsb>36</field_lsb>
    <rel_range>39:36</rel_range>
    <field_description order="before">
      <para>Delegated SError exceptions from EL3. Describes support for delegated SError injection from EL3.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para><xref linkend="#FEAT_E3DSE">FEAT_E3DSE</xref> implements the functionality described by the value <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_E3DSE">FEAT_E3DSE</xref> is not implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description><para><xref linkend="#FEAT_E3DSE">FEAT_E3DSE</xref> is implemented. The following are implemented:</para>
<list type="unordered">
<listitem><content>Register fields <register_link state="AArch64" id="AArch64-scr_el3.xml">SCR_EL3</register_link>.DSE and <register_link state="AArch64" id="AArch64-scr_el3.xml">SCR_EL3</register_link>.EnDSE.</content>
</listitem><listitem><content>Registers <register_link state="AArch64" id="AArch64-vsesr_el3.xml">VSESR_EL3</register_link> and <register_link state="AArch64" id="AArch64-vdisr_el3.xml">VDISR_EL3</register_link>.</content>
</listitem></list></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-35_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>35</field_msb>
    <field_lsb>32</field_lsb>
    <rel_range>35: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>RMEGDI</field_name>
    <field_msb>31</field_msb>
    <field_lsb>28</field_lsb>
    <rel_range>31:28</rel_range>
    <field_description order="before">
      <para>RME Granular Data Isolation.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para><xref linkend="#FEAT_RME_GDI">FEAT_RME_GDI</xref> implements the functionality described by the value <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>The Granular Data isolation GPI encodings are reserved.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>The Granular Data Isolation GPI encodings can be configured to be either reserved or No Access from this PE.</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-1" 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" reserved_type="RES0">
    <field_name>E2H0</field_name>
    <field_msb>27</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>3:0</rel_range>
    <field_description order="before">
      <para>Indicates support for programming <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.E2H.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>If <xref linkend="#FEAT_NV">FEAT_NV</xref> is not implemented, then the value <binarynumber>0b1110</binarynumber> is not permitted.</para>
<para>If <xref linkend="#FEAT_E2H0">FEAT_E2H0</xref> is implemented and <xref linkend="#FEAT_VHE">FEAT_VHE</xref> is not implemented, then <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.E2H is <arm-defined-word>RES0</arm-defined-word>.</para>
<para>If <xref linkend="#FEAT_E2H0">FEAT_E2H0</xref> is implemented and <xref linkend="#FEAT_VHE">FEAT_VHE</xref> is implemented, then <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.E2H can be programmed to 0 or 1.</para>
<para>If <xref linkend="#FEAT_E2H0">FEAT_E2H0</xref> is not implemented then:</para>
<list type="unordered">
<listitem><content><xref linkend="#FEAT_VHE">FEAT_VHE</xref> is implemented.</content>
</listitem><listitem><content><register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.E2H is <arm-defined-word>RES1</arm-defined-word> and behaves as though it is 1.</content>
</listitem></list></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_E2H0">FEAT_E2H0</xref> is implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1110</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_E2H0">FEAT_E2H0</xref> is not implemented. <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.NV1 is <arm-defined-word>RES0</arm-defined-word>.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1111</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_E2H0">FEAT_E2H0</xref> is not implemented.</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>
    <fields_condition>When FEAT_AA64EL2 is implemented</fields_condition>
  </field>
  <field id="fieldset_0-27_24-2" 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>27</field_msb>
    <field_lsb>24</field_lsb>
    <rel_range>27:24</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
    <fields_condition>Otherwise</fields_condition>
  </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>NV_frac</field_name>
    <field_msb>23</field_msb>
    <field_lsb>20</field_lsb>
    <rel_range>23:20</rel_range>
    <field_description order="before">
      <para>Indicates support for a subset of <xref linkend="#FEAT_NV">FEAT_NV</xref> and <xref linkend="#FEAT_NV2">FEAT_NV2</xref> behaviors.</para>
    </field_description>
    <field_description order="after">
      <para><xref linkend="#FEAT_NV2p1">FEAT_NV2p1</xref> implements the functionality indicated by the value <binarynumber>0b0010</binarynumber>.</para>
    </field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Support for <xref linkend="#FEAT_NV">FEAT_NV</xref> and <xref linkend="#FEAT_NV2">FEAT_NV2</xref> is described in <register_link state="AArch64" id="AArch64-id_aa64mmfr2_el1.xml">ID_AA64MMFR2_EL1</register_link>.NV.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description><para><xref linkend="#FEAT_NV">FEAT_NV</xref> and <xref linkend="#FEAT_NV2">FEAT_NV2</xref> are implemented, but all of the following apply:</para>
<list type="unordered">
<listitem><content><register_link state="AArch64" id="AArch64-id_aa64mmfr2_el1.xml">ID_AA64MMFR2_EL1</register_link>.NV is <binarynumber>0b0000</binarynumber>.</content>
</listitem><listitem><content>Programming <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{NV, NV2} to {1, 0} behaves as {1, 1}.</content>
</listitem></list></field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0010</field_value>
        <field_value_description>
          <para>As <binarynumber>0b0001</binarynumber> and adds stateful bits in specified _EL1 registers for software usage under nested virtualization.</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>FGWTE3</field_name>
    <field_msb>19</field_msb>
    <field_lsb>16</field_lsb>
    <rel_range>19:16</rel_range>
    <field_description order="before">
      <para>Indicates support for Fine Grained Write Trap EL3 feature.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para><xref linkend="#FEAT_FGWTE3">FEAT_FGWTE3</xref> implements the functionality identified by the value <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Fine Grained Write Trap EL3 is not supported.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Fine Grained Write Trap EL3 is supported.</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>HACDBS</field_name>
    <field_msb>15</field_msb>
    <field_lsb>12</field_lsb>
    <rel_range>15:12</rel_range>
    <field_description order="before">
      <para>Support for Hardware accelerator for cleaning Dirty state.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para><xref linkend="#FEAT_HACDBS">FEAT_HACDBS</xref> implements the functionality identified by the value <binarynumber>0b0001</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>Hardware accelerator for cleaning Dirty state is not supported.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>Hardware accelerator for cleaning Dirty state is supported.</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>ASID2</field_name>
    <field_msb>11</field_msb>
    <field_lsb>8</field_lsb>
    <rel_range>11:8</rel_range>
    <field_description order="before">
      <para>Indicates support for concurrent use of two ASIDs.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>From Armv9.5, the value <binarynumber>0b0000</binarynumber> is not permitted.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_ASID2">FEAT_ASID2</xref> is not implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_ASID2">FEAT_ASID2</xref> is implemented.</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-1" 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" reserved_type="RES0">
    <field_name>EIESB</field_name>
    <field_msb>7</field_msb>
    <field_lsb>4</field_lsb>
    <rel_range>3:0</rel_range>
    <field_description order="before">
      <para>Early Implicit Error Synchronization event. Indicates whether the implicit Error synchronization event inserted on taking an exception to ELx when SCTLR_ELx.IESB is 1 is inserted before or after the exception is taken.</para>
    </field_description>
    <field_description order="after"><para>All other values are reserved.</para>
<para>This field describes the PE behavior on taking an exception to ELx when SCTLR_ELx.IESB is 1. This field does not describe the behavior when SCTLR_ELx.IESB is 0.</para>
<para>The behavior described by this field only applies for the conditions described above. For example, if ID_AA64MMFR4_EL1.EIESB reads as <binarynumber>0b0001</binarynumber>, then it does not describe the behavior when SError exceptions are not routed to EL3, or when <xref linkend="#FEAT_DoubleFault">FEAT_DoubleFault</xref> is implemented and the Effective value of <register_link state="AArch64" id="AArch64-scr_el3.xml">SCR_EL3</register_link>.NMEA is 0.</para>
<para>Inserting the event before the exception is taken means that if the Error synchronization event causes an SError exception to become pending, and SError exceptions are not masked and not disabled, then the SError exception is taken in place of the original exception.</para>
<para>When <xref linkend="#FEAT_IESB">FEAT_IESB</xref> is not implemented, the only permitted value of this field is <binarynumber>0b0000</binarynumber>.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b1111</field_value>
        <field_value_description>
          <para>When <xref linkend="#FEAT_IESB">FEAT_IESB</xref> is implemented and enabled, SError exceptions are routed to EL3, and either <xref linkend="#FEAT_DoubleFault">FEAT_DoubleFault</xref> is not implemented or the Effective value of <register_link state="AArch64" id="AArch64-scr_el3.xml">SCR_EL3</register_link>.NMEA is 1, an implicit Error synchronization event might be inserted after an exception is taken to EL3, unless that exception is also an SError exception.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para><xref linkend="#FEAT_IESB">FEAT_IESB</xref> is not implemented, or behavior is not described.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>When <xref linkend="#FEAT_IESB">FEAT_IESB</xref> is implemented and enabled, SError exceptions are routed to EL3, and either <xref linkend="#FEAT_DoubleFault">FEAT_DoubleFault</xref> is not implemented or the Effective value of <register_link state="AArch64" id="AArch64-scr_el3.xml">SCR_EL3</register_link>.NMEA is 1, an implicit Error synchronization event is inserted before an exception taken to EL3, unless that exception is also an SError exception.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0010</field_value>
        <field_value_description><para>As <binarynumber>0b0001</binarynumber>, and also:</para>
<list type="unordered">
<listitem><content>When <xref linkend="#FEAT_IESB">FEAT_IESB</xref> is implemented and enabled, SError exceptions are routed to EL1, and either <xref linkend="#FEAT_DoubleFault2">FEAT_DoubleFault2</xref> is not implemented or the Effective value of <register_link state="AArch64" id="AArch64-sctlr2_el1.xml">SCTLR2_EL1</register_link>.NMEA is 1, an implicit Error synchronization event is inserted before an exception taken to EL1, unless that exception is also an SError exception.</content>
</listitem><listitem><content>When <xref linkend="#FEAT_IESB">FEAT_IESB</xref> is implemented and enabled, SError exceptions are routed to EL2, and either <xref linkend="#FEAT_DoubleFault2">FEAT_DoubleFault2</xref> is not implemented or the Effective value of <register_link state="AArch64" id="AArch64-sctlr2_el2.xml">SCTLR2_EL2</register_link>.NMEA is 1, an implicit Error synchronization event is inserted before an exception taken to EL2, unless that exception is also an SError exception.</content>
</listitem></list></field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0011</field_value>
        <field_value_description>
          <para>When <xref linkend="#FEAT_IESB">FEAT_IESB</xref> is implemented and enabled, an implicit Error synchronization event is inserted before taking an exception other than an SError exception, regardless of the Effective values of <register_link state="AArch64" id="AArch64-scr_el3.xml">SCR_EL3</register_link>.NMEA and SCTLR2_ELx.NMEA.</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>
    <fields_condition>When FEAT_IESB is implemented</fields_condition>
  </field>
  <field id="fieldset_0-7_4-2" 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>7</field_msb>
    <field_lsb>4</field_lsb>
    <rel_range>7:4</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
    <fields_condition>Otherwise</fields_condition>
  </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>PoPS</field_name>
    <field_msb>3</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>3:0</rel_range>
    <field_description order="before"><para>Support for the clean and invalidate to the Point of Physical Storage instructions:</para>
<list type="unordered">
<listitem><content>
<para><instruction>DC CIVAPS</instruction>.</para>
</content>
</listitem><listitem><content>
<para>If <xref linkend="#FEAT_MTE2">FEAT_MTE2</xref> is implemented, <instruction>DC CIGDVAPS</instruction>.</para>
</content>
</listitem></list></field_description>
    <field_description order="after"><para><xref linkend="#FEAT_PoPS">FEAT_PoPS</xref> implements the functionality described by the value <binarynumber>0b0001</binarynumber>.</para>
<para>All other values are reserved.</para></field_description>
    <field_values impdef="True">
      <field_value_instance>
        <field_value>0b0000</field_value>
        <field_value_description>
          <para>The System instructions to clean and invalidate to the Point of Physical Storage are not implemented.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b0001</field_value>
        <field_value_description>
          <para>The specified System instructions to clean and invalidate to the Point of Physical Storage are implemented.</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>




<reg_fieldset length="64">
  <fieldat id="fieldset_0-63_48" msb="63" lsb="48"/>
  <fieldat id="fieldset_0-47_44" msb="47" lsb="44"/>
  <fieldat id="fieldset_0-43_40" msb="43" lsb="40"/>
  <fieldat id="fieldset_0-39_36" msb="39" lsb="36"/>
  <fieldat id="fieldset_0-35_32" msb="35" lsb="32"/>
  <fieldat id="fieldset_0-31_28" msb="31" lsb="28"/>
  <fieldat id="fieldset_0-27_24-1" 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-1" msb="7" lsb="4"/>
  <fieldat id="fieldset_0-3_0" msb="3" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          






    
        
        <access_mechanism accessor="MRS ID_AA64MMFR4_EL1" type="SystemAccessor">
            <encoding>
            <access_instruction>MRS &lt;Xt&gt;, ID_AA64MMFR4_EL1</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b000"/>
                
                <enc n="CRn" v="0b0000"/>
                
                <enc n="CRm" v="0b0111"/>
                
                <enc n="op2" v="0b100"/>
            </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; (IsFeatureImplemented(FEAT_FGT) || !IsZero(ID_AA64MMFR4_EL1()) || ImpDefBool("ID_AA64MMFR4_EL1 trapped by HCR_EL2.TID3")) &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_AA64MMFR4_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_AA64MMFR4_EL1();
    end;
elsif PSTATE.EL == EL3 then
    X{64}(t) = ID_AA64MMFR4_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>