]> Cypherpunks repositories - gostls13.git/commit
cmd/compile, runtime: make atomic loads/stores sequentially consistent on s390x
authorMichael Munday <mike.munday@ibm.com>
Tue, 4 Jun 2019 18:17:41 +0000 (19:17 +0100)
committerMichael Munday <mike.munday@ibm.com>
Thu, 6 Jun 2019 16:15:43 +0000 (16:15 +0000)
commitac8dbe7747971007d58eb39e2e7e615cf9f04493
tree626720b251dd583ead7900a31c3ab221ec84b858
parent53deb812196d857ce8a7c46c1f7c1559bb167630
cmd/compile, runtime: make atomic loads/stores sequentially consistent on s390x

The z/Architecture does not guarantee that a load following a store
will not be reordered with that store, unless they access the same
address. Therefore if we want to ensure the sequential consistency
of atomic loads and stores we need to perform serialization
operations after atomic stores.

We do not need to serialize in the runtime when using StoreRel[ease]
and LoadAcq[uire]. The z/Architecture already provides sufficient
ordering guarantees for these operations.

name              old time/op  new time/op  delta
AtomicLoad64-16   0.51ns ± 0%  0.51ns ± 0%     ~     (all equal)
AtomicStore64-16  0.51ns ± 0%  0.60ns ± 9%  +16.47%  (p=0.000 n=17+20)
AtomicLoad-16     0.51ns ± 0%  0.51ns ± 0%     ~     (all equal)
AtomicStore-16    0.51ns ± 0%  0.60ns ± 9%  +16.50%  (p=0.000 n=18+20)

Fixes #32428.

Change-Id: I88d19a4010c46070e4fff4b41587efe4c628d4d9
Reviewed-on: https://go-review.googlesource.com/c/go/+/180439
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/s390x/ssa.go
src/cmd/compile/internal/ssa/gen/S390X.rules
src/cmd/compile/internal/ssa/gen/S390XOps.go
src/cmd/compile/internal/ssa/opGen.go
src/cmd/compile/internal/ssa/rewriteS390X.go
src/runtime/internal/atomic/asm_s390x.s
src/runtime/internal/atomic/atomic_s390x.go