<?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="False" is_internal="True" is_stub_entry="False">
      <reg_short_name>DC CIVAPS</reg_short_name>
        
        <reg_long_name>Clean and Invalidate of Data by VA to PoPS</reg_long_name>



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




          <reg_reset_value></reg_reset_value>

      <reg_mappings>
        




      </reg_mappings>

        <reg_purpose>
          
    
      <purpose_text>
        <para>Clean and Invalidate data in data cache by virtual address to the Point of Physical Storage.</para>

      </purpose_text>
      <purpose_text>
        <note><para>This instruction cleans and invalidates all copies of the Location specified in the Xt argument, irrespective of any MECID associated with the Location. Memory accesses resulting from the Clean operation use the MECID associated with the cache entry.</para></note>
      </purpose_text>

        </reg_purpose>

      <reg_groups>
            <reg_group>Cache</reg_group>
      </reg_groups>
      
      
        
      <reg_attributes>
          
    
      <attributes_text>
        <para>DC CIVAPS is a 64-bit System instruction.</para>
      </attributes_text>

      </reg_attributes>
      <reg_fieldsets>
        






<fields id="fieldset_0" length="64">
  <text_before_fields/>
  <field id="fieldset_0-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">
    <field_name>VA</field_name>
    <field_shortdesc>Virtual address to use</field_shortdesc>
    <field_msb>63</field_msb>
    <field_lsb>0</field_lsb>
    <rel_range>63:0</rel_range>
    <field_description order="before">
      <para>Virtual address to use. No alignment restrictions apply to this VA.</para>
    </field_description>
  </field>
  <text_after_fields/>
</fields>




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


      </reg_fieldsets>

      <access_mechanisms>
          


  
    
      <access_permission_text>
        <para>Execution of this instruction might require an address translation from VA to PA, and that translation might fault. For more information, see <xref linkend="#CHDIIHGC">'The data cache maintenance instruction (DC)'</xref>.</para>

      </access_permission_text>
      <access_permission_text>
        <para>This system instruction is an alias of the SYS instruction.</para>
      </access_permission_text>





    
        
        <access_mechanism accessor="DC CIVAPS" type="SystemAccessor">
            <encoding>
            <access_instruction>DC CIVAPS, &lt;Xt&gt;</access_instruction>
                
                <enc n="op0" v="0b01"/>
                
                <enc n="op1" v="0b000"/>
                
                <enc n="CRn" v="0b0111"/>
                
                <enc n="CRm" v="0b1111"/>
                
                <enc n="op2" v="0b001"/>
            </encoding>
            <access_permission>
                <ps name="DC" sections="1" secttype="access_permission">
                <pstext>
if !(IsFeatureImplemented(FEAT_PoPS) &amp;&amp; IsFeatureImplemented(FEAT_AA64)) then
    Undefined();
elsif PSTATE.EL == EL0 then
    Undefined();
elsif PSTATE.EL == EL1 then
    if EL2Enabled() &amp;&amp; HCR_EL2().TPCP == '1' then
        AArch64_SystemAccessTrap(EL2, 0x18);
    elsif EL2Enabled() &amp;&amp; IsFeatureImplemented(FEAT_FGT2) &amp;&amp; ((HaveEL(EL3) &amp;&amp; SCR_EL3().FGTEn2 == '0') || HFGITR2_EL2().nDCCIVAPS == '0') then
        AArch64_SystemAccessTrap(EL2, 0x18);
    else
        AArch64_DC(X{64}(t), CacheType_Data, CacheOp_CleanInvalidate, CacheOpScope_PoPS);
    end;
elsif PSTATE.EL == EL2 then
    AArch64_DC(X{64}(t), CacheType_Data, CacheOp_CleanInvalidate, CacheOpScope_PoPS);
elsif PSTATE.EL == EL3 then
    AArch64_DC(X{64}(t), CacheType_Data, CacheOp_CleanInvalidate, CacheOpScope_PoPS);
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>