]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: intrinsify runtime/internal/atomic.{And,Or} on MIPS
authorMichael Pratt <mpratt@google.com>
Fri, 16 Oct 2020 20:49:56 +0000 (16:49 -0400)
committerMichael Pratt <mpratt@google.com>
Fri, 23 Oct 2020 16:25:07 +0000 (16:25 +0000)
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>
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/ssa/gen/MIPS.rules
src/cmd/compile/internal/ssa/rewriteMIPS.go

index e70e5a969bd42db747f888aa48d0598d029c0f58..979a092ba1407a636286d9be419316eb84f85b22 100644 (file)
@@ -3546,7 +3546,7 @@ func init() {
                        s.vars[&memVar] = s.newValue3(ssa.OpAtomicAnd32, types.TypeMem, args[0], args[1], s.mem())
                        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",
                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())
@@ -3558,7 +3558,7 @@ func init() {
                        s.vars[&memVar] = s.newValue3(ssa.OpAtomicOr32, types.TypeMem, args[0], args[1], s.mem())
                        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", "Xaddint64", "runtime/internal/atomic", "Xadd64", all...)
index 96feaf9234b9d84cfd8aa1b93c584b348d252eb3..246b4ebdbc54b93b01b13c3b59111ef41c400966 100644 (file)
                                (ANDconst <typ.UInt32> [3]
                                        (XORconst <typ.UInt32> [3] ptr)))))) mem)
 
+(AtomicAnd32 ...) => (LoweredAtomicAnd ...)
+(AtomicOr32  ...) => (LoweredAtomicOr  ...)
+
 
 // checks
 (NilCheck ...) => (LoweredNilCheck ...)
index bdafa9a957061867e15ea5ce1a7fac44de6d3f2d..87d1aa378f72c0168dfe54d4ba2b6110d0f0696a 100644 (file)
@@ -44,6 +44,9 @@ func rewriteValueMIPS(v *Value) bool {
        case OpAtomicAdd32:
                v.Op = OpMIPSLoweredAtomicAdd
                return true
+       case OpAtomicAnd32:
+               v.Op = OpMIPSLoweredAtomicAnd
+               return true
        case OpAtomicAnd8:
                return rewriteValueMIPS_OpAtomicAnd8(v)
        case OpAtomicCompareAndSwap32:
@@ -61,6 +64,9 @@ func rewriteValueMIPS(v *Value) bool {
        case OpAtomicLoadPtr:
                v.Op = OpMIPSLoweredAtomicLoad32
                return true
+       case OpAtomicOr32:
+               v.Op = OpMIPSLoweredAtomicOr
+               return true
        case OpAtomicOr8:
                return rewriteValueMIPS_OpAtomicOr8(v)
        case OpAtomicStore32: