mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: speed up readvarintUnsafe
The documentation of readvarintUnsafe claims itself and readvarint are duplicated. However, two implementation are not in synced, since when readvarint got some minor improvements in CL 43150. Updating readvarintUnsafe to match readvarint implementation to gain a bit of speed. While at it, also updating its documentation to clarify the main difference. name time/op ReadvarintUnsafe/old-8 6.04ns ± 2% ReadvarintUnsafe/new-8 5.31ns ± 3% Change-Id: Ie1805d0747544f69de88f6ba9d1b3960f80f00e8 Reviewed-on: https://go-review.googlesource.com/c/go/+/535815 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Than McIntosh <thanm@google.com> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
070c1fcbc5
commit
67359829a2
1 changed files with 3 additions and 5 deletions
|
|
@ -670,10 +670,8 @@ func printpanics(p *_panic) {
|
|||
// readvarintUnsafe reads the uint32 in varint format starting at fd, and returns the
|
||||
// uint32 and a pointer to the byte following the varint.
|
||||
//
|
||||
// There is a similar function runtime.readvarint, which takes a slice of bytes,
|
||||
// rather than an unsafe pointer. These functions are duplicated, because one of
|
||||
// the two use cases for the functions would get slower if the functions were
|
||||
// combined.
|
||||
// The implementation is the same with runtime.readvarint, except that this function
|
||||
// uses unsafe.Pointer for speed.
|
||||
func readvarintUnsafe(fd unsafe.Pointer) (uint32, unsafe.Pointer) {
|
||||
var r uint32
|
||||
var shift int
|
||||
|
|
@ -683,7 +681,7 @@ func readvarintUnsafe(fd unsafe.Pointer) (uint32, unsafe.Pointer) {
|
|||
if b < 128 {
|
||||
return r + uint32(b)<<shift, fd
|
||||
}
|
||||
r += ((uint32(b) &^ 128) << shift)
|
||||
r += uint32(b&0x7F) << (shift & 31)
|
||||
shift += 7
|
||||
if shift > 28 {
|
||||
panic("Bad varint")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue