From 65fc2758670c06dcb89d1bd829f990290c74e8c3 Mon Sep 17 00:00:00 2001
From: dgp <dgp@users.sourceforge.net>
Date: Sat, 27 Aug 2011 02:28:47 +0000
Subject: Repaired the lost performance in the copy loop hotspots.  Now meets
 or beats the former trunk (and current trunk by magnitudes) in tclbench.

---
 generic/tclStringObj.c | 25 ++++++++++++-------------
 1 file 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--;
 	}
     }
 }
-- 
cgit v0.12