[Vm-dev] [commit][3268] CogVM source as per VMMaker.oscog-eem.1088

commits at squeakvm.org commits at squeakvm.org
Thu Mar 12 03:53:46 UTC 2015


Revision: 3268
Author:   eliot
Date:     2015-03-11 20:53:41 -0700 (Wed, 11 Mar 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1088

Squeak 5.0 release candidate.

Speed up normalize methods in LargeIntegersPlugin
by cacheing result of firstIndexableField.

Simplify integer conversion routines by adding byteSizeOfBytes: which assumes
argument is byte indexable (as LargeIntegers are).  Make sure integer conversion
routines consistently answer 0 on failure.  Use 4-byte access where possible.

Remove use of popInteger in AsFloat and integer comparison primitives (popStack
idiom is inefficient since multiplke writes as opposed to the single write in
the pop:thenPush: idiom).

Revise SpurMemoryManager>>isClassOfNonImm:equalTo:compactClassIndex: for
better dead code elimination.

Modified Paths:
--------------
    branches/Cog/nsspursrc/plugins/LargeIntegers/LargeIntegers.c
    branches/Cog/nsspursrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
    branches/Cog/nsspursrc/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c
    branches/Cog/nsspursrc/vm/cogit.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/platforms/Mac OS/vm/sqMacMain.c
    branches/Cog/platforms/unix/vm/sqUnixMain.c
    branches/Cog/platforms/win32/vm/sqWin32Main.c
    branches/Cog/scripts/uploadvms
    branches/Cog/sistasrc/vm/cogit.c
    branches/Cog/sistasrc/vm/cogit.h
    branches/Cog/sistasrc/vm/cointerp.c
    branches/Cog/sistasrc/vm/cointerp.h
    branches/Cog/sistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/cogit.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cogit.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstack64src/vm/gcc3x-interp.c
    branches/Cog/spurstack64src/vm/interp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c
    branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
    branches/Cog/src/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c
    branches/Cog/src/vm/cogit.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cointerp.c
    branches/Cog/src/vm/cointerp.h
    branches/Cog/src/vm/cointerpmt.c
    branches/Cog/src/vm/cointerpmt.h
    branches/Cog/src/vm/gcc3x-cointerp.c
    branches/Cog/src/vm/gcc3x-cointerpmt.c
    branches/Cog/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c

Property Changed:
----------------
    branches/Cog/platforms/Cross/vm/sqSCCSVersion.h

Modified: branches/Cog/nsspursrc/plugins/LargeIntegers/LargeIntegers.c
===================================================================
--- branches/Cog/nsspursrc/plugins/LargeIntegers/LargeIntegers.c	2015-03-05 19:52:12 UTC (rev 3267)
+++ branches/Cog/nsspursrc/plugins/LargeIntegers/LargeIntegers.c	2015-03-12 03:53:41 UTC (rev 3268)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.1080 uuid: 8b1a09b7-4f58-4375-b16a-e42e63ffd542
+	SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
    from
-	LargeIntegersPlugin VMMaker.oscog-eem.1080 uuid: 8b1a09b7-4f58-4375-b16a-e42e63ffd542
+	LargeIntegersPlugin VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
  */
-static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.1080 uuid: 8b1a09b7-4f58-4375-b16a-e42e63ffd542 " __DATE__ ;
+static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245 " __DATE__ ;
 
 
 
@@ -68,6 +68,7 @@
 static sqInt digitBitLogicwithopIndex(sqInt firstInteger, sqInt secondInteger, sqInt opIx);
 static sqInt digitCompareLargewith(sqInt firstInteger, sqInt secondInteger);
 static sqInt digitDivLargewithnegative(sqInt firstInteger, sqInt secondInteger, sqInt neg);
+static sqInt digitLengthOfNonImmediate(sqInt oop);
 static sqInt digitLength(sqInt oop);
 static sqInt digitMontgomerytimesmodulomInvModB(sqInt firstLarge, sqInt secondLarge, sqInt thirdLarge, sqInt mInv);
 static sqInt digitMultiplyLargewithnegative(sqInt firstInteger, sqInt secondInteger, sqInt neg);
@@ -109,7 +110,7 @@
 EXPORT(sqInt) setInterpreter(struct VirtualMachine*anInterpreter);
 static sqInt sqAssert(sqInt aBool);
 static sqInt think(void);
-static sqInt unsafeByteOfat(sqInt bytesOop, sqInt ix);
+static sqInt unsafeByteOfat(sqInt bytesObj, sqInt ix);
 EXPORT(sqInt) _primDigitBitShift(void);
 
 
@@ -173,9 +174,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"LargeIntegers v1.5 VMMaker.oscog-eem.1080 (i)"
+	"LargeIntegers v1.5 VMMaker.oscog-eem.1088 (i)"
 #else
-	"LargeIntegers v1.5 VMMaker.oscog-eem.1080 (e)"
+	"LargeIntegers v1.5 VMMaker.oscog-eem.1088 (e)"
 #endif
 ;
 static const int  orOpIndex = 1;
@@ -196,7 +197,6 @@
 	sqInt leftShift;
 	sqInt magnitude;
 	usqInt mask;
-	unsigned char *pointer;
 	sqInt rightShift;
 	sqInt stop;
 
@@ -221,7 +221,7 @@
 			goto l1;
 		}
 		else {
-			digit = ((pointer = firstIndexableField(magnitude)))[firstByteIx - 1];
+			digit = (((unsigned char *) (firstIndexableField(magnitude))))[firstByteIx - 1];
 			goto l1;
 		}
 	l1:	/* end digitOfBytes:at: */;
@@ -279,7 +279,9 @@
 		/* begin cCopyIntVal:toBytes: */
 		pByte = firstIndexableField(newBytes);
 		for (ix = 1, ixLimiT = (cDigitLengthOfCSI(val)); ix <= ixLimiT; ix += 1) {
-			pByte[ix - 1] = (cDigitOfCSIat(val, ix));
+			pByte[ix - 1] = ((((usqInt) ((val < 0
+	? 0 - val
+	: val))) >> ((ix - 1) * 8)) & 0xFF);
 		}
 	}
 	else {
@@ -425,8 +427,6 @@
 	sqInt newLen;
 	sqInt oldLen;
 	unsigned char *  pFrom;
-	unsigned char *pointer;
-	unsigned char *pointer1;
 	unsigned char *  pTo;
 	sqInt x;
 	sqInt x1;
@@ -440,7 +440,7 @@
 		goto l2;
 	}
 	else {
-		digit = ((pointer1 = firstIndexableField(aBytesOop)))[i - 1];
+		digit = (((unsigned char *) (firstIndexableField(aBytesOop))))[i - 1];
 		goto l2;
 	}
 l2:	/* end digitOfBytes:at: */;
@@ -457,7 +457,7 @@
 			goto l1;
 		}
 		else {
-			digit = ((pointer = firstIndexableField(aBytesOop)))[i - 1];
+			digit = (((unsigned char *) (firstIndexableField(aBytesOop))))[i - 1];
 			goto l1;
 		}
 	l1:	/* end digitOfBytes:at: */;
@@ -663,7 +663,9 @@
 
 	pByte = firstIndexableField(bytes);
 	for (ix = 1, ixLimiT = (cDigitLengthOfCSI(val)); ix <= ixLimiT; ix += 1) {
-		pByte[ix - 1] = (cDigitOfCSIat(val, ix));
+		pByte[ix - 1] = ((((usqInt) ((val < 0
+	? 0 - val
+	: val))) >> ((ix - 1) * 8)) & 0xFF);
 	}
 }
 
@@ -891,24 +893,27 @@
 		if (csi < 0x1000000) {
 			return 3;
 		}
