From 03ef105daeff4fef1fd66dbffb8e17d1f779b9ea Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 10 Oct 2019 16:16:54 +0000 Subject: all: remove nacl (part 3, more amd64p32) Part 1: CL 199499 (GOOS nacl) Part 2: CL 200077 (amd64p32 files, toolchain) Part 3: stuff that arguably should've been part of Part 2, but I forgot one of my grep patterns when splitting the original CL up into two parts. This one might also have interesting stuff to resurrect for any future x32 ABI support. Updates #30439 Change-Id: I2b4143374a253a003666f3c69e776b7e456bdb9c Reviewed-on: https://go-review.googlesource.com/c/go/+/200318 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/runtime/internal/atomic/atomic_amd64.go | 89 +++++++++++++++++++++++++++ src/runtime/internal/atomic/atomic_amd64x.go | 91 ---------------------------- src/runtime/internal/atomic/atomic_test.go | 10 +-- 3 files changed, 91 insertions(+), 99 deletions(-) create mode 100644 src/runtime/internal/atomic/atomic_amd64.go delete mode 100644 src/runtime/internal/atomic/atomic_amd64x.go (limited to 'src/runtime/internal') diff --git a/src/runtime/internal/atomic/atomic_amd64.go b/src/runtime/internal/atomic/atomic_amd64.go new file mode 100644 index 0000000000..fc865e892d --- /dev/null +++ b/src/runtime/internal/atomic/atomic_amd64.go @@ -0,0 +1,89 @@ +// Copyright 2009 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. + +package atomic + +import "unsafe" + +// Export some functions via linkname to assembly in sync/atomic. +//go:linkname Load +//go:linkname Loadp +//go:linkname Load64 + +//go:nosplit +//go:noinline +func Load(ptr *uint32) uint32 { + return *ptr +} + +//go:nosplit +//go:noinline +func Loadp(ptr unsafe.Pointer) unsafe.Pointer { + return *(*unsafe.Pointer)(ptr) +} + +//go:nosplit +//go:noinline +func Load64(ptr *uint64) uint64 { + return *ptr +} + +//go:nosplit +//go:noinline +func LoadAcq(ptr *uint32) uint32 { + return *ptr +} + +//go:noescape +func Xadd(ptr *uint32, delta int32) uint32 + +//go:noescape +func Xadd64(ptr *uint64, delta int64) uint64 + +//go:noescape +func Xadduintptr(ptr *uintptr, delta uintptr) uintptr + +//go:noescape +func Xchg(ptr *uint32, new uint32) uint32 + +//go:noescape +func Xchg64(ptr *uint64, new uint64) uint64 + +//go:noescape +func Xchguintptr(ptr *uintptr, new uintptr) uintptr + +//go:nosplit +//go:noinline +func Load8(ptr *uint8) uint8 { + return *ptr +} + +//go:noescape +func And8(ptr *uint8, val uint8) + +//go:noescape +func Or8(ptr *uint8, val uint8) + +// NOTE: Do not add atomicxor8 (XOR is not idempotent). + +//go:noescape +func Cas64(ptr *uint64, old, new uint64) bool + +//go:noescape +func CasRel(ptr *uint32, old, new uint32) bool + +//go:noescape +func Store(ptr *uint32, val uint32) + +//go:noescape +func Store64(ptr *uint64, val uint64) + +//go:noescape +func StoreRel(ptr *uint32, val uint32) + +// StorepNoWB performs *ptr = val atomically and without a write +// barrier. +// +// NO go:noescape annotation; see atomic_pointer.go. +func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) diff --git a/src/runtime/internal/atomic/atomic_amd64x.go b/src/runtime/internal/atomic/atomic_amd64x.go deleted file mode 100644 index 31c1636b2e..0000000000 --- a/src/runtime/internal/atomic/atomic_amd64x.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 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 amd64 amd64p32 - -package atomic - -import "unsafe" - -// Export some functions via linkname to assembly in sync/atomic. -//go:linkname Load -//go:linkname Loadp -//go:linkname Load64 - -//go:nosplit -//go:noinline -func Load(ptr *uint32) uint32 { - return *ptr -} - -//go:nosplit -//go:noinline -func Loadp(ptr unsafe.Pointer) unsafe.Pointer { - return *(*unsafe.Pointer)(ptr) -} - -//go:nosplit -//go:noinline -func Load64(ptr *uint64) uint64 { - return *ptr -} - -//go:nosplit -//go:noinline -func LoadAcq(ptr *uint32) uint32 { - return *ptr -} - -//go:noescape -func Xadd(ptr *uint32, delta int32) uint32 - -//go:noescape -func Xadd64(ptr *uint64, delta int64) uint64 - -//go:noescape -func Xadduintptr(ptr *uintptr, delta uintptr) uintptr - -//go:noescape -func Xchg(ptr *uint32, new uint32) uint32 - -//go:noescape -func Xchg64(ptr *uint64, new uint64) uint64 - -//go:noescape -func Xchguintptr(ptr *uintptr, new uintptr) uintptr - -//go:nosplit -//go:noinline -func Load8(ptr *uint8) uint8 { - return *ptr -} - -//go:noescape -func And8(ptr *uint8, val uint8) - -//go:noescape -func Or8(ptr *uint8, val uint8) - -// NOTE: Do not add atomicxor8 (XOR is not idempotent). - -//go:noescape -func Cas64(ptr *uint64, old, new uint64) bool - -//go:noescape -func CasRel(ptr *uint32, old, new uint32) bool - -//go:noescape -func Store(ptr *uint32, val uint32) - -//go:noescape -func Store64(ptr *uint64, val uint64) - -//go:noescape -func StoreRel(ptr *uint32, val uint32) - -// StorepNoWB performs *ptr = val atomically and without a write -// barrier. -// -// NO go:noescape annotation; see atomic_pointer.go. -func StorepNoWB(ptr unsafe.Pointer, val unsafe.Pointer) diff --git a/src/runtime/internal/atomic/atomic_test.go b/src/runtime/internal/atomic/atomic_test.go index 0ba75447e8..9e4461ce38 100644 --- a/src/runtime/internal/atomic/atomic_test.go +++ b/src/runtime/internal/atomic/atomic_test.go @@ -86,14 +86,8 @@ func TestUnaligned64(t *testing.T) { // a continual source of pain. Test that on 32-bit systems they crash // instead of failing silently. - switch runtime.GOARCH { - default: - if unsafe.Sizeof(int(0)) != 4 { - t.Skip("test only runs on 32-bit systems") - } - case "amd64p32": - // amd64p32 can handle unaligned atomics. - t.Skipf("test not needed on %v", runtime.GOARCH) + if unsafe.Sizeof(int(0)) != 4 { + t.Skip("test only runs on 32-bit systems") } x := make([]uint32, 4) -- cgit v1.3