- methodinfo *m;
- codeinfo *code;
- codegendata *cd;
- registerdata *rd;
- s4 i, t, len;
- s4 s1, s2, s3, d;
- s4 disp;
- varinfo *var;
- basicblock *bptr;
- instruction *iptr;
- exception_entry *ex;
-
- s4 spilledregs_num;
- s4 savedregs_num;
- u2 savedregs_bitmask;
- u2 currentline;
-
- methodinfo *lm; /* local methodinfo for ICMD_INVOKE* */
- unresolved_method *um;
- builtintable_entry *bte;
- methoddesc *md;
- fieldinfo *fi;
- unresolved_field *uf;
- int fieldtype;
- int varindex;
-
- /* get required compiler data */
-
- m = jd->m;
- code = jd->code;
- cd = jd->cd;
- rd = jd->rd;
-
- /* prevent compiler warnings */
-
- lm = NULL;
- um = NULL;
- bte = NULL;
-
- fieldtype = -1;
-
- /* space to save used callee saved registers */
-
- savedregs_num = (jd->isleafmethod) ? 0 : 1; /* space to save the LR */
- savedregs_num += (INT_SAV_CNT - rd->savintreguse);
- /*savedregs_num += (FLT_SAV_CNT - rd->savfltreguse);*/
- assert((FLT_SAV_CNT - rd->savfltreguse) == 0);
-
- spilledregs_num = rd->memuse;
-
-#if defined(ENABLE_THREADS) /* space to save argument of monitor_enter */
- if (checksync && (m->flags & ACC_SYNCHRONIZED))
- spilledregs_num++;
-#endif
-
- cd->stackframesize = spilledregs_num * 8 + savedregs_num * 4;
-
- /* XXX QUICK FIX: We shouldn't align the stack in Java code, but
- only in native stubs. */
- /* align stack to 8-byte */
-
- cd->stackframesize = (cd->stackframesize + 4) & ~4;
-
- /* SECTION: Method Header */
- /* create method header */
-
- (void) dseg_add_unique_address(cd, code); /* CodeinfoPointer */
- (void) dseg_add_unique_s4(cd, cd->stackframesize); /* FrameSize */
-
-#if defined(ENABLE_THREADS)
- /* IsSync contains the offset relative to the stack pointer for the
- argument of monitor_exit used in the exception handler. Since the
- offset could be zero and give a wrong meaning of the flag it is
- offset by one.
- */
-
- if (checksync && (m->flags & ACC_SYNCHRONIZED))
- (void) dseg_add_unique_s4(cd, rd->memuse * 8 + 4);/* IsSync */
- else
-#endif
- (void) dseg_add_unique_s4(cd, 0); /* IsSync */
-
- (void) dseg_add_unique_s4(cd, jd->isleafmethod); /* IsLeaf */
- (void) dseg_add_unique_s4(cd, INT_SAV_CNT - rd->savintreguse); /* IntSave */
- (void) dseg_add_unique_s4(cd, FLT_SAV_CNT - rd->savfltreguse); /* FltSave */
- (void) dseg_addlinenumbertablesize(cd);
- (void) dseg_add_unique_s4(cd, jd->exceptiontablelength); /* ExTableSize */
-
- /* 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);
- }
-
- /* save return address and used callee saved registers */
-
- savedregs_bitmask = 0;
-
- if (!jd->isleafmethod)