[Vm-dev] [commit][3365] CogVM source as per VMMaker.oscog-eem.1332
commits at squeakvm.org
commits at squeakvm.org
Tue Jun 2 00:20:25 UTC 2015
Revision: 3365
Author: eliot
Date: 2015-06-01 17:20:23 -0700 (Mon, 01 Jun 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1332
Newspeak Cogit:
Fix the regression in implicit receiver sends caused by VMMaker.oscog-eem.1317
(fix to performance regression caused by using XCHG on x86).
The implicit receiver cache uses SendNumArgsReg to refer to the cache object.
Hence we must use TempReg for genPushRegisterArgsForNumArgs: in this case.
So refactor to genPushRegisterArgsForNumArgs:scratchReg:, passing either
TempReg or SendNumArgsReg as approprate.
Modified Paths:
--------------
branches/Cog/nsspursrc/vm/cogit.h
branches/Cog/nsspursrc/vm/cogitARMv5.c
branches/Cog/nsspursrc/vm/cogitIA32.c
branches/Cog/platforms/Mac OS/vm/sqMacMain.c
branches/Cog/platforms/unix/vm/sqUnixMain.c
branches/Cog/spursistasrc/vm/cogit.h
branches/Cog/spursistasrc/vm/cogitARMv5.c
branches/Cog/spursistasrc/vm/cogitIA32.c
branches/Cog/spursrc/vm/cogit.h
branches/Cog/spursrc/vm/cogitARMv5.c
branches/Cog/spursrc/vm/cogitIA32.c
branches/Cog/src/vm/cogit.h
branches/Cog/src/vm/cogitARMv5.c
branches/Cog/src/vm/cogitIA32.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/nsspursrc/vm/cogit.h 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
Modified: branches/Cog/nsspursrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogitARMv5.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/nsspursrc/vm/cogitARMv5.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -462,7 +462,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static AbstractInstruction * genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static AbstractInstruction * genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -6263,9 +6263,9 @@
NOTA BENE: we do NOT push the return address here, which means it must be
dealt with later. */
- /* CogARMCompiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogARMCompiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored)
{
if (numArgs <= 2) {
assert((numRegArgs()) <= 2);
@@ -6280,7 +6280,7 @@
}
}
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
@@ -9912,7 +9912,7 @@
{
sqInt classIndex;
sqInt i;
- sqInt pc;
+ usqInt pc;
pc = (((((usqInt)cPIC)) + firstCPICCaseOffset) + cPICCaseSize) - (jumpLongConditionalByteSize(backEnd));
for (i = 2; i <= ((cPIC->cPICNumCases)); i += 1) {
@@ -11094,7 +11094,8 @@
genoperand(JumpR, TempReg);
jmpTarget(jumpMiss, gLabel());
genEnsureObjInRegNotForwardedscratchRegupdatingMwr(ReceiverResultReg, TempReg, FoxMFReceiver, FPReg);
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, TempReg);
+
return genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 2, SendNumArgsReg, ReceiverResultReg, null, null, 0, 1, ReceiverResultReg, 1);
}
@@ -21816,7 +21817,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -22588,7 +22589,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -23254,7 +23255,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 2
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -24268,7 +24269,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 2))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -24415,7 +24416,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 3, regOrConst0, regOrConst1, regOrConst2, null, 0, 1, null, 1);
return startAddress;
}
@@ -24433,7 +24434,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Modified: branches/Cog/nsspursrc/vm/cogitIA32.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogitIA32.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/nsspursrc/vm/cogitIA32.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -439,7 +439,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static sqInt genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static sqInt genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -5458,7 +5458,7 @@
/* Ensure that the register args are pushed before the retpc for arity <=
self numRegArgs. This
- won't be as clumsy on a RISC. But putting the receiver and args above the
+ isn't as clumsy on a RISC. But putting the receiver and args above the
return address
means the CoInterpreter has a single machine-code frame format which saves
us a lot of work.
@@ -5470,9 +5470,9 @@
use SendNumArgsReg
because it is only live in sends of arity >= (NumSendTrampolines - 1). */
- /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg)
{
assert((numRegArgs()) < (NumSendTrampolines - 1));
if (numArgs <= 2) {
@@ -5483,7 +5483,7 @@
but XCHG is slow. */
/* begin MoveMw:r:R: */
- genoperandoperandoperand(MoveMwrR, 0, SPReg, SendNumArgsReg);
+ genoperandoperandoperand(MoveMwrR, 0, SPReg, scratchReg);
/* begin MoveR:Mw:r: */
genoperandoperandoperand(MoveRMwr, ReceiverResultReg, 0, SPReg);
if (numArgs > 0) {
@@ -5495,10 +5495,10 @@
}
}
/* begin PushR: */
- genoperand(PushR, SendNumArgsReg);
+ genoperand(PushR, scratchReg);
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
/* CogIA32Compiler>>#genRemoveNArgsFromStack: */
@@ -9865,7 +9865,8 @@
genoperand(JumpR, TempReg);
jmpTarget(jumpMiss, gLabel());
genEnsureObjInRegNotForwardedscratchRegupdatingMwr(ReceiverResultReg, TempReg, FoxMFReceiver, FPReg);
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, TempReg);
+
return genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 2, SendNumArgsReg, ReceiverResultReg, null, null, 0, 1, ReceiverResultReg, 1);
}
@@ -20585,7 +20586,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -21359,7 +21360,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -22022,7 +22023,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 2
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -23036,7 +23037,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 2))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -23183,7 +23184,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 3, regOrConst0, regOrConst1, regOrConst2, null, 0, 1, null, 1);
return startAddress;
}
@@ -23201,7 +23202,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Mon Jun 1 11:53:22 PDT 2015
+ Mon Jun 1 17:18:50 PDT 2015
Modified: branches/Cog/platforms/Mac OS/vm/sqMacMain.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacMain.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/platforms/Mac OS/vm/sqMacMain.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -291,7 +291,7 @@
printf("blocking e.g. to allow attaching debugger\n");
printf("pid: %d pwd: %s vm:%s\n",
- (int)getpid(), argVec[0], getcwd(pwd,PATH_MAX+1));
+ (int)getpid(), getcwd(pwd,PATH_MAX+1), argVec[0]);
while (1) {
while_away_the_hours.tv_sec = 3600;
nanosleep(&while_away_the_hours, 0);
Modified: branches/Cog/platforms/unix/vm/sqUnixMain.c
===================================================================
--- branches/Cog/platforms/unix/vm/sqUnixMain.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/platforms/unix/vm/sqUnixMain.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -939,7 +939,7 @@
printf("blocking e.g. to allow attaching debugger\n");
printf("pid: %d pwd: %s vm:%s\n",
- (int)getpid(), argVec[0], getcwd(pwd,MAXPATHLEN+1));
+ (int)getpid(), getcwd(pwd,MAXPATHLEN+1), argVec[0]);
while (1) {
while_away_the_hours.tv_sec = 3600;
nanosleep(&while_away_the_hours, 0);
Modified: branches/Cog/spursistasrc/vm/cogit.h
===================================================================
--- branches/Cog/spursistasrc/vm/cogit.h 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/spursistasrc/vm/cogit.h 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
Modified: branches/Cog/spursistasrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/spursistasrc/vm/cogitARMv5.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/spursistasrc/vm/cogitARMv5.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -461,7 +461,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static AbstractInstruction * genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static AbstractInstruction * genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -6264,9 +6264,9 @@
NOTA BENE: we do NOT push the return address here, which means it must be
dealt with later. */
- /* CogARMCompiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogARMCompiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored)
{
if (numArgs <= 2) {
assert((numRegArgs()) <= 2);
@@ -6281,7 +6281,7 @@
}
}
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
@@ -9822,7 +9822,7 @@
{
sqInt classIndex;
sqInt i;
- sqInt pc;
+ usqInt pc;
pc = (((((usqInt)cPIC)) + firstCPICCaseOffset) + cPICCaseSize) - (jumpLongConditionalByteSize(backEnd));
for (i = 2; i <= ((cPIC->cPICNumCases)); i += 1) {
@@ -22828,7 +22828,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -23600,7 +23600,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -24152,7 +24152,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 2
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -25195,7 +25195,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 2))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -25297,7 +25297,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Modified: branches/Cog/spursistasrc/vm/cogitIA32.c
===================================================================
--- branches/Cog/spursistasrc/vm/cogitIA32.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/spursistasrc/vm/cogitIA32.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "SistaStackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -438,7 +438,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static sqInt genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static sqInt genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -5458,7 +5458,7 @@
/* Ensure that the register args are pushed before the retpc for arity <=
self numRegArgs. This
- won't be as clumsy on a RISC. But putting the receiver and args above the
+ isn't as clumsy on a RISC. But putting the receiver and args above the
return address
means the CoInterpreter has a single machine-code frame format which saves
us a lot of work.
@@ -5470,9 +5470,9 @@
use SendNumArgsReg
because it is only live in sends of arity >= (NumSendTrampolines - 1). */
- /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg)
{
assert((numRegArgs()) < (NumSendTrampolines - 1));
if (numArgs <= 2) {
@@ -5483,7 +5483,7 @@
but XCHG is slow. */
/* begin MoveMw:r:R: */
- genoperandoperandoperand(MoveMwrR, 0, SPReg, SendNumArgsReg);
+ genoperandoperandoperand(MoveMwrR, 0, SPReg, scratchReg);
/* begin MoveR:Mw:r: */
genoperandoperandoperand(MoveRMwr, ReceiverResultReg, 0, SPReg);
if (numArgs > 0) {
@@ -5495,10 +5495,10 @@
}
}
/* begin PushR: */
- genoperand(PushR, SendNumArgsReg);
+ genoperand(PushR, scratchReg);
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
/* CogIA32Compiler>>#genRemoveNArgsFromStack: */
@@ -21583,7 +21583,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -22357,7 +22357,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -22906,7 +22906,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 2
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -23949,7 +23949,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 2))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -24051,7 +24051,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Modified: branches/Cog/spursrc/vm/cogit.h
===================================================================
--- branches/Cog/spursrc/vm/cogit.h 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/spursrc/vm/cogit.h 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
Modified: branches/Cog/spursrc/vm/cogitARMv5.c
===================================================================
--- branches/Cog/spursrc/vm/cogitARMv5.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/spursrc/vm/cogitARMv5.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -458,7 +458,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static AbstractInstruction * genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static AbstractInstruction * genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -5939,9 +5939,9 @@
NOTA BENE: we do NOT push the return address here, which means it must be
dealt with later. */
- /* CogARMCompiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogARMCompiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored)
{
if (numArgs <= 2) {
assert((numRegArgs()) <= 2);
@@ -5956,7 +5956,7 @@
}
}
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
@@ -19661,7 +19661,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -20433,7 +20433,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -21010,7 +21010,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 2
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -21985,7 +21985,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 2))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -22076,7 +22076,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Modified: branches/Cog/spursrc/vm/cogitIA32.c
===================================================================
--- branches/Cog/spursrc/vm/cogitIA32.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/spursrc/vm/cogitIA32.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -435,7 +435,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static sqInt genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static sqInt genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -5133,7 +5133,7 @@
/* Ensure that the register args are pushed before the retpc for arity <=
self numRegArgs. This
- won't be as clumsy on a RISC. But putting the receiver and args above the
+ isn't as clumsy on a RISC. But putting the receiver and args above the
return address
means the CoInterpreter has a single machine-code frame format which saves
us a lot of work.
@@ -5145,9 +5145,9 @@
use SendNumArgsReg
because it is only live in sends of arity >= (NumSendTrampolines - 1). */
- /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg)
{
assert((numRegArgs()) < (NumSendTrampolines - 1));
if (numArgs <= 2) {
@@ -5158,7 +5158,7 @@
but XCHG is slow. */
/* begin MoveMw:r:R: */
- genoperandoperandoperand(MoveMwrR, 0, SPReg, SendNumArgsReg);
+ genoperandoperandoperand(MoveMwrR, 0, SPReg, scratchReg);
/* begin MoveR:Mw:r: */
genoperandoperandoperand(MoveRMwr, ReceiverResultReg, 0, SPReg);
if (numArgs > 0) {
@@ -5170,10 +5170,10 @@
}
}
/* begin PushR: */
- genoperand(PushR, SendNumArgsReg);
+ genoperand(PushR, scratchReg);
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
/* CogIA32Compiler>>#genRemoveNArgsFromStack: */
@@ -18418,7 +18418,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -19192,7 +19192,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -19766,7 +19766,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 2
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -20741,7 +20741,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 2))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -20832,7 +20832,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Modified: branches/Cog/src/vm/cogit.h
===================================================================
--- branches/Cog/src/vm/cogit.h 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/src/vm/cogit.h 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
Modified: branches/Cog/src/vm/cogitARMv5.c
===================================================================
--- branches/Cog/src/vm/cogitARMv5.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/src/vm/cogitARMv5.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -463,7 +463,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static AbstractInstruction * genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static AbstractInstruction * genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -5903,9 +5903,9 @@
NOTA BENE: we do NOT push the return address here, which means it must be
dealt with later. */
- /* CogARMCompiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogARMCompiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt ignored)
{
if (numArgs <= 1) {
assert((numRegArgs()) <= 2);
@@ -5920,7 +5920,7 @@
}
}
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
@@ -17930,7 +17930,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -18230,7 +18230,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -18786,7 +18786,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 1
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -19763,7 +19763,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 1))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -19854,7 +19854,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
Modified: branches/Cog/src/vm/cogitIA32.c
===================================================================
--- branches/Cog/src/vm/cogitIA32.c 2015-06-01 18:53:32 UTC (rev 3364)
+++ branches/Cog/src/vm/cogitIA32.c 2015-06-02 00:20:23 UTC (rev 3365)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ CCodeGenerator VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e
+ StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1331 uuid: 2da6f9fc-7921-4c8b-8c78-dd47f9ddd76e " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1332 uuid: 528336b3-25ab-41f7-b788-2b9155e5d980 " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -439,7 +439,7 @@
static sqInt genPassConstasArgument(AbstractInstruction * self_in_genPassConstasArgument, sqInt constant, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static sqInt genPassRegasArgument(AbstractInstruction * self_in_genPassRegasArgument, sqInt abstractRegister, sqInt zeroRelativeArgIndex) NoDbgRegParms;
static AbstractInstruction * genPushRegisterArgsForAbortMissNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForAbortMissNumArgs, sqInt numArgs) NoDbgRegParms;
-static AbstractInstruction * genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs) NoDbgRegParms;
+static AbstractInstruction * genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg) NoDbgRegParms;
static sqInt genRemoveNArgsFromStack(AbstractInstruction * self_in_genRemoveNArgsFromStack, sqInt n) NoDbgRegParms;
static sqInt genRestoreRegs(AbstractInstruction * self_in_genRestoreRegs) NoDbgRegParms;
static sqInt genRestoreRegsExcept(AbstractInstruction * self_in_genRestoreRegsExcept, sqInt abstractReg) NoDbgRegParms;
@@ -5096,7 +5096,7 @@
/* Ensure that the register args are pushed before the retpc for arity <=
self numRegArgs. This
- won't be as clumsy on a RISC. But putting the receiver and args above the
+ isn't as clumsy on a RISC. But putting the receiver and args above the
return address
means the CoInterpreter has a single machine-code frame format which saves
us a lot of work.
@@ -5108,9 +5108,9 @@
use SendNumArgsReg
because it is only live in sends of arity >= (NumSendTrampolines - 1). */
- /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs: */
+ /* CogIA32Compiler>>#genPushRegisterArgsForNumArgs:scratchReg: */
static AbstractInstruction *
-genPushRegisterArgsForNumArgs(AbstractInstruction * self_in_genPushRegisterArgsForNumArgs, sqInt numArgs)
+genPushRegisterArgsForNumArgsscratchReg(AbstractInstruction * self_in_genPushRegisterArgsForNumArgsscratchReg, sqInt numArgs, sqInt scratchReg)
{
assert((numRegArgs()) < (NumSendTrampolines - 1));
if (numArgs <= 1) {
@@ -5121,7 +5121,7 @@
but XCHG is slow. */
/* begin MoveMw:r:R: */
- genoperandoperandoperand(MoveMwrR, 0, SPReg, SendNumArgsReg);
+ genoperandoperandoperand(MoveMwrR, 0, SPReg, scratchReg);
/* begin MoveR:Mw:r: */
genoperandoperandoperand(MoveRMwr, ReceiverResultReg, 0, SPReg);
if (numArgs > 0) {
@@ -5133,10 +5133,10 @@
}
}
/* begin PushR: */
- genoperand(PushR, SendNumArgsReg);
+ genoperand(PushR, scratchReg);
}
- return self_in_genPushRegisterArgsForNumArgs;
+ return self_in_genPushRegisterArgsForNumArgsscratchReg;
}
/* CogIA32Compiler>>#genRemoveNArgsFromStack: */
@@ -16701,7 +16701,7 @@
/* begin JumpZero: */
genoperand(JumpZero, ((sqInt)itsAHit));
jmpTarget(jumpSelectorMiss, gLabel());
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genSmalltalkToCStackSwitch(1);
addDependent(methodLabel, annotateAbsolutePCRef(gMoveCwR(((sqInt)methodLabel), SendNumArgsReg)));
compileCallFornumArgsargargargargresultRegsaveRegs(ceSendFromInLineCacheMiss, 1, SendNumArgsReg, null, null, null, null, 0);
@@ -17003,7 +17003,7 @@
if (!(preOpCheckOrNil == null)) {
jmpTarget(jumpFailCheck, getJmpTarget(jumpFailClass));
}
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
/* begin Jump: */
jumpFailClass = genoperand(Jump, ((sqInt)0));
jmpTarget(jumpImmediate, gLabel());
@@ -17556,7 +17556,7 @@
/* N.B. a closed PIC jumps to the miss routine, not calls it, so there is only one retpc on the stack. */
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(ceCPICMissreceiver, trampolineNamenumArgs("cePICMiss", (numArgs <= 1
? numArgs
: -1)), 2, ClassReg, ReceiverResultReg, null, null, 0, 1, null, 1);
@@ -18533,7 +18533,7 @@
{
if (!(regArgsHaveBeenPushed
|| (methodOrBlockNumArgs > 1))) {
- genPushRegisterArgsForNumArgs(backEnd, methodOrBlockNumArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, methodOrBlockNumArgs, SendNumArgsReg);
regArgsHaveBeenPushed = 1;
}
}
@@ -18624,7 +18624,7 @@
startAddress = methodZoneBase;
opcodeIndex = 0;
- genPushRegisterArgsForNumArgs(backEnd, numArgs);
+ genPushRegisterArgsForNumArgsscratchReg(backEnd, numArgs, SendNumArgsReg);
genTrampolineForcallednumArgsargargargargsaveRegspushLinkRegresultRegappendOpcodes(aRoutine, aString, 4, regOrConst0, regOrConst1, regOrConst2, regOrConst3, 0, 1, null, 1);
return startAddress;
}
More information about the Vm-dev
mailing list