-
Nigel Tao authored
On 6g/linux: benchmark old ns/op new ns/op delta BenchmarkFDCT 4606 4241 -7.92% BenchmarkIDCT 4187 3923 -6.31% BenchmarkDecodeBaseline 3154864 3170224 +0.49% BenchmarkDecodeProgressive 4072812 4017132 -1.37% BenchmarkEncode 39406920 34596760 -12.21% Stack requirements before (from 'go tool 6g -S'): (scan.go:37) TEXT (*decoder).processSOS+0(SB),$1352-32 (writer.go:448) TEXT (*encoder).writeSOS+0(SB),$5344-24 after: (scan.go:37) TEXT (*decoder).processSOS+0(SB),$1064-32 (writer.go:448) TEXT (*encoder).writeSOS+0(SB),$2520-24 Also, in encoder.writeSOS, re-use the yBlock scratch buffer for Cb and Cr. This reduces the stack requirement slightly, but also avoids an unlucky coincidence where a BenchmarkEncode stack split lands between encoder.writeByte and bufio.Writer.WriteByte, which occurs very often during Huffman encoding and is otherwise disasterous for the final benchmark number. FWIW, the yBlock re-use *without* the s/int/int32/ change does not have a noticable effect on the benchmarks. R=r CC=golang-dev, rsc https://golang.org/cl/6823043
daf43ba4