1
0
mirror of https://github.com/golang/go synced 2024-11-19 04:44:41 -07:00

cmd/link: optimize int parsing

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 <crawshaw@golang.org>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Shahar Kohanim 2016-03-19 23:27:41 +02:00 committed by David Crawshaw
parent 8d9ece9dde
commit 3504945081
2 changed files with 9 additions and 5 deletions

View File

@ -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 {

View File

@ -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
}