-		if (BytesPerOop == 4) {
+		
+#    if BytesPerOop == 4
+		return 4;
+
+#    else /* BytesPerOop == 4 */
+		if (csi < 0x100000000ULL) {
 			return 4;
 		}
-		else {
-			if (csi < 0x100000000ULL) {
-				return 4;
-			}
-			if (csi < 0x10000000000ULL) {
-				return 5;
-			}
-			if (csi < 0x1000000000000ULL) {
-				return 6;
-			}
-			if (csi < 0x100000000000000ULL) {
-				return 7;
-			}
-			return 8;
+		if (csi < 0x10000000000ULL) {
+			return 5;
 		}
+		if (csi < 0x1000000000000ULL) {
+			return 6;
+		}
+		if (csi < 0x100000000000000ULL) {
+			return 7;
+		}
+		return 8;
+
+#    endif /* BytesPerOop == 4 */
+
 	}
 	if (csi > -256) {
 		return 1;
@@ -919,24 +924,27 @@
 	if (csi > -16777216) {
 		return 3;
 	}
-	if (BytesPerOop == 4) {
+	
+#  if BytesPerOop == 4
+	return 4;
+
+#  else /* BytesPerOop == 4 */
+	if (csi > -4294967296) {
 		return 4;
 	}
-	else {
-		if (csi > -4294967296) {
-			return 4;
-		}
-		if (csi > -1099511627776) {
-			return 5;
-		}
-		if (csi > -281474976710656) {
-			return 6;
-		}
-		if (csi > -72057594037927936) {
-			return 7;
-		}
-		return 8;
+	if (csi > -1099511627776) {
+		return 5;
 	}
+	if (csi > -281474976710656) {
+		return 6;
+	}
+	if (csi > -72057594037927936) {
+		return 7;
+	}
+	return 8;
+
+#  endif /* BytesPerOop == 4 */
+
 }
 
 static unsigned char
@@ -990,13 +998,6 @@
 static sqInt
 cDigitOfCSIat(sqInt csi, sqInt ix)
 {
-	if (ix < 1) {
-		primitiveFail();
-		return 0;
-	}
-	if (ix > BytesPerOop) {
-		return 0;
-	}
 	return (((usqInt) ((csi < 0
 	? 0 - csi
 	: csi))) >> ((ix - 1) * 8)) & 0xFF;
@@ -1143,20 +1144,9 @@
 	res = instantiateClassindexableSize(class, size);
 	pByte = firstIndexableField(res);
 	for (ix = 1; ix <= size; ix += 1) {
-		/* begin cDigitOfCSI:at: */
-		if (ix < 1) {
-			primitiveFail();
-			byte = 0;
-			goto l1;
-		}
-		if (ix > BytesPerOop) {
-			byte = 0;
-			goto l1;
-		}
 		byte = (((usqInt) ((val < 0
 	? 0 - val
 	: val))) >> ((ix - 1) * 8)) & 0xFF;
-	l1:	/* end cDigitOfCSI:at: */;
 		pByte[ix - 1] = byte;
 	}
 	return res;
@@ -1436,7 +1426,6 @@
 	sqInt lo;
 	sqInt mul;
 	unsigned char *pDiv;
-	unsigned char *pointer;
 	unsigned char *pQuo;
 	unsigned char *pRem;
 	sqInt q;
@@ -1476,7 +1465,7 @@
 		stObjectatput(result,2,firstInteger);
 		return result;
 	}
-	d = 8 - (cHighBit(((pointer = firstIndexableField(secondInteger)))[secondLen - 1]));
+	d = 8 - (cHighBit((((unsigned char *) (firstIndexableField(secondInteger))))[secondLen - 1]));
 	
 #if SPURVM
 	div = bytesLshift(secondInteger, d);
@@ -1676,6 +1665,12 @@
 }
 
 static sqInt
+digitLengthOfNonImmediate(sqInt oop)
+{
+	return slotSizeOf(oop);
+}
+
+static sqInt
 digitLength(sqInt oop)
 {
 	if (isIntegerObject(oop)) {
@@ -1894,23 +1889,18 @@
 static sqInt
 digitOfBytesat(sqInt aBytesOop, sqInt ix)
 {
-	unsigned char *pointer;
-
 	if (ix > (slotSizeOf(aBytesOop))) {
 		return 0;
 	}
 	else {
-		return ((pointer = firstIndexableField(aBytesOop)))[ix - 1];
+		return (((unsigned char *) (firstIndexableField(aBytesOop))))[ix - 1];
 	}
 }
 
 static sqInt
 digitOfat(sqInt oop, sqInt ix)
 {
-	unsigned char *pointer;
-
 	if (isIntegerObject(oop)) {
-		/* begin cDigitOfCSI:at: */
 		if (ix < 1) {
 			primitiveFail();
 			return 0;
@@ -1922,14 +1912,12 @@
 	? 0 - (integerValueOf(oop))
 	: integerValueOf(oop)))) >> ((ix - 1) * 8)) & 0xFF;
 	}
+	/* begin digitOfBytes:at: */
+	if (ix > (slotSizeOf(oop))) {
+		return 0;
+	}
 	else {
-		/* begin digitOfBytes:at: */
-		if (ix > (slotSizeOf(oop))) {
-			return 0;
-		}
-		else {
-			return ((pointer = firstIndexableField(oop)))[ix - 1];
-		}
+		return (((unsigned char *) (firstIndexableField(oop))))[ix - 1];
 	}
 }
 
@@ -2059,14 +2047,8 @@
 	sqInt class;
 	sqInt ix;
 	sqInt len;
-	sqInt maxVal;
-	sqInt minVal;
 	unsigned char *pointer;
-	unsigned char *pointer1;
-	unsigned char *pointer2;
-	unsigned char *pointer3;
 	sqInt positive;
-	sqInt sLen;
 
 	if (isIntegerObject(anInteger)) {
 		return 1;
@@ -2078,54 +2060,37 @@
 			return 0;
 		}
 	}
-	/* begin digitLength: */
-	if (isIntegerObject(anInteger)) {
-		len = cDigitLengthOfCSI(integerValueOf(anInteger));
-		goto l1;
-	}
-	else {
-		len = slotSizeOf(anInteger);
-		goto l1;
-	}
-l1:	/* end digitLength: */;
-	if (len == 0) {
-		return 0;
-	}
-	if ((((pointer = firstIndexableField(anInteger)))[len - 1]) == 0) {
-		return 0;
-	}
 
-	/* maximal digitLength of aSmallInteger */
+	/* Check for leading zero of LargeInteger */
 
