rendered paste bodyvoid generateFunctionCall(tree *t, int isStatment)
{
unsigned int numSaves, i;
const char *savedRegs[32];
static const char *regnames[] = {
"$0" , "$1" , "$2" , "$3" , "$4" , "$5" , "$6" , "$7" , "$8" , "$9" , "$10",
"$11", "$12", "$13", "$14", "$15", "$16", "$17", "$18", "$19", "$20", "$21",
"$22", "$23", "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31"
};
memset(&savedRegs, 0, sizeof(savedRegs));
if(numLocVars == -1) {
fprintf(stderr, "numLocVars is -1\n");
}
if(numParams == -1) {
fprintf(stderr, "numParams is -1\n");
}
if(exprdepth == -1) {
fprintf(stderr, "exprdepth is -1\n");
}
/* Store registers */
numSaves = 0;
if(isStatment) {
savedRegs[numSaves] = "$0";
numSaves++;
} else {
switch(exprdepth)
{
case 11:
savedRegs[numSaves] = "$24";
numSaves++;
case 10:
savedRegs[numSaves] = "$23";
numSaves++;
case 9:
savedRegs[numSaves] = "$22";
numSaves++;
case 8:
savedRegs[numSaves] = "$8";
numSaves++;
case 7:
savedRegs[numSaves] = "$7";
numSaves++;
case 6:
savedRegs[numSaves] = "$6";
numSaves++;
case 5:
savedRegs[numSaves] = "$5";
numSaves++;
case 4:
savedRegs[numSaves] = "$4";
numSaves++;
case 3:
savedRegs[numSaves] = "$3";
numSaves++;
case 2:
savedRegs[numSaves] = "$2";
numSaves++;
case 1:
savedRegs[numSaves] = "$1";
numSaves++;
case 0:
if(strcmp(t->reg, "$0") != 0) {
savedRegs[numSaves] = "$0";
numSaves++;
}
break;
default:
fprintf(stderr, "Unexpected expression depth %d\n", exprdepth);
}
}
for(i = 0; i < numLocVars; i++)
{
if((i + exprdepth) < 8)
{
savedRegs[numSaves] = regnames[i + exprdepth + 1];
}
else if(i + exprdepth < 11)
{
savedRegs[numSaves] = regnames[22 - 8 + 1 + i + exprdepth];
}
else
{
fprintf(stderr, "Unhandled register save situation\n");
}
numSaves++;
}
for(i = 0; i < numParams; i++)
{
savedRegs[numSaves] = regnames[16 + i];
numSaves++;
}