[Vm-dev] [commit][2847] CogVM source as per VMMaker.oscog-eem.585

commits at squeakvm.org commits at squeakvm.org
Thu Jan 16 18:49:29 UTC 2014


Revision: 2847
Author:   eliot
Date:     2014-01-16 10:49:26 -0800 (Thu, 16 Jan 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.585

Fix become on compiled methods in Spur.  followForwardedMethods
must use isForwarded:/followForwarded: not shouldRemapObj:
because the latter will confuse methods in newSpace for forwarded
methods. Rename the interpreter followForwardedMethods' to
followForwardedMethodsInMethodZone.

Add CogMethodZone>>printCogYoungReferrers.

Better svn:ignore pattern for . to ignore spur linux installs.

Modified Paths:
--------------
    branches/Cog/nscogsrc/vm/cogit.c
    branches/Cog/nscogsrc/vm/cogit.h
    branches/Cog/nscogsrc/vm/cogmethod.h
    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/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/spurstacksrc/vm/interp.h
    branches/Cog/spurstacksrc/vm/vmCallback.h
    branches/Cog/src/vm/cogit.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogmethod.h
    branches/Cog/src/vm/cointerpmt.c
    branches/Cog/src/vm/cointerpmt.h
    branches/Cog/src/vm/gcc3x-cointerpmt.c
    branches/Cog/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c
    branches/Cog/stacksrc/vm/interp.h
    branches/Cog/stacksrc/vm/vmCallback.h

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


Property changes on: branches/Cog
___________________________________________________________________
Modified: svn:ignore
   - ChangeHistory
MVALOG
README.*
*.app
*.dmg
*.msi
*.tgz
*.zip
cogastlinux
cogastlinuxpt
cogdbglinux
cogdbglinuxpt
coglinux
coglinuxpt
cogmtlinux
cogwin
cogmtwin
nsvmlinux
nsvmlinuxpt
nsvmlinuxast
nsvmlinuxastpt
nsvmlinuxdbg
nsvmlinuxdbgpt
nsvmwin

   + ChangeHistory
MVALOG
README.*
*.app
*.dmg
*.msi
*.tgz
*.zip
cog*linux*
cog*win*
nsvm*linux*
nsvm*win*


Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/nscogsrc/vm/cogit.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	StackToRegisterMappingCogit VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -979,6 +979,7 @@
 void printCogMethodsWithMethod(sqInt methodOop);
 void printCogMethodsWithPrimitive(sqInt primIdx);
 void printCogMethodsWithSelector(sqInt selectorOop);
+void printCogYoungReferrers(void);
 void printTrampolineTable(void);
 static sqInt processorHasDivQuoRem(sqInt ignoredPrimIndex);
 static sqInt processorHasDoublePrecisionFloatingPointSupport(sqInt ignoredPrimIndex);
@@ -4270,8 +4271,9 @@
 
 
 /*	Compile the abstract instructions for a full closed PIC used to initialize
-	closedPICSize 
- */
+	closedPICSize. The loads into SendNumArgsReg are those for optional method
+	objects which may be
+	used in MNU cases. */
 
 static sqInt
 compileClosedPICPrototype(void)
@@ -15417,11 +15419,7 @@
 	ssPop(2);
 	resultReg = availableRegisterOrNil();
 	if (!(resultReg)) {
-		if (((numRegArgs()) > 1)
-		 && ((!needsFrame)
-		 && (methodOrBlockNumArgs == 2))) {
-			halt();
-		}
+		;
 		ssAllocateRequiredReg((resultReg = Arg1Reg));
 	}
 	ssPush(2);
@@ -16999,10 +16997,7 @@
 		if ((methodOrBlockNumArgs <= (numRegArgs()))
 		 && (methodOrBlockNumArgs > 0)) {
 			regsSet = regsSet | (registerMaskFor(Arg0Reg));
-			if (((numRegArgs()) > 1)
-			 && (methodOrBlockNumArgs > 1)) {
-				regsSet = regsSet | (registerMaskFor(Arg1Reg));
-			}
+			
 		}
 	}
 	for (i = (((simSpillBase < 0) ? 0 : simSpillBase)); i <= simStackPtr; i += 1) {
@@ -18066,19 +18061,10 @@
 	}
 	else {
 		if (numArgs > 0) {
-			if (((numRegArgs()) > 1)
-			 && (numArgs > 1)) {
-				ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 2);
-				ssAllocateRequiredRegupThrough(Arg1Reg, simStackPtr - 1);
-			}
-			else {
-				ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 1);
-			}
+			ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 1);
+
 		}
-		if (((numRegArgs()) > 1)
-		 && (numArgs > 1)) {
-			popToReg(simStackAt(simStackPtr), Arg1Reg);
-		}
+		
 		if (numArgs > 0) {
 			popToReg(simStackAt((simStackPtr - numArgs) + 1), Arg0Reg);
 		}
@@ -18130,19 +18116,10 @@
 		   Also check for any arg registers in use by other args. */
 
 		if (numArgs > 0) {
-			if (((numRegArgs()) > 1)
-			 && (numArgs > 1)) {
-				ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 2);
-				ssAllocateRequiredRegupThrough(Arg1Reg, simStackPtr - 1);
-			}
-			else {
-				ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 1);
-			}
+			ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 1);
+
 		}
-		if (((numRegArgs()) > 1)
-		 && (numArgs > 1)) {
-			popToReg(simStackAt(simStackPtr), Arg1Reg);
-		}
+		
 		if (numArgs > 0) {
 			popToReg(simStackAt((simStackPtr - numArgs) + 1), Arg0Reg);
 		}
@@ -18972,6 +18949,23 @@
 }
 
 void
+printCogYoungReferrers(void)
+{
+    CogMethod *cogMethod;
+    sqInt pointer;
+
+	pointer = youngReferrers;
+	while (pointer < limitAddress) {
+		cogMethod = ((CogMethod *) (longAt(pointer)));
+		if (!((cogMethod->cmRefersToYoung))) {
+			print("* ");
+		}
+		printCogMethod(cogMethod);
+		pointer += BytesPerWord;
+	}
+}
+
+void
 printTrampolineTable(void)
 {
     sqInt i;
@@ -21078,7 +21072,7 @@
 }
 
 
-/*	Update a potential object reference form a closed PIC.
+/*	Update a potential object reference from a closed PIC.
 	This may be an object reference, an inline cache tag or null.
 	Answer if the updated literal is young. */
 

Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/nscogsrc/vm/cogit.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 
@@ -60,6 +60,7 @@
 void printCogMethodsWithMethod(sqInt methodOop);
 void printCogMethodsWithPrimitive(sqInt primIdx);
 void printCogMethodsWithSelector(sqInt selectorOop);
+void printCogYoungReferrers(void);
 void printTrampolineTable(void);
 void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
 sqInt recordPrimTraceFunc(void);

Modified: branches/Cog/nscogsrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogmethod.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/nscogsrc/vm/cogmethod.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 typedef struct {


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Mon Jan 13 18:13:36 PST 2014
   + Thu Jan 16 10:48:19 PST 2014

Modified: branches/Cog/spursrc/vm/cogit.c
===================================================================
--- branches/Cog/spursrc/vm/cogit.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spursrc/vm/cogit.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	StackToRegisterMappingCogit * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -550,6 +550,8 @@
 CogBlockMethod * findMethodForStartBcpcinHomeMethod(sqInt startbcpc, CogMethod *cogMethod);
 void followForwardedLiteralsIn(CogMethod *cogMethod);
 void followForwardedMethods(void);
+static sqInt followMaybeObjRefAt(sqInt mcpc);
+static sqInt followMethodReferencesInClosedPIC(CogMethod *cPIC);
 static sqInt frameOffsetOfTemporary(sqInt index);
 static void freeMethod(CogMethod *cogMethod);
 static void freeOlderMethodsForCompaction(void);
@@ -937,6 +939,7 @@
 void printCogMethodsWithMethod(sqInt methodOop);
 void printCogMethodsWithPrimitive(sqInt primIdx);
 void printCogMethodsWithSelector(sqInt selectorOop);
+void printCogYoungReferrers(void);
 void printTrampolineTable(void);
 static sqInt processorHasDivQuoRem(sqInt ignoredPrimIndex);
 static sqInt processorHasDoublePrecisionFloatingPointSupport(sqInt ignoredPrimIndex);
@@ -3823,8 +3826,9 @@
 
 
 /*	Compile the abstract instructions for a full closed PIC used to initialize
-	closedPICSize 
- */
+	closedPICSize. The loads into SendNumArgsReg are those for optional method
+	objects which may be
+	used in MNU cases. */
 
 static sqInt
 compileClosedPICPrototype(void)
@@ -9708,8 +9712,8 @@
 	cogMethod = ((CogMethod *) methodZoneBase);
 	while (cogMethod < (limitZony())) {
 		if (((cogMethod->cmType)) == CMMethod) {
-			if (shouldRemapOop((cogMethod->methodObject))) {
-				(cogMethod->methodObject = remapObj((cogMethod->methodObject)));
+			if (isForwarded((cogMethod->methodObject))) {
+				(cogMethod->methodObject = followForwarded((cogMethod->methodObject)));
 				if ((!((cogMethod->cmRefersToYoung)))
 				 && (isYoungObject((cogMethod->methodObject)))) {
 					addToYoungReferrers(cogMethod);
@@ -9717,7 +9721,7 @@
 			}
 		}
 		if (((cogMethod->cmType)) == CMClosedPIC) {
-			if (mapObjectReferencesInClosedPIC(cogMethod)) {
+			if (followMethodReferencesInClosedPIC(cogMethod)) {
 				freedPIC = 1;
 				freeMethod(cogMethod);
 			}
@@ -9730,7 +9734,55 @@
 	}
 }
 
+
+/*	Follow a potential object reference from a closed PIC.
+	This may be a method reference or null.
+	Answer if the followed literal is young. */
+
 static sqInt
+followMaybeObjRefAt(sqInt mcpc)
+{
+    sqInt object;
+    sqInt subject;
+
+	object = literalBeforeFollowingAddress(backEnd, mcpc);
+	if (!(couldBeObject(object))) {
+		return 0;
+	}
+	if (!(isForwarded(object))) {
+		return isYoungObject(object);
+	}
+	subject = followForwarded(object);
+	storeLiteralbeforeFollowingAddress(backEnd, subject, mcpc);
+	codeModified = 1;
+	return isYoungObject(subject);
+}
+
+
+/*	Remap all object references in the closed PIC. Answer if any references
+	are young.
+	Set codeModified if any modifications are made. */
+
+static sqInt
+followMethodReferencesInClosedPIC(CogMethod *cPIC)
+{
+    sqInt i;
+    sqInt pc;
+    sqInt refersToYoung;
+
+	pc = (((sqInt)cPIC)) + firstCPICCaseOffset;
+	refersToYoung = followMaybeObjRefAt(pc - (jumpLongByteSize(backEnd)));
+	pc += cPICCaseSize;
+	for (i = 2; i <= ((cPIC->cPICNumCases)); i += 1) {
+		if (followMaybeObjRefAt(pc - (jumpLongConditionalByteSize(backEnd)))) {
+			refersToYoung = 1;
+		}
+		pc += cPICCaseSize;
+	}
+	return refersToYoung;
+}
+
+static sqInt
 frameOffsetOfTemporary(sqInt index)
 {
 	return (index < methodOrBlockNumArgs
@@ -18550,6 +18602,23 @@
 }
 
 void
+printCogYoungReferrers(void)
+{
+    CogMethod *cogMethod;
+    sqInt pointer;
+
+	pointer = youngReferrers;
+	while (pointer < limitAddress) {
+		cogMethod = ((CogMethod *) (longAt(pointer)));
+		if (!((cogMethod->cmRefersToYoung))) {
+			print("* ");
+		}
+		printCogMethod(cogMethod);
+		pointer += BytesPerWord;
+	}
+}
+
+void
 printTrampolineTable(void)
 {
     sqInt i;
@@ -20464,7 +20533,7 @@
 }
 
 
-/*	Update a potential object reference form a closed PIC.
+/*	Update a potential object reference from a closed PIC.
 	This may be an object reference, an inline cache tag or null.
 	Answer if the updated literal is young. */
 

Modified: branches/Cog/spursrc/vm/cogit.h
===================================================================
--- branches/Cog/spursrc/vm/cogit.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spursrc/vm/cogit.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
  */
 
 
@@ -61,6 +61,7 @@
 void printCogMethodsWithMethod(sqInt methodOop);
 void printCogMethodsWithPrimitive(sqInt primIdx);
 void printCogMethodsWithSelector(sqInt selectorOop);
+void printCogYoungReferrers(void);
 void printTrampolineTable(void);
 void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
 sqInt recordPrimTraceFunc(void);

Modified: branches/Cog/spursrc/vm/cointerp.c
===================================================================
--- branches/Cog/spursrc/vm/cointerp.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spursrc/vm/cointerp.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
    from
-	CoInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CoInterpreter * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -614,7 +614,7 @@
 static void followForwardedFrameContentsstackPointer(char *theFP, char *theSP);
 static sqInt followForwardedInObjStackatIndex(sqInt objStack, sqInt objStackRootIndex);
 static sqInt followForwardedObjectFieldstoDepth(sqInt objOop, sqInt depth);
-static sqInt followForwarded(sqInt objOop);
+sqInt followForwarded(sqInt objOop);
 static void followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags);
 static void followNecessaryForwardingInMethod(sqInt methodObj);
 sqInt forceInterruptCheck(void);
@@ -2164,7 +2164,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 usqInt heapBase;
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.584]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter * VMMaker.oscog-eem.584]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -6374,7 +6374,6 @@
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr1 + (BaseHeaderSize)) + (byte3 << 2)));
 					}
-					null;
 					goto l4;
 				}
 				if (opType == 3) {
@@ -6384,7 +6383,6 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + (BaseHeaderSize)) + ((byte3 + LiteralStart) << 2));
 					longAtPointerput((localSP -= BytesPerOop), object);
-					null;
 					goto l4;
 				}
 				if (opType == 4) {
@@ -6412,7 +6410,6 @@
 					/* begin internalPush: */
 					longAtPointerput((localSP -= BytesPerOop), longAt((litVar1 + (BaseHeaderSize)) + (ValueIndex << 2)));
 
-					null;
 					goto l4;
 				}
 				top = longAtPointer(localSP);
@@ -12665,8 +12662,9 @@
 					GIV(methodCache)[i + MethodCacheMethod] = m;
 				}
 			}
+			/* begin followForwardedMethodsInMethodZone */
+			followForwardedMethods();
 		}
-		followForwardedMethods();
 		/* begin followForwardingPointersInScheduler */
 
 		/* the GC follows pointers in the special objects array for us. */
@@ -23057,7 +23055,7 @@
 	- when accessing array first one has to follow a forwarding chain:
 	&a -> &b -> c */
 
-static sqInt
+sqInt
 followForwarded(sqInt objOop)
 {
     sqInt referent;

Modified: branches/Cog/spursrc/vm/cointerp.h
===================================================================
--- branches/Cog/spursrc/vm/cointerp.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spursrc/vm/cointerp.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
  */
 
 
@@ -85,6 +85,7 @@
 sqInt fixedFieldsFieldWidth(void);
 sqInt fixedFieldsOfClassFormatMask(void);
 sqInt flushExternalPrimitiveOf(sqInt methodObj);
+sqInt followForwarded(sqInt objOop);
 sqInt formatMask(void);
 sqInt formatOfClass(sqInt classPointer);
 sqInt formatShift(void);

Modified: branches/Cog/spursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/spursrc/vm/gcc3x-cointerp.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spursrc/vm/gcc3x-cointerp.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
    from
-	CoInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CoInterpreter * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter * VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -617,7 +617,7 @@
 static void followForwardedFrameContentsstackPointer(char *theFP, char *theSP);
 static sqInt followForwardedInObjStackatIndex(sqInt objStack, sqInt objStackRootIndex);
 static sqInt followForwardedObjectFieldstoDepth(sqInt objOop, sqInt depth);
-static sqInt followForwarded(sqInt objOop);
+sqInt followForwarded(sqInt objOop);
 static void followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags);
 static void followNecessaryForwardingInMethod(sqInt methodObj);
 sqInt forceInterruptCheck(void);
@@ -2167,7 +2167,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 usqInt heapBase;
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.584]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter * VMMaker.oscog-eem.584]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -6383,7 +6383,6 @@
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr1 + (BaseHeaderSize)) + (byte3 << 2)));
 					}
-					null;
 					goto l4;
 				}
 				if (opType == 3) {
@@ -6393,7 +6392,6 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + (BaseHeaderSize)) + ((byte3 + LiteralStart) << 2));
 					longAtPointerput((localSP -= BytesPerOop), object);
