X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fstack.c;h=e692269d25bf2c6846b3dac13efe6597a0c8a94c;hb=b0dfcc457440aa84e2f1ccee8bcefad72615a344;hp=bfca80b1e52ccb170bf158857aa584b96aedd39b;hpb=03bc95ba98c667c0815d1cebc87824d497db7534;p=cacao.git diff --git a/src/vm/jit/stack.c b/src/vm/jit/stack.c index bfca80b1e..e692269d2 100644 --- a/src/vm/jit/stack.c +++ b/src/vm/jit/stack.c @@ -1,9 +1,7 @@ /* src/vm/jit/stack.c - stack analysis - 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: stack.c 7743 2007-04-17 20:53:41Z edwin $ - */ @@ -61,12 +57,14 @@ #include "vm/jit/jit.h" #include "vm/jit/stack.h" +#if 0 #if defined(ENABLE_SSA) # include "vm/jit/optimizing/lsra.h" # include "vm/jit/optimizing/ssa.h" #elif defined(ENABLE_LSRA) # include "vm/jit/allocator/lsra.h" #endif +#endif #include "vmcore/options.h" #include "vm/resolve.h" @@ -118,7 +116,7 @@ typedef struct stackdata_t stackdata_t; struct stackdata_t { basicblock *bptr; /* the current basic block being analysed */ - stackptr new; /* next free stackelement */ + stackelement_t *new; /* next free stackelement */ s4 vartop; /* next free variable index */ s4 localcount; /* number of locals (at the start of var) */ s4 varcount; /* maximum number of variables expected */ @@ -132,7 +130,7 @@ struct stackdata_t { bool repeat; /* if true, iterate the analysis again */ exception_entry **handlers; /* exception handlers for the current block */ exception_entry *extableend; /* points to the last exception entry */ - stackelement exstack; /* instack for exception handlers */ + stackelement_t exstack; /* instack for exception handlers */ }; @@ -509,7 +507,7 @@ struct stackdata_t { /* forward declarations *******************************************************/ static void stack_create_invars(stackdata_t *sd, basicblock *b, - stackptr curstack, int stackdepth); + stackelement_t * curstack, int stackdepth); static void stack_create_invars_from_outvars(stackdata_t *sd, basicblock *b); #if defined(STACK_VERBOSE) @@ -519,7 +517,7 @@ static void stack_verbose_show_block(stackdata_t *sd, basicblock *bptr); static void stack_verbose_block_enter(stackdata_t *sd, bool reanalyse); static void stack_verbose_block_exit(stackdata_t *sd, bool superblockend); static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr, - stackptr curstack); + stackelement_t * curstack); #endif @@ -744,9 +742,9 @@ static void stack_merge_locals(stackdata_t *sd, basicblock *b) *******************************************************************************/ static void stack_create_invars(stackdata_t *sd, basicblock *b, - stackptr curstack, int stackdepth) + stackelement_t * curstack, int stackdepth) { - stackptr sp; + stackelement_t * sp; int i; int index; varinfo *dv; @@ -831,10 +829,10 @@ static void stack_create_invars_from_outvars(stackdata_t *sd, basicblock *b) *******************************************************************************/ static basicblock * stack_check_invars(stackdata_t *sd, basicblock *b, - stackptr curstack, int stackdepth) + stackelement_t * curstack, int stackdepth) { int i; - stackptr sp; + stackelement_t * sp; basicblock *orig; bool separable; varinfo *sv; @@ -1068,9 +1066,9 @@ static basicblock * stack_check_invars_from_outvars(stackdata_t *sd, basicblock *******************************************************************************/ -static stackptr stack_create_instack(stackdata_t *sd) +static stackelement_t * stack_create_instack(stackdata_t *sd) { - stackptr sp; + stackelement_t * sp; int depth; int index; @@ -1114,7 +1112,7 @@ static stackptr stack_create_instack(stackdata_t *sd) *******************************************************************************/ -static basicblock *stack_mark_reached(stackdata_t *sd, basicblock *b, stackptr curstack, int stackdepth) +static basicblock *stack_mark_reached(stackdata_t *sd, basicblock *b, stackelement_t * curstack, int stackdepth) { assert(b != NULL); @@ -1233,6 +1231,9 @@ static bool stack_reach_next_block(stackdata_t *sd) assert(iptr->opc == ICMD_NOP); iptr->opc = ICMD_GOTO; iptr->dst.block = tbptr; +#if defined(STACK_VERBOSE) + if (iptr->line == 0) printf("goto with line 0 in L%03d\n", sd->bptr->nr); +#endif if (tbptr->flags < BBFINISHED) sd->repeat = true; /* XXX check if we really need to repeat */ @@ -1319,7 +1320,7 @@ bool stack_reanalyse_block(stackdata_t *sd) s4 blockvarstart; s4 invarshift; s4 blockvarshift; - s4 i, j; + s4 i, varindex; s4 *argp; branch_target_t *table; lookup_target_t *lookup; @@ -1458,16 +1459,16 @@ bool stack_reanalyse_block(stackdata_t *sd) switch (iptr->opc) { case ICMD_RET: - j = iptr->s1.varindex; + varindex = iptr->s1.varindex; #if defined(ENABLE_VERIFIER) - if (sd->var[j].type != TYPE_RET) { + if (sd->var[varindex].type != TYPE_RET) { exceptions_throw_verifyerror(sd->m, "RET with non-returnAddress value"); return false; } #endif - iptr->dst.block = stack_mark_reached_from_outvars(sd, sd->var[j].vv.retaddr); + iptr->dst.block = stack_mark_reached_from_outvars(sd, sd->var[varindex].vv.retaddr); superblockend = true; break; @@ -1551,16 +1552,16 @@ bool stack_reanalyse_block(stackdata_t *sd) case ICMD_ASTORE: RELOCATE(iptr->s1.varindex); - j = iptr->dst.varindex; - COPY_VAL_AND_TYPE(*sd, iptr->s1.varindex, j); + varindex = iptr->dst.varindex; + COPY_VAL_AND_TYPE(*sd, iptr->s1.varindex, varindex); i = iptr->sx.s23.s3.javaindex; if (iptr->flags.bits & INS_FLAG_RETADDR) { iptr->sx.s23.s2.retaddrnr = - JAVALOCAL_FROM_RETADDR(sd->var[j].vv.retaddr->nr); + JAVALOCAL_FROM_RETADDR(sd->var[varindex].vv.retaddr->nr); sd->javalocals[i] = iptr->sx.s23.s2.retaddrnr; } else - sd->javalocals[i] = j; + sd->javalocals[i] = varindex; if (iptr->flags.bits & INS_FLAG_KILL_PREV) sd->javalocals[i-1] = UNUSED; if (iptr->flags.bits & INS_FLAG_KILL_NEXT) @@ -1669,32 +1670,6 @@ bool stack_reanalyse_block(stackdata_t *sd) case ICMD_IF_LCMPGT: case ICMD_IF_LCMPLE: - case ICMD_IF_FCMPEQ: - case ICMD_IF_FCMPNE: - - case ICMD_IF_FCMPL_LT: - case ICMD_IF_FCMPL_GE: - case ICMD_IF_FCMPL_GT: - case ICMD_IF_FCMPL_LE: - - case ICMD_IF_FCMPG_LT: - case ICMD_IF_FCMPG_GE: - case ICMD_IF_FCMPG_GT: - case ICMD_IF_FCMPG_LE: - - case ICMD_IF_DCMPEQ: - case ICMD_IF_DCMPNE: - - case ICMD_IF_DCMPL_LT: - case ICMD_IF_DCMPL_GE: - case ICMD_IF_DCMPL_GT: - case ICMD_IF_DCMPL_LE: - - case ICMD_IF_DCMPG_LT: - case ICMD_IF_DCMPG_GE: - case ICMD_IF_DCMPG_GT: - case ICMD_IF_DCMPG_LE: - case ICMD_IF_ACMPEQ: case ICMD_IF_ACMPNE: RELOCATE(iptr->sx.s23.s2.varindex); @@ -1906,7 +1881,7 @@ bool stack_reanalyse_block(stackdata_t *sd) *******************************************************************************/ -static void stack_change_to_tempvar(stackdata_t *sd, stackptr sp, +static void stack_change_to_tempvar(stackdata_t *sd, stackelement_t * sp, instruction *ilimit) { s4 newindex; @@ -1985,7 +1960,7 @@ static void stack_change_to_tempvar(stackdata_t *sd, stackptr sp, static void stack_init_javalocals(stackdata_t *sd) { s4 *jl; - s4 t,i,j; + s4 type,i,j; methoddesc *md; jitdata *jd; @@ -2000,10 +1975,10 @@ static void stack_init_javalocals(stackdata_t *sd) md = jd->m->parseddesc; j = 0; for (i=0; iparamcount; ++i) { - t = md->paramtypes[i].type; - jl[j] = jd->local_map[5*j + t]; + type = md->paramtypes[i].type; + jl[j] = jd->local_map[5*j + type]; j++; - if (IS_2_WORD_TYPE(t)) + if (IS_2_WORD_TYPE(type)) j++; } } @@ -2036,17 +2011,16 @@ static void stack_init_javalocals(stackdata_t *sd) bool stack_analyse(jitdata *jd) { methodinfo *m; /* method being analyzed */ + codeinfo *code; registerdata *rd; stackdata_t sd; -#if defined(ENABLE_SSA) - lsradata *ls; -#endif int stackdepth; - stackptr curstack; /* current stack top */ - stackptr copy; + stackelement_t *curstack; /* current stack top */ + stackelement_t *copy; int opcode; /* opcode of current instruction */ - int i, j; + int i, varindex; int javaindex; + int type; /* operand type */ int len; /* # of instructions after the current one */ bool superblockend; /* if true, no fallthrough to next block */ bool deadcode; /* true if no live code has been reached */ @@ -2055,10 +2029,10 @@ bool stack_analyse(jitdata *jd) basicblock *original; exception_entry *ex; - stackptr *last_store_boundary; - stackptr coalescing_boundary; + stackelement_t **last_store_boundary; + stackelement_t *coalescing_boundary; - stackptr src1, src2, src3, src4, dst1, dst2; + stackelement_t *src1, *src2, *src3, *src4, *dst1, *dst2; branch_target_t *table; lookup_target_t *lookup; @@ -2080,10 +2054,8 @@ bool stack_analyse(jitdata *jd) /* get required compiler data - initialization */ m = jd->m; + code = jd->code; rd = jd->rd; -#if defined(ENABLE_SSA) - ls = jd->ls; -#endif /* initialize the stackdata_t struct */ @@ -2106,10 +2078,6 @@ bool stack_analyse(jitdata *jd) sd.exstack.varnum = sd.localcount; sd.var[sd.exstack.varnum].type = TYPE_ADR; -#if defined(ENABLE_LSRA) - m->maxlifetimes = 0; -#endif - #if defined(ENABLE_STATISTICS) iteration_count = 0; #endif @@ -2138,7 +2106,7 @@ bool stack_analyse(jitdata *jd) for (i = 0; i < m->maxstack * 5; i++) jd->interface_map[i].flags = UNUSED; - last_store_boundary = DMNEW(stackptr, m->maxlocals); + last_store_boundary = DMNEW(stackelement_t *, m->maxlocals); /* initialize flags and invars (none) of first block */ @@ -2322,7 +2290,7 @@ bool stack_analyse(jitdata *jd) iptr->flags.bits &= INS_FLAG_ID_MASK; iptr->sx.s23.s3.bte = bte; /* iptr->line is already set */ - jd->isleafmethod = false; + code_unflag_leafmethod(code); goto icmd_BUILTIN; } @@ -2347,11 +2315,11 @@ icmd_NOP: break; case ICMD_RET: - j = iptr->s1.varindex = + varindex = iptr->s1.varindex = jd->local_map[iptr->s1.varindex * 5 + TYPE_ADR]; #if defined(ENABLE_VERIFIER) - if (sd.var[j].type != TYPE_RET) { + if (sd.var[varindex].type != TYPE_RET) { exceptions_throw_verifyerror(m, "RET with non-returnAddress value"); return false; } @@ -2359,7 +2327,7 @@ icmd_NOP: CLR_SX; - iptr->dst.block = stack_mark_reached(&sd, sd.var[j].vv.retaddr, curstack, stackdepth); + iptr->dst.block = stack_mark_reached(&sd, sd.var[varindex].vv.retaddr, curstack, stackdepth); superblockend = true; break; @@ -3168,29 +3136,18 @@ normal_ACONST: case ICMD_DLOAD: case ICMD_ALOAD: COUNT(count_load_instruction); - i = opcode - ICMD_ILOAD; /* type */ + type = opcode - ICMD_ILOAD; - j = iptr->s1.varindex = - jd->local_map[iptr->s1.varindex * 5 + i]; + varindex = iptr->s1.varindex = + jd->local_map[iptr->s1.varindex * 5 + type]; #if defined(ENABLE_VERIFIER) - if (sd.var[j].type == TYPE_RET) { + if (sd.var[varindex].type == TYPE_RET) { exceptions_throw_verifyerror(m, "forbidden load of returnAddress"); return false; } #endif - -#if defined(ENABLE_SSA) - if (ls != NULL) { - GET_NEW_VAR(sd, new_index, i); - DST(i, new_index); - stackdepth++; - } - else - -#else - LOAD(i, j); -#endif + LOAD(type, varindex); break; /* pop 2 push 1 */ @@ -3223,23 +3180,17 @@ normal_ACONST: case ICMD_IINC: STATISTICS_STACKDEPTH_DISTRIBUTION(count_store_depth); -#if defined(ENABLE_SSA) - if (ls != NULL) { - iptr->s1.varindex = - jd->local_map[iptr->s1.varindex * 5 +TYPE_INT]; - } - else { -#endif - last_store_boundary[iptr->s1.varindex] = sd.new; + javaindex = iptr->s1.varindex; + last_store_boundary[javaindex] = sd.new; iptr->s1.varindex = - jd->local_map[iptr->s1.varindex * 5 + TYPE_INT]; + jd->local_map[javaindex * 5 + TYPE_INT]; copy = curstack; i = stackdepth - 1; while (copy) { if ((copy->varkind == LOCALVAR) && - (copy->varnum == iptr->s1.varindex)) + (jd->reverselocalmap[copy->varnum] == javaindex)) { assert(IS_LOCALVAR(copy)); SET_TEMPVAR(copy); @@ -3247,9 +3198,6 @@ normal_ACONST: i--; copy = copy->prev; } -#if defined(ENABLE_SSA) - } -#endif iptr->dst.varindex = iptr->s1.varindex; break; @@ -3263,27 +3211,27 @@ normal_ACONST: case ICMD_ASTORE: REQUIRE(1); - i = opcode - ICMD_ISTORE; /* type */ + type = opcode - ICMD_ISTORE; javaindex = iptr->dst.varindex; - j = iptr->dst.varindex = - jd->local_map[javaindex * 5 + i]; + varindex = iptr->dst.varindex = + jd->local_map[javaindex * 5 + type]; - COPY_VAL_AND_TYPE(sd, curstack->varnum, j); + COPY_VAL_AND_TYPE(sd, curstack->varnum, varindex); iptr->sx.s23.s3.javaindex = javaindex; if (curstack->type == TYPE_RET) { iptr->flags.bits |= INS_FLAG_RETADDR; iptr->sx.s23.s2.retaddrnr = - JAVALOCAL_FROM_RETADDR(sd.var[j].vv.retaddr->nr); + JAVALOCAL_FROM_RETADDR(sd.var[varindex].vv.retaddr->nr); sd.javalocals[javaindex] = iptr->sx.s23.s2.retaddrnr; } else - sd.javalocals[javaindex] = j; + sd.javalocals[javaindex] = varindex; /* invalidate the following javalocal for 2-word types */ - if (IS_2_WORD_TYPE(i)) { + if (IS_2_WORD_TYPE(type)) { sd.javalocals[javaindex+1] = UNUSED; iptr->flags.bits |= INS_FLAG_KILL_NEXT; } @@ -3313,18 +3261,14 @@ normal_ACONST: } #endif -#if defined(ENABLE_SSA) - if (ls != NULL) { -#endif /* check for conflicts as described in Figure 5.2 */ copy = curstack->prev; i = stackdepth - 2; while (copy) { if ((copy->varkind == LOCALVAR) && - (copy->varnum == j)) + (jd->reverselocalmap[copy->varnum] == javaindex)) { - copy->varkind = TEMPVAR; assert(IS_LOCALVAR(copy)); SET_TEMPVAR(copy); } @@ -3350,11 +3294,11 @@ normal_ACONST: if (curstack < coalescing_boundary) goto assume_conflict; - /* there is no DEF LOCALVAR(j) while curstack is live */ + /* there is no DEF LOCALVAR(varindex) while curstack is live */ copy = sd.new; /* most recent stackslot created + 1 */ while (--copy > curstack) { - if (copy->varkind == LOCALVAR && copy->varnum == j) + if (copy->varkind == LOCALVAR && jd->reverselocalmap[copy->varnum] == javaindex) goto assume_conflict; } @@ -3370,14 +3314,14 @@ normal_ACONST: assert(!(curstack->flags & PASSTHROUGH)); RELEASE_INDEX(sd, curstack); curstack->varkind = LOCALVAR; - curstack->varnum = j; - curstack->creator->dst.varindex = j; + curstack->varnum = varindex; + curstack->creator->dst.varindex = varindex; goto store_tail; /* revert the coalescing, if it has been done earlier */ assume_conflict: if ((curstack->varkind == LOCALVAR) - && (curstack->varnum == j)) + && (jd->reverselocalmap[curstack->varnum] == javaindex)) { assert(IS_LOCALVAR(curstack)); SET_TEMPVAR(curstack); @@ -3386,14 +3330,11 @@ assume_conflict: /* remember the stack boundary at this store */ store_tail: last_store_boundary[javaindex] = sd.new; -#if defined(ENABLE_SSA) - } /* if (ls != NULL) */ -#endif if (opcode == ICMD_ASTORE && curstack->type == TYPE_RET) - STORE(TYPE_RET, j); + STORE(TYPE_RET, varindex); else - STORE(opcode - ICMD_ISTORE, j); + STORE(opcode - ICMD_ISTORE, varindex); break; /* pop 3 push 0 */ @@ -3405,7 +3346,7 @@ store_tail: COUNT(count_check_bound); COUNT(count_pcmd_mem); - bte = builtintable_get_internal(BUILTIN_canstore); + bte = builtintable_get_internal(BUILTIN_FAST_canstore); md = bte->md; if (md->memuse > rd->memuse) @@ -4064,172 +4005,6 @@ normal_LCMP: OP2_1(TYPE_LNG, TYPE_LNG, TYPE_INT); break; - /* XXX why is this deactivated? */ -#if 0 - case ICMD_FCMPL: - COUNT(count_pcmd_op); - if ((len == 0) || (iptr[1].sx.val.i != 0)) - goto normal_FCMPL; - - switch (iptr[1].opc) { - case ICMD_IFEQ: - iptr->opc = ICMD_IF_FCMPEQ; - icmd_if_fcmpl_tail: - iptr->dst.block = iptr[1].dst.block; - iptr[1].opc = ICMD_NOP; - - OP2_BRANCH(TYPE_FLT, TYPE_FLT); - BRANCH(tbptr); - - COUNT(count_pcmd_bra); - break; - case ICMD_IFNE: - iptr->opc = ICMD_IF_FCMPNE; - goto icmd_if_fcmpl_tail; - case ICMD_IFLT: - iptr->opc = ICMD_IF_FCMPL_LT; - goto icmd_if_fcmpl_tail; - case ICMD_IFGT: - iptr->opc = ICMD_IF_FCMPL_GT; - goto icmd_if_fcmpl_tail; - case ICMD_IFLE: - iptr->opc = ICMD_IF_FCMPL_LE; - goto icmd_if_fcmpl_tail; - case ICMD_IFGE: - iptr->opc = ICMD_IF_FCMPL_GE; - goto icmd_if_fcmpl_tail; - default: - goto normal_FCMPL; - } - break; - -normal_FCMPL: - OPTT2_1(TYPE_FLT, TYPE_FLT, TYPE_INT); - break; - - case ICMD_FCMPG: - COUNT(count_pcmd_op); - if ((len == 0) || (iptr[1].sx.val.i != 0)) - goto normal_FCMPG; - - switch (iptr[1].opc) { - case ICMD_IFEQ: - iptr->opc = ICMD_IF_FCMPEQ; - icmd_if_fcmpg_tail: - iptr->dst.block = iptr[1].dst.block; - iptr[1].opc = ICMD_NOP; - - OP2_BRANCH(TYPE_FLT, TYPE_FLT); - BRANCH(tbptr); - - COUNT(count_pcmd_bra); - break; - case ICMD_IFNE: - iptr->opc = ICMD_IF_FCMPNE; - goto icmd_if_fcmpg_tail; - case ICMD_IFLT: - iptr->opc = ICMD_IF_FCMPG_LT; - goto icmd_if_fcmpg_tail; - case ICMD_IFGT: - iptr->opc = ICMD_IF_FCMPG_GT; - goto icmd_if_fcmpg_tail; - case ICMD_IFLE: - iptr->opc = ICMD_IF_FCMPG_LE; - goto icmd_if_fcmpg_tail; - case ICMD_IFGE: - iptr->opc = ICMD_IF_FCMPG_GE; - goto icmd_if_fcmpg_tail; - default: - goto normal_FCMPG; - } - break; - -normal_FCMPG: - OP2_1(TYPE_FLT, TYPE_FLT, TYPE_INT); - break; - - case ICMD_DCMPL: - COUNT(count_pcmd_op); - if ((len == 0) || (iptr[1].sx.val.i != 0)) - goto normal_DCMPL; - - switch (iptr[1].opc) { - case ICMD_IFEQ: - iptr->opc = ICMD_IF_DCMPEQ; - icmd_if_dcmpl_tail: - iptr->dst.block = iptr[1].dst.block; - iptr[1].opc = ICMD_NOP; - - OP2_BRANCH(TYPE_DBL, TYPE_DBL); - BRANCH(tbptr); - - COUNT(count_pcmd_bra); - break; - case ICMD_IFNE: - iptr->opc = ICMD_IF_DCMPNE; - goto icmd_if_dcmpl_tail; - case ICMD_IFLT: - iptr->opc = ICMD_IF_DCMPL_LT; - goto icmd_if_dcmpl_tail; - case ICMD_IFGT: - iptr->opc = ICMD_IF_DCMPL_GT; - goto icmd_if_dcmpl_tail; - case ICMD_IFLE: - iptr->opc = ICMD_IF_DCMPL_LE; - goto icmd_if_dcmpl_tail; - case ICMD_IFGE: - iptr->opc = ICMD_IF_DCMPL_GE; - goto icmd_if_dcmpl_tail; - default: - goto normal_DCMPL; - } - break; - -normal_DCMPL: - OPTT2_1(TYPE_DBL, TYPE_INT); - break; - - case ICMD_DCMPG: - COUNT(count_pcmd_op); - if ((len == 0) || (iptr[1].sx.val.i != 0)) - goto normal_DCMPG; - - switch (iptr[1].opc) { - case ICMD_IFEQ: - iptr->opc = ICMD_IF_DCMPEQ; - icmd_if_dcmpg_tail: - iptr->dst.block = iptr[1].dst.block; - iptr[1].opc = ICMD_NOP; - - OP2_BRANCH(TYPE_DBL, TYPE_DBL); - BRANCH(tbptr); - - COUNT(count_pcmd_bra); - break; - case ICMD_IFNE: - iptr->opc = ICMD_IF_DCMPNE; - goto icmd_if_dcmpg_tail; - case ICMD_IFLT: - iptr->opc = ICMD_IF_DCMPG_LT; - goto icmd_if_dcmpg_tail; - case ICMD_IFGT: - iptr->opc = ICMD_IF_DCMPG_GT; - goto icmd_if_dcmpg_tail; - case ICMD_IFLE: - iptr->opc = ICMD_IF_DCMPG_LE; - goto icmd_if_dcmpg_tail; - case ICMD_IFGE: - iptr->opc = ICMD_IF_DCMPG_GE; - goto icmd_if_dcmpg_tail; - default: - goto normal_DCMPG; - } - break; - -normal_DCMPG: - OP2_1(TYPE_DBL, TYPE_DBL, TYPE_INT); - break; -#else case ICMD_FCMPL: case ICMD_FCMPG: COUNT(count_pcmd_op); @@ -4241,7 +4016,6 @@ normal_DCMPG: COUNT(count_pcmd_op); OP2_1(TYPE_DBL, TYPE_DBL, TYPE_INT); break; -#endif /* pop 1 push 1 */ @@ -4630,7 +4404,6 @@ icmd_BUILTIN: i = stackdepth - 1; for (copy = curstack; copy; i--, copy = copy->prev) { varinfo *v; - s4 t; /* with the new vars rd->interfaces will be removed */ /* and all in and outvars have to be STACKVARS! */ @@ -4638,21 +4411,21 @@ icmd_BUILTIN: /* create an unresolvable conflict */ SET_TEMPVAR(copy); - t = copy->type; + type = copy->type; v = sd.var + copy->varnum; v->flags |= INOUT; /* do not allocate variables for returnAddresses */ - if (t != TYPE_RET) { - if (jd->interface_map[i*5 + t].flags == UNUSED) { + if (type != TYPE_RET) { + if (jd->interface_map[i*5 + type].flags == UNUSED) { /* no interface var until now for this depth and */ /* type */ - jd->interface_map[i*5 + t].flags = v->flags; + jd->interface_map[i*5 + type].flags = v->flags; } else { - jd->interface_map[i*5 + t].flags |= v->flags; + jd->interface_map[i*5 + type].flags |= v->flags; } } @@ -4663,18 +4436,17 @@ icmd_BUILTIN: for (i=0; iindepth; ++i) { varinfo *v = sd.var + sd.bptr->invars[i]; - s4 t; - t = v->type; + type = v->type; - if (t != TYPE_RET) { - if (jd->interface_map[i*5 + t].flags == UNUSED) { + if (type != TYPE_RET) { + if (jd->interface_map[i*5 + type].flags == UNUSED) { /* no interface var until now for this depth and */ /* type */ - jd->interface_map[i*5 + t].flags = v->flags; + jd->interface_map[i*5 + type].flags = v->flags; } else { - jd->interface_map[i*5 + t].flags |= v->flags; + jd->interface_map[i*5 + type].flags |= v->flags; } } } @@ -4976,13 +4748,13 @@ static void stack_verbose_block_exit(stackdata_t *sd, bool superblockend) printf("\n"); } -static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr, stackptr curstack) +static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr, stackelement_t *curstack) { - stackptr sp; + stackelement_t *sp; s4 i; s4 depth; varinfo *v; - stackptr *stack; + stackelement_t **stack; printf(" javalocals "); show_javalocals_array(sd->jd, sd->javalocals, sd->maxlocals, SHOW_STACK); @@ -4992,7 +4764,7 @@ static void stack_verbose_show_state(stackdata_t *sd, instruction *iptr, stackpt i++; depth = i; - stack = MNEW(stackptr, depth); + stack = MNEW(stackelement_t *, depth); for(sp = curstack; sp; sp = sp->prev) stack[--i] = sp;