]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/base64, encoding/base32: speed up Encode
authorRui Ueyama <ruiu@google.com>
Thu, 19 Jun 2014 19:04:59 +0000 (12:04 -0700)
committerRui Ueyama <ruiu@google.com>
Thu, 19 Jun 2014 19:04:59 +0000 (12:04 -0700)
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

src/pkg/encoding/base32/base32.go
src/pkg/encoding/base64/base64.go

index ea5c0ae27cc34dff81bae3b84ba857bb59b9217a..5a9e86919d80035a69febd7cc94eeabbf98db037 100644 (file)
@@ -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
index f89afd2b9201023958aee19d2175ea07ef3bab52..ad3abe66239f8425f6d50747d824b7e8a49627e9 100644 (file)
@@ -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