[commit][3085] CogVM source as per VMMaker.oscog-eem.887

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

[commit][3085] CogVM source as per VMMaker.oscog-eem.887

commits-3
 
Revision: 3085
Author:   eliot
Date:     2014-09-29 18:16:34 -0700 (Mon, 29 Sep 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.887

Install the callPrimitiveBytecode in the Interpreter's
bytecodeDispatchTable on Spur.

Modify callPrimitiveBytecode to not invoke unknownBytecode processing if at the
first bytecode of a primitive method.

Correct sign comparison of instructionPointer in justActivateNewMethod.

Relax the validInstructionPointer:inMethod:framePointer:
assert to accept any pc in initialPC to self size range
now that callPrimitiveBytecode is more forgiving.

Speed up primitiveMarkUnwindMethod & primitiveMarkHandlerMethod in the
StackInterpreter by setting them to 0 in the primitive table.

Modified Paths:
--------------
    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/scripts/uploadvms
    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/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/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2014-09-25 23:12:18 UTC (rev 3084)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2014-09-30 01:16:34 UTC (rev 3085)
@@ -1,9 +1,9 @@
 /* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
    from
- CoInterpreter VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CoInterpreter VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -703,8 +703,6 @@
 static void primitiveLogN(void);
 static void primitiveLowSpaceSemaphore(void);
 static void primitiveMakePoint(void);
-static void primitiveMarkHandlerMethod(void);
-static void primitiveMarkUnwindMethod(void);
 static void primitiveMaxIdentityHash(void);
 usqInt primitiveMethod(void);
 static void primitiveMillisecondClock(void);
@@ -1707,8 +1705,8 @@
  /* 195 */ primitiveFindNextUnwindContext,
  /* 196 */ primitiveTerminateTo,
  /* 197 */ primitiveFindHandlerContext,
- /* 198 */ primitiveMarkUnwindMethod,
- /* 199 */ primitiveMarkHandlerMethod,
+ /* 198 */ (void (*)(void))0,
+ /* 199 */ (void (*)(void))0,
  /* 200 */ primitiveClosureCopyWithCopiedValues,
  /* 201 */ primitiveClosureValue,
  /* 202 */ primitiveClosureValue,
@@ -2086,7 +2084,7 @@
  /* 574 */ (void (*)(void))0,
  /* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.885";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.887";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -13043,11 +13041,38 @@
  {
  sqInt byte1;
  sqInt byte2;
+ sqInt header;
+ sqInt header1;
+ sqInt header2;
  sqInt prim;
 
  VM_LABEL(0callPrimitiveBytecode);
- error("callPrimitiveBytecode should not be evaluated. method activation should step beyond this bytecode.");
+ /* begin methodHeaderOf: */
+ assert(isCompiledMethod(GIV(method)));
+ header2 = longAt((GIV(method) + BaseHeaderSize) + (HeaderIndex << ShiftForWord));
+ header = ((header2 & 1)
+ ? header2
+ : (assert((((usqInt)header2)) < (heapBase())),
+ assert((((((CogMethod *) header2))->objectHeader)) == (nullHeaderForMachineCodeMethod())),
+ ((((CogMethod *) header2))->methodHeader)));
+ if ((((((sqInt) header)) < 0
+ ? header & (65536 << SmallIntegerShift)
+ : (header & 536871934) != 0))
+ && (localIP == ((GIV(method) + ((LiteralStart + (literalCountOfMethodHeader(header))) * BytesPerOop)) + (BaseHeaderSize)))) {
+ localIP += ((((sqInt) header)) < 0
+ ? 3
+ : 0);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
+ null;
+ goto l296;
+ }
+ else {
+ goto respondToUnknownBytecode;
+ goto l296;
+ }
+
  }
  l296: /* end case */;
  break;
@@ -13837,7 +13862,7 @@
  GIV(argumentCount) = (((usqInt) header) >> 25) & 15;
  assert(wasInMachineCode == (isMachineCodeFrame(GIV(framePointer))));
  if (calledFromMachineCode) {
- if (GIV(instructionPointer) >= (startOfMemory())) {
+ if ((((usqInt)GIV(instructionPointer))) >= (startOfMemory())) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -19868,7 +19893,7 @@
  rcvr = longAt(GIV(stackPointer) + (numArgs * BytesPerWord));
  assert(!(isOopForwarded(rcvr)));
  if (activateCogMethod
- && (GIV(instructionPointer) >= (startOfMemory()))) {
+ && ((((usqInt)GIV(instructionPointer))) >= (startOfMemory()))) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -20101,7 +20126,7 @@
  rcvr = longAt(GIV(stackPointer) + (numArgs * BytesPerWord));
  assert(!(isOopForwarded(rcvr)));
  if (activateCogMethod
- && (GIV(instructionPointer) >= (startOfMemory()))) {
+ && ((((usqInt)GIV(instructionPointer))) >= (startOfMemory()))) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -20762,15 +20787,19 @@
  longAtput((theContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord), ((tempIndex << 1) | 1));
 }
 
+
+/* Note that we accept anInstrPointer pointing to a callPrimitiveBytecode
+ at the start of a method that contains a primitive. This because methods
+ like Context(Part)>>reset have to be updated to skip the callPrimtiive
+ bytecode otherwise. */
+/* -1 for pre-increment in fetchNextBytecode */
+
 sqInt
 validInstructionPointerinMethodframePointer(usqInt instrPointer, usqInt aMethod, char *fp)
 {
     CogMethod *cogMethod;
     sqInt header;
     sqInt methodField;
-    sqInt methodHeader;
-    sqInt methodHeader1;
-    sqInt methodHeader2;
     usqInt theInstrPointer;
 
  if (instrPointer == (ceCannotResumePC())) {
@@ -20798,21 +20827,7 @@
  }
 
  }
-
- /* begin noAssertHeaderOf: */
- methodHeader2 = longAt((aMethod + BaseHeaderSize) + (HeaderIndex << ShiftForWord));
- methodHeader = (isCogMethodReference(methodHeader2)
- ? ((((CogMethod *) methodHeader2))->methodHeader)
- : methodHeader2);
  return (theInstrPointer >= (((aMethod + (lastPointerOf(aMethod))) + BytesPerOop) - 1))
- && ((theInstrPointer < (((aMethod + (numBytesOf(aMethod))) + BaseHeaderSize) - 1))
- && (!(((((sqInt) methodHeader)) < 0)
- && ((methodHeader & (65536 << SmallIntegerShift))
- && (theInstrPointer < ((((aMethod + BytesPerOop) - 1) + (lastPointerOf(aMethod))) + (((((sqInt) methodHeader)) < 0
- ? 3
- : 0))))))));
-
- return (theInstrPointer >= (((aMethod + (lastPointerOf(aMethod))) + BytesPerOop) - 1))
  && (theInstrPointer < (((aMethod + (numBytesOf(aMethod))) + (BaseHeaderSize)) - 1));
 }
 
