aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/string.goc
diff options
context:
space:
mode:
authorRémy Oudompheng <oudomphe@phare.normalesup.org>2012-08-05 21:35:41 +0200
committerRémy Oudompheng <oudomphe@phare.normalesup.org>2012-08-05 21:35:41 +0200
commit77f3e189d2bd4eb015235d200ca75803e45c87ef (patch)
tree76a992e3dbc8ae3170f5e28917bbefd7a6c0178c /src/pkg/runtime/string.goc
parentab058b35402aded8579e3e9653c0d78c5c4e9e5e (diff)
downloadgo-77f3e189d2bd4eb015235d200ca75803e45c87ef.tar.xz
runtime: faster string equality.
benchmark old ns/op new ns/op delta BenchmarkCompareStringEqual 51 35 -30.20% BenchmarkCompareStringIdentical 51 7 -85.71% BenchmarkCompareStringSameLength 25 18 -28.29% BenchmarkCompareStringDifferentLength 2 2 +1.46% R=golang-dev, rsc CC=golang-dev, remy https://golang.org/cl/6450092
Diffstat (limited to 'src/pkg/runtime/string.goc')
-rw-r--r--src/pkg/runtime/string.goc20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/pkg/runtime/string.goc b/src/pkg/runtime/string.goc
index 7cab6d2417..b72a1aa5e7 100644
--- a/src/pkg/runtime/string.goc
+++ b/src/pkg/runtime/string.goc
@@ -204,6 +204,26 @@ func cmpstring(s1 String, s2 String) (v int32) {
v = cmpstring(s1, s2);
}
+func eqstring(s1 String, s2 String) (v bool) {
+ uint32 i, l;
+
+ if(s1.len != s2.len) {
+ v = false;
+ return;
+ }
+ if(s1.str == s2.str) {
+ v = true;
+ return;
+ }
+ l = s1.len;
+ for(i=0; i<l; i++)
+ if(s1.str[i] != s2.str[i]) {
+ v = false;
+ return;
+ }
+ v = true;
+}
+
int32
runtime·strcmp(byte *s1, byte *s2)
{