-	sLen = BytesPerOop;
-	if (len > sLen) {
-		return 1;
-	}
-	if (len < sLen) {
+	pointer = ((unsigned char *) (firstIndexableField(anInteger)));
+	len = slotSizeOf(anInteger);
+	if ((len == 0)
+	 || ((pointer[len - 1]) == 0)) {
 		return 0;
 	}
+	if (len != BytesPerOop) {
+		return len > BytesPerOop;
+	}
 	if (positive) {
 
-		/* SmallInteger maxVal */
-		/* all bytes of maxVal but the highest one are just FF's */
+		/* all bytes of but the highest one are just FF's */
 
-		maxVal = MaxSmallInteger;
-		return (((pointer1 = firstIndexableField(anInteger)))[sLen - 1]) > (cDigitOfCSIat(maxVal, sLen));
+		return (pointer[BytesPerOop - 1]) > ((((usqInt) (((MaxSmallInteger) < 0
+	? 0 - (MaxSmallInteger)
+	: MaxSmallInteger))) >> ((BytesPerOop - 1) * 8)) & 0xFF);
 	}
-	else {
-
-		/* SmallInteger minVal */
-		/* all bytes of minVal but the highest one are just 00's */
-
-		minVal = MinSmallInteger;
-		if ((((pointer2 = firstIndexableField(anInteger)))[sLen - 1]) < (cDigitOfCSIat(minVal, sLen))) {
-			return 0;
+	if ((pointer[BytesPerOop - 1]) < ((((usqInt) (((MinSmallInteger) < 0
+	? 0 - (MinSmallInteger)
+	: MinSmallInteger))) >> ((BytesPerOop - 1) * 8)) & 0xFF)) {
+		return 0;
+	}
+	for (ix = 0; ix < BytesPerOop; ix += 1) {
+		if (!((pointer[ix]) == ((((usqInt) (((MinSmallInteger) < 0
+	? 0 - (MinSmallInteger)
+	: MinSmallInteger))) >> (((ix + 1) - 1) * 8)) & 0xFF))) {
+			return 1;
 		}
-		for (ix = 1; ix <= sLen; ix += 1) {
-			if (!((((pointer3 = firstIndexableField(anInteger)))[ix - 1]) == (cDigitOfCSIat(minVal, ix)))) {
-				return 1;
-			}
-		}
 	}
 	return 0;
 }
@@ -2150,50 +2115,54 @@
 static sqInt
 normalizeNegative(sqInt aLargeNegativeInteger)
 {
+	sqInt byte;
 	sqInt i;
 	sqInt len;
-	sqInt minVal;
 	sqInt oldLen;
-	unsigned char *pointer;
-	unsigned char *pointer1;
+	unsigned char * pointer;
 	sqInt sLen;
 	sqInt val;
 
-	len = (oldLen = digitLength(aLargeNegativeInteger));
-	while ((len != 0)
-	 && ((((pointer = firstIndexableField(aLargeNegativeInteger)))[len - 1]) == 0)) {
+	len = (oldLen = slotSizeOf(aLargeNegativeInteger));
+	pointer = ((unsigned char *) (firstIndexableField(aLargeNegativeInteger)));
+	while ((len > 0)
+	 && ((pointer[len - 1]) == 0)) {
 		len -= 1;
 	}
 	if (len == 0) {
 		return integerObjectOf(0);
 	}
 
-	/* SmallInteger minVal digitLength */
+	/* SmallInteger digitLength */
 
 	sLen = ((MinSmallInteger) < -1073741824
 		? 8
 		: 4);
 	if (len <= sLen) {
-
-		/* SmallInteger minVal */
-
-		minVal = MinSmallInteger;
 		if ((len < sLen)
-		 || ((digitOfBytesat(aLargeNegativeInteger, sLen)) < (cDigitOfCSIat(minVal, sLen)))) {
+		 || ((pointer[sLen - 1]) < ((((usqInt) (((MinSmallInteger) < 0
+	? 0 - (MinSmallInteger)
+	: MinSmallInteger))) >> ((sLen - 1) * 8)) & 0xFF))) {
 
+			/* interpreterProxy minSmallInteger lastDigit */
 			/* If high digit less, then can be small */
 
-			val = 0;
-			for (i = len; i >= 1; i += -1) {
-				val = (val * 256) - (((pointer1 = firstIndexableField(aLargeNegativeInteger)))[i - 1]);
+			val = 0 - (pointer[(len -= 1)]);
+			for (i = (len - 1); i >= 0; i += -1) {
+				val = (val * 256) - (pointer[i]);
 			}
 			return integerObjectOf(val);
 		}
 		for (i = 1; i <= sLen; i += 1) {
 
-			/* If all digits same, then = minVal (sr: minVal digits 1 to 3 are 0) */
+			/* If all digits same, then = minSmallInteger (sr: minSmallInteger digits 1 to sLen - 1 are 0) */
 
-			if (!((digitOfBytesat(aLargeNegativeInteger, i)) == (cDigitOfCSIat(minVal, i)))) {
+			byte = (i > len
+				? 0
+				: pointer[i - 1]);
+			if (byte != ((((usqInt) (((MinSmallInteger) < 0
+	? 0 - (MinSmallInteger)
+	: MinSmallInteger))) >> ((i - 1) * 8)) & 0xFF)) {
 
 				/* Not so; return self shortened */
 
@@ -2203,12 +2172,10 @@
 
 					return bytesgrowTo(aLargeNegativeInteger, len);
 				}
-				else {
-					return aLargeNegativeInteger;
-				}
+				return aLargeNegativeInteger;
 			}
 		}
-		return integerObjectOf(minVal);
+		return integerObjectOf((MinSmallInteger));
 	}
 	if (len < oldLen) {
 
@@ -2216,9 +2183,7 @@
 
 		return bytesgrowTo(aLargeNegativeInteger, len);
 	}
-	else {
-		return aLargeNegativeInteger;
-	}
+	return aLargeNegativeInteger;
 }
 
 
@@ -2232,29 +2197,31 @@
 	sqInt len;
 	sqInt oldLen;
 	unsigned char *pointer;
-	unsigned char *pointer1;
 	sqInt sLen;
 	sqInt val;
 
-	len = (oldLen = digitLength(aLargePositiveInteger));
-	while ((len != 0)
-	 && ((((pointer = firstIndexableField(aLargePositiveInteger)))[len - 1]) == 0)) {
+	len = (oldLen = slotSizeOf(aLargePositiveInteger));
+	pointer = ((unsigned char *) (firstIndexableField(aLargePositiveInteger)));
+	while ((len > 0)
+	 && ((pointer[len - 1]) == 0)) {
 		len -= 1;
 	}
 	if (len == 0) {
 		return integerObjectOf(0);
 	}
-	sLen = ((MinSmallInteger) > 0x3FFFFFFF
+	sLen = ((MaxSmallInteger) > 0x3FFFFFFF
 		? 8
 		: 4);
 	if ((len <= sLen)
-	 && ((digitOfBytesat(aLargePositiveInteger, sLen)) <= (cDigitOfCSIat(MaxSmallInteger, sLen)))) {
+	 && ((pointer[sLen - 1]) <= ((((usqInt) (((MaxSmallInteger) < 0
+	? 0 - (MaxSmallInteger)
+	: MaxSmallInteger))) >> ((sLen - 1) * 8)) & 0xFF))) {
 
 		/* If so, return its SmallInt value */
 
-		val = 0;
-		for (i = len; i >= 1; i += -1) {
-			val = (val * 256) + (((pointer1 = firstIndexableField(aLargePositiveInteger)))[i - 1]);
+		val = pointer[(len -= 1)];
+		for (i = (len - 1); i >= 0; i += -1) {
+			val = (val * 256) + (pointer[i]);
 		}
 		return integerObjectOf(val);
 	}
@@ -2264,9 +2231,7 @@
 
 		return bytesgrowTo(aLargePositiveInteger, len);
 	}
-	else {
-		return aLargePositiveInteger;
-	}
+	return aLargePositiveInteger;
 }
 
 
@@ -3653,14 +3618,12 @@
 }
 
 
-/*	Argument bytesOop must not be aSmallInteger! */
+/*	Argument bytesObj must not be aSmallInteger! */
 
 static sqInt
-unsafeByteOfat(sqInt bytesOop, sqInt ix)
+unsafeByteOfat(sqInt bytesObj, sqInt ix)
 {
-	unsigned char *pointer;
-
-	return ((pointer = firstIndexableField(bytesOop)))[ix - 1];
+	return (((unsigned char *) (firstIndexableField(bytesObj))))[ix - 1];
 }
 
 EXPORT(sqInt)

Modified: branches/Cog/nsspursrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
===================================================================
--- branches/Cog/nsspursrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c	2015-03-05 19:52:12 UTC (rev 3267)
+++ branches/Cog/nsspursrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c	2015-03-12 03:53:41 UTC (rev 3268)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	VMPluginCodeGenerator VMMaker.oscog-eem.1080 uuid: 8b1a09b7-4f58-4375-b16a-e42e63ffd542
+	VMPluginCodeGenerator VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
    from
-	UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4
+	UnixOSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4
  */
-static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4 " __DATE__ ;
+static char __buildInfo[] = "UnixOSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4 " __DATE__ ;
 /* D T Lewis - UnixOSProcessPlugin.c translated from class
    UnixOSProcessPlugin of OSProcessPlugin version 4.3.3 Cog */
 
@@ -316,9 +316,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (i)"
+	"UnixOSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (i)"
 #else
-	"UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (e)"
+	"UnixOSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (e)"
 #endif
 ;
 static void *originalSigHandlers[NSIG];
@@ -1329,12 +1329,12 @@
     unsigned char *ptr;
 
 	if (!((isBytes(aByteArray))
-		 && ((stSizeOf(aByteArray)) == (sizeOfPointer())))) {
+		 && ((stSizeOf(aByteArray)) == (sizeof(void *))))) {
 		return null;
 	}
 	ptr = arrayValueOf(aByteArray);
 	idx = 0;
-	while (idx < (sizeOfPointer())) {
+	while (idx < (sizeof(void *))) {
 		pointerUnion.bytes[idx] = ptr[idx];
 		idx += 1;
 	}
@@ -1962,11 +1962,11 @@
 	if (handler == (sigErrorNumber())) {
 		return primitiveFail();
 	}
-	priorHandlerObject = instantiateClassindexableSize(classByteArray(), sizeOfPointer());
+	priorHandlerObject = instantiateClassindexableSize(classByteArray(), sizeof(void *));
 	hPtr = arrayValueOf(priorHandlerObject);
 	priorHandler.handler = handler;
 	idx = 0;
-	while (idx < (sizeOfPointer())) {
+	while (idx < (sizeof(void *))) {
 		hPtr[idx] = priorHandler.bytes[idx];
 		idx += 1;
 	}
@@ -3346,7 +3346,7 @@
 primitiveSizeOfPointer(void)
 {
 	pop(1);
-	pushInteger(sizeOfPointer());
+	pushInteger(sizeof(void *));
 }
 
 

Modified: branches/Cog/nsspursrc/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c
===================================================================
--- branches/Cog/nsspursrc/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c	2015-03-05 19:52:12 UTC (rev 3267)
+++ branches/Cog/nsspursrc/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c	2015-03-12 03:53:41 UTC (rev 3268)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	VMPluginCodeGenerator VMMaker.oscog-eem.1080 uuid: 8b1a09b7-4f58-4375-b16a-e42e63ffd542
+	VMPluginCodeGenerator VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
    from
-	Win32OSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4
+	Win32OSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4
  */
-static char __buildInfo[] = "Win32OSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4 " __DATE__ ;
+static char __buildInfo[] = "Win32OSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 uuid: dbbde2e2-9103-4ba8-96a9-33c29e7ee7e4 " __DATE__ ;
 /* D T Lewis - Win32OSProcessPlugin.c translated from class
    Win32OSProcessPlugin of OSProcessPlugin version 4.3.3 Cog */
 
@@ -222,9 +222,9 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"Win32OSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (i)"
+	"Win32OSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (i)"
 #else
-	"Win32OSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (e)"
+	"Win32OSProcessPlugin * VMConstruction-Plugins-OSProcessPlugin.oscog-eem.49 (e)"
 #endif
 ;
 static int osprocessSandboxSecurity;
@@ -658,12 +658,12 @@
     unsigned char *ptr;
 
 	if (!((isBytes(aByteArray))
-		 && ((stSizeOf(aByteArray)) == (sizeOfPointer())))) {
+		 && ((stSizeOf(aByteArray)) == (sizeof(void *))))) {
 		return null;
 	}
 	ptr = arrayValueOf(aByteArray);
 	idx = 0;
-	while (idx < (sizeOfPointer())) {
+	while (idx < (sizeof(void *))) {
 		pointerUnion.bytes[idx] = ptr[idx];
 		idx += 1;
 	}
@@ -1760,7 +1760,7 @@
 primitiveSizeOfPointer(void)
 {
 	pop(1);
-	pushInteger(sizeOfPointer());
+	pushInteger(sizeof(void *));
 }
 
 

Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c	2015-03-05 19:52:12 UTC (rev 3267)
+++ branches/Cog/nsspursrc/vm/cogit.c	2015-03-12 03:53:41 UTC (rev 3268)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8
+	CCodeGenerator VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8
+	StackToRegisterMappingCogit VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -1128,7 +1128,7 @@
 static void initSimStackForFramefulMethod(sqInt startpc) NoDbgRegParms;
 static void initSimStackForFramelessBlock(sqInt startpc) NoDbgRegParms;
 static void initSimStackForFramelessMethod(sqInt startpc) NoDbgRegParms;
-static sqInt liveRegisters(void);
+static usqInt liveRegisters(void);
 static void marshallAbsentReceiverSendArguments(sqInt numArgs) NoDbgRegParms;
 static void marshallSendArguments(sqInt numArgs) NoDbgRegParms;
 static void mergeafterContinuation(BytecodeFixup *fixup, sqInt mergeWithContinuation) NoDbgRegParms;
@@ -9471,10 +9471,10 @@
 	headerSize = sizeof(CogMethod);
 	size = generateInstructionsAt(startAddress + headerSize);
 
-	/* The missOffset is the same as the interpretOffset. */
+	/* The missOffset is the same as the interpretOffset. On RISCs it includes an additional instruction. */
 
 	end = outputInstructionsAt(startAddress + headerSize);
-	assert(missOffset == ((((picInterpretAbort->address)) + ((picInterpretAbort->machineCodeSize))) - startAddress));
+	assert(missOffset == ((((0) + ((picInterpretAbort->address))) + ((picInterpretAbort->machineCodeSize))) - startAddress));
 	assert((startAddress + cmEntryOffset) == ((entry->address)));
 	return fillInCPICHeadersizenumArgsnumCaseshasMNUCaseselector(((CogMethod *) startAddress), closedPICSize, numArgs, 1, 1, selector);
 }
@@ -9547,10 +9547,10 @@
 	headerSize = sizeof(CogMethod);
 	size = generateInstructionsAt(startAddress + headerSize);
 
-	/* The missOffset is th same as the interpretOffset. */
+	/* The missOffset is the same as the interpretOffset. On RISCs it includes an additional instruction. */
 
 	end = outputInstructionsAt(startAddress + headerSize);
-	assert(missOffset == ((((picInterpretAbort->address)) + ((picInterpretAbort->machineCodeSize))) - startAddress));
+	assert(missOffset == ((((0) + ((picInterpretAbort->address))) + ((picInterpretAbort->machineCodeSize))) - startAddress));
 	assert((startAddress + cmEntryOffset) == ((entry->address)));
 	assert(((endCPICCase0->address)) == (startAddress + firstCPICCaseOffset));
 	assert(((endCPICCase1->address)) == ((startAddress + firstCPICCaseOffset) + cPICCaseSize));
@@ -21755,12 +21755,12 @@
 	genoperandoperand(CmpCqR, 0, ReceiverResultReg);
 	/* begin JumpNonZero: */
 	jumpSICMiss = genoperand(JumpNonZero, ((sqInt)0));
-	compileTrampolineFornumArgsargargargargsaveRegspushLinkRegresultReg(ceStackOverflow, 1, SendNumArgsReg, null, null, null, 0, 1, null);
+	compileTrampolineFornumArgsargargargargsaveRegspushLinkRegresultReg(ceStackOverflow, 1, SendNumArgsReg, null, null, null, 0, 0, null);
 	jmpTarget(jumpSICMiss, gLabel());
 	genPushRegisterArgsForAbortMissNumArgs(backEnd, numArgs);
 	return genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceSICMiss, trampolineNamenumArgs("ceMethodAbort", (numArgs <= 2
 		? numArgs
-		: -1)), 1, ReceiverResultReg, null, null, null, 0, 1, null, 1);
+		: -1)), 1, ReceiverResultReg, null, null, null, 0, 0, null, 1);
 }
 
 
@@ -23647,7 +23647,6 @@
 		genoperand(RetN, (methodOrBlockNumArgs + 1) * BytesPerWord);
 	}
 	else {
-		;
 		/* begin RetN: */
 		offset = ((methodOrBlockNumArgs > 2)
 		 || (regArgsHaveBeenPushed)
@@ -23795,11 +23794,11 @@
 	simSpillBase = (simStackPtr = methodOrBlockNumArgs - 1);
 }
 
-static sqInt
+static usqInt
 liveRegisters(void)
 {
     sqInt i;
-    sqInt regsSet;
+    usqInt regsSet;
 
 	if (needsFrame) {
 		regsSet = 0;
@@ -24381,7 +24380,7 @@
 {
     sqInt i;
     sqInt lastRequired;
-    sqInt liveRegs;
+    usqInt liveRegs;
 
 
 	/* compute live regs while noting the last occurrence of required regs.

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2015-03-05 19:52:12 UTC (rev 3267)
+++ branches/Cog/nsspursrc/vm/cogit.h	2015-03-12 03:53:41 UTC (rev 3268)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8
+	CCodeGenerator VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2015-03-05 19:52:12 UTC (rev 3267)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2015-03-12 03:53:41 UTC (rev 3268)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
    from
-	CoInterpreter VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8
+	CoInterpreter VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1083 uuid: 4d0a08c2-6218-4726-816c-1d6e3ae601d8 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1088 uuid: 8298a649-68d4-4bac-ace3-46649a076245 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1107,6 +1107,7 @@
 static sqInt noInlineFollowForwarded(sqInt objOop) NoDbgRegParms;
 sqInt nonIndexablePointerFormat(void);
 static sqInt noUnscannedEphemerons(void);
+static sqInt numBytesOfBytes(sqInt objOop) NoDbgRegParms;
 sqInt numBytesOf(sqInt objOop);
 static sqInt numberOfForwarders(void);
 sqInt numPointerSlotsOf(sqInt objOop);
@@ -1170,7 +1171,7 @@
 static sqInt storeImageSegmentIntooutPointersroots(sqInt segmentWordArray, sqInt outPointerArray, sqInt arrayOfRoots) NoDbgRegParms;
 sqInt storePointerUncheckedofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer);
 sqInt storePointerofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer);
-sqInt stringForCString(const char *aCString);
+usqInt stringForCString(const char *aCString);
 static sqInt sufficientSpaceAfterGC(sqInt numBytes) NoDbgRegParms;
 static sqInt swizzleObjStackAt(sqInt objStackRootIndex) NoDbgRegParms;
 void tenuringIncrementalGC(void);
@@ -1242,7 +1243,6 @@
 static sqInt checkOkayStackZone(sqInt writeBack) NoDbgRegParms;
 static void checkProfileTick(sqInt aPrimitiveMethod) NoDbgRegParms;
 static sqInt classNameOfIs(sqInt aClass, char *className) NoDbgRegParms;
-static sqInt compare31or32Bitsequal(sqInt obj1, sqInt obj2) NoDbgRegParms;
 static sqInt contexthasSender(sqInt thisCntx, sqInt aContext) NoDbgRegParms;
 static sqInt contexthasValidInversePCMappingOfin(sqInt aContext, sqInt theIP, char *theFP) NoDbgRegParms;
 sqInt copiedValueCountOfClosure(sqInt closurePointer);
@@ -1562,8 +1562,8 @@
 _iss sqInt trueObj;
 _iss sqInt hiddenRootsObj;
 _iss sqInt falseObj;
-_iss usqInt totalFreeOldSpace;
 _iss usqInt scavengeThreshold;
+_iss usqInt totalFreeOldSpace;
 _iss sqInt bytesPerPage;
 _iss usqInt pastSpaceStart;
 _iss sqInt numSegments;
@@ -1622,7 +1622,6 @@
 _iss sqInt lastUncoggableInterpretedBlockMethod;
 _iss usqLong longRunningPrimitiveStartUsecs;
 _iss usqLong longRunningPrimitiveStopUsecs;
-_iss usqInt lowSpaceThreshold;
 _iss usqLong statCheckForEvents;
 _iss usqLong statGCEndUsecs;
 _iss sqInt weakList;
@@ -1632,6 +1631,7 @@
 _iss sqInt thisClassIndex;
 _iss sqInt firstSegmentSize;
 _iss usqLong gcStartUsecs;
+_iss usqInt lowSpaceThreshold;
 _iss sqInt noThreadingOfGUIThread;
 _iss sqInt pendingFinalizationSignals;
 _iss sqInt processHasThreadId;
@@ -2335,13 +2335,13 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static signed char primitiveAccessorDepthTable[MaxPrimitiveIndex + 2 /* 577 */] = {
-/*0*/	-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0,-1,
+/*0*/	-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0,-1,
 /*20*/	0, 0, 0,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0,-1,-1,-1, 0, 0, 0,
-/*40*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0,-1,-1,-1,-1,-1,
+/*40*/	0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0,-1,-1,-1,-1,-1,
 /*60*/	0, 0, 1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0, 1, 1, 0, 0, 0, 0, 0,
 /*80*/	-1,-1,-1, 0,-1,-1, 1, 0, 1,-1,-1, 0, 0, 0, 0,-1,-1,-1, 0, 0,
 /*100*/	1, 2, 0, 3,-1, 1,-1,-1,-1,-1, 0, 0,-1,-1,-1, 1, 1,-1, 1, 0,
-/*120*/	-1, 1,-1,-1, 0,-1, 0, 0, 0,-1,-1,-1, 1, 0, 0,-1, 0,-1,-1,-1,
+/*120*/	-1, 1,-1,-1, 0, 0, 0, 0, 0,-1,-1,-1, 1, 0, 0,-1, 0,-1,-1,-1,
 /*140*/	-1, 1,-1, 1, 0, 0,-1,-1, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
 /*160*/	0, 0,-1,-1,-1, 1, 1,-1, 1, 0, 0, 1,-1, 1, 1,-1,-1,-1,-1,-1,
 /*180*/	0,-1,-1, 0, 0, 0, 1, 1, 1, 0,-1,-1,-1,-1,-1, 1, 2,-1,-1,-1,
@@ -2366,7 +2366,7 @@
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
 char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1083";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1088";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -9516,7 +9516,6 @@
 				isString = ClassByteStringCompactIndex == ccIndex;
 				goto l100;
 
-				isString = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassByteString << (shiftForWord())))) == (classAtIndex(ccIndex));
 			l100:	/* end is:instanceOf:compactClassIndex: */;
 				if (isString) {
 					/* begin lengthOf:format: */
@@ -9568,7 +9567,6 @@
 				isArray = ClassArrayCompactIndex == ccIndex1;
 				goto l102;
 
-				isArray = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassArray << (shiftForWord())))) == (classAtIndex(ccIndex1));
 			l102:	/* end is:instanceOf:compactClassIndex: */;
 				if (isArray) {
 					/* begin lengthOf:format: */
@@ -9731,7 +9729,6 @@
 				isBlock = ClassBlockClosureCompactIndex == ccIndex;
 				goto l105;
 
-				isBlock = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassBlockClosure << (shiftForWord())))) == (classAtIndex(ccIndex));
 			l105:	/* end is:instanceOf:compactClassIndex: */;
 				if (isBlock) {
 					/* begin externalizeIPandSP */
@@ -9782,7 +9779,6 @@
 				isBlock = ClassBlockClosureCompactIndex == ccIndex;
 				goto l107;
 
-				isBlock = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassBlockClosure << (shiftForWord())))) == (classAtIndex(ccIndex));
 			l107:	/* end is:instanceOf:compactClassIndex: */;
 				if (isBlock) {
 					/* begin externalizeIPandSP */
@@ -12130,7 +12126,6 @@
 				isString = ClassByteStringCompactIndex == ccIndex;
 				goto l194;
 
-				isString = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassByteString << (shiftForWord())))) == (classAtIndex(ccIndex));
 			l194:	/* end is:instanceOf:compactClassIndex: */;
 				if (isString) {
 					/* begin lengthOf:format: */
@@ -12182,7 +12177,6 @@
 				isArray = ClassArrayCompactIndex == ccIndex1;
 				goto l196;
 
-				isArray = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassArray << (shiftForWord())))) == (classAtIndex(ccIndex1));
 			l196:	/* end is:instanceOf:compactClassIndex: */;
 				if (isArray) {
 					/* begin lengthOf:format: */
@@ -12277,7 +12271,6 @@
 				isBlock = ClassBlockClosureCompactIndex == ccIndex;
 				goto l199;
 
-				isBlock = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassBlockClosure << (shiftForWord())))) == (classAtIndex(ccIndex));
 			l199:	/* end is:instanceOf:compactClassIndex: */;
 				if (isBlock) {
 					/* begin externalizeIPandSP */
@@ -12328,7 +12321,6 @@
 				isBlock = ClassBlockClosureCompactIndex == ccIndex;
 				goto l201;
 
-				isBlock = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassBlockClosure << (shiftForWord())))) == (classAtIndex(ccIndex));
 			l201:	/* end is:instanceOf:compactClassIndex: */;
 				if (isBlock) {
 					/* begin externalizeIPandSP */
@@ -14189,7 +14181,7 @@
     CogMethod *cogMethod;
     sqInt methodField;
     sqInt methodField1;
-    sqInt theIP;
+    usqInt theIP;
 
 	assertl(GIV(stackPage) == (mostRecentlyUsedPage()), ln);
 	assertl(addressIsInPage(GIV(stackPage), lifp), ln);
@@ -14212,7 +14204,7 @@
 				theIP = lip;
 			}
 			assertl((theIP >= (methodField + (lastPointerOf(methodField))))
-			 && (theIP < (((methodField + (numBytesOf(methodField))) + BaseHeaderSize) - 1)), ln);
+			 && (theIP < (((methodField + (numBytesOfBytes(methodField))) + BaseHeaderSize) - 1)), ln);
 		}
 		assertl((iframeIsBlockActivation(lifp))
 		 || ((pushedReceiverOrClosureOfFrame(lifp)) == (iframeReceiver(lifp))), ln);
