Esempio n. 1
0
/*
 * Move args to registers and emit expressions bottom-up.
 */
static void
fixargs(NODE *p)
{
	NODE *r;

	if (p->n_op == CM) {
		fixargs(p->n_left);
		r = p->n_right;
		if (r->n_op == STARG)
			regnum = 9; /* end of register list */
		else if (regnum + szty(r->n_type) > 8)
			p->n_right = block(FUNARG, r, NIL, r->n_type,
			    r->n_df, r->n_sue);
		else
			p->n_right = buildtree(ASSIGN, mkreg(r, regnum), r);
	} else {
		if (p->n_op == STARG) {
			regnum = 9; /* end of register list */
		} else {
			r = talloc();
			*r = *p;
			r = buildtree(ASSIGN, mkreg(r, regnum), r);
			*p = *r;
			nfree(r);
		}
		r = p;
	}
	regnum += szty(r->n_type);
}
Esempio n. 2
0
static void progbeg(int argc, char *argv[])
{
    int i;

    {
        union
        {
            char c;
            int i;
        } u;
        u.i = 0;
        u.c = 1;
        swap = ((int) (u.i == 1)) != IR->little_endian;
    }
    parseflags(argc, argv);

    //put both ints and floats into IREG set
    reg[RGA] = mkreg("A", RGA, 1, IREG);
    reg[RGB] = mkreg("B", RGB, 1, IREG);
    reg[RGC] = mkreg("C", RGC, 1, IREG);
    reg[RGX] = mkreg("X", RGX, 1, IREG);
    reg[RGY] = mkreg("Y", RGY, 1, IREG);
    reg[RGZ] = mkreg("Z", RGZ, 1, IREG);
    reg[RGI] = mkreg("I", RGI, 1, IREG);

    regw = mkwildcard(reg);

    tmask[IREG] = TMP_REG;
    vmask[IREG] = VAR_REG;
    tmask[FREG] = 0;
    vmask[FREG] = 0;

    print(";\n;DCPU-16 ASM Generated by LCC 4.2 (dcpu16-lcc v0.2)\n;\n");
    print("JSR _global_main\n");
}