[Vm-dev] [commit][2833] VMMaker.oscog-eem.563

commits at squeakvm.org commits at squeakvm.org
Mon Dec 16 23:52:15 UTC 2013


Revision: 2833
Author:   eliot
Date:     2013-12-16 15:52:11 -0800 (Mon, 16 Dec 2013)
Log Message:
-----------
VMMaker.oscog-eem.563
Author: eem
Time: 16 December 2013, 3:41:22.598 pm
UUID: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
Ancestors: VMMaker.oscog-eem.562

Avoid including the instructionPointer in the context when marrying the top
frame during divorceAllFrames for voidVMState..If:.  (how did this ever work??)

Fix bogus assert failure in checkIfValidObjectRef:pc:cogMethod: in Newspeak VM.

Fix Spur initial alloc on Mac OS.

Modified Paths:
--------------
    branches/Cog/nscogsrc/vm/cogit.c
    branches/Cog/nscogsrc/vm/cogit.h
    branches/Cog/nscogsrc/vm/cogmethod.h
    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/platforms/Mac OS/vm/sqMacMemory.c
    branches/Cog/platforms/Mac OS/vm/sqPlatformSpecific.h
    branches/Cog/spursrc/vm/cogit.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogmethod.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/cogit.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogmethod.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

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

Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/cogit.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGenerator VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	StackToRegisterMappingCogit VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -3029,28 +3029,33 @@
 	if ((annotation == IsSendCall)
 			 || (annotation == IsNSSendCall)) {
 		entryPoint = callTargetFromReturnAddress(backEnd, ((sqInt)mcpc));
-		/* begin offsetAndSendTableFor:annotation:into: */
-		if ((entryPoint & entryPointMask) == checkedEntryAlignment) {
-			assert(annotation == IsSendCall);
-			offset = cmEntryOffset;
-			sendTable = sendTrampolines;
-
+		if (entryPoint <= methodZoneBase) {
+			offset = entryPoint;
 		}
 		else {
-			if ((entryPoint & entryPointMask) == dynSuperEntryAlignment) {
-				assert(annotation == IsNSSendCall);
-				offset = cmDynSuperEntryOffset;
-				sendTable = dynamicSuperSendTrampolines;
+			/* begin offsetAndSendTableFor:annotation:into: */
+			if ((entryPoint & entryPointMask) == checkedEntryAlignment) {
+				assert(annotation == IsSendCall);
+				offset = cmEntryOffset;
+				sendTable = sendTrampolines;
 
 			}
 			else {
-				assert(annotation == IsSendCall);
-				offset = cmNoCheckEntryOffset;
-				sendTable = superSendTrampolines;
+				if ((entryPoint & entryPointMask) == dynSuperEntryAlignment) {
+					assert(annotation == IsNSSendCall);
+					offset = cmDynSuperEntryOffset;
+					sendTable = dynamicSuperSendTrampolines;
 
+				}
+				else {
+					assert(annotation == IsSendCall);
+					offset = cmNoCheckEntryOffset;
+					sendTable = superSendTrampolines;
+
+				}
 			}
+
 		}
-
 		selectorOrCacheTag = inlineCacheTagAt(backEnd, ((sqInt)mcpc));
 		if ((entryPoint > methodZoneBase)
 		 && ((offset != cmNoCheckEntryOffset)

Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/cogit.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGenerator VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 

Modified: branches/Cog/nscogsrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogmethod.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/cogmethod.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGenerator VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 typedef struct {

Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
    from
-	CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1143,7 +1143,7 @@
 static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void));
 static sqInt roomToPushNArgs(sqInt n);
 static void runLeakCheckerForFullGC(sqInt fullGCFlag);
-static sqInt safeObjectAfter(sqInt oop);
+static usqInt safeObjectAfter(sqInt oop);
 static sqInt safePrintStringOf(sqInt oop);
 usqInt scavengeThresholdAddress(void);
 EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
@@ -1320,18 +1320,19 @@
 _iss sqInt statCheckForEvents;
 _iss sqInt statGrowMemory;
 _iss sqInt statMarkCount;
-_iss sqInt cogCodeSize;
 _iss sqInt lastCoggableInterpretedBlockMethod;
 _iss sqInt lastUncoggableInterpretedBlockMethod;
 _iss sqInt lowSpaceThreshold;
 _iss sqInt rootTableOverflowed;
 _iss usqLong statGCEndUsecs;
 _iss sqInt statSweepCount;
+_iss sqInt cogCodeSize;
 _iss usqInt compEnd;
 _iss sqInt flagInterpretedMethods;
 _iss sqInt metaclassNumSlots;
 _iss sqInt pendingFinalizationSignals;
 _iss sqInt statIOProcessEvents;
+_iss sqInt edenBytes;
 _iss usqInt fwdTableLast;
 _iss usqLong gcStartUsecs;
 _iss sqInt lastBackwardJumpMethod;
@@ -1342,7 +1343,6 @@
 _iss sqInt statMkFwdCount;
 _iss sqInt tenuringThreshold;
 _iss sqInt thisClassIndex;
-_iss sqInt edenBytes;
 _iss sqInt externalPrimitiveTableFirstFreeIndex;
 _iss sqInt forceTenureFlag;
 _iss sqInt fullScreenFlag;
@@ -2030,7 +2030,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.561";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.563";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -5666,6 +5666,7 @@
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr + BaseHeaderSize) + (byte3 << ShiftForWord)));
 					}
+					null;
 					goto l4;
 				}
 				if (opType == 3) {
@@ -5675,6 +5676,7 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + BaseHeaderSize) + ((byte3 + LiteralStart) << ShiftForWord));
 					longAtPointerput((localSP -= BytesPerOop), object);
+					null;
 					goto l4;
 				}
 				if (opType == 4) {
@@ -5688,6 +5690,7 @@
 					object2 = longAt((oop + BaseHeaderSize) + (ValueIndex << ShiftForWord));
 					longAtPointerput((localSP -= BytesPerOop), object2);
 
+					null;
 					goto l4;
 				}
 				top = longAtPointer(localSP);
@@ -18742,7 +18745,7 @@
 		activeContext = longAt(GIV(framePointer) + FoxThisContext);
 		goto l1;
 	}
-	activeContext = marryFrameSP(GIV(framePointer), GIV(stackPointer));
+	activeContext = marryFrameSP(GIV(framePointer), GIV(stackPointer) + BytesPerWord);
 l1:	/* end ensureFrameIsMarried:SP: */;
 	for (i = 0; i < GIV(numStackPages); i += 1) {
 		/* begin stackPageAt: */
@@ -22168,9 +22171,8 @@
     sqInt assoc;
     sqInt classObj;
     CogMethod *cogMethod;
-    sqInt fieldIndex;
     sqInt header;
-    sqInt offset;
+    sqInt litCount;
 
 	
 }