@@ -29701,37 +29716,7 @@
  GIV(stackPointer) = sp;
 }
 
-
-/* Primitive. Mark the method for exception handling. The primitive must fail
- after marking the context so that the regular code is run.
- */
-
 static void
-primitiveMarkHandlerMethod(void)
-{   DECL_MAYBE_SQ_GLOBAL_STRUCT
- /* begin primitiveFail */
- if (!GIV(primFailCode)) {
- GIV(primFailCode) = 1;
- }
-}
-
-
-/* Primitive. Mark the method for exception unwinding. The primitive must
- fail after marking the context so that the regular code is run. It must
- also *not* allow a context switch.
- */
-
-static void
-primitiveMarkUnwindMethod(void)
-{   DECL_MAYBE_SQ_GLOBAL_STRUCT
- /* begin primitiveFail */
- if (!GIV(primFailCode)) {
- GIV(primFailCode) = 1;
- }
- return;
-}
-
-static void
 primitiveMaxIdentityHash(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     char *sp;
@@ -51304,7 +51289,7 @@
  rcvr1 = longAt(GIV(stackPointer) + (numArgs * BytesPerWord));
  assert(!(isOopForwarded(rcvr1)));
  if (activateCogMethod
- && (GIV(instructionPointer) >= (startOfMemory()))) {
+ && ((((usqInt)GIV(instructionPointer))) >= (startOfMemory()))) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -52176,6 +52161,12 @@
  return (((usqInt) header) >> 19) & 0x3F;
 }
 
+
+/* Note that we accept anInstrPointer pointing to a callPrimitiveBytecode
+ at the start of a method that contains a primitive. This because methods
+ like Context(Part)>>reset have to be updated to skip the callPrimtiive
+ bytecode otherwise. */
+
 static sqInt
 validInstructionPointerinFrame(usqInt anInstrPointer, char *fp)
 {

Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2014-09-25 23:12:18 UTC (rev 3084)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2014-09-30 01:16:34 UTC (rev 3085)
@@ -1,5 +1,5 @@
 /* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
  */
 
 

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-09-25 23:12:18 UTC (rev 3084)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-09-30 01:16:34 UTC (rev 3085)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
    from
- CoInterpreter VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CoInterpreter VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -706,8 +706,6 @@
 static void primitiveLogN(void);
 static void primitiveLowSpaceSemaphore(void);
 static void primitiveMakePoint(void);
-static void primitiveMarkHandlerMethod(void);
-static void primitiveMarkUnwindMethod(void);
 static void primitiveMaxIdentityHash(void);
 usqInt primitiveMethod(void);
 static void primitiveMillisecondClock(void);
@@ -1710,8 +1708,8 @@
  /* 195 */ primitiveFindNextUnwindContext,
  /* 196 */ primitiveTerminateTo,
  /* 197 */ primitiveFindHandlerContext,
- /* 198 */ primitiveMarkUnwindMethod,
- /* 199 */ primitiveMarkHandlerMethod,
+ /* 198 */ (void (*)(void))0,
+ /* 199 */ (void (*)(void))0,
  /* 200 */ primitiveClosureCopyWithCopiedValues,
  /* 201 */ primitiveClosureValue,
  /* 202 */ primitiveClosureValue,
@@ -2089,7 +2087,7 @@
  /* 574 */ (void (*)(void))0,
  /* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.885";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.887";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -13052,11 +13050,38 @@
  {
  sqInt byte1;
  sqInt byte2;
+ sqInt header;
+ sqInt header1;
+ sqInt header2;
  sqInt prim;
 
  VM_LABEL(0callPrimitiveBytecode);
- error("callPrimitiveBytecode should not be evaluated. method activation should step beyond this bytecode.");
+ /* begin methodHeaderOf: */
+ assert(isCompiledMethod(GIV(method)));
+ header2 = longAt((GIV(method) + BaseHeaderSize) + (HeaderIndex << ShiftForWord));
+ header = ((header2 & 1)
+ ? header2
+ : (assert((((usqInt)header2)) < (heapBase())),
+ assert((((((CogMethod *) header2))->objectHeader)) == (nullHeaderForMachineCodeMethod())),
+ ((((CogMethod *) header2))->methodHeader)));
+ if ((((((sqInt) header)) < 0
+ ? header & (65536 << SmallIntegerShift)
+ : (header & 536871934) != 0))
+ && (localIP == ((GIV(method) + ((LiteralStart + (literalCountOfMethodHeader(header))) * BytesPerOop)) + (BaseHeaderSize)))) {
+ localIP += ((((sqInt) header)) < 0
+ ? 3
+ : 0);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
+ null;
+ goto l296;
+ }
+ else {
+ goto respondToUnknownBytecode;
+ goto l296;
+ }
+
  }
  l296: /* end case */;
  BREAK;
