• Dave Cheney's avatar
    cmd/5g: peep.c: reactivate some optimisations · 542dd8b9
    Dave Cheney authored
    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
    542dd8b9
Name
Last commit
Last update
..
5a Loading commit data...
5c Loading commit data...
5g Loading commit data...
5l Loading commit data...
6a Loading commit data...
6c Loading commit data...
6g Loading commit data...
6l Loading commit data...
8a Loading commit data...
8c Loading commit data...
8g Loading commit data...
8l Loading commit data...
addr2line Loading commit data...
api Loading commit data...
cc Loading commit data...
cgo Loading commit data...
cov Loading commit data...
dist Loading commit data...
fix Loading commit data...
gc Loading commit data...
go Loading commit data...
godoc Loading commit data...
gofmt Loading commit data...
ld Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
prof Loading commit data...
vet Loading commit data...
yacc Loading commit data...