Revision: 3123 Author: eliot Date: 2014-11-03 21:35:18 -0800 (Mon, 03 Nov 2014) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.921
Spur: Fix possible forwarding of the receiver in implicit receiver sends.
Modified Paths: -------------- branches/Cog/nscogsrc/vm/cogit.c branches/Cog/nscogsrc/vm/cogit.h branches/Cog/nscogsrc/vm/cointerp.c branches/Cog/nscogsrc/vm/cointerp.h branches/Cog/nscogsrc/vm/gcc3x-cointerp.c branches/Cog/nsspursrc/vm/cogit.c branches/Cog/nsspursrc/vm/cogit.h 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/svnci branches/Cog/sistasrc/vm/cogit.c branches/Cog/sistasrc/vm/cogit.h branches/Cog/sistasrc/vm/cointerp.c branches/Cog/sistasrc/vm/cointerp.h branches/Cog/sistasrc/vm/gcc3x-cointerp.c branches/Cog/spursistasrc/vm/cogit.c branches/Cog/spursistasrc/vm/cogit.h branches/Cog/spursistasrc/vm/cointerp.c branches/Cog/spursistasrc/vm/cointerp.h branches/Cog/spursistasrc/vm/gcc3x-cointerp.c branches/Cog/spursrc/vm/cogit.c branches/Cog/spursrc/vm/cogit.h 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/cogit.c branches/Cog/src/vm/cogit.h 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/cogit.c =================================================================== --- branches/Cog/nscogsrc/vm/cogit.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nscogsrc/vm/cogit.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - StackToRegisterMappingCogit * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + StackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "StackToRegisterMappingCogit * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
Modified: branches/Cog/nscogsrc/vm/cogit.h =================================================================== --- branches/Cog/nscogsrc/vm/cogit.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nscogsrc/vm/cogit.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/nscogsrc/vm/cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nscogsrc/vm/cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -853,7 +853,7 @@ void printWronglySizedContexts(sqInt printContexts); static void restoreHeadersFromtofromandtofrom(sqInt firstIn, sqInt lastIn, sqInt hdrBaseIn, sqInt firstOut, sqInt lastOut, sqInt hdrBaseOut) NoDbgRegParms; static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms; -static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms; +static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms; static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms; static sqInt shortentoIndexableSize(sqInt obj, sqInt nSlots) NoDbgRegParms; static sqInt sizeBitsOfSafe(sqInt oop) NoDbgRegParms; @@ -2086,7 +2086,7 @@ /* 574 */ (void (*)(void))0, /* 575 */ (void (*)(void))0, 0 }; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_*_VMMaker.oscog-eem.918"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.921"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -4881,7 +4881,6 @@ GIV(framePointer) = localFP; ceEnterCogCodePopReceiverReg(); - null; goto l302; } localIP = pointerForOop(longAt(localFP + FoxIFSavedIP)); @@ -4899,7 +4898,7 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- null; + /* return self */ l302: /* end baseFrameReturn */; goto l301; } @@ -4987,7 +4986,9 @@ case 127: /* pushImplicitReceiverBytecode */ { + sqInt followedReceiver; sqInt object; + sqInt rcvr; sqInt selector;
VM_LABEL(0pushImplicitReceiverBytecode); @@ -4997,8 +4998,12 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + + followedReceiver = rcvr; /* begin internalPush: */ - object = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), selector); + object = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), selector); longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -12728,12 +12733,18 @@ /* commonSendAbsentImplicit */ { sqInt ccIndex; + sqInt followedReceiver; sqInt i; sqInt implicitReceiver; sqInt oop; + sqInt rcvr;
VM_LABEL(0commonSendAbsentImplicit); - implicitReceiver = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), GIV(messageSelector)); + /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + + followedReceiver = rcvr; + implicitReceiver = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), GIV(messageSelector)); /* begin shuffleArgumentsAndStoreAbsentReceiver: */
/* a.k.a. self internalPush: anything */ @@ -36634,15 +36645,17 @@ sqInt header1; sqInt header2; sqInt header3; + sqInt header4; usqInt lastWord; sqInt newFreeChunk; sqInt newOop; - usqInt next; + sqInt next; sqInt oop; sqInt realHeader; sqInt sz; sqInt sz1; sqInt sz2; + sqInt sz3; sqInt target; usqInt w;
@@ -36653,7 +36666,21 @@ /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & MarkBit) == 0) { - next = ((sqInt) (objectAfter(oop))); + /* begin objectAfter: */ + if (!(asserta(oopisLessThan(oop, GIV(freeStart))))) { + error("no objects after the end of memory"); + } + if (((longAt(oop)) & TypeMask) == HeaderTypeFree) { + sz2 = (longAt(oop)) & AllButTypeMask; + } + else { + /* begin sizeBitsOf: */ + header3 = longAt(oop); + sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + ? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask + : header3 & SizeMask); + } + next = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]); goto l1; } fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1; @@ -36668,7 +36695,7 @@ else { sz1 = realHeader & SizeMask; } - next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]))); + next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]); l1: /* end objectAfterWhileForwarding: */; if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
@@ -36722,18 +36749,18 @@ } /* begin safeObjectAfter: */ if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) { - sz2 = (longAt(newFreeChunk)) & AllButTypeMask; + sz3 = (longAt(newFreeChunk)) & AllButTypeMask; } else { /* begin sizeBitsOf: */ - header3 = longAt(newFreeChunk); - sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + header4 = longAt(newFreeChunk); + sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass ? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask - : header3 & SizeMask); + : header4 & SizeMask); } - next = ((((usqInt)(newFreeChunk + sz2))) >= GIV(freeStart) + next = ((((usqInt)(newFreeChunk + sz3))) >= GIV(freeStart) ? GIV(freeStart) - : (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask])); + : (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask])); assert((next == GIV(freeStart)) || (next == (oopFromChunk(GIV(compEnd))))); if (next == GIV(freeStart)) { @@ -38609,7 +38636,7 @@ given object or free chunk in memory. Return freeStart when enumeration is complete. This is for assertion checking only. */
-static usqInt +static sqInt safeObjectAfter(sqInt oop) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt header;
Modified: branches/Cog/nscogsrc/vm/cointerp.h =================================================================== --- branches/Cog/nscogsrc/vm/cointerp.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nscogsrc/vm/cointerp.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -2,11 +2,11 @@
/* Automatically generated by - CCodeGeneratorGlobalStructure * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -856,7 +856,7 @@ void printWronglySizedContexts(sqInt printContexts); static void restoreHeadersFromtofromandtofrom(sqInt firstIn, sqInt lastIn, sqInt hdrBaseIn, sqInt firstOut, sqInt lastOut, sqInt hdrBaseOut) NoDbgRegParms; static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms; -static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms; +static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms; static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms; static sqInt shortentoIndexableSize(sqInt obj, sqInt nSlots) NoDbgRegParms; static sqInt sizeBitsOfSafe(sqInt oop) NoDbgRegParms; @@ -2089,7 +2089,7 @@ /* 574 */ (void (*)(void))0, /* 575 */ (void (*)(void))0, 0 }; -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_*_VMMaker.oscog-eem.918"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.921"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -4890,7 +4890,6 @@ GIV(framePointer) = localFP; ceEnterCogCodePopReceiverReg(); - null; goto l302; } localIP = pointerForOop(longAt(localFP + FoxIFSavedIP)); @@ -4908,7 +4907,7 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
- null; + /* return self */ l302: /* end baseFrameReturn */; goto l301; } @@ -4996,7 +4995,9 @@ CASE(127) /* pushImplicitReceiverBytecode */ { + sqInt followedReceiver; sqInt object; + sqInt rcvr; sqInt selector;
VM_LABEL(0pushImplicitReceiverBytecode); @@ -5006,8 +5007,12 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + + followedReceiver = rcvr; /* begin internalPush: */ - object = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), selector); + object = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), selector); longAtPointerput((localSP -= BytesPerOop), object); } BREAK; @@ -12737,12 +12742,18 @@ /* commonSendAbsentImplicit */ { sqInt ccIndex; + sqInt followedReceiver; sqInt i; sqInt implicitReceiver; sqInt oop; + sqInt rcvr;
VM_LABEL(0commonSendAbsentImplicit); - implicitReceiver = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), GIV(messageSelector)); + /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + + followedReceiver = rcvr; + implicitReceiver = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), GIV(messageSelector)); /* begin shuffleArgumentsAndStoreAbsentReceiver: */
/* a.k.a. self internalPush: anything */ @@ -36643,15 +36654,17 @@ sqInt header1; sqInt header2; sqInt header3; + sqInt header4; usqInt lastWord; sqInt newFreeChunk; sqInt newOop; - usqInt next; + sqInt next; sqInt oop; sqInt realHeader; sqInt sz; sqInt sz1; sqInt sz2; + sqInt sz3; sqInt target; usqInt w;
@@ -36662,7 +36675,21 @@ /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & MarkBit) == 0) { - next = ((sqInt) (objectAfter(oop))); + /* begin objectAfter: */ + if (!(asserta(oopisLessThan(oop, GIV(freeStart))))) { + error("no objects after the end of memory"); + } + if (((longAt(oop)) & TypeMask) == HeaderTypeFree) { + sz2 = (longAt(oop)) & AllButTypeMask; + } + else { + /* begin sizeBitsOf: */ + header3 = longAt(oop); + sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + ? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask + : header3 & SizeMask); + } + next = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]); goto l1; } fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1; @@ -36677,7 +36704,7 @@ else { sz1 = realHeader & SizeMask; } - next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]))); + next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]); l1: /* end objectAfterWhileForwarding: */; if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
@@ -36731,18 +36758,18 @@ } /* begin safeObjectAfter: */ if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) { - sz2 = (longAt(newFreeChunk)) & AllButTypeMask; + sz3 = (longAt(newFreeChunk)) & AllButTypeMask; } else { /* begin sizeBitsOf: */ - header3 = longAt(newFreeChunk); - sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + header4 = longAt(newFreeChunk); + sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass ? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask - : header3 & SizeMask); + : header4 & SizeMask); } - next = ((((usqInt)(newFreeChunk + sz2))) >= GIV(freeStart) + next = ((((usqInt)(newFreeChunk + sz3))) >= GIV(freeStart) ? GIV(freeStart) - : (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask])); + : (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask])); assert((next == GIV(freeStart)) || (next == (oopFromChunk(GIV(compEnd))))); if (next == GIV(freeStart)) { @@ -38618,7 +38645,7 @@ given object or free chunk in memory. Return freeStart when enumeration is complete. This is for assertion checking only. */
-static usqInt +static sqInt safeObjectAfter(sqInt oop) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt header;
Modified: branches/Cog/nsspursrc/vm/cogit.c =================================================================== --- branches/Cog/nsspursrc/vm/cogit.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspursrc/vm/cogit.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - StackToRegisterMappingCogit * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + StackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "StackToRegisterMappingCogit * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 " __DATE__ ; +static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
@@ -873,6 +873,7 @@ static sqInt genConvertCharacterToCodeInReg(sqInt reg) NoDbgRegParms; static sqInt genConvertIntegerToCharacterInReg(sqInt reg) NoDbgRegParms; static sqInt genEnsureObjInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms; +static sqInt genEnsureObjInRegNotForwardedscratchRegupdatingMwr(sqInt reg, sqInt scratch, sqInt offset, sqInt baseReg) NoDbgRegParms; static sqInt genEnsureOopInRegNotForwardedscratchReg(sqInt reg, sqInt scratch) NoDbgRegParms; static void generateObjectRepresentationTrampolines(void); static sqInt genGetActiveContextNumArgslargeinBlock(sqInt numArgs, sqInt isLargeContext, sqInt isInBlock) NoDbgRegParms; @@ -11209,6 +11210,7 @@ genoperandoperand(MoveRR, TempReg, ReceiverResultReg); jmpTarget(jumpItsTheReceiverStupid, gRetN(0)); jmpTarget(jumpMiss, gLabel()); + genEnsureObjInRegNotForwardedscratchRegupdatingMwr(ReceiverResultReg, TempReg, FoxMFReceiver, FPReg); ceImplicitReceiverTrampoline = genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceImplicitReceiverForreceivercache, "ceImplicitReceiverTrampoline", 3, SendNumArgsReg, ReceiverResultReg, Arg1Reg, null, 0, 1, ReceiverResultReg, 1);
} @@ -17632,6 +17634,49 @@ }
+/* Make sure that the object in reg is not forwarded, and update the field + reg[offset] is + updated if the object in reg is forwarded. + Use the fact that isForwardedObjectClassIndexPun is a power of two to save + an instruction. */ + +static sqInt +genEnsureObjInRegNotForwardedscratchRegupdatingMwr(sqInt reg, sqInt scratch, sqInt offset, sqInt baseReg) +{ + AbstractInstruction *imm; + AbstractInstruction *loop; + AbstractInstruction *ok; + sqInt quickConstant; + + assert(reg != scratch); + /* begin Label */ + loop = genoperandoperand(Label, (labelCounter += 1), bytecodePC); + /* begin MoveR:R: */ + genoperandoperand(MoveRR, reg, scratch); + + /* notionally + self genGetClassIndexOfNonImm: reg into: scratch. + cogit CmpCq: objectMemory isForwardedObjectClassIndexPun R: TempReg. + but the following is an instruction shorter: */ + + imm = genJumpImmediateInScratchReg(scratch); + /* begin MoveMw:r:R: */ + genoperandoperandoperand(MoveMwrR, 0, reg, scratch); + /* begin AndCq:R: */ + quickConstant = (classIndexMask()) - (isForwardedObjectClassIndexPun()); + genoperandoperand(AndCqR, quickConstant, scratch); + /* begin JumpNonZero: */ + ok = genoperand(JumpNonZero, ((sqInt)0)); + genLoadSlotsourceRegdestReg(0, reg, reg); + /* begin MoveR:Mw:r: */ + genoperandoperandoperand(MoveRMwr, reg, offset, baseReg); + /* begin Jump: */ + genoperand(Jump, ((sqInt)loop)); + jmpTarget(ok, jmpTarget(imm, gLabel())); + return 0; +} + + /* Make sure that the oop in reg is not forwarded. */
static sqInt
Modified: branches/Cog/nsspursrc/vm/cogit.h =================================================================== --- branches/Cog/nsspursrc/vm/cogit.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspursrc/vm/cogit.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator * VMMaker.oscog-eem.918 uuid: 17402dc7-cd8d-4656-8ec9-a74c22c85ac8 + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/nsspursrc/vm/cointerp.c =================================================================== --- branches/Cog/nsspursrc/vm/cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspursrc/vm/cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -2335,7 +2335,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.920"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.921"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -5784,7 +5784,10 @@ case 127: /* pushImplicitReceiverBytecode */ { + sqInt followedReceiver; sqInt object; + sqInt rcvr; + sqInt referent; sqInt selector;
VM_LABEL(0pushImplicitReceiverBytecode); @@ -5794,8 +5797,23 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxIFReceiver, rcvr); + } + followedReceiver = rcvr; /* begin internalPush: */ - object = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), selector); + object = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), selector); longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -14533,13 +14551,31 @@ commonSendAbsentImplicit: /* commonSendAbsentImplicit */ { + sqInt followedReceiver; sqInt i; sqInt implicitReceiver; sqInt oop; + sqInt rcvr; + sqInt referent; sqInt tagBits;
VM_LABEL(0commonSendAbsentImplicit); - implicitReceiver = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), GIV(messageSelector)); + /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxIFReceiver, rcvr); + } + followedReceiver = rcvr; + implicitReceiver = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), GIV(messageSelector)); /* begin shuffleArgumentsAndStoreAbsentReceiver: */
/* a.k.a. self internalPush: anything */
Modified: branches/Cog/nsspursrc/vm/cointerp.h =================================================================== --- branches/Cog/nsspursrc/vm/cointerp.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspursrc/vm/cointerp.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -2,11 +2,11 @@
/* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -2338,7 +2338,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.920"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.921"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -5793,7 +5793,10 @@ CASE(127) /* pushImplicitReceiverBytecode */ { + sqInt followedReceiver; sqInt object; + sqInt rcvr; + sqInt referent; sqInt selector;
VM_LABEL(0pushImplicitReceiverBytecode); @@ -5803,8 +5806,23 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxIFReceiver, rcvr); + } + followedReceiver = rcvr; /* begin internalPush: */ - object = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), selector); + object = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), selector); longAtPointerput((localSP -= BytesPerOop), object); } BREAK; @@ -14542,13 +14560,31 @@ commonSendAbsentImplicit: /* commonSendAbsentImplicit */ { + sqInt followedReceiver; sqInt i; sqInt implicitReceiver; sqInt oop; + sqInt rcvr; + sqInt referent; sqInt tagBits;
VM_LABEL(0commonSendAbsentImplicit); - implicitReceiver = implicitReceiverFormixinimplementing(longAt(localFP + FoxIFReceiver), methodClassOf(GIV(method)), GIV(messageSelector)); + /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxIFReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxIFReceiver, rcvr); + } + followedReceiver = rcvr; + implicitReceiver = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), GIV(messageSelector)); /* begin shuffleArgumentsAndStoreAbsentReceiver: */
/* a.k.a. self internalPush: anything */
Modified: branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c =================================================================== --- branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -2,11 +2,11 @@
/* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - StackInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + StackInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -2084,7 +2084,7 @@ 0 }; char * breakSelector; sqInt breakSelectorLength = -1; -const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.920"; +const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.921"; volatile int sendTrace; sqInt suppressHeartbeatFlag;
@@ -5381,7 +5381,10 @@ CASE(127) /* pushImplicitReceiverBytecode */ { + sqInt followedReceiver; sqInt object; + sqInt rcvr; + sqInt referent; sqInt selector;
VM_LABEL(0pushImplicitReceiverBytecode); @@ -5391,8 +5394,23 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxReceiver, rcvr); + } + followedReceiver = rcvr; /* begin internalPush: */ - object = implicitReceiverFormixinimplementing(longAt(localFP + FoxReceiver), methodClassOf(GIV(method)), selector); + object = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), selector); longAtPointerput((localSP -= BytesPerOop), object); } BREAK; @@ -13816,13 +13834,31 @@ commonSendAbsentImplicit: /* commonSendAbsentImplicit */ { + sqInt followedReceiver; sqInt i; sqInt implicitReceiver; sqInt oop; + sqInt rcvr; + sqInt referent; sqInt tagBits;
VM_LABEL(0commonSendAbsentImplicit); - implicitReceiver = implicitReceiverFormixinimplementing(longAt(localFP + FoxReceiver), methodClassOf(GIV(method)), GIV(messageSelector)); + /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxReceiver, rcvr); + } + followedReceiver = rcvr; + implicitReceiver = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), GIV(messageSelector)); /* begin shuffleArgumentsAndStoreAbsentReceiver: */
/* a.k.a. self internalPush: anything */
Modified: branches/Cog/nsspurstacksrc/vm/interp.c =================================================================== --- branches/Cog/nsspurstacksrc/vm/interp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/nsspurstacksrc/vm/interp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - StackInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + StackInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -2081,7 +2081,7 @@ 0 }; char * breakSelector; sqInt breakSelectorLength = -1; -const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.920"; +const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.921"; volatile int sendTrace; sqInt suppressHeartbeatFlag;
@@ -5372,7 +5372,10 @@ case 127: /* pushImplicitReceiverBytecode */ { + sqInt followedReceiver; sqInt object; + sqInt rcvr; + sqInt referent; sqInt selector;
VM_LABEL(0pushImplicitReceiverBytecode); @@ -5382,8 +5385,23 @@ /* begin fetchNextBytecode */ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+ /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxReceiver, rcvr); + } + followedReceiver = rcvr; /* begin internalPush: */ - object = implicitReceiverFormixinimplementing(longAt(localFP + FoxReceiver), methodClassOf(GIV(method)), selector); + object = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), selector); longAtPointerput((localSP -= BytesPerOop), object); } break; @@ -13807,13 +13825,31 @@ commonSendAbsentImplicit: /* commonSendAbsentImplicit */ { + sqInt followedReceiver; sqInt i; sqInt implicitReceiver; sqInt oop; + sqInt rcvr; + sqInt referent; sqInt tagBits;
VM_LABEL(0commonSendAbsentImplicit); - implicitReceiver = implicitReceiverFormixinimplementing(longAt(localFP + FoxReceiver), methodClassOf(GIV(method)), GIV(messageSelector)); + /* begin internalFollowedReceiver */ + rcvr = longAt(localFP + FoxReceiver); + if (((rcvr & 3) == 0) + && (((longAt(rcvr)) & 0x3FFFFF) == 8)) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(rcvr)); + referent = longAt((rcvr + BaseHeaderSize) + (0 << 2)); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << 2)); + } + rcvr = referent; + longAtput(localFP + FoxReceiver, rcvr); + } + followedReceiver = rcvr; + implicitReceiver = implicitReceiverFormixinimplementing(followedReceiver, methodClassOf(GIV(method)), GIV(messageSelector)); /* begin shuffleArgumentsAndStoreAbsentReceiver: */
/* a.k.a. self internalPush: anything */
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h ___________________________________________________________________ Modified: checkindate - Mon Nov 3 15:51:59 PST 2014 + Mon Nov 3 21:34:53 PST 2014
Modified: branches/Cog/scripts/svnci =================================================================== --- branches/Cog/scripts/svnci 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/scripts/svnci 2014-11-04 05:35:18 UTC (rev 3123) @@ -2,5 +2,7 @@ # checkin script for subverison that serves to cause # platforms/Cross/vm/sqSCCSVersion.h to be checked-in so that its version # info reflects that of the current check-in. +`dirname $0`/revertUnchangedPlugins +`dirname $0`/revertUnchangedPlugins nscogsrc/plugins svn propset checkindate "`date`" platforms/Cross/vm/sqSCCSVersion.h svn ci
Modified: branches/Cog/sistasrc/vm/cogit.c =================================================================== --- branches/Cog/sistasrc/vm/cogit.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/sistasrc/vm/cogit.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - SistaStackToRegisterMappingCogit VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + SistaStackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
Modified: branches/Cog/sistasrc/vm/cogit.h =================================================================== --- branches/Cog/sistasrc/vm/cogit.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/sistasrc/vm/cogit.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/sistasrc/vm/cointerp.c =================================================================== --- branches/Cog/sistasrc/vm/cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/sistasrc/vm/cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -852,7 +852,7 @@ void printWronglySizedContexts(sqInt printContexts); static void restoreHeadersFromtofromandtofrom(sqInt firstIn, sqInt lastIn, sqInt hdrBaseIn, sqInt firstOut, sqInt lastOut, sqInt hdrBaseOut) NoDbgRegParms; static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms; -static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms; +static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms; static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms; static sqInt shortentoIndexableSize(sqInt obj, sqInt nSlots) NoDbgRegParms; static sqInt sizeBitsOfSafe(sqInt oop) NoDbgRegParms; @@ -2084,7 +2084,7 @@ /* 574 */ (void (*)(void))0, /* 575 */ (void (*)(void))0, 0 }; -const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.920]"; +const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.921]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -36707,15 +36707,17 @@ sqInt header1; sqInt header2; sqInt header3; + sqInt header4; usqInt lastWord; sqInt newFreeChunk; sqInt newOop; - usqInt next; + sqInt next; sqInt oop; sqInt realHeader; sqInt sz; sqInt sz1; sqInt sz2; + sqInt sz3; sqInt target; usqInt w;
@@ -36726,7 +36728,21 @@ /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & MarkBit) == 0) { - next = ((sqInt) (objectAfter(oop))); + /* begin objectAfter: */ + if (!(asserta(oopisLessThan(oop, GIV(freeStart))))) { + error("no objects after the end of memory"); + } + if (((longAt(oop)) & TypeMask) == HeaderTypeFree) { + sz2 = (longAt(oop)) & AllButTypeMask; + } + else { + /* begin sizeBitsOf: */ + header3 = longAt(oop); + sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + ? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask + : header3 & SizeMask); + } + next = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]); goto l1; } fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1; @@ -36741,7 +36757,7 @@ else { sz1 = realHeader & SizeMask; } - next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]))); + next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]); l1: /* end objectAfterWhileForwarding: */; if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
@@ -36795,18 +36811,18 @@ } /* begin safeObjectAfter: */ if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) { - sz2 = (longAt(newFreeChunk)) & AllButTypeMask; + sz3 = (longAt(newFreeChunk)) & AllButTypeMask; } else { /* begin sizeBitsOf: */ - header3 = longAt(newFreeChunk); - sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + header4 = longAt(newFreeChunk); + sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass ? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask - : header3 & SizeMask); + : header4 & SizeMask); } - next = ((((usqInt)(newFreeChunk + sz2))) >= GIV(freeStart) + next = ((((usqInt)(newFreeChunk + sz3))) >= GIV(freeStart) ? GIV(freeStart) - : (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask])); + : (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask])); assert((next == GIV(freeStart)) || (next == (oopFromChunk(GIV(compEnd))))); if (next == GIV(freeStart)) { @@ -38682,7 +38698,7 @@ given object or free chunk in memory. Return freeStart when enumeration is complete. This is for assertion checking only. */
-static usqInt +static sqInt safeObjectAfter(sqInt oop) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt header;
Modified: branches/Cog/sistasrc/vm/cointerp.h =================================================================== --- branches/Cog/sistasrc/vm/cointerp.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/sistasrc/vm/cointerp.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/sistasrc/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/sistasrc/vm/gcc3x-cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/sistasrc/vm/gcc3x-cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -2,11 +2,11 @@
/* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -855,7 +855,7 @@ void printWronglySizedContexts(sqInt printContexts); static void restoreHeadersFromtofromandtofrom(sqInt firstIn, sqInt lastIn, sqInt hdrBaseIn, sqInt firstOut, sqInt lastOut, sqInt hdrBaseOut) NoDbgRegParms; static void runLeakCheckerForFullGC(sqInt fullGCFlag) NoDbgRegParms; -static usqInt safeObjectAfter(sqInt oop) NoDbgRegParms; +static sqInt safeObjectAfter(sqInt oop) NoDbgRegParms; static sqInt safePrintStringOf(sqInt oop) NoDbgRegParms; static sqInt shortentoIndexableSize(sqInt obj, sqInt nSlots) NoDbgRegParms; static sqInt sizeBitsOfSafe(sqInt oop) NoDbgRegParms; @@ -2087,7 +2087,7 @@ /* 574 */ (void (*)(void))0, /* 575 */ (void (*)(void))0, 0 }; -const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.920]"; +const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.921]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -36716,15 +36716,17 @@ sqInt header1; sqInt header2; sqInt header3; + sqInt header4; usqInt lastWord; sqInt newFreeChunk; sqInt newOop; - usqInt next; + sqInt next; sqInt oop; sqInt realHeader; sqInt sz; sqInt sz1; sqInt sz2; + sqInt sz3; sqInt target; usqInt w;
@@ -36735,7 +36737,21 @@ /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & MarkBit) == 0) { - next = ((sqInt) (objectAfter(oop))); + /* begin objectAfter: */ + if (!(asserta(oopisLessThan(oop, GIV(freeStart))))) { + error("no objects after the end of memory"); + } + if (((longAt(oop)) & TypeMask) == HeaderTypeFree) { + sz2 = (longAt(oop)) & AllButTypeMask; + } + else { + /* begin sizeBitsOf: */ + header3 = longAt(oop); + sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + ? (longAt(oop - (BytesPerWord * 2))) & LongSizeMask + : header3 & SizeMask); + } + next = (oop + sz2) + (headerTypeBytes[(longAt(oop + sz2)) & TypeMask]); goto l1; } fwdBlock1 = (header2 & AllButMarkBitAndTypeMask) << 1; @@ -36750,7 +36766,7 @@ else { sz1 = realHeader & SizeMask; } - next = ((sqInt) ((oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]))); + next = (oop + sz1) + (headerTypeBytes[(longAt(oop + sz1)) & TypeMask]); l1: /* end objectAfterWhileForwarding: */; if (!(((longAt(oop)) & TypeMask) == HeaderTypeFree)) {
@@ -36804,18 +36820,18 @@ } /* begin safeObjectAfter: */ if (((longAt(newFreeChunk)) & TypeMask) == HeaderTypeFree) { - sz2 = (longAt(newFreeChunk)) & AllButTypeMask; + sz3 = (longAt(newFreeChunk)) & AllButTypeMask; } else { /* begin sizeBitsOf: */ - header3 = longAt(newFreeChunk); - sz2 = ((header3 & TypeMask) == HeaderTypeSizeAndClass + header4 = longAt(newFreeChunk); + sz3 = ((header4 & TypeMask) == HeaderTypeSizeAndClass ? (longAt(newFreeChunk - (BytesPerWord * 2))) & LongSizeMask - : header3 & SizeMask); + : header4 & SizeMask); } - next = ((((usqInt)(newFreeChunk + sz2))) >= GIV(freeStart) + next = ((((usqInt)(newFreeChunk + sz3))) >= GIV(freeStart) ? GIV(freeStart) - : (newFreeChunk + sz2) + (headerTypeBytes[(longAt(newFreeChunk + sz2)) & TypeMask])); + : (newFreeChunk + sz3) + (headerTypeBytes[(longAt(newFreeChunk + sz3)) & TypeMask])); assert((next == GIV(freeStart)) || (next == (oopFromChunk(GIV(compEnd))))); if (next == GIV(freeStart)) { @@ -38691,7 +38707,7 @@ given object or free chunk in memory. Return freeStart when enumeration is complete. This is for assertion checking only. */
-static usqInt +static sqInt safeObjectAfter(sqInt oop) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt header;
Modified: branches/Cog/spursistasrc/vm/cogit.c =================================================================== --- branches/Cog/spursistasrc/vm/cogit.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/spursistasrc/vm/cogit.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - SistaStackToRegisterMappingCogit VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + SistaStackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__cogitBuildInfo = __buildInfo;
Modified: branches/Cog/spursistasrc/vm/cogit.h =================================================================== --- branches/Cog/spursistasrc/vm/cogit.h 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/spursistasrc/vm/cogit.h 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGenerator VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGenerator VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */
Modified: branches/Cog/spursistasrc/vm/cointerp.c =================================================================== --- branches/Cog/spursistasrc/vm/cointerp.c 2014-11-03 23:52:54 UTC (rev 3122) +++ branches/Cog/spursistasrc/vm/cointerp.c 2014-11-04 05:35:18 UTC (rev 3123) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 from - CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c + CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.920 uuid: cfdfcd30-b5f8-4c49-a6b4-2c55bd7a3b6c " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.921 uuid: ab06d6ee-a8c8-47db-80cc-7530c9a4b945 " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -2333,7 +2333,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 = "Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.920]"; +const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.921]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ Diff output truncated at 50000 characters. @@
vm-dev@lists.squeakfoundation.org