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
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | CRm | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | |||
| opc | Rt | ||||||||||||||||||||||||||||||
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;
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | imm2 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | |
| op2 | Rt | ||||||||||||||||||||||||||||||
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;
| <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". NoteThe 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).
| ||||||||||||||||||||||||||||||||||||||||||
|
For the "Memory nXS barrier" variant: specifies the limitation on the barrier operation, and is
encoded in
|
| <imm> |
Is a 4-bit unsigned immediate, in the range 0 to 15, encoded in the "CRm" field. |
| Alias | Is preferred when |
|---|---|
| PSSBB | CRm == '0100' |
| SSBB | CRm == '0000' |
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.