<?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>HSTR_EL2</reg_short_name>
        
        <reg_long_name>Hypervisor System Trap Register</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-hstr.xml">HSTR</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>Controls trapping to EL2 of EL1 or lower AArch32 accesses to the System register in the coproc == <binarynumber>0b1111</binarynumber> encoding space, by the CRn value used to access the register using MCR or MRC instruction. When the register is accessible using an MCRR or MRRC instruction, this is the CRm value used to access the register.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>Virt</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>If EL2 is not implemented, this register is <arm-defined-word>RES0</arm-defined-word> from EL3.</para>

      </configuration_text>
      <configuration_text>
        <para>This register has no effect if EL2 is not enabled in the current Security state.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>HSTR_EL2 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_16" 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>16</field_lsb>
    <rel_range>63:16, 14, 4</rel_range>
    <field_description order="before"/>
    <field_description order="before">
      <para>Reserved, <arm-defined-word>RES0</arm-defined-word>.</para>
    </field_description>
    <field_rangesets>
      <field_rangeset>
        <field_msb>63</field_msb>
        <field_lsb>16</field_lsb>
      </field_rangeset>
      <field_rangeset>
        <field_msb>14</field_msb>
        <field_lsb>14</field_lsb>
      </field_rangeset>
      <field_rangeset>
        <field_msb>4</field_msb>
        <field_lsb>4</field_lsb>
      </field_rangeset>
    </field_rangesets>
  </field>
  <field id="fieldset_0-15_15" 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">
    <field_name>T&lt;n&gt;</field_name>
    <field_msb>15</field_msb>
    <field_lsb>15</field_lsb>
    <rel_range>15, 13:5, 3:0</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
    <field_rangesets>
      <field_rangeset>
        <field_msb>15</field_msb>
        <field_lsb>15</field_lsb>
      </field_rangeset>
      <field_rangeset>
        <field_msb>13</field_msb>
        <field_lsb>5</field_lsb>
      </field_rangeset>
      <field_rangeset>
        <field_msb>3</field_msb>
        <field_lsb>0</field_lsb>
      </field_rangeset>
    </field_rangesets>
    <field_array_indexes index_variable="n" element_size="1" range_specifier="n">
      <field_array_index>
        <field_array_start>15</field_array_start>
        <field_array_end>15</field_array_end>
      </field_array_index>
      <field_array_index>
        <field_array_start>13</field_array_start>
        <field_array_end>5</field_array_end>
      </field_array_index>
      <field_array_index>
        <field_array_start>3</field_array_start>
        <field_array_end>0</field_array_end>
      </field_array_index>
    </field_array_indexes>
    <field_values impdef="False">
      <field_value_name>T&lt;n&gt;</field_value_name>
      <field_value_instance>
        <field_value>0b0</field_value>
        <field_value_description>
          <para>This control has no effect on EL0 or EL1 accesses to System registers.</para>
        </field_value_description>
      </field_value_instance>
      <field_value_instance>
        <field_value>0b1</field_value>
        <field_value_description><para>System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space and <syntax>CRn</syntax> == &lt;n&gt; or <syntax>CRm</syntax> == &lt;n&gt; where T&lt;n&gt; is the name of this field, are trapped as follows:</para>
