Descriptioncmd/gc: recognize (a.b[0]<<1 | a.b[0]>>31) as a rotate, not just
(x<<1 | x>>31).
Fixes issue 5084.
On the SHA3 benchmark proposals at
https://codereview.appspot.com/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 ,
Patch Set 1 #Patch Set 2 : diff -r ff779e477085 https://go.googlecode.com/hg/ #Patch Set 3 : diff -r ff779e477085 https://go.googlecode.com/hg/ #Patch Set 4 : diff -r ff779e477085 https://go.googlecode.com/hg/ #
Total comments: 10
Patch Set 5 : diff -r ff779e477085 https://go.googlecode.com/hg/ #Patch Set 6 : diff -r 7d736eaa75da https://go.googlecode.com/hg/ #MessagesTotal messages: 9
|