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

commits at squeakvm.org commits at squeakvm.org
Tue Sep 30 01:16:36 UTC 2014


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


More information about the Vm-dev mailing list