@@ -13846,7 +13871,7 @@
  GIV(argumentCount) = (((usqInt) header) >> 25) & 15;
  assert(wasInMachineCode == (isMachineCodeFrame(GIV(framePointer))));
  if (calledFromMachineCode) {
- if (GIV(instructionPointer) >= (startOfMemory())) {
+ if ((((usqInt)GIV(instructionPointer))) >= (startOfMemory())) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -19877,7 +19902,7 @@
  rcvr = longAt(GIV(stackPointer) + (numArgs * BytesPerWord));
  assert(!(isOopForwarded(rcvr)));
  if (activateCogMethod
- && (GIV(instructionPointer) >= (startOfMemory()))) {
+ && ((((usqInt)GIV(instructionPointer))) >= (startOfMemory()))) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -20110,7 +20135,7 @@
  rcvr = longAt(GIV(stackPointer) + (numArgs * BytesPerWord));
  assert(!(isOopForwarded(rcvr)));
  if (activateCogMethod
- && (GIV(instructionPointer) >= (startOfMemory()))) {
+ && ((((usqInt)GIV(instructionPointer))) >= (startOfMemory()))) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -20771,15 +20796,19 @@
  longAtput((theContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord), ((tempIndex << 1) | 1));
 }
 
+
+/* Note that we accept anInstrPointer pointing to a callPrimitiveBytecode
+ at the start of a method that contains a primitive. This because methods
+ like Context(Part)>>reset have to be updated to skip the callPrimtiive
+ bytecode otherwise. */
+/* -1 for pre-increment in fetchNextBytecode */
+
 sqInt
 validInstructionPointerinMethodframePointer(usqInt instrPointer, usqInt aMethod, char *fp)
 {
     CogMethod *cogMethod;
     sqInt header;
     sqInt methodField;
-    sqInt methodHeader;
-    sqInt methodHeader1;
-    sqInt methodHeader2;
     usqInt theInstrPointer;
 
  if (instrPointer == (ceCannotResumePC())) {
@@ -20807,21 +20836,7 @@
  }
 
  }
-
- /* begin noAssertHeaderOf: */
- methodHeader2 = longAt((aMethod + BaseHeaderSize) + (HeaderIndex << ShiftForWord));
- methodHeader = (isCogMethodReference(methodHeader2)
- ? ((((CogMethod *) methodHeader2))->methodHeader)
- : methodHeader2);
  return (theInstrPointer >= (((aMethod + (lastPointerOf(aMethod))) + BytesPerOop) - 1))
- && ((theInstrPointer < (((aMethod + (numBytesOf(aMethod))) + BaseHeaderSize) - 1))
- && (!(((((sqInt) methodHeader)) < 0)
- && ((methodHeader & (65536 << SmallIntegerShift))
- && (theInstrPointer < ((((aMethod + BytesPerOop) - 1) + (lastPointerOf(aMethod))) + (((((sqInt) methodHeader)) < 0
- ? 3
- : 0))))))));
-
- return (theInstrPointer >= (((aMethod + (lastPointerOf(aMethod))) + BytesPerOop) - 1))
  && (theInstrPointer < (((aMethod + (numBytesOf(aMethod))) + (BaseHeaderSize)) - 1));
 }
 
@@ -29710,37 +29725,7 @@
  GIV(stackPointer) = sp;
 }
 
-
-/* Primitive. Mark the method for exception handling. The primitive must fail
- after marking the context so that the regular code is run.
- */
-
 static void
-primitiveMarkHandlerMethod(void)
-{   DECL_MAYBE_SQ_GLOBAL_STRUCT
- /* begin primitiveFail */
- if (!GIV(primFailCode)) {
- GIV(primFailCode) = 1;
- }
-}
-
-
-/* Primitive. Mark the method for exception unwinding. The primitive must
- fail after marking the context so that the regular code is run. It must
- also *not* allow a context switch.
- */
-
-static void
-primitiveMarkUnwindMethod(void)
-{   DECL_MAYBE_SQ_GLOBAL_STRUCT
- /* begin primitiveFail */
- if (!GIV(primFailCode)) {
- GIV(primFailCode) = 1;
- }
- return;
-}
-
-static void
 primitiveMaxIdentityHash(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     char *sp;
@@ -51313,7 +51298,7 @@
  rcvr1 = longAt(GIV(stackPointer) + (numArgs * BytesPerWord));
  assert(!(isOopForwarded(rcvr1)));
  if (activateCogMethod
- && (GIV(instructionPointer) >= (startOfMemory()))) {
+ && ((((usqInt)GIV(instructionPointer))) >= (startOfMemory()))) {
  /* begin iframeSavedIP:put: */
  assert(!(isMachineCodeFrame(GIV(framePointer))));
  longAtput(GIV(framePointer) + FoxIFSavedIP, GIV(instructionPointer));
@@ -52185,6 +52170,12 @@
  return (((usqInt) header) >> 19) & 0x3F;
 }
 
+
+/* Note that we accept anInstrPointer pointing to a callPrimitiveBytecode
+ at the start of a method that contains a primitive. This because methods
+ like Context(Part)>>reset have to be updated to skip the callPrimtiive
+ bytecode otherwise. */
+
 static sqInt
 validInstructionPointerinFrame(usqInt anInstrPointer, char *fp)
 {

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c 2014-09-25 23:12:18 UTC (rev 3084)
+++ branches/Cog/nsspursrc/vm/cointerp.c 2014-09-30 01:16:34 UTC (rev 3085)
@@ -1,9 +1,9 @@
 /* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
    from
- CoInterpreter VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a
+ CoInterpreter VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.885 uuid: 292f0a8d-0afa-4943-90fd-be53fb40772a " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.887 uuid: f980d45a-5622-46f6-95d9-ac8d00a34e81 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -713,8 +713,6 @@
 static void primitiveLogN(void);
 static void primitiveLowSpaceSemaphore(void);
 static void primitiveMakePoint(void);
-static void primitiveMarkHandlerMethod(void);
-static void primitiveMarkUnwindMethod(void);
 static void primitiveMaxIdentityHash(void);
 usqInt primitiveMethod(void);
 static void primitiveMillisecondClock(void);
@@ -1523,8 +1521,8 @@
 _iss sqInt trueObj;
 _iss sqInt falseObj;
 _iss sqInt remapBufferCount;
-_iss usqInt totalFreeOldSpace;
 _iss usqInt newSpaceStart;
+_iss usqInt totalFreeOldSpace;
 _iss sqInt bytesPerPage;
 _iss sqInt numSegments;
 _iss sqInt traceLogIndex;
@@ -1918,8 +1916,8 @@
  /* 195 */ primitiveFindNextUnwindContext,
  /* 196 */ primitiveTerminateTo,
  /* 197 */ primitiveFindHandlerContext,
- /* 198 */ primitiveMarkUnwindMethod,
- /* 199 */ primitiveMarkHandlerMethod,
+ /* 198 */ (void (*)(void))0,
+ /* 199 */ (void (*)(void))0,
  /* 200 */ primitiveClosureCopyWithCopiedValues,
  /* 201 */ primitiveClosureValue,
  /* 202 */ primitiveClosureValue,
@@ -2328,7 +2326,7 @@
 /*540*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
 /*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
  };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.885";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.887";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -5120,7 +5118,7 @@
  ? ((longAt(localFP + FoxMethod)) & MFMethodFlagIsBlockFlag) != 0
  : (byteAt((localFP + FoxIFrameFlags) + 3)) != 0))) {
  goto commonCallerReturn;
- goto l287;
+ goto l288;
  }
  closure = longAt(localFP + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(localFP + FoxMethod)))) < (startOfMemory())
  ? ((mframeCogMethod(localFP))->cmNumArgs)
@@ -5157,11 +5155,11 @@
  theMethod = longAt((home + (BaseHeaderSize)) + (MethodIndex << 2));
  if ((primitiveIndexOfMethodheader(theMethod, methodHeaderOf(theMethod))) == 198) {
  unwindContextOrNilOrZero = home;
- goto l289;
+ goto l290;
  }
  }
  unwindContextOrNilOrZero = ctxtOrNilOrZero;
- l289: /* end internalFindUnwindThroughContext: */;
+ l290: /* end internalFindUnwindThroughContext: */;
  if (unwindContextOrNilOrZero == GIV(nilObj)) {
 
  /* error: can't find home on chain; cannot return */
@@ -5175,10 +5173,10 @@
  : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
  assert(isContext(frameContext(localFP)));
  ourContext = longAt(localFP + FoxThisContext);
- goto l291;
+ goto l292;
  }
  ourContext = marryFrameSP(localFP, localSP);
- l291: /* end ensureFrameIsMarried:SP: */;
+ l292: /* end ensureFrameIsMarried:SP: */;
  /* begin internalPush: */
  longAtPointerput((localSP -= BytesPerOop), ourContext);
  /* begin internalPush: */
@@ -5187,7 +5185,7 @@
  GIV(argumentCount) = 1;
  goto normalSend;
  /* return self */
- goto l287;
+ goto l288;
  }
  if (unwindContextOrNilOrZero != 0) {
  /* begin internalAboutToReturn:through: */
@@ -5199,10 +5197,10 @@
  : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
  assert(isContext(frameContext(localFP)));
  ourContext1 = longAt(localFP + FoxThisContext);
- goto l288;
+ goto l289;
  }
  ourContext1 = marryFrameSP(localFP, localSP);
- l288: /* end ensureFrameIsMarried:SP: */;
+ l289: /* end ensureFrameIsMarried:SP: */;
  /* begin internalPush: */
  longAtPointerput((localSP -= BytesPerOop), ourContext1);
  /* begin internalPush: */
@@ -5213,7 +5211,7 @@
  GIV(argumentCount) = 2;
  goto normalSend;
  /* return self */
- goto l287;
+ goto l288;
  }
  contextToReturnTo = null;
  if (((longAt((home + (BaseHeaderSize)) + (SenderIndex << 2))) & 1)) {
@@ -5272,10 +5270,10 @@
  : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
  assert(isContext(frameContext(localFP)));
  ourContext2 = longAt(localFP + FoxThisContext);
- goto l290;
+ goto l291;
  }
  ourContext2 = marryFrameSP(localFP, localSP);
