runtime: only implement CountString for required platforms

This commit is contained in:
Ayke van Laethem
2019-11-10 13:44:48 +01:00
committed by Ron Evans
parent 405c0263b0
commit efafda1d32
4 changed files with 25 additions and 13 deletions
-13
View File
@@ -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
}
+23
View File
@@ -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
}
+1
View File
@@ -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))
}
+1
View File
@@ -3,3 +3,4 @@ stdout: 1
stderr: 2
pseudorandom number: 1298498081
strings.IndexByte: 2
strings.Replace: An-example-string