Jeff Clites <[EMAIL PROTECTED]> wrote:
This change speeds up the attached benchmark by a factor of 1.86 in the
optimize case (via --optimize, so -Os), or 3.73 in the unoptimized case
(on Mac OS X):
Wheee, that's a lot.
Here's another tiny patch, to let us fast-fail string_equal if we have cached hashval's which don't match. It will only make a difference in some cases (strings of equal length which only differ near the end, and which have cached hashval's), but in those cases the speedup can be a factor of 1.8 (optimized build, benchmark attached).
JEff
Index: src/string.c
===================================================================
RCS file: /cvs/public/parrot/src/string.c,v
retrieving revision 1.195
diff -u -b -r1.195 string.c
--- src/string.c 19 Apr 2004 12:15:15 -0000 1.195
+++ src/string.c 20 Apr 2004 16:40:41 -0000
@@ -1758,6 +1758,11 @@
else if (!s1->strlen && !s2->strlen) {
return 0;
}
+ else if ((s1->hashval != s2->hashval)
+ && (s1->hashval != 0) && (s2->hashval != 0))
+ {
+ return 1;
+ } # if ! DISABLE_GC_DEBUG
/* It's easy to forget that string comparison can trigger GC */
string-equal-timing-hashed.pasm
Description: Binary data
