From: Cuong Manh Le Date: Mon, 16 Oct 2023 16:07:49 +0000 (+0700) Subject: runtime: speed up readvarintUnsafe X-Git-Tag: go1.22rc1~573 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=67359829a20ee3be5d97e5f7677871e95fff87a5;p=gostls13.git 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 Reviewed-by: Than McIntosh Auto-Submit: Cuong Manh Le Reviewed-by: Matthew Dempsky --- diff --git a/src/runtime/panic.go b/src/runtime/panic.go index 93f03400a5..5f54ee4b01 100644 --- a/src/runtime/panic.go +++ b/src/runtime/panic.go @@ -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)< 28 { panic("Bad varint")