]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.8] cmd/compile,runtime: fix atomic And8 for mipsle
authorVladimir Stefanovic <vladimir.stefanovic@imgtec.com>
Tue, 21 Mar 2017 13:57:58 +0000 (14:57 +0100)
committerAustin Clements <austin@google.com>
Wed, 5 Apr 2017 16:58:19 +0000 (16:58 +0000)
Removing stray xori that came from big endian copy/paste.
Adding atomicand8 check to runtime.check() that would have revealed
this error.
Might fix #19396.

Change-Id: If8d6f25d3e205496163541eb112548aa66df9c2a
Reviewed-on: https://go-review.googlesource.com/39597
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/ssa/gen/MIPS.rules
src/cmd/compile/internal/ssa/rewriteMIPS.go
src/runtime/runtime1.go

index 008f1b1df13a930e0bff09ba9b51648899f9af45..ad7a95497308b7c2fb74166c3e12619069102355 100644 (file)
                                (ANDconst  <config.fe.TypeUInt32()> [3] ptr)))
                (NORconst [0] <config.fe.TypeUInt32()> (SLL <config.fe.TypeUInt32()>
                        (MOVWconst [0xff]) (SLLconst <config.fe.TypeUInt32()> [3]
-                               (ANDconst <config.fe.TypeUInt32()> [3]
-                                       (XORconst <config.fe.TypeUInt32()> [3] ptr)))))) mem)
+                               (ANDconst <config.fe.TypeUInt32()> [3] ptr))))) mem)
 
 // AtomicOr8(ptr,val) -> LoweredAtomicOr(ptr&^3,uint32(val) << (((ptr^3) & 3) * 8))
 (AtomicOr8 ptr val mem) && config.BigEndian ->
index cbe9f1b5803d10439211635cbfce0aa48ee526fa..76eac5b1cf9cccec777ef5afca3b7b2c2fad2c9c 100644 (file)
@@ -712,7 +712,7 @@ func rewriteValueMIPS_OpAtomicAnd8(v *Value, config *Config) bool {
        _ = b
        // match: (AtomicAnd8  ptr val mem)
        // cond: !config.BigEndian
-       // result: (LoweredAtomicAnd (AND <config.fe.TypeUInt32().PtrTo()> (MOVWconst [^3]) ptr)                (OR <config.fe.TypeUInt32()> (SLL <config.fe.TypeUInt32()> (ZeroExt8to32 val)                   (SLLconst <config.fe.TypeUInt32()> [3]                          (ANDconst  <config.fe.TypeUInt32()> [3] ptr)))          (NORconst [0] <config.fe.TypeUInt32()> (SLL <config.fe.TypeUInt32()>                    (MOVWconst [0xff]) (SLLconst <config.fe.TypeUInt32()> [3]                               (ANDconst <config.fe.TypeUInt32()> [3]                                  (XORconst <config.fe.TypeUInt32()> [3] ptr)))))) mem)
+       // result: (LoweredAtomicAnd (AND <config.fe.TypeUInt32().PtrTo()> (MOVWconst [^3]) ptr)                (OR <config.fe.TypeUInt32()> (SLL <config.fe.TypeUInt32()> (ZeroExt8to32 val)                   (SLLconst <config.fe.TypeUInt32()> [3]                          (ANDconst  <config.fe.TypeUInt32()> [3] ptr)))          (NORconst [0] <config.fe.TypeUInt32()> (SLL <config.fe.TypeUInt32()>                    (MOVWconst [0xff]) (SLLconst <config.fe.TypeUInt32()> [3]                               (ANDconst <config.fe.TypeUInt32()> [3] ptr))))) mem)
        for {
                ptr := v.Args[0]
                val := v.Args[1]
@@ -750,10 +750,7 @@ func rewriteValueMIPS_OpAtomicAnd8(v *Value, config *Config) bool {
                v10.AuxInt = 3
                v11 := b.NewValue0(v.Line, OpMIPSANDconst, config.fe.TypeUInt32())
                v11.AuxInt = 3
-               v12 := b.NewValue0(v.Line, OpMIPSXORconst, config.fe.TypeUInt32())
-               v12.AuxInt = 3
-               v12.AddArg(ptr)
-               v11.AddArg(v12)
+               v11.AddArg(ptr)
                v10.AddArg(v11)
                v8.AddArg(v10)
                v7.AddArg(v8)
index 40c0e8579cb5e3c0de6638465abae7dffaade24e..5d0bf814b87006b8134227c921566afbaac42593 100644 (file)
@@ -260,6 +260,12 @@ func check() {
                throw("atomicor8")
        }
 
+       m = [4]byte{0xff, 0xff, 0xff, 0xff}
+       atomic.And8(&m[1], 0x1)
+       if m[0] != 0xff || m[1] != 0x1 || m[2] != 0xff || m[3] != 0xff {
+               throw("atomicand8")
+       }
+
        *(*uint64)(unsafe.Pointer(&j)) = ^uint64(0)
        if j == j {
                throw("float64nan")