@@ -23724,17 +23726,15 @@
     sqInt header1;
     sqInt header2;
     sqInt header3;
-    sqInt header4;
     usqInt lastWord;
     sqInt newFreeChunk;
     sqInt newOop;
-    sqInt next;
+    usqInt next;
     sqInt oop;
     sqInt realHeader;
     sqInt sz;
     sqInt sz1;
     sqInt sz2;
-    sqInt sz3;
     sqInt target;
     usqInt w;
 
@@ -23745,21 +23745,7 @@
 		/* begin objectAfterWhileForwarding: */
 		header2 = longAt(oop);
 		if ((header2 & MarkBit) == 0) {
-			/* 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]);
+			next = ((sqInt) (objectAfter(oop)));
 			goto l1;
 		}
 		fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1;
@@ -23774,7 +23760,7 @@
 		else {
 			sz1 = realHeader & SizeMask;
 		}
-		next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]);
+		next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask])));
 	l1:	/* end objectAfterWhileForwarding: */;
 		if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
 
@@ -23828,18 +23814,18 @@
 	}
 	/* begin safeObjectAfter: */
 	if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) {
-		sz3 = (longAt(newFreeChunk)) & AllButTypeMask;
+		sz2 = (longAt(newFreeChunk)) & AllButTypeMask;
 	}
 	else {
 		/* begin sizeBitsOf: */
-		header4 = longAt(newFreeChunk);
-		sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass
+		header3 = longAt(newFreeChunk);
+		sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass
 			? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask
-			: header4 & SizeMask);
+			: header3 & SizeMask);
 	}
-	next = ((newFreeChunk + sz3) >= GIV(freeStart)
+	next = ((newFreeChunk + sz2) >= GIV(freeStart)
 		? GIV(freeStart)
-		: (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask]));
+		: (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask]));
 	assert((next == GIV(freeStart))
 	 || (next == (oopFromChunk(GIV(compEnd)))));
 	if (next == GIV(freeStart)) {
@@ -49148,10 +49134,8 @@
 	minimumMemory = ((GIV(cogCodeSize) + dataSize) + GIV(edenBytes)) + (interpreterAllocationReserveBytes());
 
 	/* no need to include the stackZone; this is alloca'ed */
-	/* + edenBytes */
-	/* don't include edenBytes; this is part of the heap and so part of desiredHeapSize */
 
-	heapSize = (GIV(cogCodeSize) + desiredHeapSize) + (interpreterAllocationReserveBytes());
+	heapSize = ((GIV(cogCodeSize) + desiredHeapSize) + GIV(edenBytes)) + (interpreterAllocationReserveBytes());
 	if (heapSize < minimumMemory) {
 		insufficientMemorySpecifiedError();
 	}
@@ -49163,7 +49147,7 @@
 	}
 	/* begin setHeapBase:memoryLimit:endOfMemory: */
 	baseOfHeap = (memory()) + GIV(cogCodeSize);
-	memLimit = ((memory()) + GIV(cogCodeSize)) + heapSize;
+	memLimit = (memory()) + heapSize;
 	memEnd = ((memory()) + GIV(cogCodeSize)) + dataSize;
 	/* begin setMemoryLimit: */
 	assert((memLimit & (BytesPerWord - 1)) == 0);
@@ -50049,7 +50033,7 @@
 	given object or free chunk in memory. Return freeStart when
 	enumeration is complete. This is for assertion checking only. */
 
-static sqInt
+static usqInt
 safeObjectAfter(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt header;

Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/cointerp.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
    from
-	CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1146,7 +1146,7 @@
 static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void));
 static sqInt roomToPushNArgs(sqInt n);
 static void runLeakCheckerForFullGC(sqInt fullGCFlag);
-static sqInt safeObjectAfter(sqInt oop);
+static usqInt safeObjectAfter(sqInt oop);
 static sqInt safePrintStringOf(sqInt oop);
 usqInt scavengeThresholdAddress(void);
 EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
@@ -1323,18 +1323,19 @@
 _iss sqInt statCheckForEvents;
 _iss sqInt statGrowMemory;
 _iss sqInt statMarkCount;
-_iss sqInt cogCodeSize;
 _iss sqInt lastCoggableInterpretedBlockMethod;
 _iss sqInt lastUncoggableInterpretedBlockMethod;
 _iss sqInt lowSpaceThreshold;
 _iss sqInt rootTableOverflowed;
 _iss usqLong statGCEndUsecs;
 _iss sqInt statSweepCount;
+_iss sqInt cogCodeSize;
 _iss usqInt compEnd;
 _iss sqInt flagInterpretedMethods;
 _iss sqInt metaclassNumSlots;
 _iss sqInt pendingFinalizationSignals;
 _iss sqInt statIOProcessEvents;
+_iss sqInt edenBytes;
 _iss usqInt fwdTableLast;
 _iss usqLong gcStartUsecs;
 _iss sqInt lastBackwardJumpMethod;
@@ -1345,7 +1346,6 @@
 _iss sqInt statMkFwdCount;
 _iss sqInt tenuringThreshold;
 _iss sqInt thisClassIndex;
-_iss sqInt edenBytes;
 _iss sqInt externalPrimitiveTableFirstFreeIndex;
 _iss sqInt forceTenureFlag;
 _iss sqInt fullScreenFlag;
@@ -2033,7 +2033,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.561";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.563";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -5675,6 +5675,7 @@
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr + BaseHeaderSize) + (byte3 << ShiftForWord)));
 					}
+					null;
 					goto l4;
 				}
 				if (opType == 3) {
@@ -5684,6 +5685,7 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + BaseHeaderSize) + ((byte3 + LiteralStart) << ShiftForWord));
 					longAtPointerput((localSP -= BytesPerOop), object);
+					null;
 					goto l4;
 				}
 				if (opType == 4) {
@@ -5697,6 +5699,7 @@
 					object2 = longAt((oop + BaseHeaderSize) + (ValueIndex << ShiftForWord));
 					longAtPointerput((localSP -= BytesPerOop), object2);
 
+					null;
 					goto l4;
 				}
 				top = longAtPointer(localSP);
@@ -18751,7 +18754,7 @@
 		activeContext = longAt(GIV(framePointer) + FoxThisContext);
 		goto l1;
 	}
