From 5188f46da598a09ffa1727153aef382ea6ee06fe Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Mon, 20 Nov 2023 21:54:29 -0300 Subject: [PATCH] runtime/internal/atomic: deduplicate And/Or code on wasm When I initially added the wasm code for these ops I did not saw that wasm actually has the Cas operations implemented, although they are merely pointer assignments since wasm is single threaded. Now with a generic implementation for And/Or we can add wasm to the build tags. For #61395 --- .../internal/atomic/atomic_andor_generic.go | 2 +- src/runtime/internal/atomic/atomic_wasm.go | 48 ------------------- 2 files changed, 1 insertion(+), 49 deletions(-) diff --git a/src/runtime/internal/atomic/atomic_andor_generic.go b/src/runtime/internal/atomic/atomic_andor_generic.go index c790e062c5..c47e404419 100644 --- a/src/runtime/internal/atomic/atomic_andor_generic.go +++ b/src/runtime/internal/atomic/atomic_andor_generic.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build s390x || loong64 || mips || mipsle || mips64 || mips64le +//go:build s390x || loong64 || mips || mipsle || mips64 || mips64le || wasm package atomic diff --git a/src/runtime/internal/atomic/atomic_wasm.go b/src/runtime/internal/atomic/atomic_wasm.go index d1ca994205..835fc43ccf 100644 --- a/src/runtime/internal/atomic/atomic_wasm.go +++ b/src/runtime/internal/atomic/atomic_wasm.go @@ -339,51 +339,3 @@ func Xaddint64(ptr *int64, delta int64) int64 { *ptr = new return new } - -//go:nosplit -//go:noinline -func And32(ptr *uint32, val uint32) uint32 { - old := *ptr - *ptr = old & val - return old -} - -//go:nosplit -//go:noinline -func And64(ptr *uint64, val uint64) uint64 { - old := *ptr - *ptr = old & val - return old -} - -//go:nosplit -//go:noinline -func Anduintptr(ptr *uintptr, val uintptr) uintptr { - old := *ptr - *ptr = old & val - return old -} - -//go:nosplit -//go:noinline -func Or32(ptr *uint32, val uint32) uint32 { - old := *ptr - *ptr = old | val - return old -} - -//go:nosplit -//go:noinline -func Or64(ptr *uint64, val uint64) uint64 { - old := *ptr - *ptr = old | val - return old -} - -//go:nosplit -//go:noinline -func Oruintptr(ptr *uintptr, val uintptr) uintptr { - old := *ptr - *ptr = old | val - return old -}