[Vm-dev] [commit][3014] CogVM source as per VMMaker.oscog-eem.779

commits at squeakvm.org commits at squeakvm.org
Tue Jun 24 02:18:37 UTC 2014


Revision: 3014
Author:   eliot
Date:     2014-06-23 19:18:33 -0700 (Mon, 23 Jun 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.779

Rewrite memory allocation on linux for Spur.  Arrange that the heap can grow
above 2Gb without any large initial alloc.

Fix some sign issues with free space tallying to allow Spur to shrink memory
and answer via primitiveVMParameter heap sizes above 2Gb.

Add longPrintInstancesOf:/longPrintInstancesWithClassIndex: for debugging.

Add missing build scripts for itimer heartbeat Spur linux VMs.

Modified Paths:
--------------
    branches/Cog/nscogsrc/vm/cointerp.c
    branches/Cog/nscogsrc/vm/cointerp.h
    branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
    branches/Cog/nscogsrc/vm/interp.h
    branches/Cog/nscogsrc/vm/vmCallback.h
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/interp.h
    branches/Cog/nsspursrc/vm/vmCallback.h
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/nsspurstacksrc/vm/interp.h
    branches/Cog/nsspurstacksrc/vm/vmCallback.h
    branches/Cog/platforms/unix/vm/Makefile.in
    branches/Cog/platforms/unix/vm/sqUnixMain.c
    branches/Cog/platforms/unix/vm/sqUnixMemory.c
    branches/Cog/scripts/uploadvms
    branches/Cog/sistasrc/vm/cointerp.c
    branches/Cog/sistasrc/vm/cointerp.h
    branches/Cog/sistasrc/vm/gcc3x-cointerp.c
    branches/Cog/sistasrc/vm/interp.h
    branches/Cog/sistasrc/vm/vmCallback.h
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/interp.h
    branches/Cog/spursistasrc/vm/vmCallback.h
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/interp.h
    branches/Cog/spursrc/vm/vmCallback.h
    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/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/src/vm/interp.h
    branches/Cog/src/vm/vmCallback.h
    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

Added Paths:
-----------
    branches/Cog/build.linux32x86/squeak.cog.spur/build.assert.itimerheartbeat/mvm
    branches/Cog/build.linux32x86/squeak.cog.spur/build.debug.itimerheartbeat/mvm
    branches/Cog/build.linux32x86/squeak.cog.spur/build.itimerheartbeat/mvm
    branches/Cog/platforms/unix/vm/sqUnixSpurMemory.c

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

Added: branches/Cog/build.linux32x86/squeak.cog.spur/build.assert.itimerheartbeat/mvm
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.spur/build.assert.itimerheartbeat/mvm	                        (rev 0)
+++ branches/Cog/build.linux32x86/squeak.cog.spur/build.assert.itimerheartbeat/mvm	2014-06-24 02:18:33 UTC (rev 3014)
@@ -0,0 +1,27 @@
+#!/bin/bash
+# assert VM with VM profiler and itimer heartbeat
+INSTALLDIR=assert/cogspurlinux
+OPT="-g3 -O1 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -DDEBUGVM=0"
+
+if [ $# -ge 1 ]; then
+	INSTALLDIR="$1"; shift
+fi
+
+echo -n "clean? "
+read a
+case $a in
+n|no|N|NO)	echo "ok but this isn't safe!!";;
+*)			test -f Makefile && make reallyclean
+esac
+test -f config.h || ../../../platforms/unix/config/configure --without-npsqueak \
+		--with-src=spursrc --with-plugins=src/plugins \
+	CC="gcc -m32" \
+	CXX="g++ -m32" \
+	CFLAGS="$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0 -DITIMER_HEARTBEAT=1" \
+	LIBS="-lpthread -luuid" \
+	LDFLAGS=-Wl,-z,now
+rm -f vm/sqUnixMain.o # nuke version info
+rm -rf ../../../products/$INSTALLDIR
+# prefer make install prefix=`readlink -f \`pwd\`/../../../products/$INSTALLDIR`
+# but older linux readlinks lack the -f flag
+make install prefix=`(cd ../../../;pwd)`/products/$INSTALLDIR 2>&1 | tee LOG


Property changes on: branches/Cog/build.linux32x86/squeak.cog.spur/build.assert.itimerheartbeat/mvm
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/Cog/build.linux32x86/squeak.cog.spur/build.debug.itimerheartbeat/mvm
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.spur/build.debug.itimerheartbeat/mvm	                        (rev 0)
+++ branches/Cog/build.linux32x86/squeak.cog.spur/build.debug.itimerheartbeat/mvm	2014-06-24 02:18:33 UTC (rev 3014)
@@ -0,0 +1,27 @@
+#!/bin/bash
+# debug Spur VM with VM profiler and itimer heartbeat
+INSTALLDIR=debug/cogspurlinux
+OPT="-g3 -O0 -DDEBUGVM=1"
+
+if [ $# -ge 1 ]; then
+	INSTALLDIR="$1"; shift
+fi
+
+echo -n "clean? "
+read a
+case $a in
+n|no|N|NO)	echo "ok but this isn't safe!!";;
+*)			test -f Makefile && make reallyclean
+esac
+test -f config.h || ../../../platforms/unix/config/configure --without-npsqueak \
+		--with-src=spursrc --with-plugins=src/plugins \
+	CC="gcc -m32" \
+	CXX="g++ -m32" \
+	CFLAGS="$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0 -DITIMER_HEARTBEAT=1" \
+	LIBS="-lpthread -luuid" \
+	LDFLAGS=-Wl,-z,now
+rm -f vm/sqUnixMain.o # nuke version info
+rm -rf ../../../products/$INSTALLDIR
+# prefer make install prefix=`readlink -f \`pwd\`/../../../products/$INSTALLDIR`
+# but older linux readlinks lack the -f flag
+make install prefix=`(cd ../../../;pwd)`/products/$INSTALLDIR 2>&1 | tee LOG