<list type="unordered">
<listitem><content>
<para>An EL1 MCR or MRC access is trapped to EL2.</para>
</content>
</listitem><listitem><content>
<para>An EL0 MCR or MRC access is trapped to EL2, if the access is not <arm-defined-word>UNDEFINED</arm-defined-word> when the value of this field is 0.</para>
</content>
</listitem><listitem><content>
<para>An EL1 MCRR or MRRC access is trapped to EL2.</para>
</content>
</listitem><listitem><content>
<para>An EL0 MCRR or MRRC access is trapped to EL2, if the access is not <arm-defined-word>UNDEFINED</arm-defined-word> when the value of this field is 0.</para>
</content>
</listitem></list>
<para>It is <arm-defined-word>IMPLEMENTATION DEFINED</arm-defined-word> whether an EL0 access using AArch32 is trapped to EL2, or is <arm-defined-word>UNDEFINED</arm-defined-word>.</para>
<para>If the access is <arm-defined-word>UNDEFINED</arm-defined-word>, and generates an exception that is taken to EL1 or EL2 using AArch64, this is reported with EC syndrome value <hexnumber>0x00</hexnumber>.</para>
<note><para>Arm expects that trapping to EL2 of EL0 accesses to these registers is unusual and used only when the hypervisor must virtualize EL0 operation. Arm recommends that, whenever possible, EL0 accesses to these registers behave as they would if the implementation did not include EL2. This means that, if the architecture does not support the EL0 access, then the register access instruction is treated as <arm-defined-word>UNDEFINED</arm-defined-word> and generates an exception that is taken to EL1.</para></note></field_value_description>
      </field_value_instance>
    </field_values>
    <field_resets>
      <field_reset reset_type="Warm">
        <field_reset_standard_text>AU</field_reset_standard_text>
      </field_reset>
    </field_resets>
  </field>
  <field id="fieldset_0-15_0-15_15" 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" is_expansion="True">
    <field_name>T15</field_name>
    <field_msb>15</field_msb>
    <field_lsb>15</field_lsb>
    <rel_range>13</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-14_14" 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" is_expansion="True" rwtype="RES0">
    <field_msb>14</field_msb>
    <field_lsb>14</field_lsb>
    <rel_range>63:16, 14, 4</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-15_0-13_13" 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" is_expansion="True">
    <field_name>T13</field_name>
    <field_msb>13</field_msb>
    <field_lsb>13</field_lsb>
    <rel_range>13</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-12_12" 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" is_expansion="True">
    <field_name>T12</field_name>
    <field_msb>12</field_msb>
    <field_lsb>12</field_lsb>
    <rel_range>12</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-11_11" 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" is_expansion="True">
    <field_name>T11</field_name>
    <field_msb>11</field_msb>
    <field_lsb>11</field_lsb>
    <rel_range>11</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-10_10" 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" is_expansion="True">
    <field_name>T10</field_name>
    <field_msb>10</field_msb>
    <field_lsb>10</field_lsb>
    <rel_range>10</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-9_9" 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" is_expansion="True">
    <field_name>T9</field_name>
    <field_msb>9</field_msb>
    <field_lsb>9</field_lsb>
    <rel_range>9</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-8_8" 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" is_expansion="True">
    <field_name>T8</field_name>
    <field_msb>8</field_msb>
    <field_lsb>8</field_lsb>
    <rel_range>8</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-7_7" 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" is_expansion="True">
    <field_name>T7</field_name>
    <field_msb>7</field_msb>
    <field_lsb>7</field_lsb>
    <rel_range>7</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-6_6" 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" is_expansion="True">
    <field_name>T6</field_name>
    <field_msb>6</field_msb>
    <field_lsb>6</field_lsb>
    <rel_range>6</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-5_5" 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" is_expansion="True">
    <field_name>T5</field_name>
    <field_msb>5</field_msb>
    <field_lsb>5</field_lsb>
    <rel_range>5</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-4_4" 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" is_expansion="True" rwtype="RES0">
    <field_msb>4</field_msb>
    <field_lsb>4</field_lsb>
    <rel_range>63:16, 14, 4</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-15_0-3_3" 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" is_expansion="True">
    <field_name>T3</field_name>
    <field_msb>3</field_msb>
    <field_lsb>3</field_lsb>
    <rel_range>3</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-2_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" is_expansion="True">
    <field_name>T2</field_name>
    <field_msb>2</field_msb>
    <field_lsb>2</field_lsb>
    <rel_range>2</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-1_1" 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" is_expansion="True">
    <field_name>T1</field_name>
    <field_msb>1</field_msb>
    <field_lsb>1</field_lsb>
    <rel_range>1</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </field>
  <field id="fieldset_0-15_0-0_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" is_expansion="True">
    <field_name>T0</field_name>
    <field_msb>0</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>0</rel_range>
    <field_description order="before"><para>The remaining fields control whether EL0 and EL1 accesses, using MCR, MRC, MCRR, and MRRC instructions, to the System registers in the coproc == <binarynumber>0b1111</binarynumber> encoding space, are trapped to EL2 as follows:</para>
<list type="unordered">
<listitem><content>MCR or MRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x03</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem><listitem><content>MCRR or MRRC accesses to these registers that are trapped to EL2 are reported using EC syndrome value <hexnumber>0x04</hexnumber>, unless the access is <arm-defined-word>UNDEFINED</arm-defined-word>.</content>
</listitem></list></field_description>
    <field_description order="after"><para>For example, when HSTR_EL2.T7 is 1, for instructions executed at EL1:</para>
