Changes: Stefan Ring
Christian Thalinger
- $Id: reg.inc 1456 2004-11-05 14:33:14Z twisti $
+ $Id: reg.inc 1466 2004-11-08 11:24:50Z twisti $
*/
}
}
- rd->argintregs = MNEW(s4, rd->intreg_argnum);
- rd->tmpintregs = MNEW(s4, rd->tmpintregcnt);
- rd->savintregs = MNEW(s4, rd->savintregcnt);
- rd->freeargintregs = MNEW(s4, rd->intreg_argnum);
- rd->freetmpintregs = MNEW(s4, rd->tmpintregcnt);
- rd->freesavintregs = MNEW(s4, rd->savintregcnt);
+ rd->argintregs = DMNEW(s4, rd->intreg_argnum);
+ rd->tmpintregs = DMNEW(s4, rd->tmpintregcnt);
+ rd->savintregs = DMNEW(s4, rd->savintregcnt);
+ rd->freeargintregs = DMNEW(s4, rd->intreg_argnum);
+ rd->freetmpintregs = DMNEW(s4, rd->tmpintregcnt);
+ rd->freesavintregs = DMNEW(s4, rd->savintregcnt);
#ifdef USETWOREGS
- rd->secondregs = MNEW(s4, rd->intregsnum);
+ rd->secondregs = DMNEW(s4, rd->intregsnum);
#endif
rd->intreg_argnum = 0;
}
}
-#if defined(__I386__)
- /*
- this assumes that we have 3 tmp regs (%ecx, %edx, %ebx)
- sort to [ %ebx, %edx, %ecx ]
- */
- i = rd->tmpintregs[0];
- rd->tmpintregs[0] = rd->tmpintregs[2];
- rd->tmpintregs[2] = i;
-#endif
-
#if defined(__X86_64__)
/*
* on x86_64 the argument registers are not in ascending order
}
}
- rd->argfltregs = MNEW(s4, rd->fltreg_argnum);
- rd->tmpfltregs = MNEW(s4, rd->tmpfltregcnt);
- rd->savfltregs = MNEW(s4, rd->savfltregcnt);
- rd->freeargfltregs = MNEW(s4, rd->fltreg_argnum);
- rd->freetmpfltregs = MNEW(s4, rd->tmpfltregcnt);
- rd->freesavfltregs = MNEW(s4, rd->savfltregcnt);
+ rd->argfltregs = DMNEW(s4, rd->fltreg_argnum);
+ rd->tmpfltregs = DMNEW(s4, rd->tmpfltregcnt);
+ rd->savfltregs = DMNEW(s4, rd->savfltregcnt);
+ rd->freeargfltregs = DMNEW(s4, rd->fltreg_argnum);
+ rd->freetmpfltregs = DMNEW(s4, rd->tmpfltregcnt);
+ rd->freesavfltregs = DMNEW(s4, rd->savfltregcnt);
rd->fltreg_argnum = 0;
rd->argfltreguse = 0;
}
- rd->freemem = MNEW(s4, id->cummaxstack);
- rd->locals = MNEW(varinfo5, id->cumlocals);
- rd->interfaces = MNEW(varinfo5, id->cummaxstack);
+ rd->freemem = DMNEW(s4, id->cummaxstack);
+ rd->locals = DMNEW(varinfo5, id->cumlocals);
+ rd->interfaces = DMNEW(varinfo5, id->cummaxstack);
for (v = rd->locals, i = id->cumlocals; i > 0; v++, i--) {
v[0][TYPE_INT].type = -1;
void reg_free(methodinfo *m, registerdata *rd)
{
- if (rd->argintregs) MFREE(rd->argintregs, s4, rd->intreg_argnum);
- if (rd->argfltregs) MFREE(rd->argfltregs, s4, rd->fltreg_argnum);
- if (rd->tmpintregs) MFREE(rd->tmpintregs, s4, rd->tmpintregcnt);
- if (rd->savintregs) MFREE(rd->savintregs, s4, rd->savintregcnt);
- if (rd->tmpfltregs) MFREE(rd->tmpfltregs, s4, rd->tmpfltregcnt);
- if (rd->savfltregs) MFREE(rd->savfltregs, s4, rd->savfltregcnt);
-
- if (rd->freeargintregs) MFREE(rd->freeargintregs, s4, rd->intreg_argnum);
- if (rd->freeargfltregs) MFREE(rd->freeargfltregs, s4, rd->fltreg_argnum);
- if (rd->freetmpintregs) MFREE(rd->freetmpintregs, s4, rd->tmpintregcnt);
- if (rd->freesavintregs) MFREE(rd->freesavintregs, s4, rd->savintregcnt);
- if (rd->freetmpfltregs) MFREE(rd->freetmpfltregs, s4, rd->tmpfltregcnt);
- if (rd->freesavfltregs) MFREE(rd->freesavfltregs, s4, rd->savfltregcnt);
-
-#ifdef USETWOREGS
- if (rd->secondregs) MFREE(rd->secondregs, s4, rd->intregsnum);
-#endif
-
- if (rd->freemem) MFREE(rd->freemem, s4, m->maxstack);
- if (rd->locals) MFREE(rd->locals, varinfo5, m->maxlocals);
- if (rd->interfaces) MFREE(rd->interfaces, varinfo5, m->maxstack);
+ /* void */
}
void regalloc(methodinfo *m, codegendata *cd, registerdata *rd)
{
-#if defined(__I386__)
- /* remove %ecx and/or %edx from tmpintregs */
- int origtmpintregcnt = m->registerdata->tmpintregcnt;
- if (method_uses_ecx) m->registerdata->tmpintregcnt--;
- if (method_uses_edx) m->registerdata->tmpintregcnt--;
-#endif
-
interface_regalloc(m, cd, rd);
allocate_scratch_registers(m, rd);
local_regalloc(m, cd, rd);
-
-#if defined(__I386__)
- m->registerdata->tmpintregcnt = origtmpintregcnt;
-#endif
}