-	activeContext = marryFrameSP(GIV(framePointer), GIV(stackPointer));
+	activeContext = marryFrameSP(GIV(framePointer), GIV(stackPointer) + BytesPerWord);
 l1:	/* end ensureFrameIsMarried:SP: */;
 	for (i = 0; i < GIV(numStackPages); i += 1) {
 		/* begin stackPageAt: */
@@ -22177,9 +22180,8 @@
     sqInt assoc;
     sqInt classObj;
     CogMethod *cogMethod;
-    sqInt fieldIndex;
     sqInt header;
-    sqInt offset;
+    sqInt litCount;
 
 	
 }
@@ -23733,17 +23735,15 @@
     sqInt header1;
     sqInt header2;
     sqInt header3;
-    sqInt header4;
     usqInt lastWord;
     sqInt newFreeChunk;
     sqInt newOop;
-    sqInt next;
+    usqInt next;
     sqInt oop;
     sqInt realHeader;
     sqInt sz;
     sqInt sz1;
     sqInt sz2;
-    sqInt sz3;
     sqInt target;
     usqInt w;
 
@@ -23754,21 +23754,7 @@
 		/* begin objectAfterWhileForwarding: */
 		header2 = longAt(oop);
 		if ((header2 & MarkBit) == 0) {
-			/* 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]);
+			next = ((sqInt) (objectAfter(oop)));
 			goto l1;
 		}
 		fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1;
@@ -23783,7 +23769,7 @@
 		else {
 			sz1 = realHeader & SizeMask;
 		}
-		next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]);
+		next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask])));
 	l1:	/* end objectAfterWhileForwarding: */;
 		if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
 
@@ -23837,18 +23823,18 @@
 	}
 	/* begin safeObjectAfter: */
 	if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) {
-		sz3 = (longAt(newFreeChunk)) & AllButTypeMask;
+		sz2 = (longAt(newFreeChunk)) & AllButTypeMask;
 	}
 	else {
 		/* begin sizeBitsOf: */
-		header4 = longAt(newFreeChunk);
-		sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass
+		header3 = longAt(newFreeChunk);
+		sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass
 			? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask
-			: header4 & SizeMask);
+			: header3 & SizeMask);
 	}
-	next = ((newFreeChunk + sz3) >= GIV(freeStart)
+	next = ((newFreeChunk + sz2) >= GIV(freeStart)
 		? GIV(freeStart)
-		: (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask]));
+		: (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask]));
 	assert((next == GIV(freeStart))
 	 || (next == (oopFromChunk(GIV(compEnd)))));
 	if (next == GIV(freeStart)) {
@@ -49157,10 +49143,8 @@
 	minimumMemory = ((GIV(cogCodeSize) + dataSize) + GIV(edenBytes)) + (interpreterAllocationReserveBytes());
 
 	/* no need to include the stackZone; this is alloca'ed */
-	/* + edenBytes */
-	/* don't include edenBytes; this is part of the heap and so part of desiredHeapSize */
 
-	heapSize = (GIV(cogCodeSize) + desiredHeapSize) + (interpreterAllocationReserveBytes());
+	heapSize = ((GIV(cogCodeSize) + desiredHeapSize) + GIV(edenBytes)) + (interpreterAllocationReserveBytes());
 	if (heapSize < minimumMemory) {
 		insufficientMemorySpecifiedError();
 	}
@@ -49172,7 +49156,7 @@
 	}
 	/* begin setHeapBase:memoryLimit:endOfMemory: */
 	baseOfHeap = (memory()) + GIV(cogCodeSize);
-	memLimit = ((memory()) + GIV(cogCodeSize)) + heapSize;
+	memLimit = (memory()) + heapSize;
 	memEnd = ((memory()) + GIV(cogCodeSize)) + dataSize;
 	/* begin setMemoryLimit: */
 	assert((memLimit & (BytesPerWord - 1)) == 0);
@@ -50058,7 +50042,7 @@
 	given object or free chunk in memory. Return freeStart when
 	enumeration is complete. This is for assertion checking only. */
 
-static sqInt
+static usqInt
 safeObjectAfter(sqInt oop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt header;

Modified: branches/Cog/nscogsrc/vm/interp.h
===================================================================
--- branches/Cog/nscogsrc/vm/interp.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/interp.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/nscogsrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nscogsrc/vm/vmCallback.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/nscogsrc/vm/vmCallback.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 #define VM_CALLBACK_INC 1


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Thu Dec 12 14:52:39 PST 2013
   + Mon Dec 16 15:49:50 PST 2013

Modified: branches/Cog/platforms/Mac OS/vm/sqMacMemory.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacMemory.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/platforms/Mac OS/vm/sqMacMemory.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -35,10 +35,14 @@
 static int	    pageSize = 0;
 static unsigned int pageMask = 0;
 
-usqInt	sqGetAvailableMemory() {
+#define roundDownToPage(v) ((v)&pageMask)
+#define roundUpToPage(v) (((v)+pageSize-1)&pageMask)
 
+usqInt
+sqGetAvailableMemory()
+{
 	/******
-	  Note: 	    
+	  Note:  (Except Spur)
 	    For os-x this doesn't matter we just mmap 512MB for the image, and 
 	    the application allocates more out of the 4GB address for VM logic. 
 	******/
@@ -46,52 +50,76 @@
 	return gMaxHeapSize >= 0xFFFFFFFFULL ? 0xFFFFFFFF : gMaxHeapSize;
 }
 
-usqInt sqAllocateMemoryMac(sqInt minHeapSize, sqInt desiredHeapSize) {
+usqInt
+sqAllocateMemoryMac(sqInt desiredHeapSize, sqInt minHeapSize)
+{
     void * debug, *actually;
-	#pragma unused(minHeapSize,desiredHeapSize)
-     
+#if SPURVM
 	pageSize= getpagesize();
 	pageMask= ~(pageSize - 1);
+
+    gHeapSize = roundUpToPage(desiredHeapSize);
+    debug = mmap(NULL, gHeapSize,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);
+#else
+# pragma unused(minHeapSize,desiredHeapSize)
+
+	pageSize= getpagesize();
+	pageMask= ~(pageSize - 1);
     gHeapSize = gMaxHeapSize;
     debug = mmap( NULL, gMaxHeapSize+pageSize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED,-1,0);
-    //debug = mmap( /*2147483648U-512*1024*1024*/
-	//			3221225472U, gMaxHeapSize+pageSize , PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED,-1,0);
-	
-    if(debug == MAP_FAILED)
+#endif /* SPURVM */
+
+    if (debug == MAP_FAILED)
         return 0;
 	mmapWasAt = debug;
 	actually = debug+pageSize-1;
 	actually = (void*) (((usqInt) actually) & pageMask);
-	
+
 	return memoryAllocationBase = (usqInt) actually;
 }
 
-sqInt sqGrowMemoryBy(sqInt memoryLimit, sqInt delta) {
+#if !SPURVM
+sqInt
+sqGrowMemoryBy(sqInt memoryLimit, sqInt delta)
+{
     if ((usqInt) memoryLimit + (usqInt) delta - memoryAllocationBase > gMaxHeapSize)
         return memoryLimit;
-   
+
     gHeapSize += delta;
     return memoryLimit + delta;
 }
 
-sqInt sqShrinkMemoryBy(sqInt memoryLimit, sqInt delta) {
+sqInt
+sqShrinkMemoryBy(sqInt memoryLimit, sqInt delta)
+{
     return sqGrowMemoryBy(memoryLimit,0-delta);
 }
 
-sqInt sqMemoryExtraBytesLeft(int flag) {
+sqInt
+sqMemoryExtraBytesLeft(int flag)
+{
     return flag ? gMaxHeapSize - gHeapSize : 0;
 }
+#endif /* ! SPURVM */
 
-void sqMacMemoryFree() {
+void
+sqMacMemoryFree()
+{
 	if (!memoryAllocationBase) 
 		return;
+#if SPURVM
+	/* N.B. This is a hack for an unsupported configuration (NSPlugin(*/
+	/* If we really need to free memry we need to unmap all segments. */
+	/* But right now this is called only on exit and so is unnecessary. */
+	if (munmap((void *)memoryAllocationBase,gHeapSize))
+		perror("munmap");
+#else
 	if (munmap((void *)memoryAllocationBase,gMaxHeapSize+pageSize))
 		perror("munmap");
+#endif
 	memoryAllocationBase = 0;
 }
 
-#define roundDownToPage(v) ((v)&pageMask)
-#define roundUpToPage(v) (((v)+pageSize-1)&pageMask)
 #if COGVM
 void
 sqMakeMemoryExecutableFromTo(unsigned long startAddr, unsigned long endAddr)

Modified: branches/Cog/platforms/Mac OS/vm/sqPlatformSpecific.h
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqPlatformSpecific.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/platforms/Mac OS/vm/sqPlatformSpecific.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -74,10 +74,10 @@
 
 #define allocateMemoryMinimumImageFileHeaderSize(heapSize, minimumMemory, fileStream, headerSize) \
 	sqAllocateMemoryMac(heapSize, minimumMemory)
-usqInt	    sqAllocateMemoryMac(sqInt minHeapSize, sqInt desiredHeapSize);
+usqInt sqAllocateMemoryMac(sqInt desiredHeapSize, sqInt minHeapSize);
 
 
-#define sqAllocateMemory(x,y) sqAllocateMemoryMac(x,&y);
+#define sqAllocateMemory(x,y) sqAllocateMemoryMac(&y,x)
 
 /* override reserveExtraCHeapBytes() macro to reduce Squeak object heap size on Mac */
 #undef reserveExtraCHeapBytes

Modified: branches/Cog/spursrc/vm/cogit.c
===================================================================
--- branches/Cog/spursrc/vm/cogit.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/cogit.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.554 uuid: a666e7e4-245e-4e8a-9536-3aefd4509f47
+	CCodeGenerator VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.554 uuid: a666e7e4-245e-4e8a-9536-3aefd4509f47
+	StackToRegisterMappingCogit VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.554 uuid: a666e7e4-245e-4e8a-9536-3aefd4509f47 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -847,6 +847,7 @@
 static AbstractInstruction * longJumpTargetAddress(AbstractInstruction * self_in_longJumpTargetAddress);
 static AbstractInstruction * gMoveAwR(sqInt address, sqInt reg);
 static AbstractInstruction * gMoveCwR(sqInt wordConstant, sqInt reg);
+static AbstractInstruction * gMoveMwrR(sqInt offset, sqInt baseReg, sqInt destReg);
 static AbstractInstruction * gMoveRMwr(sqInt sourceReg, sqInt offset, sqInt baseReg);
 static AbstractInstruction * gMoveRR(sqInt reg1, sqInt reg2);
 static AbstractInstruction * gMulRR(sqInt reg1, sqInt reg2);
@@ -2614,18 +2615,23 @@
 	}
 	if (annotation == IsSendCall) {
 		entryPoint = callTargetFromReturnAddress(backEnd, ((sqInt)mcpc));
-		/* begin offsetAndSendTableFor:annotation:into: */
-		if ((entryPoint & entryPointMask) == checkedEntryAlignment) {
-			offset = cmEntryOffset;
-			sendTable = sendTrampolines;
-
+		if (entryPoint <= methodZoneBase) {
+			offset = entryPoint;
 		}
 		else {
-			offset = cmNoCheckEntryOffset;
-			sendTable = superSendTrampolines;
+			/* begin offsetAndSendTableFor:annotation:into: */
+			if ((entryPoint & entryPointMask) == checkedEntryAlignment) {
+				offset = cmEntryOffset;
+				sendTable = sendTrampolines;
 
+			}
+			else {
+				offset = cmNoCheckEntryOffset;
+				sendTable = superSendTrampolines;
+
+			}
+
 		}
-
 		selectorOrCacheTag = inlineCacheTagAt(backEnd, ((sqInt)mcpc));
 		if ((entryPoint > methodZoneBase)
 		 && ((offset != cmNoCheckEntryOffset)
@@ -14189,11 +14195,11 @@
 genPushRegisterArgsForNumArgs(sqInt numArgs)
 {
 	if (numArgs <= (numRegArgs())) {
+		assert((numRegArgs()) <= 2);
 		/* begin MoveMw:r:R: */
 		genoperandoperandoperand(MoveMwrR, 0, SPReg, TempReg);
 		/* begin MoveR:Mw:r: */
 		genoperandoperandoperand(MoveRMwr, ReceiverResultReg, 0, SPReg);
-		assert((numRegArgs()) <= 2);
 		if (numArgs > 0) {
 			/* begin PushR: */
 			genoperand(PushR, Arg0Reg);
@@ -14204,6 +14210,7 @@
 		}
 		/* begin PushR: */
 		genoperand(PushR, TempReg);
+
 	}
 }
 
@@ -15626,6 +15633,18 @@
 	1 & 3 collapsed to 1 for SmallIntegers, and 2 collapsed to 0 for
 	Characters), or
 	the receiver's classIndex. Generate something like this:
+	Lentry:
+	movl rSource, rDest
+	andl $0x3, rDest
+	jz LnotImm
+	andl $1, rDest
+	j Lcmp
+	LnotImm:
+	movl 0(%edx), rDest
+	andl $0x3fffff, rDest
+	Lcmp:
+	At least on a 2.2GHz Intel Core i7 it is slightly faster,
+	136m sends/sec vs 130m sends/sec for nfib in tinyBenchmarks, than
 	Limm:
 	andl $0x1, rDest
 	j Lcmp
@@ -15635,44 +15654,35 @@
 	jnz Limm
 	movl 0(%edx), rDest
 	andl $0x3fffff, rDest
-	Lcmp
+	Lcmp:
 	 */
 
 static AbstractInstruction *
 getInlineCacheClassTagFrominto(sqInt sourceReg, sqInt destReg)
 {
     AbstractInstruction *entryLabel;
-    AbstractInstruction *immLabel;
     AbstractInstruction *jumpCompare;
+    AbstractInstruction *jumpNotImm;
     sqInt quickConstant;
-    sqInt quickConstant1;
 
 	/* begin AlignmentNops: */
-	genoperand(AlignmentNops, BytesPerWord);
+	genoperand(AlignmentNops, ((BytesPerWord < 8) ? 8 : BytesPerWord));
 	/* begin Label */
-	immLabel = genoperandoperand(Label, (labelCounter += 1), bytecodePC);
-	/* begin AndCq:R: */
-	genoperandoperand(AndCqR, 1, destReg);
-	/* begin Jump: */
-	jumpCompare = genoperand(Jump, ((sqInt)0));
-	/* begin AlignmentNops: */
-	genoperand(AlignmentNops, BytesPerWord);
-	/* begin Label */
 	entryLabel = genoperandoperand(Label, (labelCounter += 1), bytecodePC);
 	/* begin MoveR:R: */
 	genoperandoperand(MoveRR, sourceReg, destReg);
 	/* begin AndCq:R: */
 	quickConstant = tagMask();
 	genoperandoperand(AndCqR, quickConstant, destReg);
-	/* begin JumpNonZero: */
-	genoperand(JumpNonZero, ((sqInt)immLabel));
+	/* begin JumpZero: */
+	jumpNotImm = genoperand(JumpZero, ((sqInt)0));
+	/* begin AndCq:R: */
+	genoperandoperand(AndCqR, 1, destReg);
+	/* begin Jump: */
+	jumpCompare = genoperand(Jump, ((sqInt)0));
 	flag("endianness");
-	/* begin MoveMw:r:R: */
-	genoperandoperandoperand(MoveMwrR, 0, sourceReg, destReg);
-	/* begin AndCq:R: */
-	quickConstant1 = classIndexMask();
-	genoperandoperand(AndCqR, quickConstant1, destReg);
-	jmpTarget(jumpCompare, gLabel());
+	jmpTarget(jumpNotImm, gMoveMwrR(0, sourceReg, destReg));
+	jmpTarget(jumpCompare, gAndCqR(classIndexMask(), destReg));
 	return entryLabel;
 }
 
@@ -16669,6 +16679,12 @@
 }
 
 static AbstractInstruction *
+gMoveMwrR(sqInt offset, sqInt baseReg, sqInt destReg)
+{
+	return genoperandoperandoperand(MoveMwrR, offset, baseReg, destReg);
+}
+
+static AbstractInstruction *
 gMoveRMwr(sqInt sourceReg, sqInt offset, sqInt baseReg)
 {
 	return genoperandoperandoperand(MoveRMwr, sourceReg, offset, baseReg);

Modified: branches/Cog/spursrc/vm/cogit.h
===================================================================
--- branches/Cog/spursrc/vm/cogit.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/cogit.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.554 uuid: a666e7e4-245e-4e8a-9536-3aefd4509f47
+	CCodeGenerator VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 

Modified: branches/Cog/spursrc/vm/cogmethod.h
===================================================================
--- branches/Cog/spursrc/vm/cogmethod.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/cogmethod.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.554 uuid: a666e7e4-245e-4e8a-9536-3aefd4509f47
+	CCodeGenerator VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 typedef struct {

Modified: branches/Cog/spursrc/vm/cointerp.c
===================================================================
--- branches/Cog/spursrc/vm/cointerp.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/cointerp.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
    from
-	CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1457,13 +1457,13 @@
 _iss usqLong longRunningPrimitiveStopUsecs;
 _iss sqInt numSegInfos;
 _iss sqInt statCheckForEvents;
-_iss sqInt cogCodeSize;
 _iss sqInt gcMode;
 _iss sqInt lastCoggableInterpretedBlockMethod;
 _iss sqInt lastUncoggableInterpretedBlockMethod;
 _iss usqInt lowSpaceThreshold;
 _iss usqLong statGCEndUsecs;
 _iss sqInt classTableIndex;
+_iss sqInt cogCodeSize;
 _iss sqInt flagInterpretedMethods;
 _iss usqInt freeOldSpaceStart;
 _iss sqInt metaclassNumSlots;
@@ -2162,7 +2162,7 @@
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
 usqInt heapBase;
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.561]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.563]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -6363,6 +6363,7 @@
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr1 + (BaseHeaderSize)) + (byte3 << 2)));
 					}
+					null;
 					goto l4;
 				}
 				if (opType == 3) {
@@ -6372,6 +6373,7 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + (BaseHeaderSize)) + ((byte3 + LiteralStart) << 2));
 					longAtPointerput((localSP -= BytesPerOop), object);
+					null;
 					goto l4;
 				}
 				if (opType == 4) {
@@ -6399,6 +6401,7 @@
 					/* begin internalPush: */
 					longAtPointerput((localSP -= BytesPerOop), longAt((litVar1 + (BaseHeaderSize)) + (ValueIndex << 2)));
 
+					null;
 					goto l4;
 				}
 				top = longAtPointer(localSP);
@@ -17879,7 +17882,7 @@
 		assert(pageListIsWellFormed());
 	}
 	/* begin ensureFrameIsMarried:SP: */
