]> Cypherpunks repositories - gostls13.git/commit
cmd/compile, runtime: add new lightweight atomics for ppc64x
authorCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Mon, 6 Aug 2018 20:36:16 +0000 (15:36 -0500)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Tue, 23 Oct 2018 18:10:38 +0000 (18:10 +0000)
commit5c472132bf88cc04c85ad5f848d8a2f77f21b228
tree3409d087b15b0d8cc8181ed5a1e60249c1a46e0d
parent5dbc67a99a99011fce1c1b7c983d2aa35247b950
cmd/compile, runtime: add new lightweight atomics for ppc64x

This change creates the infrastructure for new lightweight atomics
primitives in runtime/internal/atomic:

- LoadAcq, for load-acquire
- StoreRel, for store-release
- CasRel, for Compare-and-Swap-release

and implements them for ppc64x. There is visible performance improvement
in producer-consumer scenarios, like BenchmarkChanProdCons*:

benchmark                           old ns/op     new ns/op     delta
BenchmarkChanProdCons0-48           2034          2034          +0.00%
BenchmarkChanProdCons10-48          1798          1608          -10.57%
BenchmarkChanProdCons100-48         1596          1585          -0.69%
BenchmarkChanProdConsWork0-48       2084          2046          -1.82%
BenchmarkChanProdConsWork10-48      1829          1668          -8.80%
BenchmarkChanProdConsWork100-48     1650          1650          +0.00%

Fixes #21348

Change-Id: I1f6ce377e4a0fe4bd7f5f775e8036f50070ad8db
Reviewed-on: https://go-review.googlesource.com/c/142277
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
29 files changed:
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/ppc64/ssa.go
src/cmd/compile/internal/ssa/gen/PPC64.rules
src/cmd/compile/internal/ssa/gen/PPC64Ops.go
src/cmd/compile/internal/ssa/gen/genericOps.go
src/cmd/compile/internal/ssa/opGen.go
src/cmd/compile/internal/ssa/rewritePPC64.go
src/runtime/internal/atomic/asm_386.s
src/runtime/internal/atomic/asm_amd64.s
src/runtime/internal/atomic/asm_amd64p32.s
src/runtime/internal/atomic/asm_arm.s
src/runtime/internal/atomic/asm_arm64.s
src/runtime/internal/atomic/asm_mips64x.s
src/runtime/internal/atomic/asm_mipsx.s
src/runtime/internal/atomic/asm_ppc64x.s
src/runtime/internal/atomic/asm_s390x.s
src/runtime/internal/atomic/atomic_386.go
src/runtime/internal/atomic/atomic_amd64x.go
src/runtime/internal/atomic/atomic_arm.go
src/runtime/internal/atomic/atomic_arm64.go
src/runtime/internal/atomic/atomic_arm64.s
src/runtime/internal/atomic/atomic_mips64x.go
src/runtime/internal/atomic/atomic_mips64x.s
src/runtime/internal/atomic/atomic_mipsx.go
src/runtime/internal/atomic/atomic_ppc64x.go
src/runtime/internal/atomic/atomic_ppc64x.s
src/runtime/internal/atomic/atomic_s390x.go
src/runtime/internal/atomic/atomic_wasm.go
src/runtime/proc.go