// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include "go_asm.h" #include "textflag.h" TEXT ·EnableDIT(SB),$0-1 MRS DIT, R0 UBFX $24, R0, $1, R1 MOVB R1, ret+0(FP) TBNZ $0, R1, ret MSR $1, DIT #ifdef GOOS_darwin // Arm documents that barriers are not necessary when writing to, or reading // from, PSTATE fields. However, Apple documentation indicates that barriers // should be used, in particular when setting the PSTATE.DIT field. Barriers // aren't cheap, so only use them on Apple silicon for now. // // See go.dev/issue/77776. MOVBU internal∕cpu·ARM64+const_offsetARM64HasSB(SB), R2 TBZ $0, R2, sbFallback SB #endif ret: RET sbFallback: DSB $7 // nsh ISB $15 // sy RET TEXT ·DITEnabled(SB),$0-1 MRS DIT, R0 UBFX $24, R0, $1, R1 MOVB R1, ret+0(FP) RET TEXT ·DisableDIT(SB),$0 MSR $0, DIT RET