X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Farm%2Femit.c;h=f5617cd85cbc926b79e2e4d6c300c7eee1f81a93;hb=f703b1265fbfb70a3de51067803b6b211d5c5d4d;hp=6a196037c6807b507f9f5cdb8f2061f80f3f865b;hpb=2ab77f5d50859fe9849586d1be0382fb61856b8f;p=cacao.git diff --git a/src/vm/jit/arm/emit.c b/src/vm/jit/arm/emit.c index 6a196037c..f5617cd85 100644 --- a/src/vm/jit/arm/emit.c +++ b/src/vm/jit/arm/emit.c @@ -794,7 +794,6 @@ void emit_verbosecall_enter(jitdata *jd) if (!md->params[i].inmemory) { s = md->params[i].regoff; -#if defined(ENABLE_SOFTFLOAT) switch (md->paramtypes[i].type) { case TYPE_INT: case TYPE_FLT: @@ -806,23 +805,6 @@ void emit_verbosecall_enter(jitdata *jd) M_LST(s, REG_SP, i * 8); break; } -#else - switch (md->paramtypes[i].type) { - case TYPE_ADR: - case TYPE_INT: - M_IST(s, REG_SP, i * 8); - break; - case TYPE_LNG: - M_LST(s, REG_SP, i * 8); - break; - case TYPE_FLT: - M_FST(s, REG_SP, i * 8); - break; - case TYPE_DBL: - M_DST(s, REG_SP, i * 8); - break; - } -#endif } } @@ -838,7 +820,6 @@ void emit_verbosecall_enter(jitdata *jd) if (!md->params[i].inmemory) { s = md->params[i].regoff; -#if defined(ENABLE_SOFTFLOAT) switch (md->paramtypes[i].type) { case TYPE_INT: case TYPE_FLT: @@ -850,23 +831,6 @@ void emit_verbosecall_enter(jitdata *jd) M_LLD(s, REG_SP, i * 8); break; } -#else - switch (md->paramtypes[i].type) { - case TYPE_ADR: - case TYPE_INT: - M_ILD(s, REG_SP, i * 8); - break; - case TYPE_LNG: - M_LLD(s, REG_SP, i * 8); - break; - case TYPE_FLT: - M_FLD(s, REG_SP, i * 8); - break; - case TYPE_DBL: - M_DLD(s, REG_SP, i * 8); - break; - } -#endif } } @@ -959,6 +923,58 @@ void emit_verbosecall_exit(jitdata *jd) #endif /* !defined(NDEBUG) */ +/** + * Emit profiling code for method frequency counting. + * Its slow but working, so be carefull, if you want to use it... + */ +#if defined(ENABLE_PROFILING) +void emit_profile_method(codegendata* cd, codeinfo* code) +{ + ICONST(REG_ITMP3,code); + M_LDR(REG_ITMP2,REG_ITMP3,OFFSET(codeinfo, frequency)); + M_ADD_IMM(REG_ITMP2, REG_ITMP2, 1); + M_STR(REG_ITMP2,REG_ITMP3,OFFSET(codeinfo, frequency)); +// M_TRAP(0, TRAP_DEBUG); +} + +#endif + +/** + * Emit profiling code for basicblock frequency counting. + * Its slow but working, so be carefull, if you want to use it... + */ +#if defined(ENABLE_PROFILING) +void emit_profile_basicblock(codegendata* cd, codeinfo* code, basicblock* bptr) +{ + ICONST(REG_ITMP3,code); + M_LDR(REG_ITMP2,REG_ITMP3,OFFSET(codeinfo, bbfrequency)); + M_ADD_IMM(REG_ITMP2, REG_ITMP2, 1); + M_STR(REG_ITMP2,REG_ITMP3,OFFSET(codeinfo, bbfrequency)); +} +#endif + + +/** + * Emit profiling code to start CPU cycle counting. + */ +#if defined(ENABLE_PROFILING) +void emit_profile_cycle_start(codegendata* cd, codeinfo* code) +{ + // XXX Not implemented yet! +} +#endif + + +/** + * Emit profiling code to stop CPU cycle counting. + */ +#if defined(ENABLE_PROFILING) +void emit_profile_cycle_stop(codegendata* cd, codeinfo* code) +{ + // XXX Not implemented yet! +} +#endif + /* * These are local overrides for various environment variables in Emacs. * Please do not remove this and leave it at the end of the file, where