- l290: /* end ensureFrameIsMarried:SP: */;
+ l291: /* end ensureFrameIsMarried:SP: */;
  /* begin internalPush: */
  longAtPointerput((localSP -= BytesPerOop), ourContext2);
  /* begin internalPush: */
@@ -5284,7 +5282,7 @@
  GIV(argumentCount) = 1;
  goto normalSend;
  /* return self */
- goto l287;
+ goto l288;
  }
  }
  assert(pageListIsWellFormed());
@@ -5399,7 +5397,7 @@
  GIV(framePointer) = localFP;
 
  ceEnterCogCodePopReceiverReg();
- goto l287;
+ goto l288;
  }
  localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
  }
@@ -5417,7 +5415,7 @@
 
  /* return self */
  }
- l287: /* end case */;
+ l288: /* end case */;
  break;
  case 121:
  /* returnTrue */
@@ -5537,27 +5535,27 @@
  fp = (thePage->headFP);
  if (fp == theFP) {
  frameAbove = 0;
- goto l294;
+ goto l295;
  }
  while (((callerFP = frameCallerFP(fp))) != 0) {
  if (callerFP == theFP) {
  frameAbove = fp;
- goto l294;
+ goto l295;
  }
  fp = callerFP;
  }
  error("did not find theFP in stack page");
  frameAbove = 0;
- l294: /* end findFrameAbove:inPage: */;
+ l295: /* end findFrameAbove:inPage: */;
  /* begin newStackPage */
  lruOrFree = ((mostRecentlyUsedPage())->nextPage);
  if (isFree(lruOrFree)) {
  newPage = lruOrFree;
- goto l295;
+ goto l296;
  }
  divorceFramesIn(lruOrFree);
  newPage = lruOrFree;
- l295: /* end newStackPage */;
+ l296: /* end newStackPage */;
  assert(newPage == GIV(stackPage));
  moveFramesInthroughtoPage(thePage, frameAbove, newPage);
  markStackPageMostRecentlyUsed(newPage);
@@ -5581,7 +5579,7 @@
  longAtput((sp2 = GIV(stackPointer) - BytesPerWord), GIV(instructionPointer));
  GIV(stackPointer) = sp2;
  ceSendAborttonumArgs(longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SelectorCannotReturn << 2)), contextToReturnFrom, 1);
- goto l293;
+ goto l294;
  }
  GIV(instructionPointer) = 0;
  thePage = makeBaseFrameFor(contextToReturnTo);
@@ -5620,8 +5618,7 @@
  GIV(framePointer) = localFP;
 
  ceEnterCogCodePopReceiverReg();
- null;
- goto l293;
+ goto l294;
  }
  localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
  }
@@ -5638,9 +5635,9 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- null;
- l293: /* end baseFrameReturn */;
- goto l292;
+ /* return self */
+ l294: /* end baseFrameReturn */;
+ goto l293;
  }
  /* begin frameCallerSavedIP: */
  localIP = pointerForOop(longAt(localFP + FoxCallerSavedIP));
@@ -5669,7 +5666,7 @@
  GIV(framePointer) = localFP;
 
  ceEnterCogCodePopReceiverReg();
- goto l292;
+ goto l293;
  }
  localIP = pointerForOop(longAt(localFP + FoxIFSavedIP));
  }
@@ -5686,7 +5683,7 @@
 
  longAtPointerput(localSP, localReturnValue);
  }
- l292: /* end case */;
+ l293: /* end case */;
  break;
  case 126:
  /* dynamicSuperSendBytecode */
@@ -6019,10 +6016,10 @@
  lkupClassTag = ((tagBits & 1) != 0
  ? 1
  : tagBits);
- goto l296;
+ goto l297;
  }
  lkupClassTag = (longAt(rcvr)) & 0x3FFFFF;
- l296: /* end fetchClassTagOf: */;
+ l297: /* end fetchClassTagOf: */;
  assert(lkupClassTag != (nilObject()));
 
  commonSend:
