- /* pop 0 push 2 dup */
- case ICMD_DUP2:
- /* src == dst->prev->prev */
- /* src->prev == dst->prev->prev->prev */
- /* ---------------- */
- /* src -> dst */
- /* src->prev -> dst->prev */
- /* src & src->prev "continue" living -> so no conflicts */
- /* with dst and dst->prec possible */
-
- /* add the use site for src == dst->prev->prev */
- lsra_from_stack(ls, src, b_index, iindex);
- /* add the use site for src->prev == dst->prev->prev->prev */
- lsra_from_stack(ls, src->prev, b_index, iindex);
-
-
- lsra_new_stack(ls, dst->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
-
- break;
-
- /* pop 2 push 3 dup */
- case ICMD_DUP_X1:
- /* src -> dst */
- /* src->prev -> dst->prev */
- /* src -> dst->prev->prev */
- /* !!!!!!!!!!!!!!!!!!!!!!!!!!!! */
- /* Copy Conflicts possible! */
- /* -> instack [ t1 t0 ] */
- /* -> outstack[ t0 t1 t3 ] */
- /* -> t1->t0, t0->t1, t1->t3 !! */
- /* -> Remove src->prev on iindex+1 instead of iindex! */
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
-
- break;
-
- /* pop 3 push 4 dup */
- case ICMD_DUP_X2:
- /* src -> dst */
- /* src -> dst->prev->prev->prev */
- /* src->prev -> dst->prev */
- /* src->prev->prev -> dst->prev->prev */
- /* Conflicts possible! -> remove srces at iindex + 1 */
- lsra_from_stack(ls, src,b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_from_stack(ls, src->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
-
- break;
-
- /* pop 3 push 5 dup */
- case ICMD_DUP2_X1:
- /* src -> dst */
- /* src -> dst->prev->prev->prev */
- /* src->prev -> dst->prev->prev->prev->prev */
- /* src->prev -> dst->prev */
- /* src->prev->prev -> dst->prev->prev */
- /* Conflicts possible! -> remove srces at iindex + 1 */
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_from_stack(ls, src->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev->prev->prev, b_index,
- iindex);
- lsra_new_stack(ls, dst->prev->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
-
-
- break;
-
- /* pop 4 push 6 dup */
- case ICMD_DUP2_X2:
- /* src -> dst */
- /* src -> dst->prev->prev->prev->prev */
- /* src->prev -> dst->prev->prev->prev->prev->prev */
- /* src->prev -> dst->prev */
- /* src->prev->prev -> dst->prev->prev */
- /* src->prev->prev->prev -> dst->prev->prev->prev */
- /* Conflicts possible! -> remove srcs at iindex + 1 */
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_from_stack(ls, src->prev->prev, b_index, iindex);
- lsra_from_stack(ls, src->prev->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev->prev->prev->prev,
- b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev->prev->prev, b_index,
- iindex);
- lsra_new_stack(ls, dst->prev->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
-
- break;
-
- /* pop 2 push 2 swap */
- case ICMD_SWAP:
- /* src -> dst->prev */
- /* src->prev -> dst */
- /* Conflicts possible -> remove src at iindex + 1 */
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_new_stack(ls, dst->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- /* pop 2 push 1 */
-
- case ICMD_LADD:
- case ICMD_LSUB:
- case ICMD_LMUL:
-
- case ICMD_LOR:
- case ICMD_LAND:
- case ICMD_LXOR:
-
- case ICMD_LSHL:
- case ICMD_LSHR:
- case ICMD_LUSHR:
-
- case ICMD_IADD:
- case ICMD_IMUL:
-
- case ICMD_ISHL:
- case ICMD_ISHR:
- case ICMD_IUSHR:
- case ICMD_IAND:
- case ICMD_IOR:
- case ICMD_IXOR:
-
-
- case ICMD_FADD:
- case ICMD_FSUB:
- case ICMD_FMUL:
-
- case ICMD_DADD:
- case ICMD_DSUB:
- case ICMD_DMUL:
- case ICMD_DDIV:
- case ICMD_DREM:
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- case ICMD_ISUB:
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev,b_index,iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- case ICMD_LDIV:
- case ICMD_LREM:
-
- case ICMD_IDIV:
- case ICMD_IREM:
-
- case ICMD_FDIV:
- case ICMD_FREM:
-
- case ICMD_LCMP:
- case ICMD_FCMPL:
- case ICMD_FCMPG:
- case ICMD_DCMPL:
- case ICMD_DCMPG:
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_from_stack(ls, src->prev, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- /* pop 1 push 1 */
- case ICMD_LADDCONST:
- case ICMD_LSUBCONST:
- case ICMD_LMULCONST:
- case ICMD_LMULPOW2:
- case ICMD_LDIVPOW2:
- case ICMD_LREMPOW2:
- case ICMD_LANDCONST:
- case ICMD_LORCONST:
- case ICMD_LXORCONST:
- case ICMD_LSHLCONST:
- case ICMD_LSHRCONST:
- case ICMD_LUSHRCONST:
-
- case ICMD_IADDCONST:
- case ICMD_ISUBCONST:
- case ICMD_IMULCONST:
- case ICMD_IMULPOW2:
- case ICMD_IDIVPOW2:
- case ICMD_IREMPOW2:
- case ICMD_IANDCONST:
- case ICMD_IORCONST:
- case ICMD_IXORCONST:
- case ICMD_ISHLCONST:
- case ICMD_ISHRCONST:
- case ICMD_IUSHRCONST:
-
-/* case ICMD_IFEQ_ICONST: */
-/* case ICMD_IFNE_ICONST: */
-/* case ICMD_IFLT_ICONST: */
-/* case ICMD_IFGE_ICONST: */
-/* case ICMD_IFGT_ICONST: */
-/* case ICMD_IFLE_ICONST: */
-
- case ICMD_INEG:
- case ICMD_INT2BYTE:
- case ICMD_INT2CHAR:
- case ICMD_INT2SHORT:
- case ICMD_LNEG:
- case ICMD_FNEG:
- case ICMD_DNEG:
-
- case ICMD_I2L:
- case ICMD_I2F:
- case ICMD_I2D:
- case ICMD_L2I:
- case ICMD_L2F:
- case ICMD_L2D:
- case ICMD_F2I:
- case ICMD_F2L:
- case ICMD_F2D:
- case ICMD_D2I:
- case ICMD_D2L:
- case ICMD_D2F:
-
- case ICMD_CHECKCAST:
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- case ICMD_ARRAYLENGTH:
- case ICMD_INSTANCEOF:
-
- case ICMD_NEWARRAY:
- case ICMD_ANEWARRAY:
-
- case ICMD_GETFIELD:
- lsra_from_stack(ls, src, b_index, iindex);
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- /* pop 0 push 1 */
- case ICMD_GETSTATIC:
-
- case ICMD_NEW:
- lsra_new_stack(ls, dst, b_index, iindex);
- break;
-
- /* pop many push any */
-
- case ICMD_INVOKESTATIC:
- case ICMD_INVOKESPECIAL:
- case ICMD_INVOKEVIRTUAL:
- case ICMD_INVOKEINTERFACE: