This "fix", 138, is badly broken. Please use 139 instead.<br><br><div class="gmail_quote">On Thu, Nov 17, 2011 at 5:18 PM, <span dir="ltr"><<a href="mailto:commits@squeakvm.org">commits@squeakvm.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
Author: eliot<br>
Date: 2011-11-17 17:18:02 -0800 (Thu, 17 Nov 2011)<br>
New Revision: 2514<br>
<br>
Modified:<br>
branches/Cog/nscogsrc/vm/cogit.c<br>
branches/Cog/nscogsrc/vm/cogit.h<br>
branches/Cog/nscogsrc/vm/cogmethod.h<br>
branches/Cog/nscogsrc/vm/cointerp.c<br>
branches/Cog/nscogsrc/vm/cointerp.h<br>
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c<br>
branches/Cog/nscogsrc/vm/interp.h<br>
branches/Cog/nscogsrc/vm/vmCallback.h<br>
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h<br>
branches/Cog/src/vm/cogit.c<br>
branches/Cog/src/vm/cogit.h<br>
branches/Cog/src/vm/cogmethod.h<br>
branches/Cog/src/vm/cointerp.c<br>
branches/Cog/src/vm/cointerp.h<br>
branches/Cog/src/vm/cointerpmt.c<br>
branches/Cog/src/vm/cointerpmt.h<br>
branches/Cog/src/vm/gcc3x-cointerp.c<br>
branches/Cog/src/vm/gcc3x-cointerpmt.c<br>
branches/Cog/src/vm/interp.h<br>
branches/Cog/src/vm/vmCallback.h<br>
Log:<br>
CogVM source as per VMMaker.oscog-eem.138.<br>
Fix frameless foo: arg instVar := instVar code gen bug (failure to pop<br>
spills on frameless return). Use more hex printing in frame/oop printing.<br>
<br>
<br>
Modified: branches/Cog/nscogsrc/vm/cogit.c<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/cogit.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/cogit.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,9 @@<br>
/* Automatically generated by<br>
- CCodeGenerator VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- StackToRegisterMappingCogit VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba " __DATE__ ;<br>
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__cogitBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -805,6 +805,7 @@<br>
sqInt isSendReturnPC(sqInt retpc);<br>
static sqInt isSmallIntegerTagNonZero(void);<br>
static sqInt isUnconditionalBranch(BytecodeDescriptor * self_in_isUnconditionalBranch);<br>
+static sqInt isValidFramelessRegister(sqInt reg);<br>
static AbstractInstruction * gJumpFPEqual(void *jumpTarget);<br>
static AbstractInstruction * gJumpFPGreaterOrEqual(void *jumpTarget);<br>
static AbstractInstruction * gJumpFPGreater(void *jumpTarget);<br>
@@ -963,6 +964,7 @@<br>
static void ssFlushTo(sqInt index);<br>
static void ssFlushUpThroughReceiverVariable(sqInt slotIndex);<br>
static void ssFlushUpThroughTemporaryVariable(sqInt tempIndex);<br>
+static void ssPopSpillsFrom(sqInt index);<br>
static void ssPop(sqInt n);<br>
static sqInt ssPushAnnotatedConstant(sqInt literal);<br>
static sqInt ssPushBaseoffset(sqInt reg, sqInt offset);<br>
@@ -12493,6 +12495,7 @@<br>
genoperand(RetN, (methodOrBlockNumArgs + 1) * BytesPerWord);<br>
}<br>
else {<br>
+ ssPopSpillsFrom(methodOrBlockNumArgs - 1);<br>
/* begin RetN: */<br>
offset = ((methodOrBlockNumArgs > (numRegArgs()))<br>
|| (regArgsHaveBeenPushed)<br>
@@ -13254,6 +13257,16 @@<br>
}<br>
<br>
<br>
+/* Answer if the receiver is valid in a frameless method. */<br>
+<br>
+static sqInt<br>
+isValidFramelessRegister(sqInt reg)<br>
+{<br>
+ return (reg == ReceiverResultReg)<br>
+ || (reg == Arg0Reg);<br>
+}<br>
+<br>
+<br>
/* Floating-point jumps are a little weird on some processors. Defer to<br>
the backEnd to allow it to generate any special code it may need to. */<br>
<br>
@@ -16539,7 +16552,10 @@<br>
}<br>
if (simSpillBase <= index) {<br>
for (i = (((simSpillBase < 0) ? 0 : simSpillBase)); i <= index; i += 1) {<br>
- assert(needsFrame);<br>
+ assert(needsFrame<br>
+ || (((((simStackAt(i)->type)) == SSBaseOffset)<br>
+ || (((simStackAt(i)->type)) == SSRegister))<br>
+ && (isValidFramelessRegister((simStackAt(i)->registerr)))));<br>
ensureSpilledAtfrom(simStackAt(i), frameOffsetOfTemporary(i), FPReg);<br>
}<br>
simSpillBase = index + 1;<br>
@@ -16588,7 +16604,24 @@<br>
}<br>
}<br>
<br>
+<br>
+/* Pop any spilled items on the sim stack from index, used to balance the<br>
+ stack on return.<br>
+ */<br>
+<br>
static void<br>
+ssPopSpillsFrom(sqInt index)<br>
+{<br>
+ sqInt i;<br>
+<br>
+ for (i = index; i <= simStackPtr; i += 1) {<br>
+ if ((simStackAt(i)->spilled)) {<br>
+ popToReg(ssTop(), TempReg);<br>
+ }<br>
+ }<br>
+}<br>
+<br>
+static void<br>
ssPop(sqInt n)<br>
{<br>
assert(((simStackPtr - n) >= (methodOrBlockNumTemps - 1))<br>
<br>
Modified: branches/Cog/nscogsrc/vm/cogit.h<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/cogit.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/cogit.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGenerator VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
<br>
<br>
Modified: branches/Cog/nscogsrc/vm/cogmethod.h<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/cogmethod.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/cogmethod.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGenerator VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
typedef struct {<br>
<br>
Modified: branches/Cog/nscogsrc/vm/cointerp.c<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/cointerp.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/cointerp.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,9 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc " __DATE__ ;<br>
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__interpBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -330,6 +330,7 @@<br>
sqInt interpret(void);<br>
static void activateCoggedNewMethod(sqInt inInterpreter);<br>
static void activateNewMethod(void);<br>
+sqInt activeProcess(void);<br>
EXPORT(sqInt) addGCRoot(sqInt *varLoc);<br>
static void addLastLinktoList(sqInt proc, sqInt aList);<br>
static void addNewMethodToCache(sqInt class);<br>
@@ -586,6 +587,7 @@<br>
sqInt integerArg(sqInt index);<br>
sqInt integerObjectOf(sqInt value);<br>
sqInt integerValueOf(sqInt objectPointer);<br>
+EXPORT(sqInt) internalIsImmutable(sqInt oop);<br>
usqInt interpretAddress(void);<br>
static sqInt interpreterAllocationReserveBytes(void);<br>
static sqInt interpretMethodFromMachineCode(void);<br>
@@ -1898,7 +1900,7 @@<br>
/* 575 */ (void (*)(void))0,<br>
0 };<br>
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);<br>
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.137";<br>
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.138";<br>
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;<br>
volatile int sendTrace;<br>
<br>
@@ -8924,6 +8926,16 @@<br>
}<br>
<br>
<br>
+/* Answer the current activeProcess. */<br>
+/* useful for VM debugging */<br>
+<br>
+sqInt<br>
+activeProcess(void)<br>
+{<br>
+ return longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord));<br>
+}<br>
+<br>
+<br>
/* Add the given variable location to the extra roots table */<br>
<br>
EXPORT(sqInt)<br>
@@ -19120,7 +19132,13 @@<br>
}<br>
}<br>
<br>
+EXPORT(sqInt)<br>
+internalIsImmutable(sqInt oop)<br>
+{<br>
+ return ((longAt(oop)) & ImmutabilityBit) != 0;<br>
+}<br>
<br>
+<br>
/* This is used for asserts that check that inline cache editing results in<br>
valid addresses.<br>
In the C VM interpret is presumed to come before any primitives and so it<br>
@@ -20424,13 +20442,17 @@<br>
goto l1;<br>
}<br>
l1: /* end lengthOf: */;<br>
- if ((lastIndex - startIP) > 100) {<br>
- lastIndex = startIP + 100;<br>
+ if ((lastIndex - startIP) > 104) {<br>
+ lastIndex = startIP + 103;<br>
}<br>
bytecodesPerLine = 8;<br>
for (index = startIP; index <= lastIndex; index += 1) {<br>
byte = byteAt((oop + BaseHeaderSize) + (index - 1));<br>
printf(" %02x/%-3d", byte,byte);<br>
+ if ((index == lastIndex)<br>
+ && ((lengthOf(oop)) > index)) {<br>
+ print("...");<br>
+ }<br>
if ((((index - startIP) + 1) % bytecodesPerLine) == 0) {<br>
/* begin cr */<br>
printf("\n");<br>
@@ -38290,7 +38312,7 @@<br>
<br>
void<br>
printContext(sqInt aContext)<br>
-{<br>
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
sqInt i;<br>
sqInt ip;<br>
void *p;<br>
@@ -38341,17 +38363,22 @@<br>
print("sender ");<br>
shortPrintOop(sender);<br>
print("ip ");<br>
- printNum(ip);<br>
- print(" (");<br>
- printNum((ip >> 1));<br>
- /* begin space */<br>
- /* begin printChar: */<br>
- putchar(' ');<br>
- printHex((ip >> 1));<br>
- /* begin printChar: */<br>
- putchar(')');<br>
- /* begin cr */<br>
- printf("\n");<br>
+ if (ip == GIV(nilObj)) {<br>
+ shortPrintOop(ip);<br>
+ }<br>
+ else {<br>
+ printNum(ip);<br>
+ print(" (");<br>
+ printNum((ip >> 1));<br>
+ /* begin space */<br>
+ /* begin printChar: */<br>
+ putchar(' ');<br>
+ printHex((ip >> 1));<br>
+ /* begin printChar: */<br>
+ putchar(')');<br>
+ /* begin cr */<br>
+ printf("\n");<br>
+ }<br>
}<br>
sp = longAt((aContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord));<br>
sp = ((sp < ((lengthOf(aContext)) - ReceiverIndex)) ? sp : ((lengthOf(aContext)) - ReceiverIndex));<br>
@@ -41906,6 +41933,7 @@<br>
shortPrintContext(sqInt aContext)<br>
{<br>
sqInt home;<br>
+ char *theFP;<br>
<br>
if (!(((aContext & 1) == 0)<br>
&& (((((usqInt) (longAt(aContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {<br>
@@ -41916,14 +41944,20 @@<br>
return;<br>
}<br>
home = findHomeForContext(aContext);<br>
- printNum(aContext);<br>
+ printHex(aContext);<br>
if (((longAt((aContext + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {<br>
- if ((checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer)))<br>
- && (isMachineCodeFrame(frameOfMarriedContext(aContext)))) {<br>
- print(" m ");<br>
+ if (checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer))) {<br>
+ if (isMachineCodeFrame((theFP = frameOfMarriedContext(aContext)))) {<br>
+ print(" M (");<br>
+ }<br>
+ else {<br>
+ print(" I (");<br>
+ }<br>
+ printHex(theFP);<br>
+ print(") ");<br>
}<br>
else {<br>
- print(" i ");<br>
+ print(" w ");<br>
}<br>
}<br>
else {<br>
@@ -41998,7 +42032,7 @@<br>
void<br>
shortPrintFrameAndNCallers(char *theFP, sqInt n)<br>
{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
- if ((n > 0)<br>
+ if ((n != 0)<br>
&& ((((((usqInt)theFP)) & (BytesPerWord - 1)) == 0)<br>
&& ((((((usqInt)theFP)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)theFP)) <= (((usqInt)GIV(pages)))))))) {<br>
shortPrintFrame(theFP);<br>
@@ -45643,6 +45677,7 @@<br>
{"", "callbackEnter", (void*)callbackEnter},<br>
{"", "callbackLeave", (void*)callbackLeave},<br>
{"", "dumpImage", (void*)dumpImage},<br>
+ {"", "internalIsImmutable", (void*)internalIsImmutable},<br>
{"", "moduleUnloaded", (void*)moduleUnloaded},<br>
{"", "primitiveAddLargeIntegers", (void*)primitiveAddLargeIntegers},<br>
{"", "primitiveBitAndLargeIntegers", (void*)primitiveBitAndLargeIntegers},<br>
<br>
Modified: branches/Cog/nscogsrc/vm/cointerp.h<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/cointerp.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/cointerp.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,10 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
<br>
/*** Function Prototypes ***/<br>
+sqInt activeProcess(void);<br>
sqInt addressCouldBeObj(sqInt address);<br>
sqInt addressCouldBeOop(sqInt address);<br>
usqInt argumentCountAddress(void);<br>
<br>
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -2,11 +2,11 @@<br>
<br>
<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc " __DATE__ ;<br>
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__interpBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -333,6 +333,7 @@<br>
sqInt interpret(void);<br>
static void activateCoggedNewMethod(sqInt inInterpreter);<br>
static void activateNewMethod(void);<br>
+sqInt activeProcess(void);<br>
EXPORT(sqInt) addGCRoot(sqInt *varLoc);<br>
static void addLastLinktoList(sqInt proc, sqInt aList);<br>
static void addNewMethodToCache(sqInt class);<br>
@@ -589,6 +590,7 @@<br>
sqInt integerArg(sqInt index);<br>
sqInt integerObjectOf(sqInt value);<br>
sqInt integerValueOf(sqInt objectPointer);<br>
+EXPORT(sqInt) internalIsImmutable(sqInt oop);<br>
usqInt interpretAddress(void);<br>
static sqInt interpreterAllocationReserveBytes(void);<br>
static sqInt interpretMethodFromMachineCode(void);<br>
@@ -1901,7 +1903,7 @@<br>
/* 575 */ (void (*)(void))0,<br>
0 };<br>
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);<br>
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.137";<br>
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.138";<br>
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;<br>
volatile int sendTrace;<br>
<br>
@@ -8928,6 +8930,16 @@<br>
}<br>
<br>
<br>
+/* Answer the current activeProcess. */<br>
+/* useful for VM debugging */<br>
+<br>
+sqInt<br>
+activeProcess(void)<br>
+{<br>
+ return longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord));<br>
+}<br>
+<br>
+<br>
/* Add the given variable location to the extra roots table */<br>
<br>
EXPORT(sqInt)<br>
@@ -19124,7 +19136,13 @@<br>
}<br>
}<br>
<br>
+EXPORT(sqInt)<br>
+internalIsImmutable(sqInt oop)<br>
+{<br>
+ return ((longAt(oop)) & ImmutabilityBit) != 0;<br>
+}<br>
<br>
+<br>
/* This is used for asserts that check that inline cache editing results in<br>
valid addresses.<br>
In the C VM interpret is presumed to come before any primitives and so it<br>
@@ -20428,13 +20446,17 @@<br>
goto l1;<br>
}<br>
l1: /* end lengthOf: */;<br>
- if ((lastIndex - startIP) > 100) {<br>
- lastIndex = startIP + 100;<br>
+ if ((lastIndex - startIP) > 104) {<br>
+ lastIndex = startIP + 103;<br>
}<br>
bytecodesPerLine = 8;<br>
for (index = startIP; index <= lastIndex; index += 1) {<br>
byte = byteAt((oop + BaseHeaderSize) + (index - 1));<br>
printf(" %02x/%-3d", byte,byte);<br>
+ if ((index == lastIndex)<br>
+ && ((lengthOf(oop)) > index)) {<br>
+ print("...");<br>
+ }<br>
if ((((index - startIP) + 1) % bytecodesPerLine) == 0) {<br>
/* begin cr */<br>
printf("\n");<br>
@@ -38294,7 +38316,7 @@<br>
<br>
void<br>
printContext(sqInt aContext)<br>
-{<br>
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
sqInt i;<br>
sqInt ip;<br>
void *p;<br>
@@ -38345,17 +38367,22 @@<br>
print("sender ");<br>
shortPrintOop(sender);<br>
print("ip ");<br>
- printNum(ip);<br>
- print(" (");<br>
- printNum((ip >> 1));<br>
- /* begin space */<br>
- /* begin printChar: */<br>
- putchar(' ');<br>
- printHex((ip >> 1));<br>
- /* begin printChar: */<br>
- putchar(')');<br>
- /* begin cr */<br>
- printf("\n");<br>
+ if (ip == GIV(nilObj)) {<br>
+ shortPrintOop(ip);<br>
+ }<br>
+ else {<br>
+ printNum(ip);<br>
+ print(" (");<br>
+ printNum((ip >> 1));<br>
+ /* begin space */<br>
+ /* begin printChar: */<br>
+ putchar(' ');<br>
+ printHex((ip >> 1));<br>
+ /* begin printChar: */<br>
+ putchar(')');<br>
+ /* begin cr */<br>
+ printf("\n");<br>
+ }<br>
}<br>
sp = longAt((aContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord));<br>
sp = ((sp < ((lengthOf(aContext)) - ReceiverIndex)) ? sp : ((lengthOf(aContext)) - ReceiverIndex));<br>
@@ -41910,6 +41937,7 @@<br>
shortPrintContext(sqInt aContext)<br>
{<br>
sqInt home;<br>
+ char *theFP;<br>
<br>
if (!(((aContext & 1) == 0)<br>
&& (((((usqInt) (longAt(aContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {<br>
@@ -41920,14 +41948,20 @@<br>
return;<br>
}<br>
home = findHomeForContext(aContext);<br>
- printNum(aContext);<br>
+ printHex(aContext);<br>
if (((longAt((aContext + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {<br>
- if ((checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer)))<br>
- && (isMachineCodeFrame(frameOfMarriedContext(aContext)))) {<br>
- print(" m ");<br>
+ if (checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer))) {<br>
+ if (isMachineCodeFrame((theFP = frameOfMarriedContext(aContext)))) {<br>
+ print(" M (");<br>
+ }<br>
+ else {<br>
+ print(" I (");<br>
+ }<br>
+ printHex(theFP);<br>
+ print(") ");<br>
}<br>
else {<br>
- print(" i ");<br>
+ print(" w ");<br>
}<br>
}<br>
else {<br>
@@ -42002,7 +42036,7 @@<br>
void<br>
shortPrintFrameAndNCallers(char *theFP, sqInt n)<br>
{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
- if ((n > 0)<br>
+ if ((n != 0)<br>
&& ((((((usqInt)theFP)) & (BytesPerWord - 1)) == 0)<br>
&& ((((((usqInt)theFP)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)theFP)) <= (((usqInt)GIV(pages)))))))) {<br>
shortPrintFrame(theFP);<br>
@@ -45647,6 +45681,7 @@<br>
{"", "callbackEnter", (void*)callbackEnter},<br>
{"", "callbackLeave", (void*)callbackLeave},<br>
{"", "dumpImage", (void*)dumpImage},<br>
+ {"", "internalIsImmutable", (void*)internalIsImmutable},<br>
{"", "moduleUnloaded", (void*)moduleUnloaded},<br>
{"", "primitiveAddLargeIntegers", (void*)primitiveAddLargeIntegers},<br>
{"", "primitiveBitAndLargeIntegers", (void*)primitiveBitAndLargeIntegers},<br>
<br>
Modified: branches/Cog/nscogsrc/vm/interp.h<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/interp.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/interp.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
#define VM_PROXY_MAJOR 1<br>
<br>
Modified: branches/Cog/nscogsrc/vm/vmCallback.h<br>
===================================================================<br>
--- branches/Cog/nscogsrc/vm/vmCallback.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/nscogsrc/vm/vmCallback.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
#define VM_CALLBACK_INC 1<br>
<br>
<br>
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h<br>
___________________________________________________________________<br>
Modified: checkindate<br>
- Wed Nov 9 11:39:06 PST 2011<br>
+ Thu Nov 17 17:17:12 PST 2011<br>
<br>
Modified: branches/Cog/src/vm/cogit.c<br>
===================================================================<br>
--- branches/Cog/src/vm/cogit.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cogit.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,9 @@<br>
/* Automatically generated by<br>
- CCodeGenerator VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- StackToRegisterMappingCogit VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba " __DATE__ ;<br>
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__cogitBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -798,6 +798,7 @@<br>
sqInt isSendReturnPC(sqInt retpc);<br>
static sqInt isSmallIntegerTagNonZero(void);<br>
static sqInt isUnconditionalBranch(BytecodeDescriptor * self_in_isUnconditionalBranch);<br>
+static sqInt isValidFramelessRegister(sqInt reg);<br>
static AbstractInstruction * gJumpFPEqual(void *jumpTarget);<br>
static AbstractInstruction * gJumpFPGreaterOrEqual(void *jumpTarget);<br>
static AbstractInstruction * gJumpFPGreater(void *jumpTarget);<br>
@@ -951,6 +952,7 @@<br>
static void ssFlushTo(sqInt index);<br>
static void ssFlushUpThroughReceiverVariable(sqInt slotIndex);<br>
static void ssFlushUpThroughTemporaryVariable(sqInt tempIndex);<br>
+static void ssPopSpillsFrom(sqInt index);<br>
static void ssPop(sqInt n);<br>
static sqInt ssPushAnnotatedConstant(sqInt literal);<br>
static sqInt ssPushBaseoffset(sqInt reg, sqInt offset);<br>
@@ -12281,6 +12283,7 @@<br>
genoperand(RetN, (methodOrBlockNumArgs + 1) * BytesPerWord);<br>
}<br>
else {<br>
+ ssPopSpillsFrom(methodOrBlockNumArgs - 1);<br>
/* begin RetN: */<br>
offset = ((methodOrBlockNumArgs > (numRegArgs()))<br>
|| (regArgsHaveBeenPushed)<br>
@@ -13042,6 +13045,16 @@<br>
}<br>
<br>
<br>
+/* Answer if the receiver is valid in a frameless method. */<br>
+<br>
+static sqInt<br>
+isValidFramelessRegister(sqInt reg)<br>
+{<br>
+ return (reg == ReceiverResultReg)<br>
+ || (reg == Arg0Reg);<br>
+}<br>
+<br>
+<br>
/* Floating-point jumps are a little weird on some processors. Defer to<br>
the backEnd to allow it to generate any special code it may need to. */<br>
<br>
@@ -16054,7 +16067,10 @@<br>
}<br>
if (simSpillBase <= index) {<br>
for (i = (((simSpillBase < 0) ? 0 : simSpillBase)); i <= index; i += 1) {<br>
- assert(needsFrame);<br>
+ assert(needsFrame<br>
+ || (((((simStackAt(i)->type)) == SSBaseOffset)<br>
+ || (((simStackAt(i)->type)) == SSRegister))<br>
+ && (isValidFramelessRegister((simStackAt(i)->registerr)))));<br>
ensureSpilledAtfrom(simStackAt(i), frameOffsetOfTemporary(i), FPReg);<br>
}<br>
simSpillBase = index + 1;<br>
@@ -16103,7 +16119,24 @@<br>
}<br>
}<br>
<br>
+<br>
+/* Pop any spilled items on the sim stack from index, used to balance the<br>
+ stack on return.<br>
+ */<br>
+<br>
static void<br>
+ssPopSpillsFrom(sqInt index)<br>
+{<br>
+ sqInt i;<br>
+<br>
+ for (i = index; i <= simStackPtr; i += 1) {<br>
+ if ((simStackAt(i)->spilled)) {<br>
+ popToReg(ssTop(), TempReg);<br>
+ }<br>
+ }<br>
+}<br>
+<br>
+static void<br>
ssPop(sqInt n)<br>
{<br>
assert(((simStackPtr - n) >= (methodOrBlockNumTemps - 1))<br>
<br>
Modified: branches/Cog/src/vm/cogit.h<br>
===================================================================<br>
--- branches/Cog/src/vm/cogit.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cogit.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGenerator VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
<br>
<br>
Modified: branches/Cog/src/vm/cogmethod.h<br>
===================================================================<br>
--- branches/Cog/src/vm/cogmethod.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cogmethod.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGenerator VMMaker.oscog-eem.135 uuid: 1c85e5ef-0fe8-4a1e-9421-ff0d53845fba<br>
+ CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
typedef struct {<br>
<br>
Modified: branches/Cog/src/vm/cointerp.c<br>
===================================================================<br>
--- branches/Cog/src/vm/cointerp.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cointerp.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,9 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc " __DATE__ ;<br>
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__interpBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -327,6 +327,7 @@<br>
sqInt interpret(void);<br>
static void activateCoggedNewMethod(sqInt inInterpreter);<br>
static void activateNewMethod(void);<br>
+sqInt activeProcess(void);<br>
EXPORT(sqInt) addGCRoot(sqInt *varLoc);<br>
static void addLastLinktoList(sqInt proc, sqInt aList);<br>
static void addNewMethodToCache(sqInt class);<br>
@@ -1889,7 +1890,7 @@<br>
/* 575 */ (void (*)(void))0,<br>
0 };<br>
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);<br>
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.137]";<br>
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.138]";<br>
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;<br>
volatile int sendTrace;<br>
<br>
@@ -8684,6 +8685,16 @@<br>
}<br>
<br>
<br>
+/* Answer the current activeProcess. */<br>
+/* useful for VM debugging */<br>
+<br>
+sqInt<br>
+activeProcess(void)<br>
+{<br>
+ return longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord));<br>
+}<br>
+<br>
+<br>
/* Add the given variable location to the extra roots table */<br>
<br>
EXPORT(sqInt)<br>
@@ -19755,13 +19766,17 @@<br>
goto l1;<br>
}<br>
l1: /* end lengthOf: */;<br>
- if ((lastIndex - startIP) > 100) {<br>
- lastIndex = startIP + 100;<br>
+ if ((lastIndex - startIP) > 104) {<br>
+ lastIndex = startIP + 103;<br>
}<br>
bytecodesPerLine = 8;<br>
for (index = startIP; index <= lastIndex; index += 1) {<br>
byte = byteAt((oop + BaseHeaderSize) + (index - 1));<br>
printf(" %02x/%-3d", byte,byte);<br>
+ if ((index == lastIndex)<br>
+ && ((lengthOf(oop)) > index)) {<br>
+ print("...");<br>
+ }<br>
if ((((index - startIP) + 1) % bytecodesPerLine) == 0) {<br>
/* begin cr */<br>
printf("\n");<br>
@@ -37608,7 +37623,7 @@<br>
<br>
void<br>
printContext(sqInt aContext)<br>
-{<br>
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
sqInt i;<br>
sqInt ip;<br>
void *p;<br>
@@ -37659,17 +37674,22 @@<br>
print("sender ");<br>
shortPrintOop(sender);<br>
print("ip ");<br>
- printNum(ip);<br>
- print(" (");<br>
- printNum((ip >> 1));<br>
- /* begin space */<br>
- /* begin printChar: */<br>
- putchar(' ');<br>
- printHex((ip >> 1));<br>
- /* begin printChar: */<br>
- putchar(')');<br>
- /* begin cr */<br>
- printf("\n");<br>
+ if (ip == GIV(nilObj)) {<br>
+ shortPrintOop(ip);<br>
+ }<br>
+ else {<br>
+ printNum(ip);<br>
+ print(" (");<br>
+ printNum((ip >> 1));<br>
+ /* begin space */<br>
+ /* begin printChar: */<br>
+ putchar(' ');<br>
+ printHex((ip >> 1));<br>
+ /* begin printChar: */<br>
+ putchar(')');<br>
+ /* begin cr */<br>
+ printf("\n");<br>
+ }<br>
}<br>
sp = longAt((aContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord));<br>
sp = ((sp < ((lengthOf(aContext)) - ReceiverIndex)) ? sp : ((lengthOf(aContext)) - ReceiverIndex));<br>
@@ -41224,6 +41244,7 @@<br>
shortPrintContext(sqInt aContext)<br>
{<br>
sqInt home;<br>
+ char *theFP;<br>
<br>
if (!(((aContext & 1) == 0)<br>
&& (((((usqInt) (longAt(aContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {<br>
@@ -41234,14 +41255,20 @@<br>
return;<br>
}<br>
home = findHomeForContext(aContext);<br>
- printNum(aContext);<br>
+ printHex(aContext);<br>
if (((longAt((aContext + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {<br>
- if ((checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer)))<br>
- && (isMachineCodeFrame(frameOfMarriedContext(aContext)))) {<br>
- print(" m ");<br>
+ if (checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer))) {<br>
+ if (isMachineCodeFrame((theFP = frameOfMarriedContext(aContext)))) {<br>
+ print(" M (");<br>
+ }<br>
+ else {<br>
+ print(" I (");<br>
+ }<br>
+ printHex(theFP);<br>
+ print(") ");<br>
}<br>
else {<br>
- print(" i ");<br>
+ print(" w ");<br>
}<br>
}<br>
else {<br>
@@ -41316,7 +41343,7 @@<br>
void<br>
shortPrintFrameAndNCallers(char *theFP, sqInt n)<br>
{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
- if ((n > 0)<br>
+ if ((n != 0)<br>
&& ((((((usqInt)theFP)) & (BytesPerWord - 1)) == 0)<br>
&& ((((((usqInt)theFP)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)theFP)) <= (((usqInt)GIV(pages)))))))) {<br>
shortPrintFrame(theFP);<br>
<br>
Modified: branches/Cog/src/vm/cointerp.h<br>
===================================================================<br>
--- branches/Cog/src/vm/cointerp.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cointerp.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,10 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
<br>
/*** Function Prototypes ***/<br>
+sqInt activeProcess(void);<br>
sqInt addressCouldBeObj(sqInt address);<br>
sqInt addressCouldBeOop(sqInt address);<br>
usqInt argumentCountAddress(void);<br>
<br>
Modified: branches/Cog/src/vm/cointerpmt.c<br>
===================================================================<br>
--- branches/Cog/src/vm/cointerpmt.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cointerpmt.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,9 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- CoInterpreterMT VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CoInterpreterMT VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc " __DATE__ ;<br>
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__interpBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -370,7 +370,7 @@<br>
sqInt interpret(void);<br>
static void activateCoggedNewMethod(sqInt inInterpreter);<br>
static void activateNewMethod(void);<br>
-static sqInt activeProcess(void);<br>
+sqInt activeProcess(void);<br>
EXPORT(sqInt) addGCRoot(sqInt *varLoc);<br>
static void addLastLinktoList(sqInt proc, sqInt aList);<br>
static void addNewMethodToCache(sqInt class);<br>
@@ -1989,7 +1989,7 @@<br>
/* 575 */ (void (*)(void))0,<br>
0 };<br>
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);<br>
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.137]";<br>
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.138]";<br>
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;<br>
volatile int sendTrace;<br>
sqInt willNotThreadWarnCount;<br>
@@ -8787,8 +8787,9 @@<br>
<br>
<br>
/* Answer the current activeProcess. */<br>
+/* useful for VM debugging */<br>
<br>
-static sqInt<br>
+sqInt<br>
activeProcess(void)<br>
{<br>
return longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord));<br>
@@ -20488,13 +20489,17 @@<br>
goto l1;<br>
}<br>
l1: /* end lengthOf: */;<br>
- if ((lastIndex - startIP) > 100) {<br>
- lastIndex = startIP + 100;<br>
+ if ((lastIndex - startIP) > 104) {<br>
+ lastIndex = startIP + 103;<br>
}<br>
bytecodesPerLine = 8;<br>
for (index = startIP; index <= lastIndex; index += 1) {<br>
byte = byteAt((oop + BaseHeaderSize) + (index - 1));<br>
printf(" %02x/%-3d", byte,byte);<br>
+ if ((index == lastIndex)<br>
+ && ((lengthOf(oop)) > index)) {<br>
+ print("...");<br>
+ }<br>
if ((((index - startIP) + 1) % bytecodesPerLine) == 0) {<br>
/* begin cr */<br>
printf("\n");<br>
@@ -38935,7 +38940,7 @@<br>
<br>
void<br>
printContext(sqInt aContext)<br>
-{<br>
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
sqInt i;<br>
sqInt ip;<br>
void *p;<br>
@@ -38986,17 +38991,22 @@<br>
print("sender ");<br>
shortPrintOop(sender);<br>
print("ip ");<br>
- printNum(ip);<br>
- print(" (");<br>
- printNum((ip >> 1));<br>
- /* begin space */<br>
- /* begin printChar: */<br>
- putchar(' ');<br>
- printHex((ip >> 1));<br>
- /* begin printChar: */<br>
- putchar(')');<br>
- /* begin cr */<br>
- printf("\n");<br>
+ if (ip == GIV(nilObj)) {<br>
+ shortPrintOop(ip);<br>
+ }<br>
+ else {<br>
+ printNum(ip);<br>
+ print(" (");<br>
+ printNum((ip >> 1));<br>
+ /* begin space */<br>
+ /* begin printChar: */<br>
+ putchar(' ');<br>
+ printHex((ip >> 1));<br>
+ /* begin printChar: */<br>
+ putchar(')');<br>
+ /* begin cr */<br>
+ printf("\n");<br>
+ }<br>
}<br>
sp = longAt((aContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord));<br>
sp = ((sp < ((lengthOf(aContext)) - ReceiverIndex)) ? sp : ((lengthOf(aContext)) - ReceiverIndex));<br>
@@ -42652,6 +42662,7 @@<br>
shortPrintContext(sqInt aContext)<br>
{<br>
sqInt home;<br>
+ char *theFP;<br>
<br>
if (!(((aContext & 1) == 0)<br>
&& (((((usqInt) (longAt(aContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {<br>
@@ -42662,14 +42673,20 @@<br>
return;<br>
}<br>
home = findHomeForContext(aContext);<br>
- printNum(aContext);<br>
+ printHex(aContext);<br>
if (((longAt((aContext + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {<br>
- if ((checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer)))<br>
- && (isMachineCodeFrame(frameOfMarriedContext(aContext)))) {<br>
- print(" m ");<br>
+ if (checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer))) {<br>
+ if (isMachineCodeFrame((theFP = frameOfMarriedContext(aContext)))) {<br>
+ print(" M (");<br>
+ }<br>
+ else {<br>
+ print(" I (");<br>
+ }<br>
+ printHex(theFP);<br>
+ print(") ");<br>
}<br>
else {<br>
- print(" i ");<br>
+ print(" w ");<br>
}<br>
}<br>
else {<br>
@@ -42744,7 +42761,7 @@<br>
void<br>
shortPrintFrameAndNCallers(char *theFP, sqInt n)<br>
{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
- if ((n > 0)<br>
+ if ((n != 0)<br>
&& ((((((usqInt)theFP)) & (BytesPerWord - 1)) == 0)<br>
&& ((((((usqInt)theFP)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)theFP)) <= (((usqInt)GIV(pages)))))))) {<br>
shortPrintFrame(theFP);<br>
<br>
Modified: branches/Cog/src/vm/cointerpmt.h<br>
===================================================================<br>
--- branches/Cog/src/vm/cointerpmt.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/cointerpmt.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,9 +1,10 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
<br>
/*** Function Prototypes ***/<br>
+sqInt activeProcess(void);<br>
sqInt addressCouldBeObj(sqInt address);<br>
sqInt addressCouldBeOop(sqInt address);<br>
usqInt argumentCountAddress(void);<br>
<br>
Modified: branches/Cog/src/vm/gcc3x-cointerp.c<br>
===================================================================<br>
--- branches/Cog/src/vm/gcc3x-cointerp.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/gcc3x-cointerp.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -2,11 +2,11 @@<br>
<br>
<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc " __DATE__ ;<br>
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__interpBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -330,6 +330,7 @@<br>
sqInt interpret(void);<br>
static void activateCoggedNewMethod(sqInt inInterpreter);<br>
static void activateNewMethod(void);<br>
+sqInt activeProcess(void);<br>
EXPORT(sqInt) addGCRoot(sqInt *varLoc);<br>
static void addLastLinktoList(sqInt proc, sqInt aList);<br>
static void addNewMethodToCache(sqInt class);<br>
@@ -1892,7 +1893,7 @@<br>
/* 575 */ (void (*)(void))0,<br>
0 };<br>
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);<br>
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.137]";<br>
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.138]";<br>
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;<br>
volatile int sendTrace;<br>
<br>
@@ -8688,6 +8689,16 @@<br>
}<br>
<br>
<br>
+/* Answer the current activeProcess. */<br>
+/* useful for VM debugging */<br>
+<br>
+sqInt<br>
+activeProcess(void)<br>
+{<br>
+ return longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord));<br>
+}<br>
+<br>
+<br>
/* Add the given variable location to the extra roots table */<br>
<br>
EXPORT(sqInt)<br>
@@ -19759,13 +19770,17 @@<br>
goto l1;<br>
}<br>
l1: /* end lengthOf: */;<br>
- if ((lastIndex - startIP) > 100) {<br>
- lastIndex = startIP + 100;<br>
+ if ((lastIndex - startIP) > 104) {<br>
+ lastIndex = startIP + 103;<br>
}<br>
bytecodesPerLine = 8;<br>
for (index = startIP; index <= lastIndex; index += 1) {<br>
byte = byteAt((oop + BaseHeaderSize) + (index - 1));<br>
printf(" %02x/%-3d", byte,byte);<br>
+ if ((index == lastIndex)<br>
+ && ((lengthOf(oop)) > index)) {<br>
+ print("...");<br>
+ }<br>
if ((((index - startIP) + 1) % bytecodesPerLine) == 0) {<br>
/* begin cr */<br>
printf("\n");<br>
@@ -37612,7 +37627,7 @@<br>
<br>
void<br>
printContext(sqInt aContext)<br>
-{<br>
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
sqInt i;<br>
sqInt ip;<br>
void *p;<br>
@@ -37663,17 +37678,22 @@<br>
print("sender ");<br>
shortPrintOop(sender);<br>
print("ip ");<br>
- printNum(ip);<br>
- print(" (");<br>
- printNum((ip >> 1));<br>
- /* begin space */<br>
- /* begin printChar: */<br>
- putchar(' ');<br>
- printHex((ip >> 1));<br>
- /* begin printChar: */<br>
- putchar(')');<br>
- /* begin cr */<br>
- printf("\n");<br>
+ if (ip == GIV(nilObj)) {<br>
+ shortPrintOop(ip);<br>
+ }<br>
+ else {<br>
+ printNum(ip);<br>
+ print(" (");<br>
+ printNum((ip >> 1));<br>
+ /* begin space */<br>
+ /* begin printChar: */<br>
+ putchar(' ');<br>
+ printHex((ip >> 1));<br>
+ /* begin printChar: */<br>
+ putchar(')');<br>
+ /* begin cr */<br>
+ printf("\n");<br>
+ }<br>
}<br>
sp = longAt((aContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord));<br>
sp = ((sp < ((lengthOf(aContext)) - ReceiverIndex)) ? sp : ((lengthOf(aContext)) - ReceiverIndex));<br>
@@ -41228,6 +41248,7 @@<br>
shortPrintContext(sqInt aContext)<br>
{<br>
sqInt home;<br>
+ char *theFP;<br>
<br>
if (!(((aContext & 1) == 0)<br>
&& (((((usqInt) (longAt(aContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {<br>
@@ -41238,14 +41259,20 @@<br>
return;<br>
}<br>
home = findHomeForContext(aContext);<br>
- printNum(aContext);<br>
+ printHex(aContext);<br>
if (((longAt((aContext + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {<br>
- if ((checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer)))<br>
- && (isMachineCodeFrame(frameOfMarriedContext(aContext)))) {<br>
- print(" m ");<br>
+ if (checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer))) {<br>
+ if (isMachineCodeFrame((theFP = frameOfMarriedContext(aContext)))) {<br>
+ print(" M (");<br>
+ }<br>
+ else {<br>
+ print(" I (");<br>
+ }<br>
+ printHex(theFP);<br>
+ print(") ");<br>
}<br>
else {<br>
- print(" i ");<br>
+ print(" w ");<br>
}<br>
}<br>
else {<br>
@@ -41320,7 +41347,7 @@<br>
void<br>
shortPrintFrameAndNCallers(char *theFP, sqInt n)<br>
{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
- if ((n > 0)<br>
+ if ((n != 0)<br>
&& ((((((usqInt)theFP)) & (BytesPerWord - 1)) == 0)<br>
&& ((((((usqInt)theFP)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)theFP)) <= (((usqInt)GIV(pages)))))))) {<br>
shortPrintFrame(theFP);<br>
<br>
Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c<br>
===================================================================<br>
--- branches/Cog/src/vm/gcc3x-cointerpmt.c 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/gcc3x-cointerpmt.c 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -2,11 +2,11 @@<br>
<br>
<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
from<br>
- CoInterpreterMT VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CoInterpreterMT VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc " __DATE__ ;<br>
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;<br>
char *__interpBuildInfo = __buildInfo;<br>
<br>
<br>
@@ -373,7 +373,7 @@<br>
sqInt interpret(void);<br>
static void activateCoggedNewMethod(sqInt inInterpreter);<br>
static void activateNewMethod(void);<br>
-static sqInt activeProcess(void);<br>
+sqInt activeProcess(void);<br>
EXPORT(sqInt) addGCRoot(sqInt *varLoc);<br>
static void addLastLinktoList(sqInt proc, sqInt aList);<br>
static void addNewMethodToCache(sqInt class);<br>
@@ -1992,7 +1992,7 @@<br>
/* 575 */ (void (*)(void))0,<br>
0 };<br>
static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);<br>
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.137]";<br>
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.138]";<br>
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;<br>
volatile int sendTrace;<br>
sqInt willNotThreadWarnCount;<br>
@@ -8791,8 +8791,9 @@<br>
<br>
<br>
/* Answer the current activeProcess. */<br>
+/* useful for VM debugging */<br>
<br>
-static sqInt<br>
+sqInt<br>
activeProcess(void)<br>
{<br>
return longAt(((longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SchedulerAssociation << ShiftForWord))) + BaseHeaderSize) + (ValueIndex << ShiftForWord))) + BaseHeaderSize) + (ActiveProcessIndex << ShiftForWord));<br>
@@ -20492,13 +20493,17 @@<br>
goto l1;<br>
}<br>
l1: /* end lengthOf: */;<br>
- if ((lastIndex - startIP) > 100) {<br>
- lastIndex = startIP + 100;<br>
+ if ((lastIndex - startIP) > 104) {<br>
+ lastIndex = startIP + 103;<br>
}<br>
bytecodesPerLine = 8;<br>
for (index = startIP; index <= lastIndex; index += 1) {<br>
byte = byteAt((oop + BaseHeaderSize) + (index - 1));<br>
printf(" %02x/%-3d", byte,byte);<br>
+ if ((index == lastIndex)<br>
+ && ((lengthOf(oop)) > index)) {<br>
+ print("...");<br>
+ }<br>
if ((((index - startIP) + 1) % bytecodesPerLine) == 0) {<br>
/* begin cr */<br>
printf("\n");<br>
@@ -38939,7 +38944,7 @@<br>
<br>
void<br>
printContext(sqInt aContext)<br>
-{<br>
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
sqInt i;<br>
sqInt ip;<br>
void *p;<br>
@@ -38990,17 +38995,22 @@<br>
print("sender ");<br>
shortPrintOop(sender);<br>
print("ip ");<br>
- printNum(ip);<br>
- print(" (");<br>
- printNum((ip >> 1));<br>
- /* begin space */<br>
- /* begin printChar: */<br>
- putchar(' ');<br>
- printHex((ip >> 1));<br>
- /* begin printChar: */<br>
- putchar(')');<br>
- /* begin cr */<br>
- printf("\n");<br>
+ if (ip == GIV(nilObj)) {<br>
+ shortPrintOop(ip);<br>
+ }<br>
+ else {<br>
+ printNum(ip);<br>
+ print(" (");<br>
+ printNum((ip >> 1));<br>
+ /* begin space */<br>
+ /* begin printChar: */<br>
+ putchar(' ');<br>
+ printHex((ip >> 1));<br>
+ /* begin printChar: */<br>
+ putchar(')');<br>
+ /* begin cr */<br>
+ printf("\n");<br>
+ }<br>
}<br>
sp = longAt((aContext + BaseHeaderSize) + (StackPointerIndex << ShiftForWord));<br>
sp = ((sp < ((lengthOf(aContext)) - ReceiverIndex)) ? sp : ((lengthOf(aContext)) - ReceiverIndex));<br>
@@ -42656,6 +42666,7 @@<br>
shortPrintContext(sqInt aContext)<br>
{<br>
sqInt home;<br>
+ char *theFP;<br>
<br>
if (!(((aContext & 1) == 0)<br>
&& (((((usqInt) (longAt(aContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {<br>
@@ -42666,14 +42677,20 @@<br>
return;<br>
}<br>
home = findHomeForContext(aContext);<br>
- printNum(aContext);<br>
+ printHex(aContext);<br>
if (((longAt((aContext + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1)) {<br>
- if ((checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer)))<br>
- && (isMachineCodeFrame(frameOfMarriedContext(aContext)))) {<br>
- print(" m ");<br>
+ if (checkIsStillMarriedContextcurrentFP(aContext, GIV(framePointer))) {<br>
+ if (isMachineCodeFrame((theFP = frameOfMarriedContext(aContext)))) {<br>
+ print(" M (");<br>
+ }<br>
+ else {<br>
+ print(" I (");<br>
+ }<br>
+ printHex(theFP);<br>
+ print(") ");<br>
}<br>
else {<br>
- print(" i ");<br>
+ print(" w ");<br>
}<br>
}<br>
else {<br>
@@ -42748,7 +42765,7 @@<br>
void<br>
shortPrintFrameAndNCallers(char *theFP, sqInt n)<br>
{ DECL_MAYBE_SQ_GLOBAL_STRUCT<br>
- if ((n > 0)<br>
+ if ((n != 0)<br>
&& ((((((usqInt)theFP)) & (BytesPerWord - 1)) == 0)<br>
&& ((((((usqInt)theFP)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)theFP)) <= (((usqInt)GIV(pages)))))))) {<br>
shortPrintFrame(theFP);<br>
<br>
Modified: branches/Cog/src/vm/interp.h<br>
===================================================================<br>
--- branches/Cog/src/vm/interp.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/interp.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
#define VM_PROXY_MAJOR 1<br>
<br>
Modified: branches/Cog/src/vm/vmCallback.h<br>
===================================================================<br>
--- branches/Cog/src/vm/vmCallback.h 2011-11-15 00:39:49 UTC (rev 2513)<br>
+++ branches/Cog/src/vm/vmCallback.h 2011-11-18 01:18:02 UTC (rev 2514)<br>
@@ -1,5 +1,5 @@<br>
/* Automatically generated by<br>
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.137 uuid: fbe64d98-6b1a-4c5b-b3f3-d2b1091406dc<br>
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d<br>
*/<br>
<br>
#define VM_CALLBACK_INC 1<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div><br>