-					null;
 					goto l4;
 				}
 				if (opType == 4) {
@@ -6421,7 +6419,6 @@
 					/* begin internalPush: */
 					longAtPointerput((localSP -= BytesPerOop), longAt((litVar1 + (BaseHeaderSize)) + (ValueIndex << 2)));
 
-					null;
 					goto l4;
 				}
 				top = longAtPointer(localSP);
@@ -12674,8 +12671,9 @@
 					GIV(methodCache)[i + MethodCacheMethod] = m;
 				}
 			}
+			/* begin followForwardedMethodsInMethodZone */
+			followForwardedMethods();
 		}
-		followForwardedMethods();
 		/* begin followForwardingPointersInScheduler */
 
 		/* the GC follows pointers in the special objects array for us. */
@@ -23066,7 +23064,7 @@
 	- when accessing array first one has to follow a forwarding chain:
 	&a -> &b -> c */
 
-static sqInt
+sqInt
 followForwarded(sqInt objOop)
 {
     sqInt referent;

Modified: branches/Cog/spurstacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/spurstacksrc/vm/gcc3x-interp.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spurstacksrc/vm/gcc3x-interp.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	StackInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -513,7 +513,7 @@
 static void followForwardedFrameContentsstackPointer(char *theFP, char *theSP);
 static sqInt followForwardedInObjStackatIndex(sqInt objStack, sqInt objStackRootIndex);
 static sqInt followForwardedObjectFieldstoDepth(sqInt objOop, sqInt depth);
-static sqInt followForwarded(sqInt objOop);
+sqInt followForwarded(sqInt objOop);
 static void followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags);
 static void followNecessaryForwardingInMethod(sqInt methodObj);
 sqInt forceInterruptCheck(void);
@@ -1957,7 +1957,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.584]";
+const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.585]";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -12871,8 +12871,8 @@
 					GIV(methodCache)[i + MethodCacheMethod] = m;
 				}
 			}
+			/* begin followForwardedMethodsInMethodZone */
 		}
-		/* begin followForwardedMethods */
 		/* begin followForwardingPointersInScheduler */
 
 		/* the GC follows pointers in the special objects array for us. */
@@ -20890,7 +20890,7 @@
 	- when accessing array first one has to follow a forwarding chain:
 	&a -> &b -> c */
 
-static sqInt
+sqInt
 followForwarded(sqInt objOop)
 {
     sqInt referent;

Modified: branches/Cog/spurstacksrc/vm/interp.c
===================================================================
--- branches/Cog/spurstacksrc/vm/interp.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spurstacksrc/vm/interp.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	StackInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -510,7 +510,7 @@
 static void followForwardedFrameContentsstackPointer(char *theFP, char *theSP);
 static sqInt followForwardedInObjStackatIndex(sqInt objStack, sqInt objStackRootIndex);
 static sqInt followForwardedObjectFieldstoDepth(sqInt objOop, sqInt depth);
-static sqInt followForwarded(sqInt objOop);
+sqInt followForwarded(sqInt objOop);
 static void followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags);
 static void followNecessaryForwardingInMethod(sqInt methodObj);
 sqInt forceInterruptCheck(void);
@@ -1954,7 +1954,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.584]";
+const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.585]";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -12862,8 +12862,8 @@
 					GIV(methodCache)[i + MethodCacheMethod] = m;
 				}
 			}
+			/* begin followForwardedMethodsInMethodZone */
 		}
-		/* begin followForwardedMethods */
 		/* begin followForwardingPointersInScheduler */
 
 		/* the GC follows pointers in the special objects array for us. */
@@ -20881,7 +20881,7 @@
 	- when accessing array first one has to follow a forwarding chain:
 	&a -> &b -> c */
 
