mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: intrinsify runtime/internal/atomic.{And,Or} on MIPS
This one is trivial, as there are already 32-bit AND and OR ops used to implement the more complex 8-bit versions. Change-Id: Ic48a53ea291d0067ebeab8e96c82e054daf20ae7 Reviewed-on: https://go-review.googlesource.com/c/go/+/263149 Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: Michael Pratt <mpratt@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
e313fd7448
commit
e5ad73508e
3 changed files with 11 additions and 2 deletions
|
|
@ -3546,7 +3546,7 @@ func init() {
|
||||||
s.vars[&memVar] = s.newValue3(ssa.OpAtomicAnd32, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[&memVar] = s.newValue3(ssa.OpAtomicAnd32, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X) // TODO: same arches as And8.
|
sys.AMD64, sys.ARM64, sys.MIPS, sys.PPC64, sys.S390X)
|
||||||
addF("runtime/internal/atomic", "Or8",
|
addF("runtime/internal/atomic", "Or8",
|
||||||
func(s *state, n *Node, args []*ssa.Value) *ssa.Value {
|
func(s *state, n *Node, args []*ssa.Value) *ssa.Value {
|
||||||
s.vars[&memVar] = s.newValue3(ssa.OpAtomicOr8, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[&memVar] = s.newValue3(ssa.OpAtomicOr8, types.TypeMem, args[0], args[1], s.mem())
|
||||||
|
|
@ -3558,7 +3558,7 @@ func init() {
|
||||||
s.vars[&memVar] = s.newValue3(ssa.OpAtomicOr32, types.TypeMem, args[0], args[1], s.mem())
|
s.vars[&memVar] = s.newValue3(ssa.OpAtomicOr32, types.TypeMem, args[0], args[1], s.mem())
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X) // TODO: same arches as And8.
|
sys.AMD64, sys.ARM64, sys.MIPS, sys.PPC64, sys.S390X)
|
||||||
|
|
||||||
alias("runtime/internal/atomic", "Loadint64", "runtime/internal/atomic", "Load64", all...)
|
alias("runtime/internal/atomic", "Loadint64", "runtime/internal/atomic", "Load64", all...)
|
||||||
alias("runtime/internal/atomic", "Xaddint64", "runtime/internal/atomic", "Xadd64", all...)
|
alias("runtime/internal/atomic", "Xaddint64", "runtime/internal/atomic", "Xadd64", all...)
|
||||||
|
|
|
||||||
|
|
@ -383,6 +383,9 @@
|
||||||
(ANDconst <typ.UInt32> [3]
|
(ANDconst <typ.UInt32> [3]
|
||||||
(XORconst <typ.UInt32> [3] ptr)))))) mem)
|
(XORconst <typ.UInt32> [3] ptr)))))) mem)
|
||||||
|
|
||||||
|
(AtomicAnd32 ...) => (LoweredAtomicAnd ...)
|
||||||
|
(AtomicOr32 ...) => (LoweredAtomicOr ...)
|
||||||
|
|
||||||
|
|
||||||
// checks
|
// checks
|
||||||
(NilCheck ...) => (LoweredNilCheck ...)
|
(NilCheck ...) => (LoweredNilCheck ...)
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ func rewriteValueMIPS(v *Value) bool {
|
||||||
case OpAtomicAdd32:
|
case OpAtomicAdd32:
|
||||||
v.Op = OpMIPSLoweredAtomicAdd
|
v.Op = OpMIPSLoweredAtomicAdd
|
||||||
return true
|
return true
|
||||||
|
case OpAtomicAnd32:
|
||||||
|
v.Op = OpMIPSLoweredAtomicAnd
|
||||||
|
return true
|
||||||
case OpAtomicAnd8:
|
case OpAtomicAnd8:
|
||||||
return rewriteValueMIPS_OpAtomicAnd8(v)
|
return rewriteValueMIPS_OpAtomicAnd8(v)
|
||||||
case OpAtomicCompareAndSwap32:
|
case OpAtomicCompareAndSwap32:
|
||||||
|
|
@ -61,6 +64,9 @@ func rewriteValueMIPS(v *Value) bool {
|
||||||
case OpAtomicLoadPtr:
|
case OpAtomicLoadPtr:
|
||||||
v.Op = OpMIPSLoweredAtomicLoad32
|
v.Op = OpMIPSLoweredAtomicLoad32
|
||||||
return true
|
return true
|
||||||
|
case OpAtomicOr32:
|
||||||
|
v.Op = OpMIPSLoweredAtomicOr
|
||||||
|
return true
|
||||||
case OpAtomicOr8:
|
case OpAtomicOr8:
|
||||||
return rewriteValueMIPS_OpAtomicOr8(v)
|
return rewriteValueMIPS_OpAtomicOr8(v)
|
||||||
case OpAtomicStore32:
|
case OpAtomicStore32:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue