DSB

Data synchronization barrier

This instruction is a memory barrier that ensures the completion of memory accesses, see Data Synchronization Barrier.

This instruction is used by the aliases PSSBB, and SSBB.

It has encodings from 2 classes: Memory barrier and Memory nXS barrier

Memory barrier

313029282726252423222120191817161514131211109876543210
11010101000000110011CRm10011111
opcRt

Encoding

DSB (<option>|#<imm>)

Decode for this encoding

var nXS : boolean = FALSE; var alias : DSBAlias; case CRm of when '0000' => alias = DSBAlias_SSBB; when '0100' => alias = DSBAlias_PSSBB; otherwise => alias = DSBAlias_DSB; end; var scope : MBMaintenanceScope; var types : MBReqTypes; case CRm[1:0] of when '00' => types = MBReqTypes_All; scope = MBMaintenanceScope_OuterShareable; when '01' => types = MBReqTypes_Reads; scope = MBMaintenanceScope_None; when '10' => types = MBReqTypes_Writes; scope = MBMaintenanceScope_None; when '11' => types = MBReqTypes_All; case CRm[3:2] of when '00' => scope = MBMaintenanceScope_OuterShareable; when '01' => scope = MBMaintenanceScope_Nonshareable; when '10' => scope = MBMaintenanceScope_InnerShareable; when '11' => scope = MBMaintenanceScope_OuterShareable; end; end;

Memory nXS barrier
(FEAT_XS)

313029282726252423222120191817161514131211109876543210
11010101000000110011imm21000111111
op2Rt

Encoding

DSB <option>nXS

Decode for this encoding

if !IsFeatureImplemented(FEAT_XS) then EndOfDecode(Decode_UNDEF); end; let types : MBReqTypes = MBReqTypes_All; var nXS : boolean = TRUE; let alias : DSBAlias = DSBAlias_DSB; var scope : MBMaintenanceScope; case imm2 of when '00' => scope = MBMaintenanceScope_OuterShareable; when '01' => scope = MBMaintenanceScope_Nonshareable; when '10' => scope = MBMaintenanceScope_InnerShareable; when '11' => scope = MBMaintenanceScope_OuterShareable; end;

Assembler Symbols

<option>

For the "Memory barrier" variant: specifies the limitation on the Memory Effects and maintenance operations ordered by the barrier operation, and is encoded in "CRm".


Note

The value 0b0000 is used to encode SSBB and the value 0b0100 is used to encode PSSBB.


For more information on whether an access is before or after a barrier instruction, see Data Synchronization Barrier (DSB).

CRm <option> Description
0001 OSHLD

This option has the same behavior as LD and is deprecated.

0010 OSHST

This option has the same behavior as ST and is deprecated.

0011 OSH

This option has the same behavior as SY.

0101 NSHLD

This option has the same behavior as LD and is deprecated.

0110 NSHST

This option has the same behavior as ST and is deprecated.

0111 NSH

Non-shareable is the required maintenance scope. Reads and writes are the required access types, both before and after the barrier instruction.

1x00 RESERVED
1001 ISHLD

This option has the same behavior as LD and is deprecated.

1010 ISHST

This option has the same behavior as ST and is deprecated.

1011 ISH

Inner Shareable is the required maintenance scope. Reads and writes are the required access types, both before and after the barrier instruction.

1101 LD

Reads are the required access type before the barrier instruction. Reads and writes are the required access types after the barrier instruction.

1110 ST

Writes are the required access type, both before and after the barrier instruction.

1111 SY

Outer Shareable is the required maintenance scope. Reads and writes are the required access types, both before and after the barrier instruction.

All encodings of "CRm" that are listed as reserved can be encoded using the #<imm> syntax. All reserved options have the same behavior as SY, but software must not rely on this behavior.

For the "Memory nXS barrier" variant: specifies the limitation on the barrier operation, and is encoded in imm2:

imm2 <option> Description
00 OSH

This option has the same behavior as SY.

01 NSH

Non-shareable is the required maintenance scope. Reads and writes are the required access types, both before and after the barrier instruction.

10 ISH

Inner Shareable is the required maintenance scope. Reads and writes are the required access types, both before and after the barrier instruction.

11 SY

Outer Shareable is the required maintenance scope. Reads and writes are the required access types, both before and after the barrier instruction.

<imm>

Is a 4-bit unsigned immediate, in the range 0 to 15, encoded in the "CRm" field.

Alias Conditions

AliasIs preferred when
PSSBBCRm == '0100'
SSBBCRm == '0000'

Operation

case alias of when DSBAlias_SSBB => SpeculativeStoreBypassBarrierToVA(); when DSBAlias_PSSBB => SpeculativeStoreBypassBarrierToPA(); when DSBAlias_DSB => if !nXS && IsFeatureImplemented(FEAT_XS) then nXS = PSTATE.EL IN {EL0, EL1} && IsHCRXEL2Enabled() && HCRX_EL2().FnXS == '1'; end; DataSynchronizationBarrier(scope, types, nXS); otherwise => unreachable; end;


2026-03_rel 2026-03-26 20:48:11

Copyright © 2010-2026 Arm Limited or its affiliates. All rights reserved. This document is Non-Confidential.