All pastes #558526 Raw Edit

Stuff

public text v1 · immutable
·published 2007-06-11 12:08 UTC
rendered paste body
void 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++;
    }