[Vm-dev] [commit] r2515 - CogVM source as per VMMaker.oscog-eem.139.
commits at squeakvm.org
commits at squeakvm.org
Fri Nov 18 18:13:11 UTC 2011
Author: eliot
Date: 2011-11-18 10:13:10 -0800 (Fri, 18 Nov 2011)
New Revision: 2515
Modified:
branches/Cog/nscogsrc/vm/cogit.c
branches/Cog/nscogsrc/vm/cogit.h
branches/Cog/nscogsrc/vm/cogmethod.h
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
branches/Cog/src/vm/cogit.c
branches/Cog/src/vm/cogit.h
branches/Cog/src/vm/cogmethod.h
Log:
CogVM source as per VMMaker.oscog-eem.139.
Replace bogus fix for frameless foo: arg instVar := instVar code gen
bug (apparent failure to pop spills on frameless return), with correct
fix, which is not to flush the top of stack when pop/storing receiver
and/or temp vars. i.e. ssFlushUpThroughReceiverVariable: &
ssFlushUpThroughTemporaryVariable: skip the entry at simStackPtr.
Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c 2011-11-18 01:18:02 UTC (rev 2514)
+++ branches/Cog/nscogsrc/vm/cogit.c 2011-11-18 18:13:10 UTC (rev 2515)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ CCodeGenerator VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ StackToRegisterMappingCogit VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -805,7 +805,6 @@
sqInt isSendReturnPC(sqInt retpc);
static sqInt isSmallIntegerTagNonZero(void);
static sqInt isUnconditionalBranch(BytecodeDescriptor * self_in_isUnconditionalBranch);
-static sqInt isValidFramelessRegister(sqInt reg);
static AbstractInstruction * gJumpFPEqual(void *jumpTarget);
static AbstractInstruction * gJumpFPGreaterOrEqual(void *jumpTarget);
static AbstractInstruction * gJumpFPGreater(void *jumpTarget);
@@ -964,7 +963,6 @@
static void ssFlushTo(sqInt index);
static void ssFlushUpThroughReceiverVariable(sqInt slotIndex);
static void ssFlushUpThroughTemporaryVariable(sqInt tempIndex);
-static void ssPopSpillsFrom(sqInt index);
static void ssPop(sqInt n);
static sqInt ssPushAnnotatedConstant(sqInt literal);
static sqInt ssPushBaseoffset(sqInt reg, sqInt offset);
@@ -12495,7 +12493,6 @@
genoperand(RetN, (methodOrBlockNumArgs + 1) * BytesPerWord);
}
else {
- ssPopSpillsFrom(methodOrBlockNumArgs - 1);
/* begin RetN: */
offset = ((methodOrBlockNumArgs > (numRegArgs()))
|| (regArgsHaveBeenPushed)
@@ -13257,16 +13254,6 @@
}
-/* Answer if the receiver is valid in a frameless method. */
-
-static sqInt
-isValidFramelessRegister(sqInt reg)
-{
- return (reg == ReceiverResultReg)
- || (reg == Arg0Reg);
-}
-
-
/* Floating-point jumps are a little weird on some processors. Defer to
the backEnd to allow it to generate any special code it may need to. */
@@ -16552,10 +16539,7 @@
}
if (simSpillBase <= index) {
for (i = (((simSpillBase < 0) ? 0 : simSpillBase)); i <= index; i += 1) {
- assert(needsFrame
- || (((((simStackAt(i)->type)) == SSBaseOffset)
- || (((simStackAt(i)->type)) == SSRegister))
- && (isValidFramelessRegister((simStackAt(i)->registerr)))));
+ assert(needsFrame);
ensureSpilledAtfrom(simStackAt(i), frameOffsetOfTemporary(i), FPReg);
}
simSpillBase = index + 1;
@@ -16563,8 +16547,9 @@
}
-/* Any occurrences on the stack of the value being stored must
- be flushed, and hence any values colder than them stack. */
+/* Any occurrences on the stack of the value being stored (which is the top
+ of stack)
+ must be flushed, and hence any values colder than them stack. */
static void
ssFlushUpThroughReceiverVariable(sqInt slotIndex)
@@ -16572,7 +16557,7 @@
CogSimStackEntry *desc;
sqInt index;
- for (index = simStackPtr; index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) {
+ for (index = (simStackPtr - 1); index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) {
desc = simStackAt(index);
if ((((desc->type)) == SSBaseOffset)
&& ((((desc->registerr)) == ReceiverResultReg)
@@ -16584,8 +16569,9 @@
}
-/* Any occurrences on the stack of the value being stored must
- be flushed, and hence any values colder than them stack. */
+/* Any occurrences on the stack of the value being stored (which is the top
+ of stack)
+ must be flushed, and hence any values colder than them stack. */
static void
ssFlushUpThroughTemporaryVariable(sqInt tempIndex)
@@ -16593,7 +16579,7 @@
CogSimStackEntry *desc;
sqInt index;
- for (index = simStackPtr; index >= simSpillBase; index += -1) {
+ for (index = (simStackPtr - 1); index >= simSpillBase; index += -1) {
desc = simStackAt(index);
if ((((desc->type)) == SSBaseOffset)
&& ((((desc->registerr)) == FPReg)
@@ -16604,24 +16590,7 @@
}
}
-
-/* Pop any spilled items on the sim stack from index, used to balance the
- stack on return.
- */
-
static void
-ssPopSpillsFrom(sqInt index)
-{
- sqInt i;
-
- for (i = index; i <= simStackPtr; i += 1) {
- if ((simStackAt(i)->spilled)) {
- popToReg(ssTop(), TempReg);
- }
- }
-}
-
-static void
ssPop(sqInt n)
{
assert(((simStackPtr - n) >= (methodOrBlockNumTemps - 1))
Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h 2011-11-18 01:18:02 UTC (rev 2514)
+++ branches/Cog/nscogsrc/vm/cogit.h 2011-11-18 18:13:10 UTC (rev 2515)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ CCodeGenerator VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
*/
Modified: branches/Cog/nscogsrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogmethod.h 2011-11-18 01:18:02 UTC (rev 2514)
+++ branches/Cog/nscogsrc/vm/cogmethod.h 2011-11-18 18:13:10 UTC (rev 2515)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ CCodeGenerator VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
*/
typedef struct {
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Thu Nov 17 17:17:12 PST 2011
+ Fri Nov 18 10:11:32 PST 2011
Modified: branches/Cog/src/vm/cogit.c
===================================================================
--- branches/Cog/src/vm/cogit.c 2011-11-18 01:18:02 UTC (rev 2514)
+++ branches/Cog/src/vm/cogit.c 2011-11-18 18:13:10 UTC (rev 2515)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ CCodeGenerator VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ StackToRegisterMappingCogit VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -798,7 +798,6 @@
sqInt isSendReturnPC(sqInt retpc);
static sqInt isSmallIntegerTagNonZero(void);
static sqInt isUnconditionalBranch(BytecodeDescriptor * self_in_isUnconditionalBranch);
-static sqInt isValidFramelessRegister(sqInt reg);
static AbstractInstruction * gJumpFPEqual(void *jumpTarget);
static AbstractInstruction * gJumpFPGreaterOrEqual(void *jumpTarget);
static AbstractInstruction * gJumpFPGreater(void *jumpTarget);
@@ -952,7 +951,6 @@
static void ssFlushTo(sqInt index);
static void ssFlushUpThroughReceiverVariable(sqInt slotIndex);
static void ssFlushUpThroughTemporaryVariable(sqInt tempIndex);
-static void ssPopSpillsFrom(sqInt index);
static void ssPop(sqInt n);
static sqInt ssPushAnnotatedConstant(sqInt literal);
static sqInt ssPushBaseoffset(sqInt reg, sqInt offset);
@@ -12283,7 +12281,6 @@
genoperand(RetN, (methodOrBlockNumArgs + 1) * BytesPerWord);
}
else {
- ssPopSpillsFrom(methodOrBlockNumArgs - 1);
/* begin RetN: */
offset = ((methodOrBlockNumArgs > (numRegArgs()))
|| (regArgsHaveBeenPushed)
@@ -13045,16 +13042,6 @@
}
-/* Answer if the receiver is valid in a frameless method. */
-
-static sqInt
-isValidFramelessRegister(sqInt reg)
-{
- return (reg == ReceiverResultReg)
- || (reg == Arg0Reg);
-}
-
-
/* Floating-point jumps are a little weird on some processors. Defer to
the backEnd to allow it to generate any special code it may need to. */
@@ -16067,10 +16054,7 @@
}
if (simSpillBase <= index) {
for (i = (((simSpillBase < 0) ? 0 : simSpillBase)); i <= index; i += 1) {
- assert(needsFrame
- || (((((simStackAt(i)->type)) == SSBaseOffset)
- || (((simStackAt(i)->type)) == SSRegister))
- && (isValidFramelessRegister((simStackAt(i)->registerr)))));
+ assert(needsFrame);
ensureSpilledAtfrom(simStackAt(i), frameOffsetOfTemporary(i), FPReg);
}
simSpillBase = index + 1;
@@ -16078,8 +16062,9 @@
}
-/* Any occurrences on the stack of the value being stored must
- be flushed, and hence any values colder than them stack. */
+/* Any occurrences on the stack of the value being stored (which is the top
+ of stack)
+ must be flushed, and hence any values colder than them stack. */
static void
ssFlushUpThroughReceiverVariable(sqInt slotIndex)
@@ -16087,7 +16072,7 @@
CogSimStackEntry *desc;
sqInt index;
- for (index = simStackPtr; index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) {
+ for (index = (simStackPtr - 1); index >= (((simSpillBase < 0) ? 0 : simSpillBase)); index += -1) {
desc = simStackAt(index);
if ((((desc->type)) == SSBaseOffset)
&& ((((desc->registerr)) == ReceiverResultReg)
@@ -16099,8 +16084,9 @@
}
-/* Any occurrences on the stack of the value being stored must
- be flushed, and hence any values colder than them stack. */
+/* Any occurrences on the stack of the value being stored (which is the top
+ of stack)
+ must be flushed, and hence any values colder than them stack. */
static void
ssFlushUpThroughTemporaryVariable(sqInt tempIndex)
@@ -16108,7 +16094,7 @@
CogSimStackEntry *desc;
sqInt index;
- for (index = simStackPtr; index >= simSpillBase; index += -1) {
+ for (index = (simStackPtr - 1); index >= simSpillBase; index += -1) {
desc = simStackAt(index);
if ((((desc->type)) == SSBaseOffset)
&& ((((desc->registerr)) == FPReg)
@@ -16119,24 +16105,7 @@
}
}
-
-/* Pop any spilled items on the sim stack from index, used to balance the
- stack on return.
- */
-
static void
-ssPopSpillsFrom(sqInt index)
-{
- sqInt i;
-
- for (i = index; i <= simStackPtr; i += 1) {
- if ((simStackAt(i)->spilled)) {
- popToReg(ssTop(), TempReg);
- }
- }
-}
-
-static void
ssPop(sqInt n)
{
assert(((simStackPtr - n) >= (methodOrBlockNumTemps - 1))
Modified: branches/Cog/src/vm/cogit.h
===================================================================
--- branches/Cog/src/vm/cogit.h 2011-11-18 01:18:02 UTC (rev 2514)
+++ branches/Cog/src/vm/cogit.h 2011-11-18 18:13:10 UTC (rev 2515)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ CCodeGenerator VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
*/
Modified: branches/Cog/src/vm/cogmethod.h
===================================================================
--- branches/Cog/src/vm/cogmethod.h 2011-11-18 01:18:02 UTC (rev 2514)
+++ branches/Cog/src/vm/cogmethod.h 2011-11-18 18:13:10 UTC (rev 2515)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.138 uuid: f9a63bdf-7bbc-4ae5-9634-ecd6fd814c9d
+ CCodeGenerator VMMaker.oscog-eem.139 uuid: c2849383-9768-4948-b9b2-a5c22d482b07
*/
typedef struct {
More information about the Vm-dev
mailing list