Authors: Andreas Krall
Stefan Ring
- $Id: codegen.c 1477 2004-11-11 10:47:04Z twisti $
+ $Id: codegen.c 1479 2004-11-11 11:16:46Z twisti $
*/
#include "jit/reg.h"
#include "jit/powerpc/codegen.h"
-/* include independent code generation stuff */
-#include "jit/codegen.inc"
-#include "jit/reg.inc"
-
/* register descripton - array ************************************************/
/* for use of reserved registers, see comment above */
+/*******************************************************************************
+
+ include independent code generation stuff -- include after register
+ descriptions to avoid extern definitions
+
+*******************************************************************************/
+
+#include "jit/codegen.inc"
+#include "jit/reg.inc"
+
+
void asm_cacheflush(void *, long);
//#include <architecture/ppc/cframe.h>
#define intmaxf(a,b) (((a)<(b)) ? (b) : (a))
-void preregpass(methodinfo *m)
+void preregpass(methodinfo *m, registerdata *rd)
{
int paramsize;
stackptr src;
basicblock *bptr;
instruction *iptr;
int s3, len;
- registerdata *r;
- /* keep code size smaller */
- r = m->registerdata;
+ rd->ifmemuse = 0;
- r->ifmemuse = 0;
for (bptr = m->basicblocks; bptr != NULL; bptr = bptr->next) {
len = bptr->icount;
for (iptr = bptr->iinstr, src = bptr->instack;
for (; --s3 >= 0; src = src->prev) {
paramsize += IS_2_WORD_TYPE(src->type) ? 2 : 1;
}
- r->ifmemuse = intmaxf(r->ifmemuse, paramsize);
+ rd->ifmemuse = intmaxf(rd->ifmemuse, paramsize);
break;
case ICMD_MULTIANEWARRAY:
s3 = iptr->op1;
- paramsize = r->intreg_argnum + s3;
- r->ifmemuse = intmaxf(r->ifmemuse, paramsize);
+ paramsize = rd->intreg_argnum + s3;
+ rd->ifmemuse = intmaxf(rd->ifmemuse, paramsize);
break;
}
}
}
- r->ifmemuse += 6;
- r->maxmemuse = r->ifmemuse;
+ rd->ifmemuse += 6;
+ rd->maxmemuse = rd->ifmemuse;
}
classinfo *super = (classinfo*) iptr->val.a;
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritrestart((u1*) mcodeptr - mcodebase);
+ codegen_threadcritrestart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
var_to_reg_int(s1, src, REG_ITMP1);
d = reg_of_var(rd, iptr->dst, REG_ITMP3);
a = dseg_addaddress(cd, (void*) super->vftbl);
M_ALD(REG_ITMP2, REG_PV, a);
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstart((u1*) mcodeptr - mcodebase);
+ codegen_threadcritstart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ILD(REG_ITMP1, REG_ITMP1, OFFSET(vftbl_t, baseval));
M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, baseval));
M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl_t, diffval));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstop((u1*) mcodeptr - mcodebase);
+ codegen_threadcritstop(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ISUB(REG_ITMP1, REG_ITMP3, REG_ITMP1);
M_CMPU(REG_ITMP1, REG_ITMP2);
classinfo *super = (classinfo*) iptr->val.a;
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritrestart(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritrestart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
d = reg_of_var(rd, iptr->dst, REG_ITMP1);
var_to_reg_int(s1, src, d);
M_BEQ(8 + (s1 == REG_ITMP1));
M_ALD(REG_ITMP2, s1, OFFSET(java_objectheader, vftbl));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstart(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritstart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, baseval));
a = dseg_addaddress(cd, (void*) super->vftbl);
M_ILD(REG_ITMP1, REG_ITMP2, OFFSET(vftbl_t, baseval));
M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl_t, diffval));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstop(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritstop(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ISUB(REG_ITMP3, REG_ITMP1, REG_ITMP3);
}
M_ALD(REG_ITMP2, REG_PV, a);
M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl_t, diffval));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstop(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritstop(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
}
M_CMPU(REG_ITMP3, REG_ITMP2);
for (bref = cd->xboundrefs; bref != NULL; bref = bref->next) {
gen_resolvebranch((u1 *) cd->mcodebase + bref->branchpos,
bref->branchpos,
- (u1 *) cd->mcodeptr - cd->mcodebase);
+ (u1 *) mcodeptr - cd->mcodebase);
MCODECHECK(8);
Authors: Andreas Krall
Stefan Ring
- $Id: codegen.h 1477 2004-11-11 10:47:04Z twisti $
+ $Id: codegen.h 1479 2004-11-11 11:16:46Z twisti $
*/
/* function prototypes */
-void preregpass(methodinfo *m);
+void preregpass(methodinfo *m, registerdata *rd);
void docacheflush(u1 *p, long bytelen);
#endif /* _CODEGEN_H */
Authors: Andreas Krall
Stefan Ring
- $Id: codegen.c 1477 2004-11-11 10:47:04Z twisti $
+ $Id: codegen.c 1479 2004-11-11 11:16:46Z twisti $
*/
#include "jit/reg.h"
#include "jit/powerpc/codegen.h"
-/* include independent code generation stuff */
-#include "jit/codegen.inc"
-#include "jit/reg.inc"
-
/* register descripton - array ************************************************/
/* for use of reserved registers, see comment above */
+/*******************************************************************************
+
+ include independent code generation stuff -- include after register
+ descriptions to avoid extern definitions
+
+*******************************************************************************/
+
+#include "jit/codegen.inc"
+#include "jit/reg.inc"
+
+
void asm_cacheflush(void *, long);
//#include <architecture/ppc/cframe.h>
#define intmaxf(a,b) (((a)<(b)) ? (b) : (a))
-void preregpass(methodinfo *m)
+void preregpass(methodinfo *m, registerdata *rd)
{
int paramsize;
stackptr src;
basicblock *bptr;
instruction *iptr;
int s3, len;
- registerdata *r;
- /* keep code size smaller */
- r = m->registerdata;
+ rd->ifmemuse = 0;
- r->ifmemuse = 0;
for (bptr = m->basicblocks; bptr != NULL; bptr = bptr->next) {
len = bptr->icount;
for (iptr = bptr->iinstr, src = bptr->instack;
for (; --s3 >= 0; src = src->prev) {
paramsize += IS_2_WORD_TYPE(src->type) ? 2 : 1;
}
- r->ifmemuse = intmaxf(r->ifmemuse, paramsize);
+ rd->ifmemuse = intmaxf(rd->ifmemuse, paramsize);
break;
case ICMD_MULTIANEWARRAY:
s3 = iptr->op1;
- paramsize = r->intreg_argnum + s3;
- r->ifmemuse = intmaxf(r->ifmemuse, paramsize);
+ paramsize = rd->intreg_argnum + s3;
+ rd->ifmemuse = intmaxf(rd->ifmemuse, paramsize);
break;
}
}
}
- r->ifmemuse += 6;
- r->maxmemuse = r->ifmemuse;
+ rd->ifmemuse += 6;
+ rd->maxmemuse = rd->ifmemuse;
}
classinfo *super = (classinfo*) iptr->val.a;
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritrestart((u1*) mcodeptr - mcodebase);
+ codegen_threadcritrestart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
var_to_reg_int(s1, src, REG_ITMP1);
d = reg_of_var(rd, iptr->dst, REG_ITMP3);
a = dseg_addaddress(cd, (void*) super->vftbl);
M_ALD(REG_ITMP2, REG_PV, a);
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstart((u1*) mcodeptr - mcodebase);
+ codegen_threadcritstart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ILD(REG_ITMP1, REG_ITMP1, OFFSET(vftbl_t, baseval));
M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, baseval));
M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl_t, diffval));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstop((u1*) mcodeptr - mcodebase);
+ codegen_threadcritstop(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ISUB(REG_ITMP1, REG_ITMP3, REG_ITMP1);
M_CMPU(REG_ITMP1, REG_ITMP2);
classinfo *super = (classinfo*) iptr->val.a;
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritrestart(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritrestart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
d = reg_of_var(rd, iptr->dst, REG_ITMP1);
var_to_reg_int(s1, src, d);
M_BEQ(8 + (s1 == REG_ITMP1));
M_ALD(REG_ITMP2, s1, OFFSET(java_objectheader, vftbl));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstart(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritstart(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, baseval));
a = dseg_addaddress(cd, (void*) super->vftbl);
M_ILD(REG_ITMP1, REG_ITMP2, OFFSET(vftbl_t, baseval));
M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl_t, diffval));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstop(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritstop(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
M_ISUB(REG_ITMP3, REG_ITMP1, REG_ITMP3);
}
M_ALD(REG_ITMP2, REG_PV, a);
M_ILD(REG_ITMP2, REG_ITMP2, OFFSET(vftbl_t, diffval));
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
- codegen_threadcritstop(cd, (u1*) mcodeptr - mcodebase);
+ codegen_threadcritstop(cd, (u1*) mcodeptr - cd->mcodebase);
#endif
}
M_CMPU(REG_ITMP3, REG_ITMP2);
for (bref = cd->xboundrefs; bref != NULL; bref = bref->next) {
gen_resolvebranch((u1 *) cd->mcodebase + bref->branchpos,
bref->branchpos,
- (u1 *) cd->mcodeptr - cd->mcodebase);
+ (u1 *) mcodeptr - cd->mcodebase);
MCODECHECK(8);
Authors: Andreas Krall
Stefan Ring
- $Id: codegen.h 1477 2004-11-11 10:47:04Z twisti $
+ $Id: codegen.h 1479 2004-11-11 11:16:46Z twisti $
*/
/* function prototypes */
-void preregpass(methodinfo *m);
+void preregpass(methodinfo *m, registerdata *rd);
void docacheflush(u1 *p, long bytelen);
#endif /* _CODEGEN_H */