@@ -6066,10 +6063,10 @@
  classTablePage = longAt((GIV(hiddenRootsObj) + (BaseHeaderSize)) + ((((usqInt) lkupClassTag) >> 10) << 2));
  if (classTablePage == GIV(nilObj)) {
  classOrInteger = null;
- goto l303;
+ goto l304;
  }
  classOrInteger = longAt((classTablePage + (BaseHeaderSize)) + ((lkupClassTag & ((1 << 10) - 1)) << 2));
- l303: /* end classAtIndex: */;
+ l304: /* end classAtIndex: */;
  GIV(traceLog)[GIV(traceLogIndex)] = classOrInteger;
  GIV(traceLog)[GIV(traceLogIndex) + 1] = GIV(messageSelector);
  GIV(traceLog)[GIV(traceLogIndex) + 2] = TraceIsFromInterpreter;
@@ -6096,7 +6093,7 @@
  GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod];
  primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction]));
  ok = 1;
- goto l298;
+ goto l299;
  }
 
  /* second probe */
@@ -6107,7 +6104,7 @@
  GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod];
  primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction]));
  ok = 1;
- goto l298;
+ goto l299;
  }
  probe = (((usqInt) hash) >> 2) & MethodCacheMask;
  if (((GIV(methodCache)[probe + MethodCacheSelector]) == GIV(messageSelector))
@@ -6115,10 +6112,10 @@
  GIV(newMethod) = GIV(methodCache)[probe + MethodCacheMethod];
  primitiveFunctionPointer = ((void (*)()) (GIV(methodCache)[probe + MethodCachePrimFunction]));
  ok = 1;
- goto l298;
+ goto l299;
  }
  ok = 0;
- l298: /* end inlineLookupInMethodCacheSel:classTag: */;
+ l299: /* end inlineLookupInMethodCacheSel:classTag: */;
  if (ok) {
  /* begin ifAppropriateCompileToNativeCode:selector: */
  methodHeader2 = longAt((GIV(newMethod) + (BaseHeaderSize)) + (HeaderIndex << 2));
@@ -6176,7 +6173,7 @@
  maybeFlagMethodAsInterpreted(GIV(newMethod));
  }
  }
- goto l301;
+ goto l302;
  }
  }
  /* begin classForClassTag: */
@@ -6188,10 +6185,10 @@
  classTablePage1 = longAt((GIV(hiddenRootsObj) + (BaseHeaderSize)) + ((((usqInt) lkupClassTag) >> 10) << 2));
  if (classTablePage1 == GIV(nilObj)) {
  GIV(lkupClass) = null;
- goto l297;
+ goto l298;
  }
  GIV(lkupClass) = longAt((classTablePage1 + (BaseHeaderSize)) + ((lkupClassTag & ((1 << 10) - 1)) << 2));
- l297: /* end classAtIndex: */;
+ l298: /* end classAtIndex: */;
  lookupMethodInClass(GIV(lkupClass));
  /* begin internalizeIPandSP */
  assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
@@ -6200,7 +6197,7 @@
  localFP = pointerForOop(GIV(framePointer));
  addNewMethodToCache(GIV(lkupClass));
  }
- l301: /* end internalFindNewMethod */;
+ l302: /* end internalFindNewMethod */;
  /* begin internalExecuteNewMethod */
  VM_LABEL(0internalExecuteNewMethod);
  if (primitiveFunctionPointer != 0) {
@@ -6214,31 +6211,31 @@
  if (localPrimIndex >= 264) {
  longAtPointerput(localSP, longAt(((longAtPointer(localSP)) + (BaseHeaderSize)) + ((localPrimIndex - 264) << 2)));
  1;
- goto l299;
+ goto l300;
  }
  if (localPrimIndex == 256) {
  1;
- goto l299;
+ goto l300;
  }
  if (localPrimIndex == 257) {
  longAtPointerput(localSP, GIV(trueObj));
  1;
- goto l299;
+ goto l300;
  }
  if (localPrimIndex == 258) {
  longAtPointerput(localSP, GIV(falseObj));
  1;
- goto l299;
+ goto l300;
  }
  if (localPrimIndex == 259) {
  longAtPointerput(localSP, GIV(nilObj));
  1;
- goto l299;
+ goto l300;
  }
  longAtPointerput(localSP, (((localPrimIndex - 261) << 1) | 1));
  1;
- l299: /* end internalQuickPrimitiveResponse */;
- goto l300;
+ l300: /* end internalQuickPrimitiveResponse */;
+ goto l301;
  }
  /* begin externalizeIPandSP */
  assert((((usqInt)localIP)) != (ceReturnToInterpreterPC()));
@@ -6304,7 +6301,7 @@
  returntoExecutive(popStack(), 1);
  browserPluginReturnIfNeeded();
  null;
- goto l300;
+ goto l301;
  }
  }
  if (methodHasCogMethod(GIV(newMethod))) {
@@ -6381,11 +6378,11 @@
  table = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (PrimErrTableIndex << 2));
  if (GIV(primFailCode) <= ((lastPointerOf(table)) / BytesPerWord)) {
  errorCode = longAt((table + (BaseHeaderSize)) + ((GIV(primFailCode) - 1) << 2));
- goto l302;
+ goto l303;
  }
  }
  errorCode = ((GIV(primFailCode) << 1) | 1);
- l302: /* end getErrorObjectFromPrimFailCode */;
+ l303: /* end getErrorObjectFromPrimFailCode */;
  longAtPointerput(localSP, errorCode);
  }
  GIV(primFailCode) = 0;
@@ -6409,7 +6406,7 @@
  localFP = pointerForOop(GIV(framePointer));
  }
  }
- l300: /* end internalExecuteNewMethod */;
+ l301: /* end internalExecuteNewMethod */;
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
@@ -6876,13 +6873,13 @@
  if (((newHash = (longAt(superclass + 4)) & 0x3FFFFF)) == 0) {
  if (((err = enterIntoClassTable(superclass))) != 0) {
  -err;
- goto l304;
+ goto l305;
  }
  newHash = (longAt(superclass + 4)) & 0x3FFFFF;
  assert((classAtIndex(newHash)) == superclass);
  }
  newHash;
- l304: /* end ensureBehaviorHash: */;
+ l305: /* end ensureBehaviorHash: */;
  /* begin classTagForClass: */
  assert(addressCouldBeClassObj(superclass));
  /* begin ensureBehaviorHash: */
