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. @@ |
Free forum by Nabble | Edit this page |