PR148 again: don't defuse IF_LCMPxx
[cacao.git] / src / vm / jit / stack.c
index 89ae9c0e9578cb81d8f3cbdd3e5ea4fb4418ef8e..40810e0d22ddf122b2e81a3b5b8131987b116a74 100644 (file)
@@ -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 7766 2007-04-19 13:24:48Z michi $
-
 */
 
 
 #include "arch.h"
 #include "md-abi.h"
 
-#include "mm/memory.h"
+#include "mm/memory.hpp"
 
-#include "native/native.h"
+#include "native/native.hpp"
 
-#include "toolbox/logging.h"
+#include "toolbox/logging.hpp"
 
+#include "vm/jit/builtin.hpp"
+#include "vm/exceptions.hpp"
 #include "vm/global.h"
-#include "vm/builtin.h"
-#include "vm/stringlocal.h"
+#include "vm/options.h"
+#include "vm/resolve.hpp"
+#include "vm/string.hpp"
 #include "vm/types.h"
 
+#if defined(ENABLE_STATISTICS)
+# include "vm/statistics.h"
+#endif
+
 #include "vm/jit/abi.h"
 #include "vm/jit/cfg.h"
-#include "vm/jit/codegen-common.h"
-#include "vm/jit/parse.h"
-#include "vm/jit/show.h"
+#include "vm/jit/codegen-common.hpp"
+#include "vm/jit/parse.hpp"
+#include "vm/jit/show.hpp"
 
 #if defined(ENABLE_DISASSEMBLER)
 # include "vm/jit/disass.h"
 #endif
 
-#include "vm/jit/jit.h"
+#include "vm/jit/jit.hpp"
 #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
-
-#include "vmcore/options.h"
-#include "vm/resolve.h"
-
-#if defined(ENABLE_STATISTICS)
-# include "vmcore/statistics.h"
 #endif
 
 /*#define STACK_VERBOSE*/
@@ -95,9 +93,6 @@
 #endif
 
 
-#define MIN(a,b)  (((a) < (b)) ? (a) : (b))
-
-
 /* For returnAddresses we use a field of the typeinfo to store from which  */
 /* subroutine the returnAddress will return, if used.                      */
 /* XXX It would be nicer to use typeinfo.typeclass, but the verifier seems */
@@ -118,7 +113,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 +127,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 +504,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 +514,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 +739,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 +826,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 +1063,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 +1109,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 +1228,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 */
@@ -1669,32 +1667,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 +1878,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;
@@ -2036,14 +2008,12 @@ 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, varindex;
        int           javaindex;
@@ -2056,10 +2026,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;
@@ -2081,10 +2051,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 */
 
@@ -2107,10 +2075,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
@@ -2139,7 +2103,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 */
 
@@ -2323,7 +2287,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;
                                        }
 
@@ -2373,6 +2337,10 @@ icmd_NOP:
                                                sd.jd->returnblock = sd.bptr;
                                                break;
 
+                                       case ICMD_BREAKPOINT:
+                                               OP0_0;
+                                               break;
+
 
                                                /* pop 0 push 1 const */
 
@@ -3180,18 +3148,7 @@ normal_ACONST:
                                                        return false;
                                                }
 #endif
-               
-#if defined(ENABLE_SSA)
-                                               if (ls != NULL) {
-                                                       GET_NEW_VAR(sd, new_index, type);
-                                                       DST(type, new_index);
-                                                       stackdepth++;
-                                               }
-                                               else
-
-#else
                                                LOAD(type, varindex);
-#endif
                                                break;
 
                                                /* pop 2 push 1 */
@@ -3224,23 +3181,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);
@@ -3248,9 +3199,6 @@ normal_ACONST:
                                                        i--;
                                                        copy = copy->prev;
                                                }
-#if defined(ENABLE_SSA)
-                                               }
-#endif
 
                                                iptr->dst.varindex = iptr->s1.varindex;
                                                break;
@@ -3314,18 +3262,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 == varindex))
+                                                               (jd->reverselocalmap[copy->varnum] == javaindex))
                                                        {
-                                                               copy->varkind = TEMPVAR;
                                                                assert(IS_LOCALVAR(copy));
                                                                SET_TEMPVAR(copy);
                                                        }
@@ -3355,7 +3299,7 @@ normal_ACONST:
 
                                                copy = sd.new; /* most recent stackslot created + 1 */
                                                while (--copy > curstack) {
-                                                       if (copy->varkind == LOCALVAR && copy->varnum == varindex)
+                                                       if (copy->varkind == LOCALVAR && jd->reverselocalmap[copy->varnum] == javaindex)
                                                                goto assume_conflict;
                                                }
 
@@ -3378,7 +3322,7 @@ normal_ACONST:
                                                /* revert the coalescing, if it has been done earlier */
 assume_conflict:
                                                if ((curstack->varkind == LOCALVAR)
-                                                       && (curstack->varnum == varindex))
+                                                       && (jd->reverselocalmap[curstack->varnum] == javaindex))
                                                {
                                                        assert(IS_LOCALVAR(curstack));
                                                        SET_TEMPVAR(curstack);
@@ -3387,9 +3331,6 @@ 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, varindex);
@@ -3406,7 +3347,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)
@@ -4062,175 +4003,17 @@ icmd_DUP_X2:
                                                break;
 normal_LCMP:
 #endif /* SUPPORT_LONG_CMP_CONST */
-                                                       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;
+                                               bte = builtintable_get_internal(BUILTIN_lcmp);
 
-                                               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);
+                                               iptr->opc            = ICMD_BUILTIN;
+                                               iptr->flags.bits    &= INS_FLAG_ID_MASK;
+                                               iptr->sx.s23.s3.bte  = bte;
+                                               /* iptr->line is already set */
+                                               code_unflag_leafmethod(code);
+                                               goto icmd_BUILTIN;
 
-                                                       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);
@@ -4242,7 +4025,6 @@ normal_DCMPG:
                                                COUNT(count_pcmd_op);
                                                OP2_1(TYPE_DBL, TYPE_DBL, TYPE_INT);
                                                break;
-#endif
 
                                                /* pop 1 push 1 */
 
@@ -4975,13 +4757,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);
@@ -4991,7 +4773,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;