From 303f8130e7961ceb1e468e3aaa497c9c6e3a5ed0 Mon Sep 17 00:00:00 2001 From: chenyifan Date: Sun, 19 Oct 2025 15:46:02 +0800 Subject: [PATCH 1/2] set DMB --- src/cmd/compile/internal/ssa/rewriteARM64.go | 2 +- src/runtime/atomic_arm64.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/ssa/rewriteARM64.go b/src/cmd/compile/internal/ssa/rewriteARM64.go index ed6974c24..5c61cd86e 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM64.go +++ b/src/cmd/compile/internal/ssa/rewriteARM64.go @@ -21360,7 +21360,7 @@ func rewriteValueARM64_OpPubBarrier(v *Value) bool { for { mem := v_0 v.reset(OpARM64DMB) - v.AuxInt = int64ToAuxInt(0xe) + v.AuxInt = int64ToAuxInt(0xa) v.AddArg(mem) return true } diff --git a/src/runtime/atomic_arm64.s b/src/runtime/atomic_arm64.s index 21b4d8ccd..6ae5af8fe 100644 --- a/src/runtime/atomic_arm64.s +++ b/src/runtime/atomic_arm64.s @@ -5,5 +5,5 @@ #include "textflag.h" TEXT ·publicationBarrier(SB),NOSPLIT|NOFRAME,$0-0 - DMB $0xe // DMB ST + DMB $0xa // DMB ST RET -- Gitee From ac5a924fd58bba9d19ac56ea8291abd12f5c2ee0 Mon Sep 17 00:00:00 2001 From: chenyifan Date: Tue, 21 Oct 2025 09:54:02 +0800 Subject: [PATCH 2/2] set DMB through GPEXPERIMENT --- src/cmd/compile/internal/ssa/rewriteARM64.go | 12 ++++++++++-- src/internal/goexperiment/exp_dmbvar_off.go | 8 ++++++++ src/internal/goexperiment/exp_dmbvar_on.go | 8 ++++++++ src/internal/goexperiment/flags.go | 3 +++ src/runtime/atomic_arm64_dmb.s | 10 ++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/internal/goexperiment/exp_dmbvar_off.go create mode 100644 src/internal/goexperiment/exp_dmbvar_on.go create mode 100644 src/runtime/atomic_arm64_dmb.s diff --git a/src/cmd/compile/internal/ssa/rewriteARM64.go b/src/cmd/compile/internal/ssa/rewriteARM64.go index ed6974c24..565104cb9 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM64.go +++ b/src/cmd/compile/internal/ssa/rewriteARM64.go @@ -2,7 +2,10 @@ package ssa -import "cmd/compile/internal/types" +import ( + "cmd/compile/internal/types" + "internal/goexperiment" +) func rewriteValueARM64(v *Value) bool { switch v.Op { @@ -21360,7 +21363,12 @@ func rewriteValueARM64_OpPubBarrier(v *Value) bool { for { mem := v_0 v.reset(OpARM64DMB) - v.AuxInt = int64ToAuxInt(0xe) + if goexperiment.DmbVar { + v.AuxInt = int64ToAuxInt(0xa) + }else { + v.AuxInt = int64ToAuxInt(0xe) + } + v.AddArg(mem) return true } diff --git a/src/internal/goexperiment/exp_dmbvar_off.go b/src/internal/goexperiment/exp_dmbvar_off.go new file mode 100644 index 000000000..bdff57cf2 --- /dev/null +++ b/src/internal/goexperiment/exp_dmbvar_off.go @@ -0,0 +1,8 @@ +// Code generated by mkconsts.go. DO NOT EDIT. + +//go:build !goexperiment.dmbvar + +package goexperiment + +const DmbVar = false +const DmbVarInt = 0 diff --git a/src/internal/goexperiment/exp_dmbvar_on.go b/src/internal/goexperiment/exp_dmbvar_on.go new file mode 100644 index 000000000..c8e4a6e49 --- /dev/null +++ b/src/internal/goexperiment/exp_dmbvar_on.go @@ -0,0 +1,8 @@ +// Code generated by mkconsts.go. DO NOT EDIT. + +//go:build goexperiment.dmbvar + +package goexperiment + +const DmbVar = true +const DmbVarInt = 1 diff --git a/src/internal/goexperiment/flags.go b/src/internal/goexperiment/flags.go index ac85fc800..dc06fc63d 100644 --- a/src/internal/goexperiment/flags.go +++ b/src/internal/goexperiment/flags.go @@ -131,4 +131,7 @@ type Flags struct { // Kunpeng malloc prefetch optimization. PrefetchMalloc bool + + // DMB enable data memory barrier + DmbVar bool } diff --git a/src/runtime/atomic_arm64_dmb.s b/src/runtime/atomic_arm64_dmb.s new file mode 100644 index 000000000..5ca13728a --- /dev/null +++ b/src/runtime/atomic_arm64_dmb.s @@ -0,0 +1,10 @@ +// Copyright 2014 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. +//go:build !goexperiment.dmbvar + +#include "textflag.h" + +TEXT ·publicationBarrier(SB),NOSPLIT|NOFRAME,$0-0 + DMB $0xa // DMB ST + RET -- Gitee