diff options
| author | Vladimir Stefanovic <vladimir.stefanovic@imgtec.com> | 2016-10-18 23:51:06 +0200 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2016-11-03 22:48:09 +0000 |
| commit | 9788e3d4d72792da22a12e54f8a86e25a03b58ab (patch) | |
| tree | 02f4cc8e4d70e5e4a6714633367dea5e248d1c16 /src/sync | |
| parent | b241a06479864b85c2377e52b775b176f686e192 (diff) | |
| download | go-9788e3d4d72792da22a12e54f8a86e25a03b58ab.tar.xz | |
sync/atomic: add support for GOARCH=mips{,le}
Change-Id: I10f36710dd95b9bd31b3b82a3c32edcadb90ffa9
Reviewed-on: https://go-review.googlesource.com/31510
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/sync')
| -rw-r--r-- | src/sync/atomic/asm_mipsx.s | 85 | ||||
| -rw-r--r-- | src/sync/atomic/atomic_test.go | 15 |
2 files changed, 94 insertions, 6 deletions
diff --git a/src/sync/atomic/asm_mipsx.s b/src/sync/atomic/asm_mipsx.s new file mode 100644 index 0000000000..cf3318ff85 --- /dev/null +++ b/src/sync/atomic/asm_mipsx.s @@ -0,0 +1,85 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build mips mipsle + +#include "textflag.h" + +TEXT ·SwapInt32(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Xchg(SB) + +TEXT ·SwapUint32(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Xchg(SB) + +TEXT ·SwapInt64(SB),NOSPLIT,$0-24 + JMP runtime∕internal∕atomic·Xchg64(SB) + +TEXT ·SwapUint64(SB),NOSPLIT,$0-24 + JMP runtime∕internal∕atomic·Xchg64(SB) + +TEXT ·SwapUintptr(SB),NOSPLIT,$0-20 + JMP runtime∕internal∕atomic·Xchg(SB) + +TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-13 + JMP runtime∕internal∕atomic·Cas(SB) + +TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-13 + JMP runtime∕internal∕atomic·Cas(SB) + +TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-13 + JMP runtime∕internal∕atomic·Cas(SB) + +TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-21 + JMP runtime∕internal∕atomic·Cas64(SB) + +TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-21 + JMP runtime∕internal∕atomic·Cas64(SB) + +TEXT ·AddInt32(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Xadd(SB) + +TEXT ·AddUint32(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Xadd(SB) + +TEXT ·AddUintptr(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Xadd(SB) + +TEXT ·AddInt64(SB),NOSPLIT,$0-20 + JMP runtime∕internal∕atomic·Xadd64(SB) + +TEXT ·AddUint64(SB),NOSPLIT,$0-20 + JMP runtime∕internal∕atomic·Xadd64(SB) + +TEXT ·LoadInt32(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Load(SB) + +TEXT ·LoadUint32(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Load(SB) + +TEXT ·LoadInt64(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Load64(SB) + +TEXT ·LoadUint64(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Load64(SB) + +TEXT ·LoadUintptr(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Load(SB) + +TEXT ·LoadPointer(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Load(SB) + +TEXT ·StoreInt32(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Store(SB) + +TEXT ·StoreUint32(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Store(SB) + +TEXT ·StoreInt64(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Store64(SB) + +TEXT ·StoreUint64(SB),NOSPLIT,$0-12 + JMP runtime∕internal∕atomic·Store64(SB) + +TEXT ·StoreUintptr(SB),NOSPLIT,$0-8 + JMP runtime∕internal∕atomic·Store(SB) diff --git a/src/sync/atomic/atomic_test.go b/src/sync/atomic/atomic_test.go index 4f44f48f51..a230d63329 100644 --- a/src/sync/atomic/atomic_test.go +++ b/src/sync/atomic/atomic_test.go @@ -1389,12 +1389,15 @@ func TestUnaligned64(t *testing.T) { // Unaligned 64-bit atomics on 32-bit systems are // a continual source of pain. Test that on 32-bit systems they crash // instead of failing silently. - if unsafe.Sizeof(int(0)) != 4 { - t.Skip("test only runs on 32-bit systems") - } - if runtime.GOARCH == "amd64p32" { - // amd64p32 can handle unaligned atomics. - t.Skip("test not needed on amd64p32") + + switch runtime.GOARCH { + default: + if unsafe.Sizeof(int(0)) != 4 { + t.Skip("test only runs on 32-bit systems") + } + case "amd64p32", "mips", "mipsle": + // amd64p32 and mips can handle unaligned atomics. + t.Skipf("test not needed on %v", runtime.GOARCH) } x := make([]uint32, 4) |
