[Vm-dev] [commit][3007] CogVM source as per VMMaker.oscog-eem.776

commits at squeakvm.org commits at squeakvm.org
Thu Jun 19 21:13:00 UTC 2014


Revision: 3007
Author:   eliot
Date:     2014-06-19 14:12:57 -0700 (Thu, 19 Jun 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.776

Add parameter 54 on Spur to answer totalFreeOldSpace.

Add checks to unix  sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto to
avoid MAP_FIXED wiping out existing mappings.

Fix the odd syntax error in the image scripts.

Modified Paths:
--------------
    branches/Cog/image/get2897spurvm.sh
    branches/Cog/image/getsqueak45.sh
    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/sqUnixMemory.c
    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

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

Modified: branches/Cog/image/get2897spurvm.sh
===================================================================
--- branches/Cog/image/get2897spurvm.sh	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/image/get2897spurvm.sh	2014-06-19 21:12:57 UTC (rev 3007)
@@ -4,7 +4,7 @@
 #set -v
 . ./envvars.sh
 
-if wget --help >/dev/null ; then
+if wget --help >/dev/null; then
 	true
 else
 	echo 'could not find wget.  you can find instructions on how to install it on google.' 1>&2

Modified: branches/Cog/image/getsqueak45.sh
===================================================================
--- branches/Cog/image/getsqueak45.sh	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/image/getsqueak45.sh	2014-06-19 21:12:57 UTC (rev 3007)
@@ -5,7 +5,7 @@
 	ZIP=Squeak-4.5-All-in-One.zip
 	if [ "`md5 -q $ZIP`" != b90e0303ab61e928a5d997b22d18b468 ]
 	then
-		if wget --help >/dev/null ; then
+		if wget --help >/dev/null; then
 			true
 		else
 			echo 'could not find wget.  you can find instructions on how to install it on google.' 1>&2
@@ -13,7 +13,7 @@
 		fi
 		wget -c http://ftp.squeak.org/4.5/$ZIP
 	fi
-	if unzip --help >/dev/null then
+	if unzip --help >/dev/null; then
 		true
 	else
 		echo 'could not find unzip.  you can find instructions on how to install it on google.' 1>&2

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
    from
-	CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -2242,7 +2242,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.776";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -54792,9 +54792,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)
@@ -55062,11 +55062,14 @@
 		valuePointer13 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer13);