Property changes on: branches/Cog/build.linux32x86/squeak.cog.spur/build.debug.itimerheartbeat/mvm
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/Cog/build.linux32x86/squeak.cog.spur/build.itimerheartbeat/mvm
===================================================================
--- branches/Cog/build.linux32x86/squeak.cog.spur/build.itimerheartbeat/mvm	                        (rev 0)
+++ branches/Cog/build.linux32x86/squeak.cog.spur/build.itimerheartbeat/mvm	2014-06-24 02:18:33 UTC (rev 3014)
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Spur VM with VM profiler and itimer heartbeat
+INSTALLDIR=cogspurlinux
+# Some gcc versions create a broken VM using -O2
+case `gcc -v 2>&1 | grep version | sed 's/gcc version *//'` in
+3.4.*)	OPT="-g -O1 -DNDEBUG -DDEBUGVM=0";;
+*)		OPT="-g -O2 -DNDEBUG -DDEBUGVM=0";;
+esac
+
+if [ $# -ge 1 ]; then
+	INSTALLDIR="$1"; shift
+fi
+
+echo -n "clean? "
+read a
+case $a in
+n|no|N|NO)	echo "ok but this isn't safe!!";;
+*)			test -f Makefile && make reallyclean
+esac
+test -f config.h || ../../../platforms/unix/config/configure --without-npsqueak \
+		--with-src=spursrc --with-plugins=src/plugins \
+	CC="gcc -m32" \
+	CXX="g++ -m32" \
+	CFLAGS="$OPT -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DCOGMTVM=0 -DITIMER_HEARTBEAT=1" \
+	LIBS="-lpthread -luuid" \
+	LDFLAGS=-Wl,-z,now
+rm -f vm/sqUnixMain.o # nuke version info
+rm -rf ../../../products/$INSTALLDIR
+# prefer make install prefix=`readlink -f \`pwd\`/../../../products/$INSTALLDIR`
+# but older linux readlinks lack the -f flag
+make install prefix=`(cd ../../../;pwd)`/products/$INSTALLDIR 2>&1 | tee LOG


Property changes on: branches/Cog/build.linux32x86/squeak.cog.spur/build.itimerheartbeat/mvm
___________________________________________________________________
Added: svn:executable
   + *

Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2014-06-23 23:03:59 UTC (rev 3013)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2014-06-24 02:18:33 UTC (rev 3014)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
    from
-	CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CoInterpreter VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -737,6 +737,7 @@
 sqInt loadBitBltFrom(sqInt bb);
 static sqInt loadImageSegmentFromoutPointers(sqInt segmentWordArray, sqInt outPointerArray) NoDbgRegParms;
 void loadInitialContext(void);
+void longPrintInstancesOf(sqInt aClassOop);
 void longPrintOop(sqInt oop);
 void longPrintReferencesTo(sqInt anOop);
 sqInt longStoreBytecodeForHeader(sqInt methodHeader);
@@ -1172,7 +1173,7 @@
 static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void)) NoDbgRegParms;
 static sqInt roomToPushNArgs(sqInt n) NoDbgRegParms;
 static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms;
-static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms;
+static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms;
 static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms;
 usqInt scavengeThresholdAddress(void);
 EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
@@ -2061,7 +2062,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.775";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.779";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -23980,15 +23981,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;
 
@@ -23999,7 +24002,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;
@@ -24014,7 +24031,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)) {
 
@@ -24068,18 +24085,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)) {
@@ -26245,7 +26262,105 @@
 	marryContextInNewStackPageAndInitializeInterpreterRegisters(activeContext);
 }
 
+
+/*	Scan the heap printing the oops of any and all objects that are instances
+	of aClassOop
+ */
+
 void
