From: Rui Ueyama Date: Thu, 19 Jun 2014 19:04:59 +0000 (-0700) Subject: encoding/base64, encoding/base32: speed up Encode X-Git-Tag: go1.4beta1~1255 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=24f8919aafa476a4730184bd4dc743a7a76e62ff;p=gostls13.git encoding/base64, encoding/base32: speed up Encode Avoid unnecessary bitwise-OR operations. benchmark old MB/s new MB/s speedup BenchmarkEncodeToStringBase64 179.02 205.74 1.15x BenchmarkEncodeToStringBase32 155.86 167.82 1.08x LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/109090043 --- diff --git a/src/pkg/encoding/base32/base32.go b/src/pkg/encoding/base32/base32.go index ea5c0ae27c..5a9e86919d 100644 --- a/src/pkg/encoding/base32/base32.go +++ b/src/pkg/encoding/base32/base32.go @@ -79,26 +79,26 @@ func (enc *Encoding) Encode(dst, src []byte) { // destination quantum switch len(src) { default: - b7 |= src[4] & 0x1F - b6 |= src[4] >> 5 + b7 = src[4] & 0x1F + b6 = src[4] >> 5 fallthrough case 4: b6 |= (src[3] << 3) & 0x1F - b5 |= (src[3] >> 2) & 0x1F - b4 |= src[3] >> 7 + b5 = (src[3] >> 2) & 0x1F + b4 = src[3] >> 7 fallthrough case 3: b4 |= (src[2] << 1) & 0x1F - b3 |= (src[2] >> 4) & 0x1F + b3 = (src[2] >> 4) & 0x1F fallthrough case 2: b3 |= (src[1] << 4) & 0x1F - b2 |= (src[1] >> 1) & 0x1F - b1 |= (src[1] >> 6) & 0x1F + b2 = (src[1] >> 1) & 0x1F + b1 = (src[1] >> 6) & 0x1F fallthrough case 1: b1 |= (src[0] << 2) & 0x1F - b0 |= src[0] >> 3 + b0 = src[0] >> 3 } // Encode 5-bit blocks using the base32 alphabet diff --git a/src/pkg/encoding/base64/base64.go b/src/pkg/encoding/base64/base64.go index f89afd2b92..ad3abe6623 100644 --- a/src/pkg/encoding/base64/base64.go +++ b/src/pkg/encoding/base64/base64.go @@ -80,16 +80,16 @@ func (enc *Encoding) Encode(dst, src []byte) { // destination quantum switch len(src) { default: - b3 |= src[2] & 0x3F - b2 |= src[2] >> 6 + b3 = src[2] & 0x3F + b2 = src[2] >> 6 fallthrough case 2: b2 |= (src[1] << 2) & 0x3F - b1 |= src[1] >> 4 + b1 = src[1] >> 4 fallthrough case 1: b1 |= (src[0] << 4) & 0x3F - b0 |= src[0] >> 2 + b0 = src[0] >> 2 } // Encode 6-bit blocks using the base64 alphabet