]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: use a different register for updated value in AtomicAnd8/Or8 on ARM64
authorCherry Zhang <cherryyz@google.com>
Mon, 11 Jun 2018 17:41:23 +0000 (13:41 -0400)
committerCherry Zhang <cherryyz@google.com>
Tue, 12 Jun 2018 20:22:50 +0000 (20:22 +0000)
commit44b826bb28171c473cf906413c298f3095c86451
treeea11632bf7a375960c5de5ae4ec14ac4c27261af
parent39ad208c13368bbd1a129c5e2ed85d6ebc22401a
cmd/compile: use a different register for updated value in AtomicAnd8/Or8 on ARM64

ARM64 manual says it is "constrained unpredictable" if the src
and dst registers of STLXRB are same, although it doesn't seem
to cause any problem on real hardwares so far. Fix by allocating
a different register to hold the updated value for
AtomicAnd8/Or8. We do this by making the ops returns <val,mem>
like AtomicAdd, although val will not be used elsewhere.

Fixes #25823.

Change-Id: I735b9822f99877b3c7aee67a65e62b7278dc40df
Reviewed-on: https://go-review.googlesource.com/117976
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Wei Xiao <Wei.Xiao@arm.com>
src/cmd/compile/internal/arm64/ssa.go
src/cmd/compile/internal/ssa/gen/ARM64.rules
src/cmd/compile/internal/ssa/gen/ARM64Ops.go
src/cmd/compile/internal/ssa/opGen.go
src/cmd/compile/internal/ssa/rewriteARM64.go