.
authorclaus
Wed, 16 Aug 1995 01:44:42 +0200
changeset 393 93a4be711b8e
parent 392 dcebaf69dfe9
child 394 c17e818d7a59
.
Array.st
--- a/Array.st	Tue Aug 15 21:39:56 1995 +0200
+++ b/Array.st	Wed Aug 16 01:44:42 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libbasic/Array.st,v 1.36 1995-08-13 03:01:58 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Array.st,v 1.37 1995-08-15 23:44:42 claus Exp $
 '!
 
 !Array class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libbasic/Array.st,v 1.36 1995-08-13 03:01:58 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Array.st,v 1.37 1995-08-15 23:44:42 claus Exp $
 "
 !
 
@@ -524,6 +524,25 @@
 	    spc = __qSpace(nObj);
 	    srcP = _ArrayInstPtr(self)->a_element;
 	    dstP = _ArrayInstPtr(nObj)->a_element;
+#ifdef UNROLL_LOOPS
+	    while (nIndex >= 4) {
+		element = srcP[0];
+		dstP[0] = element;
+		__STORE_SPC(nObj, element, spc);
+		element = srcP[1];
+		dstP[1] = element;
+		__STORE_SPC(nObj, element, spc);
+		element = srcP[2];
+		dstP[2] = element;
+		__STORE_SPC(nObj, element, spc);
+		element = srcP[3];
+		dstP[3] = element;
+		__STORE_SPC(nObj, element, spc);
+		srcP += 4;
+		dstP += 4;
+		nIndex -= 4;
+	    }
+#endif
 	    while (nIndex--) {
 		element = *srcP++;
 		*dstP++ = element;
@@ -559,6 +578,20 @@
 	if ((INT)anObject == 0) {
 	    memset(dst, 0, __OBJS2BYTES__(nIndex));
 	} else {
+#ifdef UNROLL_LOOPS
+	    while (nIndex >= 8) {
+		dst[0] = anObject;
+		dst[1] = anObject;
+		dst[2] = anObject;
+		dst[3] = anObject;
+		dst[4] = anObject;
+		dst[5] = anObject;
+		dst[6] = anObject;
+		dst[7] = anObject;
+		dst += 8;
+		nIndex -= 8;
+	    }
+#endif
 	    for (; nIndex; nIndex--) {
 		*dst++ = anObject;
 	    }