-static sqInt
+sqInt
 followForwarded(sqInt objOop)
 {
     sqInt referent;

Modified: branches/Cog/spurstacksrc/vm/interp.h
===================================================================
--- branches/Cog/spurstacksrc/vm/interp.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spurstacksrc/vm/interp.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/spurstacksrc/vm/vmCallback.h
===================================================================
--- branches/Cog/spurstacksrc/vm/vmCallback.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/spurstacksrc/vm/vmCallback.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.584 uuid: f8e3994b-6462-4df0-bc8e-c71034adf6aa
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 #define VM_CALLBACK_INC 1

Modified: branches/Cog/src/vm/cogit.c
===================================================================
--- branches/Cog/src/vm/cogit.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/src/vm/cogit.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	StackToRegisterMappingCogit VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -932,6 +932,7 @@
 void printCogMethodsWithMethod(sqInt methodOop);
 void printCogMethodsWithPrimitive(sqInt primIdx);
 void printCogMethodsWithSelector(sqInt selectorOop);
+void printCogYoungReferrers(void);
 void printTrampolineTable(void);
 static sqInt processorHasDivQuoRem(sqInt ignoredPrimIndex);
 static sqInt processorHasDoublePrecisionFloatingPointSupport(sqInt ignoredPrimIndex);
@@ -3824,8 +3825,9 @@
 
 
 /*	Compile the abstract instructions for a full closed PIC used to initialize
-	closedPICSize 
- */
+	closedPICSize. The loads into SendNumArgsReg are those for optional method
+	objects which may be
+	used in MNU cases. */
 
 static sqInt
 compileClosedPICPrototype(void)
@@ -14229,11 +14231,7 @@
 	ssPop(2);
 	resultReg = availableRegisterOrNil();
 	if (!(resultReg)) {
-		if (((numRegArgs()) > 1)
-		 && ((!needsFrame)
-		 && (methodOrBlockNumArgs == 2))) {
-			halt();
-		}
+		;
 		ssAllocateRequiredReg((resultReg = Arg1Reg));
 	}
 	ssPush(2);
@@ -15794,10 +15792,7 @@
 		if ((methodOrBlockNumArgs <= (numRegArgs()))
 		 && (methodOrBlockNumArgs > 0)) {
 			regsSet = regsSet | (registerMaskFor(Arg0Reg));
-			if (((numRegArgs()) > 1)
-			 && (methodOrBlockNumArgs > 1)) {
-				regsSet = regsSet | (registerMaskFor(Arg1Reg));
-			}
+			
 		}
 	}
 	for (i = (((simSpillBase < 0) ? 0 : simSpillBase)); i <= simStackPtr; i += 1) {
@@ -16699,19 +16694,10 @@
 		   Also check for any arg registers in use by other args. */
 
 		if (numArgs > 0) {
-			if (((numRegArgs()) > 1)
-			 && (numArgs > 1)) {
-				ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 2);
-				ssAllocateRequiredRegupThrough(Arg1Reg, simStackPtr - 1);
-			}
-			else {
-				ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 1);
-			}
+			ssAllocateRequiredRegupThrough(Arg0Reg, simStackPtr - 1);
+
 		}
-		if (((numRegArgs()) > 1)
-		 && (numArgs > 1)) {
-			popToReg(simStackAt(simStackPtr), Arg1Reg);
-		}
+		
 		if (numArgs > 0) {
 			popToReg(simStackAt((simStackPtr - numArgs) + 1), Arg0Reg);
 		}
@@ -17541,6 +17527,23 @@
 }
 
 void
+printCogYoungReferrers(void)
+{
+    CogMethod *cogMethod;
+    sqInt pointer;
+
+	pointer = youngReferrers;
+	while (pointer < limitAddress) {
+		cogMethod = ((CogMethod *) (longAt(pointer)));
+		if (!((cogMethod->cmRefersToYoung))) {
+			print("* ");
+		}
+		printCogMethod(cogMethod);
+		pointer += BytesPerWord;
+	}
+}
+
+void
 printTrampolineTable(void)
 {
     sqInt i;
@@ -19451,7 +19454,7 @@
 }
 
 
-/*	Update a potential object reference form a closed PIC.
+/*	Update a potential object reference from a closed PIC.
 	This may be an object reference, an inline cache tag or null.
 	Answer if the updated literal is young. */
 

Modified: branches/Cog/src/vm/cogit.h
===================================================================
--- branches/Cog/src/vm/cogit.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/src/vm/cogit.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 
@@ -60,6 +60,7 @@
 void printCogMethodsWithMethod(sqInt methodOop);
 void printCogMethodsWithPrimitive(sqInt primIdx);
 void printCogMethodsWithSelector(sqInt selectorOop);
+void printCogYoungReferrers(void);
 void printTrampolineTable(void);
 void recordCallOffsetInof(CogMethod *cogMethod, void *callLabelArg);
 sqInt recordPrimTraceFunc(void);

