[Vm-dev] [commit][3117] CogVM source as per VMMaker.oscog-eem.914

commits at squeakvm.org commits at squeakvm.org
Wed Oct 29 23:59:09 UTC 2014


Revision: 3117
Author:   eliot
Date:     2014-10-29 16:58:59 -0700 (Wed, 29 Oct 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.914

Spur:
Implement safe access to contexts and methods when creating image segments
(since internally married contexts and jitted methods have hidden state encoded
in odd ways).

As a result:
Fix baaad bug in SpurMemoryManager>>lastPointerOf: for contexts, caused by
transcription from (New)ObjectMemory where the method works on a wing and a
prayer because BaseHeaderSize = BytesPerOop.  And I can't be arsed to fix it.

Refactor decoding of context instruction pointers so
there is only one copy of the code.

Fix baaad bug in accessibleObjectAfter: and add an assert to primitiveNextObject
to catch similar bugs.  Can now enumerate objects in new space, which will
sort-of work, but code should really use allObjects.  Will fix at the image
level as time allows.

Eliminate isInSurvivorSpace: in favour of the identical isInPastSpace:.

All:
Fix the comments in loadImageSegmentFrom:outPointers:; the array is not
truncated to zero length; it retains its version info.

Fix storeShort16:ofObject:withValue: to accept negative values.

Modified Paths:
--------------
    branches/Cog/image/uploadspurimage.sh
    branches/Cog/nscogsrc/vm/cointerp.c
    branches/Cog/nscogsrc/vm/cointerp.h
    branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/sistasrc/vm/cointerp.c
    branches/Cog/sistasrc/vm/cointerp.h
    branches/Cog/sistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/plugins/ADPCMCodecPlugin/ADPCMCodecPlugin.c
    branches/Cog/src/plugins/SoundGenerationPlugin/SoundGenerationPlugin.c
    branches/Cog/src/vm/cointerp.c
    branches/Cog/src/vm/cointerp.h
    branches/Cog/src/vm/cointerpmt.c
    branches/Cog/src/vm/cointerpmt.h
    branches/Cog/src/vm/gcc3x-cointerp.c
    branches/Cog/src/vm/gcc3x-cointerpmt.c
    branches/Cog/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c

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

Modified: branches/Cog/image/uploadspurimage.sh
===================================================================
--- branches/Cog/image/uploadspurimage.sh	2014-10-27 18:59:12 UTC (rev 3116)
+++ branches/Cog/image/uploadspurimage.sh	2014-10-29 23:58:59 UTC (rev 3117)
@@ -6,8 +6,10 @@
 "
 DATE=`date +%Y-%m-%d`
 BASENAME=trunk46-spur
-cd `dirname $0`
 
+test "$1" = -here || cd `dirname $0`
+echo uploading trunk46-spur from `pwd`
+
 DIR=$RemoteRoot/$DATE
 echo ssh -x $RemoteUser mkdir $DIR
 ssh -x $RemoteUser mkdir $DIR
@@ -19,4 +21,4 @@
 ssh $RemoteUser rm $RemoteRoot/{$BASENAME.image,$BASENAME.changes}
 echo ssh $RemoteUser cd $RemoteRoot \\\; ln -s $DATE/{$BASENAME.image,$BASENAME.changes} .
 ssh $RemoteUser cd $RemoteRoot \; ln -s $DATE/{$BASENAME.image,$BASENAME.changes} .
-ssh $RemoteUser ls -l $RemoteRoot
+ssh $RemoteUser ls -l $RemoteRoot $RemoteRoot/$DATE

Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2014-10-27 18:59:12 UTC (rev 3116)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2014-10-29 23:58:59 UTC (rev 3117)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.913 uuid: 236b8f3e-0ff4-4a68-baf9-e3fc62b97da7
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
    from
-	CoInterpreter VMMaker.oscog-eem.913 uuid: 236b8f3e-0ff4-4a68-baf9-e3fc62b97da7
+	CoInterpreter VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.913 uuid: 236b8f3e-0ff4-4a68-baf9-e3fc62b97da7 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -465,6 +465,7 @@
 void ifValidWriteBackStackPointersSaveTo(void *theCFP, void *theCSP, char **savedFPP, char **savedSPP);
 sqInt implicitReceiverFormixinimplementing(sqInt rcvr, sqInt mixin, sqInt selector);
 usqInt instructionPointerAddress(void);
+static sqInt instructionPointerForFramecurrentFPcurrentIP(sqInt spouseFP, sqInt currentFP, sqInt instrPtr) NoDbgRegParms;
 usqInt interpretAddress(void);
 static sqInt interpreterAllocationReserveBytes(void);
 static sqInt interpretMethodFromMachineCode(void);
@@ -1066,6 +1067,7 @@
 void * fetchArrayofObject(sqInt fieldIndex, sqInt objectPointer);
 double fetchFloatofObject(sqInt fieldIndex, sqInt objectPointer);
 sqInt fetchIntegerofObject(sqInt fieldIndex, sqInt objectPointer);
+static sqInt fetchPointerofMarriedContext(sqInt offset, sqInt aContext) NoDbgRegParms;
 static sqInt fetchStackPointerOf(sqInt aContext) NoDbgRegParms;
 static sqInt findApplicationOfTargetMixinstartingAtBehavior(sqInt targetMixin, sqInt aBehavior) NoDbgRegParms;
 static sqInt findApplicationOfTargetMixinstartingAtNonMetaClass(sqInt targetMixin, sqInt aClass) NoDbgRegParms;
@@ -1326,8 +1328,8 @@
 _iss StackPage * stackPage;
 _iss sqInt bytecodeSetSelector;
 _iss usqInt freeStart;
-_iss usqInt instructionPointer;
 _iss sqInt argumentCount;
+_iss usqInt instructionPointer;
 _iss sqInt nilObj;
 _iss usqInt newMethod;
 _iss sqInt messageSelector;
@@ -2085,7 +2087,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.913";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.914";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -4384,7 +4386,7 @@
 						? ((longAt(localFP + FoxMethod)) & MFMethodFlagIsBlockFlag) != 0
 						: (byteAt((localFP + FoxIFrameFlags) + 3)) != 0))) {
 					goto commonCallerReturn;
-					goto l298;
+					goto l296;
 				}
 				closure = longAt(localFP + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(localFP + FoxMethod)))) < (startOfMemory())
 	? ((mframeCogMethod(localFP))->cmNumArgs)
@@ -4421,11 +4423,11 @@
 					theMethod = longAt((home + BaseHeaderSize) + (MethodIndex << ShiftForWord));
 					if ((primitiveIndexOfMethodheader(theMethod, methodHeaderOf(theMethod))) == 198) {
 						unwindContextOrNilOrZero = home;
-						goto l300;
+						goto l298;
 					}
 				}
 				unwindContextOrNilOrZero = ctxtOrNilOrZero;
-			l300:	/* end internalFindUnwindThroughContext: */;
+			l298:	/* end internalFindUnwindThroughContext: */;
 				if (unwindContextOrNilOrZero == GIV(nilObj)) {
 
 					/* error: can't find home on chain; cannot return */
@@ -4439,10 +4441,10 @@
 						: (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
 						assert(isContext(frameContext(localFP)));
 						ourContext = longAt(localFP + FoxThisContext);
-						goto l302;
+						goto l300;
 					}
 					ourContext = marryFrameSP(localFP, localSP);
-				l302:	/* end ensureFrameIsMarried:SP: */;
+				l300:	/* end ensureFrameIsMarried:SP: */;
 					/* begin internalPush: */
 					longAtPointerput((localSP -= BytesPerOop), ourContext);
 					/* begin internalPush: */
@@ -4451,7 +4453,7 @@
 					GIV(argumentCount) = 1;
 					goto normalSend;
 					/* return self */
-					goto l298;
+					goto l296;
 				}
 				if (unwindContextOrNilOrZero != 0) {
 					/* begin internalAboutToReturn:through: */
@@ -4463,10 +4465,10 @@
 						: (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
 						assert(isContext(frameContext(localFP)));
 						ourContext1 = longAt(localFP + FoxThisContext);
-						goto l299;
+						goto l297;
 					}
 					ourContext1 = marryFrameSP(localFP, localSP);
-				l299:	/* end ensureFrameIsMarried:SP: */;
+				l297:	/* end ensureFrameIsMarried:SP: */;
 					/* begin internalPush: */
 					longAtPointerput((localSP -= BytesPerOop), ourContext1);
 					/* begin internalPush: */
@@ -4477,7 +4479,7 @@
 					GIV(argumentCount) = 2;
 					goto normalSend;
 					/* return self */
-					goto l298;
+					goto l296;
 				}
 				contextToReturnTo = null;
 				if (((longAt((home + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {
@@ -4536,10 +4538,10 @@
 							: (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
 							assert(isContext(frameContext(localFP)));
 							ourContext2 = longAt(localFP + FoxThisContext);
-							goto l301;
+							goto l299;
 						}
 						ourContext2 = marryFrameSP(localFP, localSP);
-					l301:	/* end ensureFrameIsMarried:SP: */;
+					l299:	/* end ensureFrameIsMarried:SP: */;
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), ourContext2);
 						/* begin internalPush: */
@@ -4548,7 +4550,7 @@
 						GIV(argumentCount) = 1;
 						goto normalSend;
 						/* return self */
-						goto l298;
+						goto l296;
 					}
 				}
 				assert(pageListIsWellFormed());
@@ -4659,7 +4661,7 @@
 						GIV(framePointer) = localFP;
 						
 						ceEnterCogCodePopReceiverReg();
-						goto l298;
+						goto l296;
 					}
 					localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
 				}
@@ -4677,7 +4679,7 @@
 
 				/* return self */
 			}
-		l298:	/* end case */;
+		l296:	/* end case */;
 			break;
 		case 121:
 			/* returnTrue */
@@ -4797,27 +4799,27 @@
 							fp = (thePage->headFP);
 							if (fp == theFP) {
 								frameAbove = 0;
-								goto l305;
+								goto l303;
 							}
 							while (((callerFP = frameCallerFP(fp))) != 0) {
 								if (callerFP == theFP) {
 									frameAbove = fp;
-									goto l305;
+									goto l303;
 								}
 								fp = callerFP;
 							}
 							error("did not find theFP in stack page");
 							frameAbove = 0;
-						l305:	/* end findFrameAbove:inPage: */;
+						l303:	/* end findFrameAbove:inPage: */;
 							/* begin newStackPage */
 							lruOrFree = ((mostRecentlyUsedPage())->nextPage);
 							if (isFree(lruOrFree)) {
 								newPage = lruOrFree;
-								goto l306;
+								goto l304;
 							}
 							divorceFramesIn(lruOrFree);
 							newPage = lruOrFree;
-						l306:	/* end newStackPage */;
+						l304:	/* end newStackPage */;
 							assert(newPage == GIV(stackPage));
 							moveFramesInthroughtoPage(thePage, frameAbove, newPage);
 							markStackPageMostRecentlyUsed(newPage);
@@ -4841,7 +4843,7 @@
 							longAtput((sp2 = GIV(stackPointer) - BytesPerWord), GIV(instructionPointer));
 							GIV(stackPointer) = sp2;
 							ceSendAborttonumArgs(longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorCannotReturn << ShiftForWord)), contextToReturnFrom, 1);
-							goto l304;
+							goto l302;
 						}
 						GIV(instructionPointer) = 0;
 						thePage = makeBaseFrameFor(contextToReturnTo);
@@ -4880,7 +4882,7 @@
 							GIV(framePointer) = localFP;
 							
 							ceEnterCogCodePopReceiverReg();
-							goto l304;
+							goto l302;
 						}
 						localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
 					}
@@ -4898,8 +4900,8 @@
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
 					/* return self */
-				l304:	/* end baseFrameReturn */;
-					goto l303;
+				l302:	/* end baseFrameReturn */;
+					goto l301;
 				}
 				/* begin frameCallerSavedIP: */
 				localIP = pointerForOop(longAt(localFP + FoxCallerSavedIP));
@@ -4928,7 +4930,7 @@
 						GIV(framePointer) = localFP;
 						
 						ceEnterCogCodePopReceiverReg();
-						goto l303;
+						goto l301;
 					}
 					localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
 				}
@@ -4945,7 +4947,7 @@
 
 				longAtPointerput(localSP, localReturnValue);
 			}
-		l303:	/* end case */;
+		l301:	/* end case */;
 			break;
 		case 126:
 			/* dynamicSuperSendBytecode */
@@ -5237,7 +5239,7 @@
 						GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod];
 						primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction]));
 						ok = 1;
-						goto l310;
+						goto l308;
 					}
 
 					/* second probe */
@@ -5248,7 +5250,7 @@
 						GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod];
 						primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction]));
 						ok = 1;
-						goto l310;
+						goto l308;
 					}
 					probe = (((usqInt) hash) >> 2) & MethodCacheMask;
 					if (((GIV(methodCache)[probe + MethodCacheSelector]) == GIV(messageSelector))
@@ -5256,10 +5258,10 @@
 						GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod];
 						primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction]));
 						ok = 1;
-						goto l310;
+						goto l308;
 					}
 					ok = 0;
-				l310:	/* end inlineLookupInMethodCacheSel:classTag: */;
+				l308:	/* end inlineLookupInMethodCacheSel:classTag: */;
 					if (ok) {
 						/* begin ifAppropriateCompileToNativeCode:selector: */
 						methodHeader2 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex << ShiftForWord));
@@ -5297,7 +5299,7 @@
 						localFP = pointerForOop(GIV(framePointer));
 						addNewMethodToCache(GIV(lkupClass));
 					}
-				l307:	/* end internalFindNewMethod */;
+				l305:	/* end internalFindNewMethod */;
 					/* begin internalExecuteNewMethod */
 					VM_LABEL(0internalExecuteNewMethod);
 					if (primitiveFunctionPointer != 0) {
@@ -5311,31 +5313,31 @@
 							if (localPrimIndex >= 264) {
 								longAtPointerput(localSP, longAt(((longAtPointer(localSP)) + BaseHeaderSize) + ((localPrimIndex - 264) << ShiftForWord)));
 								1;
-								goto l311;
+								goto l309;
 							}
 							if (localPrimIndex == 256) {
 								1;
-								goto l311;
+								goto l309;
 							}
 							if (localPrimIndex == 257) {
 								longAtPointerput(localSP, GIV(trueObj));
 								1;
-								goto l311;
+								goto l309;
 							}
 							if (localPrimIndex == 258) {
 								longAtPointerput(localSP, GIV(falseObj));
 								1;
-								goto l311;
+								goto l309;
 							}
 							if (localPrimIndex == 259) {
 								longAtPointerput(localSP, GIV(nilObj));
 								1;
-								goto l311;
+								goto l309;
 							}
 							longAtPointerput(localSP, (((localPrimIndex - 261) << 1) | 1));
 							1;
-						l311:	/* end internalQuickPrimitiveResponse */;
-							goto l309;
+						l309:	/* end internalQuickPrimitiveResponse */;
+							goto l307;
 						}
 						/* begin externalizeIPandSP */
 						assert((((usqInt)localIP)) != (ceReturnToInterpreterPC()));
@@ -5394,7 +5396,7 @@
 							returntoExecutive(popStack(), 1);
 							browserPluginReturnIfNeeded();
 							null;
-							goto l309;
+							goto l307;
 						}
 					}
 					if (methodHasCogMethod(GIV(newMethod))) {
@@ -5475,11 +5477,11 @@
 										table = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (PrimErrTableIndex << ShiftForWord));
 										if (GIV(primFailCode) <= ((lastPointerOf(table)) / BytesPerWord)) {
 											errorCode = longAt((table + BaseHeaderSize) + ((GIV(primFailCode) - 1) << ShiftForWord));
-											goto l308;
+											goto l306;
 										}
 									}
 									errorCode = ((GIV(primFailCode) << 1) | 1);
-								l308:	/* end getErrorObjectFromPrimFailCode */;
+								l306:	/* end getErrorObjectFromPrimFailCode */;
 									longAtPointerput(localSP, errorCode);
 								}
 								GIV(primFailCode) = 0;
@@ -5503,7 +5505,7 @@
 							localFP = pointerForOop(GIV(framePointer));
 						}
 					}
-				l309:	/* end internalExecuteNewMethod */;
+				l307:	/* end internalExecuteNewMethod */;
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
@@ -5517,11 +5519,8 @@
 				sqInt byte3;
 				sqInt callerContextOrNil;
 				char *callerFP;
-				char *callerFP1;
-				char *fp;
 				sqInt index;
 				sqInt index1;
-				sqInt index2;
 				sqInt litVar;
 				sqInt litVar1;
 				sqInt object;
@@ -5533,16 +5532,12 @@
 				sqInt rcvr;
 				sqInt rcvr1;
 				sqInt result;
-				sqInt result1;
 				sqInt senderOop;
 				sqInt senderOop1;
 				char *spouseFP;
 				char *theFP;
-				char *theFPAbove;
-				sqInt theIP;
 				StackPage *thePage;
 				StackPage *thePage1;
-				StackPage *thePage2;
 				char *theSP;
 				sqInt top;
 				sqInt value;
@@ -5557,7 +5552,7 @@
 					GIV(messageSelector) = longAt((GIV(method) + BaseHeaderSize) + ((byte3 + LiteralStart) << ShiftForWord));
 					GIV(argumentCount) = byte2 & 0x1F;
 					goto normalSend;
-					goto l5;
+					goto l4;
 				}
 				if (opType == 1) {
 					/* begin literal: */
@@ -5565,7 +5560,7 @@
 					GIV(messageSelector) = longAt((GIV(method) + BaseHeaderSize) + ((byte3 + LiteralStart) << ShiftForWord));
 					GIV(argumentCount) = byte2 & 0x1F;
 					goto superclassSend;
-					goto l5;
+					goto l4;
 				}
 				/* begin fetchNextBytecode */
 				currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -5612,11 +5607,11 @@
 								value = result;
 							}
 							object1 = value;
-							goto l8;
+							goto l6;
 						}
 						if (isWidowedContext(rcvr)) {
 							object1 = longAt((rcvr + BaseHeaderSize) + (byte3 << ShiftForWord));
-							goto l8;
+							goto l6;
 						}
 						/* begin frameOfMarriedContext: */
 						senderOop = longAt((rcvr + BaseHeaderSize) + (SenderIndex << ShiftForWord));
@@ -5626,8 +5621,8 @@
 						if (byte3 == SenderIndex) {
 							/* begin ensureCallerContext: */
 							/* begin frameCallerFP: */
-							callerFP1 = pointerForOop(longAt(spouseFP + FoxSavedFP));
-							if (callerFP1 == 0) {
+							callerFP = pointerForOop(longAt(spouseFP + FoxSavedFP));
+							if (callerFP == 0) {
 
 								/* base frame, context in saved ip slot (or base of stack in Cog) */
 
@@ -5637,14 +5632,14 @@
 								/* begin stackPageAt: */
 								/* begin pageIndexFor: */
 								assert((((((char *) spouseFP)) >= (GIV(stackBasePlus1) - 1)) && ((((char *) spouseFP)) <= (((char *) GIV(pages))))));
-								index2 = pageIndexForstackBasePlus1bytesPerPage(spouseFP, GIV(stackBasePlus1), GIV(bytesPerPage));
-								thePage2 = stackPageAtpages(index2, GIV(pages));
-								callerContextOrNil = longAt((thePage2->baseAddress));
+								index = pageIndexForstackBasePlus1bytesPerPage(spouseFP, GIV(stackBasePlus1), GIV(bytesPerPage));
+								thePage1 = stackPageAtpages(index, GIV(pages));
+								callerContextOrNil = longAt((thePage1->baseAddress));
 								assert(addressCouldBeObj(callerContextOrNil));
 								assert((callerContextOrNil == (nilObject()))
 								 || (isContext(callerContextOrNil)));
 								object1 = callerContextOrNil;
-								goto l4;
+								goto l5;
 							}
 							/* begin ensureFrameIsMarried:SP: */
 							VM_LABEL(3ensureFrameIsMarriedSP);
@@ -5653,82 +5648,36 @@
 							theSP = (spouseFP + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(spouseFP + FoxMethod)))) < (startOfMemory())
 	? ((mframeCogMethod(spouseFP))->cmNumArgs)
 	: byteAt((spouseFP + FoxIFrameFlags) + 1))))) + BytesPerWord;
