<?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 is_register="True" is_internal="False" is_stub_entry="False">
      <reg_short_name>GICV_IAR</reg_short_name>
        
        <reg_long_name>Virtual Machine Interrupt Acknowledge Register</reg_long_name>



      
            <reg_condition otherwise="RES0">when FEAT_GICv3_LEGACY is implemented and EL2 is implemented</reg_condition>
      

    
  <reg_address
      external_access="False"
    mem_map_access="True"
      power_domain="None"
  >
    <reg_component>GIC Virtual CPU interface</reg_component>
    <reg_offset><hexnumber>0x000C</hexnumber></reg_offset>
    <reg_instance>GICV_IAR</reg_instance>
    <reg_access>
      
        
      <reg_access_state>
          <reg_access_level>When GICD_CTLR.DS == '0'</reg_access_level>
          <reg_access_type>RO</reg_access_type>
      </reg_access_state>
        
      <reg_access_state>
          <reg_access_level>When an access is Secure</reg_access_level>
          <reg_access_type>RO</reg_access_type>
      </reg_access_state>
        
      <reg_access_state>
          <reg_access_level>When an access is Non-secure</reg_access_level>
          <reg_access_type>RO</reg_access_type>
      </reg_access_state>
    </reg_access>
</reg_address>



          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Provides the INTID of the signaled Group 0 virtual interrupt. A read of this register by the PE acts as an acknowledge for the interrupt.</para>

      </purpose_text>
      <purpose_text>
        <para>This register corresponds to the physical CPU interface register <register_link state="ext" id="ext-gicc_iar.xml">GICC_IAR</register_link>.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>GICV</reg_group>
      </reg_groups>
      <reg_configuration>
        
    
      <configuration_text>
        <para>This register is available when the GIC implementation supports interrupt virtualization.</para>
      </configuration_text>

      </reg_configuration>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>GICV_IAR is a 32-bit register.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="32">
  <text_before_fields/>
  <field id="fieldset_0-31_25" 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>31</field_msb>
    <field_lsb>25</field_lsb>
    <rel_range>31:25</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-24_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">
    <field_name>INTID</field_name>
    <field_msb>24</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>24:0</rel_range>
    <field_description order="before"><para>The INTID of the signaled interrupt.</para>
<note><para>INTIDs 1020-1023 are reserved and convey additional information such as spurious interrupts.</para></note><para>When affinity routing is not enabled:</para>
<list type="unordered">
<listitem><content>Bits [23:13] are <arm-defined-word>RES0</arm-defined-word>.</content>
</listitem><listitem><content>For SGIs, bits [12:10] identify the CPU interface corresponding to the source PE. For all other interrupts these bits are <arm-defined-word>RES0</arm-defined-word>.</content>
</listitem></list></field_description>
  </field>
  <text_after_fields><para>When the virtual machine writes to this register, the virtual CPU interface acknowledges the highest priority pending virtual interrupt and sets the state in the corresponding List register to active. The appropriate bit in the active priorities register <register_link state="ext" id="ext-gich_aprn.xml">GICH_APR&lt;n&gt;</register_link> is set to 1.</para>
<para>If <register_link state="ext" id="ext-gich_lrn.xml">GICH_LR&lt;n&gt;</register_link>.HW == 0, indicating that the interrupt is software-triggered, then bits [12:10] of <register_link state="ext" id="ext-gich_lrn.xml">GICH_LR&lt;n&gt;</register_link> are returned in bits [12:10] of GICV_IAR. Otherwise bits [12:10] are <arm-defined-word>RES0</arm-defined-word>.</para>
<para>A read of this register returns the spurious INTID 1023 if either of the following is true:</para>
<list type="unordered">
<listitem><content>There are no pending interrupts of sufficiently high priority value to be signaled to the PE with the virtual CPU interface enabled and <register_link state="ext" id="ext-gich_hcr.xml">GICH_HCR</register_link>.En == 1.</content>
</listitem><listitem><content>Interrupt signaling by the virtual CPU interface is disabled.</content>
</listitem></list>
<para>A read of this register returns the spurious INTID 1022 if the highest priority pending interrupt is Group 1 and <register_link state="ext" id="ext-gicv_ctlr.xml">GICV_CTLR</register_link>.AckCtl == 0.</para></text_after_fields>
</fields>




<reg_fieldset length="32">
  <fieldat id="fieldset_0-31_25" msb="31" lsb="25"/>
  <fieldat id="fieldset_0-24_0" msb="24" lsb="0"/>
</reg_fieldset>


      </reg_fieldsets>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <para>This register is used only when System register access is not enabled. When System register access is enabled:</para>

      </access_permission_text>
      <access_permission_text>
        <list type="unordered">
<listitem><content>For AArch32 implementations, <register_link state="AArch32" id="AArch32-icc_iar0.xml">ICC_IAR0</register_link> provides equivalent functionality.</content>
</listitem><listitem><content>For AArch64 implementations, <register_link state="AArch64" id="AArch64-icc_iar0_el1.xml">ICC_IAR0_EL1</register_link> provides equivalent functionality.</content>
</listitem></list>

      </access_permission_text>
      <access_permission_text>
        <para>This register is used for Group 0 interrupts only. <register_link state="ext" id="ext-gicv_aiar.xml">GICV_AIAR</register_link> provides equivalent functionality for Group 1 interrupts.</para>

      </access_permission_text>
      <access_permission_text>
        <para>When affinity routing is enabled, it is a programming error to use memory-mapped registers to access the GIC.</para>
      </access_permission_text>





    

      </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>