-		for (i = 49; i <= 53; i += 1) {
+		for (i = 49; i <= 52; i += 1) {
 			/* begin storePointerUnchecked:ofObject:withValue: */
 			assert(!(isForwarded(result)));
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
+		/* begin storePointerUnchecked:ofObject:withValue: */
+		assert(!(isForwarded(result)));
+		longAtput((result + (BaseHeaderSize)) + (53 << 2), ((GIV(totalFreeOldSpace) << 1) | 1));
 		/* begin storePointer:ofObject:withValue: */
 		valuePointer27 = floatObjectOf(getHeapGrowthToSizeGCRatio());
 		assert(!(isForwarded(result)));
@@ -55309,6 +55312,10 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (1)) {
+			result = ((GIV(totalFreeOldSpace) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (1)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());

Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspursrc/vm/cointerp.h	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
 
 

Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
    from
-	CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -2245,7 +2245,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.776";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -54801,9 +54801,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)
@@ -55071,11 +55071,14 @@
 		valuePointer13 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer13);
-		for (i = 49; i <= 53; i += 1) {
+		for (i = 49; i <= 52; i += 1) {
 			/* begin storePointerUnchecked:ofObject:withValue: */
 			assert(!(isForwarded(result)));
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
+		/* begin storePointerUnchecked:ofObject:withValue: */
+		assert(!(isForwarded(result)));
+		longAtput((result + (BaseHeaderSize)) + (53 << 2), ((GIV(totalFreeOldSpace) << 1) | 1));
 		/* begin storePointer:ofObject:withValue: */
 		valuePointer27 = floatObjectOf(getHeapGrowthToSizeGCRatio());
 		assert(!(isForwarded(result)));
@@ -55318,6 +55321,10 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (1)) {
+			result = ((GIV(totalFreeOldSpace) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (1)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());

Modified: branches/Cog/nsspursrc/vm/interp.h
===================================================================
--- branches/Cog/nsspursrc/vm/interp.h	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspursrc/vm/interp.h	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/nsspursrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nsspursrc/vm/vmCallback.h	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspursrc/vm/vmCallback.h	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
 
 #define VM_CALLBACK_INC 1

Modified: branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
    from
-	StackInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	StackInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -2026,7 +2026,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.775";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.776";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -49169,9 +49169,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)
@@ -49277,6 +49277,7 @@
     sqInt valuePointer21;
     sqInt valuePointer22;
     sqInt valuePointer23;
+    sqInt valuePointer24;
     sqInt valuePointer3;
     sqInt valuePointer4;
     sqInt valuePointer5;
@@ -49289,17 +49290,17 @@
 	if (GIV(argumentCount) == 0) {
 		result = instantiateClassindexableSize(longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassArray << 2)), paramsArraySize);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer = ((((GIV(freeStart) - (((eden()).start))) + (GIV(pastSpaceStart) - (((pastSpace()).start)))) << 1) | 1);
+		valuePointer1 = ((((GIV(freeStart) - (((eden()).start))) + (GIV(pastSpaceStart) - (((pastSpace()).start)))) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (0 << 2), valuePointer);
+		longAtput((result + (BaseHeaderSize)) + (0 << 2), valuePointer1);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer1 = positive64BitIntegerFor(totalBytesInSegments());
+		valuePointer2 = positive64BitIntegerFor(totalBytesInSegments());
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (1 << 2), valuePointer1);
+		longAtput((result + (BaseHeaderSize)) + (1 << 2), valuePointer2);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer2 = positive64BitIntegerFor((((GIV(eden).limit)) - (((((GIV(futureSpace).start)) < ((GIV(pastSpace).start))) ? ((GIV(futureSpace).start)) : ((GIV(pastSpace).start))))) + (totalBytesInSegments()));
+		valuePointer3 = positive64BitIntegerFor((((GIV(eden).limit)) - (((((GIV(futureSpace).start)) < ((GIV(pastSpace).start))) ? ((GIV(futureSpace).start)) : ((GIV(pastSpace).start))))) + (totalBytesInSegments()));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (2 << 2), valuePointer2);
+		longAtput((result + (BaseHeaderSize)) + (2 << 2), valuePointer3);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (3 << 2), GIV(nilObj));
@@ -49307,9 +49308,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (4 << 2), GIV(nilObj));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer3 = (((((sqInt)(((scavengerTenuringThreshold()) * (((GIV(pastSpace).limit)) - ((GIV(pastSpace).start)))) / (8 * 4)))) << 1) | 1);
+		valuePointer4 = (((((sqInt)(((scavengerTenuringThreshold()) * (((GIV(pastSpace).limit)) - ((GIV(pastSpace).start)))) / (8 * 4)))) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (5 << 2), valuePointer3);
+		longAtput((result + (BaseHeaderSize)) + (5 << 2), valuePointer4);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (6 << 2), ((GIV(statFullGCs) << 1) | 1));
@@ -49317,13 +49318,13 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (7 << 2), ((((GIV(statFullGCUsecs) + 500) / 1000) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer4 = (((GIV(statScavenges)) << 1) | 1);
+		valuePointer5 = (((GIV(statScavenges)) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (8 << 2), valuePointer4);
+		longAtput((result + (BaseHeaderSize)) + (8 << 2), valuePointer5);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer5 = (((((GIV(statScavengeGCUsecs)) + 500) / 1000) << 1) | 1);
+		valuePointer6 = (((((GIV(statScavengeGCUsecs)) + 500) / 1000) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (9 << 2), valuePointer5);
+		longAtput((result + (BaseHeaderSize)) + (9 << 2), valuePointer6);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (10 << 2), ((GIV(statTenures) << 1) | 1));
@@ -49333,9 +49334,9 @@
 			longAtput((result + (BaseHeaderSize)) + (i << 2), ConstZero);
 		}
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer6 = (((rememberedSetSize()) << 1) | 1);
+		valuePointer7 = (((rememberedSetSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (20 << 2), valuePointer6);
+		longAtput((result + (BaseHeaderSize)) + (20 << 2), valuePointer7);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (21 << 2), ((statRootTableOverflows << 1) | 1));
@@ -49349,9 +49350,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (24 << 2), ((GIV(growHeadroom) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer7 = (((ioHeartbeatMilliseconds()) << 1) | 1);
+		valuePointer8 = (((ioHeartbeatMilliseconds()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (25 << 2), valuePointer7);
+		longAtput((result + (BaseHeaderSize)) + (25 << 2), valuePointer8);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (26 << 2), ((GIV(statMarkCount) << 1) | 1));
@@ -49365,9 +49366,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (29 << 2), ((GIV(statCompactPassCount) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer8 = ((GIV(statGrowMemory) << 1) | 1);
+		valuePointer9 = ((GIV(statGrowMemory) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (30 << 2), valuePointer8);
+		longAtput((result + (BaseHeaderSize)) + (30 << 2), valuePointer9);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (0x1F << 2), ((statShrinkMemory << 1) | 1));
@@ -49396,9 +49397,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (39 << 2), ((BytesPerWord << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer9 = (((imageFormatVersion()) << 1) | 1);
+		valuePointer10 = (((imageFormatVersion()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (40 << 2), valuePointer9);
+		longAtput((result + (BaseHeaderSize)) + (40 << 2), valuePointer10);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (41 << 2), ((GIV(numStackPages) << 1) | 1));
@@ -49406,9 +49407,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (42 << 2), ((desiredNumStackPages << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer10 = (((((GIV(eden).limit)) - ((GIV(eden).start))) << 1) | 1);
+		valuePointer11 = (((((GIV(eden).limit)) - ((GIV(eden).start))) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (43 << 2), valuePointer10);
+		longAtput((result + (BaseHeaderSize)) + (43 << 2), valuePointer11);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (44 << 2), ((desiredEdenBytes << 1) | 1));
@@ -49419,29 +49420,33 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (46 << 2), GIV(nilObj));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer11 = ((((GIV(preemptionYields)
+		valuePointer12 = ((((GIV(preemptionYields)
 	? 0
 	: 4)) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (47 << 2), valuePointer11);
+		longAtput((result + (BaseHeaderSize)) + (47 << 2), valuePointer12);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer12 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
+		valuePointer13 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer12);
-		for (i = 49; i <= 53; i += 1) {
+		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer13);
+		for (i = 49; i <= 52; i += 1) {
 			/* begin storePointerUnchecked:ofObject:withValue: */
 			assert(!(isForwarded(result)));
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
+		/* begin storePointerUnchecked:ofObject:withValue: */
+		valuePointer = ((GIV(totalFreeOldSpace) << 1) | 1);
+		assert(!(isForwarded(result)));
+		longAtput((result + (BaseHeaderSize)) + (53 << 2), valuePointer);
 		/* begin storePointer:ofObject:withValue: */
-		valuePointer23 = floatObjectOf(getHeapGrowthToSizeGCRatio());
+		valuePointer24 = floatObjectOf(getHeapGrowthToSizeGCRatio());
 		assert(!(isForwarded(result)));
 		if (isOldObject(result)) {
 
 			/* most stores into young objects */
 
-			if (((valuePointer23 & 3) == 0)
-			 && ((((usqInt) valuePointer23)) < (((usqInt) GIV(newSpaceLimit))))) {
+			if (((valuePointer24 & 3) == 0)
+			 && ((((usqInt) valuePointer24)) < (((usqInt) GIV(newSpaceLimit))))) {
 				/* begin possibleRootStoreInto: */
 				if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) {
 					remember(result);
@@ -49451,32 +49456,32 @@
 				}
 			}
 		}
-		longAtput((result + (BaseHeaderSize)) + (54 << 2), valuePointer23);
+		longAtput((result + (BaseHeaderSize)) + (54 << 2), valuePointer24);
 
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer13 = positive64BitIntegerFor(GIV(statProcessSwitch));
+		valuePointer14 = positive64BitIntegerFor(GIV(statProcessSwitch));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (55 << 2), valuePointer13);
+		longAtput((result + (BaseHeaderSize)) + (55 << 2), valuePointer14);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer14 = positive64BitIntegerFor(GIV(statIOProcessEvents));
+		valuePointer15 = positive64BitIntegerFor(GIV(statIOProcessEvents));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (56 << 2), valuePointer14);
+		longAtput((result + (BaseHeaderSize)) + (56 << 2), valuePointer15);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer15 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
+		valuePointer16 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (57 << 2), valuePointer15);
+		longAtput((result + (BaseHeaderSize)) + (57 << 2), valuePointer16);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer16 = positive64BitIntegerFor(GIV(statCheckForEvents));
+		valuePointer17 = positive64BitIntegerFor(GIV(statCheckForEvents));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (58 << 2), valuePointer16);
+		longAtput((result + (BaseHeaderSize)) + (58 << 2), valuePointer17);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer17 = positive64BitIntegerFor(GIV(statStackOverflow));
+		valuePointer18 = positive64BitIntegerFor(GIV(statStackOverflow));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (59 << 2), valuePointer17);
+		longAtput((result + (BaseHeaderSize)) + (59 << 2), valuePointer18);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer18 = positive64BitIntegerFor(GIV(statStackPageDivorce));
+		valuePointer19 = positive64BitIntegerFor(GIV(statStackPageDivorce));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (60 << 2), valuePointer18);
+		longAtput((result + (BaseHeaderSize)) + (60 << 2), valuePointer19);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (61 << 2), GIV(nilObj));
@@ -49487,13 +49492,13 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (0x3F << 2), ConstZero);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer19 = GIV(trueObj);
+		valuePointer20 = GIV(trueObj);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (64 << 2), valuePointer19);
+		longAtput((result + (BaseHeaderSize)) + (64 << 2), valuePointer20);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer20 = (((stackPageByteSize()) << 1) | 1);
+		valuePointer21 = (((stackPageByteSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (65 << 2), valuePointer20);
+		longAtput((result + (BaseHeaderSize)) + (65 << 2), valuePointer21);
 		for (i = 66; i <= 68; i += 1) {
 
 			/* reserved for more Cog-related info */
@@ -49503,13 +49508,13 @@
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer21 = (((VM_PROXY_MAJOR) << 1) | 1);
+		valuePointer22 = (((VM_PROXY_MAJOR) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (69 << 2), valuePointer21);
+		longAtput((result + (BaseHeaderSize)) + (69 << 2), valuePointer22);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer22 = (((VM_PROXY_MINOR) << 1) | 1);
+		valuePointer23 = (((VM_PROXY_MINOR) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (70 << 2), valuePointer22);
+		longAtput((result + (BaseHeaderSize)) + (70 << 2), valuePointer23);
 		assert(paramsArraySize == 71);
 		/* begin pop:thenPush: */
 		longAtput((sp = GIV(stackPointer) + ((1 - 1) * BytesPerWord)), result);
@@ -49666,6 +49671,10 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (1)) {
+			result = ((GIV(totalFreeOldSpace) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (1)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());

Modified: branches/Cog/nsspurstacksrc/vm/interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/interp.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspurstacksrc/vm/interp.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
    from
-	StackInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	StackInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -2023,7 +2023,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.775";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreter_VMMaker.oscog-eem.776";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -49160,9 +49160,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)
@@ -49268,6 +49268,7 @@
     sqInt valuePointer21;
     sqInt valuePointer22;
     sqInt valuePointer23;
+    sqInt valuePointer24;
     sqInt valuePointer3;
     sqInt valuePointer4;
     sqInt valuePointer5;
@@ -49280,17 +49281,17 @@
 	if (GIV(argumentCount) == 0) {
 		result = instantiateClassindexableSize(longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassArray << 2)), paramsArraySize);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer = ((((GIV(freeStart) - (((eden()).start))) + (GIV(pastSpaceStart) - (((pastSpace()).start)))) << 1) | 1);
+		valuePointer1 = ((((GIV(freeStart) - (((eden()).start))) + (GIV(pastSpaceStart) - (((pastSpace()).start)))) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (0 << 2), valuePointer);
+		longAtput((result + (BaseHeaderSize)) + (0 << 2), valuePointer1);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer1 = positive64BitIntegerFor(totalBytesInSegments());
+		valuePointer2 = positive64BitIntegerFor(totalBytesInSegments());
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (1 << 2), valuePointer1);
+		longAtput((result + (BaseHeaderSize)) + (1 << 2), valuePointer2);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer2 = positive64BitIntegerFor((((GIV(eden).limit)) - (((((GIV(futureSpace).start)) < ((GIV(pastSpace).start))) ? ((GIV(futureSpace).start)) : ((GIV(pastSpace).start))))) + (totalBytesInSegments()));
+		valuePointer3 = positive64BitIntegerFor((((GIV(eden).limit)) - (((((GIV(futureSpace).start)) < ((GIV(pastSpace).start))) ? ((GIV(futureSpace).start)) : ((GIV(pastSpace).start))))) + (totalBytesInSegments()));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (2 << 2), valuePointer2);
+		longAtput((result + (BaseHeaderSize)) + (2 << 2), valuePointer3);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (3 << 2), GIV(nilObj));
@@ -49298,9 +49299,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (4 << 2), GIV(nilObj));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer3 = (((((sqInt)(((scavengerTenuringThreshold()) * (((GIV(pastSpace).limit)) - ((GIV(pastSpace).start)))) / (8 * 4)))) << 1) | 1);
+		valuePointer4 = (((((sqInt)(((scavengerTenuringThreshold()) * (((GIV(pastSpace).limit)) - ((GIV(pastSpace).start)))) / (8 * 4)))) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (5 << 2), valuePointer3);
+		longAtput((result + (BaseHeaderSize)) + (5 << 2), valuePointer4);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (6 << 2), ((GIV(statFullGCs) << 1) | 1));
@@ -49308,13 +49309,13 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (7 << 2), ((((GIV(statFullGCUsecs) + 500) / 1000) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer4 = (((GIV(statScavenges)) << 1) | 1);
+		valuePointer5 = (((GIV(statScavenges)) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (8 << 2), valuePointer4);
+		longAtput((result + (BaseHeaderSize)) + (8 << 2), valuePointer5);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer5 = (((((GIV(statScavengeGCUsecs)) + 500) / 1000) << 1) | 1);
+		valuePointer6 = (((((GIV(statScavengeGCUsecs)) + 500) / 1000) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (9 << 2), valuePointer5);
+		longAtput((result + (BaseHeaderSize)) + (9 << 2), valuePointer6);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (10 << 2), ((GIV(statTenures) << 1) | 1));
@@ -49324,9 +49325,9 @@
 			longAtput((result + (BaseHeaderSize)) + (i << 2), ConstZero);
 		}
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer6 = (((rememberedSetSize()) << 1) | 1);
+		valuePointer7 = (((rememberedSetSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (20 << 2), valuePointer6);
+		longAtput((result + (BaseHeaderSize)) + (20 << 2), valuePointer7);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (21 << 2), ((statRootTableOverflows << 1) | 1));
@@ -49340,9 +49341,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (24 << 2), ((GIV(growHeadroom) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer7 = (((ioHeartbeatMilliseconds()) << 1) | 1);
+		valuePointer8 = (((ioHeartbeatMilliseconds()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (25 << 2), valuePointer7);
+		longAtput((result + (BaseHeaderSize)) + (25 << 2), valuePointer8);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (26 << 2), ((GIV(statMarkCount) << 1) | 1));
@@ -49356,9 +49357,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (29 << 2), ((GIV(statCompactPassCount) << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer8 = ((GIV(statGrowMemory) << 1) | 1);
+		valuePointer9 = ((GIV(statGrowMemory) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (30 << 2), valuePointer8);
+		longAtput((result + (BaseHeaderSize)) + (30 << 2), valuePointer9);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (0x1F << 2), ((statShrinkMemory << 1) | 1));
@@ -49387,9 +49388,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (39 << 2), ((BytesPerWord << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer9 = (((imageFormatVersion()) << 1) | 1);
+		valuePointer10 = (((imageFormatVersion()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (40 << 2), valuePointer9);
+		longAtput((result + (BaseHeaderSize)) + (40 << 2), valuePointer10);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (41 << 2), ((GIV(numStackPages) << 1) | 1));
@@ -49397,9 +49398,9 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (42 << 2), ((desiredNumStackPages << 1) | 1));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer10 = (((((GIV(eden).limit)) - ((GIV(eden).start))) << 1) | 1);
+		valuePointer11 = (((((GIV(eden).limit)) - ((GIV(eden).start))) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (43 << 2), valuePointer10);
+		longAtput((result + (BaseHeaderSize)) + (43 << 2), valuePointer11);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (44 << 2), ((desiredEdenBytes << 1) | 1));
@@ -49410,29 +49411,33 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (46 << 2), GIV(nilObj));
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer11 = ((((GIV(preemptionYields)
+		valuePointer12 = ((((GIV(preemptionYields)
 	? 0
 	: 4)) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (47 << 2), valuePointer11);
+		longAtput((result + (BaseHeaderSize)) + (47 << 2), valuePointer12);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer12 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
+		valuePointer13 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer12);
-		for (i = 49; i <= 53; i += 1) {
+		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer13);
+		for (i = 49; i <= 52; i += 1) {
 			/* begin storePointerUnchecked:ofObject:withValue: */
 			assert(!(isForwarded(result)));
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
+		/* begin storePointerUnchecked:ofObject:withValue: */
+		valuePointer = ((GIV(totalFreeOldSpace) << 1) | 1);
+		assert(!(isForwarded(result)));
+		longAtput((result + (BaseHeaderSize)) + (53 << 2), valuePointer);
 		/* begin storePointer:ofObject:withValue: */
-		valuePointer23 = floatObjectOf(getHeapGrowthToSizeGCRatio());
+		valuePointer24 = floatObjectOf(getHeapGrowthToSizeGCRatio());
 		assert(!(isForwarded(result)));
 		if (isOldObject(result)) {
 
 			/* most stores into young objects */
 
-			if (((valuePointer23 & 3) == 0)
-			 && ((((usqInt) valuePointer23)) < (((usqInt) GIV(newSpaceLimit))))) {
+			if (((valuePointer24 & 3) == 0)
+			 && ((((usqInt) valuePointer24)) < (((usqInt) GIV(newSpaceLimit))))) {
 				/* begin possibleRootStoreInto: */
 				if (!(((((usqInt) (longAt(result))) >> 29) & 1) != 0)) {
 					remember(result);
@@ -49442,32 +49447,32 @@
 				}
 			}
 		}
-		longAtput((result + (BaseHeaderSize)) + (54 << 2), valuePointer23);
+		longAtput((result + (BaseHeaderSize)) + (54 << 2), valuePointer24);
 
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer13 = positive64BitIntegerFor(GIV(statProcessSwitch));
+		valuePointer14 = positive64BitIntegerFor(GIV(statProcessSwitch));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (55 << 2), valuePointer13);
+		longAtput((result + (BaseHeaderSize)) + (55 << 2), valuePointer14);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer14 = positive64BitIntegerFor(GIV(statIOProcessEvents));
+		valuePointer15 = positive64BitIntegerFor(GIV(statIOProcessEvents));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (56 << 2), valuePointer14);
+		longAtput((result + (BaseHeaderSize)) + (56 << 2), valuePointer15);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer15 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
+		valuePointer16 = positive64BitIntegerFor(GIV(statForceInterruptCheck));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (57 << 2), valuePointer15);
+		longAtput((result + (BaseHeaderSize)) + (57 << 2), valuePointer16);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer16 = positive64BitIntegerFor(GIV(statCheckForEvents));
+		valuePointer17 = positive64BitIntegerFor(GIV(statCheckForEvents));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (58 << 2), valuePointer16);
+		longAtput((result + (BaseHeaderSize)) + (58 << 2), valuePointer17);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer17 = positive64BitIntegerFor(GIV(statStackOverflow));
+		valuePointer18 = positive64BitIntegerFor(GIV(statStackOverflow));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (59 << 2), valuePointer17);
+		longAtput((result + (BaseHeaderSize)) + (59 << 2), valuePointer18);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer18 = positive64BitIntegerFor(GIV(statStackPageDivorce));
+		valuePointer19 = positive64BitIntegerFor(GIV(statStackPageDivorce));
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (60 << 2), valuePointer18);
+		longAtput((result + (BaseHeaderSize)) + (60 << 2), valuePointer19);
 		/* begin storePointerUnchecked:ofObject:withValue: */
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (61 << 2), GIV(nilObj));
@@ -49478,13 +49483,13 @@
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (0x3F << 2), ConstZero);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer19 = GIV(trueObj);
+		valuePointer20 = GIV(trueObj);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (64 << 2), valuePointer19);
+		longAtput((result + (BaseHeaderSize)) + (64 << 2), valuePointer20);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer20 = (((stackPageByteSize()) << 1) | 1);
+		valuePointer21 = (((stackPageByteSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (65 << 2), valuePointer20);
+		longAtput((result + (BaseHeaderSize)) + (65 << 2), valuePointer21);
 		for (i = 66; i <= 68; i += 1) {
 
 			/* reserved for more Cog-related info */
@@ -49494,13 +49499,13 @@
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer21 = (((VM_PROXY_MAJOR) << 1) | 1);
+		valuePointer22 = (((VM_PROXY_MAJOR) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (69 << 2), valuePointer21);
+		longAtput((result + (BaseHeaderSize)) + (69 << 2), valuePointer22);
 		/* begin storePointerUnchecked:ofObject:withValue: */
-		valuePointer22 = (((VM_PROXY_MINOR) << 1) | 1);
+		valuePointer23 = (((VM_PROXY_MINOR) << 1) | 1);
 		assert(!(isForwarded(result)));
-		longAtput((result + (BaseHeaderSize)) + (70 << 2), valuePointer22);
+		longAtput((result + (BaseHeaderSize)) + (70 << 2), valuePointer23);
 		assert(paramsArraySize == 71);
 		/* begin pop:thenPush: */
 		longAtput((sp = GIV(stackPointer) + ((1 - 1) * BytesPerWord)), result);
@@ -49657,6 +49662,10 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (1)) {
+			result = ((GIV(totalFreeOldSpace) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (1)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());

Modified: branches/Cog/nsspurstacksrc/vm/interp.h
===================================================================
--- branches/Cog/nsspurstacksrc/vm/interp.h	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspurstacksrc/vm/interp.h	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/nsspurstacksrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nsspurstacksrc/vm/vmCallback.h	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/nsspurstacksrc/vm/vmCallback.h	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
 
 #define VM_CALLBACK_INC 1


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Mon Jun 16 13:39:58 PDT 2014
   + Thu Jun 19 14:10:46 PDT 2014

Modified: branches/Cog/platforms/unix/vm/sqUnixMemory.c
===================================================================
--- branches/Cog/platforms/unix/vm/sqUnixMemory.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/platforms/unix/vm/sqUnixMemory.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -331,6 +331,36 @@
 #endif /* COGVM */
 
 #if SPURVM
+/* Answer if any of the memory in the range [address, address + bytes) is used
+ * so as to make sure the MAP_FIXED below doesn't damage any existing mappings.
+ *
+ * See http://stackoverflow.com/questions/14943990
+ *
+ * One must do this separately for each page, because for regions larger than a
+ * single page, ENOMEM means that the region was not fully mapped and it might
+ * still be partially mapped.
+ *
+ * It seems to me (eem 6/18/2014 16:00) that madvise could be called, which
+ * would be cheaper.  But it would have side-effects when applied to an
+ * existing mapping.
+ */
+static long
+address_space_used(char *address, long bytes)
+{
+	long offset = 0;
+	char pagestate;
+
+	while (offset < bytes) {
+		do {
+			if (mincore(address+offset, pageSize, &pagestate) >= 0)
+				return 1;
+		} while (errno == EAGAIN);
+		assert(errno == ENOMEM);
+		offset += pageSize;
+	}
+	return 0;
+}
+
 /* Allocate a region of memory of al least size bytes, at or above minAddress.
  *  If the attempt fails, answer null.  If the attempt succeeds, answer the
  * start of the region and assign its size through allocatedSizePointer.
@@ -339,31 +369,43 @@
 sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto(sqInt size, void *minAddress, sqInt *allocatedSizePointer)
 {
 	void *alloc;
-	long bytes = roundUpToPage(size);
+	char *address;
+	long bytes;
 
 	if (!pageSize) {
 		pageSize = getpagesize();
 		pageMask = pageSize - 1;
 	}
+	address = (char *)roundUpToPage((unsigned long)minAddress);
+	bytes = roundUpToPage(size);
 	*allocatedSizePointer = bytes;
-	while ((char *)minAddress + bytes > (char *)minAddress) {
+	while ((unsigned long)(address + bytes) > (unsigned long)address) {
 #if 0
-		alloc = mmap((void *)roundUpToPage((unsigned long)minAddress), bytes,
-					PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
+		alloc = mmap(address, bytes, PROT_READ | PROT_WRITE,
+					 MAP_ANON | MAP_PRIVATE, -1, 0);
 #else
-		alloc = mmap((void *)roundUpToPage((unsigned long)minAddress), bytes,
-					PROT_READ | PROT_WRITE, MAP_ANON | MAP_FIXED | MAP_PRIVATE, -1, 0);
+		/* This is a mess.  To be able to allocate lots of segments it appears
+		 * we have to use MAP_FIXED, but MAP_FIXED will blow away any existing
+		 * mappings, so we have to use mincore to scan the pages in the region
+		 * to check there is no existing mapping there.
+		 */
+		if (address_space_used(address, bytes)) {
+			address += bytes;
+			continue;
+		}
+		alloc = mmap(address, bytes, PROT_READ | PROT_WRITE,
+					 MAP_ANON | MAP_FIXED | MAP_PRIVATE, -1, 0);
 #endif
 		if (alloc == MAP_FAILED) {
 			mmapErrno = errno;
 			perror("sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto mmap");
 			return 0;
 		}
-		if (alloc >= minAddress)
+		if ((char *)alloc >= address)
 			return alloc;
 		if (munmap(alloc, bytes) != 0)
 			perror("sqAllocateMemorySegment... munmap");
-		minAddress = (void *)((char *)minAddress + bytes);
+		address += bytes;
 	}
 	return 0;
 }

Modified: branches/Cog/spursistasrc/vm/cointerp.c
===================================================================
--- branches/Cog/spursistasrc/vm/cointerp.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/spursistasrc/vm/cointerp.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
    from
-	CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1338,7 +1338,7 @@
 static void setSignalLowSpaceFlagAndSaveProcess(void);
 static void setTraceFlagOnContextsFramesPageIfNeeded(sqInt aContext) NoDbgRegParms;
 sqInt shiftForWord(void);
-static sqInt shortentoIndexableSize(sqInt objOop, sqInt indexableSize) NoDbgRegParms;
+static usqInt shortentoIndexableSize(sqInt objOop, sqInt indexableSize) NoDbgRegParms;
 static sqInt shortPrintContext(sqInt aContext) NoDbgRegParms;
 static sqInt shortPrintFrameAndCallers(char *theFP) NoDbgRegParms;
 EXPORT(void) shortPrintFramesInPage(StackPage *thePage);
@@ -2237,7 +2237,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.775]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.776]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -5429,6 +5429,7 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
+							null;
 							goto l148;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
@@ -5443,7 +5444,7 @@
 					/* begin fetchNextBytecode */
 					currentBytecode = byteAtPointer(++localIP);
 
-					/* return self */
+					null;
 				l148:	/* end baseFrameReturn */;
 					goto l145;
 				}
@@ -49583,9 +49584,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)
@@ -49853,11 +49854,14 @@
 		valuePointer13 = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		assert(!(isForwarded(result)));
 		longAtput((result + (BaseHeaderSize)) + (48 << 2), valuePointer13);
-		for (i = 49; i <= 53; i += 1) {
+		for (i = 49; i <= 52; i += 1) {
 			/* begin storePointerUnchecked:ofObject:withValue: */
 			assert(!(isForwarded(result)));
 			longAtput((result + (BaseHeaderSize)) + (i << 2), GIV(nilObj));
 		}
+		/* begin storePointerUnchecked:ofObject:withValue: */
+		assert(!(isForwarded(result)));
+		longAtput((result + (BaseHeaderSize)) + (53 << 2), ((GIV(totalFreeOldSpace) << 1) | 1));
 		/* begin storePointer:ofObject:withValue: */
 		valuePointer27 = floatObjectOf(getHeapGrowthToSizeGCRatio());
 		assert(!(isForwarded(result)));
@@ -50100,6 +50104,10 @@
 		if (arg == 49) {
 			result = (((ioGetMaxExtSemTableSize()) << 1) | 1);
 		}
+		if ((arg == 54)
+		 && (1)) {
+			result = ((GIV(totalFreeOldSpace) << 1) | 1);
+		}
 		if ((arg == 55)
 		 && (1)) {
 			result = floatObjectOf(getHeapGrowthToSizeGCRatio());
@@ -57863,7 +57871,7 @@
 	zero if no change
 	was possible. */
 
-static sqInt
+static usqInt
 shortentoIndexableSize(sqInt objOop, sqInt indexableSize)
 {
     usqInt bytesAfter;

Modified: branches/Cog/spursistasrc/vm/cointerp.h
===================================================================
--- branches/Cog/spursistasrc/vm/cointerp.h	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/spursistasrc/vm/cointerp.h	2014-06-19 21:12:57 UTC (rev 3007)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
 
 

Modified: branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/spursistasrc/vm/gcc3x-cointerp.c	2014-06-16 20:42:34 UTC (rev 3006)
+++ branches/Cog/spursistasrc/vm/gcc3x-cointerp.c	2014-06-19 21:12:57 UTC (rev 3007)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
    from
-	CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97
+	CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.775 uuid: dd27f525-f775-49fc-8bf0-2463d78bfb97 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.776 uuid: baaa78fd-2c0b-4cde-a247-4c45097f296e " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1341,7 +1341,7 @@
 static void setSignalLowSpaceFlagAndSaveProcess(void);
 static void setTraceFlagOnContextsFramesPageIfNeeded(sqInt aContext) NoDbgRegParms;
 sqInt shiftForWord(void);
-static sqInt shortentoIndexableSize(sqInt objOop, sqInt indexableSize) NoDbgRegParms;
+static usqInt shortentoIndexableSize(sqInt objOop, sqInt indexableSize) NoDbgRegParms;
 static sqInt shortPrintContext(sqInt aContext) NoDbgRegParms;

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list