[Vm-dev] [commit][3236] CogVM source as per VMMaker.oscog-eem.1029
commits at squeakvm.org
commits at squeakvm.org
Thu Jan 29 22:35:54 UTC 2015
Revision: 3236
Author: eliot
Date: 2015-01-29 14:35:45 -0800 (Thu, 29 Jan 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1029
Spur:
Make postBecomeAction's stack sweep only occur in Spur (fix regression).
Refactor so that the scan is not inlined. Don't assume newMethod is
non-immediate in post-become actions.
Fix stack adjust slip in primitiveSmallFloatTimesTwoPower
Make ensureBehaviorHash: fail for uninitialized
behaviours and hence fix the Behavior basicNew basicNew hang.
Fix word size assumption in assert in withoutSmallIntegerTags:
LargeIntegersPlugin:
Remove/fix assumption of 32-bit digit length in normalization routines.
Modified Paths:
--------------
branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/cointerp.h
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/nsspursrc/vm/cointerp.c
branches/Cog/nsspursrc/vm/cointerp.h
branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
branches/Cog/nsspurstacksrc/vm/interp.c
branches/Cog/sistasrc/vm/cointerp.c
branches/Cog/sistasrc/vm/cointerp.h
branches/Cog/sistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursistasrc/vm/cointerp.c
branches/Cog/spursistasrc/vm/cointerp.h
branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursrc/vm/cointerp.c
branches/Cog/spursrc/vm/cointerp.h
branches/Cog/spursrc/vm/gcc3x-cointerp.c
branches/Cog/spurstack64src/vm/gcc3x-interp.c
branches/Cog/spurstack64src/vm/interp.c
branches/Cog/spurstacksrc/vm/gcc3x-interp.c
branches/Cog/spurstacksrc/vm/interp.c
branches/Cog/src/plugins/LargeIntegers/LargeIntegers.c
branches/Cog/src/vm/cointerp.c
branches/Cog/src/vm/cointerp.h
branches/Cog/src/vm/cointerpmt.c
branches/Cog/src/vm/cointerpmt.h
branches/Cog/src/vm/gcc3x-cointerp.c
branches/Cog/src/vm/gcc3x-cointerpmt.c
branches/Cog/stacksrc/vm/gcc3x-interp.c
branches/Cog/stacksrc/vm/interp.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c
===================================================================
--- branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c 2015-01-25 22:39:42 UTC (rev 3235)
+++ branches/Cog/nscogsrc/plugins/LargeIntegers/LargeIntegers.c 2015-01-29 22:35:45 UTC (rev 3236)
@@ -1,9 +1,9 @@
/* Automatically generated by
- SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d
+ SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.1028 uuid: 19752f44-5207-45a2-9930-ae424e662f66
from
- LargeIntegersPlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d
+ LargeIntegersPlugin VMMaker.oscog-eem.1028 uuid: 19752f44-5207-45a2-9930-ae424e662f66
*/
-static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.983 uuid: 4cdca841-6318-4c49-95de-8c47d0d7e91d " __DATE__ ;
+static char __buildInfo[] = "LargeIntegersPlugin VMMaker.oscog-eem.1028 uuid: 19752f44-5207-45a2-9930-ae424e662f66 " __DATE__ ;
@@ -173,9 +173,9 @@
struct VirtualMachine* interpreterProxy;
static const char *moduleName =
#ifdef SQUEAK_BUILTIN_PLUGIN
- "LargeIntegers v1.5 VMMaker.oscog-eem.983 (i)"
+ "LargeIntegers v1.5 VMMaker.oscog-eem.1028 (i)"
#else
- "LargeIntegers v1.5 VMMaker.oscog-eem.983 (e)"
+ "LargeIntegers v1.5 VMMaker.oscog-eem.1028 (e)"
#endif
;
static const int orOpIndex = 1;
@@ -2170,7 +2170,9 @@
/* SmallInteger minVal digitLength */
- sLen = 4;
+ sLen = ((MinSmallInteger) < -1073741824
+ ? 8
+ : 4);
if (len <= sLen) {
/* SmallInteger minVal */
@@ -2189,8 +2191,7 @@
}
for (i = 1; i <= sLen; i += 1) {
- /* If all digits same, then = minVal (sr: minVal digits 1 to 3 are
- 0) */
+ /* If all digits same, then = minVal (sr: minVal digits 1 to 3 are 0) */
if (!((digitOfBytesat(aLargeNegativeInteger, i)) == (cDigitOfCSIat(minVal, i)))) {
@@ -2243,10 +2244,9 @@
if (len == 0) {
return integerObjectOf(0);
}
-
- /* SmallInteger maxVal digitLength. */
-
- sLen = BytesPerOop;
+ sLen = ((MinSmallInteger) > 0x3FFFFFFF
+ ? 8
+ : 4);
if ((len <= sLen)
&& ((digitOfBytesat(aLargePositiveInteger, sLen)) <= (cDigitOfCSIat(MaxSmallInteger, sLen)))) {
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2015-01-25 22:39:42 UTC (rev 3235)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2015-01-29 22:35:45 UTC (rev 3236)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
from
- CoInterpreter VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CoInterpreter VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -111,8 +111,6 @@
#define AtCacheSize 2
#define AtCacheTotalSize 64
#define AtPutBase 32
-#define BecameActiveClassFlag 8
-#define BecameCompiledMethodFlag 2
#define Byte0Mask 0xFF
#define Byte1Mask 0xFF00
#define Byte1Shift 8
@@ -447,7 +445,6 @@
static sqInt externalInstVarofContext(sqInt offset, sqInt aContext) NoDbgRegParms;
static void findNewMethodInClassTag(sqInt classTagArg) NoDbgRegParms;
sqInt flushExternalPrimitiveOf(sqInt methodObj);
-static void followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags) NoDbgRegParms;
void forceInterruptCheckFromHeartbeat(void);
static sqInt frameCallerContext(char *theFP) NoDbgRegParms;
static sqInt frameCallerContextput(char *theFP, sqInt aValue) NoDbgRegParms;
@@ -1048,6 +1045,7 @@
sqInt copiedValueCountOfClosure(sqInt closurePointer);
sqInt copyBits(void);
sqInt copyBitsFromtoat(sqInt x0, sqInt x1, sqInt y);
+static sqInt couldBeProcess(sqInt oop) NoDbgRegParms NeverInline;
static void cr(void);
static void createActualMessageTo(sqInt lookupClass) NoDbgRegParms;
static sqInt defaultNumStackPages(void);
@@ -1206,7 +1204,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(sqInt frameOrContext);
+sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -1362,14 +1360,14 @@
_iss sqInt numStackPages;
_iss sqInt tempOop;
_iss sqInt needGCFlag;
-_iss sqInt profileProcess;
_iss sqLong nextProfileTick;
_iss sqInt jmpDepth;
_iss sqInt longRunningPrimitiveCheckSemaphore;
+_iss sqInt profileProcess;
_iss sqInt profileSemaphore;
-_iss sqInt profileMethod;
_iss usqInt fwdTableNext;
_iss sqInt longRunningPrimitiveCheckMethod;
+_iss sqInt profileMethod;
_iss usqInt compStart;
_iss sqInt extraRootCount;
_iss sqInt statGrowMemory;
@@ -1458,8 +1456,8 @@
_iss sqInt overflowLimit;
_iss StackPage * overflowedPage;
_iss sqInt the2ndUnknownShort;
-_iss long methodCache[MethodCacheSize + 1 /* 4097 */];
_iss sqInt atCache[AtCacheTotalSize + 1 /* 65 */];
+_iss long methodCache[MethodCacheSize + 1 /* 4097 */];
_iss sqInt traceLog[TraceBufferSize /* 768 */];
_iss sqInt remapBuffer[RemapBufferSize + 1 /* 26 */];
_iss sqInt primTraceLog[256];
@@ -2099,7 +2097,7 @@
/* 575 */ (void (*)(void))0,
0 };
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1026";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1029";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -16335,98 +16333,6 @@
}
-/* Spur's become: is lazy, turning the becommed object into a forwarding
- object to the other.
- The read-barrier is minimised by arranging that forwarding pointers will
- fail a method cache
- probe, since notionally objects' internals are accessed only via sending
- messages to them,
- the exception is primitives that access the internals of the non-receiver
- argument(s). To avoid a read barrier on inst var fetch we scan the
- receivers in the stack zone and follow
- any forwarded ones. This is way cheaper than scanning all of memory as in
- the old become. */
-
-static void
-followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags)
-{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- char *callerFP;
- sqInt delta;
- sqInt i;
- sqInt newOop;
- sqInt numArgs;
- sqInt offset;
- usqInt oop;
- char *theFP;
- usqInt theIPPtr;
- StackPage *thePage;
- char *theSP;
-
- if (theBecomeEffectsFlags & BecameCompiledMethodFlag) {
- ;
-
- }
- assert(GIV(stackPage) != 0);
- for (i = 0; i < GIV(numStackPages); i += 1) {
- /* begin stackPageAt: */
- thePage = stackPageAtpages(i, GIV(pages));
- if (!(((thePage->baseFP)) == 0)) {
- theSP = (thePage->headSP);
-
- /* Skip the instruction pointer on top of stack of inactive pages. */
-
- theFP = (thePage->headFP);
- if (thePage == GIV(stackPage)) {
- theIPPtr = 0;
- }
- else {
- theIPPtr = ((usqInt)theSP);
- theSP += BytesPerWord;
- }
- while (1) {
- assert(addressIsInPage(thePage, theFP));
- assert((theIPPtr == 0)
- || (addressIsInPage(thePage, ((void *)theIPPtr))));
- /* begin frameStackedReceiverOffsetNumArgs: */
- numArgs = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
- ? ((mframeCogMethod(theFP))->cmNumArgs)
- : byteAt((theFP + FoxIFrameFlags) + 1));
- offset = (FoxCallerSavedIP + BytesPerWord) + (numArgs << (shiftForWord()));
- oop = longAt(theFP + offset);
-
- if ((((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
- ? ((longAt(theFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
- : (byteAt((theFP + FoxIFrameFlags) + 2)) != 0))
- && (isForwarded(longAt(theFP + FoxThisContext)))) {
- longAtput(theFP + FoxThisContext, followForwarded(longAt(theFP + FoxThisContext)));
- }
- if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
- oop = longAt(theFP + FoxMFReceiver);
-
- oop = ((mframeHomeMethod(theFP))->methodObject);
- assert(!(isForwarded(oop)));
- }
- else {
- oop = longAt(theFP + FoxIFReceiver);
-
- oop = longAt(theFP + FoxMethod);
-
- }
- if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
- theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
- theFP = callerFP;
- }
- theSP = ((thePage->baseAddress)) - BytesPerWord;
- while (theSP <= ((thePage->baseAddress))) {
- oop = longAt(theSP);
-
- theSP += BytesPerWord;
- }
- }
- }
-}
-
-
/* Force an interrupt check ASAP. This version is the
entry-point to forceInterruptCheck for the heartbeat
timer to allow for repeatable debugging. */
@@ -34846,15 +34752,8 @@
static sqInt
becomewithtwoWaycopyHash(sqInt array1, sqInt array2, sqInt twoWayFlag, sqInt copyHashFlag)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- sqInt anArray;
- sqInt anArray1;
- sqInt anArray2;
- sqInt anArray3;
- sqInt c;
- sqInt c1;
sqInt contextSize;
sqInt fieldOffset;
- sqInt first;
sqInt fmt;
sqInt fwdBlock;
sqInt fwdBlock1;
@@ -34869,23 +34768,7 @@
sqInt hdr21;
sqInt header;
sqInt header1;
- sqInt i;
- sqInt i1;
- sqInt i2;
- sqInt i3;
- sqInt i4;
- sqInt iLimiT;
- sqInt iLimiT1;
- sqInt last;
- sqInt list;
- sqInt m;
- sqInt next;
sqInt numLiterals;
- sqInt obj;
- sqInt obj1;
- sqInt obj2;
- sqInt obj3;
- sqInt obj4;
sqInt objHeader;
sqInt objHeader1;
sqInt objHeader11;
@@ -34897,14 +34780,8 @@
sqInt oop11;
sqInt oop2;
sqInt oop21;
- sqInt procLists;
- sqInt s;
- sqInt s1;
- sqInt sched;
- sqInt schedAssoc;
sqInt sp;
usqInt start;
- sqInt xArray;
if ((checkForLeaks & 4) != 0) {
runLeakCheckerForFullGC(1);
@@ -35137,9 +35014,8 @@
}
}
/* begin postBecomeAction: */
- followForwardingPointersInStackZone(0);
+ ;
-
cogitPostGCAction(GIV(gcMode));
GIV(lastCoggableInterpretedBlockMethod) = (GIV(lastUncoggableInterpretedBlockMethod) = null);
GIV(gcMode) = 0;
@@ -44341,7 +44217,21 @@
return ((sqInt (*)(sqInt, sqInt, sqInt))fn)(x0, x1, y);
}
+static sqInt
+couldBeProcess(sqInt oop)
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT
+ return (((oop & 3) == 0)
+ && (((((usqInt)oop)) >= (startOfMemory()))
+ && (((((usqInt)oop)) < GIV(freeStart))
+ && (((longAt(oop)) & TypeMask) != HeaderTypeGC))))
+ && ((((((usqInt) (longAt(oop))) >> (instFormatFieldLSB())) & 15) <= 4)
+ && ((!(((oop & 1) == 0)
+ && (((((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex)))
+ && (((lengthOf(oop)) > MyListIndex)
+ && (isContext(longAt((oop + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))))))));
+}
+
/* For testing in Smalltalk, this method should be overridden in a subclass. */
static void
@@ -49277,10 +49167,7 @@
&& ((((((usqInt)aContextOrProcessOrFrame)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)aContextOrProcessOrFrame)) <= (((usqInt)GIV(pages))))))) {
return printCallStackFP(((char *) aContextOrProcessOrFrame));
}
- if ((!(((aContextOrProcessOrFrame & 1) == 0)
- && (((((usqInt) (longAt(aContextOrProcessOrFrame))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex)))
- && (((lengthOf(aContextOrProcessOrFrame)) > MyListIndex)
- && (isContext(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))))))) {
+ if (couldBeProcess(aContextOrProcessOrFrame)) {
return printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))));
}
context = aContextOrProcessOrFrame;
@@ -50515,23 +50402,26 @@
}
sqInt
-printStackCallStackOf(sqInt frameOrContext)
+printStackCallStackOf(sqInt aContextOrProcessOrFrame)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt context;
char *theFP;
- if (((frameOrContext & 3) == 0)
- && (((((usqInt)frameOrContext)) >= (startOfMemory()))
- && (((((usqInt)frameOrContext)) < GIV(freeStart))
- && (((longAt(frameOrContext)) & TypeMask) != HeaderTypeGC)))) {
- if ((((frameOrContext & 1) == 0)
- && (((((usqInt) (longAt(frameOrContext))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
- && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
- return printStackCallStackOf(((sqInt)(frameOfMarriedContext(frameOrContext))));
+ if (((aContextOrProcessOrFrame & 3) == 0)
+ && (((((usqInt)aContextOrProcessOrFrame)) >= (startOfMemory()))
+ && (((((usqInt)aContextOrProcessOrFrame)) < GIV(freeStart))
+ && (((longAt(aContextOrProcessOrFrame)) & TypeMask) != HeaderTypeGC)))) {
+ if ((((aContextOrProcessOrFrame & 1) == 0)
+ && (((((usqInt) (longAt(aContextOrProcessOrFrame))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(aContextOrProcessOrFrame, null))) {
+ return printStackCallStackOf(((sqInt)(frameOfMarriedContext(aContextOrProcessOrFrame))));
}
+ if (couldBeProcess(aContextOrProcessOrFrame)) {
+ return printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))));
+ }
return null;
}
- theFP = ((void *)frameOrContext);
+ theFP = ((void *)aContextOrProcessOrFrame);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2015-01-25 22:39:42 UTC (rev 3235)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2015-01-29 22:35:45 UTC (rev 3236)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
*/
@@ -252,7 +252,7 @@
void printMethodDictionary(sqInt dictionary);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(sqInt frameOrContext);
+sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
void printStackReferencesTo(sqInt oop);
void print(char *s);
void setBreakMNUSelector(char *aString);
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2015-01-25 22:39:42 UTC (rev 3235)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2015-01-29 22:35:45 UTC (rev 3236)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
from
- CoInterpreter VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CoInterpreter VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -114,8 +114,6 @@
#define AtCacheSize 2
#define AtCacheTotalSize 64
#define AtPutBase 32
-#define BecameActiveClassFlag 8
-#define BecameCompiledMethodFlag 2
#define Byte0Mask 0xFF
#define Byte1Mask 0xFF00
#define Byte1Shift 8
@@ -450,7 +448,6 @@
static sqInt externalInstVarofContext(sqInt offset, sqInt aContext) NoDbgRegParms;
static void findNewMethodInClassTag(sqInt classTagArg) NoDbgRegParms;
sqInt flushExternalPrimitiveOf(sqInt methodObj);
-static void followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags) NoDbgRegParms;
void forceInterruptCheckFromHeartbeat(void);
static sqInt frameCallerContext(char *theFP) NoDbgRegParms;
static sqInt frameCallerContextput(char *theFP, sqInt aValue) NoDbgRegParms;
@@ -1051,6 +1048,7 @@
sqInt copiedValueCountOfClosure(sqInt closurePointer);
sqInt copyBits(void);
sqInt copyBitsFromtoat(sqInt x0, sqInt x1, sqInt y);
+static sqInt couldBeProcess(sqInt oop) NoDbgRegParms NeverInline;
static void cr(void);
static void createActualMessageTo(sqInt lookupClass) NoDbgRegParms;
static sqInt defaultNumStackPages(void);
@@ -1209,7 +1207,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(sqInt frameOrContext);
+sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -1365,14 +1363,14 @@
_iss sqInt numStackPages;
_iss sqInt tempOop;
_iss sqInt needGCFlag;
-_iss sqInt profileProcess;
_iss sqLong nextProfileTick;
_iss sqInt jmpDepth;
_iss sqInt longRunningPrimitiveCheckSemaphore;
+_iss sqInt profileProcess;
_iss sqInt profileSemaphore;
-_iss sqInt profileMethod;
_iss usqInt fwdTableNext;
_iss sqInt longRunningPrimitiveCheckMethod;
+_iss sqInt profileMethod;
_iss usqInt compStart;
_iss sqInt extraRootCount;
_iss sqInt statGrowMemory;
@@ -1461,8 +1459,8 @@
_iss sqInt overflowLimit;
_iss StackPage * overflowedPage;
_iss sqInt the2ndUnknownShort;
-_iss long methodCache[MethodCacheSize + 1 /* 4097 */];
_iss sqInt atCache[AtCacheTotalSize + 1 /* 65 */];
+_iss long methodCache[MethodCacheSize + 1 /* 4097 */];
_iss sqInt traceLog[TraceBufferSize /* 768 */];
_iss sqInt remapBuffer[RemapBufferSize + 1 /* 26 */];
_iss sqInt primTraceLog[256];
@@ -2102,7 +2100,7 @@
/* 575 */ (void (*)(void))0,
0 };
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1026";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1029";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -16344,98 +16342,6 @@
}
-/* Spur's become: is lazy, turning the becommed object into a forwarding
- object to the other.
- The read-barrier is minimised by arranging that forwarding pointers will
- fail a method cache
- probe, since notionally objects' internals are accessed only via sending
- messages to them,
- the exception is primitives that access the internals of the non-receiver
- argument(s). To avoid a read barrier on inst var fetch we scan the
- receivers in the stack zone and follow
- any forwarded ones. This is way cheaper than scanning all of memory as in
- the old become. */
-
-static void
-followForwardingPointersInStackZone(sqInt theBecomeEffectsFlags)
-{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- char *callerFP;
- sqInt delta;
- sqInt i;
- sqInt newOop;
- sqInt numArgs;
- sqInt offset;
- usqInt oop;
- char *theFP;
- usqInt theIPPtr;
- StackPage *thePage;
- char *theSP;
-
- if (theBecomeEffectsFlags & BecameCompiledMethodFlag) {
- ;
-
- }
- assert(GIV(stackPage) != 0);
- for (i = 0; i < GIV(numStackPages); i += 1) {
- /* begin stackPageAt: */
- thePage = stackPageAtpages(i, GIV(pages));
- if (!(((thePage->baseFP)) == 0)) {
- theSP = (thePage->headSP);
-
- /* Skip the instruction pointer on top of stack of inactive pages. */
-
- theFP = (thePage->headFP);
- if (thePage == GIV(stackPage)) {
- theIPPtr = 0;
- }
- else {
- theIPPtr = ((usqInt)theSP);
- theSP += BytesPerWord;
- }
- while (1) {
- assert(addressIsInPage(thePage, theFP));
- assert((theIPPtr == 0)
- || (addressIsInPage(thePage, ((void *)theIPPtr))));
- /* begin frameStackedReceiverOffsetNumArgs: */
- numArgs = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
- ? ((mframeCogMethod(theFP))->cmNumArgs)
- : byteAt((theFP + FoxIFrameFlags) + 1));
- offset = (FoxCallerSavedIP + BytesPerWord) + (numArgs << (shiftForWord()));
- oop = longAt(theFP + offset);
-
- if ((((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
- ? ((longAt(theFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
- : (byteAt((theFP + FoxIFrameFlags) + 2)) != 0))
- && (isForwarded(longAt(theFP + FoxThisContext)))) {
- longAtput(theFP + FoxThisContext, followForwarded(longAt(theFP + FoxThisContext)));
- }
- if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
- oop = longAt(theFP + FoxMFReceiver);
-
- oop = ((mframeHomeMethod(theFP))->methodObject);
- assert(!(isForwarded(oop)));
- }
- else {
- oop = longAt(theFP + FoxIFReceiver);
-
- oop = longAt(theFP + FoxMethod);
-
- }
- if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
- theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
- theFP = callerFP;
- }
- theSP = ((thePage->baseAddress)) - BytesPerWord;
- while (theSP <= ((thePage->baseAddress))) {
- oop = longAt(theSP);
-
- theSP += BytesPerWord;
- }
- }
- }
-}
-
-
/* Force an interrupt check ASAP. This version is the
entry-point to forceInterruptCheck for the heartbeat
timer to allow for repeatable debugging. */
@@ -34855,15 +34761,8 @@
static sqInt
becomewithtwoWaycopyHash(sqInt array1, sqInt array2, sqInt twoWayFlag, sqInt copyHashFlag)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- sqInt anArray;
- sqInt anArray1;
- sqInt anArray2;
- sqInt anArray3;
- sqInt c;
- sqInt c1;
sqInt contextSize;
sqInt fieldOffset;
- sqInt first;
sqInt fmt;
sqInt fwdBlock;
sqInt fwdBlock1;
@@ -34878,23 +34777,7 @@
sqInt hdr21;
sqInt header;
sqInt header1;
- sqInt i;
- sqInt i1;
- sqInt i2;
- sqInt i3;
- sqInt i4;
- sqInt iLimiT;
- sqInt iLimiT1;
- sqInt last;
- sqInt list;
- sqInt m;
- sqInt next;
sqInt numLiterals;
- sqInt obj;
- sqInt obj1;
- sqInt obj2;
- sqInt obj3;
- sqInt obj4;
sqInt objHeader;
sqInt objHeader1;
sqInt objHeader11;
@@ -34906,14 +34789,8 @@
sqInt oop11;
sqInt oop2;
sqInt oop21;
- sqInt procLists;
- sqInt s;
- sqInt s1;
- sqInt sched;
- sqInt schedAssoc;
sqInt sp;
usqInt start;
- sqInt xArray;
if ((checkForLeaks & 4) != 0) {
runLeakCheckerForFullGC(1);
@@ -35146,9 +35023,8 @@
}
}
/* begin postBecomeAction: */
- followForwardingPointersInStackZone(0);
+ ;
-
cogitPostGCAction(GIV(gcMode));
GIV(lastCoggableInterpretedBlockMethod) = (GIV(lastUncoggableInterpretedBlockMethod) = null);
GIV(gcMode) = 0;
@@ -44350,7 +44226,21 @@
return ((sqInt (*)(sqInt, sqInt, sqInt))fn)(x0, x1, y);
}
+static sqInt
+couldBeProcess(sqInt oop)
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT
+ return (((oop & 3) == 0)
+ && (((((usqInt)oop)) >= (startOfMemory()))
+ && (((((usqInt)oop)) < GIV(freeStart))
+ && (((longAt(oop)) & TypeMask) != HeaderTypeGC))))
+ && ((((((usqInt) (longAt(oop))) >> (instFormatFieldLSB())) & 15) <= 4)
+ && ((!(((oop & 1) == 0)
+ && (((((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex)))
+ && (((lengthOf(oop)) > MyListIndex)
+ && (isContext(longAt((oop + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))))))));
+}
+
/* For testing in Smalltalk, this method should be overridden in a subclass. */
static void
@@ -49286,10 +49176,7 @@
&& ((((((usqInt)aContextOrProcessOrFrame)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)aContextOrProcessOrFrame)) <= (((usqInt)GIV(pages))))))) {
return printCallStackFP(((char *) aContextOrProcessOrFrame));
}
- if ((!(((aContextOrProcessOrFrame & 1) == 0)
- && (((((usqInt) (longAt(aContextOrProcessOrFrame))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex)))
- && (((lengthOf(aContextOrProcessOrFrame)) > MyListIndex)
- && (isContext(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))))))) {
+ if (couldBeProcess(aContextOrProcessOrFrame)) {
return printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))));
}
context = aContextOrProcessOrFrame;
@@ -50524,23 +50411,26 @@
}
sqInt
-printStackCallStackOf(sqInt frameOrContext)
+printStackCallStackOf(sqInt aContextOrProcessOrFrame)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt context;
char *theFP;
- if (((frameOrContext & 3) == 0)
- && (((((usqInt)frameOrContext)) >= (startOfMemory()))
- && (((((usqInt)frameOrContext)) < GIV(freeStart))
- && (((longAt(frameOrContext)) & TypeMask) != HeaderTypeGC)))) {
- if ((((frameOrContext & 1) == 0)
- && (((((usqInt) (longAt(frameOrContext))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
- && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
- return printStackCallStackOf(((sqInt)(frameOfMarriedContext(frameOrContext))));
+ if (((aContextOrProcessOrFrame & 3) == 0)
+ && (((((usqInt)aContextOrProcessOrFrame)) >= (startOfMemory()))
+ && (((((usqInt)aContextOrProcessOrFrame)) < GIV(freeStart))
+ && (((longAt(aContextOrProcessOrFrame)) & TypeMask) != HeaderTypeGC)))) {
+ if ((((aContextOrProcessOrFrame & 1) == 0)
+ && (((((usqInt) (longAt(aContextOrProcessOrFrame))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(aContextOrProcessOrFrame, null))) {
+ return printStackCallStackOf(((sqInt)(frameOfMarriedContext(aContextOrProcessOrFrame))));
}
+ if (couldBeProcess(aContextOrProcessOrFrame)) {
+ return printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (SuspendedContextIndex << (shiftForWord()))));
+ }
return null;
}
- theFP = ((void *)frameOrContext);
+ theFP = ((void *)aContextOrProcessOrFrame);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c 2015-01-25 22:39:42 UTC (rev 3235)
+++ branches/Cog/nsspursrc/vm/cointerp.c 2015-01-29 22:35:45 UTC (rev 3236)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
from
- CoInterpreter VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9
+ CoInterpreter VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1026 uuid: 58161d66-0b23-4356-89f1-8e951fd1a1d9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1029 uuid: a2c6da7a-d111-4184-bf10-039ed2bea424 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1129,6 +1129,7 @@
void printInvalidClassTableEntries(void);
void printMethodReferencesTo(sqInt anOop);
void printObjectsFromto(sqInt startAddress, sqInt endAddress);
+void printObjectsWithHash(sqInt hash);
static void printObjStackPagemyIndexpageType(sqInt objStackPage, sqInt myx, sqInt pageType) NoDbgRegParms;
static void printObjStackPagemyIndextag(sqInt objStackPage, sqInt myx, char *pageType) NoDbgRegParms;
void printObjStack(sqInt objStack);
@@ -1235,6 +1236,7 @@
sqInt copiedValueCountOfClosure(sqInt closurePointer);
sqInt copyBits(void);
sqInt copyBitsFromtoat(sqInt x0, sqInt x1, sqInt y);
+static sqInt couldBeProcess(sqInt oop) NoDbgRegParms NeverInline;
static void cr(void);
static void createActualMessageTo(sqInt lookupClass) NoDbgRegParms;
static sqInt defaultNumStackPages(void);
@@ -1395,7 +1397,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(sqInt frameOrContext);
+sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -1447,6 +1449,7 @@
static sqInt snapshot(sqInt embedded) NoDbgRegParms;
static void space(void);
sqInt specialSelector(sqInt index);
+static void spurPostBecomeAction(sqInt theBecomeEffectsFlags) NoDbgRegParms;
double stackFloatValue(sqInt offset);
sqInt stackIntegerValue(sqInt offset);
static sqInt stackLimitBytes(void);
@@ -1581,7 +1584,6 @@
_iss sqInt jmpDepth;
_iss sqInt futureSurvivorStart;
_iss char * objStackInvalidBecause;
-_iss sqInt becomeEffectsFlags;
_iss usqInt lastFreeChunk;
_iss SpurNewSpaceSpace eden;
_iss sqInt ephemeronList;
@@ -1590,6 +1592,7 @@
_iss sqInt extraRootCount;
_iss sqInt invalidObjStackPage;
_iss sqInt previousRememberedSetSize;
+_iss sqInt becomeEffectsFlags;
_iss sqInt classNameIndex;
_iss sqInt growHeadroom;
_iss sqInt ephemeronQueue;
@@ -2350,7 +2353,7 @@
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1026";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1029";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -5733,6 +5736,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ lkupClassTag = -PrimErrBadReceiver;
+ goto l1;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
lkupClassTag = -err;
goto l1;
@@ -6831,6 +6838,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(superclass));
if (((newHash = (long32At(superclass + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(superclass))) {
+ -PrimErrBadReceiver;
+ goto l273;
+ }
if (((err = enterIntoClassTable(superclass))) != 0) {
-err;
goto l273;
@@ -6845,6 +6856,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(superclass));
if (((newHash1 = (long32At(superclass + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(superclass))) {
+ lkupClassTag = -PrimErrBadReceiver;
+ goto l274;
+ }
if (((err1 = enterIntoClassTable(superclass))) != 0) {
lkupClassTag = -err1;
goto l274;
@@ -14006,6 +14021,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ lkupClassTag = -PrimErrBadReceiver;
+ goto l241;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
lkupClassTag = -err;
goto l241;
@@ -14223,6 +14242,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ lkupClassTag = -PrimErrBadReceiver;
+ goto l248;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
lkupClassTag = -err;
goto l248;
@@ -14456,6 +14479,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ lkupClassTag = -PrimErrBadReceiver;
+ goto l255;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
lkupClassTag = -err;
goto l255;
@@ -15687,6 +15714,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ classTag = -PrimErrBadReceiver;
+ goto l2;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
classTag = -err;
goto l2;
@@ -16514,6 +16545,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ classTag = -PrimErrBadReceiver;
+ goto l2;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
classTag = -err;
goto l2;
@@ -17794,7 +17829,8 @@
GIV(method) = ((sqInt) referent);
GIV(instructionPointer) = GIV(method) + theIPPtr;
}
- if (((longAt(GIV(newMethod))) & (0x3FFFFF - 8)) == 0) {
+ if (((GIV(newMethod) & 3) == 0)
+ && (((longAt(GIV(newMethod))) & 0x3FFFFF) == 8)) {
/* begin followForwarded: */
assert(isUnambiguouslyForwarder(GIV(newMethod)));
referent1 = longAt((GIV(newMethod) + BaseHeaderSize) + (0 << (shiftForWord())));
@@ -29195,6 +29231,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(longAt(GIV(stackPointer))));
if (((newHash = (long32At((longAt(GIV(stackPointer))) + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(longAt(GIV(stackPointer))))) {
+ hashOrError = -PrimErrBadReceiver;
+ goto l1;
+ }
if (((err = enterIntoClassTable(longAt(GIV(stackPointer))))) != 0) {
hashOrError = -err;
goto l1;
@@ -33558,7 +33598,7 @@
}
-/* For a Smalnteger, answer itself.
+/* For a Smalllnteger, answer itself.
For a Character, answer its code as an unsigned integer.
For a SmallFloat, answer the signed, but unadjusted bit pattern (so as to
keep the result a SmallInteger).
@@ -35193,6 +35233,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj1));
if (((newHash = (long32At(classObj1 + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj1))) {
+ classIndex = -PrimErrBadReceiver;
+ goto l1;
+ }
if (((err = enterIntoClassTable(classObj1))) != 0) {
classIndex = -err;
goto l1;
@@ -35318,6 +35362,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(class));
if (((newHash = (long32At(class + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(class))) {
+ classIndex = -PrimErrBadReceiver;
+ goto l2;
+ }
if (((err = enterIntoClassTable(class))) != 0) {
classIndex = -err;
goto l2;
@@ -40925,6 +40973,10 @@
/* begin ensureBehaviorHash: */
assert(addressCouldBeClassObj(classObj));
if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (!(objCouldBeClassObj(classObj))) {
+ classIndex = -PrimErrBadReceiver;
+ goto l1;
+ }
if (((err = enterIntoClassTable(classObj))) != 0) {
classIndex = -err;
goto l1;
@@ -43862,8 +43914,6 @@
static sqInt
becomewithtwoWaycopyHash(sqInt array1, sqInt array2, sqInt twoWayFlag, sqInt copyHashFlag)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- sqInt c;
- sqInt c1;
sqInt classOrNil;
sqInt clone1;
sqInt clone2;
@@ -43874,7 +43924,6 @@
sqInt effectsFlags1;
sqInt fieldOffset;
sqInt fieldOffset1;
- sqInt first;
sqInt fmt;
sqInt fmt1;
sqInt fmt2;
@@ -43891,83 +43940,45 @@
sqLong headerTemp;
sqInt i;
sqInt i1;
- sqInt i11;
sqInt i2;
sqInt i3;
- sqInt i4;
- sqInt i5;
- sqInt i6;
- sqInt i7;
sqInt iLimiT;
sqInt iLimiT1;
sqInt iLimiT2;
- sqInt iLimiT3;
- sqInt iLimiT4;
sqInt j;
sqInt jLimiT;
- sqInt last;
- sqInt list;
- sqInt m;
sqInt newObj1;
sqInt newObj2;
- sqInt next;
sqInt o1ClassIndex;
sqInt o1HasYoung;
sqInt o2ClassIndex;
sqInt o2HasYoung;
- sqInt obj;
sqInt obj1;
sqInt obj11;
- sqInt obj12;
sqInt obj2;
sqInt obj21;
- sqInt obj22;
- sqInt obj3;
- sqInt obj4;
sqInt objOop;
sqInt objOop1;
- sqInt objOop11;
sqInt objOop2;
- sqInt objOop21;
sqInt objOop3;
- sqInt objOop31;
sqInt objOop4;
- sqInt objOop41;
sqInt objOop5;
- sqInt objOop51;
sqInt objOop6;
- sqInt objOop7;
sqInt oop;
sqInt oop1;
sqInt page;
- sqInt procLists;
sqInt referent;
sqInt referent1;
sqInt referent11;
- sqInt referent12;
- sqInt referent13;
sqInt referent2;
- sqInt referent21;
- sqInt referent22;
sqInt referent3;
- sqInt referent31;
- sqInt referent32;
sqInt referent4;
- sqInt referent41;
sqInt referent5;
- sqInt referent6;
- sqInt referent7;
- sqInt referent8;
- sqInt s;
- sqInt s1;
- sqInt sched;
- sqInt schedAssoc;
sqInt size;
sqInt sp;
sqInt sp1;
sqInt temp1;
sqInt temp2;
- sqInt xArray;
assert(GIV(becomeEffectsFlags) == 0);
if ((checkForLeaks & 4) != 0) {
@@ -44253,15 +44264,15 @@
long32Atput(obj2 + 4, ((((long32At(obj2 + 4)) | 0x3FFFFF) - 0x3FFFFF)) + temp1);
}
o1HasYoung = (o2HasYoung = 0);
- for (i7 = 0, iLimiT4 = ((numSlotsOf(obj1)) - 1); i7 <= iLimiT4; i7 += 1) {
- temp1 = longAt((obj1 + BaseHeaderSize) + (i7 << (shiftForWord())));
- temp2 = longAt((obj2 + BaseHeaderSize) + (i7 << (shiftForWord())));
+ for (i3 = 0, iLimiT2 = ((numSlotsOf(obj1)) - 1); i3 <= iLimiT2; i3 += 1) {
+ temp1 = longAt((obj1 + BaseHeaderSize) + (i3 << (shiftForWord())));
+ temp2 = longAt((obj2 + BaseHeaderSize) + (i3 << (shiftForWord())));
/* begin storePointerUnchecked:ofObject:withValue: */
assert(!(isForwarded(obj1)));
- longAtput((obj1 + BaseHeaderSize) + (i7 << (shiftForWord())), temp2);
+ longAtput((obj1 + BaseHeaderSize) + (i3 << (shiftForWord())), temp2);
/* begin storePointerUnchecked:ofObject:withValue: */
assert(!(isForwarded(obj2)));
- longAtput((obj2 + BaseHeaderSize) + (i7 << (shiftForWord())), temp1);
+ longAtput((obj2 + BaseHeaderSize) + (i3 << (shiftForWord())), temp1);
if (((temp2 & 3) == 0)
&& ((((usqInt) temp2)) < (((usqInt) GIV(newSpaceLimit))))) {
o1HasYoung = 1;
@@ -44394,12 +44405,12 @@
/* begin followForwarded: */
assert(isUnambiguouslyForwarder(obj1));
- referent8 = longAt((obj1 + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent8 & 3) == 0)
- && (((longAt(referent8)) & 0x3FFFFF) == 8)) {
- referent8 = longAt((referent8 + BaseHeaderSize) + (0 << (shiftForWord())));
+ referent5 = longAt((obj1 + BaseHeaderSize) + (0 << (shiftForWord())));
+ while (((referent5 & 3) == 0)
+ && (((longAt(referent5)) & 0x3FFFFF) == 8)) {
+ referent5 = longAt((referent5 + BaseHeaderSize) + (0 << (shiftForWord())));
}
- newObj2 = referent8;
+ newObj2 = referent5;
assert((rawHashBitsOf(newObj2)) == 0);
/* begin setHashBitsOf:to: */
flag("endianness");
@@ -44414,12 +44425,12 @@
/* begin followForwarded: */
assert(isUnambiguouslyForwarder(obj2));
- referent13 = longAt((obj2 + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent13 & 3) == 0)
- && (((longAt(referent13)) & 0x3FFFFF) == 8)) {
- referent13 = longAt((referent13 + BaseHeaderSize) + (0 << (shiftForWord())));
+ referent11 = longAt((obj2 + BaseHeaderSize) + (0 << (shiftForWord())));
+ while (((referent11 & 3) == 0)
+ && (((longAt(referent11)) & 0x3FFFFF) == 8)) {
+ referent11 = longAt((referent11 + BaseHeaderSize) + (0 << (shiftForWord())));
}
- newObj1 = referent13;
+ newObj1 = referent11;
assert((rawHashBitsOf(newObj1)) == 0);
/* begin setHashBitsOf:to: */
flag("endianness");
@@ -44532,302 +44543,8 @@
}
followForwardedObjectFieldstoDepth(GIV(specialObjectsOop), 0);
/* begin postBecomeAction: */
- followForwardingPointersInStackZone(GIV(becomeEffectsFlags));
- if (GIV(becomeEffectsFlags) != 0) {
- if (GIV(becomeEffectsFlags) & BecameCompiledMethodFlag) {
- /* begin followForwardedMethodsInMethodCache */
- for (i4 = 0; i4 < MethodCacheSize; i4 += MethodCacheEntrySize) {
- c = GIV(methodCache)[i4 + MethodCacheClass];
- s = GIV(methodCache)[i4 + MethodCacheSelector];
- m = GIV(methodCache)[i4 + MethodCacheMethod];
- if ((c != 0)
- && ((s != 0)
- && ((m != 0)
- && (((m & 3) == 0)
- && (((longAt(m)) & 0x3FFFFF) == 8))))) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(m));
- referent4 = longAt((m + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent4 & 3) == 0)
- && (((longAt(referent4)) & 0x3FFFFF) == 8)) {
- referent4 = longAt((referent4 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- m = referent4;
- GIV(methodCache)[i4 + MethodCacheMethod] = m;
- }
- }
- /* begin followForwardedMethodsInMethodZone */
- followForwardedMethods();
- }
- if (GIV(becomeEffectsFlags) & BecameActiveClassFlag) {
- /* begin flushBecommedClassesInMethodCache */
- for (i2 = 0; i2 < MethodCacheSize; i2 += MethodCacheEntrySize) {
- c1 = GIV(methodCache)[i2 + MethodCacheClass];
- s1 = GIV(methodCache)[i2 + MethodCacheSelector];
- if ((c1 != 0)
- && ((s1 != 0)
- && (isForwarded(classOrNilAtIndex(c1))))) {
- GIV(methodCache)[i2 + MethodCacheClass] = 0;
- GIV(methodCache)[i2 + MethodCacheSelector] = 0;
- }
- }
- /* begin flushAtCache */
- for (i11 = 1; i11 <= AtCacheTotalSize; i11 += 1) {
- GIV(atCache)[i11] = 0;
- }
- /* begin flushBecommedClassesInMethodZone */
- unlinkSendsToForwardedClasses();
- }
- /* begin followForwardingPointersInScheduler */
+ spurPostBecomeAction(GIV(becomeEffectsFlags));
- /* the GC follows pointers in the special objects array for us. */
-
- schedAssoc = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << (shiftForWord())));
- assert(!(isForwarded(schedAssoc)));
- /* begin followObjField:ofObject: */
- objOop41 = longAt((schedAssoc + BaseHeaderSize) + (ValueIndex << (shiftForWord())));
- assert(isNonImmediate(objOop41));
- if (((longAt(objOop41)) & (0x3FFFFF - 8)) == 0) {
- objOop41 = fixFollowedFieldofObjectwithInitialValue(ValueIndex, schedAssoc, objOop41);
- }
- sched = objOop41;
- /* begin followObjField:ofObject: */
- objOop51 = longAt((sched + BaseHeaderSize) + (ProcessListsIndex << (shiftForWord())));
- assert(isNonImmediate(objOop51));
- if (((longAt(objOop51)) & (0x3FFFFF - 8)) == 0) {
- objOop51 = fixFollowedFieldofObjectwithInitialValue(ProcessListsIndex, sched, objOop51);
- }
- procLists = objOop51;
- for (i3 = 0, iLimiT2 = ((numSlotsOf(procLists)) - 1); i3 <= iLimiT2; i3 += 1) {
- /* begin followObjField:ofObject: */
- objOop11 = longAt((procLists + BaseHeaderSize) + (i3 << (shiftForWord())));
- assert(isNonImmediate(objOop11));
- if (((longAt(objOop11)) & (0x3FFFFF - 8)) == 0) {
- objOop11 = fixFollowedFieldofObjectwithInitialValue(i3, procLists, objOop11);
- }
- list = objOop11;
- /* begin followObjField:ofObject: */
- objOop21 = longAt((list + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())));
- assert(isNonImmediate(objOop21));
- if (((longAt(objOop21)) & (0x3FFFFF - 8)) == 0) {
- objOop21 = fixFollowedFieldofObjectwithInitialValue(FirstLinkIndex, list, objOop21);
- }
- first = objOop21;
- /* begin followObjField:ofObject: */
- objOop31 = longAt((list + BaseHeaderSize) + (LastLinkIndex << (shiftForWord())));
- assert(isNonImmediate(objOop31));
- if (((longAt(objOop31)) & (0x3FFFFF - 8)) == 0) {
- objOop31 = fixFollowedFieldofObjectwithInitialValue(LastLinkIndex, list, objOop31);
- }
- last = objOop31;
- while (first != last) {
- /* begin followObjField:ofObject: */
- objOop7 = longAt((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord())));
- assert(isNonImmediate(objOop7));
- if (((longAt(objOop7)) & (0x3FFFFF - 8)) == 0) {
- objOop7 = fixFollowedFieldofObjectwithInitialValue(NextLinkIndex, first, objOop7);
- }
- next = objOop7;
- first = next;
- }
- }
- /* begin followForwardingPointersInSpecialObjectsArray */
- /* begin followSemaphoreIn:at: */
- obj12 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord())));
- if (((longAt(obj12)) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(obj12));
- referent12 = longAt((obj12 + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent12 & 3) == 0)
- && (((longAt(referent12)) & 0x3FFFFF) == 8)) {
- referent12 = longAt((referent12 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- obj12 = referent12;
- /* begin storePointer:ofObject:withValue: */
- assert(!(isForwarded(GIV(specialObjectsOop))));
- if (isOldObject(GIV(specialObjectsOop))) {
-
- /* most stores into young objects */
-
- if (((obj12 & 3) == 0)
- && ((((usqInt) obj12)) < (((usqInt) GIV(newSpaceLimit))))) {
- /* begin possibleRootStoreInto: */
- if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) {
- remember(GIV(specialObjectsOop));
- }
- }
- }
- longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord())), obj12);
- }
- /* begin followSemaphoreIn:at: */
- obj22 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord())));
- if (((longAt(obj22)) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(obj22));
- referent22 = longAt((obj22 + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent22 & 3) == 0)
- && (((longAt(referent22)) & 0x3FFFFF) == 8)) {
- referent22 = longAt((referent22 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- obj22 = referent22;
- /* begin storePointer:ofObject:withValue: */
- assert(!(isForwarded(GIV(specialObjectsOop))));
- if (isOldObject(GIV(specialObjectsOop))) {
-
- /* most stores into young objects */
-
- if (((obj22 & 3) == 0)
- && ((((usqInt) obj22)) < (((usqInt) GIV(newSpaceLimit))))) {
- /* begin possibleRootStoreInto: */
- if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) {
- remember(GIV(specialObjectsOop));
- }
- }
- }
- longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord())), obj22);
- }
- /* begin followSemaphoreIn:at: */
- obj3 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheTimerSemaphore << (shiftForWord())));
- if (((longAt(obj3)) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(obj3));
- referent32 = longAt((obj3 + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent32 & 3) == 0)
- && (((longAt(referent32)) & 0x3FFFFF) == 8)) {
- referent32 = longAt((referent32 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- obj3 = referent32;
- /* begin storePointer:ofObject:withValue: */
- assert(!(isForwarded(GIV(specialObjectsOop))));
- if (isOldObject(GIV(specialObjectsOop))) {
-
- /* most stores into young objects */
-
- if (((obj3 & 3) == 0)
- && ((((usqInt) obj3)) < (((usqInt) GIV(newSpaceLimit))))) {
- /* begin possibleRootStoreInto: */
- if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) {
- remember(GIV(specialObjectsOop));
- }
- }
- }
- longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheTimerSemaphore << (shiftForWord())), obj3);
- }
- /* begin followSemaphoreIn:at: */
- obj4 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheFinalizationSemaphore << (shiftForWord())));
- if (((longAt(obj4)) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(obj4));
- referent41 = longAt((obj4 + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent41 & 3) == 0)
- && (((longAt(referent41)) & 0x3FFFFF) == 8)) {
- referent41 = longAt((referent41 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- obj4 = referent41;
- /* begin storePointer:ofObject:withValue: */
- assert(!(isForwarded(GIV(specialObjectsOop))));
- if (isOldObject(GIV(specialObjectsOop))) {
-
- /* most stores into young objects */
-
- if (((obj4 & 3) == 0)
- && ((((usqInt) obj4)) < (((usqInt) GIV(newSpaceLimit))))) {
- /* begin possibleRootStoreInto: */
- if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) {
- remember(GIV(specialObjectsOop));
- }
- }
- }
- longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheFinalizationSemaphore << (shiftForWord())), obj4);
- }
- xArray = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ExternalObjectsArray << (shiftForWord())));
- if (((longAt(xArray)) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(xArray));
- referent6 = longAt((xArray + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent6 & 3) == 0)
- && (((longAt(referent6)) & 0x3FFFFF) == 8)) {
- referent6 = longAt((referent6 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- xArray = referent6;
- /* begin splObj:put: */
- /* begin storePointer:ofObject:withValue: */
- assert(!(isForwarded(GIV(specialObjectsOop))));
- if (isOldObject(GIV(specialObjectsOop))) {
-
- /* most stores into young objects */
-
- if (((xArray & 3) == 0)
- && ((((usqInt) xArray)) < (((usqInt) GIV(newSpaceLimit))))) {
- /* begin possibleRootStoreInto: */
- if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) {
- remember(GIV(specialObjectsOop));
- }
- }
- }
- longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (ExternalObjectsArray << (shiftForWord())), xArray);
- }
- for (i5 = 0, iLimiT3 = ((numSlotsOf(xArray)) - 1); i5 <= iLimiT3; i5 += 1) {
- /* begin followSemaphoreIn:at: */
- obj = longAt((xArray + BaseHeaderSize) + (i5 << (shiftForWord())));
- if (((longAt(obj)) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(obj));
- referent5 = longAt((obj + BaseHeaderSize) + (0 << (shiftForWord())));
- while (((referent5 & 3) == 0)
- && (((longAt(referent5)) & 0x3FFFFF) == 8)) {
- referent5 = longAt((referent5 + BaseHeaderSize) + (0 << (shiftForWord())));
- }
- obj = referent5;
- /* begin storePointer:ofObject:withValue: */
- assert(!(isForwarded(xArray)));
- if (isOldObject(xArray)) {
-
- /* most stores into young objects */
-
- if (((obj & 3) == 0)
- && ((((usqInt) obj)) < (((usqInt) GIV(newSpaceLimit))))) {
- /* begin possibleRootStoreInto: */
- if (!(((((usqInt) (longAt(xArray))) >> 29) & 1) != 0)) {
- remember(xArray);
- }
- }
- }
- longAtput((xArray + BaseHeaderSize) + (i5 << (shiftForWord())), obj);
- }
- }
- /* begin followForwardingPointersInProfileState */
- if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) {
- /* begin followForwarded: */
- assert(isUnambiguouslyForwarder(GIV(profileProcess)));
@@ Diff output truncated at 50000 characters. @@
More information about the Vm-dev
mailing list