@@ -14323,7 +14315,7 @@
 				theIP = longAt(theFP + FoxIFSavedIP);
 			}
 			assertl((theIP >= (methodObj + (lastPointerOf(methodObj))))
-			 && (theIP < (((methodObj + (numBytesOf(methodObj))) + BaseHeaderSize) - 1)), ln);
+			 && (theIP < (((methodObj + (numBytesOfBytes(methodObj))) + BaseHeaderSize) - 1)), ln);
 			prevFrameWasCogged = 0;
 		}
 		theIP = ((usqInt)(longAt(theFP + FoxCallerSavedIP)));
@@ -22075,7 +22067,7 @@
     int index;
     sqInt methodField;
     usqInt numArgs;
-    sqInt numTemps;
+    usqInt numTemps;
     char *rcvrAddress;
     sqInt rcvrOrClosure;
     sqInt theMethod;
@@ -22108,7 +22100,7 @@
 		numArgs = (cogMethod->cmNumArgs);
 		/* begin temporaryCountOfMethodHeader: */
 		header = (homeMethod->methodHeader);
-		numTemps = (((usqInt) header) >> MethodHeaderTempCountShift) & 0x3F;
+		numTemps = ((sqInt) ((((usqInt) header) >> MethodHeaderTempCountShift) & 0x3F));
 	}
 	else {
 		theMethod = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
@@ -22128,7 +22120,7 @@
 			assert((((((CogMethod *) header2))->objectHeader)) == (nullHeaderForMachineCodeMethod()));
 			header1 = ((((CogMethod *) header2))->methodHeader);
 		}