-							if (((((usqInt)(longAt(callerFP1 + FoxMethod)))) < (startOfMemory())
-								? ((longAt(callerFP1 + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
-								: (byteAt((callerFP1 + FoxIFrameFlags) + 2)) != 0)) {
-								assert(isContext(frameContext(callerFP1)));
-								object1 = longAt(callerFP1 + FoxThisContext);
-								goto l4;
+							if (((((usqInt)(longAt(callerFP + FoxMethod)))) < (startOfMemory())
+								? ((longAt(callerFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
+								: (byteAt((callerFP + FoxIFrameFlags) + 2)) != 0)) {
+								assert(isContext(frameContext(callerFP)));
+								object1 = longAt(callerFP + FoxThisContext);
+								goto l5;
 							}
-							object1 = marryFrameSP(callerFP1, theSP);
-						l4:	/* end ensureCallerContext: */;
-							goto l8;
+							object1 = marryFrameSP(callerFP, theSP);
+						l5:	/* end ensureCallerContext: */;
+							goto l6;
 						}
 						if (byte3 == StackPointerIndex) {
 							assert((ReceiverIndex + (stackPointerIndexForFrame(spouseFP))) < (lengthOf(rcvr)));
 							object1 = (((stackPointerIndexForFrame(spouseFP)) << 1) | 1);
-							goto l8;
+							goto l6;
 						}
 						if (byte3 == InstructionPointerIndex) {
-							if (spouseFP == localFP) {
-								theIP = oopForPointer(localIP);
-							}
-							else {
-								/* begin stackPageFor: */
-								/* begin stackPageAt: */
-								/* begin pageIndexFor: */
-								assert((((((char *) spouseFP)) >= (GIV(stackBasePlus1) - 1)) && ((((char *) spouseFP)) <= (((char *) GIV(pages))))));
-								index = pageIndexForstackBasePlus1bytesPerPage(spouseFP, GIV(stackBasePlus1), GIV(bytesPerPage));
-								thePage = stackPageAtpages(index, GIV(pages));
-								/* begin findFrameAbove:inPage: */
-								fp = (thePage->headFP);
-								if (fp == spouseFP) {
-									theFPAbove = 0;
-									goto l7;
-								}
-								while (((callerFP = frameCallerFP(fp))) != 0) {
-									if (callerFP == spouseFP) {
-										theFPAbove = fp;
-										goto l7;
-									}
-									fp = callerFP;
-								}
-								error("did not find theFP in stack page");
-								theFPAbove = 0;
-							l7:	/* end findFrameAbove:inPage: */;
-								theIP = (theFPAbove == 0
-									? longAt((thePage->headSP))
-									: oopForPointer(frameCallerSavedIP(theFPAbove)));
-							}
-							value = contextInstructionPointerframe(theIP, spouseFP);
-							if ((((sqInt) value)) < 0) {
-								/* begin internalMustMapMachineCodePC:context: */
-								/* begin externalizeIPandSP */
-								assert((((usqInt)localIP)) != (ceReturnToInterpreterPC()));
-								GIV(instructionPointer) = oopForPointer(localIP);
-								GIV(stackPointer) = localSP;
-								GIV(framePointer) = localFP;
-								result1 = mustMapMachineCodePCcontext((value >> 1), rcvr);
-								/* begin internalizeIPandSP */
-								assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
-								localIP = pointerForOop(GIV(instructionPointer));
-								localSP = pointerForOop(GIV(stackPointer));
-								localFP = pointerForOop(GIV(framePointer));
-								value = result1;
-							}
-							object1 = value;
-							goto l8;
+							object1 = instructionPointerForFramecurrentFPcurrentIP(spouseFP, localFP, localIP);
+							goto l6;
 						}
 						error("bad index");
 						object1 = 0;
-					l8:	/* end instVar:ofContext: */;
+					l6:	/* end instVar:ofContext: */;
 						longAtPointerput((localSP -= BytesPerOop), object1);
 					}
 					else {
 						/* begin internalPush: */
 						longAtPointerput((localSP -= BytesPerOop), longAt((rcvr + BaseHeaderSize) + (byte3 << ShiftForWord)));
 					}
-					goto l5;
+					goto l4;
 				}
 				if (opType == 3) {
 					/* begin pushLiteralConstant: */
@@ -5737,7 +5686,7 @@
 					assert(GIV(method) == (iframeMethod(localFP)));
 					object = longAt((GIV(method) + BaseHeaderSize) + ((byte3 + LiteralStart) << ShiftForWord));
 					longAtPointerput((localSP -= BytesPerOop), object);
-					goto l5;
+					goto l4;
 				}
 				if (opType == 4) {
 					/* begin pushLiteralVariable: */
@@ -5750,7 +5699,7 @@
 					object2 = longAt((oop + BaseHeaderSize) + (ValueIndex << ShiftForWord));
 					longAtPointerput((localSP -= BytesPerOop), object2);
 
-					goto l5;
+					goto l4;
 				}
 				top = longAtPointer(localSP);
 				if (opType == 7) {
@@ -5764,7 +5713,7 @@
 						possibleRootStoreIntovalue(litVar, top);
 					}
 					longAtput((litVar + BaseHeaderSize) + (ValueIndex << ShiftForWord), top);
-					goto l5;
+					goto l4;
 				}
 				if (opType == 6) {
 					/* begin internalPop: */
@@ -5802,7 +5751,7 @@
 							ensureContextIsExecutionSafeAfterAssignToStackPointer(rcvr1);
 						}
 						null;
-						goto l6;
+						goto l7;
 					}
 					/* begin frameOfMarriedContext: */
 					senderOop1 = longAt((rcvr1 + BaseHeaderSize) + (SenderIndex << ShiftForWord));
@@ -5815,9 +5764,9 @@
 						/* begin pageIndexFor: */
 						assert((((((char *) theFP)) >= (GIV(stackBasePlus1) - 1)) && ((((char *) theFP)) <= (((char *) GIV(pages))))));
 						index1 = pageIndexForstackBasePlus1bytesPerPage(theFP, GIV(stackBasePlus1), GIV(bytesPerPage));
-						thePage1 = stackPageAtpages(index1, GIV(pages));
+						thePage = stackPageAtpages(index1, GIV(pages));
 						assert(GIV(stackPage) == (mostRecentlyUsedPage()));
-						onCurrentPage = thePage1 == GIV(stackPage);
+						onCurrentPage = thePage == GIV(stackPage);
 						storeSenderOfFramewithValue(theFP, top);
 						if (onCurrentPage) {
 							localFP = (GIV(stackPage)->headFP);
@@ -5827,7 +5776,7 @@
 							markStackPageMostRecentlyUsed(GIV(stackPage));
 						}
 						null;
-						goto l6;
+						goto l7;
 					}
 					/* begin externalizeIPandSP */
 					assert((((usqInt)localIP)) != (ceReturnToInterpreterPC()));
@@ -5850,7 +5799,7 @@
 					localFP = pointerForOop(GIV(framePointer));
 					markStackPageMostRecentlyUsed(GIV(stackPage));
 					assertValidExecutionPointersimbarline(((usqInt)localIP), localFP, localSP, 1, __LINE__);
-				l6:	/* end instVar:ofContext:put: */;
+				l7:	/* end instVar:ofContext:put: */;
 				}
 				else {
 					/* begin storePointer:ofObject:withValue: */
@@ -5860,7 +5809,7 @@
 					longAtput((rcvr1 + BaseHeaderSize) + (byte3 << ShiftForWord), top);
 				}
 			}
