Preserve stack pointer after VirtualMachine::Call()

This commit is contained in:
Simon Robertshaw 2012-09-09 15:22:54 +01:00
parent 7b05862cfe
commit d5ae22115d

View File

@ -198,11 +198,11 @@ namespace vm
int VirtualMachine::Call(int address) int VirtualMachine::Call(int address)
{ {
word w; word w;
int i, argCount = 13; int i, argCount = 0;
/* Set up call. */ /* Set up call. */
opPUSH(w); //crumb("Starting with PC=%d, DP=%d, RP=%d to %d\n", PC, DP, RP, address);
crumb("Starting with PC=%d, DP=%d, RP=%d to %d\n", PC, DP, RP, address); opPUSH(w); //wtf is the point of this...
w.int4 = (argCount + 2) * sizeof(word); w.int4 = (argCount + 2) * sizeof(word);
opENTER(w); opENTER(w);
i = 8; i = 8;
@ -222,11 +222,14 @@ namespace vm
w.int4 = address; w.int4 = address;
Push(w); Push(w);
opCALL(w); opCALL(w);
printf("Upon running PC=%d, DP=%d, RP=%d\n", PC, DP, RP); //printf("Upon running PC=%d, DP=%d, RP=%d\n", PC, DP, RP);
Run(); Run();
printf("At finish PC=%d, DP=%d, RP=%d\n", PC, DP, RP); //printf("At finish PC=%d, DP=%d, RP=%d\n", PC, DP, RP);
w.int4 = (argCount + 2) * sizeof(word); w.int4 = (argCount + 2) * sizeof(word);
opLEAVE(w); opLEAVE(w);
opPOP(w); //To counter that stupid opPUSH at the start
PC = romSize + 1;
//crumb("Ending with PC=%d, DP=%d, RP=%d\n", PC, DP, RP);
return 0; return 0;
} }