From 3504945081db0188ce1c7ec72c2ede669ee1b86f Mon Sep 17 00:00:00 2001 From: Shahar Kohanim Date: Sat, 19 Mar 2016 23:27:41 +0200 Subject: [PATCH] cmd/link: optimize int parsing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Speeds up linking cmd/go by ~1.5%: name old s/op new s/op delta LinkCmdGo 0.58 ± 6% 0.57 ± 5% -1.21% (p=0.000 n=98+99) Less noisy benchmark, with garbage collection off: name old s/op new s/op delta LinkCmdGo 0.49 ± 2% 0.49 ± 2% -1.79% (p=0.000 n=98+99) Change-Id: I0123bcb66a87cbc4d703356e4c5a4035032012ec Reviewed-on: https://go-review.googlesource.com/20916 Reviewed-by: David Crawshaw Run-TryBot: David Crawshaw TryBot-Result: Gobot Gobot --- src/cmd/internal/obj/util.go | 2 ++ src/cmd/link/internal/ld/objfile.go | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cmd/internal/obj/util.go b/src/cmd/internal/obj/util.go index 18450962ed..b04b1a55d4 100644 --- a/src/cmd/internal/obj/util.go +++ b/src/cmd/internal/obj/util.go @@ -33,6 +33,8 @@ type Biobuf struct { linelen int } +func (b *Biobuf) Reader() *bufio.Reader { return b.r } + func Bopenw(name string) (*Biobuf, error) { f, err := os.Create(name) if err != nil { diff --git a/src/cmd/link/internal/ld/objfile.go b/src/cmd/link/internal/ld/objfile.go index 21b9d6e820..c98080f57f 100644 --- a/src/cmd/link/internal/ld/objfile.go +++ b/src/cmd/link/internal/ld/objfile.go @@ -395,15 +395,17 @@ func readref(ctxt *Link, f *obj.Biobuf, pkg string, pn string) { } func rdint64(f *obj.Biobuf) int64 { - var c int - + r := f.Reader() uv := uint64(0) - for shift := 0; ; shift += 7 { + for shift := uint(0); ; shift += 7 { if shift >= 64 { log.Fatalf("corrupt input") } - c = obj.Bgetc(f) - uv |= uint64(c&0x7F) << uint(shift) + c, err := r.ReadByte() + if err != nil { + log.Fatalln("error reading input: ", err) + } + uv |= uint64(c&0x7F) << shift if c&0x80 == 0 { break } -- 2.48.1