[Vm-dev] [commit][3120] CogVM source as per VMMaker.oscog-eem.916
commits at squeakvm.org
commits at squeakvm.org
Fri Oct 31 19:13:28 UTC 2014
Revision: 3120
Author: eliot
Date: 2014-10-31 12:13:28 -0700 (Fri, 31 Oct 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.916
Spur:
Reimplement deriving the accessorDepth and retrying primitives on primitive
failure machinery. Always take the primitive index from newMethod (setting
newMethod to a SmallInteger for primitiveDoPrimitiveWithArgs.
Have the Cogit always set primitiveFunctionPointer and newMethod for the retry.
Add isNonInteger(Non)Immediate: and use it in several of
the integer conversion routines that were missing code
to exclude Character immediates, with fatal consequences.
With these changes the Pharo 4 test suite runs without
crashing on the latest Pharo Spur boot image.
Modified Paths:
--------------
branches/Cog/nscogsrc/vm/cogit.c
branches/Cog/nscogsrc/vm/cogit.h
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/cointerp.h
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/nsspursrc/vm/cogit.c
branches/Cog/nsspursrc/vm/cogit.h
branches/Cog/nsspursrc/vm/cointerp.c
branches/Cog/nsspursrc/vm/cointerp.h
branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
branches/Cog/nsspurstacksrc/vm/interp.c
branches/Cog/sistasrc/vm/cogit.c
branches/Cog/sistasrc/vm/cogit.h
branches/Cog/sistasrc/vm/cointerp.c
branches/Cog/sistasrc/vm/cointerp.h
branches/Cog/sistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursistasrc/vm/cogit.c
branches/Cog/spursistasrc/vm/cogit.h
branches/Cog/spursistasrc/vm/cointerp.c
branches/Cog/spursistasrc/vm/cointerp.h
branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursrc/vm/cogit.c
branches/Cog/spursrc/vm/cogit.h
branches/Cog/spursrc/vm/cointerp.c
branches/Cog/spursrc/vm/cointerp.h
branches/Cog/spursrc/vm/gcc3x-cointerp.c
branches/Cog/spurstacksrc/vm/gcc3x-interp.c
branches/Cog/spurstacksrc/vm/interp.c
branches/Cog/src/vm/cogit.c
branches/Cog/src/vm/cogit.h
branches/Cog/src/vm/cointerp.c
branches/Cog/src/vm/cointerp.h
branches/Cog/src/vm/cointerpmt.c
branches/Cog/src/vm/cointerpmt.h
branches/Cog/src/vm/gcc3x-cointerp.c
branches/Cog/src/vm/gcc3x-cointerpmt.c
branches/Cog/stacksrc/vm/gcc3x-interp.c
branches/Cog/stacksrc/vm/interp.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nscogsrc/vm/cogit.c 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd
+ CCodeGenerator VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd
+ StackToRegisterMappingCogit VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nscogsrc/vm/cogit.h 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd
+ CCodeGenerator VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
from
- CoInterpreter VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
+ CoInterpreter VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -275,7 +275,6 @@
#define NilObject 0
#define OldBecameNewFlag 4
#define PrimCallCollectsProfileSamples 8
-#define PrimCallDoNotJIT 32
#define PrimCallMayCallBack 4
#define PrimCallNeedsNewMethod 1
#define PrimCallNeedsPrimitiveFunction 2
@@ -1338,32 +1337,33 @@
_iss char * stackBasePlus1;
_iss sqInt trueObj;
_iss sqInt falseObj;
-_iss sqInt remapBufferCount;
_iss sqInt bytesPerPage;
_iss sqInt traceLogIndex;
+_iss sqInt remapBufferCount;
_iss usqInt reserveStart;
_iss char * stackLimit;
_iss sqInt rootTableCount;
_iss usqInt memoryLimit;
-_iss usqInt endOfMemory;
_iss usqInt scavengeThreshold;
+_iss usqInt endOfMemory;
_iss unsigned char primTraceLogIndex;
_iss StackPage * mostRecentlyUsedPage;
_iss sqInt numStackPages;
+_iss sqInt tempOop;
_iss sqInt needGCFlag;
_iss sqInt profileProcess;
+_iss sqLong nextProfileTick;
_iss sqInt jmpDepth;
_iss sqInt longRunningPrimitiveCheckSemaphore;
-_iss sqLong nextProfileTick;
_iss sqInt profileSemaphore;
_iss sqInt profileMethod;
_iss usqInt fwdTableNext;
-_iss sqInt tempOop;
_iss sqInt longRunningPrimitiveCheckMethod;
_iss usqInt compStart;
_iss sqInt extraRootCount;
_iss sqInt classNameIndex;
_iss sqInt statGrowMemory;
+_iss sqInt tempOop2;
_iss sqInt weakRootCount;
_iss sqInt growHeadroom;
_iss sqInt lastMethodCacheProbeWrite;
@@ -2087,7 +2087,7 @@
/* 574 */ (void (*)(void))0,
/* 575 */ (void (*)(void))0,
0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.914";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.916";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -5351,6 +5351,7 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
+ assert((remapBufferCount()) == 0);
nArgs = GIV(argumentCount);
savedStackPointer = GIV(stackPointer);
savedFramePointer = GIV(framePointer);
@@ -5358,8 +5359,8 @@
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -16984,6 +16985,7 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
+ assert((remapBufferCount()) == 0);
nArgs = GIV(argumentCount);
savedStackPointer = GIV(stackPointer);
savedFramePointer = GIV(framePointer);
@@ -16991,8 +16993,8 @@
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -18295,30 +18297,25 @@
primitivePropertyFlags(sqInt primIndex)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt baseFlags;
- void (*functionPointer)(void);
+ sqInt baseFlags1;
- /* begin functionPointerFor:inClass: */
- functionPointer = ((void (*)(void)) ((primIndex > MaxPrimitiveIndex
- ? 0
- : primitiveTable[primIndex])));
-
- baseFlags = (GIV(profileSemaphore) != GIV(nilObj)
+ /* begin primitivePropertyFlagsForV3: */
+ baseFlags1 = (GIV(profileSemaphore) != GIV(nilObj)
? PrimCallNeedsNewMethod + PrimCallCollectsProfileSamples
: 0);
- if (GIV(longRunningPrimitiveCheckSemaphore) != null) {
- baseFlags = baseFlags | PrimCallNeedsNewMethod;
+ if (!(GIV(longRunningPrimitiveCheckSemaphore) == null)) {
+ baseFlags1 = baseFlags1 | PrimCallNeedsNewMethod;
}
- if ((functionPointer == primitiveExternalCall)
- || (functionPointer == primitiveCalloutToFFI)) {
+ null;
+ if ((primIndex == 117)
+ || (primIndex == 120)) {
/* For callbacks */
- baseFlags = baseFlags | ((PrimCallNeedsNewMethod + PrimCallNeedsPrimitiveFunction) + PrimCallMayCallBack);
- if (checkAllocFiller) {
- baseFlags = baseFlags | CheckAllocationFillerAfterPrimCall;
- }
+ baseFlags1 = baseFlags1 | ((PrimCallNeedsNewMethod + PrimCallNeedsPrimitiveFunction) + PrimCallMayCallBack);
}
- return baseFlags;
+ return baseFlags1;
+
}
void *
@@ -20161,6 +20158,7 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
+ assert((remapBufferCount()) == 0);
nArgs = GIV(argumentCount);
savedStackPointer = GIV(stackPointer);
savedFramePointer = GIV(framePointer);
@@ -20168,8 +20166,8 @@
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -22823,6 +22821,7 @@
if (ok) {
return 1;
}
+
/* begin primitiveFail */
if (!GIV(primFailCode)) {
GIV(primFailCode) = 1;
@@ -22909,6 +22908,7 @@
}
return ((usqLong) smallIntValue);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -22999,9 +22999,7 @@
}
return value;
}
- else {
- ;
- }
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -23050,6 +23048,7 @@
}
return (oop >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -23104,6 +23103,7 @@
}
return value;
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -30037,6 +30037,7 @@
size = value;
goto l1;
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop1 & 1)));
ccIndex = (((usqInt) (longAt(oop1))) >> (compactClassFieldLSB())) & 0x1F;
@@ -33834,6 +33835,7 @@
if ((oop & 1)) {
return (oop >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -33920,6 +33922,7 @@
if ((oop & 1)) {
return ((sqLong) ((oop >> 1)));
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -34025,6 +34028,7 @@
if ((oop & 1)) {
return (oop >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -43718,6 +43722,11 @@
ok = 0;
}
}
+ if (!(GIV(tempOop2) == 0)) {
+ if (!(checkOopIntegritynamed(GIV(tempOop2), "tempOop2"))) {
+ ok = 0;
+ }
+ }
for (i = 1; i <= GIV(jmpDepth); i += 1) {
if (!(checkOopIntegritynamedindex(GIV(suspendedCallbacks)[i], "suspendedCallbacks", i))) {
ok = 0;
@@ -45417,6 +45426,9 @@
do {
assert(!(isForwarded(currClass)));
+ if (!(addressCouldBeClassObj(currClass))) {
+ return GIV(nilObj);
+ }
classDict = longAt((currClass + BaseHeaderSize) + (MethodDictionaryIndex << ShiftForWord));
assert(!(isForwarded(classDict)));
/* begin numSlotsOf: */
@@ -45445,7 +45457,6 @@
findClassOfMethodforReceiver(sqInt meth, sqInt rcvr)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt ccIndex;
- sqInt mclass;
sqInt rclass;
if ((((rcvr & 1))
@@ -45454,16 +45465,13 @@
&& (((((usqInt)rcvr)) < GIV(freeStart))
&& (((longAt(rcvr)) & TypeMask) != HeaderTypeGC)))))
&& (!0)) {
- rclass = ((rcvr & 1)
+ rclass = findClassContainingMethodstartingAt(meth, ((rcvr & 1)
? longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassSmallInteger << ShiftForWord))
: (((ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F)) == 0
? (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask
- : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))));
- if (addressCouldBeClassObj(rclass)) {
- rclass = findClassContainingMethodstartingAt(meth, rclass);
- if (rclass != GIV(nilObj)) {
- return rclass;
- }
+ : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)))));
+ if (rclass != GIV(nilObj)) {
+ return rclass;
}
}
if (!((((meth & 3) == 0)
@@ -45473,10 +45481,6 @@
&& (((((usqInt) (longAt(meth))) >> (instFormatFieldLSB())) & 15) >= 12))) {
return GIV(nilObj);
}
- mclass = safeMethodClassOf(meth);
- if (addressCouldBeClassObj(mclass)) {
- return GIV(nilObj);
- }
return findClassContainingMethodstartingAt(meth, safeMethodClassOf(meth));
}
@@ -47370,6 +47374,12 @@
&& (((longAt(GIV(tempOop))) & MarkBit) != 0)))) {
GIV(tempOop) = remapObj(GIV(tempOop));
}
+ if ((GIV(tempOop2) != 0)
+ && (((GIV(tempOop2) & 1) == 0)
+ && (((GIV(tempOop2) & 1) == 0)
+ && (((longAt(GIV(tempOop2))) & MarkBit) != 0)))) {
+ GIV(tempOop2) = remapObj(GIV(tempOop2));
+ }
}
@@ -47435,6 +47445,9 @@
if (!(GIV(tempOop) == 0)) {
markAndTrace(GIV(tempOop));
}
+ if (!(GIV(tempOop2) == 0)) {
+ markAndTrace(GIV(tempOop2));
+ }
for (i = 1, iLimiT = (remapBufferCount()); i <= iLimiT; i += 1) {
oop = GIV(remapBuffer)[i];
if (!((oop & 1))) {
@@ -48511,7 +48524,6 @@
sqInt ccIndex1;
sqInt ccIndex2;
sqInt classObj;
- sqInt mclass;
sqInt methClass;
sqInt methodSel;
sqInt rclass;
@@ -48526,17 +48538,14 @@
&& (((((usqInt)anObject)) < GIV(freeStart))
&& (((longAt(anObject)) & TypeMask) != HeaderTypeGC)))))
&& (!0)) {
- rclass = ((anObject & 1)
+ rclass = findClassContainingMethodstartingAt(aMethod, ((anObject & 1)
? longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassSmallInteger << ShiftForWord))
: (((ccIndex2 = (((usqInt) (longAt(anObject))) >> (compactClassFieldLSB())) & 0x1F)) == 0
? (longAt(anObject - BaseHeaderSize)) & AllButTypeMask
- : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex2 - 1) << ShiftForWord))));
- if (addressCouldBeClassObj(rclass)) {
- rclass = findClassContainingMethodstartingAt(aMethod, rclass);
- if (rclass != GIV(nilObj)) {
- methClass = rclass;
- goto l1;
- }
+ : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex2 - 1) << ShiftForWord)))));
+ if (rclass != GIV(nilObj)) {
+ methClass = rclass;
+ goto l1;
}
}
if (!((((aMethod & 3) == 0)
@@ -48547,11 +48556,6 @@
methClass = GIV(nilObj);
goto l1;
}
- mclass = safeMethodClassOf(aMethod);
- if (addressCouldBeClassObj(mclass)) {
- methClass = GIV(nilObj);
- goto l1;
- }
methClass = findClassContainingMethodstartingAt(aMethod, safeMethodClassOf(aMethod));
l1: /* end findClassOfMethod:forReceiver: */;
methodSel = findSelectorOfMethod(aMethod);
@@ -51594,6 +51598,7 @@
}
return value;
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((integerPointer & 1)));
ccIndex = (((usqInt) (longAt(integerPointer))) >> (compactClassFieldLSB())) & 0x1F;
@@ -51640,6 +51645,7 @@
if ((integerPointer & 1)) {
return (integerPointer >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((integerPointer & 1)));
ccIndex1 = (((usqInt) (longAt(integerPointer))) >> (compactClassFieldLSB())) & 0x1F;
@@ -53421,7 +53427,6 @@
sqInt argumentArray;
sqInt arraySize;
sqInt ccIndex;
- sqInt ctxtRcvr;
sqInt firstBytecode;
sqInt fmt;
sqInt fmt1;
@@ -53437,14 +53442,10 @@
sqInt methodHeader;
sqInt moduleLength;
sqInt moduleName;
- sqInt oop;
- sqInt oop1;
- sqInt oop2;
- sqInt oop3;
- sqInt oop4;
- sqInt oop5;
- sqInt oop6;
- sqInt oop7;
+ sqInt object;
+ sqInt object1;
+ sqInt object2;
+ sqInt object3;
sqInt primBits;
sqInt primRcvr;
char *sp;
@@ -53461,6 +53462,10 @@
sqInt sz2;
sqInt top;
sqInt top1;
+ sqInt valuePointer;
+ sqInt valuePointer1;
+ sqInt valuePointer2;
+ sqInt valuePointer3;
argumentArray = longAt(GIV(stackPointer));
methodArg = longAt(GIV(stackPointer) + (2 * BytesPerWord));
@@ -53608,40 +53613,25 @@
(GIV(primFailCode) = -1);
return;
}
- /* begin pushRemappableOop: */
- oop = (argumentArray = popStack());
- assert(addressCouldBeOop(oop));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
- /* begin pushRemappableOop: */
- oop1 = (primRcvr = popStack());
- assert(addressCouldBeOop(oop1));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop1;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
- /* begin pushRemappableOop: */
+ GIV(tempOop) = eeInstantiateClassIndexformatnumSlots(ClassArrayCompactIndex, 2, 4);
+ /* begin storePointerUnchecked:ofObject:withValue: */
+ valuePointer = (argumentArray = popStack());
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (0 << ShiftForWord), valuePointer);
+ /* begin storePointerUnchecked:ofObject:withValue: */
+ valuePointer1 = (primRcvr = popStack());
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (1 << ShiftForWord), valuePointer1);
+ /* begin storePointerUnchecked:ofObject:withValue: */
/* begin popStack */
top = longAt(GIV(stackPointer));
GIV(stackPointer) += BytesPerWord;
- oop2 = top;
- assert(addressCouldBeOop(oop2));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop2;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
- /* begin pushRemappableOop: */
+ valuePointer2 = top;
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (2 << ShiftForWord), valuePointer2);
+ /* begin storePointerUnchecked:ofObject:withValue: */
/* begin popStack */
top1 = longAt(GIV(stackPointer));
GIV(stackPointer) += BytesPerWord;
- oop3 = top1;
- assert(addressCouldBeOop(oop3));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop3;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
+ valuePointer3 = top1;
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (3 << ShiftForWord), valuePointer3);
/* begin push: */
longAtput((sp5 = GIV(stackPointer) - BytesPerWord), primRcvr);
GIV(stackPointer) = sp5;
@@ -53652,6 +53642,7 @@
GIV(stackPointer) = sp;
}
/* begin callExternalPrimitive: */
+ ;
dispatchFunctionPointer(addr);
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
@@ -53660,22 +53651,7 @@
GIV(primFailCode) = PrimErrWritePastObject;
}
}
- /* begin popRemappableOop */
- oop4 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- ctxtRcvr = oop4;
- /* begin popRemappableOop */
- oop5 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- methodArg = oop5;
- /* begin popRemappableOop */
- oop6 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- primRcvr = oop6;
- /* begin popRemappableOop */
- oop7 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- argumentArray = oop7;
+
if (GIV(primFailCode)) {
/* If primitive failed, then restore state for failure code */
@@ -53684,16 +53660,20 @@
GIV(stackPointer) += (arraySize + 1) * BytesPerWord;
null;
/* begin push: */
- longAtput((sp1 = GIV(stackPointer) - BytesPerWord), ctxtRcvr);
+ object = longAt((GIV(tempOop) + BaseHeaderSize) + (3 << ShiftForWord));
+ longAtput((sp1 = GIV(stackPointer) - BytesPerWord), object);
GIV(stackPointer) = sp1;
/* begin push: */
- longAtput((sp2 = GIV(stackPointer) - BytesPerWord), methodArg);
+ object1 = longAt((GIV(tempOop) + BaseHeaderSize) + (2 << ShiftForWord));
+ longAtput((sp2 = GIV(stackPointer) - BytesPerWord), object1);
GIV(stackPointer) = sp2;
/* begin push: */
- longAtput((sp3 = GIV(stackPointer) - BytesPerWord), primRcvr);
+ object2 = longAt((GIV(tempOop) + BaseHeaderSize) + (1 << ShiftForWord));
+ longAtput((sp3 = GIV(stackPointer) - BytesPerWord), object2);
GIV(stackPointer) = sp3;
/* begin push: */
- longAtput((sp4 = GIV(stackPointer) - BytesPerWord), argumentArray);
+ object3 = longAt((GIV(tempOop) + BaseHeaderSize) + (0 << ShiftForWord));
+ longAtput((sp4 = GIV(stackPointer) - BytesPerWord), object3);
GIV(stackPointer) = sp4;
/* Hack. A nil prim error code (primErrorCode = 1) is interpreted by the image
@@ -53716,9 +53696,12 @@
sqInt index;
sqInt integerPointer;
sqInt nArgs;
+ sqInt nArgs1;
sqInt primIdx;
char *savedFramePointer;
+ char *savedFramePointer1;
char *savedStackPointer;
+ char *savedStackPointer1;
char *sp;
char *sp1;
char *sp2;
@@ -53778,6 +53761,7 @@
? 0
: primitiveTable[primIdx])));
if (primitiveFunctionPointer == 0) {
+ primitiveFunctionPointer = primitiveDoPrimitiveWithArgs;
/* begin primitiveFail */
if (!GIV(primFailCode)) {
GIV(primFailCode) = 1;
@@ -53811,15 +53795,16 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
- nArgs = GIV(argumentCount);
- savedStackPointer = GIV(stackPointer);
- savedFramePointer = GIV(framePointer);
+ assert((remapBufferCount()) == 0);
+ nArgs1 = GIV(argumentCount);
+ savedStackPointer1 = GIV(stackPointer);
+ savedFramePointer1 = GIV(framePointer);
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -53829,14 +53814,14 @@
}
if (FailImbalancedPrimitives
&& ((!GIV(primFailCode))
- && ((GIV(framePointer) == savedFramePointer)
+ && ((GIV(framePointer) == savedFramePointer1)
&& (!((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) < (startOfMemory())))))) {
/* Don't fail if primitive has done something radical, e.g. perform: */
- if (GIV(stackPointer) != (savedStackPointer + (nArgs * BytesPerWord))) {
+ if (GIV(stackPointer) != (savedStackPointer1 + (nArgs1 * BytesPerWord))) {
flag("Would be nice to make this a message send of e.g. unbalancedPrimitive to the current process or context");
- GIV(stackPointer) = savedStackPointer;
+ GIV(stackPointer) = savedStackPointer1;
failUnbalancedPrimitive();
}
}
@@ -53844,6 +53829,7 @@
checkProfileTick(GIV(newMethod));
}
!GIV(primFailCode);
+
if (GIV(primFailCode)) {
/* If primitive failed, then restore state for failure code */
@@ -53859,6 +53845,7 @@
/* begin push: */
longAtput((sp2 = GIV(stackPointer) - BytesPerWord), GIV(tempOop));
GIV(stackPointer) = sp2;
+ primitiveFunctionPointer = primitiveDoPrimitiveWithArgs;
GIV(argumentCount) = 2;
}
GIV(tempOop) = 0;
@@ -54104,6 +54091,7 @@
if (addr != 0) {
rewriteMethodCacheEntryForExternalPrimitiveToFunction(addr);
/* begin callExternalPrimitive: */
+ ;
dispatchFunctionPointer(addr);
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
@@ -54112,6 +54100,8 @@
GIV(primFailCode) = PrimErrWritePastObject;
}
}
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
return;
}
(GIV(primFailCode) = PrimErrNamedInternal);
@@ -54196,6 +54186,7 @@
if (index >= 0) {
rewriteMethodCacheEntryForExternalPrimitiveToFunction(addr);
/* begin callExternalPrimitive: */
+ ;
dispatchFunctionPointer(addr);
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
@@ -54204,6 +54195,8 @@
GIV(primFailCode) = PrimErrWritePastObject;
}
}
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
}
else {
Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-10-31 19:13:28 UTC (rev 3120)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
from
- CoInterpreter VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5
+ CoInterpreter VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.914 uuid: bda96e1c-f22e-4b32-9ee1-620740e1fec5 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -278,7 +278,6 @@
#define NilObject 0
#define OldBecameNewFlag 4
#define PrimCallCollectsProfileSamples 8
-#define PrimCallDoNotJIT 32
#define PrimCallMayCallBack 4
#define PrimCallNeedsNewMethod 1
#define PrimCallNeedsPrimitiveFunction 2
@@ -1341,32 +1340,33 @@
_iss char * stackBasePlus1;
_iss sqInt trueObj;
_iss sqInt falseObj;
-_iss sqInt remapBufferCount;
_iss sqInt bytesPerPage;
_iss sqInt traceLogIndex;
+_iss sqInt remapBufferCount;
_iss usqInt reserveStart;
_iss char * stackLimit;
_iss sqInt rootTableCount;
_iss usqInt memoryLimit;
-_iss usqInt endOfMemory;
_iss usqInt scavengeThreshold;
+_iss usqInt endOfMemory;
_iss unsigned char primTraceLogIndex;
_iss StackPage * mostRecentlyUsedPage;
_iss sqInt numStackPages;
+_iss sqInt tempOop;
_iss sqInt needGCFlag;
_iss sqInt profileProcess;
+_iss sqLong nextProfileTick;
_iss sqInt jmpDepth;
_iss sqInt longRunningPrimitiveCheckSemaphore;
-_iss sqLong nextProfileTick;
_iss sqInt profileSemaphore;
_iss sqInt profileMethod;
_iss usqInt fwdTableNext;
-_iss sqInt tempOop;
_iss sqInt longRunningPrimitiveCheckMethod;
_iss usqInt compStart;
_iss sqInt extraRootCount;
_iss sqInt classNameIndex;
_iss sqInt statGrowMemory;
+_iss sqInt tempOop2;
_iss sqInt weakRootCount;
_iss sqInt growHeadroom;
_iss sqInt lastMethodCacheProbeWrite;
@@ -2090,7 +2090,7 @@
/* 574 */ (void (*)(void))0,
/* 575 */ (void (*)(void))0,
0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.914";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.916";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -5360,6 +5360,7 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
+ assert((remapBufferCount()) == 0);
nArgs = GIV(argumentCount);
savedStackPointer = GIV(stackPointer);
savedFramePointer = GIV(framePointer);
@@ -5367,8 +5368,8 @@
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -16993,6 +16994,7 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
+ assert((remapBufferCount()) == 0);
nArgs = GIV(argumentCount);
savedStackPointer = GIV(stackPointer);
savedFramePointer = GIV(framePointer);
@@ -17000,8 +17002,8 @@
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -18304,30 +18306,25 @@
primitivePropertyFlags(sqInt primIndex)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt baseFlags;
- void (*functionPointer)(void);
+ sqInt baseFlags1;
- /* begin functionPointerFor:inClass: */
- functionPointer = ((void (*)(void)) ((primIndex > MaxPrimitiveIndex
- ? 0
- : primitiveTable[primIndex])));
-
- baseFlags = (GIV(profileSemaphore) != GIV(nilObj)
+ /* begin primitivePropertyFlagsForV3: */
+ baseFlags1 = (GIV(profileSemaphore) != GIV(nilObj)
? PrimCallNeedsNewMethod + PrimCallCollectsProfileSamples
: 0);
- if (GIV(longRunningPrimitiveCheckSemaphore) != null) {
- baseFlags = baseFlags | PrimCallNeedsNewMethod;
+ if (!(GIV(longRunningPrimitiveCheckSemaphore) == null)) {
+ baseFlags1 = baseFlags1 | PrimCallNeedsNewMethod;
}
- if ((functionPointer == primitiveExternalCall)
- || (functionPointer == primitiveCalloutToFFI)) {
+ null;
+ if ((primIndex == 117)
+ || (primIndex == 120)) {
/* For callbacks */
- baseFlags = baseFlags | ((PrimCallNeedsNewMethod + PrimCallNeedsPrimitiveFunction) + PrimCallMayCallBack);
- if (checkAllocFiller) {
- baseFlags = baseFlags | CheckAllocationFillerAfterPrimCall;
- }
+ baseFlags1 = baseFlags1 | ((PrimCallNeedsNewMethod + PrimCallNeedsPrimitiveFunction) + PrimCallMayCallBack);
}
- return baseFlags;
+ return baseFlags1;
+
}
void *
@@ -20170,6 +20167,7 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
+ assert((remapBufferCount()) == 0);
nArgs = GIV(argumentCount);
savedStackPointer = GIV(stackPointer);
savedFramePointer = GIV(framePointer);
@@ -20177,8 +20175,8 @@
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -22832,6 +22830,7 @@
if (ok) {
return 1;
}
+
/* begin primitiveFail */
if (!GIV(primFailCode)) {
GIV(primFailCode) = 1;
@@ -22918,6 +22917,7 @@
}
return ((usqLong) smallIntValue);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -23008,9 +23008,7 @@
}
return value;
}
- else {
- ;
- }
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -23059,6 +23057,7 @@
}
return (oop >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -23113,6 +23112,7 @@
}
return value;
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -30046,6 +30046,7 @@
size = value;
goto l1;
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop1 & 1)));
ccIndex = (((usqInt) (longAt(oop1))) >> (compactClassFieldLSB())) & 0x1F;
@@ -33843,6 +33844,7 @@
if ((oop & 1)) {
return (oop >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -33929,6 +33931,7 @@
if ((oop & 1)) {
return ((sqLong) ((oop >> 1)));
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -34034,6 +34037,7 @@
if ((oop & 1)) {
return (oop >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((oop & 1)));
ccIndex1 = (((usqInt) (longAt(oop))) >> (compactClassFieldLSB())) & 0x1F;
@@ -43727,6 +43731,11 @@
ok = 0;
}
}
+ if (!(GIV(tempOop2) == 0)) {
+ if (!(checkOopIntegritynamed(GIV(tempOop2), "tempOop2"))) {
+ ok = 0;
+ }
+ }
for (i = 1; i <= GIV(jmpDepth); i += 1) {
if (!(checkOopIntegritynamedindex(GIV(suspendedCallbacks)[i], "suspendedCallbacks", i))) {
ok = 0;
@@ -45426,6 +45435,9 @@
do {
assert(!(isForwarded(currClass)));
+ if (!(addressCouldBeClassObj(currClass))) {
+ return GIV(nilObj);
+ }
classDict = longAt((currClass + BaseHeaderSize) + (MethodDictionaryIndex << ShiftForWord));
assert(!(isForwarded(classDict)));
/* begin numSlotsOf: */
@@ -45454,7 +45466,6 @@
findClassOfMethodforReceiver(sqInt meth, sqInt rcvr)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt ccIndex;
- sqInt mclass;
sqInt rclass;
if ((((rcvr & 1))
@@ -45463,16 +45474,13 @@
&& (((((usqInt)rcvr)) < GIV(freeStart))
&& (((longAt(rcvr)) & TypeMask) != HeaderTypeGC)))))
&& (!0)) {
- rclass = ((rcvr & 1)
+ rclass = findClassContainingMethodstartingAt(meth, ((rcvr & 1)
? longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassSmallInteger << ShiftForWord))
: (((ccIndex = (((usqInt) (longAt(rcvr))) >> (compactClassFieldLSB())) & 0x1F)) == 0
? (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask
- : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord))));
- if (addressCouldBeClassObj(rclass)) {
- rclass = findClassContainingMethodstartingAt(meth, rclass);
- if (rclass != GIV(nilObj)) {
- return rclass;
- }
+ : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord)))));
+ if (rclass != GIV(nilObj)) {
+ return rclass;
}
}
if (!((((meth & 3) == 0)
@@ -45482,10 +45490,6 @@
&& (((((usqInt) (longAt(meth))) >> (instFormatFieldLSB())) & 15) >= 12))) {
return GIV(nilObj);
}
- mclass = safeMethodClassOf(meth);
- if (addressCouldBeClassObj(mclass)) {
- return GIV(nilObj);
- }
return findClassContainingMethodstartingAt(meth, safeMethodClassOf(meth));
}
@@ -47379,6 +47383,12 @@
&& (((longAt(GIV(tempOop))) & MarkBit) != 0)))) {
GIV(tempOop) = remapObj(GIV(tempOop));
}
+ if ((GIV(tempOop2) != 0)
+ && (((GIV(tempOop2) & 1) == 0)
+ && (((GIV(tempOop2) & 1) == 0)
+ && (((longAt(GIV(tempOop2))) & MarkBit) != 0)))) {
+ GIV(tempOop2) = remapObj(GIV(tempOop2));
+ }
}
@@ -47444,6 +47454,9 @@
if (!(GIV(tempOop) == 0)) {
markAndTrace(GIV(tempOop));
}
+ if (!(GIV(tempOop2) == 0)) {
+ markAndTrace(GIV(tempOop2));
+ }
for (i = 1, iLimiT = (remapBufferCount()); i <= iLimiT; i += 1) {
oop = GIV(remapBuffer)[i];
if (!((oop & 1))) {
@@ -48520,7 +48533,6 @@
sqInt ccIndex1;
sqInt ccIndex2;
sqInt classObj;
- sqInt mclass;
sqInt methClass;
sqInt methodSel;
sqInt rclass;
@@ -48535,17 +48547,14 @@
&& (((((usqInt)anObject)) < GIV(freeStart))
&& (((longAt(anObject)) & TypeMask) != HeaderTypeGC)))))
&& (!0)) {
- rclass = ((anObject & 1)
+ rclass = findClassContainingMethodstartingAt(aMethod, ((anObject & 1)
? longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (ClassSmallInteger << ShiftForWord))
: (((ccIndex2 = (((usqInt) (longAt(anObject))) >> (compactClassFieldLSB())) & 0x1F)) == 0
? (longAt(anObject - BaseHeaderSize)) & AllButTypeMask
- : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex2 - 1) << ShiftForWord))));
- if (addressCouldBeClassObj(rclass)) {
- rclass = findClassContainingMethodstartingAt(aMethod, rclass);
- if (rclass != GIV(nilObj)) {
- methClass = rclass;
- goto l1;
- }
+ : longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex2 - 1) << ShiftForWord)))));
+ if (rclass != GIV(nilObj)) {
+ methClass = rclass;
+ goto l1;
}
}
if (!((((aMethod & 3) == 0)
@@ -48556,11 +48565,6 @@
methClass = GIV(nilObj);
goto l1;
}
- mclass = safeMethodClassOf(aMethod);
- if (addressCouldBeClassObj(mclass)) {
- methClass = GIV(nilObj);
- goto l1;
- }
methClass = findClassContainingMethodstartingAt(aMethod, safeMethodClassOf(aMethod));
l1: /* end findClassOfMethod:forReceiver: */;
methodSel = findSelectorOfMethod(aMethod);
@@ -51603,6 +51607,7 @@
}
return value;
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((integerPointer & 1)));
ccIndex = (((usqInt) (longAt(integerPointer))) >> (compactClassFieldLSB())) & 0x1F;
@@ -51649,6 +51654,7 @@
if ((integerPointer & 1)) {
return (integerPointer >> 1);
}
+
/* begin isClassOfNonImm:equalTo:compactClassIndex: */
assert(!((integerPointer & 1)));
ccIndex1 = (((usqInt) (longAt(integerPointer))) >> (compactClassFieldLSB())) & 0x1F;
@@ -53430,7 +53436,6 @@
sqInt argumentArray;
sqInt arraySize;
sqInt ccIndex;
- sqInt ctxtRcvr;
sqInt firstBytecode;
sqInt fmt;
sqInt fmt1;
@@ -53446,14 +53451,10 @@
sqInt methodHeader;
sqInt moduleLength;
sqInt moduleName;
- sqInt oop;
- sqInt oop1;
- sqInt oop2;
- sqInt oop3;
- sqInt oop4;
- sqInt oop5;
- sqInt oop6;
- sqInt oop7;
+ sqInt object;
+ sqInt object1;
+ sqInt object2;
+ sqInt object3;
sqInt primBits;
sqInt primRcvr;
char *sp;
@@ -53470,6 +53471,10 @@
sqInt sz2;
sqInt top;
sqInt top1;
+ sqInt valuePointer;
+ sqInt valuePointer1;
+ sqInt valuePointer2;
+ sqInt valuePointer3;
argumentArray = longAt(GIV(stackPointer));
methodArg = longAt(GIV(stackPointer) + (2 * BytesPerWord));
@@ -53617,40 +53622,25 @@
(GIV(primFailCode) = -1);
return;
}
- /* begin pushRemappableOop: */
- oop = (argumentArray = popStack());
- assert(addressCouldBeOop(oop));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
- /* begin pushRemappableOop: */
- oop1 = (primRcvr = popStack());
- assert(addressCouldBeOop(oop1));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop1;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
- /* begin pushRemappableOop: */
+ GIV(tempOop) = eeInstantiateClassIndexformatnumSlots(ClassArrayCompactIndex, 2, 4);
+ /* begin storePointerUnchecked:ofObject:withValue: */
+ valuePointer = (argumentArray = popStack());
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (0 << ShiftForWord), valuePointer);
+ /* begin storePointerUnchecked:ofObject:withValue: */
+ valuePointer1 = (primRcvr = popStack());
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (1 << ShiftForWord), valuePointer1);
+ /* begin storePointerUnchecked:ofObject:withValue: */
/* begin popStack */
top = longAt(GIV(stackPointer));
GIV(stackPointer) += BytesPerWord;
- oop2 = top;
- assert(addressCouldBeOop(oop2));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop2;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
- /* begin pushRemappableOop: */
+ valuePointer2 = top;
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (2 << ShiftForWord), valuePointer2);
+ /* begin storePointerUnchecked:ofObject:withValue: */
/* begin popStack */
top1 = longAt(GIV(stackPointer));
GIV(stackPointer) += BytesPerWord;
- oop3 = top1;
- assert(addressCouldBeOop(oop3));
- GIV(remapBuffer)[(GIV(remapBufferCount) += 1)] = oop3;
- if (!(GIV(remapBufferCount) <= RemapBufferSize)) {
- error("remapBuffer overflow");
- }
+ valuePointer3 = top1;
+ longAtput((GIV(tempOop) + BaseHeaderSize) + (3 << ShiftForWord), valuePointer3);
/* begin push: */
longAtput((sp5 = GIV(stackPointer) - BytesPerWord), primRcvr);
GIV(stackPointer) = sp5;
@@ -53661,6 +53651,7 @@
GIV(stackPointer) = sp;
}
/* begin callExternalPrimitive: */
+ ;
dispatchFunctionPointer(addr);
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
@@ -53669,22 +53660,7 @@
GIV(primFailCode) = PrimErrWritePastObject;
}
}
- /* begin popRemappableOop */
- oop4 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- ctxtRcvr = oop4;
- /* begin popRemappableOop */
- oop5 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- methodArg = oop5;
- /* begin popRemappableOop */
- oop6 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- primRcvr = oop6;
- /* begin popRemappableOop */
- oop7 = GIV(remapBuffer)[GIV(remapBufferCount)];
- GIV(remapBufferCount) -= 1;
- argumentArray = oop7;
+
if (GIV(primFailCode)) {
/* If primitive failed, then restore state for failure code */
@@ -53693,16 +53669,20 @@
GIV(stackPointer) += (arraySize + 1) * BytesPerWord;
null;
/* begin push: */
- longAtput((sp1 = GIV(stackPointer) - BytesPerWord), ctxtRcvr);
+ object = longAt((GIV(tempOop) + BaseHeaderSize) + (3 << ShiftForWord));
+ longAtput((sp1 = GIV(stackPointer) - BytesPerWord), object);
GIV(stackPointer) = sp1;
/* begin push: */
- longAtput((sp2 = GIV(stackPointer) - BytesPerWord), methodArg);
+ object1 = longAt((GIV(tempOop) + BaseHeaderSize) + (2 << ShiftForWord));
+ longAtput((sp2 = GIV(stackPointer) - BytesPerWord), object1);
GIV(stackPointer) = sp2;
/* begin push: */
- longAtput((sp3 = GIV(stackPointer) - BytesPerWord), primRcvr);
+ object2 = longAt((GIV(tempOop) + BaseHeaderSize) + (1 << ShiftForWord));
+ longAtput((sp3 = GIV(stackPointer) - BytesPerWord), object2);
GIV(stackPointer) = sp3;
/* begin push: */
- longAtput((sp4 = GIV(stackPointer) - BytesPerWord), argumentArray);
+ object3 = longAt((GIV(tempOop) + BaseHeaderSize) + (0 << ShiftForWord));
+ longAtput((sp4 = GIV(stackPointer) - BytesPerWord), object3);
GIV(stackPointer) = sp4;
/* Hack. A nil prim error code (primErrorCode = 1) is interpreted by the image
@@ -53725,9 +53705,12 @@
sqInt index;
sqInt integerPointer;
sqInt nArgs;
+ sqInt nArgs1;
sqInt primIdx;
char *savedFramePointer;
+ char *savedFramePointer1;
char *savedStackPointer;
+ char *savedStackPointer1;
char *sp;
char *sp1;
char *sp2;
@@ -53787,6 +53770,7 @@
? 0
: primitiveTable[primIdx])));
if (primitiveFunctionPointer == 0) {
+ primitiveFunctionPointer = primitiveDoPrimitiveWithArgs;
/* begin primitiveFail */
if (!GIV(primFailCode)) {
GIV(primFailCode) = 1;
@@ -53820,15 +53804,16 @@
primTraceLogIndex(GIV(primTraceLogIndex) + 1);
}
assert(!(isOopForwarded(stackValue(GIV(argumentCount)))));
- nArgs = GIV(argumentCount);
- savedStackPointer = GIV(stackPointer);
- savedFramePointer = GIV(framePointer);
+ assert((remapBufferCount()) == 0);
+ nArgs1 = GIV(argumentCount);
+ savedStackPointer1 = GIV(stackPointer);
+ savedFramePointer1 = GIV(framePointer);
/* begin initPrimCall */
GIV(primFailCode) = 0;
dispatchFunctionPointer(primitiveFunctionPointer);
- assert((remapBufferCount()) == 0);
-
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
if (((freeStart()) < GIV(scavengeThreshold))
@@ -53838,14 +53823,14 @@
}
if (FailImbalancedPrimitives
&& ((!GIV(primFailCode))
- && ((GIV(framePointer) == savedFramePointer)
+ && ((GIV(framePointer) == savedFramePointer1)
&& (!((((usqInt)(longAt(GIV(framePointer) + FoxMethod)))) < (startOfMemory())))))) {
/* Don't fail if primitive has done something radical, e.g. perform: */
- if (GIV(stackPointer) != (savedStackPointer + (nArgs * BytesPerWord))) {
+ if (GIV(stackPointer) != (savedStackPointer1 + (nArgs1 * BytesPerWord))) {
flag("Would be nice to make this a message send of e.g. unbalancedPrimitive to the current process or context");
- GIV(stackPointer) = savedStackPointer;
+ GIV(stackPointer) = savedStackPointer1;
failUnbalancedPrimitive();
}
}
@@ -53853,6 +53838,7 @@
checkProfileTick(GIV(newMethod));
}
!GIV(primFailCode);
+
if (GIV(primFailCode)) {
/* If primitive failed, then restore state for failure code */
@@ -53868,6 +53854,7 @@
/* begin push: */
longAtput((sp2 = GIV(stackPointer) - BytesPerWord), GIV(tempOop));
GIV(stackPointer) = sp2;
+ primitiveFunctionPointer = primitiveDoPrimitiveWithArgs;
GIV(argumentCount) = 2;
}
GIV(tempOop) = 0;
@@ -54113,6 +54100,7 @@
if (addr != 0) {
rewriteMethodCacheEntryForExternalPrimitiveToFunction(addr);
/* begin callExternalPrimitive: */
+ ;
dispatchFunctionPointer(addr);
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
@@ -54121,6 +54109,8 @@
GIV(primFailCode) = PrimErrWritePastObject;
}
}
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
return;
}
(GIV(primFailCode) = PrimErrNamedInternal);
@@ -54205,6 +54195,7 @@
if (index >= 0) {
rewriteMethodCacheEntryForExternalPrimitiveToFunction(addr);
/* begin callExternalPrimitive: */
+ ;
dispatchFunctionPointer(addr);
/* begin maybeFailForLastObjectOverwrite */
if (checkAllocFiller) {
@@ -54213,6 +54204,8 @@
GIV(primFailCode) = PrimErrWritePastObject;
}
}
+ /* begin maybeRetryFailureDueToForwarding */
+ ;
}
else {
Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nsspursrc/vm/cogit.c 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd
+ CCodeGenerator VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd
+ StackToRegisterMappingCogit VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -18332,18 +18332,16 @@
/* If primIndex has an accessorDepth, check for primitive failure and call
- ceCheckForAndFollowForwardedPrimitiveStateFor:. If ceCheck.... answers
+ ceCheckForAndFollowForwardedPrimitiveState if so If ceCheck.... answers
true, retry the primitive. */
static sqInt
maybeCompileRetryonPrimitiveFail(AbstractInstruction *retryInst, sqInt primIndex)
{
- sqInt accessorDepth;
sqInt address;
AbstractInstruction *jmp;
- accessorDepth = accessorDepthForPrimitiveIndex(primIndex);
- if (accessorDepth < 0) {
+ if ((accessorDepthForPrimitiveIndex(primIndex)) < 0) {
return 0;
}
/* begin MoveAw:R: */
@@ -18353,7 +18351,7 @@
genoperandoperand(CmpCqR, 0, TempReg);
/* begin JumpZero: */
jmp = genoperand(JumpZero, ((sqInt)0));
- compileCallFornumArgsargargargargresultRegsaveRegs(ceCheckForAndFollowForwardedPrimitiveStateFor, 1, primIndex, null, null, null, TempReg, 0);
+ compileCallFornumArgsargargargargresultRegsaveRegs(ceCheckForAndFollowForwardedPrimitiveState, 0, null, null, null, null, TempReg, 0);
/* begin CmpCq:R: */
genoperandoperand(CmpCqR, 0, TempReg);
/* begin JumpNonZero: */
Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nsspursrc/vm/cogit.h 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.911 uuid: 39c7bff8-ff88-43a5-88bc-cbbdb206cbcd
+ CCodeGenerator VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c 2014-10-31 19:11:22 UTC (rev 3119)
+++ branches/Cog/nsspursrc/vm/cointerp.c 2014-10-31 19:13:28 UTC (rev 3120)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.915 uuid: 4159cf52-4807-4416-9da6-1c46ec5b9f10
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
from
- CoInterpreter VMMaker.oscog-eem.915 uuid: 4159cf52-4807-4416-9da6-1c46ec5b9f10
+ CoInterpreter VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.915 uuid: 4159cf52-4807-4416-9da6-1c46ec5b9f10 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.916 uuid: 79925bdf-769f-446f-8532-f04f0e2f11ae " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -288,7 +288,6 @@
#define ObjStackTopx 0
#define OldBecameNewFlag 4
#define PrimCallCollectsProfileSamples 8
-#define PrimCallDoNotJIT 32
#define PrimCallMayCallBack 4
#define PrimCallNeedsNewMethod 1
#define PrimCallNeedsPrimitiveFunction 2
@@ -409,7 +408,7 @@
sqInt ceActiveContext(void);
sqInt ceBaseFrameReturn(sqInt returnValue);
sqInt ceCannotResume(void);
-sqInt ceCheckForAndFollowForwardedPrimitiveStateFor(sqInt primIndex);
+sqInt ceCheckForAndFollowForwardedPrimitiveState(void);
void ceCheckForInterrupts(void);
void ceCheckProfileTick(void);
sqInt ceContextinstVar(sqInt maybeContext, sqInt slotIndex);
@@ -544,6 +543,7 @@
static sqInt returntoExecutive(sqInt returnValue, sqInt inInterpreter) NoDbgRegParms;
static void rewriteMethodCacheEntryForExternalPrimitiveToFunction(void (*localPrimAddress)(void)) NoDbgRegParms;
static sqInt roomToPushNArgs(sqInt n) NoDbgRegParms;
+static sqInt saneFunctionPointerForFailureOfPrimIndex(sqInt primIndex) NoDbgRegParms;
EXPORT(sqInt) sendInvokeCallbackContext(VMCallbackContext *vmCallbackContext);
EXPORT(sqInt) sendInvokeCallbackStackRegistersJmpbuf(sqInt thunkPtr, sqInt stackPtr, sqInt regsPtr, sqInt jmpBufPtr);
static sqInt shortPrintFrame(char *theFP) NoDbgRegParms;
@@ -791,7 +791,6 @@
long signedMachineIntegerValueOf(sqInt oop);
usqInt sizeOfAlienData(sqInt oop);
void * startOfAlienData(sqInt oop);
-static sqInt successful(void);
sqInt success(sqInt successBoolean);
static sqInt addressIsInPage(StackPage * self_in_addressIsInPage, char *address) NoDbgRegParms;
static sqInt isFree(StackPage * self_in_isFree) NoDbgRegParms;
@@ -1213,7 +1212,7 @@
sqInt checkAllAccessibleObjectsOkay(void);
static sqInt checkDeliveryOfLongRunningPrimitiveSignal(void);
sqInt checkedIntegerValueOf(sqInt intOop);
-static sqInt checkForAndFollowForwardedPrimitiveStateFor(sqInt primIndex) NoDbgRegParms;
+static sqInt checkForAndFollowForwardedPrimitiveState(void);
static sqInt checkForEventsMayContextSwitch(sqInt mayContextSwitch) NoDbgRegParms;
static sqInt checkImageVersionFromstartingAt(sqImageFile f, squeakFileOffsetType imageOffset) NoDbgRegParms;
static sqInt checkInterpreterIntegrity(void);
@@ -1522,8 +1521,8 @@
_iss sqInt argumentCount;
_iss sqInt markStack;
_iss usqInt instructionPointer;
+_iss sqInt messageSelector;
_iss usqInt newMethod;
-_iss sqInt messageSelector;
_iss sqInt hiddenRootsObj;
_iss usqInt newSpaceLimit;
_iss StackPage * pages;
@@ -1535,37 +1534,38 @@
_iss sqInt needGCFlag;
_iss sqInt trueObj;
_iss sqInt falseObj;
-_iss sqInt remapBufferCount;
_iss usqInt totalFreeOldSpace;
_iss usqInt pastSpaceStart;
_iss sqInt bytesPerPage;
_iss sqInt numSegments;
_iss sqInt traceLogIndex;
_iss usqInt scavengeThreshold;
+_iss sqInt remapBufferCount;
_iss char * stackLimit;
_iss sqInt * freeLists;
_iss sqInt rememberedSetSize;
+_iss sqInt tempOop;
_iss sqInt * rememberedSet;
_iss usqInt freeListsMask;
_iss sqInt profileProcess;
_iss sqInt classTableFirstPage;
+_iss unsigned char primTraceLogIndex;
+_iss sqInt profileSemaphore;
_iss sqInt longRunningPrimitiveCheckSemaphore;
-_iss sqInt profileSemaphore;
_iss SpurContiguousObjStack unscannedEphemerons;
_iss usqInt firstFreeChunk;
-_iss unsigned char primTraceLogIndex;
_iss sqInt profileMethod;
@@ Diff output truncated at 50000 characters. @@
More information about the Vm-dev
mailing list