]> Cypherpunks.ru repositories - gostls13.git/commitdiff
unicode/utf8: reduce bounds checks in EncodeRune
authorMartin Möhrmann <martisch@uos.de>
Sat, 3 Sep 2016 16:39:25 +0000 (18:39 +0200)
committerMartin Möhrmann <martisch@uos.de>
Sat, 3 Sep 2016 20:05:36 +0000 (20:05 +0000)
Provide bounds elim hints in EncodeRune.

name                  old time/op  new time/op  delta
EncodeASCIIRune-4     2.69ns ± 2%  2.69ns ± 2%    ~     (p=0.193 n=47+46)
EncodeJapaneseRune-4  5.97ns ± 2%  5.38ns ± 2%  -9.93%  (p=0.000 n=49+50)

Change-Id: I1a6dcffff3bdd64ab93c2130021e3b00981de4c8
Reviewed-on: https://go-review.googlesource.com/28492
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/unicode/utf8/utf8.go

index 9d35be6c065400e32fce4cfd3b2e816656b8480a..2ff79f66835d9af71113140e1d5901da5a1f5361 100644 (file)
@@ -347,6 +347,7 @@ func EncodeRune(p []byte, r rune) int {
                p[0] = byte(r)
                return 1
        case i <= rune2Max:
+               _ = p[1] // eliminate bounds checks
                p[0] = t2 | byte(r>>6)
                p[1] = tx | byte(r)&maskx
                return 2
@@ -354,11 +355,13 @@ func EncodeRune(p []byte, r rune) int {
                r = RuneError
                fallthrough
        case i <= rune3Max:
+               _ = p[2] // eliminate bounds checks
                p[0] = t3 | byte(r>>12)
                p[1] = tx | byte(r>>6)&maskx
                p[2] = tx | byte(r)&maskx
                return 3
        default:
+               _ = p[3] // eliminate bounds checks
                p[0] = t4 | byte(r>>18)
                p[1] = tx | byte(r>>12)&maskx
                p[2] = tx | byte(r>>6)&maskx