<?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="PSB" title="PSB -- A64" type="instruction">
  <docvars>
    <docvar key="instr-class" value="system"/>
    <docvar key="isa" value="A64"/>
    <docvar key="mnemonic" value="PSB"/>
  </docvars>
  <heading>PSB</heading>
  <desc>
    <brief>
      <para>Profiling synchronization barrier</para>
    </brief>
    <authored>
      <para>This instruction is a barrier that ensures that all existing
profiling data for the current PE has been formatted, and profiling
buffer addresses have been translated such that all writes to the
profiling buffer have been initiated. A following <instruction>DSB</instruction>
instruction completes when the writes to the profiling buffer have
completed.</para>
      <para>If <xref linkend="ARMARM_FEAT_SPE">FEAT_SPE</xref> is not implemented,
this instruction executes as a <instruction>NOP</instruction>.</para>
    </authored>
  </desc>
  <alias_list howmany="0"/>
  <classes>
    <iclass name="System" oneof="1" id="iclass_system" no_encodings="1" isa="A64">
      <docvars>
        <docvar key="instr-class" value="system"/>
        <docvar key="isa" value="A64"/>
        <docvar key="mnemonic" value="PSB"/>
      </docvars>
      <iclassintro count="1"/>
      <arch_variants>
        <arch_variant feature="FEAT_SPE" name="v8Ap2 &amp;&amp; PROFILE_A"/>
      </arch_variants>
      <regdiagram form="32" psname="A64.control.hints.PSB_HC_hints" tworows="1">
        <box hibit="31" width="3" settings="3">
          <c>1</c>
          <c>1</c>
          <c>0</c>
        </box>
        <box hibit="28" width="3" settings="3">
          <c>1</c>
          <c>0</c>
          <c>1</c>
        </box>
        <box hibit="25" width="14" settings="14">
          <c>0</c>
          <c>1</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>0</c>
          <c>1</c>
          <c>1</c>
          <c>0</c>
          <c>0</c>
          <c>1</c>
          <c>0</c>
        </box>
        <box hibit="11" width="4" name="CRm" usename="1" settings="4" psbits="xxxx">
          <c>0</c>
          <c>0</c>
          <c>1</c>
          <c>0</c>
        </box>
        <box hibit="7" width="3" name="op2" usename="1" settings="3" psbits="xxx">
          <c>0</c>
          <c>0</c>
          <c>1</c>
        </box>
        <box hibit="4" width="5" settings="5">
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>1</c>
          <c>1</c>
        </box>
      </regdiagram>
      <encoding name="PSB_HC_hints" oneofinclass="1" oneof="1" label="">
        <docvars>
          <docvar key="instr-class" value="system"/>
          <docvar key="isa" value="A64"/>
          <docvar key="mnemonic" value="PSB"/>
        </docvars>
        <asmtemplate><text>PSB  CSYNC</text></asmtemplate>
      </encoding>
      <ps_section howmany="1">
        <ps name="A64.control.hints.PSB_HC_hints" sections="1" secttype="noheading">
          <pstext mayhavelinks="1" section="Decode" rep_section="decode">if !IsFeatureImplemented(FEAT_SPE) then <a link="func_EndOfDecode_1" file="shared_pseudocode.xml">EndOfDecode</a>(<a link="enum_Decode_NOP" file="shared_pseudocode.xml">Decode_NOP</a>); end;</pstext></ps>
      </ps_section>
    </iclass>
  </classes>
  <explanations scope="all"/>
  <ps_section howmany="1">
    <ps name="A64.control.hints.PSB_HC_hints" sections="1" secttype="Operation">
      <pstext mayhavelinks="1" section="Execute" rep_section="execute">if IsFeatureImplemented(FEAT_FGT) &amp;&amp; IsFeatureImplemented(FEAT_SPEv1p5) then
    let trap_to_el2 : boolean = (<a link="global_PSTATE" file="shared_pseudocode.xml">PSTATE</a>.EL IN {<a link="global_EL0" file="shared_pseudocode.xml">EL0</a>, <a link="global_EL1" file="shared_pseudocode.xml">EL1</a>} &amp;&amp; <a link="func_EL2Enabled_0" file="shared_pseudocode.xml">EL2Enabled</a>() &amp;&amp;
                                    !<a link="func_IsInHost_0" file="shared_pseudocode.xml">IsInHost</a>() &amp;&amp;
                                    (!<a link="func_HaveEL_1" file="shared_pseudocode.xml">HaveEL</a>(<a link="global_EL3" file="shared_pseudocode.xml">EL3</a>) || SCR_EL3().FGTEn == '1') &amp;&amp;
                                    HFGITR_EL2().PSBCSYNC == '1');
    if trap_to_el2 then
        let target_el : bits(2) = <a link="global_EL2" file="shared_pseudocode.xml">EL2</a>;
        let iss : bits(25)      = 0x3[24:0];
        <a link="func_AArch64_OtherInstrTrap_2" file="shared_pseudocode.xml">AArch64_OtherInstrTrap</a>(target_el, iss);
    end;
end;

ProfilingSynchronizationBarrier();</pstext></ps>
  </ps_section>
  <timestamp>2026-03-26 20:27:25</timestamp>
  <commit_id>2026-03_rel</commit_id>
</instructionsection>