-		numTemps = (((usqInt) header1) >> MethodHeaderTempCountShift) & 0x3F;
+		numTemps = ((sqInt) ((((usqInt) header1) >> MethodHeaderTempCountShift) & 0x3F));
 	}
 	if (((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 		? ((longAt(theFP + FoxMethod)) & MFMethodFlagIsBlockFlag) != 0
@@ -24759,7 +24751,7 @@
 
 	}
 	return (theInstrPointer >= (((aMethod + (lastPointerOf(aMethod))) + BytesPerOop) - 1))
-	 && (theInstrPointer < (((aMethod + (numBytesOf(aMethod))) + BaseHeaderSize) - 1));
+	 && (theInstrPointer < (((aMethod + (numBytesOfBytes(aMethod))) + BaseHeaderSize) - 1));
 }
 
 
@@ -27222,7 +27214,6 @@
 	isString = ClassByteStringCompactIndex == ccIndex;
 	goto l2;
 
-	isString = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassByteString << (shiftForWord())))) == (classAtIndex(ccIndex));
 l2:	/* end is:instanceOf:compactClassIndex: */;
 	if (!isString) {
 		if (oop != GIV(nilObj)) {
@@ -27309,7 +27300,6 @@
 		ok = ClassLargePositiveIntegerCompactIndex == ccIndex;
 		goto l1;
 
-		ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargePositiveInteger << (shiftForWord())))) == (classAtIndex(ccIndex));
 	l1:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
 		if (ok) {
 			return 0;
@@ -27320,7 +27310,6 @@
 		ok = ClassLargeNegativeIntegerCompactIndex == ccIndex1;
 		goto l2;
 
-		ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargeNegativeInteger << (shiftForWord())))) == (classAtIndex(ccIndex1));
 	l2:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
 		if (ok) {
 			return 1;
@@ -27409,7 +27398,7 @@
 
 
 /*	Convert the given object into an integer value.
-	The object may be either a positive SmallInteger or a eight-byte
+	The object may be either a positive SmallInteger or an eight-byte
 	LargeInteger. 
  */
 
@@ -27420,8 +27409,6 @@
     sqInt ccIndex1;
     sqInt fmt;
     sqInt i;
-    usqInt numBytes;
-    usqInt numSlots;
     sqInt ok;
     sqInt smallIntValue;
     sqInt sz;
@@ -27439,7 +27426,7 @@
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
-		return null;
+		return 0;
 	}
 	/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 	assert(!(isImmediate(oop)));
@@ -27447,7 +27434,6 @@
 	ok = ClassLargePositiveIntegerCompactIndex == ccIndex1;
 	goto l2;
 
-	ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargePositiveInteger << (shiftForWord())))) == (classAtIndex(ccIndex1));
 l2:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
 	if (!ok) {
 		/* begin isClassOfNonImm:equalTo:compactClassIndex: */
@@ -27456,53 +27442,29 @@
 		ok = ClassLargeNegativeIntegerCompactIndex == ccIndex;
 		goto l1;
 
-		ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargeNegativeInteger << (shiftForWord())))) == (classAtIndex(ccIndex));
 	l1:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
 		if (!ok) {
 			/* begin primitiveFail */
 			if (!GIV(primFailCode)) {
 				GIV(primFailCode) = 1;
 			}
-			return null;
+			return 0;
 		}
 	}
-	/* begin numBytesOf: */
+	/* begin numBytesOfBytes: */
 	fmt = (((usqInt) (longAt(oop))) >> 24) & 0x1F;
-	/* begin numSlotsOf: */
-	flag("endianness");
-	assert((classIndexOf(oop)) > (isForwardedObjectClassIndexPun()));
-	numSlots = byteAt(oop + 7);
-	numBytes = (numSlots == 0xFF
-		? longAt(oop - BaseHeaderSize)
-		: numSlots);
-	numBytes = numBytes << (shiftForWord());
-	if (fmt >= 16) {
-
-		/* bytes (the common case), including CompiledMethod */
-
-		sz = numBytes - (fmt & 7);
-		goto l3;
-	}
-	if (fmt <= 9) {
-		sz = numBytes;
-		goto l3;
-	}
-	if (fmt >= 12) {
-		sz = numBytes - ((fmt & 3) << 1);
-		goto l3;
-	}
-	sz = numBytes - ((fmt & 1) << 2);
-l3:	/* end numBytesOf: */;
+	assert(fmt >= (firstByteFormat()));
+	sz = ((numSlotsOf(oop)) << (shiftForWord())) - (fmt & 7);
 	if (sz > (sizeof(sqLong))) {
 		/* begin primitiveFail */
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
-		return null;
+		return 0;
 	}
-	value = 0;
-	for (i = 0; i < sz; i += 1) {
-		value += (((sqLong) (byteAt((oop + BaseHeaderSize) + i)))) << (i * 8);
+	value = byteAt((oop + BaseHeaderSize) + (sz - 1));
+	for (i = (sz - 2); i >= 0; i += -1) {
+		value = (value << 8) + (byteAt((oop + BaseHeaderSize) + i));
 	}
 	return value;
 }