+longPrintInstancesOf(sqInt aClassOop)
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
+    sqInt ccIndex;
+    sqInt chunk;
+    sqInt header;
+    sqInt header1;
+    sqInt header2;
+    sqInt obj;
+    sqInt obj1;
+    sqInt oop;
+    sqInt sz;
+    sqInt sz1;
+    sqInt sz2;
+
+	/* begin firstAccessibleObject */
+	/* begin oopFromChunk: */
+	chunk = startOfMemory();
+	obj1 = chunk + (headerTypeBytes[(longAt(chunk)) & TypeMask]);
+	while ((((usqInt) obj1)) < (((usqInt) GIV(freeStart)))) {
+		if (!(((longAt(obj1)) & TypeMask) == HeaderTypeFree)) {
+			oop = obj1;
+			goto l2;
+		}
+		/* begin objectAfter: */
+		if (!(asserta(oopisLessThan(obj1, GIV(freeStart))))) {
+			error("no objects after the end of memory");
+		}
+		if (((longAt(obj1)) & TypeMask) == HeaderTypeFree) {
+			sz = (longAt(obj1)) & AllButTypeMask;
+		}
+		else {
+			/* begin sizeBitsOf: */
+			header = longAt(obj1);
+			sz = ((header & TypeMask) == HeaderTypeSizeAndClass
+				? (longAt(obj1 - (BytesPerWord * 2))) & LongSizeMask
+				: header & SizeMask);
+		}
+		obj1 = (obj1 + sz) + (headerTypeBytes[(longAt(obj1 + sz)) & TypeMask]);
+	}
+	error("heap is empty");
+	oop = null;
+l2:	/* end firstAccessibleObject */;
+	while (!(oop == null)) {
+		if (((((ccIndex = (((usqInt) (longAt(oop))) >> 12) & 0x1F)) == 0
+	? (longAt(oop - BaseHeaderSize)) & AllButTypeMask
+	: longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)))) == aClassOop) {
+			longPrintOop(oop);
+			/* begin cr */
+			printf("\n");
+		}
+		/* begin accessibleObjectAfter: */
+		/* 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: */
+			header2 = longAt(oop);
+			sz2 = ((header2 & TypeMask) == HeaderTypeSizeAndClass
+				? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask
+				: header2 & SizeMask);
+		}
+		obj = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]);
+		while ((((usqInt) obj)) < (((usqInt) GIV(freeStart)))) {
+			if (!(((longAt(obj)) & TypeMask) == HeaderTypeFree)) {
+				oop = obj;
+				goto l1;
+			}
+			/* begin objectAfter: */
+			if (!(asserta(oopisLessThan(obj, GIV(freeStart))))) {
+				error("no objects after the end of memory");
+			}
+			if (((longAt(obj)) & TypeMask) == HeaderTypeFree) {
+				sz1 = (longAt(obj)) & AllButTypeMask;
+			}
+			else {
+				/* begin sizeBitsOf: */
+				header1 = longAt(obj);
+				sz1 = ((header1 & TypeMask) == HeaderTypeSizeAndClass
+					? (longAt(obj - (BytesPerWord * 2))) & LongSizeMask
+					: header1 & SizeMask);
+			}
+			obj = (obj + sz1) + (headerTypeBytes[(longAt(obj + sz1)) & TypeMask]);
+		}
+		oop = null;
+	l1:	/* end accessibleObjectAfter: */;
+	}
+}
+
+void
 longPrintOop(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt byte;
@@ -45281,9 +45396,9 @@
 	1 arg:	return the indicated VM parameter;
 	2 args:	set the VM indicated parameter.
 	VM parameters are numbered as follows:
-	1	end of old-space (0-based, read-only)
-	2	end of young-space (read-only)
-	3	end of memory (read-only)
+	1	end/size of old-space (0-based, read-only)
+	2	end/size of young/new-space (read-only)
+	3	end/size of heap (read-only)
 	4	nil (was allocationCount (read-only))
 	5	nil (was allocations between GCs (read-write)
 	6	survivor count tenuring threshold (read-write)
@@ -45378,6 +45493,7 @@
     sqInt valuePointer22;
     sqInt valuePointer23;
     sqInt valuePointer24;
+    sqInt valuePointer25;
     sqInt valuePointer3;
     sqInt valuePointer4;
     sqInt valuePointer5;
@@ -45390,25 +45506,25 @@
 	if (GIV(argumentCount) == 0) {
 		result = instantiateClassindexableSize(longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassArray << ShiftForWord)), paramsArraySize);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer1 = (((GIV(freeStart) - (startOfMemory())) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (0 << ShiftForWord), valuePointer1);
+		valuePointer2 = (((GIV(freeStart) - (startOfMemory())) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (0 << ShiftForWord), valuePointer2);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer2 = positive64BitIntegerFor(GIV(youngStart) - (startOfMemory()));
-		longAtput((result + BaseHeaderSize) + (1 << ShiftForWord), valuePointer2);
+		valuePointer3 = positive64BitIntegerFor(GIV(youngStart) - (startOfMemory()));
+		longAtput((result + BaseHeaderSize) + (1 << ShiftForWord), valuePointer3);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer3 = positive64BitIntegerFor(GIV(endOfMemory) - (startOfMemory()));
-		longAtput((result + BaseHeaderSize) + (2 << ShiftForWord), valuePointer3);
+		valuePointer4 = positive64BitIntegerFor(GIV(endOfMemory) - (startOfMemory()));
+		longAtput((result + BaseHeaderSize) + (2 << ShiftForWord), valuePointer4);
 		longAtput((result + BaseHeaderSize) + (3 << ShiftForWord), GIV(nilObj));
 		longAtput((result + BaseHeaderSize) + (4 << ShiftForWord), GIV(nilObj));
 		longAtput((result + BaseHeaderSize) + (5 << ShiftForWord), ((GIV(tenuringThreshold) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (6 << ShiftForWord), ((GIV(statFullGCs) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (7 << ShiftForWord), ((((GIV(statFullGCUsecs) + 500) / 1000) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer4 = (((GIV(statIncrGCs)) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (8 << ShiftForWord), valuePointer4);
+		valuePointer5 = (((GIV(statIncrGCs)) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (8 << ShiftForWord), valuePointer5);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer5 = (((((GIV(statIncrGCUsecs)) + 500) / 1000) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (9 << ShiftForWord), valuePointer5);
+		valuePointer6 = (((((GIV(statIncrGCUsecs)) + 500) / 1000) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (9 << ShiftForWord), valuePointer6);
 		longAtput((result + BaseHeaderSize) + (10 << ShiftForWord), ((GIV(statTenures) << 1) | 1));
 		for (i = 11; i <= 19; i += 1) {
 			longAtput((result + BaseHeaderSize) + (i << ShiftForWord), ConstZero);
@@ -45419,8 +45535,8 @@
 		longAtput((result + BaseHeaderSize) + (23 << ShiftForWord), ((GIV(shrinkThreshold) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (24 << ShiftForWord), ((GIV(growHeadroom) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer6 = (((ioHeartbeatMilliseconds()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (25 << ShiftForWord), valuePointer6);
+		valuePointer7 = (((ioHeartbeatMilliseconds()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (25 << ShiftForWord), valuePointer7);
 		longAtput((result + BaseHeaderSize) + (26 << ShiftForWord), ((GIV(statMarkCount) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (27 << ShiftForWord), ((GIV(statSweepCount) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (28 << ShiftForWord), ((GIV(statMkFwdCount) << 1) | 1));
@@ -45436,20 +45552,20 @@
 		longAtput((result + BaseHeaderSize) + (38 << ShiftForWord), ((GIV(statPendingFinalizationSignals) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (39 << ShiftForWord), ((BytesPerWord << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer7 = (((imageFormatVersion()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (40 << ShiftForWord), valuePointer7);
+		valuePointer8 = (((imageFormatVersion()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (40 << ShiftForWord), valuePointer8);
 		longAtput((result + BaseHeaderSize) + (41 << ShiftForWord), ((GIV(numStackPages) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (42 << ShiftForWord), ((desiredNumStackPages << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (43 << ShiftForWord), ((GIV(edenBytes) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (44 << ShiftForWord), ((desiredEdenBytes << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer8 = getCogCodeSize();
-		longAtput((result + BaseHeaderSize) + (45 << ShiftForWord), valuePointer8);
+		valuePointer9 = getCogCodeSize();
+		longAtput((result + BaseHeaderSize) + (45 << ShiftForWord), valuePointer9);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer9 = getDesiredCogCodeSize();
-		longAtput((result + BaseHeaderSize) + (46 << ShiftForWord), valuePointer9);
+		valuePointer10 = getDesiredCogCodeSize();
+		longAtput((result + BaseHeaderSize) + (46 << ShiftForWord), valuePointer10);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer10 = (((((((GIV(processHasThreadId)
+		valuePointer11 = (((((((GIV(processHasThreadId)
 	? 1
 	: 0)) + ((GIV(flagInterpretedMethods)
 	? 2
@@ -45458,47 +45574,47 @@
 	: 4))) + ((GIV(noThreadingOfGUIThread)
 	? 8
 	: 0))) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (47 << ShiftForWord), valuePointer10);
+		longAtput((result + BaseHeaderSize) + (47 << ShiftForWord), valuePointer11);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer11 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (48 << ShiftForWord), valuePointer11);
+		valuePointer12 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (48 << ShiftForWord), valuePointer12);
 		for (i = 49; i <= 54; i += 1) {
 			longAtput((result + BaseHeaderSize) + (i << ShiftForWord), GIV(nilObj));
 		}
 
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer12 = positive64BitIntegerFor(GIV(statProcessSwitch));
-		longAtput((result + BaseHeaderSize) + (55 << ShiftForWord), valuePointer12);
+		valuePointer13 = positive64BitIntegerFor(GIV(statProcessSwitch));
+		longAtput((result + BaseHeaderSize) + (55 << ShiftForWord), valuePointer13);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer13 = positive64BitIntegerFor(GIV(statIOProcessEvents));
-		longAtput((result + BaseHeaderSize) + (56 << ShiftForWord), valuePointer13);
+		valuePointer14 = positive64BitIntegerFor(GIV(statIOProcessEvents));
+		longAtput((result + BaseHeaderSize) + (56 << ShiftForWord), valuePointer14);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer14 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
-		longAtput((result + BaseHeaderSize) + (57 << ShiftForWord), valuePointer14);
+		valuePointer15 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
+		longAtput((result + BaseHeaderSize) + (57 << ShiftForWord), valuePointer15);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer15 = positive64BitIntegerFor(GIV(statCheckForEvents));
-		longAtput((result + BaseHeaderSize) + (58 << ShiftForWord), valuePointer15);
+		valuePointer16 = positive64BitIntegerFor(GIV(statCheckForEvents));
+		longAtput((result + BaseHeaderSize) + (58 << ShiftForWord), valuePointer16);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer16 = positive64BitIntegerFor(GIV(statStackOverflow));
-		longAtput((result + BaseHeaderSize) + (59 << ShiftForWord), valuePointer16);
+		valuePointer17 = positive64BitIntegerFor(GIV(statStackOverflow));
+		longAtput((result + BaseHeaderSize) + (59 << ShiftForWord), valuePointer17);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer17 = positive64BitIntegerFor(GIV(statStackPageDivorce));
-		longAtput((result + BaseHeaderSize) + (60 << ShiftForWord), valuePointer17);
+		valuePointer18 = positive64BitIntegerFor(GIV(statStackPageDivorce));
+		longAtput((result + BaseHeaderSize) + (60 << ShiftForWord), valuePointer18);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer18 = getCodeCompactionCount();
-		longAtput((result + BaseHeaderSize) + (61 << ShiftForWord), valuePointer18);
+		valuePointer19 = getCodeCompactionCount();
+		longAtput((result + BaseHeaderSize) + (61 << ShiftForWord), valuePointer19);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer19 = getCodeCompactionMSecs();
-		longAtput((result + BaseHeaderSize) + (0x3E << ShiftForWord), valuePointer19);
+		valuePointer20 = getCodeCompactionMSecs();
+		longAtput((result + BaseHeaderSize) + (0x3E << ShiftForWord), valuePointer20);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer20 = (((numMethodsOfType(CMMethod)) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (0x3F << ShiftForWord), valuePointer20);
+		valuePointer21 = (((numMethodsOfType(CMMethod)) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (0x3F << ShiftForWord), valuePointer21);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer21 = GIV(trueObj);
-		longAtput((result + BaseHeaderSize) + (64 << ShiftForWord), valuePointer21);
+		valuePointer22 = GIV(trueObj);
+		longAtput((result + BaseHeaderSize) + (64 << ShiftForWord), valuePointer22);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer22 = (((stackPageByteSize()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (65 << ShiftForWord), valuePointer22);
+		valuePointer23 = (((stackPageByteSize()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (65 << ShiftForWord), valuePointer23);
 		for (i = 66; i <= 68; i += 1) {
 
 			/* reserved for more Cog-related info */
@@ -45506,11 +45622,11 @@
 			longAtput((result + BaseHeaderSize) + (i << ShiftForWord), GIV(nilObj));
 		}
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer23 = (((VM_PROXY_MAJOR) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (69 << ShiftForWord), valuePointer23);
+		valuePointer24 = (((VM_PROXY_MAJOR) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (69 << ShiftForWord), valuePointer24);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer24 = (((VM_PROXY_MINOR) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (70 << ShiftForWord), valuePointer24);
+		valuePointer25 = (((VM_PROXY_MINOR) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (70 << ShiftForWord), valuePointer25);
 		assert(paramsArraySize == 71);
 		/* begin pop:thenPush: */
 		longAtput((sp = GIV(stackPointer) + ((1 - 1) * BytesPerWord)), result);
@@ -45673,6 +45789,12 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (0)) {
+			result = (((((((usqInt) GIV(freeStart))) < (((usqInt) GIV(reserveStart)))
+	? (((usqInt) GIV(reserveStart))) - (((usqInt) GIV(freeStart)))
+	: 0)) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (0)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());
@@ -49886,6 +50008,10 @@
 	/* begin initializeInterpreter: */
 	interpreterProxy = sqGetInterpreterProxy();
 	dummyReferToProxy();
+
+	/* must preceed initializeObjectMemory: */
+
+	checkAllocFiller = 0;
 	initializeObjectMemory(bytesToShift);
 	/* begin checkAssumedCompactClasses */
 	/* begin checkCompactIndex:isClass:named: */
@@ -50024,7 +50150,6 @@
 	GIV(jmpDepth) = 0;
 	GIV(longRunningPrimitiveStartUsecs) = (GIV(longRunningPrimitiveStopUsecs) = 0);
 	GIV(maxExtSemTabSizeSet) = 0;
-	checkAllocFiller = 0;
 	GIV(statForceInterruptCheck) = 0;
 	GIV(statStackOverflow) = 0;
 	GIV(statCheckForEvents) = 0;
@@ -50749,7 +50874,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/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h	2014-06-23 23:03:59 UTC (rev 3013)
+++ branches/Cog/nscogsrc/vm/cointerp.h	2014-06-24 02:18:33 UTC (rev 3014)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
  */
 
 
@@ -139,6 +139,7 @@
 sqInt lengthOf(sqInt oop);
 sqInt literalCountOfHeader(sqInt headerPointer);
 sqInt literalofMethod(sqInt offset, sqInt methodPointer);
+void longPrintInstancesOf(sqInt aClassOop);
 void longPrintOop(sqInt oop);
 void longPrintReferencesTo(sqInt anOop);
 sqInt longStoreBytecodeForHeader(sqInt methodHeader);

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2014-06-23 23:03:59 UTC (rev 3013)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2014-06-24 02:18:33 UTC (rev 3014)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
    from
-	CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CoInterpreter VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -740,6 +740,7 @@
 sqInt loadBitBltFrom(sqInt bb);
 static sqInt loadImageSegmentFromoutPointers(sqInt segmentWordArray, sqInt outPointerArray) NoDbgRegParms;
 void loadInitialContext(void);
+void longPrintInstancesOf(sqInt aClassOop);
 void longPrintOop(sqInt oop);
 void longPrintReferencesTo(sqInt anOop);
 sqInt longStoreBytecodeForHeader(sqInt methodHeader);
@@ -1175,7 +1176,7 @@
 static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void)) NoDbgRegParms;
 static sqInt roomToPushNArgs(sqInt n) NoDbgRegParms;
 static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms;
-static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms;
+static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms;
 static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms;
 usqInt scavengeThresholdAddress(void);
 EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
@@ -2064,7 +2065,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.775";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.779";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -23989,15 +23990,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;
 
@@ -24008,7 +24011,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;
@@ -24023,7 +24040,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)) {
 
@@ -24077,18 +24094,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)) {
@@ -26254,7 +26271,105 @@
 	marryContextInNewStackPageAndInitializeInterpreterRegisters(activeContext);
 }
 
+
+/*	Scan the heap printing the oops of any and all objects that are instances
+	of aClassOop
+ */
+
 void
+longPrintInstancesOf(sqInt aClassOop)
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
+    sqInt ccIndex;
+    sqInt chunk;
+    sqInt header;
+    sqInt header1;
+    sqInt header2;
+    sqInt obj;
+    sqInt obj1;
+    sqInt oop;
+    sqInt sz;
+    sqInt sz1;
+    sqInt sz2;
+
+	/* begin firstAccessibleObject */
+	/* begin oopFromChunk: */
+	chunk = startOfMemory();
+	obj1 = chunk + (headerTypeBytes[(longAt(chunk)) & TypeMask]);
+	while ((((usqInt) obj1)) < (((usqInt) GIV(freeStart)))) {
+		if (!(((longAt(obj1)) & TypeMask) == HeaderTypeFree)) {
+			oop = obj1;
+			goto l2;
+		}
+		/* begin objectAfter: */
+		if (!(asserta(oopisLessThan(obj1, GIV(freeStart))))) {
+			error("no objects after the end of memory");
+		}
+		if (((longAt(obj1)) & TypeMask) == HeaderTypeFree) {
+			sz = (longAt(obj1)) & AllButTypeMask;
+		}
+		else {
+			/* begin sizeBitsOf: */
+			header = longAt(obj1);
+			sz = ((header & TypeMask) == HeaderTypeSizeAndClass
+				? (longAt(obj1 - (BytesPerWord * 2))) & LongSizeMask
+				: header & SizeMask);
+		}
+		obj1 = (obj1 + sz) + (headerTypeBytes[(longAt(obj1 + sz)) & TypeMask]);
+	}
+	error("heap is empty");
+	oop = null;
+l2:	/* end firstAccessibleObject */;
+	while (!(oop == null)) {
+		if (((((ccIndex = (((usqInt) (longAt(oop))) >> 12) & 0x1F)) == 0
+	? (longAt(oop - BaseHeaderSize)) & AllButTypeMask
+	: longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)))) == aClassOop) {
+			longPrintOop(oop);
+			/* begin cr */
+			printf("\n");
+		}
+		/* begin accessibleObjectAfter: */
+		/* 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: */
+			header2 = longAt(oop);
+			sz2 = ((header2 & TypeMask) == HeaderTypeSizeAndClass
+				? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask
+				: header2 & SizeMask);
+		}
+		obj = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]);
+		while ((((usqInt) obj)) < (((usqInt) GIV(freeStart)))) {
+			if (!(((longAt(obj)) & TypeMask) == HeaderTypeFree)) {
+				oop = obj;
+				goto l1;
+			}
+			/* begin objectAfter: */
+			if (!(asserta(oopisLessThan(obj, GIV(freeStart))))) {
+				error("no objects after the end of memory");
+			}
+			if (((longAt(obj)) & TypeMask) == HeaderTypeFree) {
+				sz1 = (longAt(obj)) & AllButTypeMask;
+			}
+			else {
+				/* begin sizeBitsOf: */
+				header1 = longAt(obj);
+				sz1 = ((header1 & TypeMask) == HeaderTypeSizeAndClass
+					? (longAt(obj - (BytesPerWord * 2))) & LongSizeMask
+					: header1 & SizeMask);
+			}
+			obj = (obj + sz1) + (headerTypeBytes[(longAt(obj + sz1)) & TypeMask]);
+		}
+		oop = null;
+	l1:	/* end accessibleObjectAfter: */;
+	}
+}
+
+void
 longPrintOop(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt byte;
@@ -45290,9 +45405,9 @@
 	1 arg:	return the indicated VM parameter;
 	2 args:	set the VM indicated parameter.
 	VM parameters are numbered as follows:
-	1	end of old-space (0-based, read-only)
-	2	end of young-space (read-only)
-	3	end of memory (read-only)
+	1	end/size of old-space (0-based, read-only)
+	2	end/size of young/new-space (read-only)
+	3	end/size of heap (read-only)
 	4	nil (was allocationCount (read-only))
 	5	nil (was allocations between GCs (read-write)
 	6	survivor count tenuring threshold (read-write)
@@ -45387,6 +45502,7 @@
     sqInt valuePointer22;
     sqInt valuePointer23;
     sqInt valuePointer24;
+    sqInt valuePointer25;
     sqInt valuePointer3;
     sqInt valuePointer4;
     sqInt valuePointer5;
@@ -45399,25 +45515,25 @@
 	if (GIV(argumentCount) == 0) {
 		result = instantiateClassindexableSize(longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassArray << ShiftForWord)), paramsArraySize);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer1 = (((GIV(freeStart) - (startOfMemory())) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (0 << ShiftForWord), valuePointer1);
+		valuePointer2 = (((GIV(freeStart) - (startOfMemory())) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (0 << ShiftForWord), valuePointer2);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer2 = positive64BitIntegerFor(GIV(youngStart) - (startOfMemory()));
-		longAtput((result + BaseHeaderSize) + (1 << ShiftForWord), valuePointer2);
+		valuePointer3 = positive64BitIntegerFor(GIV(youngStart) - (startOfMemory()));
+		longAtput((result + BaseHeaderSize) + (1 << ShiftForWord), valuePointer3);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer3 = positive64BitIntegerFor(GIV(endOfMemory) - (startOfMemory()));
-		longAtput((result + BaseHeaderSize) + (2 << ShiftForWord), valuePointer3);
+		valuePointer4 = positive64BitIntegerFor(GIV(endOfMemory) - (startOfMemory()));
+		longAtput((result + BaseHeaderSize) + (2 << ShiftForWord), valuePointer4);
 		longAtput((result + BaseHeaderSize) + (3 << ShiftForWord), GIV(nilObj));
 		longAtput((result + BaseHeaderSize) + (4 << ShiftForWord), GIV(nilObj));
 		longAtput((result + BaseHeaderSize) + (5 << ShiftForWord), ((GIV(tenuringThreshold) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (6 << ShiftForWord), ((GIV(statFullGCs) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (7 << ShiftForWord), ((((GIV(statFullGCUsecs) + 500) / 1000) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer4 = (((GIV(statIncrGCs)) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (8 << ShiftForWord), valuePointer4);
+		valuePointer5 = (((GIV(statIncrGCs)) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (8 << ShiftForWord), valuePointer5);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer5 = (((((GIV(statIncrGCUsecs)) + 500) / 1000) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (9 << ShiftForWord), valuePointer5);
+		valuePointer6 = (((((GIV(statIncrGCUsecs)) + 500) / 1000) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (9 << ShiftForWord), valuePointer6);
 		longAtput((result + BaseHeaderSize) + (10 << ShiftForWord), ((GIV(statTenures) << 1) | 1));
 		for (i = 11; i <= 19; i += 1) {
 			longAtput((result + BaseHeaderSize) + (i << ShiftForWord), ConstZero);
@@ -45428,8 +45544,8 @@
 		longAtput((result + BaseHeaderSize) + (23 << ShiftForWord), ((GIV(shrinkThreshold) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (24 << ShiftForWord), ((GIV(growHeadroom) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer6 = (((ioHeartbeatMilliseconds()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (25 << ShiftForWord), valuePointer6);
+		valuePointer7 = (((ioHeartbeatMilliseconds()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (25 << ShiftForWord), valuePointer7);
 		longAtput((result + BaseHeaderSize) + (26 << ShiftForWord), ((GIV(statMarkCount) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (27 << ShiftForWord), ((GIV(statSweepCount) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (28 << ShiftForWord), ((GIV(statMkFwdCount) << 1) | 1));
@@ -45445,20 +45561,20 @@
 		longAtput((result + BaseHeaderSize) + (38 << ShiftForWord), ((GIV(statPendingFinalizationSignals) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (39 << ShiftForWord), ((BytesPerWord << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer7 = (((imageFormatVersion()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (40 << ShiftForWord), valuePointer7);
+		valuePointer8 = (((imageFormatVersion()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (40 << ShiftForWord), valuePointer8);
 		longAtput((result + BaseHeaderSize) + (41 << ShiftForWord), ((GIV(numStackPages) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (42 << ShiftForWord), ((desiredNumStackPages << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (43 << ShiftForWord), ((GIV(edenBytes) << 1) | 1));
 		longAtput((result + BaseHeaderSize) + (44 << ShiftForWord), ((desiredEdenBytes << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer8 = getCogCodeSize();
-		longAtput((result + BaseHeaderSize) + (45 << ShiftForWord), valuePointer8);
+		valuePointer9 = getCogCodeSize();
+		longAtput((result + BaseHeaderSize) + (45 << ShiftForWord), valuePointer9);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer9 = getDesiredCogCodeSize();
-		longAtput((result + BaseHeaderSize) + (46 << ShiftForWord), valuePointer9);
+		valuePointer10 = getDesiredCogCodeSize();
+		longAtput((result + BaseHeaderSize) + (46 << ShiftForWord), valuePointer10);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer10 = (((((((GIV(processHasThreadId)
+		valuePointer11 = (((((((GIV(processHasThreadId)
 	? 1
 	: 0)) + ((GIV(flagInterpretedMethods)
 	? 2
@@ -45467,47 +45583,47 @@
 	: 4))) + ((GIV(noThreadingOfGUIThread)
 	? 8
 	: 0))) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (47 << ShiftForWord), valuePointer10);
+		longAtput((result + BaseHeaderSize) + (47 << ShiftForWord), valuePointer11);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer11 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (48 << ShiftForWord), valuePointer11);
+		valuePointer12 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (48 << ShiftForWord), valuePointer12);
 		for (i = 49; i <= 54; i += 1) {
 			longAtput((result + BaseHeaderSize) + (i << ShiftForWord), GIV(nilObj));
 		}
 
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer12 = positive64BitIntegerFor(GIV(statProcessSwitch));
-		longAtput((result + BaseHeaderSize) + (55 << ShiftForWord), valuePointer12);
+		valuePointer13 = positive64BitIntegerFor(GIV(statProcessSwitch));
+		longAtput((result + BaseHeaderSize) + (55 << ShiftForWord), valuePointer13);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer13 = positive64BitIntegerFor(GIV(statIOProcessEvents));
-		longAtput((result + BaseHeaderSize) + (56 << ShiftForWord), valuePointer13);
+		valuePointer14 = positive64BitIntegerFor(GIV(statIOProcessEvents));
+		longAtput((result + BaseHeaderSize) + (56 << ShiftForWord), valuePointer14);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer14 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
-		longAtput((result + BaseHeaderSize) + (57 << ShiftForWord), valuePointer14);
+		valuePointer15 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
+		longAtput((result + BaseHeaderSize) + (57 << ShiftForWord), valuePointer15);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer15 = positive64BitIntegerFor(GIV(statCheckForEvents));
-		longAtput((result + BaseHeaderSize) + (58 << ShiftForWord), valuePointer15);
+		valuePointer16 = positive64BitIntegerFor(GIV(statCheckForEvents));
+		longAtput((result + BaseHeaderSize) + (58 << ShiftForWord), valuePointer16);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer16 = positive64BitIntegerFor(GIV(statStackOverflow));
-		longAtput((result + BaseHeaderSize) + (59 << ShiftForWord), valuePointer16);
+		valuePointer17 = positive64BitIntegerFor(GIV(statStackOverflow));
+		longAtput((result + BaseHeaderSize) + (59 << ShiftForWord), valuePointer17);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer17 = positive64BitIntegerFor(GIV(statStackPageDivorce));
-		longAtput((result + BaseHeaderSize) + (60 << ShiftForWord), valuePointer17);
+		valuePointer18 = positive64BitIntegerFor(GIV(statStackPageDivorce));
+		longAtput((result + BaseHeaderSize) + (60 << ShiftForWord), valuePointer18);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer18 = getCodeCompactionCount();
-		longAtput((result + BaseHeaderSize) + (61 << ShiftForWord), valuePointer18);
+		valuePointer19 = getCodeCompactionCount();
+		longAtput((result + BaseHeaderSize) + (61 << ShiftForWord), valuePointer19);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer19 = getCodeCompactionMSecs();
-		longAtput((result + BaseHeaderSize) + (0x3E << ShiftForWord), valuePointer19);
+		valuePointer20 = getCodeCompactionMSecs();
+		longAtput((result + BaseHeaderSize) + (0x3E << ShiftForWord), valuePointer20);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer20 = (((numMethodsOfType(CMMethod)) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (0x3F << ShiftForWord), valuePointer20);
+		valuePointer21 = (((numMethodsOfType(CMMethod)) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (0x3F << ShiftForWord), valuePointer21);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer21 = GIV(trueObj);
-		longAtput((result + BaseHeaderSize) + (64 << ShiftForWord), valuePointer21);
+		valuePointer22 = GIV(trueObj);
+		longAtput((result + BaseHeaderSize) + (64 << ShiftForWord), valuePointer22);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer22 = (((stackPageByteSize()) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (65 << ShiftForWord), valuePointer22);
+		valuePointer23 = (((stackPageByteSize()) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (65 << ShiftForWord), valuePointer23);
 		for (i = 66; i <= 68; i += 1) {
 
 			/* reserved for more Cog-related info */
@@ -45515,11 +45631,11 @@
 			longAtput((result + BaseHeaderSize) + (i << ShiftForWord), GIV(nilObj));
 		}
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer23 = (((VM_PROXY_MAJOR) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (69 << ShiftForWord), valuePointer23);
+		valuePointer24 = (((VM_PROXY_MAJOR) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (69 << ShiftForWord), valuePointer24);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer24 = (((VM_PROXY_MINOR) << 1) | 1);
-		longAtput((result + BaseHeaderSize) + (70 << ShiftForWord), valuePointer24);
+		valuePointer25 = (((VM_PROXY_MINOR) << 1) | 1);
+		longAtput((result + BaseHeaderSize) + (70 << ShiftForWord), valuePointer25);
 		assert(paramsArraySize == 71);
 		/* begin pop:thenPush: */
 		longAtput((sp = GIV(stackPointer) + ((1 - 1) * BytesPerWord)), result);
@@ -45682,6 +45798,12 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (0)) {
+			result = (((((((usqInt) GIV(freeStart))) < (((usqInt) GIV(reserveStart)))
+	? (((usqInt) GIV(reserveStart))) - (((usqInt) GIV(freeStart)))
+	: 0)) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (0)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());
@@ -49895,6 +50017,10 @@
 	/* begin initializeInterpreter: */
 	interpreterProxy = sqGetInterpreterProxy();
 	dummyReferToProxy();
+
+	/* must preceed initializeObjectMemory: */
+
+	checkAllocFiller = 0;
 	initializeObjectMemory(bytesToShift);
 	/* begin checkAssumedCompactClasses */
 	/* begin checkCompactIndex:isClass:named: */
@@ -50033,7 +50159,6 @@
 	GIV(jmpDepth) = 0;
 	GIV(longRunningPrimitiveStartUsecs) = (GIV(longRunningPrimitiveStopUsecs) = 0);
 	GIV(maxExtSemTabSizeSet) = 0;
-	checkAllocFiller = 0;
 	GIV(statForceInterruptCheck) = 0;
 	GIV(statStackOverflow) = 0;
 	GIV(statCheckForEvents) = 0;
@@ -50758,7 +50883,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/nscogsrc/vm/interp.h
===================================================================
--- branches/Cog/nscogsrc/vm/interp.h	2014-06-23 23:03:59 UTC (rev 3013)
+++ branches/Cog/nscogsrc/vm/interp.h	2014-06-24 02:18:33 UTC (rev 3014)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/nscogsrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nscogsrc/vm/vmCallback.h	2014-06-23 23:03:59 UTC (rev 3013)
+++ branches/Cog/nscogsrc/vm/vmCallback.h	2014-06-24 02:18:33 UTC (rev 3014)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
  */
 
 #define VM_CALLBACK_INC 1

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2014-06-23 23:03:59 UTC (rev 3013)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2014-06-24 02:18:33 UTC (rev 3014)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
    from
-	CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
+	CoInterpreter VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.779 uuid: 5ba1d239-a296-47c9-83ad-6d0e0bcabcb4 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -847,6 +847,8 @@
 sqInt literalofMethod(sqInt offset, sqInt methodPointer);
 sqInt loadBitBltFrom(sqInt bb);
 void loadInitialContext(void);
+void longPrintInstancesOf(sqInt aClassOop);
+void longPrintInstancesWithClassIndex(sqInt classIndex);
 void longPrintOop(sqInt oop);
 void longPrintReferencesTo(sqInt anOop);
 sqInt longStoreBytecodeForHeader(sqInt methodHeader);
@@ -913,6 +915,7 @@
 static char * nameOfClass(sqInt classOop) NoDbgRegParms;
 usqInt newMethodAddress(void);
 static sqInt newObjectHash(void);
+static usqInt newSpaceCapacity(void);
 static sqInt newSpaceIsEmpty(void);
 static StackPage * newStackPage(void);
 sqInt nextInSortedFreeListLinkgiven(sqInt freeChunk, sqInt prevFree);
@@ -1355,6 +1358,7 @@
 sqInt shouldRemapObj(sqInt objOop);
 sqInt shouldRemapOop(sqInt oop);
 sqInt showDisplayBitsLeftTopRightBottom(sqInt aForm, sqInt l, sqInt t, sqInt r, sqInt b);
+static void shrinkObjectMemory(usqInt delta) NoDbgRegParms;
 static sqInt signalExternalSemaphores(void);
 sqInt signalNoResume(sqInt aSemaphore);
 sqInt signed32BitIntegerFor(sqInt integerValue);
@@ -1421,7 +1425,7 @@
 void tenuringIncrementalGC(void);
 static sqInt topOfObjStack(sqInt objStack) NoDbgRegParms;
 sqInt topRemappableOop(void);
-static sqInt totalBytesInSegments(void);
+static usqInt totalBytesInSegments(void);
 static sqInt totalFreeListBytes(void);
 static void transferTofrom(sqInt newProc, sqInt sourceCode) NoDbgRegParms;
 sqInt trueObject(void);
@@ -1480,7 +1484,7 @@
 _iss sqInt remapBufferCount;
 _iss sqInt falseObj;
 _iss sqInt needGCFlag;
-_iss sqInt totalFreeOldSpace;
+_iss usqInt totalFreeOldSpace;
 _iss sqInt bytesPerPage;
 _iss sqInt numSegments;
 _iss sqInt traceLogIndex;
@@ -1494,8 +1498,8 @@
 _iss usqInt firstFreeChunk;
 _iss unsigned char primTraceLogIndex;
 _iss StackPage * mostRecentlyUsedPage;
+_iss sqInt numStackPages;
 _iss SpurNewSpaceSpace pastSpace;
-_iss sqInt numStackPages;
 _iss usqInt newSpaceStart;
 _iss usqInt oldSpaceStart;
 _iss sqInt classTableFirstPage;
@@ -1511,9 +1515,9 @@
 _iss sqInt longRunningPrimitiveCheckSemaphore;
 _iss sqInt tempOop;
 _iss char * objStackInvalidBecause;
-_iss SpurNewSpaceSpace eden;
 _iss usqInt lastFreeChunk;
 _iss sqInt profileSemaphore;
+_iss SpurNewSpaceSpace eden;

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list