• Nigel Tao's avatar
    cmd/gc: recognize (a.b[0]<<1 | a.b[0]>>31) as a rotate, not just · 4de66875
    Nigel Tao authored
    (x<<1 | x>>31).
    
    Fixes #5084.
    
    On the SHA3 benchmark proposals at
    https://golang.org/cl/7760044/
    
    benchmark                       old ns/op    new ns/op    delta
    BenchmarkPermutationFunction         1288         1191   -7.53%
    BenchmarkSingleByteWrite             5795         5811   +0.28%
    BenchmarkBlockWrite512                178          179   +0.56%
    BenchmarkBlockWrite384                230          233   +1.30%
    BenchmarkBlockWrite256                282          286   +1.42%
    BenchmarkBlockWrite224                301          306   +1.66%
    BenchmarkBulkHashSHA3_512          326885       304548   -6.83%
    BenchmarkBulkHashSHA3_384          234839       220074   -6.29%
    BenchmarkBulkHashSHA3_256          186969       175790   -5.98%
    BenchmarkBulkHashSHA3_224          178133       167489   -5.98%
    
    For a function like
    
    func g() {
            x = a[3]<<20 | a[3]>>12
    }
    
    the asm goes from
    
    0006 (main.go:10) TEXT    g+0(SB),$0-0
    0007 (main.go:10) MOVL    a+12(SB),BP
    0008 (main.go:10) LOCALS  ,$0
    0009 (main.go:11) MOVL    BP,BX
    0010 (main.go:11) SHLL    $20,BX
    0011 (main.go:11) SHRL    $12,BP
    0012 (main.go:11) ORL     BP,BX
    0013 (main.go:11) MOVL    BX,x+0(SB)
    0014 (main.go:12) RET     ,
    
    to
    
    0006 (main.go:10) TEXT    g+0(SB),$0-0
    0007 (main.go:10) LOCALS  ,$0
    0008 (main.go:11) MOVL    a+12(SB),BX
    0009 (main.go:11) ROLL    $20,BX
    0010 (main.go:11) MOVL    BX,x+0(SB)
    0011 (main.go:12) RET     ,
    
    R=rsc, iant, remyoudompheng
    CC=golang-dev, jcb
    https://golang.org/cl/7944043
    4de66875
Name
Last commit
Last update
api Loading commit data...
doc Loading commit data...
include Loading commit data...
lib Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.hgignore Loading commit data...
.hgtags Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...