mirror of
https://github.com/golang/go
synced 2024-11-20 05:44:44 -07:00
The Go programming language
542dd8b9fb
Thanks to Minux and Remy for their advice. The EOR optimisation is applied to a few places in the stdlib. // hash/crc32/crc32.go func update(crc uint32, tab *Table, p []byte) uint32 { crc = ^crc for _, v := range p { crc = tab[byte(crc)^v] ^ (crc >> 8) } return ^crc } before: --- prog list "update" --- 0164 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:101) TEXT update+0(SB),$12-24 0165 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:101) MOVW tab+4(FP),R8 0166 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:102) MOVW crc+0(FP),R0 0167 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:102) EOR $-1,R0,R5 0168 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:103) MOVW p+8(FP),R0 0169 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:103) MOVW R0,autotmp_0019+-12(SP) after: --- prog list "update" --- 0164 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:101) TEXT update+0(SB),$12-24 0165 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:101) MOVW tab+4(FP),R8 0166 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:102) MOVW crc+0(FP),R0 0167 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:102) MVN R0,R5 0168 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:103) MOVW p+8(FP),R0 0169 (/home/dfc/go/src/pkg/hash/crc32/crc32.go:103) MOVW R0,autotmp_0019+-12(SP) After 5l has done its work, crc = ^crc 3d710: e59d0014 ldr r0, [sp, #20] 3d714: e3e0b000 mvn fp, #0 3d718: e020500b eor r5, r0, fp becomes crc = ^crc 3d710: e59d0014 ldr r0, [sp, #20] 3d714: e1e05000 mvn r5, r0 The MOVB optimisation has a small impact on the stdlib, in strconv and gzip. // GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950). func put2(p []byte, v uint16) { p[0] = uint8(v >> 0) p[1] = uint8(v >> 8) } before: --- prog list "put2" --- 1369 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:76) TEXT put2+0(SB),$0-16 1370 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:76) MOVHU v+12(FP),R4 1371 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVHU R4,R0 1372 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVHU R0,R0 1373 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVBU R0,R1 1374 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVBU R1,R3 1375 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVW $p+0(FP),R1 after: --- prog list "put2" --- 1369 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:76) TEXT put2+0(SB),$0-16 1370 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:76) MOVHU v+12(FP),R4 1371 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVHU R4,R0 1372 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVBU R0,R1 1373 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVBU R1,R3 1374 (/home/dfc/go/src/pkg/compress/gzip/gzip.go:77) MOVW $p+0(FP),R1 R=remyoudompheng, rsc, minux.ma CC=golang-dev https://golang.org/cl/6674048 |
||
---|---|---|
api | ||
doc | ||
include | ||
lib | ||
misc | ||
src | ||
test | ||
.hgignore | ||
.hgtags | ||
AUTHORS | ||
CONTRIBUTORS | ||
favicon.ico | ||
LICENSE | ||
PATENTS | ||
README | ||
robots.txt |
This is the source code repository for the Go programming language. For documentation about how to install and use Go, visit http://golang.org/ or load doc/install.html in your web browser. After installing Go, you can view a nicely formatted doc/install.html by running godoc --http=:6060 and then visiting http://localhost:6060/doc/install.html. Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. -- Binary Distribution Notes If you have just untarred a binary Go distribution, you need to set the environment variable $GOROOT to the full path of the go directory (the one containing this README). You can omit the variable if you unpack it into /usr/local/go, or if you rebuild from sources by running all.bash (see doc/install.html). You should also add the Go binary directory $GOROOT/bin to your shell's path. For example, if you extracted the tar file into $HOME/go, you might put the following in your .profile: export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin See doc/install.html for more details.