-		l5:	/* end case */;
+		l4:	/* end case */;
 			break;
 		case 133:
 			/* singleExtendedSuperBytecode */
@@ -5950,10 +5899,10 @@
 					: (byteAt((theFP + FoxIFrameFlags) + 2)) != 0)) {
 					assert(isContext(frameContext(theFP)));
 					ourContext = longAt(theFP + FoxThisContext);
-					goto l9;
+					goto l8;
 				}
 				ourContext = marryFrameSP(theFP, theSP);
-			l9:	/* end ensureFrameIsMarried:SP: */;
+			l8:	/* end ensureFrameIsMarried:SP: */;
 				/* begin fetchNextBytecode */
 				currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
@@ -6141,10 +6090,10 @@
 					: (byteAt((theFP + FoxIFrameFlags) + 2)) != 0)) {
 					assert(isContext(frameContext(theFP)));
 					context = longAt(theFP + FoxThisContext);
-					goto l10;
+					goto l9;
 				}
 				context = marryFrameSP(theFP, theSP);
-			l10:	/* end ensureFrameIsMarried:SP: */;
+			l9:	/* end ensureFrameIsMarried:SP: */;
 				/* begin closureIn:numArgs:instructionPointer:numCopiedValues: */
 				VM_LABEL(0closureInnumArgsinstructionPointernumCopiedValues);
 				newClosure1 = eeInstantiateSmallClassnumSlots(longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassBlockClosure << ShiftForWord)), ClosureFirstCopiedValueIndex + numCopied);
@@ -6321,7 +6270,7 @@
 						GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorMustBeBoolean << ShiftForWord));
 						GIV(argumentCount) = 0;
 						goto normalSend;
-						goto l11;
+						goto l10;
 					}
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -6329,7 +6278,7 @@
 				}
 				/* begin internalPop: */
 				localSP += 1 * BytesPerOop;
-			l11:	/* end jumplfFalseBy: */;
+			l10:	/* end jumplfFalseBy: */;
 			}
 			break;
 		case 160:
@@ -6352,7 +6301,7 @@
 				/* begin ifBackwardsCheckForEvents: */
 				VM_LABEL(0ifBackwardsCheckForEvents);
 				if (offset >= 0) {
-					goto l12;
+					goto l11;
 				}
 				if (localSP < GIV(stackLimit)) {
 					/* begin externalizeIPandSP */
@@ -6369,7 +6318,7 @@
 					localSP = pointerForOop(GIV(stackPointer));
 					localFP = pointerForOop(GIV(framePointer));
 					if (switched) {
-						goto l12;
+						goto l11;
 					}
 				}
 				backwardJumpCountByte = byteAt(localFP + ((VMBIGENDIAN
@@ -6399,7 +6348,7 @@
 				byteAtput(localFP + ((VMBIGENDIAN
 	? (FoxIFrameFlags + BytesPerWord) - 1
 	: FoxIFrameFlags)), backwardJumpCountByte);
-			l12:	/* end ifBackwardsCheckForEvents: */;
+			l11:	/* end ifBackwardsCheckForEvents: */;
 				/* begin fetchNextBytecode */
 				currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
@@ -6431,7 +6380,7 @@
 						GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorMustBeBoolean << ShiftForWord));
 						GIV(argumentCount) = 0;
 						goto normalSend;
-						goto l13;
+						goto l12;
 					}
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -6439,7 +6388,7 @@
 				}
 				/* begin internalPop: */
 				localSP += 1 * BytesPerOop;
-			l13:	/* end jumplfTrueBy: */;
+			l12:	/* end jumplfTrueBy: */;
 			}
 			break;
 		case 172:
@@ -6468,7 +6417,7 @@
 						GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SelectorMustBeBoolean << ShiftForWord));
 						GIV(argumentCount) = 0;
 						goto normalSend;
-						goto l14;
+						goto l13;
 					}
 					/* begin fetchNextBytecode */
 					currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -6476,7 +6425,7 @@
 				}
 				/* begin internalPop: */
 				localSP += 1 * BytesPerOop;
-			l14:	/* end jumplfFalseBy: */;
+			l13:	/* end jumplfFalseBy: */;
 			}
 			break;
 		case 176:
@@ -6506,7 +6455,7 @@
 						/* begin fetchNextBytecode */
 						currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-						goto l15;
+						goto l14;
 					}
 				}
 				else {
@@ -6521,77 +6470,77 @@
 					/* begin loadFloatOrIntFrom: */
 					if ((rcvr & 1)) {
 						rcvr1 = ((double) ((rcvr >> 1)) );
-						goto l19;
+						goto l18;
 					}
 					/* begin floatValueOf: */
 					/* begin is:instanceOf:compactClassIndex: */
 					if ((rcvr & 1)) {
 						isFloat = 0;
-						goto l18;
+						goto l17;
 					}
 					/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 					assert(!((rcvr & 1)));
 					ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F;
 					if (ccIndex == 0) {
 						isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-						goto l22;
+						goto l21;
 					}
 					isFloat = ClassFloatCompactIndex == ccIndex;
-					goto l22;
+					goto l21;
 
 					isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)));
