Changes: Stefan Ring
Christian Thalinger
- Christian Ullrich
+ Christian Ullrich
- $Id: reg.inc 2778 2005-06-22 10:02:54Z christian $
+ $Id: reg.inc 2938 2005-07-08 15:09:14Z twisti $
*/
rd->interfaces[s][intalloc].flags
& INMEMORY;
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
- if (!(v->flags & INMEMORY))
- v->regoff = GET_FIRST_REG(
+ if (!(v->flags & INMEMORY)
+ && IS_2_WORD_TYPE(intalloc))
+ v->regoff = GET_LOW_REG(
rd->interfaces[s][intalloc].regoff);
else
#endif
} else
/* #endif *//* !defined(HAS_4BYTE_STACKSLOT) */
if (!m->isleafmethod &&
- (rd->argintreguse + intregsneeded < INT_ARG_CNT)) {
- v->regoff =
- rd->argintregs[rd->argintreguse];
+ (rd->argintreguse
+ + intregsneeded < INT_ARG_CNT)) {
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
+ v->regoff=PACK_REGS(
+ rd->argintregs[rd->argintreguse],
rd->argintregs[rd->argintreguse + 1]);
+ else
#endif
+ v->regoff =
+ rd->argintregs[rd->argintreguse];
rd->argintreguse += intregsneeded + 1;
}
else if (rd->tmpintreguse > intregsneeded) {
rd->tmpintreguse -= intregsneeded + 1;
- v->regoff =
- rd->tmpintregs[rd->tmpintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
+ v->regoff=PACK_REGS(
+ rd->tmpintregs[rd->tmpintreguse],
rd->tmpintregs[rd->tmpintreguse + 1]);
+ else
#endif
+ v->regoff =
+ rd->tmpintregs[rd->tmpintreguse];
}
else if (rd->savintreguse > intregsneeded) {
rd->savintreguse -= intregsneeded + 1;
rd->savintregs[rd->savintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
- rd->savintregs[rd->savintreguse + 1]);
+ v->regoff=PACK_REGS(
+ rd->savintregs[rd->savintreguse],
+ rd->savintregs[rd->savintreguse + 1]);
+ else
#endif
+ v->regoff =
+ rd->savintregs[rd->savintreguse];
}
else {
v->flags |= INMEMORY;
{
/* #if !defined(HAS_4BYTE_STACKSLOT) */
if (intalloc >= 0) {
- v->flags |= rd->interfaces[s][intalloc].flags
- & INMEMORY;
+ v->flags |=
+ rd->interfaces[s][intalloc].flags & INMEMORY;
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
- if (!(v->flags & INMEMORY))
+ if (!(v->flags & INMEMORY)
+ && IS_2_WORD_TYPE(intalloc))
v->regoff =
- GET_FIRST_REG(rd->interfaces[s][intalloc].regoff);
+ GET_LOW_REG(
+ rd->interfaces[s][intalloc].regoff);
else
#endif
v->regoff =
{
if (rd->savintreguse > intregsneeded) {
rd->savintreguse -= intregsneeded + 1;
- v->regoff =
- rd->savintregs[rd->savintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
- rd->savintregs[rd->savintreguse + 1]);
+ v->regoff = PACK_REGS(
+ rd->savintregs[rd->savintreguse],
+ rd->savintregs[rd->savintreguse + 1]);
+ else
#endif
+ v->regoff =
+ rd->savintregs[rd->savintreguse];
} else {
v->flags |= INMEMORY;
v->regoff = rd->memuse;
int intregsneeded = 0;
int memneeded = 0;
int typeloop[] = { TYPE_LNG, TYPE_DBL, TYPE_INT, TYPE_FLT, TYPE_ADR };
-/* int fargcnt, iargcnt; */
+ int fargcnt, iargcnt;
#ifdef HAS_ADDRESS_REGISTER_FILE
int aargcnt;
#endif
if (m->isleafmethod) {
methoddesc *md = m->parseddesc;
-/* iargcnt = md->argintreguse; */
-/* fargcnt = md->argfltreguse; */
+ iargcnt = md->argintreguse;
+ fargcnt = md->argfltreguse;
#ifdef HAS_ADDRESS_REGISTER_FILE
aargcnt = md->argadrreguse;
#endif
v->regoff = rd->savadrregs[--rd->savadrreguse];
}
/* use unused argument registers as local registers */
-/* else if ((p >= md->paramcount) && */
-/* (aargcnt < ADR_ARG_CNT)) { */
-/* v->flags = 0; */
-/* v->regoff = rd->argadrregs[aargcnt++]; */
-/* } */
+ else if ((p >= md->paramcount) &&
+ (aargcnt < ADR_ARG_CNT)) {
+ v->flags = 0;
+ v->regoff = rd->argadrregs[aargcnt++];
+ }
else {
v->flags |= INMEMORY;
v->regoff = rd->memuse++;
v->regoff = rd->savfltregs[--rd->savfltreguse];
}
/* use unused argument registers as local registers */
-/* else if ((p >= m->paramcount) && */
-/* (fargcnt < rd->fltreg_argnum)) { */
-/* v->flags = 0; */
-/* v->regoff = rd->argfltregs[fargcnt]; */
-/* fargcnt++; */
-/* } */
+ else if ((p >= m->paramcount) &&
+ (fargcnt < FLT_ARG_CNT)) {
+ v->flags = 0;
+ v->regoff = rd->argfltregs[fargcnt];
+ fargcnt++;
+ }
else {
v->flags = INMEMORY;
v->regoff = rd->memuse;
v->flags = INMEMORY;
v->regoff = rd->memuse;
rd->memuse += memneeded + 1;
- } else {
+ } else
#endif
+ {
if (intalloc >= 0) {
v->flags = rd->locals[s][intalloc].flags;
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
- if (!(v->flags & INMEMORY))
- v->regoff =
- GET_FIRST_REG(
+ if (!(v->flags & INMEMORY)
+ && IS_2_WORD_TYPE(intalloc))
+ v->regoff = GET_LOW_REG(
rd->locals[s][intalloc].regoff);
else
#endif
else if ((p < md->paramcount) &&
!md->params[p].inmemory) {
v->flags = 0;
- v->regoff =
- rd->argintregs[md->params[p].regoff];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (IS_2_WORD_TYPE(t))
-/* For ARM: - if md->params[p].regoff == R4, prevent here that SECOND_REG */
-/* tries to set R5 */
- SET_SECOND_REG( v->regoff, rd->argintregs[
- md->params[p].regoff + 1]);
+/* For ARM: - if GET_LOW_REG(md->params[p].regoff) == R4, prevent here that */
+/* rd->argintregs[GET_HIGH_REG(md->...)) is used! */
+ v->regoff = PACK_REGS(
+ rd->argintregs[GET_LOW_REG(md->params[p].regoff)],
+ rd->argintregs[GET_HIGH_REG(md->params[p].regoff)]);
+ else
#endif
+ v->regoff =
+ rd->argintregs[md->params[p].regoff];
}
else if (rd->tmpintreguse > intregsneeded) {
rd->tmpintreguse -= intregsneeded + 1;
v->flags = 0;
- v->regoff = rd->tmpintregs[rd->tmpintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
- rd->tmpintregs[rd->tmpintreguse + 1]);
+ v->regoff = PACK_REGS(
+ rd->tmpintregs[rd->tmpintreguse],
+ rd->tmpintregs[rd->tmpintreguse + 1]);
+ else
#endif
+ v->regoff =
+ rd->tmpintregs[rd->tmpintreguse];
}
else if (rd->savintreguse > intregsneeded) {
rd->savintreguse -= intregsneeded + 1;
v->flags = 0;
- v->regoff = rd->savintregs[rd->savintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
- rd->savintregs[rd->savintreguse + 1]);
+ v->regoff = PACK_REGS(
+ rd->savintregs[rd->savintreguse],
+ rd->savintregs[rd->savintreguse + 1]);
+ else
#endif
+ v->regoff =rd->savintregs[rd->savintreguse];
}
/*
* use unused argument registers as local registers
*/
-/* else if ((p >= m->paramcount) && */
-/* (iargcnt < rd->intreg_argnum)) { */
-/* v->flags = 0; */
-/* v->regoff = rd->argintregs[iargcnt]; */
-/* iargcnt++; */
-/* } */
+ else if ((p >= m->paramcount) &&
+ (iargcnt < INT_ARG_CNT)) {
+ v->flags = 0;
+ v->regoff = rd->argintregs[iargcnt];
+ iargcnt++;
+ }
else {
v->flags = INMEMORY;
v->regoff = rd->memuse;
rd->memuse += memneeded + 1;
}
-#if defined(__I386__)
}
-#endif
intalloc = t;
}
#ifdef HAS_ADDRESS_REGISTER_FILE
if (intalloc >= 0) {
v->flags = rd->locals[s][intalloc].flags;
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
- if (!(v->flags & INMEMORY))
- v->regoff =
- GET_FIRST_REG(
+ if (!(v->flags & INMEMORY)
+ && IS_2_WORD_TYPE(intalloc))
+ v->regoff = GET_LOW_REG(
rd->locals[s][intalloc].regoff);
else
#endif
else if (rd->savintreguse > intregsneeded) {
rd->savintreguse -= intregsneeded+1;
v->flags = 0;
- v->regoff = rd->savintregs[rd->savintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( v->regoff,
- rd->savintregs[rd->savintreguse + 1]);
+ v->regoff = PACK_REGS(
+ rd->savintregs[rd->savintreguse],
+ rd->savintregs[rd->savintreguse + 1]);
+ else
#endif
+ v->regoff =rd->savintregs[rd->savintreguse];
}
else {
v->flags = INMEMORY;
rd->freeargadrtop = 0;
#endif
-#if 0
if (m->isleafmethod) {
/* Don't use not used Argument Registers in Leafmethods -> they could */
/* already be in use for Locals passed as parameter to this Method */
-#endif
rd->argintreguse = INT_ARG_CNT;
rd->argfltreguse = FLT_ARG_CNT;
#ifdef HAS_ADDRESS_REGISTER_FILE
rd->argadrreguse = ADR_ARG_CNT;
#endif
-#if 0
}
-#endif
}
{
if (rd->freesavinttop > intregsneeded) {
rd->freesavinttop -= intregsneeded + 1;
- s->regoff = rd->freesavintregs[rd->freesavinttop];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
- if (intregsneeded)
- SET_SECOND_REG( s->regoff,
+ if (intregsneeded)
+ s->regoff = PACK_REGS(
+ rd->freesavintregs[rd->freesavinttop],
rd->freesavintregs[rd->freesavinttop + 1]);
+ else
#endif
+ s->regoff =
+ rd->freesavintregs[rd->freesavinttop];
return;
} else if (rd->savintreguse > intregsneeded) {
rd->savintreguse -= intregsneeded + 1;
- s->regoff = rd->savintregs[rd->savintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
- if (intregsneeded)
- SET_SECOND_REG( s->regoff,
+ if (intregsneeded)
+ s->regoff = PACK_REGS(
+ rd->savintregs[rd->savintreguse],
rd->savintregs[rd->savintreguse + 1]);
+ else
#endif
+ s->regoff = rd->savintregs[rd->savintreguse];
return;
}
}
{
if (rd->freearginttop > intregsneeded) {
rd->freearginttop -= intregsneeded + 1;
- s->regoff = rd->freeargintregs[rd->freearginttop];
s->flags |= TMPARG;
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( s->regoff,
+ s->regoff = PACK_REGS(
+ rd->freeargintregs[rd->freearginttop],
rd->freeargintregs[rd->freearginttop + 1]);
+ else
#endif
+ s->regoff =
+ rd->freeargintregs[rd->freearginttop];
return;
} else if (rd->argintreguse
< INT_ARG_CNT - intregsneeded) {
- s->regoff = rd->argintregs[rd->argintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( s->regoff,
+ s->regoff = PACK_REGS(
+ rd->argintregs[rd->argintreguse],
rd->argintregs[rd->argintreguse + 1]);
+ else
#endif
+ s->regoff = rd->argintregs[rd->argintreguse];
s->flags |= TMPARG;
rd->argintreguse += intregsneeded + 1;
return;
} else if (rd->freetmpinttop > intregsneeded) {
rd->freetmpinttop -= intregsneeded + 1;
- s->regoff = rd->freetmpintregs[rd->freetmpinttop];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( s->regoff,
+ s->regoff = PACK_REGS(
+ rd->freetmpintregs[rd->freetmpinttop],
rd->freetmpintregs[rd->freetmpinttop + 1]);
+ else
#endif
+ s->regoff = rd->freetmpintregs[rd->freetmpinttop];
return;
} else if (rd->tmpintreguse > intregsneeded) {
rd->tmpintreguse -= intregsneeded + 1;
- s->regoff = rd->tmpintregs[rd->tmpintreguse];
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded)
- SET_SECOND_REG( s->regoff,
+ s->regoff = PACK_REGS(
+ rd->tmpintregs[rd->tmpintreguse],
rd->tmpintregs[rd->tmpintreguse + 1]);
+ else
#endif
+ s->regoff = rd->tmpintregs[rd->tmpintreguse];
return;
}
} /* if (!IS_2_WORD_TYPE(s->type)) */
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded) {
rd->freesavintregs[rd->freesavinttop] =
- GET_FIRST_REG(s->regoff);
+ GET_LOW_REG(s->regoff);
rd->freesavintregs[rd->freesavinttop + 1] =
- GET_SECOND_REG(s->regoff);
+ GET_HIGH_REG(s->regoff);
} else
#endif
rd->freesavintregs[rd->freesavinttop] = s->regoff;
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded) {
rd->freeargintregs[rd->freearginttop] =
- GET_FIRST_REG(s->regoff);
+ GET_LOW_REG(s->regoff);
rd->freeargintregs[rd->freearginttop + 1] =
- GET_SECOND_REG(s->regoff);
+ GET_HIGH_REG(s->regoff);
} else
#endif
- rd->freesavintregs[rd->freearginttop] = s->regoff;
+ rd->freeargintregs[rd->freearginttop] = s->regoff;
rd->freearginttop += intregsneeded + 1;
} else {
#if defined(SUPPORT_COMBINE_INTEGER_REGISTERS)
if (intregsneeded) {
rd->freetmpintregs[rd->freetmpinttop] =
- GET_FIRST_REG(s->regoff);
+ GET_LOW_REG(s->regoff);
rd->freetmpintregs[rd->freetmpinttop + 1] =
- GET_SECOND_REG(s->regoff);
+ GET_HIGH_REG(s->regoff);
} else
#endif
rd->freetmpintregs[rd->freetmpinttop] = s->regoff;
case ICMD_D2F:
case ICMD_CHECKCAST:
+ case ICMD_ARRAYCHECKCAST:
case ICMD_ARRAYLENGTH:
case ICMD_INSTANCEOF: