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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

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

commits-3
 
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. @@