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:
parent
8d9ece9dde
commit
3504945081
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user