summaryrefslogtreecommitdiff
path: root/libgo/go/internal/bytealg
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2019-01-18 19:04:36 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-01-18 19:04:36 +0000
commit4f4a855d82a889cebcfca150a7a43909bcb6a346 (patch)
treef12bae0781920fa34669fe30b6f4615a86d9fb80 /libgo/go/internal/bytealg
parent225220d668dafb8262db7012bced688acbe63b33 (diff)
downloadgcc-4f4a855d82a889cebcfca150a7a43909bcb6a346.tar.gz
libgo: update to Go1.12beta2
Reviewed-on: https://go-review.googlesource.com/c/158019 gotools/: * Makefile.am (go_cmd_vet_files): Update for Go1.12beta2 release. (GOTOOLS_TEST_TIMEOUT): Increase to 600. (check-runtime): Export LD_LIBRARY_PATH before computing GOARCH and GOOS. (check-vet): Copy golang.org/x/tools into check-vet-dir. * Makefile.in: Regenerate. gcc/testsuite/: * go.go-torture/execute/names-1.go: Stop using debug/xcoff, which is no longer externally visible. From-SVN: r268084
Diffstat (limited to 'libgo/go/internal/bytealg')
-rw-r--r--libgo/go/internal/bytealg/bytealg.c6
-rw-r--r--libgo/go/internal/bytealg/bytealg.go11
-rw-r--r--libgo/go/internal/bytealg/compare_generic.go28
-rw-r--r--libgo/go/internal/bytealg/compare_native.go9
-rw-r--r--libgo/go/internal/bytealg/count_generic.go2
-rw-r--r--libgo/go/internal/bytealg/count_native.go2
-rw-r--r--libgo/go/internal/bytealg/equal_native.go12
-rw-r--r--libgo/go/internal/bytealg/indexbyte_generic.go22
8 files changed, 33 insertions, 59 deletions
diff --git a/libgo/go/internal/bytealg/bytealg.c b/libgo/go/internal/bytealg/bytealg.c
index 1ee1ff61a06..c7c6cce8227 100644
--- a/libgo/go/internal/bytealg/bytealg.c
+++ b/libgo/go/internal/bytealg/bytealg.c
@@ -53,8 +53,10 @@ intgo Compare(struct __go_open_array a, struct __go_open_array b)
int i;
i = __builtin_memcmp(a.__values, b.__values, (size_t)(l));
- if (i != 0) {
- return i;
+ if (i < 0) {
+ return -1;
+ } else if (i > 0) {
+ return 1;
}
}
if (a.__count < b.__count) {
diff --git a/libgo/go/internal/bytealg/bytealg.go b/libgo/go/internal/bytealg/bytealg.go
index b91eb0075ba..e46ee7c4fba 100644
--- a/libgo/go/internal/bytealg/bytealg.go
+++ b/libgo/go/internal/bytealg/bytealg.go
@@ -13,11 +13,12 @@ import (
// Offsets into internal/cpu records for use in assembly.
const (
- x86_HasSSE2 = unsafe.Offsetof(cpu.X86.HasSSE2)
- x86_HasSSE42 = unsafe.Offsetof(cpu.X86.HasSSE42)
- x86_HasAVX2 = unsafe.Offsetof(cpu.X86.HasAVX2)
- x86_HasPOPCNT = unsafe.Offsetof(cpu.X86.HasPOPCNT)
- s390x_HasVX = unsafe.Offsetof(cpu.S390X.HasVX)
+ offsetX86HasSSE2 = unsafe.Offsetof(cpu.X86.HasSSE2)
+ offsetX86HasSSE42 = unsafe.Offsetof(cpu.X86.HasSSE42)
+ offsetX86HasAVX2 = unsafe.Offsetof(cpu.X86.HasAVX2)
+ offsetX86HasPOPCNT = unsafe.Offsetof(cpu.X86.HasPOPCNT)
+
+ offsetS390xHasVX = unsafe.Offsetof(cpu.S390X.HasVX)
)
// MaxLen is the maximum length of the string to be searched for (argument b) in Index.
diff --git a/libgo/go/internal/bytealg/compare_generic.go b/libgo/go/internal/bytealg/compare_generic.go
index bb488330e4a..c72bf12ceb0 100644
--- a/libgo/go/internal/bytealg/compare_generic.go
+++ b/libgo/go/internal/bytealg/compare_generic.go
@@ -36,34 +36,6 @@ samebytes:
return 0
}
-//go:linkname bytes_Compare bytes.Compare
-func bytes_Compare(a, b []byte) int {
- l := len(a)
- if len(b) < l {
- l = len(b)
- }
- if l == 0 || &a[0] == &b[0] {
- goto samebytes
- }
- for i := 0; i < l; i++ {
- c1, c2 := a[i], b[i]
- if c1 < c2 {
- return -1
- }
- if c1 > c2 {
- return +1
- }
- }
-samebytes:
- if len(a) < len(b) {
- return -1
- }
- if len(a) > len(b) {
- return +1
- }
- return 0
-}
-
//go:linkname runtime_cmpstring runtime.cmpstring
func runtime_cmpstring(a, b string) int {
l := len(a)
diff --git a/libgo/go/internal/bytealg/compare_native.go b/libgo/go/internal/bytealg/compare_native.go
index 2c317e29de8..844d6698cea 100644
--- a/libgo/go/internal/bytealg/compare_native.go
+++ b/libgo/go/internal/bytealg/compare_native.go
@@ -6,5 +6,14 @@
package bytealg
+import _ "unsafe" // For go:linkname
+
//go:noescape
func Compare(a, b []byte) int
+
+// The declaration below generates ABI wrappers for functions
+// implemented in assembly in this package but declared in another
+// package.
+
+//go:linkname abigen_runtime_cmpstring runtime.cmpstring
+func abigen_runtime_cmpstring(a, b string) int
diff --git a/libgo/go/internal/bytealg/count_generic.go b/libgo/go/internal/bytealg/count_generic.go
index 5a0643011e4..e93ac133358 100644
--- a/libgo/go/internal/bytealg/count_generic.go
+++ b/libgo/go/internal/bytealg/count_generic.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// -build !amd64,!arm64
+// -build !amd64,!arm64,!ppc64le,!ppc64
package bytealg
diff --git a/libgo/go/internal/bytealg/count_native.go b/libgo/go/internal/bytealg/count_native.go
index 5ea5c283851..bb622aec015 100644
--- a/libgo/go/internal/bytealg/count_native.go
+++ b/libgo/go/internal/bytealg/count_native.go
@@ -3,7 +3,7 @@
// license that can be found in the LICENSE file.
// +build ignore_for_gccgo
-// +build amd64 arm64
+// +build amd64 arm64 ppc64le ppc64
package bytealg
diff --git a/libgo/go/internal/bytealg/equal_native.go b/libgo/go/internal/bytealg/equal_native.go
index b5c453086c9..995f0749d44 100644
--- a/libgo/go/internal/bytealg/equal_native.go
+++ b/libgo/go/internal/bytealg/equal_native.go
@@ -4,11 +4,23 @@
package bytealg
+import "unsafe"
+
// Note: there's no equal_generic.go because every platform must implement at least memequal_varlen in assembly.
//go:noescape
func Equal(a, b []byte) bool
+// The declarations below generate ABI wrappers for functions
+// implemented in assembly in this package but declared in another
+// package.
+
// The compiler generates calls to runtime.memequal and runtime.memequal_varlen.
// In addition, the runtime calls runtime.memequal explicitly.
// Those functions are implemented in this package.
+
+//go:linkname abigen_runtime_memequal runtime.memequal
+func abigen_runtime_memequal(a, b unsafe.Pointer, size uintptr) bool
+
+//go:linkname abigen_runtime_memequal_varlen runtime.memequal_varlen
+func abigen_runtime_memequal_varlen(a, b unsafe.Pointer) bool
diff --git a/libgo/go/internal/bytealg/indexbyte_generic.go b/libgo/go/internal/bytealg/indexbyte_generic.go
index 6e59fd1e72e..d39dfa87c34 100644
--- a/libgo/go/internal/bytealg/indexbyte_generic.go
+++ b/libgo/go/internal/bytealg/indexbyte_generic.go
@@ -7,8 +7,6 @@
package bytealg
-import _ "unsafe" // for go:linkname
-
func IndexByte(b []byte, c byte) int {
for i, x := range b {
if x == c {
@@ -26,23 +24,3 @@ func IndexByteString(s string, c byte) int {
}
return -1
}
-
-//go:linkname bytes_IndexByte bytes.IndexByte
-func bytes_IndexByte(b []byte, c byte) int {
- for i, x := range b {
- if x == c {
- return i
- }
- }
- return -1
-}
-
-//go:linkname strings_IndexByte strings.IndexByte
-func strings_IndexByte(s string, c byte) int {
- for i := 0; i < len(s); i++ {
- if s[i] == c {
- return i
- }
- }
- return -1
-}