-	theSP = GIV(stackPointer);
+	theSP = GIV(stackPointer) + BytesPerWord;
 	if (((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) < (startOfMemory())
 		? ((longAt(GIV(framePointer) + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
 		: (byteAt((GIV(framePointer) + FoxIFrameFlags) + 2)) != 0)) {
@@ -22404,11 +22407,17 @@
     sqInt fmt;
 
 	fmt = (((usqInt) (longAt(objOop))) >> 24) & 0x1F;
-	if (fmt <= 5) {
+	if (fmt <= 4) {
+		if (fmt == 2) {
 
-		/* pointer; may need to delve into the class format word */
+			/* array starts at 0. */
 
-		if (((fmt >= 3) && (fmt <= 4))) {
+			return pointerForOop(objOop + (BaseHeaderSize));
+		}
+		if (fmt >= 3) {
+
+			/* indexable with inst vars; need to delve into the class format word */
+
 			/* begin formatOfClass: */
 			/* begin fetchClassOfNonImm: */
 			classIndex = (longAt(objOop)) & 0x3FFFFF;
@@ -22430,10 +22439,13 @@
 			classFormat = ((longAt((classPointer + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1);
 			return pointerForOop((objOop + (BaseHeaderSize)) + ((classFormat & ((1 << 16) - 1)) << (wordSize())));
 		}
-		return pointerForOop((objOop + (BaseHeaderSize)) + ((numSlotsOf(objOop)) << (wordSize())));
+		return 0;
 	}
-	assert(fmt < (firstCompiledMethodFormat()));
-	return pointerForOop(objOop + (BaseHeaderSize));
+	if ((fmt >= 9)
+	 && (fmt < 24)) {
+		return pointerForOop(objOop + (BaseHeaderSize));
+	}
+	return 0;
 }
 
 sqInt
@@ -23084,16 +23096,30 @@
     sqInt assoc;
     sqInt classObj;
     CogMethod *cogMethod;
-    sqInt fieldIndex;
     sqInt header;
-    sqInt offset;
+    sqInt litCount;
     sqInt referent;
     sqInt referent1;
 
 	/* begin actuallyFollowNecessaryForwardingInMethod: */
-	/* begin literal:ofMethod: */
-	offset = (literalCountOfHeader(headerOf(methodObj))) - 1;
-	assoc = longAt((methodObj + (BaseHeaderSize)) + ((offset + LiteralStart) << 2));
+	header = longAt((methodObj + (BaseHeaderSize)) + (HeaderIndex << 2));
+	if (isCogMethodReference(header)) {
+
+		/* If the method class is not used we can avoid the forwarding
+		   check for both the cogMehod and the bytecoded method. */
+
+		cogMethod = ((CogMethod *) header);
+		if (!((cogMethod->cmUsesMethodClass))) {
+			goto l1;
+		}
+		followForwardedLiteralsIn(cogMethod);
+		header = (cogMethod->methodHeader);
+	}
+
+	/* Slang super expansion limitation */
+
+	litCount = (((usqInt) header) >> 10) & 0xFF;
+	assoc = longAt((methodObj + (BaseHeaderSize)) + (((litCount - 1) + LiteralStart) << 2));
 	if (((longAt(assoc)) & 0x3FFFFF) == 8) {
 		/* begin followForwarded: */
 		assert(isForwarded(assoc));
@@ -23103,9 +23129,7 @@
 			referent = longAt((referent + (BaseHeaderSize)) + (0 << 2));
 		}
 		assoc = referent;
-		/* begin setMethodClassAssociationOf:to: */
 		/* begin storePointer:ofObject:withValue: */
-		fieldIndex = ((literalCountOfHeader(headerOf(methodObj))) + LiteralStart) - 1;
 		assert(!(isForwarded(methodObj)));
 		if (isOldObject(methodObj)) {
 
@@ -23122,44 +23146,40 @@
 				}
 			}
 		}
-		longAtput((methodObj + (BaseHeaderSize)) + (fieldIndex << 2), assoc);
+		longAtput((methodObj + (BaseHeaderSize)) + (((litCount + LiteralStart) - 1) << 2), assoc);
 	}
-	classObj = longAt((assoc + (BaseHeaderSize)) + (ValueIndex << 2));
-	if (((longAt(classObj)) & 0x3FFFFF) == 8) {
-		/* begin followForwarded: */
-		assert(isForwarded(assoc));
-		referent1 = longAt((assoc + (BaseHeaderSize)) + (0 << 2));
-		while (((referent1 & 3) == 0)
-		 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
-			referent1 = longAt((referent1 + (BaseHeaderSize)) + (0 << 2));
-		}
-		classObj = referent1;
-		/* begin storePointer:ofObject:withValue: */
-		assert(!(isForwarded(assoc)));
-		if (isOldObject(assoc)) {
+	if ((numSlotsOf(assoc)) >= (ValueIndex + 1)) {
+		classObj = longAt((assoc + (BaseHeaderSize)) + (ValueIndex << 2));
+		if (((longAt(classObj)) & 0x3FFFFF) == 8) {
+			/* begin followForwarded: */
+			assert(isForwarded(assoc));
+			referent1 = longAt((assoc + (BaseHeaderSize)) + (0 << 2));
+			while (((referent1 & 3) == 0)
+			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
+				referent1 = longAt((referent1 + (BaseHeaderSize)) + (0 << 2));
+			}
+			classObj = referent1;
+			/* begin storePointer:ofObject:withValue: */
+			assert(!(isForwarded(assoc)));
+			if (isOldObject(assoc)) {
 
-			/* most stores into young objects */
+				/* most stores into young objects */
 
-			if (((classObj & 3) == 0)
-			 && ((((usqInt) classObj)) < (((usqInt) GIV(newSpaceLimit))))) {
-				/* begin possibleRootStoreInto: */
-				if (!(((((usqInt) (longAt(assoc))) >> 29) & 1) != 0)) {
-					remember(assoc);
-					/* begin setIsRememberedOf:to: */
-					flag("endianness");
-					longAtput(assoc, (longAt(assoc)) | (1 << 29));
+				if (((classObj & 3) == 0)
+				 && ((((usqInt) classObj)) < (((usqInt) GIV(newSpaceLimit))))) {
+					/* begin possibleRootStoreInto: */
+					if (!(((((usqInt) (longAt(assoc))) >> 29) & 1) != 0)) {
+						remember(assoc);
+						/* begin setIsRememberedOf:to: */
+						flag("endianness");
+						longAtput(assoc, (longAt(assoc)) | (1 << 29));
+					}
 				}
 			}
+			longAtput((assoc + (BaseHeaderSize)) + (ValueIndex << 2), classObj);
 		}
-		longAtput((assoc + (BaseHeaderSize)) + (ValueIndex << 2), classObj);
 	}
-	header = longAt((methodObj + (BaseHeaderSize)) + (HeaderIndex << 2));
-	if (isCogMethodReference(header)) {
-		cogMethod = ((CogMethod *) header);
-		if ((cogMethod->cmUsesMethodClass)) {
-			followForwardedLiteralsIn(cogMethod);
-		}
-	}
+l1:	/* end actuallyFollowNecessaryForwardingInMethod: */;
 
 }
 
@@ -52270,10 +52290,8 @@
 	minimumMemory = ((GIV(cogCodeSize) + dataSize) + edenBytes) + (interpreterAllocationReserveBytes());
 
 	/* no need to include the stackZone; this is alloca'ed */
-	/* + edenBytes */
-	/* don't include edenBytes; this is part of the heap and so part of desiredHeapSize */
 
-	heapSize = (GIV(cogCodeSize) + desiredHeapSize) + (interpreterAllocationReserveBytes());
+	heapSize = ((GIV(cogCodeSize) + desiredHeapSize) + edenBytes) + (interpreterAllocationReserveBytes());
 	if (heapSize < minimumMemory) {
 		insufficientMemorySpecifiedError();
 	}
@@ -52285,7 +52303,7 @@
 	}
 	/* begin setHeapBase:memoryLimit:endOfMemory: */
 	baseOfHeap = (memory()) + GIV(cogCodeSize);
-	memLimit = ((memory()) + GIV(cogCodeSize)) + heapSize;
+	memLimit = (memory()) + heapSize;
 	memEnd = ((memory()) + GIV(cogCodeSize)) + dataSize;
 	GIV(newSpaceStart) = baseOfHeap;
 	GIV(newSpaceLimit) = (baseOfHeap + edenBytes) + (interpreterAllocationReserveBytes());

Modified: branches/Cog/spursrc/vm/cointerp.h
===================================================================
--- branches/Cog/spursrc/vm/cointerp.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/cointerp.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 

Modified: branches/Cog/spursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/spursrc/vm/gcc3x-cointerp.c	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/gcc3x-cointerp.c	2013-12-16 23:52:11 UTC (rev 2833)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
    from
-	CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1460,13 +1460,13 @@
 _iss usqLong longRunningPrimitiveStopUsecs;
 _iss sqInt numSegInfos;
 _iss sqInt statCheckForEvents;
-_iss sqInt cogCodeSize;
 _iss sqInt gcMode;
 _iss sqInt lastCoggableInterpretedBlockMethod;
 _iss sqInt lastUncoggableInterpretedBlockMethod;
 _iss usqInt lowSpaceThreshold;
 _iss usqLong statGCEndUsecs;
 _iss sqInt classTableIndex;
+_iss sqInt cogCodeSize;
 _iss sqInt flagInterpretedMethods;
 _iss usqInt freeOldSpaceStart;
 _iss sqInt metaclassNumSlots;
@@ -2165,7 +2165,7 @@
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
 usqInt heapBase;
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.561]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.563]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -6372,6 +6372,7 @@
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr1 + (BaseHeaderSize)) + (byte3 << 2)));
 					}
+					null;
 					goto l4;
 				}
 				if (opType == 3) {
@@ -6381,6 +6382,7 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + (BaseHeaderSize)) + ((byte3 + LiteralStart) << 2));
 					longAtPointerput((localSP -= BytesPerOop), object);