Modified: branches/Cog/src/vm/cogmethod.h
===================================================================
--- branches/Cog/src/vm/cogmethod.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/src/vm/cogmethod.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.569 uuid: 84f8b41f-92bf-41d2-9927-6c7e3d3e4272
+	CCodeGenerator VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 typedef struct {

Modified: branches/Cog/src/vm/cointerpmt.c
===================================================================
--- branches/Cog/src/vm/cointerpmt.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/src/vm/cointerpmt.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	CoInterpreterMT VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f
+	CoInterpreterMT VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1201,7 +1201,7 @@
 static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void));
 static sqInt roomToPushNArgs(sqInt n);
 static void runLeakCheckerForFullGC(sqInt fullGCFlag);
-static usqInt safeObjectAfter(sqInt oop);
+static sqInt safeObjectAfter(sqInt oop);
 static sqInt safePrintStringOf(sqInt oop);
 usqInt scavengeThresholdAddress(void);
 EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
@@ -2117,7 +2117,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.581]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.585]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 sqInt willNotThreadWarnCount;
@@ -19881,15 +19881,17 @@
     sqInt header1;
     sqInt header2;
     sqInt header3;
+    sqInt header4;
     usqInt lastWord;
     sqInt newFreeChunk;
     sqInt newOop;
-    usqInt next;
+    sqInt next;
     sqInt oop;
     sqInt realHeader;
     sqInt sz;
     sqInt sz1;
     sqInt sz2;
+    sqInt sz3;
     sqInt target;
     usqInt w;
 
@@ -19900,7 +19902,21 @@
 		/* begin objectAfterWhileForwarding: */
 		header2 = longAt(oop);
 		if ((header2 & MarkBit) == 0) {
-			next = ((sqInt) (objectAfter(oop)));
+			/* begin objectAfter: */
+			if (!(asserta(oopisLessThan(oop, GIV(freeStart))))) {
+				error("no objects after the end of memory");
+			}
+			if (((longAt(oop)) & TypeMask) == HeaderTypeFree) {
+				sz2 = (longAt(oop)) & AllButTypeMask;
+			}
+			else {
+				/* begin sizeBitsOf: */
+				header3 = longAt(oop);
+				sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass
+					? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask
+					: header3 & SizeMask);
+			}
+			next = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]);
 			goto l1;
 		}
 		fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1;
@@ -19915,7 +19931,7 @@
 		else {
 			sz1 = realHeader & SizeMask;
 		}
-		next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask])));
+		next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]);
 	l1:	/* end objectAfterWhileForwarding: */;
 		if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
 
@@ -19969,18 +19985,18 @@
 	}
 	/* begin safeObjectAfter: */
 	if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) {
-		sz2 = (longAt(newFreeChunk)) & AllButTypeMask;
+		sz3 = (longAt(newFreeChunk)) & AllButTypeMask;
 	}
 	else {
 		/* begin sizeBitsOf: */
-		header3 = longAt(newFreeChunk);
-		sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass
+		header4 = longAt(newFreeChunk);
+		sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass
 			? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask
-			: header3 & SizeMask);
+			: header4 & SizeMask);
 	}
-	next = ((newFreeChunk + sz2) >= GIV(freeStart)
+	next = ((newFreeChunk + sz3) >= GIV(freeStart)
 		? GIV(freeStart)
-		: (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask]));
+		: (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask]));
 	assert((next == GIV(freeStart))
 	 || (next == (oopFromChunk(GIV(compEnd)))));
 	if (next == GIV(freeStart)) {
@@ -46758,7 +46774,7 @@
 	given object or free chunk in memory. Return freeStart when
 	enumeration is complete. This is for assertion checking only. */
 
-static usqInt
+static sqInt
 safeObjectAfter(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt header;

Modified: branches/Cog/src/vm/cointerpmt.h
===================================================================
--- branches/Cog/src/vm/cointerpmt.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/src/vm/cointerpmt.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 

Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerpmt.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/src/vm/gcc3x-cointerpmt.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	CoInterpreterMT VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f
+	CoInterpreterMT VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.581 uuid: 926531fd-20be-42b4-9332-015b90e6734f " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1204,7 +1204,7 @@
 static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void));
 static sqInt roomToPushNArgs(sqInt n);
 static void runLeakCheckerForFullGC(sqInt fullGCFlag);