-				l22:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-				l18:	/* end is:instanceOf:compactClassIndex: */;
+				l21:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+				l17:	/* end is:instanceOf:compactClassIndex: */;
 					if (isFloat) {
 						;
 						fetchFloatAtinto(rcvr + BaseHeaderSize, result1);
 						rcvr1 = result1;
-						goto l17;
+						goto l16;
 					}
 					/* begin primitiveFail */
 					if (!GIV(primFailCode)) {
 						GIV(primFailCode) = 1;
 					}
 					rcvr1 = 0.0;
-				l17:	/* end floatValueOf: */;
-				l19:	/* end loadFloatOrIntFrom: */;
+				l16:	/* end floatValueOf: */;
+				l18:	/* end loadFloatOrIntFrom: */;
 					/* begin loadFloatOrIntFrom: */
 					if ((arg & 1)) {
 						arg1 = ((double) ((arg >> 1)) );
-						goto l23;
+						goto l22;
 					}
 					/* begin floatValueOf: */
 					/* begin is:instanceOf:compactClassIndex: */
 					if ((arg & 1)) {
 						isFloat1 = 0;
-						goto l21;
+						goto l20;
 					}
 					/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 					assert(!((arg & 1)));
 					ccIndex1 = (((usqInt) (longAt(arg))) >> (compactClassFieldLSB())) & 0x1F;
 					if (ccIndex1 == 0) {
 						isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-						goto l16;
+						goto l15;
 					}
 					isFloat1 = ClassFloatCompactIndex == ccIndex1;
-					goto l16;
+					goto l15;
 
 					isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord)));
-				l16:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-				l21:	/* end is:instanceOf:compactClassIndex: */;
+				l15:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+				l20:	/* end is:instanceOf:compactClassIndex: */;
 					if (isFloat1) {
 						;
 						fetchFloatAtinto(arg + BaseHeaderSize, result2);
 						arg1 = result2;
-						goto l20;
+						goto l19;
 					}
 					/* begin primitiveFail */
 					if (!GIV(primFailCode)) {
 						GIV(primFailCode) = 1;
 					}
 					arg1 = 0.0;
-				l20:	/* end floatValueOf: */;
-				l23:	/* end loadFloatOrIntFrom: */;
+				l19:	/* end floatValueOf: */;
+				l22:	/* end loadFloatOrIntFrom: */;
 					if (!GIV(primFailCode)) {
 						/* begin pop:thenPushFloat: */
 						longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), floatObjectOf(rcvr1 + arg1));
@@ -6606,14 +6555,14 @@
 						/* begin fetchNextBytecode */
 						currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-						goto l15;
+						goto l14;
 					}
 				}
 				GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((0 * 2) << ShiftForWord));
 				GIV(argumentCount) = 1;
 				goto normalSend;
 			}
-		l15:	/* end case */;
+		l14:	/* end case */;
 			break;
 		case 177:
 			/* bytecodePrimSubtract */
@@ -6642,7 +6591,7 @@
 						/* begin fetchNextBytecode */
 						currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-						goto l24;
+						goto l23;
 					}
 				}
 				else {
@@ -6657,77 +6606,77 @@
 					/* begin loadFloatOrIntFrom: */
 					if ((rcvr & 1)) {
 						rcvr1 = ((double) ((rcvr >> 1)) );
-						goto l28;
+						goto l27;
 					}
 					/* begin floatValueOf: */
 					/* begin is:instanceOf:compactClassIndex: */
 					if ((rcvr & 1)) {
 						isFloat = 0;
-						goto l27;
+						goto l26;
 					}
 					/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 					assert(!((rcvr & 1)));
 					ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F;
 					if (ccIndex == 0) {
 						isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-						goto l31;
+						goto l30;
 					}
 					isFloat = ClassFloatCompactIndex == ccIndex;
-					goto l31;
+					goto l30;
 
 					isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)));
-				l31:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-				l27:	/* end is:instanceOf:compactClassIndex: */;
+				l30:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+				l26:	/* end is:instanceOf:compactClassIndex: */;
 					if (isFloat) {
 						;
 						fetchFloatAtinto(rcvr + BaseHeaderSize, result1);
 						rcvr1 = result1;
-						goto l26;
+						goto l25;
 					}
 					/* begin primitiveFail */
 					if (!GIV(primFailCode)) {
 						GIV(primFailCode) = 1;
 					}
 					rcvr1 = 0.0;
-				l26:	/* end floatValueOf: */;
-				l28:	/* end loadFloatOrIntFrom: */;
+				l25:	/* end floatValueOf: */;
+				l27:	/* end loadFloatOrIntFrom: */;
 					/* begin loadFloatOrIntFrom: */
 					if ((arg & 1)) {
 						arg1 = ((double) ((arg >> 1)) );
-						goto l32;
+						goto l31;
 					}
 					/* begin floatValueOf: */
 					/* begin is:instanceOf:compactClassIndex: */
 					if ((arg & 1)) {
 						isFloat1 = 0;
-						goto l30;
+						goto l29;
 					}
 					/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 					assert(!((arg & 1)));
 					ccIndex1 = (((usqInt) (longAt(arg))) >> (compactClassFieldLSB())) & 0x1F;
 					if (ccIndex1 == 0) {
 						isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-						goto l25;
+						goto l24;
 					}
 					isFloat1 = ClassFloatCompactIndex == ccIndex1;
-					goto l25;
+					goto l24;
 
 					isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord)));
-				l25:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-				l30:	/* end is:instanceOf:compactClassIndex: */;
+				l24:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+				l29:	/* end is:instanceOf:compactClassIndex: */;
 					if (isFloat1) {
 						;
 						fetchFloatAtinto(arg + BaseHeaderSize, result2);
 						arg1 = result2;
-						goto l29;
+						goto l28;
 					}
 					/* begin primitiveFail */
 					if (!GIV(primFailCode)) {
 						GIV(primFailCode) = 1;
 					}
 					arg1 = 0.0;
-				l29:	/* end floatValueOf: */;
-				l32:	/* end loadFloatOrIntFrom: */;
+				l28:	/* end floatValueOf: */;
+				l31:	/* end loadFloatOrIntFrom: */;
 					if (!GIV(primFailCode)) {
 						/* begin pop:thenPushFloat: */
 						longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), floatObjectOf(rcvr1 - arg1));
@@ -6742,14 +6691,14 @@
 						/* begin fetchNextBytecode */
 						currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-						goto l24;