@@ -27517,7 +27479,9 @@
 positive32BitValueOf(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt ccIndex;
+    sqInt fmt;
     sqInt ok;
+    sqInt sz;
     sqInt value;
 
 	if ((oop & 1)) {
@@ -27544,17 +27508,32 @@
 	ok = ClassLargePositiveIntegerCompactIndex == ccIndex;
 	goto l1;
 
-	ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargePositiveInteger << (shiftForWord())))) == (classAtIndex(ccIndex));
 l1:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-	if (!(ok
-		 && ((lengthOfformat(oop, (((usqInt) (longAt(oop))) >> 24) & 0x1F)) == 4))) {
+	if (!ok) {
 		/* begin primitiveFail */
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
 		return 0;
 	}
-	return (((byteAt((oop + BaseHeaderSize) + 0)) + ((byteAt((oop + BaseHeaderSize) + 1)) << 8)) + ((byteAt((oop + BaseHeaderSize) + 2)) << 16)) + ((byteAt((oop + BaseHeaderSize) + 3)) << 24);
+	/* begin numBytesOfBytes: */
+	fmt = (((usqInt) (longAt(oop))) >> 24) & 0x1F;
+	assert(fmt >= (firstByteFormat()));
+	sz = ((numSlotsOf(oop)) << (shiftForWord())) - (fmt & 7);
+	if (sz > 4) {
+		/* begin primitiveFail */
+		if (!GIV(primFailCode)) {
+			GIV(primFailCode) = 1;
+		}
+		return 0;
+	}
+	return 
+#  if VMBIGENDIAN
+		(((byteAt((oop + BaseHeaderSize) + 0)) + ((byteAt((oop + BaseHeaderSize) + 1)) << 8)) + ((byteAt((oop + BaseHeaderSize) + 2)) << 16)) + ((byteAt((oop + BaseHeaderSize) + 3)) << 24)
+#  else /* VMBIGENDIAN */
+		long32At((oop + BaseHeaderSize) + (0 << 2))
+#  endif /* VMBIGENDIAN */
+		;
 }
 
 
@@ -27567,6 +27546,7 @@
 positive64BitValueOf(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt ccIndex;
+    sqInt fmt;
     sqInt i;
     sqInt ok;
     sqInt sz;
@@ -27595,16 +27575,25 @@
 	ok = ClassLargePositiveIntegerCompactIndex == ccIndex;
 	goto l1;
 
-	ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargePositiveInteger << (shiftForWord())))) == (classAtIndex(ccIndex));
 l1:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-	if (!(ok
-		 && (((sz = numBytesOf(oop))) <= (sizeof(sqLong))))) {
+	if (!ok) {
 		/* begin primitiveFail */
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
 		return 0;
 	}
+	/* begin numBytesOfBytes: */
+	fmt = (((usqInt) (longAt(oop))) >> 24) & 0x1F;
+	assert(fmt >= (firstByteFormat()));
+	sz = ((numSlotsOf(oop)) << (shiftForWord())) - (fmt & 7);
+	if (sz > (sizeof(sqLong))) {
+		/* begin primitiveFail */
+		if (!GIV(primFailCode)) {
+			GIV(primFailCode) = 1;
+		}
+		return 0;
+	}
 	value = 0;
 	for (i = 0; i < sz; i += 1) {
 		value += (((usqLong) (byteAt((oop + BaseHeaderSize) + i)))) << (i * 8);
@@ -27625,6 +27614,7 @@
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt bs;
     sqInt ccIndex;
+    sqInt fmt;
     sqInt ok;
     sqInt value;
 
@@ -27644,7 +27634,7 @@
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
-		return null;
+		return 0;
 	}
 	/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 	assert(!(isImmediate(oop)));
@@ -27652,21 +27642,44 @@
 	ok = ClassLargePositiveIntegerCompactIndex == ccIndex;
 	goto l1;
 
-	ok = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassLargePositiveInteger << (shiftForWord())))) == (classAtIndex(ccIndex));
 l1:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-	if (!(ok
-		 && (((bs = numBytesOf(oop))) <= (sizeof(unsigned long))))) {
+	if (!ok) {
 		/* begin primitiveFail */
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
-		return null;
+		return 0;
 	}
+	/* begin numBytesOfBytes: */
+	fmt = (((usqInt) (longAt(oop))) >> 24) & 0x1F;
+	assert(fmt >= (firstByteFormat()));
+	bs = ((numSlotsOf(oop)) << (shiftForWord())) - (fmt & 7);
+	if (bs > (sizeof(unsigned long))) {
+		/* begin primitiveFail */
+		if (!GIV(primFailCode)) {
+			GIV(primFailCode) = 1;
+		}
+		return 0;
+	}
 	if (((sizeof(unsigned long)) == 8)
 	 && (bs > 4)) {
-		return (((((((byteAt((oop + BaseHeaderSize) + 0)) + ((byteAt((oop + BaseHeaderSize) + 1)) << 8)) + ((byteAt((oop + BaseHeaderSize) + 2)) << 16)) + ((byteAt((oop + BaseHeaderSize) + 3)) << 24)) + ((byteAt((oop + BaseHeaderSize) + 4)) << 32)) + ((byteAt((oop + BaseHeaderSize) + 5)) << 40)) + ((byteAt((oop + BaseHeaderSize) + 6)) << 48)) + ((byteAt((oop + BaseHeaderSize) + 7)) << 56);
+		return 
+#    if VMBIGENDIAN
+			(((((((byteAt((oop + BaseHeaderSize) + 0)) + ((byteAt((oop + BaseHeaderSize) + 1)) << 8)) + ((byteAt((oop + BaseHeaderSize) + 2)) << 16)) + ((byteAt((oop + BaseHeaderSize) + 3)) << 24)) + ((byteAt((oop + BaseHeaderSize) + 4)) << 32)) + ((byteAt((oop + BaseHeaderSize) + 5)) << 40)) + ((byteAt((oop + BaseHeaderSize) + 6)) << 48)) + ((byteAt((oop + BaseHeaderSize) + 7)) << 56)
+#    else /* VMBIGENDIAN */
+			long64At((oop + BaseHeaderSize) + (0 << 3))
+#    endif /* VMBIGENDIAN */
+			;
 	}
-	return (((byteAt((oop + BaseHeaderSize) + 0)) + ((byteAt((oop + BaseHeaderSize) + 1)) << 8)) + ((byteAt((oop + BaseHeaderSize) + 2)) << 16)) + ((byteAt((oop + BaseHeaderSize) + 3)) << 24);
+	else {
+		return 
+#    if VMBIGENDIAN
+			(((byteAt((oop + BaseHeaderSize) + 0)) + ((byteAt((oop + BaseHeaderSize) + 1)) << 8)) + ((byteAt((oop + BaseHeaderSize) + 2)) << 16)) + ((byteAt((oop + BaseHeaderSize) + 3)) << 24)
+#    else /* VMBIGENDIAN */
+			long32At((oop + BaseHeaderSize) + (0 << 2))
+#    endif /* VMBIGENDIAN */
+			;
+	}
 }
 
 static void
@@ -28043,45 +28056,22 @@
 	GIV(stackPointer) = sp;
 }
 
+
+/*	N.B. This will answer inexact results for integers with > 53 bits of
+	magnitude. 
+ */
+
 static void
 primitiveAsFloat(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
-    sqInt arg;
-    sqInt integerPointer;
-    sqInt object;
+    sqInt rcvr;
     char *sp;
-    sqInt top;
 
-	/* begin popInteger */
-	/* begin popStack */
-	top = longAt(GIV(stackPointer));
-	GIV(stackPointer) += BytesPerWord;
-	integerPointer = top;
-	/* begin checkedIntegerValueOf: */
-	if ((integerPointer & 1)) {
-		arg = (integerPointer >> 1);
-		goto l1;
-	}
-	else {
-		/* begin primitiveFail */
-		if (!GIV(primFailCode)) {
-			GIV(primFailCode) = 1;
-		}
-		arg = 0;
-		goto l1;
-	}
-l1:	/* end popInteger */;
-	if (!GIV(primFailCode)) {
-		/* begin pushFloat: */
-		/* begin push: */
-		object = floatObjectOf(((double) arg ));
-		longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
-		GIV(stackPointer) = sp;
-	}
-	else {
-		/* begin unPop: */
-		GIV(stackPointer) -= 1 * BytesPerWord;
-	}
+	rcvr = longAt(GIV(stackPointer));
+	assert((rcvr & 1));
+	/* begin pop:thenPushFloat: */
+	longAtput((sp = GIV(stackPointer) + ((1 - 1) * BytesPerWord)), floatObjectOf(((double) ((rcvr >> 1)) )));
+	GIV(stackPointer) = sp;
 }
 
 static void
