diff options
author | Martin Möhrmann <martisch@uos.de> | 2016-09-03 18:39:25 +0200 |
---|---|---|
committer | Martin Möhrmann <martisch@uos.de> | 2016-09-03 20:05:36 +0000 |
commit | fd41951c2b243a80e7b2b5d28a90839c928cfd2e (patch) | |
tree | fe0c38ec752579fb9cd4c51bcc7f58e5a9e845fd /src/unicode | |
parent | 38abd43b6a4d215375901d137a3eac9d0d3393a5 (diff) | |
download | go-fd41951c2b243a80e7b2b5d28a90839c928cfd2e.tar.gz go-fd41951c2b243a80e7b2b5d28a90839c928cfd2e.zip |
unicode/utf8: reduce bounds checks in EncodeRune
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>
Diffstat (limited to 'src/unicode')
-rw-r--r-- | src/unicode/utf8/utf8.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/unicode/utf8/utf8.go b/src/unicode/utf8/utf8.go index 9d35be6c06..2ff79f6683 100644 --- a/src/unicode/utf8/utf8.go +++ b/src/unicode/utf8/utf8.go @@ -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 |