+						goto l23;
 					}
 				}
 				GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((1 * 2) << ShiftForWord));
 				GIV(argumentCount) = 1;
 				goto normalSend;
 			}
-		l24:	/* end case */;
+		l23:	/* end case */;
 			break;
 		case 178:
 			/* bytecodePrimLessThan */
@@ -6781,7 +6730,7 @@
 					else {
 						goto booleanCheatFalse;
 					}
-					goto l33;
+					goto l32;
 				}
 				/* begin initPrimCall */
 				GIV(primFailCode) = 0;
@@ -6789,77 +6738,77 @@
 				/* begin loadFloatOrIntFrom: */
 				if ((rcvr & 1)) {
 					rcvr1 = ((double) ((rcvr >> 1)) );
-					goto l37;
+					goto l36;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((rcvr & 1)) {
 					isFloat = 0;
-					goto l36;
+					goto l35;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((rcvr & 1)));
 				ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex == 0) {
 					isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l40;
+					goto l39;
 				}
 				isFloat = ClassFloatCompactIndex == ccIndex;
-				goto l40;
+				goto l39;
 
 				isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)));
-			l40:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l36:	/* end is:instanceOf:compactClassIndex: */;
+			l39:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l35:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat) {
 					;
 					fetchFloatAtinto(rcvr + BaseHeaderSize, result);
 					rcvr1 = result;
-					goto l35;
+					goto l34;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				rcvr1 = 0.0;
-			l35:	/* end floatValueOf: */;
-			l37:	/* end loadFloatOrIntFrom: */;
+			l34:	/* end floatValueOf: */;
+			l36:	/* end loadFloatOrIntFrom: */;
 				/* begin loadFloatOrIntFrom: */
 				if ((arg & 1)) {
 					arg1 = ((double) ((arg >> 1)) );
-					goto l41;
+					goto l40;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((arg & 1)) {
 					isFloat1 = 0;
-					goto l39;
+					goto l38;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((arg & 1)));
 				ccIndex1 = (((usqInt) (longAt(arg))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex1 == 0) {
 					isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l34;
+					goto l33;
 				}
 				isFloat1 = ClassFloatCompactIndex == ccIndex1;
-				goto l34;
+				goto l33;
 
 				isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord)));
-			l34:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l39:	/* end is:instanceOf:compactClassIndex: */;
+			l33:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l38:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat1) {
 					;
 					fetchFloatAtinto(arg + BaseHeaderSize, result1);
 					arg1 = result1;
-					goto l38;
+					goto l37;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				arg1 = 0.0;
-			l38:	/* end floatValueOf: */;
-			l41:	/* end loadFloatOrIntFrom: */;
+			l37:	/* end floatValueOf: */;
+			l40:	/* end loadFloatOrIntFrom: */;
 				aBool = rcvr1 < arg1;
 				if (!GIV(primFailCode)) {
 					/* begin booleanCheat: */
@@ -6869,13 +6818,13 @@
 					else {
 						goto booleanCheatFalse;
 					}
-					goto l33;
+					goto l32;
 				}
 				GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((2 * 2) << ShiftForWord));
 				GIV(argumentCount) = 1;
 				goto normalSend;
 			}
-		l33:	/* end case */;
+		l32:	/* end case */;
 			
 		booleanCheatTrue:
 			/* booleanCheatTrue */
@@ -6899,7 +6848,7 @@
 						/* begin fetchNextBytecode */
 						currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-						goto l312;
+						goto l310;
 					}
 					if (bytecode == 172) {
 
@@ -6909,7 +6858,7 @@
 						/* begin fetchNextBytecode */
 						currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
-						goto l312;
+						goto l310;
 					}
 					if (bytecode > 167) {
 
@@ -6920,7 +6869,7 @@
 						localIP = (localIP + offset) + 1;
 						currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
 
-						goto l312;
+						goto l310;
 					}
 				}
 				currentBytecode = bytecode + GIV(bytecodeSetSelector);
@@ -6928,7 +6877,7 @@
 				/* begin internalPush: */
 				longAtPointerput((localSP -= BytesPerOop), GIV(trueObj));
 			}
-		l312:	/* end case */;
+		l310:	/* end case */;
 			break;
 		case 179:
 			/* bytecodePrimGreaterThan */
@@ -6960,7 +6909,7 @@
 					else {
 						/* goto booleanCheatFalse */
 					}
-					goto l42;
+					goto l41;
 				}
 				/* begin initPrimCall */
 				GIV(primFailCode) = 0;
@@ -6968,77 +6917,77 @@
 				/* begin loadFloatOrIntFrom: */
 				if ((rcvr & 1)) {
 					rcvr1 = ((double) ((rcvr >> 1)) );
-					goto l46;
+					goto l45;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((rcvr & 1)) {
 					isFloat = 0;
-					goto l45;
+					goto l44;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((rcvr & 1)));
 				ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex == 0) {
 					isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l49;
+					goto l48;
 				}
 				isFloat = ClassFloatCompactIndex == ccIndex;
-				goto l49;
+				goto l48;
 
 				isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)));
-			l49:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l45:	/* end is:instanceOf:compactClassIndex: */;
+			l48:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l44:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat) {
 					;
 					fetchFloatAtinto(rcvr + BaseHeaderSize, result);
 					rcvr1 = result;
-					goto l44;
+					goto l43;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				rcvr1 = 0.0;
-			l44:	/* end floatValueOf: */;
-			l46:	/* end loadFloatOrIntFrom: */;
+			l43:	/* end floatValueOf: */;
+			l45:	/* end loadFloatOrIntFrom: */;
 				/* begin loadFloatOrIntFrom: */
 				if ((arg & 1)) {
 					arg1 = ((double) ((arg >> 1)) );
-					goto l50;
+					goto l49;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((arg & 1)) {
 					isFloat1 = 0;
-					goto l48;
+					goto l47;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((arg & 1)));
 				ccIndex1 = (((usqInt) (longAt(arg))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex1 == 0) {
 					isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l43;
+					goto l42;
 				}
 				isFloat1 = ClassFloatCompactIndex == ccIndex1;
-				goto l43;
+				goto l42;
 
 				isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord)));
-			l43:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l48:	/* end is:instanceOf:compactClassIndex: */;
+			l42:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l47:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat1) {
 					;
 					fetchFloatAtinto(arg + BaseHeaderSize, result1);
 					arg1 = result1;
-					goto l47;
+					goto l46;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				arg1 = 0.0;
-			l47:	/* end floatValueOf: */;
-			l50:	/* end loadFloatOrIntFrom: */;
+			l46:	/* end floatValueOf: */;
+			l49:	/* end loadFloatOrIntFrom: */;
 				aBool = rcvr1 > arg1;
 				if (!GIV(primFailCode)) {
 					/* begin booleanCheat: */
@@ -7048,13 +6997,13 @@
 					else {
 						goto booleanCheatFalse;
 					}
-					goto l42;
+					goto l41;
 				}
 				GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((3 * 2) << ShiftForWord));
 				GIV(argumentCount) = 1;
 				goto normalSend;
 			}
