diff --git a/src/runtime/string.go b/src/runtime/string.go index cf6d0af6..30736d30 100644 --- a/src/runtime/string.go +++ b/src/runtime/string.go @@ -216,16 +216,3 @@ func indexByteString(s string, c byte) int { } return -1 } - -// countString copies the implementation from -// https://github.com/golang/go/blob/67f181bfd84dfd5942fe9a29d8a20c9ce5eb2fea/src/internal/bytealg/count_generic.go#L1 -//go:linkname countString internal/bytealg.CountString -func countString(s string, c byte) int { - n := 0 - for i := 0; i < len(s); i++ { - if s[i] == c { - n++ - } - } - return n -} diff --git a/src/runtime/string_count.go b/src/runtime/string_count.go new file mode 100644 index 00000000..6b4f8d42 --- /dev/null +++ b/src/runtime/string_count.go @@ -0,0 +1,23 @@ +// +build amd64 arm,go1.13 arm64 ppc64le ppc64 s390x + +package runtime + +// This file implements the string counting functions used by the strings +// package, for example. It must be reimplemented here as a replacement for the +// Go stdlib asm implementations, but only when the asm implementations are used +// (this varies by Go version). +// Track this file for updates: +// https://github.com/golang/go/blob/master/src/internal/bytealg/count_native.go + +// countString copies the implementation from +// https://github.com/golang/go/blob/67f181bfd84dfd5942fe9a29d8a20c9ce5eb2fea/src/internal/bytealg/count_generic.go#L1 +//go:linkname countString internal/bytealg.CountString +func countString(s string, c byte) int { + n := 0 + for i := 0; i < len(s); i++ { + if s[i] == c { + n++ + } + } + return n +} diff --git a/testdata/stdlib.go b/testdata/stdlib.go index a06a6cbf..b0f2ce39 100644 --- a/testdata/stdlib.go +++ b/testdata/stdlib.go @@ -18,4 +18,5 @@ func main() { // package strings fmt.Println("strings.IndexByte:", strings.IndexByte("asdf", 'd')) + fmt.Println("strings.Replace:", strings.Replace("An example string", " ", "-", -1)) } diff --git a/testdata/stdlib.txt b/testdata/stdlib.txt index aeef0388..ecf4402d 100644 --- a/testdata/stdlib.txt +++ b/testdata/stdlib.txt @@ -3,3 +3,4 @@ stdout: 1 stderr: 2 pseudorandom number: 1298498081 strings.IndexByte: 2 +strings.Replace: An-example-string