]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/internal/atomic: deduplicate And/Or code on wasm
authorMauri de Souza Meneguzzo <mauri870@gmail.com>
Tue, 21 Nov 2023 19:34:36 +0000 (19:34 +0000)
committerGopher Robot <gobot@golang.org>
Wed, 22 Nov 2023 04:41:31 +0000 (04:41 +0000)
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

Change-Id: I997dc90477c772882d6703df1b795dfc0d90a699
GitHub-Last-Rev: 92736a6e34104a9d234c791673fe0bb79fc97b0b
GitHub-Pull-Request: golang/go#64300
Reviewed-on: https://go-review.googlesource.com/c/go/+/544116
Run-TryBot: Mauri de Souza Meneguzzo <mauri870@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/runtime/internal/atomic/atomic_andor_generic.go
src/runtime/internal/atomic/atomic_wasm.go

index 57f80ff87160482cbc2249425f48c359a24172dc..00b402681ed6abe82fbf0dfa94e5ad6b8457251c 100644 (file)
@@ -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 arm || s390x || loong64 || mips || mipsle || mips64 || mips64le
+//go:build arm || s390x || loong64 || mips || mipsle || mips64 || mips64le || wasm
 
 package atomic
 
index d1ca9942052138bf0de805dc7b794215ef61dad4..835fc43ccf9f68787c414faaa33cbaca52fb0575 100644 (file)
@@ -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
-}