[Vm-dev] [commit][3123] CogVM source as per VMMaker.oscog-eem.921
commits at squeakvm.org
commits at squeakvm.org
Tue Nov 4 05:35:21 UTC 2014
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. @@
More information about the Vm-dev
mailing list