...
▽

Text file src/internal/runtime/sys/dit_arm64.s

Documentation: internal/runtime/sys

     1// Copyright 2024 The Go Authors. All rights reserved.
     2// Use of this source code is governed by a BSD-style
     3// license that can be found in the LICENSE file.
     4
     5#include "go_asm.h"
     6#include "textflag.h"
     7
     8TEXT ·EnableDIT(SB),$0-1
     9    MRS DIT, R0
    10    UBFX $24, R0, $1, R1
    11    MOVB R1, ret+0(FP)
    12    TBNZ $0, R1, ret
    13    MSR $1, DIT
    14#ifdef GOOS_darwin
    15    // Arm documents that barriers are not necessary when writing to, or reading
    16    // from, PSTATE fields. However, Apple documentation indicates that barriers
    17    // should be used, in particular when setting the PSTATE.DIT field. Barriers
    18    // aren't cheap, so only use them on Apple silicon for now.
    19    //
    20    // See go.dev/issue/77776.
    21    MOVBU internal∕cpu·ARM64+const_offsetARM64HasSB(SB), R2
    22    TBZ $0, R2, sbFallback
    23    SB
    24#endif
    25ret:
    26    RET
    27sbFallback:
    28    DSB $7  // nsh
    29    ISB $15 // sy
    30    RET
    31
    32TEXT ·DITEnabled(SB),$0-1
    33    MRS DIT, R0
    34    UBFX $24, R0, $1, R1
    35    MOVB R1, ret+0(FP)
    36    RET
    37
    38TEXT ·DisableDIT(SB),$0
    39    MSR $0, DIT
    40    RET

View as plain text