+					null;
 					goto l4;
 				}
 				if (opType == 4) {
@@ -6408,6 +6410,7 @@
 					/* begin internalPush: */
 					longAtPointerput((localSP -= BytesPerOop), longAt((litVar1 + (BaseHeaderSize)) + (ValueIndex << 2)));
 
+					null;
 					goto l4;
 				}
 				top = longAtPointer(localSP);
@@ -17888,7 +17891,7 @@
 		assert(pageListIsWellFormed());
 	}
 	/* begin ensureFrameIsMarried:SP: */
-	theSP = GIV(stackPointer);
+	theSP = GIV(stackPointer) + BytesPerWord;
 	if (((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) < (startOfMemory())
 		? ((longAt(GIV(framePointer) + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
 		: (byteAt((GIV(framePointer) + FoxIFrameFlags) + 2)) != 0)) {
@@ -22413,11 +22416,17 @@
     sqInt fmt;
 
 	fmt = (((usqInt) (longAt(objOop))) >> 24) & 0x1F;
-	if (fmt <= 5) {
+	if (fmt <= 4) {
+		if (fmt == 2) {
 
-		/* pointer; may need to delve into the class format word */
+			/* array starts at 0. */
 
-		if (((fmt >= 3) && (fmt <= 4))) {
+			return pointerForOop(objOop + (BaseHeaderSize));
+		}
+		if (fmt >= 3) {
+
+			/* indexable with inst vars; need to delve into the class format word */
+
 			/* begin formatOfClass: */
 			/* begin fetchClassOfNonImm: */
 			classIndex = (longAt(objOop)) & 0x3FFFFF;
@@ -22439,10 +22448,13 @@
 			classFormat = ((longAt((classPointer + (BaseHeaderSize)) + (InstanceSpecificationIndex << 2))) >> 1);
 			return pointerForOop((objOop + (BaseHeaderSize)) + ((classFormat & ((1 << 16) - 1)) << (wordSize())));
 		}
-		return pointerForOop((objOop + (BaseHeaderSize)) + ((numSlotsOf(objOop)) << (wordSize())));
+		return 0;
 	}
-	assert(fmt < (firstCompiledMethodFormat()));
-	return pointerForOop(objOop + (BaseHeaderSize));
+	if ((fmt >= 9)
+	 && (fmt < 24)) {
+		return pointerForOop(objOop + (BaseHeaderSize));
+	}
+	return 0;
 }
 
 sqInt
@@ -23093,16 +23105,30 @@
     sqInt assoc;
     sqInt classObj;
     CogMethod *cogMethod;
-    sqInt fieldIndex;
     sqInt header;
-    sqInt offset;
+    sqInt litCount;
     sqInt referent;
     sqInt referent1;
 
 	/* begin actuallyFollowNecessaryForwardingInMethod: */
-	/* begin literal:ofMethod: */
-	offset = (literalCountOfHeader(headerOf(methodObj))) - 1;
-	assoc = longAt((methodObj + (BaseHeaderSize)) + ((offset + LiteralStart) << 2));
+	header = longAt((methodObj + (BaseHeaderSize)) + (HeaderIndex << 2));
+	if (isCogMethodReference(header)) {
+
+		/* If the method class is not used we can avoid the forwarding
+		   check for both the cogMehod and the bytecoded method. */
+
+		cogMethod = ((CogMethod *) header);
+		if (!((cogMethod->cmUsesMethodClass))) {
+			goto l1;
+		}
+		followForwardedLiteralsIn(cogMethod);
+		header = (cogMethod->methodHeader);
+	}
+
+	/* Slang super expansion limitation */
+
+	litCount = (((usqInt) header) >> 10) & 0xFF;
+	assoc = longAt((methodObj + (BaseHeaderSize)) + (((litCount - 1) + LiteralStart) << 2));
 	if (((longAt(assoc)) & 0x3FFFFF) == 8) {
 		/* begin followForwarded: */
 		assert(isForwarded(assoc));
@@ -23112,9 +23138,7 @@
 			referent = longAt((referent + (BaseHeaderSize)) + (0 << 2));
 		}
 		assoc = referent;
-		/* begin setMethodClassAssociationOf:to: */
 		/* begin storePointer:ofObject:withValue: */
-		fieldIndex = ((literalCountOfHeader(headerOf(methodObj))) + LiteralStart) - 1;
 		assert(!(isForwarded(methodObj)));
 		if (isOldObject(methodObj)) {
 
@@ -23131,44 +23155,40 @@
 				}
 			}
 		}
-		longAtput((methodObj + (BaseHeaderSize)) + (fieldIndex << 2), assoc);
+		longAtput((methodObj + (BaseHeaderSize)) + (((litCount + LiteralStart) - 1) << 2), assoc);
 	}
-	classObj = longAt((assoc + (BaseHeaderSize)) + (ValueIndex << 2));
-	if (((longAt(classObj)) & 0x3FFFFF) == 8) {
-		/* begin followForwarded: */
-		assert(isForwarded(assoc));
-		referent1 = longAt((assoc + (BaseHeaderSize)) + (0 << 2));
-		while (((referent1 & 3) == 0)
-		 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
-			referent1 = longAt((referent1 + (BaseHeaderSize)) + (0 << 2));
-		}
-		classObj = referent1;
-		/* begin storePointer:ofObject:withValue: */
-		assert(!(isForwarded(assoc)));
-		if (isOldObject(assoc)) {
+	if ((numSlotsOf(assoc)) >= (ValueIndex + 1)) {
+		classObj = longAt((assoc + (BaseHeaderSize)) + (ValueIndex << 2));
+		if (((longAt(classObj)) & 0x3FFFFF) == 8) {
+			/* begin followForwarded: */
+			assert(isForwarded(assoc));
+			referent1 = longAt((assoc + (BaseHeaderSize)) + (0 << 2));
+			while (((referent1 & 3) == 0)
+			 && (((longAt(referent1)) & 0x3FFFFF) == 8)) {
+				referent1 = longAt((referent1 + (BaseHeaderSize)) + (0 << 2));
+			}
+			classObj = referent1;
+			/* begin storePointer:ofObject:withValue: */
+			assert(!(isForwarded(assoc)));
+			if (isOldObject(assoc)) {
 
-			/* most stores into young objects */
+				/* most stores into young objects */
 
-			if (((classObj & 3) == 0)
-			 && ((((usqInt) classObj)) < (((usqInt) GIV(newSpaceLimit))))) {
-				/* begin possibleRootStoreInto: */
-				if (!(((((usqInt) (longAt(assoc))) >> 29) & 1) != 0)) {
-					remember(assoc);
-					/* begin setIsRememberedOf:to: */
-					flag("endianness");
-					longAtput(assoc, (longAt(assoc)) | (1 << 29));
+				if (((classObj & 3) == 0)
+				 && ((((usqInt) classObj)) < (((usqInt) GIV(newSpaceLimit))))) {
+					/* begin possibleRootStoreInto: */
+					if (!(((((usqInt) (longAt(assoc))) >> 29) & 1) != 0)) {
+						remember(assoc);
+						/* begin setIsRememberedOf:to: */
+						flag("endianness");
+						longAtput(assoc, (longAt(assoc)) | (1 << 29));
+					}
 				}
 			}
+			longAtput((assoc + (BaseHeaderSize)) + (ValueIndex << 2), classObj);
 		}
-		longAtput((assoc + (BaseHeaderSize)) + (ValueIndex << 2), classObj);
 	}
-	header = longAt((methodObj + (BaseHeaderSize)) + (HeaderIndex << 2));
-	if (isCogMethodReference(header)) {
-		cogMethod = ((CogMethod *) header);
-		if ((cogMethod->cmUsesMethodClass)) {
-			followForwardedLiteralsIn(cogMethod);
-		}
-	}
+l1:	/* end actuallyFollowNecessaryForwardingInMethod: */;
 
 }
 
@@ -52279,10 +52299,8 @@
 	minimumMemory = ((GIV(cogCodeSize) + dataSize) + edenBytes) + (interpreterAllocationReserveBytes());
 
 	/* no need to include the stackZone; this is alloca'ed */
-	/* + edenBytes */
-	/* don't include edenBytes; this is part of the heap and so part of desiredHeapSize */
 
-	heapSize = (GIV(cogCodeSize) + desiredHeapSize) + (interpreterAllocationReserveBytes());
+	heapSize = ((GIV(cogCodeSize) + desiredHeapSize) + edenBytes) + (interpreterAllocationReserveBytes());
 	if (heapSize < minimumMemory) {
 		insufficientMemorySpecifiedError();
 	}
@@ -52294,7 +52312,7 @@
 	}
 	/* begin setHeapBase:memoryLimit:endOfMemory: */
 	baseOfHeap = (memory()) + GIV(cogCodeSize);
-	memLimit = ((memory()) + GIV(cogCodeSize)) + heapSize;
+	memLimit = (memory()) + heapSize;
 	memEnd = ((memory()) + GIV(cogCodeSize)) + dataSize;
 	GIV(newSpaceStart) = baseOfHeap;
 	GIV(newSpaceLimit) = (baseOfHeap + edenBytes) + (interpreterAllocationReserveBytes());

Modified: branches/Cog/spursrc/vm/interp.h
===================================================================
--- branches/Cog/spursrc/vm/interp.h	2013-12-12 22:53:13 UTC (rev 2832)
+++ branches/Cog/spursrc/vm/interp.h	2013-12-16 23:52:11 UTC (rev 2833)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.561 uuid: 13467880-93b9-4137-9bbc-7ebfd22436ab
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.563 uuid: 3116fc1b-f9a5-45f5-bc7e-4b5c68ec8247
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/spursrc/vm/vmCallback.h
===================================================================
--- branches/Cog/spursrc/vm/vmCallback.h	2013-12-12 22:53:13 UTC (rev 2832)

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list