<?xml version="1.0" ?><?xml-stylesheet type="text/xsl" encoding="UTF-8" href="iform.xsl" version="1.0"?><!DOCTYPE instructionsection  PUBLIC '-//ARM//DTD instructionsection //EN'  'iform-p.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. --><instructionsection id="PRFM_lit" title="PRFM (literal) -- A64" type="instruction">
  <docvars>
    <docvar key="address-form" value="literal"/>
    <docvar key="instr-class" value="general"/>
    <docvar key="isa" value="A64"/>
    <docvar key="mnemonic" value="PRFM"/>
    <docvar key="offset-type" value="off19s"/>
  </docvars>
  <heading>PRFM (literal)</heading>
  <desc>
    <brief>
      <para>Prefetch memory (literal)</para>
    </brief>
    <authored>
      <para>This instruction signals the memory system that data memory
accesses from a specified address are likely to occur in the near
future. The address for data memory accesses is calculated from
the PC value and an immediate offset. The memory system can respond
by taking actions that are
expected to speed up the memory accesses when they do occur, such as
making the cache line containing the specified address available at
the level of cache specified by the instruction.</para>
      <para>The <syntax>&lt;prfop&gt;</syntax> operand specifies the prefetch hint as follows:</para>
      <list type="unordered">
        <listitem>
          <content>Access type:<list type="unordered">
              <listitem>
                <content>PLD for prefetch for load.</content>
              </listitem>
              <listitem>
                <content>PLI for prefetch for execute.</content>
              </listitem>
              <listitem>
                <content>PST for prefetch for store.</content>
              </listitem>
            </list>
          </content>
        </listitem>
        <listitem>
          <content>Target cache level:<list type="unordered">
              <listitem>
                <content>L1 for Level 1 cache.</content>
              </listitem>
              <listitem>
                <content>L2 for Level 2 cache.</content>
              </listitem>
              <listitem>
                <content>L3 for Level 3 cache.</content>
              </listitem>
              <listitem>
                <content>When FEAT_PRFMSLC is implemented, SLC for system level cache.</content>
              </listitem>
            </list>
          </content>
        </listitem>
        <listitem>
          <content>Policy:<list type="unordered">
              <listitem>
                <content>KEEP for retained or temporal prefetch, allocated in the cache normally.</content>
              </listitem>
              <listitem>
                <content>STRM for streaming or non-temporal prefetch, for data that is used only once.</content>
              </listitem>
            </list>
          </content>
        </listitem>
      </list>
      <para>The effect of a <instruction>PRFM</instruction> instruction is
<arm-defined-word>IMPLEMENTATION DEFINED</arm-defined-word>. For more information,
see <xref linkend="ARMARM_CEGGGIDE">Prefetch memory</xref>.</para>
      <para>For information about addressing modes, see
