[Vm-dev] [commit][2776] CogVM source as per VMMaker.oscog-eem.333
commits at squeakvm.org
commits at squeakvm.org
Thu Aug 22 16:54:46 UTC 2013
Revision: 2776
Author: eliot
Date: 2013-08-22 09:54:42 -0700 (Thu, 22 Aug 2013)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.333
Speed-up Newspeak significantly (e.g. -28% in one compile-intensive benchmark)
by maintaining unpaired methods (compilations of anonymous accessors) on a
linked list instead of searching the entire method zone.
Do this by adding a NewspeakCogMethod and surrogates that add a nextMethod
field. Update surrogate accessor generation so that accessors can answer and
receive surrogates and nils. Also add a nop before the dynSuperEntry so as to
change its alignment now that (in the Newspeak VM) CogMethod has changed size
in gaining a field.
Eliminate CogStackPage, collapsing it onto InterpreterStackPage
(it only has a class side).
Use temporaryCountOfMethodHader: instead of tempCountOf: in
SimpleStackBasedCogit>>compileFrameBuild (header is in hand).
Modified Paths:
--------------
branches/Cog/nscogsrc/vm/cogit.c
branches/Cog/nscogsrc/vm/cogit.h
branches/Cog/nscogsrc/vm/cogmethod.h
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/cointerp.h
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/nscogsrc/vm/interp.h
branches/Cog/nscogsrc/vm/vmCallback.h
branches/Cog/src/vm/cogit.c
branches/Cog/src/vm/cogit.h
branches/Cog/src/vm/cogmethod.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/src/vm/interp.h
branches/Cog/src/vm/vmCallback.h
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/cogit.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ CCodeGenerator VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ StackToRegisterMappingCogit VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -367,6 +367,7 @@
static sqInt addressIsInInstructions(AbstractInstruction *address);
static sqInt addressOfEndOfCaseinCPIC(sqInt n, CogMethod *cPIC);
static void addToOpenPICList(CogMethod *anOpenPIC);
+static void addToUnpairedMethodList(CogMethod *aCogMethod);
static void addToYoungReferrers(CogMethod *cogMethod);
static sqInt alignUptoRoutineBoundary(sqInt anAddress);
static sqInt allMachineCodeObjectReferencesValid(void);
@@ -981,6 +982,7 @@
static sqInt remapNSIfObjectRefpchasYoung(sqInt annotation, char *mcpc, sqInt hasYoungPtr);
static sqInt remapOop(sqInt oop);
static void removeFromOpenPICList(CogMethod *anOpenPIC);
+static void removeFromUnpairedMethodList(CogMethod *aCogMethod);
static void resolveJumpTarget(AbstractInstruction * self_in_resolveJumpTarget);
static sqInt returnRegForStoreCheck(void);
static sqInt rewriteCallAttarget(AbstractInstruction * self_in_rewriteCallAttarget, usqInt callSiteReturnAddress, usqInt callTargetAddress);
@@ -1951,6 +1953,7 @@
sqInt traceStores;
static char *trampolineAddresses[NumTrampolines*2];
static sqInt trampolineTableIndex;
+static CogMethod * unpairedMethodList;
static usqInt youngReferrers;
@@ -2223,6 +2226,16 @@
}
static void
+addToUnpairedMethodList(CogMethod *aCogMethod)
+{
+ assert(((aCogMethod->cmType)) == CMMethod);
+ assert((unpairedMethodList == null)
+ || (((unpairedMethodList->cmType)) == CMMethod));
+ (aCogMethod->nextMethod = unpairedMethodList);
+ unpairedMethodList = aCogMethod;
+}
+
+static void
addToYoungReferrers(CogMethod *cogMethod)
{
assert(youngReferrers <= limitAddress);
@@ -3174,6 +3187,8 @@
{
CogMethod *cogMethod;
+ unpairedMethodList = null;
+
cogMethod = ((CogMethod *) baseAddress);
while ((((usqInt)cogMethod)) < mzFreeStart) {
if (((cogMethod->cmType)) == CMMethod) {
@@ -3692,6 +3707,8 @@
source = ((CogMethod *) baseAddress);
openPICList = null;
methodCount = 0;
+ unpairedMethodList = null;
+
while ((source < (limitZony()))
&& (((source->cmType)) != CMFree)) {
assert((cogMethodDoesntLookKosher(source)) == 0);
@@ -3699,6 +3716,11 @@
if (((source->cmUsageCount)) > 0) {
(source->cmUsageCount = ((sqInt) ((source->cmUsageCount)) >> 1));
}
+ if ((((sqInt)(rawHeaderOf((source->methodObject))))) != (((sqInt)source))) {
+ (source->nextMethod = unpairedMethodList);
+ unpairedMethodList = source;
+ }
+
if (((source->cmType)) == CMOpenPIC) {
(source->nextOpenPIC = ((usqInt)openPICList));
openPICList = source;
@@ -3719,7 +3741,7 @@
(dest->objectHeader = objectHeaderValue);
if (((dest->cmType)) == CMMethod) {
- /* For non-Newspeak there should be a one-to-one mapping metween bytecoded and
+ /* For non-Newspeak there should be a one-to-one mapping between bytecoded and
cog methods. For Newspeak not necessarily, but only for anonymous accessors. */
/* Only update the original method's header if it is referring to this CogMethod. */
@@ -3728,6 +3750,9 @@
}
else {
assert((noAssertMethodClassAssociationOf((dest->methodObject))) == (nilObject()));
+ (dest->nextMethod = unpairedMethodList);
+ unpairedMethodList = dest;
+
}
}
else {
@@ -4351,7 +4376,12 @@
static void
compileEntry(void)
{
+
+ /* 1st nop differentiates dynSuperEntry from no-check entry if using nextMethod */
+
/* begin Nop */
+ gen(Nop);
+ /* begin Nop */
dynSuperEntry = gen(Nop);
/* begin AlignmentNops: */
@@ -4424,7 +4454,7 @@
genoperand(PushR, SendNumArgsReg);
/* begin PushR: */
genoperand(PushR, ReceiverResultReg);
- for (i = (methodOrBlockNumArgs + 1), iLimiT = (tempCountOf(methodObj)); i <= iLimiT; i += 1) {
+ for (i = (methodOrBlockNumArgs + 1), iLimiT = (temporaryCountOfMethodHeader(methodHeader)); i <= iLimiT; i += 1) {
/* begin PushR: */
genoperand(PushR, SendNumArgsReg);
}
@@ -8052,6 +8082,8 @@
originalMethod = ((CogMethod *) methodHeader);
assert(((originalMethod->blockSize)) == size);
methodHeader = (originalMethod->methodHeader);
+ addToUnpairedMethodList(method);
+
}
else {
rawHeaderOfput(methodObj, ((sqInt)method));
@@ -8193,18 +8225,10 @@
method referring
directly to only one cog method, which will have a specific selector, not
necessarily the right one. It is therefore worth-while searching for a cog
- method on this method
- that has the right selector.
- We could revisit this:
- - a send site could have two loads, one for the selector and one for the
- class, eliminating the need to store the selector in the header of a cog
- method (although it would still be needed in a PIC, because open PICs are
- shared) - a set of unpaired cog methods could be maintained to speed up
- the search. since
- the methodHeader field is effectively unused in an unpaired method the
- list could
- link through this field (c.f. the openPICList linked through the
- methodObject field). */
+ method on this bytecoded
+ method that has the right selector. To speed up the search we maintain all
+ such unpaired
+ methods on the unpairedMethodList. */
static CogMethod *
findPreviouslyCompiledVersionOfwith(sqInt aMethodObj, sqInt aSelectorOop)
@@ -8213,14 +8237,14 @@
if ((methodHasCogMethod(aMethodObj))
&& ((methodClassAssociationOf(aMethodObj)) == (nilObject()))) {
- cogMethod = ((CogMethod *) baseAddress);
- while (cogMethod < (limitZony())) {
- if ((((cogMethod->cmType)) == CMMethod)
- && ((((cogMethod->selector)) == aSelectorOop)
- && (((cogMethod->methodObject)) == aMethodObj))) {
+ cogMethod = unpairedMethodList;
+ while (cogMethod != null) {
+ assert(((cogMethod->cmType)) == CMMethod);
+ if ((((cogMethod->selector)) == aSelectorOop)
+ && (((cogMethod->methodObject)) == aMethodObj)) {
return cogMethod;
}
- cogMethod = methodAfter(cogMethod);
+ cogMethod = (cogMethod->nextMethod);
}
}
return null;
@@ -8250,6 +8274,8 @@
}
else {
assert((noAssertMethodClassAssociationOf((cogMethod->methodObject))) == (nilObject()));
+ removeFromUnpairedMethodList(cogMethod);
+
}
(cogMethod->cmRefersToYoung = 0);
}
@@ -14832,6 +14858,8 @@
mzFreeStart = (baseAddress = theStartAddress);
youngReferrers = (limitAddress = theLimitAddress);
openPICList = null;
+ unpairedMethodList = null;
+
methodBytesFreedSinceLastCompaction = 0;
methodCount = 0;
}
@@ -17280,6 +17308,28 @@
}
static void
+removeFromUnpairedMethodList(CogMethod *aCogMethod)
+{
+ CogMethod *prevMethod;
+
+ assert(((aCogMethod->cmType)) == CMMethod);
+ if (aCogMethod == unpairedMethodList) {
+ unpairedMethodList = (aCogMethod->nextMethod);
+ return;
+ }
+ prevMethod = unpairedMethodList;
+ while (prevMethod != null) {
+ assert((prevMethod != null)
+ && (((prevMethod->cmType)) == CMMethod));
+ if (((prevMethod->nextMethod)) == aCogMethod) {
+ (prevMethod->nextMethod = (aCogMethod->nextMethod));
+ return;
+ }
+ prevMethod = (aCogMethod->nextMethod);
+ }
+}
+
+static void
resolveJumpTarget(AbstractInstruction * self_in_resolveJumpTarget)
{
BytecodeFixup *fixup;
Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/cogit.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ CCodeGenerator VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
*/
Modified: branches/Cog/nscogsrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogmethod.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/cogmethod.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ CCodeGenerator VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
*/
typedef struct {
@@ -15,7 +15,7 @@
unsigned stackCheckOffset : 12;
} CogBlockMethod;
-typedef struct {
+typedef struct _CogMethod {
sqInt objectHeader;
unsigned cmNumArgs : 8;
unsigned cmType : 3;
@@ -30,4 +30,7 @@
sqInt methodObject;
sqInt methodHeader;
sqInt selector;
+ struct _CogMethod *nextMethod;
} CogMethod;
+
+#define NewspeakCogMethod CogMethod
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
from
- CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -83,7 +83,7 @@
struct _StackPage *prevPage;
} StackPage;
-#define CogStackPage StackPage
+#define InterpreterStackPage StackPage
@@ -1993,7 +1993,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.328";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.331";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -2068,7 +2068,7 @@
/* begin initStackPagesAndInterpret */
VM_LABEL(0initStackPagesAndInterpret);
stackPageBytes = stackPageByteSize();
- stackPagesBytes = (GIV(numStackPages) * ((sizeof(CogStackPage)) + (stackPageByteSize()))) + BytesPerWord;
+ stackPagesBytes = (GIV(numStackPages) * ((sizeof(InterpreterStackPage)) + (stackPageByteSize()))) + BytesPerWord;
theStackMemory = alloca(stackPagesBytes);
memset(theStackMemory, 0, stackPagesBytes);
sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit)));
@@ -24164,7 +24164,7 @@
sqInt theIndex;
null;
- structStackPageSize = sizeof(CogStackPage);
+ structStackPageSize = sizeof(InterpreterStackPage);
GIV(bytesPerPage) = slotsPerPage * BytesPerWord;
/* Because stack pages grow down baseAddress is at the top of a stack page and so to avoid
Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
from
- CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -86,7 +86,7 @@
struct _StackPage *prevPage;
} StackPage;
-#define CogStackPage StackPage
+#define InterpreterStackPage StackPage
@@ -1996,7 +1996,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.328";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.331";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -2077,7 +2077,7 @@
/* begin initStackPagesAndInterpret */
VM_LABEL(0initStackPagesAndInterpret);
stackPageBytes = stackPageByteSize();
- stackPagesBytes = (GIV(numStackPages) * ((sizeof(CogStackPage)) + (stackPageByteSize()))) + BytesPerWord;
+ stackPagesBytes = (GIV(numStackPages) * ((sizeof(InterpreterStackPage)) + (stackPageByteSize()))) + BytesPerWord;
theStackMemory = alloca(stackPagesBytes);
memset(theStackMemory, 0, stackPagesBytes);
sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit)));
@@ -24173,7 +24173,7 @@
sqInt theIndex;
null;
- structStackPageSize = sizeof(CogStackPage);
+ structStackPageSize = sizeof(InterpreterStackPage);
GIV(bytesPerPage) = slotsPerPage * BytesPerWord;
/* Because stack pages grow down baseAddress is at the top of a stack page and so to avoid
Modified: branches/Cog/nscogsrc/vm/interp.h
===================================================================
--- branches/Cog/nscogsrc/vm/interp.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/interp.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
#define VM_PROXY_MAJOR 1
Modified: branches/Cog/nscogsrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nscogsrc/vm/vmCallback.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/nscogsrc/vm/vmCallback.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
#define VM_CALLBACK_INC 1
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Tue Aug 20 18:27:27 PDT 2013
+ Thu Aug 22 09:53:05 PDT 2013
Modified: branches/Cog/src/vm/cogit.c
===================================================================
--- branches/Cog/src/vm/cogit.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cogit.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ CCodeGenerator VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ StackToRegisterMappingCogit VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -557,7 +557,6 @@
static sqInt findMcpcBcpcMatchingBcpc(char *mcpc, sqInt bcpc, void *targetBcpc);
static sqInt findMcpcBcpcMatchingMcpc(char *mcpc, sqInt bcpc, void *targetMcpc);
CogBlockMethod * findMethodForStartBcpcinHomeMethod(sqInt startbcpc, CogMethod *cogMethod);
-static CogMethod * findPreviouslyCompiledVersionOfwith(sqInt aMethodObj, sqInt aSelectorOop);
static sqInt frameOffsetOfTemporary(sqInt index);
static void freeMethod(CogMethod *cogMethod);
static void freeOlderMethodsForCompaction(void);
@@ -1638,6 +1637,7 @@
sqInt traceStores;
static char *trampolineAddresses[NumTrampolines*2];
static sqInt trampolineTableIndex;
+static CogMethod * unpairedMethodList;
static usqInt youngReferrers;
@@ -2769,6 +2769,7 @@
{
CogMethod *cogMethod;
+
cogMethod = ((CogMethod *) baseAddress);
while ((((usqInt)cogMethod)) < mzFreeStart) {
if (((cogMethod->cmType)) == CMMethod) {
@@ -3275,6 +3276,7 @@
source = ((CogMethod *) baseAddress);
openPICList = null;
methodCount = 0;
+
while ((source < (limitZony()))
&& (((source->cmType)) != CMFree)) {
assert((cogMethodDoesntLookKosher(source)) == 0);
@@ -3282,6 +3284,7 @@
if (((source->cmUsageCount)) > 0) {
(source->cmUsageCount = ((sqInt) ((source->cmUsageCount)) >> 1));
}
+
if (((source->cmType)) == CMOpenPIC) {
(source->nextOpenPIC = ((usqInt)openPICList));
openPICList = source;
@@ -3302,7 +3305,7 @@
(dest->objectHeader = objectHeaderValue);
if (((dest->cmType)) == CMMethod) {
- /* For non-Newspeak there should be a one-to-one mapping metween bytecoded and
+ /* For non-Newspeak there should be a one-to-one mapping between bytecoded and
cog methods. For Newspeak not necessarily, but only for anonymous accessors. */
/* Only update the original method's header if it is referring to this CogMethod. */
@@ -3311,6 +3314,7 @@
}
else {
assert((noAssertMethodClassAssociationOf((dest->methodObject))) == (nilObject()));
+
}
}
else {
@@ -4005,7 +4009,7 @@
genoperand(PushR, SendNumArgsReg);
/* begin PushR: */
genoperand(PushR, ReceiverResultReg);
- for (i = (methodOrBlockNumArgs + 1), iLimiT = (tempCountOf(methodObj)); i <= iLimiT; i += 1) {
+ for (i = (methodOrBlockNumArgs + 1), iLimiT = (temporaryCountOfMethodHeader(methodHeader)); i <= iLimiT; i += 1) {
/* begin PushR: */
genoperand(PushR, SendNumArgsReg);
}
@@ -7601,6 +7605,7 @@
originalMethod = ((CogMethod *) methodHeader);
assert(((originalMethod->blockSize)) == size);
methodHeader = (originalMethod->methodHeader);
+
}
else {
rawHeaderOfput(methodObj, ((sqInt)method));
@@ -7729,52 +7734,6 @@
return ((CogBlockMethod *) (blockDispatchTargetsForperformarg(cogMethod, findBlockMethodWithEntrystartBcpc, startbcpc)));
}
-
-/* Newspeak uses a set of methods to implement accessors, a setter and a
- getter for
- each inst var offset (e.g. 0 to 255). These accessors are installed under
- the relevant
- selectors in different method dictionaries as required. These methods
- effectively have multiple selectors. The current inline cache design
- stores the selector of a
- linked send in the header of the target method. So this requires a
- one-to-many mapping of bytecoded method to cog method, with the bytecoded
- method referring
- directly to only one cog method, which will have a specific selector, not
- necessarily the right one. It is therefore worth-while searching for a cog
- method on this method
- that has the right selector.
- We could revisit this:
- - a send site could have two loads, one for the selector and one for the
- class, eliminating the need to store the selector in the header of a cog
- method (although it would still be needed in a PIC, because open PICs are
- shared) - a set of unpaired cog methods could be maintained to speed up
- the search. since
- the methodHeader field is effectively unused in an unpaired method the
- list could
- link through this field (c.f. the openPICList linked through the
- methodObject field). */
-
-static CogMethod *
-findPreviouslyCompiledVersionOfwith(sqInt aMethodObj, sqInt aSelectorOop)
-{
- CogMethod *cogMethod;
-
- if ((methodHasCogMethod(aMethodObj))
- && ((methodClassAssociationOf(aMethodObj)) == (nilObject()))) {
- cogMethod = ((CogMethod *) baseAddress);
- while (cogMethod < (limitZony())) {
- if ((((cogMethod->cmType)) == CMMethod)
- && ((((cogMethod->selector)) == aSelectorOop)
- && (((cogMethod->methodObject)) == aMethodObj))) {
- return cogMethod;
- }
- cogMethod = methodAfter(cogMethod);
- }
- }
- return null;
-}
-
static sqInt
frameOffsetOfTemporary(sqInt index)
{
@@ -7799,6 +7758,7 @@
}
else {
assert((noAssertMethodClassAssociationOf((cogMethod->methodObject))) == (nilObject()));
+
}
(cogMethod->cmRefersToYoung = 0);
}
@@ -13699,6 +13659,7 @@
mzFreeStart = (baseAddress = theStartAddress);
youngReferrers = (limitAddress = theLimitAddress);
openPICList = null;
+
methodBytesFreedSinceLastCompaction = 0;
methodCount = 0;
}
Modified: branches/Cog/src/vm/cogit.h
===================================================================
--- branches/Cog/src/vm/cogit.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cogit.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ CCodeGenerator VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
*/
Modified: branches/Cog/src/vm/cogmethod.h
===================================================================
--- branches/Cog/src/vm/cogmethod.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cogmethod.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.329 uuid: 5bf1ecce-8cdb-48fd-bc66-b41b4cff2efe
+ CCodeGenerator VMMaker.oscog-eem.333 uuid: 84da9cb8-7f30-4cb7-b4fb-239a11f63b54
*/
typedef struct {
Modified: branches/Cog/src/vm/cointerp.c
===================================================================
--- branches/Cog/src/vm/cointerp.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cointerp.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
from
- CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -83,7 +83,7 @@
struct _StackPage *prevPage;
} StackPage;
-#define CogStackPage StackPage
+#define InterpreterStackPage StackPage
@@ -1983,7 +1983,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.328]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.331]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -2056,7 +2056,7 @@
/* begin initStackPagesAndInterpret */
VM_LABEL(0initStackPagesAndInterpret);
stackPageBytes = stackPageByteSize();
- stackPagesBytes = (GIV(numStackPages) * ((sizeof(CogStackPage)) + (stackPageByteSize()))) + BytesPerWord;
+ stackPagesBytes = (GIV(numStackPages) * ((sizeof(InterpreterStackPage)) + (stackPageByteSize()))) + BytesPerWord;
theStackMemory = alloca(stackPagesBytes);
memset(theStackMemory, 0, stackPagesBytes);
sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit)));
@@ -19778,7 +19778,7 @@
sqInt theIndex;
null;
- structStackPageSize = sizeof(CogStackPage);
+ structStackPageSize = sizeof(InterpreterStackPage);
GIV(bytesPerPage) = slotsPerPage * BytesPerWord;
/* Because stack pages grow down baseAddress is at the top of a stack page and so to avoid
Modified: branches/Cog/src/vm/cointerp.h
===================================================================
--- branches/Cog/src/vm/cointerp.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cointerp.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
Modified: branches/Cog/src/vm/cointerpmt.c
===================================================================
--- branches/Cog/src/vm/cointerpmt.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cointerpmt.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
from
- CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CoInterpreterMT VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -84,7 +84,7 @@
struct _StackPage *prevPage;
} StackPage;
-#define CogStackPage StackPage
+#define InterpreterStackPage StackPage
typedef struct {
@@ -2082,7 +2082,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.328]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.331]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
sqInt willNotThreadWarnCount;
@@ -2157,7 +2157,7 @@
/* begin initStackPagesAndInterpret */
VM_LABEL(0initStackPagesAndInterpret);
stackPageBytes = stackPageByteSize();
- stackPagesBytes = (GIV(numStackPages) * ((sizeof(CogStackPage)) + (stackPageByteSize()))) + BytesPerWord;
+ stackPagesBytes = (GIV(numStackPages) * ((sizeof(InterpreterStackPage)) + (stackPageByteSize()))) + BytesPerWord;
theStackMemory = alloca(stackPagesBytes);
memset(theStackMemory, 0, stackPagesBytes);
sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit)));
@@ -20531,7 +20531,7 @@
sqInt theIndex;
null;
- structStackPageSize = sizeof(CogStackPage);
+ structStackPageSize = sizeof(InterpreterStackPage);
GIV(bytesPerPage) = slotsPerPage * BytesPerWord;
/* Because stack pages grow down baseAddress is at the top of a stack page and so to avoid
Modified: branches/Cog/src/vm/cointerpmt.h
===================================================================
--- branches/Cog/src/vm/cointerpmt.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/cointerpmt.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
Modified: branches/Cog/src/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerp.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/gcc3x-cointerp.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
from
- CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -86,7 +86,7 @@
struct _StackPage *prevPage;
} StackPage;
-#define CogStackPage StackPage
+#define InterpreterStackPage StackPage
@@ -1986,7 +1986,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.328]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.331]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
@@ -2065,7 +2065,7 @@
/* begin initStackPagesAndInterpret */
VM_LABEL(0initStackPagesAndInterpret);
stackPageBytes = stackPageByteSize();
- stackPagesBytes = (GIV(numStackPages) * ((sizeof(CogStackPage)) + (stackPageByteSize()))) + BytesPerWord;
+ stackPagesBytes = (GIV(numStackPages) * ((sizeof(InterpreterStackPage)) + (stackPageByteSize()))) + BytesPerWord;
theStackMemory = alloca(stackPagesBytes);
memset(theStackMemory, 0, stackPagesBytes);
sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit)));
@@ -19787,7 +19787,7 @@
sqInt theIndex;
null;
- structStackPageSize = sizeof(CogStackPage);
+ structStackPageSize = sizeof(InterpreterStackPage);
GIV(bytesPerPage) = slotsPerPage * BytesPerWord;
/* Because stack pages grow down baseAddress is at the top of a stack page and so to avoid
Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerpmt.c 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/gcc3x-cointerpmt.c 2013-08-22 16:54:42 UTC (rev 2776)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
from
- CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CoInterpreterMT VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -87,7 +87,7 @@
struct _StackPage *prevPage;
} StackPage;
-#define CogStackPage StackPage
+#define InterpreterStackPage StackPage
typedef struct {
@@ -2085,7 +2085,7 @@
/* 575 */ (void (*)(void))0,
0 };
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.328]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.331]";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
volatile int sendTrace;
sqInt willNotThreadWarnCount;
@@ -2166,7 +2166,7 @@
/* begin initStackPagesAndInterpret */
VM_LABEL(0initStackPagesAndInterpret);
stackPageBytes = stackPageByteSize();
- stackPagesBytes = (GIV(numStackPages) * ((sizeof(CogStackPage)) + (stackPageByteSize()))) + BytesPerWord;
+ stackPagesBytes = (GIV(numStackPages) * ((sizeof(InterpreterStackPage)) + (stackPageByteSize()))) + BytesPerWord;
theStackMemory = alloca(stackPagesBytes);
memset(theStackMemory, 0, stackPagesBytes);
sqMakeMemoryNotExecutableFromTo(((usqInt)(startOfMemory())), ((usqInt)GIV(memoryLimit)));
@@ -20540,7 +20540,7 @@
sqInt theIndex;
null;
- structStackPageSize = sizeof(CogStackPage);
+ structStackPageSize = sizeof(InterpreterStackPage);
GIV(bytesPerPage) = slotsPerPage * BytesPerWord;
/* Because stack pages grow down baseAddress is at the top of a stack page and so to avoid
Modified: branches/Cog/src/vm/interp.h
===================================================================
--- branches/Cog/src/vm/interp.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/interp.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
#define VM_PROXY_MAJOR 1
Modified: branches/Cog/src/vm/vmCallback.h
===================================================================
--- branches/Cog/src/vm/vmCallback.h 2013-08-21 01:28:22 UTC (rev 2775)
+++ branches/Cog/src/vm/vmCallback.h 2013-08-22 16:54:42 UTC (rev 2776)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.331 uuid: 37d2e4b0-2f37-4e2d-8313-c63637785e59
*/
#define VM_CALLBACK_INC 1
More information about the Vm-dev
mailing list