Example #1
0
void genif(SNODE *stmt)
/*
 *      generate code to evaluate an if statement.
 */
{
    int lab1, lab2;
	int areg, sreg;
    lab1 = nextlabel++; /* else label */
    lab2 = nextlabel++; /* exit label */
    InitRegs(); /* clear temps */
	ChooseRegs(&areg, &sreg);
    falsejp(stmt->exp, areg, sreg, lab1);
    genstmt(stmt->s1);
    if (stmt->s2 != 0)
     /* else part exists */
    {
        gen_codes(op_jmp, 0, make_label(lab2), 0);
        gen_label(lab1);
        genstmt(stmt->s2);
        gen_label(lab2);
    }
    else
     /* no else code */
        gen_label(lab1);
}
Example #2
0
void genselect(STATEMENT *stmt, SYMBOL *funcsp, BOOL jmptrue)
{
    if (stmt->altlabel)
    {
//		gen_label(stmt->altlabel);
//		intermed_tail->dc.opcode = i_skipcompare;
    }
    if (jmptrue)
        truejp(stmt->select, funcsp, stmt->label);
    else
        falsejp(stmt->select, funcsp, stmt->label);
    if (stmt->altlabel)
    {
//		gen_label(stmt->altlabel);
//		intermed_tail->dc.opcode = i_skipcompare;
    }
}
Example #3
0
void genif(SNODE *stmt)
/*
 *      generate code to evaluate an if statement.
 */
{       int     lab1, lab2;
        lab1 = nextlabel++;     /* else label */
        lab2 = nextlabel++;     /* exit label */
        initstack();            /* clear temps */
        falsejp(stmt->exp,lab1);
        genstmt(stmt->s1);
        if( stmt->s2 != 0 )             /* else part exists */
                {
                gen_code(op_jmp,0,make_label(lab2),0);
                gen_label(lab1);
                genstmt(stmt->s2);
                gen_label(lab2);
                }
        else                            /* no else code */
                gen_label(lab1);
}