-static usqInt safeObjectAfter(sqInt oop);
+static sqInt safeObjectAfter(sqInt oop);
 static sqInt safePrintStringOf(sqInt oop);
 usqInt scavengeThresholdAddress(void);
 EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
@@ -2120,7 +2120,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.581]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.585]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 sqInt willNotThreadWarnCount;
@@ -19890,15 +19890,17 @@
     sqInt header1;
     sqInt header2;
     sqInt header3;
+    sqInt header4;
     usqInt lastWord;
     sqInt newFreeChunk;
     sqInt newOop;
-    usqInt next;
+    sqInt next;
     sqInt oop;
     sqInt realHeader;
     sqInt sz;
     sqInt sz1;
     sqInt sz2;
+    sqInt sz3;
     sqInt target;
     usqInt w;
 
@@ -19909,7 +19911,21 @@
 		/* begin objectAfterWhileForwarding: */
 		header2 = longAt(oop);
 		if ((header2 & MarkBit) == 0) {
-			next = ((sqInt) (objectAfter(oop)));
+			/* begin objectAfter: */
+			if (!(asserta(oopisLessThan(oop, GIV(freeStart))))) {
+				error("no objects after the end of memory");
+			}
+			if (((longAt(oop)) & TypeMask) == HeaderTypeFree) {
+				sz2 = (longAt(oop)) & AllButTypeMask;
+			}
+			else {
+				/* begin sizeBitsOf: */
+				header3 = longAt(oop);
+				sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass
+					? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask
+					: header3 & SizeMask);
+			}
+			next = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]);
 			goto l1;
 		}
 		fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1;
@@ -19924,7 +19940,7 @@
 		else {
 			sz1 = realHeader & SizeMask;
 		}
-		next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask])));
+		next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]);
 	l1:	/* end objectAfterWhileForwarding: */;
 		if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
 
@@ -19978,18 +19994,18 @@
 	}
 	/* begin safeObjectAfter: */
 	if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) {
-		sz2 = (longAt(newFreeChunk)) & AllButTypeMask;
+		sz3 = (longAt(newFreeChunk)) & AllButTypeMask;
 	}
 	else {
 		/* begin sizeBitsOf: */
-		header3 = longAt(newFreeChunk);
-		sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass
+		header4 = longAt(newFreeChunk);
+		sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass
 			? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask
-			: header3 & SizeMask);
+			: header4 & SizeMask);
 	}
-	next = ((newFreeChunk + sz2) >= GIV(freeStart)
+	next = ((newFreeChunk + sz3) >= GIV(freeStart)
 		? GIV(freeStart)
-		: (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask]));
+		: (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask]));
 	assert((next == GIV(freeStart))
 	 || (next == (oopFromChunk(GIV(compEnd)))));
 	if (next == GIV(freeStart)) {
@@ -46767,7 +46783,7 @@
 	given object or free chunk in memory. Return freeStart when
 	enumeration is complete. This is for assertion checking only. */
 
-static usqInt
+static sqInt
 safeObjectAfter(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt header;

Modified: branches/Cog/stacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/stacksrc/vm/gcc3x-interp.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/stacksrc/vm/gcc3x-interp.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	StackInterpreter VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7
+	StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7 " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1808,7 +1808,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.577]";
+const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.585]";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 

Modified: branches/Cog/stacksrc/vm/interp.c
===================================================================
--- branches/Cog/stacksrc/vm/interp.c	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/stacksrc/vm/interp.c	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
    from
-	StackInterpreter VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7
+	StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7 " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1805,7 +1805,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.577]";
+const char *interpreterVersion = "Croquet Closure Stack VM [StackInterpreter VMMaker.oscog-eem.585]";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 

Modified: branches/Cog/stacksrc/vm/interp.h
===================================================================
--- branches/Cog/stacksrc/vm/interp.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/stacksrc/vm/interp.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/stacksrc/vm/vmCallback.h
===================================================================
--- branches/Cog/stacksrc/vm/vmCallback.h	2014-01-14 02:14:07 UTC (rev 2846)
+++ branches/Cog/stacksrc/vm/vmCallback.h	2014-01-16 18:49:26 UTC (rev 2847)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.577 uuid: 8788f091-6817-480e-9bda-13ae360eeeb7
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.585 uuid: ffc9c619-e2b4-4432-977e-aba381f975ff
  */
 
 #define VM_CALLBACK_INC 1



More information about the Vm-dev mailing list