From 67359829a20ee3be5d97e5f7677871e95fff87a5 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Mon, 16 Oct 2023 23:07:49 +0700 Subject: [PATCH] runtime: speed up readvarintUnsafe MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/runtime/panic.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) 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") -- 2.50.0