<xref linkend="ARMARM_CHDIIIBB">Load/Store addressing modes</xref>.</para>
    </authored>
  </desc>
  <alias_list howmany="0"/>
  <classes>
    <iclass name="Literal" oneof="1" id="iclass_literal" no_encodings="1" isa="A64">
      <docvars>
        <docvar key="address-form" value="literal"/>
        <docvar key="instr-class" value="general"/>
        <docvar key="isa" value="A64"/>
        <docvar key="mnemonic" value="PRFM"/>
        <docvar key="offset-type" value="off19s"/>
      </docvars>
      <iclassintro count="1"/>
      <regdiagram form="32" psname="A64.ldst.loadlit.PRFM_P_loadlit" tworows="1">
        <box hibit="31" width="2" name="opc" usename="1" settings="2" psbits="xx">
          <c>1</c>
          <c>1</c>
        </box>
        <box hibit="29" width="2" settings="2">
          <c>0</c>
          <c>1</c>
        </box>
        <box hibit="27" width="1" settings="1">
          <c>1</c>
        </box>
        <box hibit="26" name="VR" usename="1" settings="1" psbits="x">
          <c>0</c>
        </box>
        <box hibit="25" width="1" settings="1">
          <c>0</c>
        </box>
        <box hibit="24" width="1" settings="1">
          <c>0</c>
        </box>
        <box hibit="23" width="19" name="imm19" usename="1">
          <c colspan="19"/>
        </box>
        <box hibit="4" width="5" name="Rt" usename="1">
          <c colspan="5"/>
        </box>
      </regdiagram>
      <encoding name="PRFM_P_loadlit" oneofinclass="1" oneof="1" label="">
        <docvars>
          <docvar key="address-form" value="literal"/>
          <docvar key="instr-class" value="general"/>
          <docvar key="isa" value="A64"/>
          <docvar key="offset-type" value="off19s"/>
          <docvar key="mnemonic" value="PRFM"/>
        </docvars>
        <asmtemplate><text>PRFM  (</text><a hover="Is the prefetch operation, " link="Rt_prfop">&lt;prfop&gt;</a><text>|#</text><a hover="Is the prefetch operation encoding as an immediate, in the range 0 to 31, encoded in the &quot;Rt&quot; field.

This syntax is only for encodings that are not accessible using &lt;prfop&gt;." link="Rt_imm5">&lt;imm5&gt;</a><text>), </text><a hover="Is the program label from which the data is to be loaded. Its offset from the address of this instruction, in the range +/-1MB, is encoded as &quot;imm19&quot; times 4." link="imm19_offset__2">&lt;label&gt;</a></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="A64.ldst.loadlit.PRFM_P_loadlit" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">let t : integer = UInt(Rt);

let offset : bits(64) = SignExtend{}(imm19::'00');</pstext></ps>
      </ps_section>
    </iclass>
  </classes>
  <explanations scope="all">
    <explanation enclist="PRFM_P_loadlit" symboldefcount="1">
      <symbol link="Rt_prfop">&lt;prfop&gt;</symbol>
      <definition encodedin="Rt">
        <intro>Is the prefetch operation, </intro>
        <table class="valuetable">
          <tgroup cols="3">
            <thead>
              <row>
                <entry class="bitfield">Rt</entry>
                <entry class="symbol">&lt;prfop&gt;</entry>
                <entry class="symbol">Architectural Feature</entry>
              </row>
            </thead>
            <tbody>
              <row>
                <entry class="bitfield">00000</entry>
                <entry class="symbol">PLDL1KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">00001</entry>
                <entry class="symbol">PLDL1STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">00010</entry>
                <entry class="symbol">PLDL2KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">00011</entry>
                <entry class="symbol">PLDL2STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">00100</entry>
                <entry class="symbol">PLDL3KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">00101</entry>
                <entry class="symbol">PLDL3STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">00110</entry>
                <entry class="symbol">PLDSLCKEEP</entry>
                <entry class="feature">
                  <arch_variants>
                    <arch_variant feature="FEAT_PRFMSLC"/>
                  </arch_variants>
                </entry>
              </row>
              <row>
                <entry class="bitfield">00111</entry>
                <entry class="symbol">PLDSLCSTRM</entry>
                <entry class="feature">
                  <arch_variants>
                    <arch_variant feature="FEAT_PRFMSLC"/>
                  </arch_variants>
                </entry>
              </row>
              <row>
                <entry class="bitfield">01000</entry>
                <entry class="symbol">PLIL1KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">01001</entry>
                <entry class="symbol">PLIL1STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">01010</entry>
                <entry class="symbol">PLIL2KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">01011</entry>
                <entry class="symbol">PLIL2STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">01100</entry>
                <entry class="symbol">PLIL3KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">01101</entry>
                <entry class="symbol">PLIL3STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">01110</entry>
                <entry class="symbol">PLISLCKEEP</entry>
                <entry class="feature">
                  <arch_variants>
                    <arch_variant feature="FEAT_PRFMSLC"/>
                  </arch_variants>
                </entry>
              </row>
              <row>
                <entry class="bitfield">01111</entry>
                <entry class="symbol">PLISLCSTRM</entry>
                <entry class="feature">
                  <arch_variants>
                    <arch_variant feature="FEAT_PRFMSLC"/>
                  </arch_variants>
                </entry>
              </row>
              <row>
                <entry class="bitfield">10000</entry>
                <entry class="symbol">PSTL1KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">10001</entry>
                <entry class="symbol">PSTL1STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">10010</entry>
                <entry class="symbol">PSTL2KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">10011</entry>
                <entry class="symbol">PSTL2STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">10100</entry>
                <entry class="symbol">PSTL3KEEP</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">10101</entry>
                <entry class="symbol">PSTL3STRM</entry>
                <entry class="feature"/>
              </row>
              <row>
                <entry class="bitfield">10110</entry>
                <entry class="symbol">PSTSLCKEEP</entry>
                <entry class="feature">
                  <arch_variants>
                    <arch_variant feature="FEAT_PRFMSLC"/>
                  </arch_variants>
                </entry>
              </row>
              <row>
                <entry class="bitfield">10111</entry>
                <entry class="symbol">PSTSLCSTRM</entry>
                <entry class="feature">
                  <arch_variants>
                    <arch_variant feature="FEAT_PRFMSLC"/>
                  </arch_variants>
                </entry>
              </row>
            </tbody>
          </tgroup>
        </table>
        <after>For other encodings of the &quot;Rt&quot; field, use &lt;imm5&gt;.</after>
      </definition>
    </explanation>
    <explanation enclist="PRFM_P_loadlit" symboldefcount="1">
      <symbol link="Rt_imm5">&lt;imm5&gt;</symbol>
      <account encodedin="Rt">
        <intro>
          <para>Is the prefetch operation encoding as an immediate, in the range 0 to 31, encoded in the &quot;Rt&quot; field.</para>
          <para>This syntax is only for encodings that are not accessible using <syntax>&lt;prfop&gt;</syntax>.</para>
        </intro>
      </account>
    </explanation>
    <explanation enclist="PRFM_P_loadlit" symboldefcount="1">
      <symbol link="imm19_offset__2">&lt;label&gt;</symbol>
      <account encodedin="imm19">
        <intro>
          <para>Is the program label from which the data is to be loaded. Its offset from the address of this instruction, in the range +/-1MB, is encoded as &quot;imm19&quot; times 4.</para>
        </intro>
      </account>
    </explanation>
  </explanations>
  <ps_section howmany="1">
    <ps name="A64.ldst.loadlit.PRFM_P_loadlit" sections="1" secttype="Operation">
      <pstext mayhavelinks="1" section="Execute" rep_section="execute">let address : bits(64) = <a link="func_PC64_0" file="shared_pseudocode.xml">PC64</a>() + offset;

let supports_ir : boolean = FALSE;
<a link="func_Prefetch_3" file="shared_pseudocode.xml">Prefetch</a>(address, t[4:0], supports_ir);</pstext></ps>
  </ps_section>
  <timestamp>2026-03-26 20:27:25</timestamp>
  <commit_id>2026-03_rel</commit_id>
</instructionsection>