mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: use staticuint64s instead of staticbytes for 1-length strings
This was the last remaining use of staticbytes, so we can now delete it. The new code appears slightly faster on amd64: name old time/op new time/op delta SliceByteToString/1-4 6.29ns ± 2% 5.89ns ± 1% -6.46% (p=0.000 n=14+14) This may not be the case on the big-endian architectures, since they have to do an extra addition. Updates #37612 Change-Id: Icb84c5911ba025f798de152849992a55be99e4f3 Reviewed-on: https://go-review.googlesource.com/c/go/+/221979 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
4de606b55f
commit
bda42a7a78
2 changed files with 6 additions and 43 deletions
|
|
@ -6,6 +6,7 @@ package runtime
|
|||
|
||||
import (
|
||||
"internal/bytealg"
|
||||
"runtime/internal/sys"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
|
|
@ -90,7 +91,11 @@ func slicebytetostring(buf *tmpBuf, b []byte) (str string) {
|
|||
msanread(unsafe.Pointer(&b[0]), uintptr(l))
|
||||
}
|
||||
if l == 1 {
|
||||
stringStructOf(&str).str = unsafe.Pointer(&staticbytes[b[0]])
|
||||
p := unsafe.Pointer(&staticuint64s[b[0]])
|
||||
if sys.BigEndian {
|
||||
p = add(p, 7)
|
||||
}
|
||||
stringStructOf(&str).str = p
|
||||
stringStructOf(&str).len = 1
|
||||
return
|
||||
}
|
||||
|
|
@ -231,12 +236,6 @@ func stringStructOf(sp *string) *stringStruct {
|
|||
}
|
||||
|
||||
func intstring(buf *[4]byte, v int64) (s string) {
|
||||
if v >= 0 && v < runeSelf {
|
||||
stringStructOf(&s).str = unsafe.Pointer(&staticbytes[v])
|
||||
stringStructOf(&s).len = 1
|
||||
return
|
||||
}
|
||||
|
||||
var b []byte
|
||||
if buf != nil {
|
||||
b = buf[:]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue