Revision: 3397 Author: eliot Date: 2015-07-06 11:56:39 -0700 (Mon, 06 Jul 2015) Log Message: ----------- CogVM source as per VMMaker.oscog-eem.1405
Spur: Make sure the post become action unforwards the Process in the activeProcess inst var up to date. Add some more asserts to check.Also follow the specialObjectsArray after a pin become.
Generically use storePointerUnchecked: when storing nils into the process lists.
Modified Paths: -------------- branches/Cog/nsspursrc/vm/cointerp.c branches/Cog/nsspursrc/vm/cointerp.h branches/Cog/nsspursrc/vm/gcc3x-cointerp.c branches/Cog/nsspurstack64src/vm/gcc3x-interp.c branches/Cog/nsspurstack64src/vm/interp.c branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c branches/Cog/nsspurstacksrc/vm/interp.c branches/Cog/spursistasrc/vm/cogitARMv5.c branches/Cog/spursistasrc/vm/cogitIA32.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/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/nsspursrc/vm/cointerp.c =================================================================== --- branches/Cog/nsspursrc/vm/cointerp.c 2015-07-04 16:09:13 UTC (rev 3396) +++ branches/Cog/nsspursrc/vm/cointerp.c 2015-07-06 18:56:39 UTC (rev 3397) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b from - CoInterpreter VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 + CoInterpreter VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -1207,7 +1207,7 @@ static sqInt storeImageSegmentIntooutPointersroots(sqInt segmentWordArray, sqInt outPointerArray, sqInt arrayOfRoots) NoDbgRegParms; extern sqInt storePointerUncheckedofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer); extern sqInt storePointerofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer); -extern sqInt stringForCString(const char *aCString); +extern usqInt stringForCString(const char *aCString); static sqInt sufficientSpaceAfterGC(sqInt numBytes) NoDbgRegParms; static sqInt swizzleObjStackAt(sqInt objStackRootIndex) NoDbgRegParms; extern void tenuringIncrementalGC(void); @@ -2410,7 +2410,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.1403"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1405"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -28740,11 +28740,15 @@ longAtput((process + BaseHeaderSize) + (MyListIndex << (shiftForWord())), myList); } /* begin removeProcess:fromList: */ - assert(!(isForwarded(myList))); + assert(!((isForwarded(process)))); + assert(!((isForwarded(myList)))); firstLink = longAt((myList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); lastLink = longAt((myList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); + assert(!((isForwarded(firstLink)))); + assert(!((isForwarded(lastLink)))); if (process == firstLink) { nextLink = longAt((process + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); + assert(!((isForwarded(nextLink)))); /* begin storePointer:ofObject:withValue: */ assert(!(isForwarded(myList))); if (isOldObject(myList)) { @@ -28761,36 +28765,20 @@ } longAtput((myList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())), nextLink); if (process == lastLink) { - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(myList))); - if (isOldObject(myList)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(myList))) >> 29) & 1) != 0)) { - remember(myList); - } - } - } longAtput((myList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord())), GIV(nilObj)); } } else { tempLink = firstLink; while (1) { + assert(!((isForwarded(tempLink)))); if (tempLink == GIV(nilObj)) { - /* begin success: */ - - /* Don't overwrite an error code that has already been set. */ - + /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } - - null; goto l1; } nextLink = longAt((tempLink + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); @@ -32444,7 +32432,7 @@ usqInt newObj; usqInt numBytes; sqInt numSlots; - sqInt s; + usqInt s; char *sp; sqInt sz;
@@ -38121,7 +38109,7 @@ sqInt err; sqInt hash; sqInt instSpec; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; sqInt numSlots; @@ -38246,7 +38234,7 @@ sqInt i; usqInt instSpec; sqInt literalCount; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; sqInt numSlots; @@ -44162,7 +44150,7 @@ sqInt fillValue; sqInt hash; usqInt instSpec; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; usqInt numSlots; @@ -46294,7 +46282,7 @@ sqInt entry; sqInt expectedIndex; sqInt expectedIndex1; - sqInt freeChunk; + usqInt freeChunk; sqInt i; sqInt i1; sqInt index; @@ -46333,8 +46321,8 @@ sqInt ptr1; sqInt ptr2; sqInt slotBytes; - sqInt smallObj; - sqInt start; + usqInt smallObj; + usqInt start;
classIndex = (long32At(aClass + 4)) & 0x3FFFFF; if (classIndex == 0) { @@ -49275,7 +49263,7 @@ sqInt fmt; sqInt hasYoung; sqInt i; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; usqInt numSlots; @@ -60603,7 +60591,7 @@ usqInt prevFree; usqInt prevFreeChunk; usqInt prevPrevFree; - usqInt prevPrevFreeChunk; + sqInt prevPrevFreeChunk; sqInt slotBytes; sqInt slotBytes1; usqInt there; @@ -61712,6 +61700,7 @@ { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt i; sqInt oldClone; + sqInt referent; SpurSegmentInfo *seg;
assert(isNonImmediate(objOop)); @@ -61771,6 +61760,18 @@ if ((byteAt(objOop + 7)) == 0) { byteAtput(objOop + 7, 1); } + /* begin followSpecialObjectsOop */ + if (((longAt(GIV(specialObjectsOop))) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(GIV(specialObjectsOop))); + referent = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << (shiftForWord()))); + } + GIV(specialObjectsOop) = referent; + } + followForwardedObjectFieldstoDepth(GIV(specialObjectsOop), 0); /* begin postBecomeAction: */ spurPostBecomeAction(GIV(becomeEffectsFlags));
@@ -63949,8 +63950,8 @@ sqInt prevPrevObj; sqInt prevPrevObj1; sqInt ptr; - sqInt savedInHashes; - sqInt savedOutHashes; + usqInt savedInHashes; + usqInt savedOutHashes; sqInt segAddr; sqInt segStart; sqInt slotBytes; @@ -64420,13 +64421,13 @@ or nil if out of memory. */
/* SpurMemoryManager>>#stringForCString: */ -sqInt +usqInt stringForCString(const char *aCString) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt formatField; sqInt len; usqInt newObj; - sqInt newString; + usqInt newString; usqInt numBytes; sqInt numSlots;
@@ -65697,7 +65698,7 @@ usqLong firstSavedBridgeWord; sqInt nWritten; usqInt pier1; - sqInt pier2; + usqInt pier2; usqLong secondSavedBridgeWord;
pier1 = (((segment->segSize)) + ((segment->segStart))) - (2 * BaseHeaderSize); @@ -65782,7 +65783,8 @@ { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt lastLink;
- assert(!(isForwarded(aList))); + assert(!((isForwarded(proc)))); + assert(!((isForwarded(aList)))); assert((fetchPointerofObject(NextLinkIndex, proc)) == (nilObject())); if (isEmptyList(aList)) { /* begin storePointer:ofObject:withValue: */ @@ -76390,39 +76392,17 @@ sqInt last; sqInt next;
- assert(!(isForwarded(aList))); + assert(!((isForwarded(aList)))); first = longAt((aList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); last = longAt((aList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); + assert(!((isForwarded(first)))); + assert(!((isForwarded(last)))); if (first == last) { - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(aList))); - if (isOldObject(aList)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(aList))) >> 29) & 1) != 0)) { - remember(aList); - } - } - } longAtput((aList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())), GIV(nilObj)); - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(aList))); - if (isOldObject(aList)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(aList))) >> 29) & 1) != 0)) { - remember(aList); - } - } - } longAtput((aList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord())), GIV(nilObj)); } else { @@ -76443,20 +76423,8 @@ } longAtput((aList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())), next); } - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(first))); - if (isOldObject(first)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(first))) >> 29) & 1) != 0)) { - remember(first); - } - } - } longAtput((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord())), GIV(nilObj)); return first; } @@ -77595,7 +77563,6 @@ sqInt objOop2; sqInt objOop3; sqInt objOop4; - sqInt objOop5; sqInt procLists; sqInt referent; sqInt referent1; @@ -77662,254 +77629,253 @@ /* begin flushBecommedClassesInMethodZone */ unlinkSendsLinkedForInvalidClasses(); } - /* begin followForwardingPointersInScheduler */ + if (theBecomeEffectsFlags & BecamePointerObjectFlag) { + /* begin followForwardingPointersInScheduler */
- /* the GC follows pointers in the special objects array for us. */ + /* the GC follows pointers in the special objects array for us. */
- schedAssoc = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << (shiftForWord()))); - assert(!(isForwarded(schedAssoc))); - /* begin followObjField:ofObject: */ - objOop4 = longAt((schedAssoc + BaseHeaderSize) + (ValueIndex << (shiftForWord()))); - assert(isNonImmediate(objOop4)); - if (((longAt(objOop4)) & (0x3FFFFF - 8)) == 0) { - objOop4 = fixFollowedFieldofObjectwithInitialValue(ValueIndex, schedAssoc, objOop4); - } - sched = objOop4; - /* begin followObjField:ofObject: */ - objOop5 = longAt((sched + BaseHeaderSize) + (ProcessListsIndex << (shiftForWord()))); - assert(isNonImmediate(objOop5)); - if (((longAt(objOop5)) & (0x3FFFFF - 8)) == 0) { - objOop5 = fixFollowedFieldofObjectwithInitialValue(ProcessListsIndex, sched, objOop5); - } - procLists = objOop5; - for (i3 = 0, iLimiT = ((numSlotsOf(procLists)) - 1); i3 <= iLimiT; i3 += 1) { + schedAssoc = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << (shiftForWord()))); + assert(!(isForwarded(schedAssoc))); + followForwardedObjectFieldstoDepth(schedAssoc, 1); + sched = longAt((schedAssoc + BaseHeaderSize) + (ValueIndex << (shiftForWord()))); /* begin followObjField:ofObject: */ - objOop1 = longAt((procLists + BaseHeaderSize) + (i3 << (shiftForWord()))); - assert(isNonImmediate(objOop1)); - if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) { - objOop1 = fixFollowedFieldofObjectwithInitialValue(i3, procLists, objOop1); + objOop4 = longAt((sched + BaseHeaderSize) + (ProcessListsIndex << (shiftForWord()))); + assert(isNonImmediate(objOop4)); + if (((longAt(objOop4)) & (0x3FFFFF - 8)) == 0) { + objOop4 = fixFollowedFieldofObjectwithInitialValue(ProcessListsIndex, sched, objOop4); } - list = objOop1; - /* begin followObjField:ofObject: */ - objOop2 = longAt((list + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); - assert(isNonImmediate(objOop2)); - if (((longAt(objOop2)) & (0x3FFFFF - 8)) == 0) { - objOop2 = fixFollowedFieldofObjectwithInitialValue(FirstLinkIndex, list, objOop2); - } - first = objOop2; - /* begin followObjField:ofObject: */ - objOop3 = longAt((list + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); - assert(isNonImmediate(objOop3)); - if (((longAt(objOop3)) & (0x3FFFFF - 8)) == 0) { - objOop3 = fixFollowedFieldofObjectwithInitialValue(LastLinkIndex, list, objOop3); - } - last = objOop3; - while (first != last) { + procLists = objOop4; + for (i3 = 0, iLimiT = ((numSlotsOf(procLists)) - 1); i3 <= iLimiT; i3 += 1) { /* begin followObjField:ofObject: */ - objOop = longAt((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); - assert(isNonImmediate(objOop)); - if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) { - objOop = fixFollowedFieldofObjectwithInitialValue(NextLinkIndex, first, objOop); + objOop1 = longAt((procLists + BaseHeaderSize) + (i3 << (shiftForWord()))); + assert(isNonImmediate(objOop1)); + if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) { + objOop1 = fixFollowedFieldofObjectwithInitialValue(i3, procLists, objOop1); } - next = objOop; - first = next; - } - } - /* begin followForwardingPointersInSpecialObjectsArray */ - /* begin followSemaphoreIn:at: */ - obj1 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord()))); - if (((longAt(obj1)) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(obj1)); - referent11 = longAt((obj1 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent11 & 3) == 0) - && (((longAt(referent11)) & 0x3FFFFF) == 8)) { - referent11 = longAt((referent11 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj1 = referent11; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { - - /* most stores into young objects */ - - if (((obj1 & 3) == 0) - && (oopisLessThan(obj1, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + list = objOop1; + /* begin followObjField:ofObject: */ + objOop2 = longAt((list + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); + assert(isNonImmediate(objOop2)); + if (((longAt(objOop2)) & (0x3FFFFF - 8)) == 0) { + objOop2 = fixFollowedFieldofObjectwithInitialValue(FirstLinkIndex, list, objOop2); + } + first = objOop2; + /* begin followObjField:ofObject: */ + objOop3 = longAt((list + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); + assert(isNonImmediate(objOop3)); + if (((longAt(objOop3)) & (0x3FFFFF - 8)) == 0) { + objOop3 = fixFollowedFieldofObjectwithInitialValue(LastLinkIndex, list, objOop3); + } + last = objOop3; + while (first != last) { + /* begin followObjField:ofObject: */ + objOop = longAt((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); + assert(isNonImmediate(objOop)); + if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) { + objOop = fixFollowedFieldofObjectwithInitialValue(NextLinkIndex, first, objOop); } + next = objOop; + first = next; } } - longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord())), obj1); - } - /* begin followSemaphoreIn:at: */ - obj2 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord()))); - if (((longAt(obj2)) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(obj2)); - referent21 = longAt((obj2 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent21 & 3) == 0) - && (((longAt(referent21)) & 0x3FFFFF) == 8)) { - referent21 = longAt((referent21 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj2 = referent21; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { + /* begin followForwardingPointersInSpecialObjectsArray */ + /* begin followSemaphoreIn:at: */ + obj1 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord()))); + if (((longAt(obj1)) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(obj1)); + referent11 = longAt((obj1 + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent11 & 3) == 0) + && (((longAt(referent11)) & 0x3FFFFF) == 8)) { + referent11 = longAt((referent11 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + obj1 = referent11; + /* begin storePointer:ofObject:withValue: */ + assert(!(isForwarded(GIV(specialObjectsOop)))); + if (isOldObject(GIV(specialObjectsOop))) {
- /* most stores into young objects */ + /* most stores into young objects */
- if (((obj2 & 3) == 0) - && (oopisLessThan(obj2, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + if (((obj1 & 3) == 0) + && (oopisLessThan(obj1, GIV(newSpaceLimit)))) { + /* begin possibleRootStoreInto: */ + if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { + remember(GIV(specialObjectsOop)); + } } } + longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord())), obj1); } - longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord())), obj2); - } - /* begin followSemaphoreIn:at: */ - obj3 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheTimerSemaphore << (shiftForWord()))); - if (((longAt(obj3)) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(obj3)); - referent31 = longAt((obj3 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent31 & 3) == 0) - && (((longAt(referent31)) & 0x3FFFFF) == 8)) { - referent31 = longAt((referent31 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj3 = referent31; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { + /* begin followSemaphoreIn:at: */ + obj2 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord()))); + if (((longAt(obj2)) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(obj2)); + referent21 = longAt((obj2 + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent21 & 3) == 0) + && (((longAt(referent21)) & 0x3FFFFF) == 8)) { + referent21 = longAt((referent21 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + obj2 = referent21; + /* begin storePointer:ofObject:withValue: */ + assert(!(isForwarded(GIV(specialObjectsOop)))); + if (isOldObject(GIV(specialObjectsOop))) {
- /* most stores into young objects */ + /* most stores into young objects */
- if (((obj3 & 3) == 0) - && (oopisLessThan(obj3, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + if (((obj2 & 3) == 0) + && (oopisLessThan(obj2, GIV(newSpaceLimit)))) { + /* begin possibleRootStoreInto: */ + if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { + remember(GIV(specialObjectsOop)); + } } } + longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord())), obj2); } - 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)); - referent4 = longAt((obj4 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent4 & 3) == 0) - && (((longAt(referent4)) & 0x3FFFFF) == 8)) { - referent4 = longAt((referent4 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj4 = referent4; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { + /* begin followSemaphoreIn:at: */ + obj3 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheTimerSemaphore << (shiftForWord()))); + if (((longAt(obj3)) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(obj3)); + referent31 = longAt((obj3 + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent31 & 3) == 0) + && (((longAt(referent31)) & 0x3FFFFF) == 8)) { + referent31 = longAt((referent31 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + obj3 = referent31; + /* begin storePointer:ofObject:withValue: */ + assert(!(isForwarded(GIV(specialObjectsOop)))); + if (isOldObject(GIV(specialObjectsOop))) {
- /* most stores into young objects */ + /* most stores into young objects */
- if (((obj4 & 3) == 0) - && (oopisLessThan(obj4, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + if (((obj3 & 3) == 0) + && (oopisLessThan(obj3, GIV(newSpaceLimit)))) { + /* begin possibleRootStoreInto: */ + if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { + remember(GIV(specialObjectsOop)); + } } } + longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheTimerSemaphore << (shiftForWord())), obj3); } - 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))) { + /* begin followSemaphoreIn:at: */ + obj4 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheFinalizationSemaphore << (shiftForWord()))); + if (((longAt(obj4)) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(obj4)); + referent4 = longAt((obj4 + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent4 & 3) == 0) + && (((longAt(referent4)) & 0x3FFFFF) == 8)) { + referent4 = longAt((referent4 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + obj4 = referent4; + /* begin storePointer:ofObject:withValue: */ + assert(!(isForwarded(GIV(specialObjectsOop)))); + if (isOldObject(GIV(specialObjectsOop))) {
- /* most stores into young objects */ + /* most stores into young objects */
- if (((xArray & 3) == 0) - && (oopisLessThan(xArray, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + if (((obj4 & 3) == 0) + && (oopisLessThan(obj4, GIV(newSpaceLimit)))) { + /* begin possibleRootStoreInto: */ + if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { + remember(GIV(specialObjectsOop)); + } } } + longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheFinalizationSemaphore << (shiftForWord())), obj4); } - longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (ExternalObjectsArray << (shiftForWord())), xArray); - } - for (i4 = 0, iLimiT1 = ((numSlotsOf(xArray)) - 1); i4 <= iLimiT1; i4 += 1) { - /* begin followSemaphoreIn:at: */ - obj = longAt((xArray + BaseHeaderSize) + (i4 << (shiftForWord()))); - if (((longAt(obj)) & (0x3FFFFF - 8)) == 0) { + xArray = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ExternalObjectsArray << (shiftForWord()))); + if (((longAt(xArray)) & (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()))); + assert(isUnambiguouslyForwarder(xArray)); + referent6 = longAt((xArray + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent6 & 3) == 0) + && (((longAt(referent6)) & 0x3FFFFF) == 8)) { + referent6 = longAt((referent6 + BaseHeaderSize) + (0 << (shiftForWord()))); } - obj = referent5; + xArray = referent6; + /* begin splObj:put: */ /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(xArray))); - if (isOldObject(xArray)) { + assert(!(isForwarded(GIV(specialObjectsOop)))); + if (isOldObject(GIV(specialObjectsOop))) {
/* most stores into young objects */
- if (((obj & 3) == 0) - && (oopisLessThan(obj, GIV(newSpaceLimit)))) { + if (((xArray & 3) == 0) + && (oopisLessThan(xArray, GIV(newSpaceLimit)))) { /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(xArray))) >> 29) & 1) != 0)) { - remember(xArray); + if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { + remember(GIV(specialObjectsOop)); } } } - longAtput((xArray + BaseHeaderSize) + (i4 << (shiftForWord())), obj); + longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (ExternalObjectsArray << (shiftForWord())), xArray); } - } - /* begin followForwardingPointersInProfileState */ - if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(GIV(profileProcess))); - referent1 = longAt((GIV(profileProcess) + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent1 & 3) == 0) - && (((longAt(referent1)) & 0x3FFFFF) == 8)) { - referent1 = longAt((referent1 + BaseHeaderSize) + (0 << (shiftForWord()))); + for (i4 = 0, iLimiT1 = ((numSlotsOf(xArray)) - 1); i4 <= iLimiT1; i4 += 1) { + /* begin followSemaphoreIn:at: */ + obj = longAt((xArray + BaseHeaderSize) + (i4 << (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) + && (oopisLessThan(obj, GIV(newSpaceLimit)))) { + /* begin possibleRootStoreInto: */ + if (!(((((usqInt) (longAt(xArray))) >> 29) & 1) != 0)) { + remember(xArray); + } + } + } + longAtput((xArray + BaseHeaderSize) + (i4 << (shiftForWord())), obj); + } } - GIV(profileProcess) = referent1; } - if (((longAt(GIV(profileMethod))) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(GIV(profileMethod))); - referent2 = longAt((GIV(profileMethod) + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent2 & 3) == 0) - && (((longAt(referent2)) & 0x3FFFFF) == 8)) { - referent2 = longAt((referent2 + BaseHeaderSize) + (0 << (shiftForWord()))); + if (theBecomeEffectsFlags & (BecamePointerObjectFlag + BecameCompiledMethodFlag)) { + /* begin followForwardingPointersInProfileState */ + if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(GIV(profileProcess))); + referent1 = longAt((GIV(profileProcess) + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent1 & 3) == 0) + && (((longAt(referent1)) & 0x3FFFFF) == 8)) { + referent1 = longAt((referent1 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + GIV(profileProcess) = referent1; } - GIV(profileMethod) = referent2; - } - if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(GIV(profileSemaphore))); - referent3 = longAt((GIV(profileSemaphore) + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent3 & 3) == 0) - && (((longAt(referent3)) & 0x3FFFFF) == 8)) { - referent3 = longAt((referent3 + BaseHeaderSize) + (0 << (shiftForWord()))); + if (((longAt(GIV(profileMethod))) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(GIV(profileMethod))); + referent2 = longAt((GIV(profileMethod) + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent2 & 3) == 0) + && (((longAt(referent2)) & 0x3FFFFF) == 8)) { + referent2 = longAt((referent2 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + GIV(profileMethod) = referent2; } - GIV(profileSemaphore) = referent3; + if (((longAt(GIV(profileProcess))) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(GIV(profileSemaphore))); + referent3 = longAt((GIV(profileSemaphore) + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent3 & 3) == 0) + && (((longAt(referent3)) & 0x3FFFFF) == 8)) { + referent3 = longAt((referent3 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + GIV(profileSemaphore) = referent3; + } } } followForwardingPointersInStackZone(theBecomeEffectsFlags);
Modified: branches/Cog/nsspursrc/vm/cointerp.h =================================================================== --- branches/Cog/nsspursrc/vm/cointerp.h 2015-07-04 16:09:13 UTC (rev 3396) +++ branches/Cog/nsspursrc/vm/cointerp.h 2015-07-06 18:56:39 UTC (rev 3397) @@ -1,5 +1,5 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b */
@@ -258,7 +258,7 @@ extern sqInt splObj(sqInt index); extern usqInt storeCheckBoundary(void); extern sqInt storePointerUncheckedofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer); -extern sqInt stringForCString(const char *aCString); +extern usqInt stringForCString(const char *aCString); extern void tenuringIncrementalGC(void); extern sqInt topRemappableOop(void); extern sqInt validFreeTree(void);
Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2015-07-04 16:09:13 UTC (rev 3396) +++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2015-07-06 18:56:39 UTC (rev 3397) @@ -2,11 +2,11 @@
/* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b from - CoInterpreter VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 + CoInterpreter VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1403 uuid: 66fdf690-416b-4359-be28-c0387023baa6 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1405 uuid: 7aff388a-73ba-4202-bb5a-72b0759ff46b " __DATE__ ; char *__interpBuildInfo = __buildInfo;
@@ -1210,7 +1210,7 @@ static sqInt storeImageSegmentIntooutPointersroots(sqInt segmentWordArray, sqInt outPointerArray, sqInt arrayOfRoots) NoDbgRegParms; extern sqInt storePointerUncheckedofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer); extern sqInt storePointerofObjectwithValue(sqInt fieldIndex, sqInt objOop, sqInt valuePointer); -extern sqInt stringForCString(const char *aCString); +extern usqInt stringForCString(const char *aCString); static sqInt sufficientSpaceAfterGC(sqInt numBytes) NoDbgRegParms; static sqInt swizzleObjStackAt(sqInt objStackRootIndex) NoDbgRegParms; extern void tenuringIncrementalGC(void); @@ -2413,7 +2413,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.1403"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1405"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */; volatile int sendTrace;
@@ -28749,11 +28749,15 @@ longAtput((process + BaseHeaderSize) + (MyListIndex << (shiftForWord())), myList); } /* begin removeProcess:fromList: */ - assert(!(isForwarded(myList))); + assert(!((isForwarded(process)))); + assert(!((isForwarded(myList)))); firstLink = longAt((myList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); lastLink = longAt((myList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); + assert(!((isForwarded(firstLink)))); + assert(!((isForwarded(lastLink)))); if (process == firstLink) { nextLink = longAt((process + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); + assert(!((isForwarded(nextLink)))); /* begin storePointer:ofObject:withValue: */ assert(!(isForwarded(myList))); if (isOldObject(myList)) { @@ -28770,36 +28774,20 @@ } longAtput((myList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())), nextLink); if (process == lastLink) { - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(myList))); - if (isOldObject(myList)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(myList))) >> 29) & 1) != 0)) { - remember(myList); - } - } - } longAtput((myList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord())), GIV(nilObj)); } } else { tempLink = firstLink; while (1) { + assert(!((isForwarded(tempLink)))); if (tempLink == GIV(nilObj)) { - /* begin success: */ - - /* Don't overwrite an error code that has already been set. */ - + /* begin primitiveFail */ if (!GIV(primFailCode)) { GIV(primFailCode) = 1; } - - null; goto l1; } nextLink = longAt((tempLink + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); @@ -32453,7 +32441,7 @@ usqInt newObj; usqInt numBytes; sqInt numSlots; - sqInt s; + usqInt s; char *sp; sqInt sz;
@@ -38130,7 +38118,7 @@ sqInt err; sqInt hash; sqInt instSpec; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; sqInt numSlots; @@ -38255,7 +38243,7 @@ sqInt i; usqInt instSpec; sqInt literalCount; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; sqInt numSlots; @@ -44171,7 +44159,7 @@ sqInt fillValue; sqInt hash; usqInt instSpec; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; usqInt numSlots; @@ -46303,7 +46291,7 @@ sqInt entry; sqInt expectedIndex; sqInt expectedIndex1; - sqInt freeChunk; + usqInt freeChunk; sqInt i; sqInt i1; sqInt index; @@ -46342,8 +46330,8 @@ sqInt ptr1; sqInt ptr2; sqInt slotBytes; - sqInt smallObj; - sqInt start; + usqInt smallObj; + usqInt start;
classIndex = (long32At(aClass + 4)) & 0x3FFFFF; if (classIndex == 0) { @@ -49284,7 +49272,7 @@ sqInt fmt; sqInt hasYoung; sqInt i; - sqInt newObj; + usqInt newObj; usqInt newObj1; usqInt numBytes; usqInt numSlots; @@ -60612,7 +60600,7 @@ usqInt prevFree; usqInt prevFreeChunk; usqInt prevPrevFree; - usqInt prevPrevFreeChunk; + sqInt prevPrevFreeChunk; sqInt slotBytes; sqInt slotBytes1; usqInt there; @@ -61721,6 +61709,7 @@ { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt i; sqInt oldClone; + sqInt referent; SpurSegmentInfo *seg;
assert(isNonImmediate(objOop)); @@ -61780,6 +61769,18 @@ if ((byteAt(objOop + 7)) == 0) { byteAtput(objOop + 7, 1); } + /* begin followSpecialObjectsOop */ + if (((longAt(GIV(specialObjectsOop))) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(GIV(specialObjectsOop))); + referent = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent & 3) == 0) + && (((longAt(referent)) & 0x3FFFFF) == 8)) { + referent = longAt((referent + BaseHeaderSize) + (0 << (shiftForWord()))); + } + GIV(specialObjectsOop) = referent; + } + followForwardedObjectFieldstoDepth(GIV(specialObjectsOop), 0); /* begin postBecomeAction: */ spurPostBecomeAction(GIV(becomeEffectsFlags));
@@ -63958,8 +63959,8 @@ sqInt prevPrevObj; sqInt prevPrevObj1; sqInt ptr; - sqInt savedInHashes; - sqInt savedOutHashes; + usqInt savedInHashes; + usqInt savedOutHashes; sqInt segAddr; sqInt segStart; sqInt slotBytes; @@ -64429,13 +64430,13 @@ or nil if out of memory. */
/* SpurMemoryManager>>#stringForCString: */ -sqInt +usqInt stringForCString(const char *aCString) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt formatField; sqInt len; usqInt newObj; - sqInt newString; + usqInt newString; usqInt numBytes; sqInt numSlots;
@@ -65706,7 +65707,7 @@ usqLong firstSavedBridgeWord; sqInt nWritten; usqInt pier1; - sqInt pier2; + usqInt pier2; usqLong secondSavedBridgeWord;
pier1 = (((segment->segSize)) + ((segment->segStart))) - (2 * BaseHeaderSize); @@ -65791,7 +65792,8 @@ { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt lastLink;
- assert(!(isForwarded(aList))); + assert(!((isForwarded(proc)))); + assert(!((isForwarded(aList)))); assert((fetchPointerofObject(NextLinkIndex, proc)) == (nilObject())); if (isEmptyList(aList)) { /* begin storePointer:ofObject:withValue: */ @@ -76399,39 +76401,17 @@ sqInt last; sqInt next;
- assert(!(isForwarded(aList))); + assert(!((isForwarded(aList)))); first = longAt((aList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); last = longAt((aList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); + assert(!((isForwarded(first)))); + assert(!((isForwarded(last)))); if (first == last) { - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(aList))); - if (isOldObject(aList)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(aList))) >> 29) & 1) != 0)) { - remember(aList); - } - } - } longAtput((aList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())), GIV(nilObj)); - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(aList))); - if (isOldObject(aList)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(aList))) >> 29) & 1) != 0)) { - remember(aList); - } - } - } longAtput((aList + BaseHeaderSize) + (LastLinkIndex << (shiftForWord())), GIV(nilObj)); } else { @@ -76452,20 +76432,8 @@ } longAtput((aList + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord())), next); } - /* begin storePointer:ofObject:withValue: */ + /* begin storePointerUnchecked:ofObject:withValue: */ assert(!(isForwarded(first))); - if (isOldObject(first)) { - - /* most stores into young objects */ - - if (((GIV(nilObj) & 3) == 0) - && (oopisLessThan(GIV(nilObj), GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(first))) >> 29) & 1) != 0)) { - remember(first); - } - } - } longAtput((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord())), GIV(nilObj)); return first; } @@ -77604,7 +77572,6 @@ sqInt objOop2; sqInt objOop3; sqInt objOop4; - sqInt objOop5; sqInt procLists; sqInt referent; sqInt referent1; @@ -77671,254 +77638,253 @@ /* begin flushBecommedClassesInMethodZone */ unlinkSendsLinkedForInvalidClasses(); } - /* begin followForwardingPointersInScheduler */ + if (theBecomeEffectsFlags & BecamePointerObjectFlag) { + /* begin followForwardingPointersInScheduler */
- /* the GC follows pointers in the special objects array for us. */ + /* the GC follows pointers in the special objects array for us. */
- schedAssoc = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << (shiftForWord()))); - assert(!(isForwarded(schedAssoc))); - /* begin followObjField:ofObject: */ - objOop4 = longAt((schedAssoc + BaseHeaderSize) + (ValueIndex << (shiftForWord()))); - assert(isNonImmediate(objOop4)); - if (((longAt(objOop4)) & (0x3FFFFF - 8)) == 0) { - objOop4 = fixFollowedFieldofObjectwithInitialValue(ValueIndex, schedAssoc, objOop4); - } - sched = objOop4; - /* begin followObjField:ofObject: */ - objOop5 = longAt((sched + BaseHeaderSize) + (ProcessListsIndex << (shiftForWord()))); - assert(isNonImmediate(objOop5)); - if (((longAt(objOop5)) & (0x3FFFFF - 8)) == 0) { - objOop5 = fixFollowedFieldofObjectwithInitialValue(ProcessListsIndex, sched, objOop5); - } - procLists = objOop5; - for (i3 = 0, iLimiT = ((numSlotsOf(procLists)) - 1); i3 <= iLimiT; i3 += 1) { + schedAssoc = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << (shiftForWord()))); + assert(!(isForwarded(schedAssoc))); + followForwardedObjectFieldstoDepth(schedAssoc, 1); + sched = longAt((schedAssoc + BaseHeaderSize) + (ValueIndex << (shiftForWord()))); /* begin followObjField:ofObject: */ - objOop1 = longAt((procLists + BaseHeaderSize) + (i3 << (shiftForWord()))); - assert(isNonImmediate(objOop1)); - if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) { - objOop1 = fixFollowedFieldofObjectwithInitialValue(i3, procLists, objOop1); + objOop4 = longAt((sched + BaseHeaderSize) + (ProcessListsIndex << (shiftForWord()))); + assert(isNonImmediate(objOop4)); + if (((longAt(objOop4)) & (0x3FFFFF - 8)) == 0) { + objOop4 = fixFollowedFieldofObjectwithInitialValue(ProcessListsIndex, sched, objOop4); } - list = objOop1; - /* begin followObjField:ofObject: */ - objOop2 = longAt((list + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); - assert(isNonImmediate(objOop2)); - if (((longAt(objOop2)) & (0x3FFFFF - 8)) == 0) { - objOop2 = fixFollowedFieldofObjectwithInitialValue(FirstLinkIndex, list, objOop2); - } - first = objOop2; - /* begin followObjField:ofObject: */ - objOop3 = longAt((list + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); - assert(isNonImmediate(objOop3)); - if (((longAt(objOop3)) & (0x3FFFFF - 8)) == 0) { - objOop3 = fixFollowedFieldofObjectwithInitialValue(LastLinkIndex, list, objOop3); - } - last = objOop3; - while (first != last) { + procLists = objOop4; + for (i3 = 0, iLimiT = ((numSlotsOf(procLists)) - 1); i3 <= iLimiT; i3 += 1) { /* begin followObjField:ofObject: */ - objOop = longAt((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); - assert(isNonImmediate(objOop)); - if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) { - objOop = fixFollowedFieldofObjectwithInitialValue(NextLinkIndex, first, objOop); + objOop1 = longAt((procLists + BaseHeaderSize) + (i3 << (shiftForWord()))); + assert(isNonImmediate(objOop1)); + if (((longAt(objOop1)) & (0x3FFFFF - 8)) == 0) { + objOop1 = fixFollowedFieldofObjectwithInitialValue(i3, procLists, objOop1); } - next = objOop; - first = next; - } - } - /* begin followForwardingPointersInSpecialObjectsArray */ - /* begin followSemaphoreIn:at: */ - obj1 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord()))); - if (((longAt(obj1)) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(obj1)); - referent11 = longAt((obj1 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent11 & 3) == 0) - && (((longAt(referent11)) & 0x3FFFFF) == 8)) { - referent11 = longAt((referent11 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj1 = referent11; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { - - /* most stores into young objects */ - - if (((obj1 & 3) == 0) - && (oopisLessThan(obj1, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + list = objOop1; + /* begin followObjField:ofObject: */ + objOop2 = longAt((list + BaseHeaderSize) + (FirstLinkIndex << (shiftForWord()))); + assert(isNonImmediate(objOop2)); + if (((longAt(objOop2)) & (0x3FFFFF - 8)) == 0) { + objOop2 = fixFollowedFieldofObjectwithInitialValue(FirstLinkIndex, list, objOop2); + } + first = objOop2; + /* begin followObjField:ofObject: */ + objOop3 = longAt((list + BaseHeaderSize) + (LastLinkIndex << (shiftForWord()))); + assert(isNonImmediate(objOop3)); + if (((longAt(objOop3)) & (0x3FFFFF - 8)) == 0) { + objOop3 = fixFollowedFieldofObjectwithInitialValue(LastLinkIndex, list, objOop3); + } + last = objOop3; + while (first != last) { + /* begin followObjField:ofObject: */ + objOop = longAt((first + BaseHeaderSize) + (NextLinkIndex << (shiftForWord()))); + assert(isNonImmediate(objOop)); + if (((longAt(objOop)) & (0x3FFFFF - 8)) == 0) { + objOop = fixFollowedFieldofObjectwithInitialValue(NextLinkIndex, first, objOop); } + next = objOop; + first = next; } } - longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord())), obj1); - } - /* begin followSemaphoreIn:at: */ - obj2 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord()))); - if (((longAt(obj2)) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(obj2)); - referent21 = longAt((obj2 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent21 & 3) == 0) - && (((longAt(referent21)) & 0x3FFFFF) == 8)) { - referent21 = longAt((referent21 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj2 = referent21; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { + /* begin followForwardingPointersInSpecialObjectsArray */ + /* begin followSemaphoreIn:at: */ + obj1 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord()))); + if (((longAt(obj1)) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(obj1)); + referent11 = longAt((obj1 + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent11 & 3) == 0) + && (((longAt(referent11)) & 0x3FFFFF) == 8)) { + referent11 = longAt((referent11 + BaseHeaderSize) + (0 << (shiftForWord()))); + } + obj1 = referent11; + /* begin storePointer:ofObject:withValue: */ + assert(!(isForwarded(GIV(specialObjectsOop)))); + if (isOldObject(GIV(specialObjectsOop))) {
- /* most stores into young objects */ + /* most stores into young objects */
- if (((obj2 & 3) == 0) - && (oopisLessThan(obj2, GIV(newSpaceLimit)))) { - /* begin possibleRootStoreInto: */ - if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { - remember(GIV(specialObjectsOop)); + if (((obj1 & 3) == 0) + && (oopisLessThan(obj1, GIV(newSpaceLimit)))) { + /* begin possibleRootStoreInto: */ + if (!(((((usqInt) (longAt(GIV(specialObjectsOop)))) >> 29) & 1) != 0)) { + remember(GIV(specialObjectsOop)); + } } } + longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheLowSpaceSemaphore << (shiftForWord())), obj1); } - longAtput((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord())), obj2); - } - /* begin followSemaphoreIn:at: */ - obj3 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheTimerSemaphore << (shiftForWord()))); - if (((longAt(obj3)) & (0x3FFFFF - 8)) == 0) { - /* begin followForwarded: */ - assert(isUnambiguouslyForwarder(obj3)); - referent31 = longAt((obj3 + BaseHeaderSize) + (0 << (shiftForWord()))); - while (((referent31 & 3) == 0) - && (((longAt(referent31)) & 0x3FFFFF) == 8)) { - referent31 = longAt((referent31 + BaseHeaderSize) + (0 << (shiftForWord()))); - } - obj3 = referent31; - /* begin storePointer:ofObject:withValue: */ - assert(!(isForwarded(GIV(specialObjectsOop)))); - if (isOldObject(GIV(specialObjectsOop))) { + /* begin followSemaphoreIn:at: */ + obj2 = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (TheInterruptSemaphore << (shiftForWord()))); + if (((longAt(obj2)) & (0x3FFFFF - 8)) == 0) { + /* begin followForwarded: */ + assert(isUnambiguouslyForwarder(obj2)); + referent21 = longAt((obj2 + BaseHeaderSize) + (0 << (shiftForWord()))); + while (((referent21 & 3) == 0) + && (((longAt(referent21)) & 0x3FFFFF) == 8)) { + referent21 = longAt((referent21 + BaseHeaderSize) + (0 << (shiftForWord())));
@@ Diff output truncated at 50000 characters. @@
vm-dev@lists.squeakfoundation.org