diff options
| author | dgp@users.sourceforge.net <dgp> | 2011-08-27 02:28:47 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2011-08-27 02:28:47 (GMT) |
| commit | b5e305564ff0f7c43f611ca8969e26a83526b5f7 (patch) | |
| tree | 5481d19a825ee071bc18410c1021c221bc9e88ce /generic/tclStringObj.c | |
| parent | 9f01d1a687000eb1599393c6de94a8c05dab168b (diff) | |
| download | tcl-b5e305564ff0f7c43f611ca8969e26a83526b5f7.zip tcl-b5e305564ff0f7c43f611ca8969e26a83526b5f7.tar.gz tcl-b5e305564ff0f7c43f611ca8969e26a83526b5f7.tar.bz2 | |
Repaired the lost performance in the copy loop hotspots. Now meets or
beats the former trunk (and current trunk by magnitudes) in tclbench.
Diffstat (limited to 'generic/tclStringObj.c')
| -rw-r--r-- | generic/tclStringObj.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 27480c5..bccd28a 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -2660,18 +2660,17 @@ ReverseBytes( int count) /* Until this many are copied, */ /* reversing as you go. */ { + unsigned char *src = from + count - 1; if (to == from) { /* Reversing in place */ - from += count - 1; - while (to < from) { - unsigned char c = *from; - *from-- = *to; + while (to < src) { + unsigned char c = *src; + *src-- = *to; *to++ = c; } } else { - from += count - 1; - while (count--) { - *to++ = *from--; + while (src >= from) { + *to++ = *src--; } } } @@ -2683,18 +2682,18 @@ ReverseUniChars( unsigned int count) /* Until this many are copied, */ /* reversing as you go. */ { + Tcl_UniChar *src = from + count - 1; if (to == from) { /* Reversing in place */ from += count - 1; - while (to < from) { - Tcl_UniChar c = *from; - *from-- = *to; + while (to < src) { + Tcl_UniChar c = *src; + *src-- = *to; *to++ = c; } } else { - from += count - 1; - while (count--) { - *to++ = *from--; + while (src >= from) { + *to++ = *src--; } } } |