<list type="unordered">
<listitem><content>An MCR or MRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRn&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem><listitem><content>An MCRR or MRRC instruction with coproc set to <binarynumber>0b1111</binarynumber> and <syntax>&lt;CRm&gt;</syntax> set to c7 is trapped to EL2.</content>
</listitem></list>
<para>When the Effective value of <register_link state="AArch64" id="AArch64-hcr_el2.xml">HCR_EL2</register_link>.{E2H, TGE} is {1, 1}, this field behaves as 0 for all purposes other than a direct read of the value of this bit.</para></field_description>
  </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="RES0">
    <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>RES0</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_16" msb="63" lsb="16"/>
  <fieldat id="fieldset_0-15_15" label="T15" msb="15" lsb="15"/>
  <fieldat id="fieldset_0-63_16" msb="14" lsb="14"/>
  <fieldat id="fieldset_0-15_15" label="T13" msb="13" lsb="13"/>
  <fieldat id="fieldset_0-15_15" label="T12" msb="12" lsb="12"/>
  <fieldat id="fieldset_0-15_15" label="T11" msb="11" lsb="11"/>
  <fieldat id="fieldset_0-15_15" label="T10" msb="10" lsb="10"/>
  <fieldat id="fieldset_0-15_15" label="T9" msb="9" lsb="9"/>
  <fieldat id="fieldset_0-15_15" label="T8" msb="8" lsb="8"/>
  <fieldat id="fieldset_0-15_15" label="T7" msb="7" lsb="7"/>
  <fieldat id="fieldset_0-15_15" label="T6" msb="6" lsb="6"/>
  <fieldat id="fieldset_0-15_15" label="T5" msb="5" lsb="5"/>
  <fieldat id="fieldset_0-63_16" msb="4" lsb="4"/>
  <fieldat id="fieldset_0-15_15" label="T3" msb="3" lsb="3"/>
  <fieldat id="fieldset_0-15_15" label="T2" msb="2" lsb="2"/>
  <fieldat id="fieldset_0-15_15" label="T1" msb="1" lsb="1"/>
  <fieldat id="fieldset_0-15_15" label="T0" msb="0" 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 HSTR_EL2" type="SystemAccessor">
            <encoding>
            <access_instruction>MRS &lt;Xt&gt;, HSTR_EL2</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b100"/>
                
                <enc n="CRn" v="0b0001"/>
                
                <enc n="CRm" v="0b0001"/>
                
                <enc n="op2" v="0b011"/>
            </encoding>
            <access_permission>
                <ps name="MRS" sections="1" secttype="access_permission">
                <pstext>
if !IsFeatureImplemented(FEAT_AA64) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if EffectiveHCR_EL2_NVx() IN {'1x1'} then
        X{64}(t) = NVMem(0x080);
    elsif EffectiveHCR_EL2_NVx() IN {'xx1'} then
        AArch64_SystemAccessTrap(EL2, 0x18);
    else
        Undefined();
    end;
elsif PSTATE.EL == EL2 then
    X{64}(t) = HSTR_EL2();
elsif PSTATE.EL == EL3 then
    X{64}(t) = HSTR_EL2();
end;
                </pstext>
                </ps>
            </access_permission>
        </access_mechanism>
    
        
        <access_mechanism accessor="MSRregister HSTR_EL2" type="SystemAccessor">
            <encoding>
            <access_instruction>MSR HSTR_EL2, &lt;Xt&gt;</access_instruction>
                
                <enc n="op0" v="0b11"/>
                
                <enc n="op1" v="0b100"/>
                
                <enc n="CRn" v="0b0001"/>
                
                <enc n="CRm" v="0b0001"/>
                
                <enc n="op2" v="0b011"/>
            </encoding>
            <access_permission>
                <ps name="MSRregister" sections="1" secttype="access_permission">
                <pstext>
if !IsFeatureImplemented(FEAT_AA64) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if EffectiveHCR_EL2_NVx() IN {'1x1'} then
        NVMem(0x080) = X{64}(t);
    elsif EffectiveHCR_EL2_NVx() IN {'xx1'} then
        AArch64_SystemAccessTrap(EL2, 0x18);
    else
        Undefined();
    end;
elsif PSTATE.EL == EL2 then
    HSTR_EL2() = X{64}(t);
elsif PSTATE.EL == EL3 then
    HSTR_EL2() = X{64}(t);
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>