@@ -6890,13 +6887,13 @@
  if (((newHash1 = (longAt(superclass + 4)) & 0x3FFFFF)) == 0) {
  if (((err1 = enterIntoClassTable(superclass))) != 0) {
  lkupClassTag = -err1;
- goto l305;
+ goto l306;
  }
  newHash1 = (longAt(superclass + 4)) & 0x3FFFFF;
  assert((classAtIndex(newHash1)) == superclass);
  }
  lkupClassTag = newHash1;
- l305: /* end ensureBehaviorHash: */;
+ l306: /* end ensureBehaviorHash: */;
  assert(lkupClassTag != (nilObject()));
  goto commonSend;
  }
@@ -7042,28 +7039,40 @@
  }
  break;
  case 139:
- /* pushExplicitOuterReceiverBytecode */
+ /* callPrimitiveBytecode */
  {
- sqInt anIntOop;
- sqInt litIndex;
- sqInt n;
- sqInt object;
+ sqInt byte1;
+ sqInt byte2;
+ sqInt header;
+ sqInt header1;
+ sqInt header2;
+ sqInt prim;
 
- VM_LABEL(0pushExplicitOuterReceiverBytecode);
- litIndex = byteAtPointer(++localIP);
- /* begin literal: */
- assert(GIV(method) == (iframeMethod(localFP)));
- anIntOop = longAt((GIV(method) + (BaseHeaderSize)) + ((litIndex + LiteralStart) << 2));
- n = ((anIntOop & 1)
- ? (anIntOop >> 1)
- : 0);
- /* begin fetchNextBytecode */
- currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ VM_LABEL(0callPrimitiveBytecode);
+ /* begin methodHeaderOf: */
+ assert(isCompiledMethod(GIV(method)));
+ header2 = longAt((GIV(method) + (BaseHeaderSize)) + (HeaderIndex << 2));
+ header = ((header2 & 1)
+ ? header2
+ : (assert((((usqInt)header2)) < GIV(newSpaceStart)),
+ assert((((((CogMethod *) header2))->objectHeader)) == (nullHeaderForMachineCodeMethod())),
+ ((((CogMethod *) header2))->methodHeader)));
+ if ((header & (65536 << SmallIntegerShift))
+ && (localIP == ((GIV(method) + ((LiteralStart + (literalCountOfMethodHeader(header))) * 4)) + (BaseHeaderSize)))) {
+ localIP += 3;
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- /* begin internalPush: */
- object = explicitOuterReceiverwithObjectwithMixin(n, longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)));
- longAtPointerput((localSP -= BytesPerOop), object);
+ null;
+ goto l12;
+ }
+ else {
+ goto respondToUnknownBytecode;
+ goto l12;
+ }
+
  }
+ l12: /* end case */;
  break;
  case 140:
  case 506: /*250*/
@@ -7206,10 +7215,10 @@
  : (byteAt((localFP + FoxIFrameFlags) + 2)) != 0)) {
  assert(isContext(frameContext(localFP)));
  context = longAt(localFP + FoxThisContext);
- goto l13;
+ goto l14;
  }
  context = marryFrameSP(localFP, localSP + (numCopied * BytesPerOop));
- l13: /* end ensureFrameIsMarried:SP: */;
+ l14: /* end ensureFrameIsMarried:SP: */;
  /* begin closureIn:numArgs:instructionPointer:numCopiedValues: */
  VM_LABEL(0closureInnumArgsinstructionPointernumCopiedValues);
  initialIP = ((oopForPointer(localIP)) + 2) - (GIV(method) + BaseHeaderSize);
@@ -7235,13 +7244,13 @@
  if ((GIV(freeStart) + numBytes) > (((eden()).limit))) {
  error("no room in eden for allocateSmallNewSpaceSlots:format:classIndex:");
  newClosure1 = 0;
- goto l15;
+ goto l16;
  }
  }
  long64Atput(newObj, (((((usqLong) (ClosureFirstCopiedValueIndex + numCopied))) << 56) + (3 << 24)) + ClassBlockClosureCompactIndex);
  GIV(freeStart) += numBytes;
  newClosure1 = newObj;
- l15: /* end allocateSmallNewSpaceSlots:format:classIndex: */;
+ l16: /* end allocateSmallNewSpaceSlots:format:classIndex: */;
 
  /* begin storePointerUnchecked:ofObject:withValue: */
  assert(!(isForwarded(newClosure1)));
@@ -7423,7 +7432,7 @@
  GIV(messageSelector) = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SelectorMustBeBoolean << 2));
  GIV(argumentCount) = 0;
  goto normalSend;
- goto l16;
+ goto l17;
  }
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -7431,7 +7440,7 @@
  }
  /* begin internalPop: */
  localSP += 1 * BytesPerOop;
- l16: /* end jumplfFalseBy: */;
+ l17: /* end jumplfFalseBy: */;
  }
  break;
  case 160:
@@ -7454,7 +7463,7 @@
  /* begin ifBackwardsCheckForEvents: */
  VM_LABEL(0ifBackwardsCheckForEvents);
  if (offset >= 0) {
- goto l17;
+ goto l18;
  }
  if (localSP < GIV(stackLimit)) {
  /* begin externalizeIPandSP */
@@ -7471,7 +7480,7 @@
  localSP = pointerForOop(GIV(stackPointer));
  localFP = pointerForOop(GIV(framePointer));
  if (switched) {
- goto l17;
+ goto l18;
  }
  }
  backwardJumpCountByte = byteAt(localFP + ((VMBIGENDIAN
@@ -7501,7 +7510,7 @@
  byteAtput(localFP + ((VMBIGENDIAN
  ? (FoxIFrameFlags + BytesPerWord) - 1
  : FoxIFrameFlags)), backwardJumpCountByte);
- l17: /* end ifBackwardsCheckForEvents: */;
+ l18: /* end ifBackwardsCheckForEvents: */;
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
@@ -7533,7 +7542,7 @@
  GIV(messageSelector) = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SelectorMustBeBoolean << 2));
  GIV(argumentCount) = 0;
  goto normalSend;
- goto l18;
+ goto l19;
  }
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -7541,7 +7550,7 @@
  }
  /* begin internalPop: */
  localSP += 1 * BytesPerOop;
- l18: /* end jumplfTrueBy: */;
+ l19: /* end jumplfTrueBy: */;
  }
  break;
  case 172:
@@ -7570,7 +7579,7 @@
  GIV(messageSelector) = longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SelectorMustBeBoolean << 2));
  GIV(argumentCount) = 0;
  goto normalSend;
- goto l19;
+ goto l20;
  }
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
@@ -7578,7 +7587,7 @@
  }
  /* begin internalPop: */
  localSP += 1 * BytesPerOop;
- l19: /* end jumplfFalseBy: */;
+ l20: /* end jumplfFalseBy: */;
  }
  break;
  case 176:
@@ -7608,7 +7617,7 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- goto l20;
+ goto l21;
  }
  }
  else {
@@ -7623,67 +7632,67 @@
  /* begin loadFloatOrIntFrom: */
  if ((rcvr & 1)) {
  rcvr1 = ((double) ((rcvr >> 1)) );
- goto l23;
+ goto l24;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((rcvr & 3) != 0) {
  isFloat = 0;
- goto l22;
+ goto l23;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(rcvr)));
  ccIndex = (longAt(rcvr)) & 0x3FFFFF;
  isFloat = ClassFloatCompactIndex == ccIndex;
- goto l22;
+ goto l23;
 
  isFloat = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex));
- l22: /* end is:instanceOf:compactClassIndex: */;
+ l23: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat) {
  ;
  fetchFloatAtinto(rcvr + (BaseHeaderSize), result1);
  rcvr1 = result1;
- goto l25;
+ goto l26;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  rcvr1 = 0.0;
- l25: /* end floatValueOf: */;
- l23: /* end loadFloatOrIntFrom: */;
+ l26: /* end floatValueOf: */;
+ l24: /* end loadFloatOrIntFrom: */;
  /* begin loadFloatOrIntFrom: */
  if ((arg & 1)) {
  arg1 = ((double) ((arg >> 1)) );
- goto l26;
+ goto l27;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((arg & 3) != 0) {
  isFloat1 = 0;
- goto l21;
+ goto l22;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(arg)));
  ccIndex1 = (longAt(arg)) & 0x3FFFFF;
  isFloat1 = ClassFloatCompactIndex == ccIndex1;
- goto l21;
+ goto l22;
 
  isFloat1 = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex1));
- l21: /* end is:instanceOf:compactClassIndex: */;
+ l22: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat1) {
  ;
  fetchFloatAtinto(arg + (BaseHeaderSize), result2);
  arg1 = result2;
- goto l24;
+ goto l25;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  arg1 = 0.0;
- l24: /* end floatValueOf: */;
- l26: /* end loadFloatOrIntFrom: */;
+ l25: /* end floatValueOf: */;
+ l27: /* end loadFloatOrIntFrom: */;
  if (!GIV(primFailCode)) {
  /* begin pop:thenPushFloat: */
  longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), floatObjectOf(rcvr1 + arg1));
@@ -7698,14 +7707,14 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- goto l20;
+ goto l21;
  }
  }
  GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SpecialSelectors << 2))) + (BaseHeaderSize)) + ((0 * 2) << 2));
  GIV(argumentCount) = 1;
  goto normalSend;
  }
- l20: /* end case */;
+ l21: /* end case */;
  break;
  case 177:
  /* bytecodePrimSubtract */
@@ -7734,7 +7743,7 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- goto l27;
+ goto l28;
  }
  }
  else {
@@ -7749,67 +7758,67 @@
  /* begin loadFloatOrIntFrom: */
  if ((rcvr & 1)) {
  rcvr1 = ((double) ((rcvr >> 1)) );
- goto l30;
+ goto l31;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((rcvr & 3) != 0) {
  isFloat = 0;
- goto l29;
+ goto l30;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(rcvr)));
  ccIndex = (longAt(rcvr)) & 0x3FFFFF;
  isFloat = ClassFloatCompactIndex == ccIndex;
- goto l29;
+ goto l30;
 
  isFloat = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex));
- l29: /* end is:instanceOf:compactClassIndex: */;
+ l30: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat) {
  ;
  fetchFloatAtinto(rcvr + (BaseHeaderSize), result1);
  rcvr1 = result1;
- goto l32;
+ goto l33;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  rcvr1 = 0.0;
- l32: /* end floatValueOf: */;
- l30: /* end loadFloatOrIntFrom: */;
+ l33: /* end floatValueOf: */;
+ l31: /* end loadFloatOrIntFrom: */;
  /* begin loadFloatOrIntFrom: */
  if ((arg & 1)) {
  arg1 = ((double) ((arg >> 1)) );
- goto l33;
+ goto l34;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((arg & 3) != 0) {
  isFloat1 = 0;
- goto l28;
+ goto l29;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(arg)));
  ccIndex1 = (longAt(arg)) & 0x3FFFFF;
  isFloat1 = ClassFloatCompactIndex == ccIndex1;
- goto l28;
+ goto l29;
 
  isFloat1 = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex1));
- l28: /* end is:instanceOf:compactClassIndex: */;
+ l29: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat1) {
  ;
  fetchFloatAtinto(arg + (BaseHeaderSize), result2);
  arg1 = result2;
- goto l31;
+ goto l32;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  arg1 = 0.0;
- l31: /* end floatValueOf: */;
- l33: /* end loadFloatOrIntFrom: */;
+ l32: /* end floatValueOf: */;
+ l34: /* end loadFloatOrIntFrom: */;
  if (!GIV(primFailCode)) {
  /* begin pop:thenPushFloat: */
  longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), floatObjectOf(rcvr1 - arg1));
@@ -7824,14 +7833,14 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- goto l27;
+ goto l28;
  }
  }
  GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SpecialSelectors << 2))) + (BaseHeaderSize)) + ((1 * 2) << 2));
  GIV(argumentCount) = 1;
  goto normalSend;
  }
- l27: /* end case */;
+ l28: /* end case */;
  break;
  case 178:
  /* bytecodePrimLessThan */
@@ -7863,7 +7872,7 @@
  else {
  goto booleanCheatFalse;
  }
- goto l34;
+ goto l35;
  }
  /* begin initPrimCall */
  GIV(primFailCode) = 0;
@@ -7871,67 +7880,67 @@
  /* begin loadFloatOrIntFrom: */
  if ((rcvr & 1)) {
  rcvr1 = ((double) ((rcvr >> 1)) );
- goto l37;
+ goto l38;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((rcvr & 3) != 0) {
  isFloat = 0;
- goto l36;
+ goto l37;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(rcvr)));
  ccIndex = (longAt(rcvr)) & 0x3FFFFF;
  isFloat = ClassFloatCompactIndex == ccIndex;
- goto l36;
+ goto l37;
 
  isFloat = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex));
- l36: /* end is:instanceOf:compactClassIndex: */;
+ l37: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat) {
  ;
  fetchFloatAtinto(rcvr + (BaseHeaderSize), result);
  rcvr1 = result;
- goto l39;
+ goto l40;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  rcvr1 = 0.0;
- l39: /* end floatValueOf: */;
- l37: /* end loadFloatOrIntFrom: */;
+ l40: /* end floatValueOf: */;
+ l38: /* end loadFloatOrIntFrom: */;
  /* begin loadFloatOrIntFrom: */
  if ((arg & 1)) {
  arg1 = ((double) ((arg >> 1)) );
- goto l40;
+ goto l41;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((arg & 3) != 0) {
  isFloat1 = 0;
- goto l35;
+ goto l36;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(arg)));
  ccIndex1 = (longAt(arg)) & 0x3FFFFF;
  isFloat1 = ClassFloatCompactIndex == ccIndex1;
- goto l35;
+ goto l36;
 
  isFloat1 = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex1));
- l35: /* end is:instanceOf:compactClassIndex: */;
+ l36: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat1) {
  ;
  fetchFloatAtinto(arg + (BaseHeaderSize), result1);
  arg1 = result1;
- goto l38;
+ goto l39;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  arg1 = 0.0;
- l38: /* end floatValueOf: */;
- l40: /* end loadFloatOrIntFrom: */;
+ l39: /* end floatValueOf: */;
+ l41: /* end loadFloatOrIntFrom: */;
  aBool = rcvr1 < arg1;
  if (!GIV(primFailCode)) {
  /* begin booleanCheat: */
@@ -7941,13 +7950,13 @@
  else {
  goto booleanCheatFalse;
  }
- goto l34;
+ goto l35;
  }
  GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SpecialSelectors << 2))) + (BaseHeaderSize)) + ((2 * 2) << 2));
  GIV(argumentCount) = 1;
  goto normalSend;
  }
- l34: /* end case */;
+ l35: /* end case */;
 
  booleanCheatTrue:
  /* booleanCheatTrue */
@@ -7971,7 +7980,7 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- goto l306;
+ goto l307;
  }
  if (bytecode == 172) {
 
@@ -7981,7 +7990,7 @@
  /* begin fetchNextBytecode */
  currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
 
- goto l306;
+ goto l307;
  }
  if (bytecode > 167) {
 
@@ -7992,7 +8001,7 @@
  localIP = (localIP + offset) + 1;
  currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
 
- goto l306;
+ goto l307;
  }
  }
  currentBytecode = bytecode + GIV(bytecodeSetSelector);
@@ -8000,7 +8009,7 @@
  /* begin internalPush: */
  longAtPointerput((localSP -= BytesPerOop), GIV(trueObj));
  }
- l306: /* end case */;
+ l307: /* end case */;
  break;
  case 179:
  /* bytecodePrimGreaterThan */
@@ -8032,7 +8041,7 @@
  else {
  /* goto booleanCheatFalse */
  }
- goto l41;
+ goto l42;
  }
  /* begin initPrimCall */
  GIV(primFailCode) = 0;
@@ -8040,67 +8049,67 @@
  /* begin loadFloatOrIntFrom: */
  if ((rcvr & 1)) {
  rcvr1 = ((double) ((rcvr >> 1)) );
- goto l44;
+ goto l45;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((rcvr & 3) != 0) {
  isFloat = 0;
- goto l43;
+ goto l44;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(rcvr)));
  ccIndex = (longAt(rcvr)) & 0x3FFFFF;
  isFloat = ClassFloatCompactIndex == ccIndex;
- goto l43;
+ goto l44;
 
  isFloat = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex));
- l43: /* end is:instanceOf:compactClassIndex: */;
+ l44: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat) {
  ;
  fetchFloatAtinto(rcvr + (BaseHeaderSize), result);
  rcvr1 = result;
- goto l46;
+ goto l47;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  rcvr1 = 0.0;
- l46: /* end floatValueOf: */;
- l44: /* end loadFloatOrIntFrom: */;
+ l47: /* end floatValueOf: */;
+ l45: /* end loadFloatOrIntFrom: */;
  /* begin loadFloatOrIntFrom: */
  if ((arg & 1)) {
  arg1 = ((double) ((arg >> 1)) );
- goto l47;
+ goto l48;
  }
  /* begin floatValueOf: */
  /* begin is:instanceOf:compactClassIndex: */
  if ((arg & 3) != 0) {
  isFloat1 = 0;
- goto l42;
+ goto l43;
  }
  /* begin isClassOfNonImm:equalTo:compactClassIndex: */
  assert(!(isImmediate(arg)));
  ccIndex1 = (longAt(arg)) & 0x3FFFFF;
  isFloat1 = ClassFloatCompactIndex == ccIndex1;
- goto l42;
+ goto l43;
 
  isFloat1 = (longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (ClassFloat << 2))) == (classAtIndex(ccIndex1));
- l42: /* end is:instanceOf:compactClassIndex: */;
+ l43: /* end is:instanceOf:compactClassIndex: */;
  if (isFloat1) {
  ;
  fetchFloatAtinto(arg + (BaseHeaderSize), result1);
  arg1 = result1;
- goto l45;
+ goto l46;
  }
  /* begin primitiveFail */
  if (!GIV(primFailCode)) {
  GIV(primFailCode) = 1;
  }
  arg1 = 0.0;
- l45: /* end floatValueOf: */;
- l47: /* end loadFloatOrIntFrom: */;
+ l46: /* end floatValueOf: */;
+ l48: /* end loadFloatOrIntFrom: */;
  aBool = rcvr1 > arg1;
  if (!GIV(primFailCode)) {
  /* begin booleanCheat: */
@@ -8110,13 +8119,13 @@
  else {
  goto booleanCheatFalse;
  }
- goto l41;
+ goto l42;
  }
  GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + (BaseHeaderSize)) + (SpecialSelectors << 2))) + (BaseHeaderSize)) + ((3 * 2) << 2));
  GIV(argumentCount) = 1;
  goto normalSend;
  }
- l41: /* end case */;
+ l42: /* end case */;
 
  booleanCheatFalse:
  /* booleanCheatFalse */
@@ -8140,7 +8149,7 @@
  localIP = (localIP + (bytecode - 151)) + 1;
  currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
 
- goto l307;
+ goto l308;
  }
  if (bytecode == 172) {
 
@@ -8151,14 +8160,14 @@
  localIP = (localIP + offset) + 1;
  currentBytecode = (byteAtPointer(localIP)) + GIV(bytecodeSetSelector);
 
- goto l307;
+ goto l308;
  }

@@ Diff output truncated at 50000 characters. @@