<?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="AArch32" is_register="False" is_internal="True" is_stub_entry="False">
      <reg_short_name>ICIALLU</reg_short_name>
        
        <reg_long_name>Instruction Cache Invalidate All to PoU</reg_long_name>



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




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        



    
      
      <reg_mapping>
        
  

    

  

    <mapped_name filename="AArch64-ic-iallu.xml">IC IALLU</mapped_name>
  <mapped_type>Functional</mapped_type>
      <mapped_execution_state>AArch64</mapped_execution_state>

      </reg_mapping>

      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Invalidate all instruction caches of the PE executing the instruction to the Point of Unification. If branch predictors are architecturally visible, also flush branch predictors.</para>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>Cache</reg_group>
      </reg_groups>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>ICIALLU is a 32-bit System instruction.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        







      </reg_fieldsets>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <para>The PE ignores the value of &lt;Rt&gt;. Software does not have to write a value to this register before issuing this instruction.</para>

      </access_permission_text>
      <access_permission_text>
        <para>When <register_link state="AArch32" id="AArch32-hcr.xml">HCR</register_link>.FB is 1, at Non-secure EL1 this instruction executes as a <register_link state="AArch32" id="AArch32-icialluis.xml">ICIALLUIS</register_link>.</para>

      </access_permission_text>
      <access_permission_text>
        <para>The following pseudocode describes traps which apply to the System instruction. For information about changes to the scope of the invalidation to the instruction under different conditions, see the relevant instruction in the <xref linkend="#shared_pseudocode.aarch32">Pseudocode for AArch32 operation</xref>.</para>
      </access_permission_text>





    
        
        <access_mechanism accessor="MCR ICIALLU" type="SystemAccessor">
            <encoding>
            <access_instruction>MCR{&lt;c&gt;}{&lt;q&gt;} &lt;coproc&gt;, {#}&lt;opc1&gt;, &lt;Rt&gt;, &lt;CRn&gt;, &lt;CRm&gt;{, {#}&lt;opc2&gt;}</access_instruction>
                
                <enc n="coproc" v="0b1111"/>
                
                <enc n="opc1" v="0b000"/>
                
                <enc n="CRn" v="0b0111"/>
                
                <enc n="CRm" v="0b0101"/>
                
                <enc n="opc2" v="0b000"/>
            </encoding>
            <access_permission>
                <ps name="MCR" sections="1" secttype="access_permission">
                <pstext>
if !IsFeatureImplemented(FEAT_AA32EL1) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if !AArch32_CanTrapIC(CacheOp_Invalidate, CacheOpScope_PoU) then
        ExecuteAsNOP();
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HSTR_EL2().T7 == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HSTR().T7 == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HCR_EL2().TPU == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA64EL2) &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HCR_EL2().TOCU == '1' then
        AArch64_AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HCR().TPU == '1' then
        AArch32_TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_AA32EL2) &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HCR2().TOCU == '1' then
        AArch32_TakeHypTrapException(0x03);
    else
        if AArch32_TreatICAsNOP(CacheOp_Invalidate, CacheOpScope_PoU) then
            ExecuteAsNOP();
        else
            AArch32_IC(CacheOpScope_ALLU);
        end;
    end;
elsif PSTATE.EL == EL2 then
    if !AArch32_CanTrapIC(CacheOp_Invalidate, CacheOpScope_PoU) then
        ExecuteAsNOP();
    else
        if AArch32_TreatICAsNOP(CacheOp_Invalidate, CacheOpScope_PoU) then
            ExecuteAsNOP();
        else
            AArch32_IC(CacheOpScope_ALLU);
        end;
    end;
elsif PSTATE.EL == EL3 then
    if AArch32_TreatICAsNOP(CacheOp_Invalidate, CacheOpScope_PoU) then
        ExecuteAsNOP();
    else
        AArch32_IC(CacheOpScope_ALLU);
    end;
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>