-		l42:	/* end case */;
+		l41:	/* end case */;
 			
 		booleanCheatFalse:
 			/* booleanCheatFalse */
@@ -7078,7 +7027,7 @@
 					localIP = (localIP + (bytecode - 151)) + 1;
 					currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
 
-					goto l313;
+					goto l311;
 				}
 				if (bytecode == 172) {
 
@@ -7089,14 +7038,14 @@
 					localIP = (localIP + offset) + 1;
 					currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
 
-					goto l313;
+					goto l311;
 				}
 				currentBytecode = bytecode + GIV(bytecodeSetSelector);
 
 				/* begin internalPush: */
 				longAtPointerput((localSP -= BytesPerOop), GIV(falseObj));
 			}
-		l313:	/* end case */;
+		l311:	/* end case */;
 			break;
 		case 180:
 			/* bytecodePrimLessOrEqual */
@@ -7128,7 +7077,7 @@
 					else {
 						goto booleanCheatFalse;
 					}
-					goto l51;
+					goto l50;
 				}
 				/* begin initPrimCall */
 				GIV(primFailCode) = 0;
@@ -7136,77 +7085,77 @@
 				/* begin loadFloatOrIntFrom: */
 				if ((rcvr & 1)) {
 					rcvr1 = ((double) ((rcvr >> 1)) );
-					goto l55;
+					goto l54;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((rcvr & 1)) {
 					isFloat = 0;
-					goto l54;
+					goto l53;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((rcvr & 1)));
 				ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex == 0) {
 					isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l58;
+					goto l57;
 				}
 				isFloat = ClassFloatCompactIndex == ccIndex;
-				goto l58;
+				goto l57;
 
 				isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)));
-			l58:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l54:	/* end is:instanceOf:compactClassIndex: */;
+			l57:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l53:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat) {
 					;
 					fetchFloatAtinto(rcvr + BaseHeaderSize, result);
 					rcvr1 = result;
-					goto l53;
+					goto l52;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				rcvr1 = 0.0;
-			l53:	/* end floatValueOf: */;
-			l55:	/* end loadFloatOrIntFrom: */;
+			l52:	/* end floatValueOf: */;
+			l54:	/* end loadFloatOrIntFrom: */;
 				/* begin loadFloatOrIntFrom: */
 				if ((arg & 1)) {
 					arg1 = ((double) ((arg >> 1)) );
-					goto l59;
+					goto l58;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((arg & 1)) {
 					isFloat1 = 0;
-					goto l57;
+					goto l56;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((arg & 1)));
 				ccIndex1 = (((usqInt) (longAt(arg))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex1 == 0) {
 					isFloat1 = ((longAt(arg - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l52;
+					goto l51;
 				}
 				isFloat1 = ClassFloatCompactIndex == ccIndex1;
-				goto l52;
+				goto l51;
 
 				isFloat1 = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex1 - 1) << ShiftForWord)));
-			l52:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l57:	/* end is:instanceOf:compactClassIndex: */;
+			l51:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l56:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat1) {
 					;
 					fetchFloatAtinto(arg + BaseHeaderSize, result1);
 					arg1 = result1;
-					goto l56;
+					goto l55;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				arg1 = 0.0;
-			l56:	/* end floatValueOf: */;
-			l59:	/* end loadFloatOrIntFrom: */;
+			l55:	/* end floatValueOf: */;
+			l58:	/* end loadFloatOrIntFrom: */;
 				aBool = rcvr1 <= arg1;
 				if (!GIV(primFailCode)) {
 					/* begin booleanCheat: */
@@ -7216,13 +7165,13 @@
 					else {
 						goto booleanCheatFalse;
 					}
-					goto l51;
+					goto l50;
 				}
 				GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((4 * 2) << ShiftForWord));
 				GIV(argumentCount) = 1;
 				goto normalSend;
 			}
-		l51:	/* end case */;
+		l50:	/* end case */;
 			break;
 		case 181:
 			/* bytecodePrimGreaterOrEqual */
@@ -7254,7 +7203,7 @@
 					else {
 						goto booleanCheatFalse;
 					}
-					goto l60;
+					goto l59;
 				}
 				/* begin initPrimCall */
 				GIV(primFailCode) = 0;
@@ -7262,77 +7211,77 @@
 				/* begin loadFloatOrIntFrom: */
 				if ((rcvr & 1)) {
 					rcvr1 = ((double) ((rcvr >> 1)) );
-					goto l64;
+					goto l63;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((rcvr & 1)) {
 					isFloat = 0;
-					goto l63;
+					goto l62;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */
 				assert(!((rcvr & 1)));
 				ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F;
 				if (ccIndex == 0) {
 					isFloat = ((longAt(rcvr - BaseHeaderSize)) & AllButTypeMask) == (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord)));
-					goto l67;
+					goto l66;
 				}
 				isFloat = ClassFloatCompactIndex == ccIndex;
-				goto l67;
+				goto l66;
 
 				isFloat = (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassFloat << ShiftForWord))) == (longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)));
-			l67:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
-			l63:	/* end is:instanceOf:compactClassIndex: */;
+			l66:	/* end isClassOfNonImm:equalTo:compactClassIndex: */;
+			l62:	/* end is:instanceOf:compactClassIndex: */;
 				if (isFloat) {
 					;
 					fetchFloatAtinto(rcvr + BaseHeaderSize, result);
 					rcvr1 = result;
-					goto l62;
+					goto l61;
 				}
 				/* begin primitiveFail */
 				if (!GIV(primFailCode)) {
 					GIV(primFailCode) = 1;
 				}
 				rcvr1 = 0.0;
-			l62:	/* end floatValueOf: */;
-			l64:	/* end loadFloatOrIntFrom: */;
+			l61:	/* end floatValueOf: */;
+			l63:	/* end loadFloatOrIntFrom: */;
 				/* begin loadFloatOrIntFrom: */
 				if ((arg & 1)) {
 					arg1 = ((double) ((arg >> 1)) );
-					goto l68;
+					goto l67;
 				}
 				/* begin floatValueOf: */
 				/* begin is:instanceOf:compactClassIndex: */
 				if ((arg & 1)) {
 					isFloat1 = 0;
-					goto l66;
+					goto l65;
 				}
 				/* begin isClassOfNonImm:equalTo:compactClassIndex: */

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list