@@ -29566,8 +29556,6 @@
 primitiveClipboardText(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt fmt;
-    usqInt numBytes;
-    usqInt numSlots;
     sqInt s;
     char *sp;
     sqInt sz;
@@ -29583,33 +29571,10 @@
 			return;
 		}
 		if (!GIV(primFailCode)) {
-			/* begin numBytesOf: */
+			/* begin numBytesOfBytes: */
 			fmt = (((usqInt) (longAt(s))) >> 24) & 0x1F;
-			/* begin numSlotsOf: */
-			flag("endianness");
-			assert((classIndexOf(s)) > (isForwardedObjectClassIndexPun()));
-			numSlots = byteAt(s + 7);
-			numBytes = (numSlots == 0xFF
-				? longAt(s - BaseHeaderSize)
-				: numSlots);
-			numBytes = numBytes << (shiftForWord());
-			if (fmt >= 16) {
-
-				/* bytes (the common case), including CompiledMethod */
-
-				sz = numBytes - (fmt & 7);
-				goto l1;
-			}
-			if (fmt <= 9) {
-				sz = numBytes;
-				goto l1;
-			}
-			if (fmt >= 12) {
-				sz = numBytes - ((fmt & 3) << 1);
-				goto l1;
-			}
-			sz = numBytes - ((fmt & 1) << 2);
-		l1:	/* end numBytesOf: */;
+			assert(fmt >= (firstByteFormat()));
+			sz = ((numSlotsOf(s)) << (shiftForWord())) - (fmt & 7);
 			clipboardWriteFromAt(sz, s + BaseHeaderSize, 0);
 			/* begin pop: */
 			GIV(stackPointer) += 1 * BytesPerWord;
@@ -30918,7 +30883,7 @@
     sqInt arg;
     sqInt fmt;
     sqInt i;
-    sqInt length;
+    usqInt length;
     usqInt numBytes;
     usqInt numSlots;
     usqInt numSlots1;
@@ -30959,18 +30924,18 @@
 
 			/* bytes (the common case), including CompiledMethod */
 
-			length = numBytes - (fmt & 7);
+			length = ((sqInt) (numBytes - (fmt & 7)));
 			goto l1;
 		}
 		if (fmt <= 9) {
-			length = numBytes;
+			length = ((sqInt) numBytes);
 			goto l1;
 		}
 		if (fmt >= 12) {
-			length = numBytes - ((fmt & 3) << 1);
+			length = ((sqInt) (numBytes - ((fmt & 3) << 1)));
 			goto l1;
 		}
-		length = numBytes - ((fmt & 1) << 2);
+		length = ((sqInt) (numBytes - ((fmt & 1) << 2)));
 	l1:	/* end numBytesOf: */;
 		if (!((((((usqInt) (longAt(rcvr))) >> 24) & 0x1F) == ((((usqInt) (longAt(arg))) >> 24) & 0x1F))
 			 && (length == (numBytesOf(arg))))) {
@@ -30988,9 +30953,9 @@
 		flag("endianness");
 		assert((classIndexOf(rcvr)) > (isForwardedObjectClassIndexPun()));
 		numSlots1 = byteAt(rcvr + 7);
-		length = ((usqInt) ((numSlots1 == 0xFF
-	? longAt(rcvr - BaseHeaderSize)
-	: numSlots1)));
+		length = (numSlots1 == 0xFF
+			? longAt(rcvr - BaseHeaderSize)
+			: numSlots1);
 		if (!((isAppropriateForCopyObject(arg))
 			 && (length == (lengthOfformat(arg, (((usqInt) (longAt(arg))) >> 24) & 0x1F))))) {
 			(GIV(primFailCode) = PrimErrBadArgument);
@@ -31301,41 +31266,28 @@
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt integerArgument;
     sqInt integerReceiver;
-    sqInt object;
     sqInt result;
     char *sp;
-    sqInt top;
-    sqInt top1;
+    char *sp1;
 
-	/* begin popStack */
-	top = longAt(GIV(stackPointer));
-	GIV(stackPointer) += BytesPerWord;
-	integerArgument = top;
-	/* begin popStack */
-	top1 = longAt(GIV(stackPointer));
-	GIV(stackPointer) += BytesPerWord;
-	integerReceiver = top1;
-	/* begin compare31or32Bits:equal: */
-	if (((integerReceiver & 1))
-	 && ((integerArgument & 1))) {
-		result = integerReceiver == integerArgument;
-		goto l1;
-	}
-	result = (positive32BitValueOf(integerReceiver)) == (positive32BitValueOf(integerArgument));
-l1:	/* end compare31or32Bits:equal: */;
-	/* begin checkBooleanResult: */
-	if (!GIV(primFailCode)) {
-		/* begin pushBool: */
-		/* begin push: */
-		object = (result
+	integerArgument = longAt(GIV(stackPointer));
+	integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+	if (((integerReceiver & integerArgument) & 1) != 0) {
+		/* begin pop:thenPushBool: */
+		longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), (integerReceiver == integerArgument
 			? GIV(trueObj)
-			: GIV(falseObj));
-		longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
+			: GIV(falseObj)));
 		GIV(stackPointer) = sp;
 	}
 	else {
-		/* begin unPop: */
-		GIV(stackPointer) -= 2 * BytesPerWord;
+		result = (positiveMachineIntegerValueOf(integerReceiver)) == (positiveMachineIntegerValueOf(integerArgument));
+		if (!GIV(primFailCode)) {
+			/* begin pop:thenPushBool: */
+			longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), (result
+				? GIV(trueObj)
+				: GIV(falseObj)));
+			GIV(stackPointer) = sp1;
+		}
 	}
 }
 
@@ -33077,66 +33029,25 @@
 primitiveGreaterOrEqual(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt integerArgument;
-    sqInt integerPointer;
-    sqInt integerPointer1;
     sqInt integerReceiver;
-    sqInt object;
     char *sp;
-    sqInt top;
-    sqInt top1;
 
-	/* begin popInteger */
-	/* begin popStack */
-	top = longAt(GIV(stackPointer));
-	GIV(stackPointer) += BytesPerWord;
-	integerPointer = top;
-	/* begin checkedIntegerValueOf: */
-	if ((integerPointer & 1)) {
-		integerArgument = (integerPointer >> 1);
-		goto l1;
+	integerArgument = longAt(GIV(stackPointer));
+	integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+	if (((integerReceiver & integerArgument) & 1) != 0) {
+		;
+		/* begin pop:thenPushBool: */
+		longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), (integerReceiver >= integerArgument
+			? GIV(trueObj)
+			: GIV(falseObj)));
+		GIV(stackPointer) = sp;
 	}
 	else {
 		/* begin primitiveFail */
 		if (!GIV(primFailCode)) {
 			GIV(primFailCode) = 1;
 		}
-		integerArgument = 0;
-		goto l1;
 	}
-l1:	/* end popInteger */;
-	/* begin popInteger */
-	/* begin popStack */
-	top1 = longAt(GIV(stackPointer));
-	GIV(stackPointer) += BytesPerWord;
-	integerPointer1 = top1;
-	/* begin checkedIntegerValueOf: */
-	if ((integerPointer1 & 1)) {
-		integerReceiver = (integerPointer1 >> 1);
-		goto l2;
-	}
-	else {
-		/* begin primitiveFail */
-		if (!GIV(primFailCode)) {
-			GIV(primFailCode) = 1;
-		}
-		integerReceiver = 0;
-		goto l2;
-	}
-l2:	/* end popInteger */;
-	/* begin checkBooleanResult: */
-	if (!GIV(primFailCode)) {
-		/* begin pushBool: */
-		/* begin push: */
-		object = (integerReceiver >= integerArgument
-			? GIV(trueObj)
-			: GIV(falseObj));
-		longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
-		GIV(stackPointer) = sp;
-	}
-	else {
-		/* begin unPop: */
-		GIV(stackPointer) -= 2 * BytesPerWord;
-	}
 }
 
 
@@ -33164,66 +33075,25 @@
 primitiveGreaterThan(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt integerArgument;
-    sqInt integerPointer;
-    sqInt integerPointer1;
     sqInt integerReceiver;
-    sqInt object;
     char *sp;
-    sqInt top;
-    sqInt top1;
 
-	/* begin popInteger */
-	/* begin popStack */
-	top = longAt(GIV(stackPointer));
-	GIV(stackPointer) += BytesPerWord;
-	integerPointer = top;
-	/* begin checkedIntegerValueOf: */
-	if ((integerPointer & 1)) {

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list