X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fintrp%2Fcodegen.c;h=6fe3cc7270a935a532f0651a0c7e09e188b727e7;hb=b76e356b0af200d2568e6fc55e82e233f1808eb9;hp=7dcb09566ca8c7b3610c3d43decb2350b749dc4c;hpb=94cdb8ded35be46114694462f2e2626d73074469;p=cacao.git diff --git a/src/vm/jit/intrp/codegen.c b/src/vm/jit/intrp/codegen.c index 7dcb09566..6fe3cc727 100644 --- a/src/vm/jit/intrp/codegen.c +++ b/src/vm/jit/intrp/codegen.c @@ -1,9 +1,7 @@ /* src/vm/jit/intrp/codegen.c - code generator for Interpreter - Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel, - C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, - E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, - J. Wenninger, Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2005, 2006, 2007, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -22,8 +20,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 7357 2007-02-14 11:35:59Z twisti $ - */ @@ -292,7 +288,6 @@ bool intrp_codegen(jitdata *jd) s4 i, len, s1, s2, d; basicblock *bptr; instruction *iptr; - exception_entry *ex; u2 currentline; methodinfo *lm; /* local methodinfo for ICMD_INVOKE* */ unresolved_method *um; @@ -320,7 +315,7 @@ bool intrp_codegen(jitdata *jd) cd->stackframesize = m->maxlocals; #if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) + if (checksync && code_is_synchronized(code)) cd->stackframesize += 1; #endif @@ -329,30 +324,20 @@ bool intrp_codegen(jitdata *jd) (void) dseg_add_unique_address(cd, jd->code); (void) dseg_add_unique_s4(cd, cd->stackframesize * SIZEOF_VOID_P); -#if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) + code->synchronizedoffset = rd->memuse * 8; + + /* REMOVEME: We still need it for exception handling in assembler. */ + + if (code_is_leafmethod(code)) (void) dseg_add_unique_s4(cd, 1); else -#endif (void) dseg_add_unique_s4(cd, 0); - - (void) dseg_add_unique_s4(cd, 0); + (void) dseg_add_unique_s4(cd, 0); (void) dseg_add_unique_s4(cd, 0); dseg_addlinenumbertablesize(cd); - (void) dseg_add_unique_s4(cd, jd->exceptiontablelength); - - /* create exception table */ - - for (ex = jd->exceptiontable; ex != NULL; ex = ex->down) { - dseg_add_target(cd, ex->start); - dseg_add_target(cd, ex->end); - dseg_add_target(cd, ex->handler); - (void) dseg_add_unique_address(cd, ex->catchtype.any); - } - #if 0 /* initialize mcode variables */ @@ -363,9 +348,9 @@ bool intrp_codegen(jitdata *jd) gen_BBSTART; #if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) { + if (checksync && code_is_synchronized(code)) { if (m->flags & ACC_STATIC) { - gen_ACONST(cd, (java_objectheader *) m->class); + gen_ACONST(cd, (java_objectheader *) m->clazz); } else { gen_ALOAD(cd, 0); @@ -1119,7 +1104,7 @@ dont_opt_IF_LCMPxx: case TYPE_INT: if (fi == NULL) gen_PATCHER_GETSTATIC_INT(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_GETSTATIC_CLINIT_INT(cd, 0, fi); else gen_GETSTATIC_INT(cd, (u1 *) &(fi->value.i), fi); @@ -1127,7 +1112,7 @@ dont_opt_IF_LCMPxx: case TYPE_FLT: if (fi == NULL) gen_PATCHER_GETSTATIC_FLOAT(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_GETSTATIC_CLINIT_FLOAT(cd, 0, fi); else gen_GETSTATIC_FLOAT(cd, (u1 *) &(fi->value.i), fi); @@ -1136,7 +1121,7 @@ dont_opt_IF_LCMPxx: case TYPE_DBL: if (fi == NULL) gen_PATCHER_GETSTATIC_LONG(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_GETSTATIC_CLINIT_LONG(cd, 0, fi); else gen_GETSTATIC_LONG(cd, (u1 *) &(fi->value.l), fi); @@ -1144,7 +1129,7 @@ dont_opt_IF_LCMPxx: case TYPE_ADR: if (fi == NULL) gen_PATCHER_GETSTATIC_CELL(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_GETSTATIC_CLINIT_CELL(cd, 0, fi); else gen_GETSTATIC_CELL(cd, (u1 *) &(fi->value.a), fi); @@ -1170,7 +1155,7 @@ dont_opt_IF_LCMPxx: case TYPE_INT: if (fi == NULL) gen_PATCHER_PUTSTATIC_INT(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_PUTSTATIC_CLINIT_INT(cd, 0, fi); else gen_PUTSTATIC_INT(cd, (u1 *) &(fi->value.i), fi); @@ -1178,7 +1163,7 @@ dont_opt_IF_LCMPxx: case TYPE_FLT: if (fi == NULL) gen_PATCHER_PUTSTATIC_FLOAT(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_PUTSTATIC_CLINIT_FLOAT(cd, 0, fi); else gen_PUTSTATIC_FLOAT(cd, (u1 *) &(fi->value.i), fi); @@ -1187,7 +1172,7 @@ dont_opt_IF_LCMPxx: case TYPE_DBL: if (fi == NULL) gen_PATCHER_PUTSTATIC_LONG(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_PUTSTATIC_CLINIT_LONG(cd, 0, fi); else gen_PUTSTATIC_LONG(cd, (u1 *) &(fi->value.l), fi); @@ -1195,7 +1180,7 @@ dont_opt_IF_LCMPxx: case TYPE_ADR: if (fi == NULL) gen_PATCHER_PUTSTATIC_CELL(cd, 0, uf); - else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) + else if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->clazz)) gen_PATCHER_PUTSTATIC_CLINIT_CELL(cd, 0, fi); else gen_PUTSTATIC_CELL(cd, (u1 *) &(fi->value.a), fi); @@ -1528,9 +1513,9 @@ dont_opt_IF_LCMPxx: case ICMD_FRETURN: /* ..., retvalue ==> ... */ #if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) { + if (checksync && code_is_synchronized(code)) { if (m->flags & ACC_STATIC) { - gen_ACONST(cd, (java_objectheader *) m->class); + gen_ACONST(cd, (java_objectheader *) m->clazz); } else { gen_ALOAD(cd, index2offset(m->maxlocals)); } @@ -1547,9 +1532,9 @@ dont_opt_IF_LCMPxx: case ICMD_DRETURN: /* ..., retvalue ==> ... */ #if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) { + if (checksync && code_is_synchronized(code)) { if (m->flags & ACC_STATIC) { - gen_ACONST(cd, (java_objectheader *) m->class); + gen_ACONST(cd, (java_objectheader *) m->clazz); } else { gen_ALOAD(cd, index2offset(m->maxlocals)); } @@ -1565,9 +1550,9 @@ dont_opt_IF_LCMPxx: case ICMD_RETURN: /* ... ==> ... */ #if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) { + if (checksync && code_is_synchronized(code)) { if (m->flags & ACC_STATIC) { - gen_ACONST(cd, (java_objectheader *) m->class); + gen_ACONST(cd, (java_objectheader *) m->clazz); } else { gen_ALOAD(cd, index2offset(m->maxlocals)); } @@ -1732,9 +1717,9 @@ dont_opt_IF_LCMPxx: md = lm->parseddesc; s1 = OFFSET(vftbl_t, interfacetable[0]) - - sizeof(methodptr*) * lm->class->index; + sizeof(methodptr*) * lm->clazz->index; - s2 = sizeof(methodptr) * (lm - lm->class->methods); + s2 = sizeof(methodptr) * (lm - lm->clazz->methods); gen_INVOKEINTERFACE(cd, s1, s2, md->paramslots, lm); } @@ -1851,8 +1836,8 @@ u1 *intrp_createcompilerstub(methodinfo *m) Inst *s; Inst *d; codegendata *cd; - s4 dumpsize; s4 stackframesize; + int32_t dumpmarker; s = CNEW(Inst, COMPILERSTUB_SIZE); @@ -1869,7 +1854,7 @@ u1 *intrp_createcompilerstub(methodinfo *m) /* mark start of dump memory area */ - dumpsize = dump_size(); + DMARKER; cd = DNEW(codegendata); cd->mcodeptr = (u1 *) s; @@ -1885,7 +1870,7 @@ u1 *intrp_createcompilerstub(methodinfo *m) stackframesize = m->maxlocals; #if defined(ENABLE_THREADS) - if (checksync && (m->flags & ACC_SYNCHRONIZED)) + if (checksync && code_is_synchronized(code)) stackframesize += 1; #endif } @@ -1907,7 +1892,7 @@ u1 *intrp_createcompilerstub(methodinfo *m) /* release dump area */ - dump_release(dumpsize); + DRELEASE; return (u1 *) s; } @@ -2103,7 +2088,7 @@ Cell *nativecall(functionptr f, methodinfo *m, Cell *sp, Inst *ra, Cell *fp, u1 av_ptr(alist, _Jv_JNIEnv *, _Jv_env); if (m->flags & ACC_STATIC) - av_ptr(alist, classinfo *, m->class); + av_ptr(alist, classinfo *, m->clazz); for (i = 0, p = sp + md->paramslots; i < md->paramcount; i++) { switch (md->paramtypes[i].type) { @@ -2171,7 +2156,7 @@ Cell *nativecall(functionptr f, methodinfo *m, Cell *sp, Inst *ra, Cell *fp, u1 /* for static methods, pass class pointer */ if (m->flags & ACC_STATIC) - *pvalues++ = &m->class; + *pvalues++ = &m->clazz; /* pass parameter to native function */ @@ -2216,12 +2201,12 @@ u1 *createcalljavafunction(methodinfo *m) jitdata *jd; codegendata *cd; registerdata *rd; - s4 dumpsize; methoddesc *md; + int32_t dumpmarker; /* mark dump memory */ - dumpsize = dump_size(); + DMARKER; /* allocate memory */ @@ -2277,7 +2262,7 @@ u1 *createcalljavafunction(methodinfo *m) /* release memory */ - dump_release(dumpsize); + DRELEASE; return entrypoint; }