- if ((iptr[0].val.i == 0x00000002) ||
- (iptr[0].val.i == 0x00000004) ||
- (iptr[0].val.i == 0x00000008) ||
- (iptr[0].val.i == 0x00000010) ||
- (iptr[0].val.i == 0x00000020) ||
- (iptr[0].val.i == 0x00000040) ||
- (iptr[0].val.i == 0x00000080) ||
- (iptr[0].val.i == 0x00000100) ||
- (iptr[0].val.i == 0x00000200) ||
- (iptr[0].val.i == 0x00000400) ||
- (iptr[0].val.i == 0x00000800) ||
- (iptr[0].val.i == 0x00001000) ||
- (iptr[0].val.i == 0x00002000) ||
- (iptr[0].val.i == 0x00004000) ||
- (iptr[0].val.i == 0x00008000) ||
- (iptr[0].val.i == 0x00010000) ||
- (iptr[0].val.i == 0x00020000) ||
- (iptr[0].val.i == 0x00040000) ||
- (iptr[0].val.i == 0x00080000) ||
- (iptr[0].val.i == 0x00100000) ||
- (iptr[0].val.i == 0x00200000) ||
- (iptr[0].val.i == 0x00400000) ||
- (iptr[0].val.i == 0x00800000) ||
- (iptr[0].val.i == 0x01000000) ||
- (iptr[0].val.i == 0x02000000) ||
- (iptr[0].val.i == 0x04000000) ||
- (iptr[0].val.i == 0x08000000) ||
- (iptr[0].val.i == 0x10000000) ||
- (iptr[0].val.i == 0x20000000) ||
- (iptr[0].val.i == 0x40000000) ||
- (iptr[0].val.i == 0x80000000)) {
- iptr[0].opc = ICMD_IREMPOW2;
- iptr[0].val.i -= 1;
- goto icmd_iconst_tail;
- }
- PUSHCONST(TYPE_INT);
- break;
- case ICMD_IAND:
- iptr[0].opc = ICMD_IANDCONST;
- goto icmd_iconst_tail;
- case ICMD_IOR:
- iptr[0].opc = ICMD_IORCONST;
- goto icmd_iconst_tail;
- case ICMD_IXOR:
- iptr[0].opc = ICMD_IXORCONST;
- goto icmd_iconst_tail;
- case ICMD_ISHL:
- iptr[0].opc = ICMD_ISHLCONST;
- goto icmd_iconst_tail;
- case ICMD_ISHR:
- iptr[0].opc = ICMD_ISHRCONST;
- goto icmd_iconst_tail;
- case ICMD_IUSHR:
- iptr[0].opc = ICMD_IUSHRCONST;
- goto icmd_iconst_tail;
- case ICMD_LSHL:
- iptr[0].opc = ICMD_LSHLCONST;
- goto icmd_lconst_tail;
- case ICMD_LSHR:
- iptr[0].opc = ICMD_LSHRCONST;
- goto icmd_lconst_tail;
- case ICMD_LUSHR:
- iptr[0].opc = ICMD_LUSHRCONST;
- goto icmd_lconst_tail;
- case ICMD_IF_ICMPEQ:
- iptr[0].opc = ICMD_IFEQ;
-icmd_if_icmp_tail:
- iptr[0].op1 = iptr[1].op1;
- bptr->icount--;
- len--;
- /* iptr[1].opc = ICMD_NOP; */
- OP1_0(TYPE_INT);
- tbptr = block + block_index[iptr->op1];
+ if ((iptr[0].val.i == 0x00000002) ||
+ (iptr[0].val.i == 0x00000004) ||
+ (iptr[0].val.i == 0x00000008) ||
+ (iptr[0].val.i == 0x00000010) ||
+ (iptr[0].val.i == 0x00000020) ||
+ (iptr[0].val.i == 0x00000040) ||
+ (iptr[0].val.i == 0x00000080) ||
+ (iptr[0].val.i == 0x00000100) ||
+ (iptr[0].val.i == 0x00000200) ||
+ (iptr[0].val.i == 0x00000400) ||
+ (iptr[0].val.i == 0x00000800) ||
+ (iptr[0].val.i == 0x00001000) ||
+ (iptr[0].val.i == 0x00002000) ||
+ (iptr[0].val.i == 0x00004000) ||
+ (iptr[0].val.i == 0x00008000) ||
+ (iptr[0].val.i == 0x00010000) ||
+ (iptr[0].val.i == 0x00020000) ||
+ (iptr[0].val.i == 0x00040000) ||
+ (iptr[0].val.i == 0x00080000) ||
+ (iptr[0].val.i == 0x00100000) ||
+ (iptr[0].val.i == 0x00200000) ||
+ (iptr[0].val.i == 0x00400000) ||
+ (iptr[0].val.i == 0x00800000) ||
+ (iptr[0].val.i == 0x01000000) ||
+ (iptr[0].val.i == 0x02000000) ||
+ (iptr[0].val.i == 0x04000000) ||
+ (iptr[0].val.i == 0x08000000) ||
+ (iptr[0].val.i == 0x10000000) ||
+ (iptr[0].val.i == 0x20000000) ||
+ (iptr[0].val.i == 0x40000000) ||
+ (iptr[0].val.i == 0x80000000)) {
+ iptr[0].opc = ICMD_IREMPOW2;
+ iptr[0].val.i -= 1;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ goto icmd_iconst_tail;
+ }
+ PUSHCONST(TYPE_INT);
+ break;
+ case ICMD_IAND:
+ iptr[0].opc = ICMD_IANDCONST;
+ goto icmd_iconst_tail;
+ case ICMD_IOR:
+ iptr[0].opc = ICMD_IORCONST;
+ goto icmd_iconst_tail;
+ case ICMD_IXOR:
+ iptr[0].opc = ICMD_IXORCONST;
+ goto icmd_iconst_tail;
+ case ICMD_ISHL:
+ iptr[0].opc = ICMD_ISHLCONST;
+ goto icmd_iconst_tail;
+ case ICMD_ISHR:
+ iptr[0].opc = ICMD_ISHRCONST;
+ goto icmd_iconst_tail;
+ case ICMD_IUSHR:
+ iptr[0].opc = ICMD_IUSHRCONST;
+ goto icmd_iconst_tail;
+#if SUPPORT_LONG_SHIFT
+ case ICMD_LSHL:
+ iptr[0].opc = ICMD_LSHLCONST;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ goto icmd_lconst_tail;
+ case ICMD_LSHR:
+ iptr[0].opc = ICMD_LSHRCONST;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ goto icmd_lconst_tail;
+ case ICMD_LUSHR:
+ iptr[0].opc = ICMD_LUSHRCONST;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ goto icmd_lconst_tail;
+#endif
+ case ICMD_IF_ICMPEQ:
+ iptr[0].opc = ICMD_IFEQ;
+ icmd_if_icmp_tail:
+ iptr[0].op1 = iptr[1].op1;
+ bptr->icount--;
+ len--;
+ /* iptr[1].opc = ICMD_NOP; */
+ OP1_0(TYPE_INT);
+ tbptr = m->basicblocks + m->basicblockindex[iptr->op1];
+
+ iptr[0].target = (void *) tbptr;
+
+ MARKREACHED(tbptr, copy);
+ COUNT(count_pcmd_bra);
+ break;
+ case ICMD_IF_ICMPLT:
+ iptr[0].opc = ICMD_IFLT;
+ goto icmd_if_icmp_tail;
+ case ICMD_IF_ICMPLE:
+ iptr[0].opc = ICMD_IFLE;
+ goto icmd_if_icmp_tail;
+ case ICMD_IF_ICMPNE:
+ iptr[0].opc = ICMD_IFNE;
+ goto icmd_if_icmp_tail;
+ case ICMD_IF_ICMPGT:
+ iptr[0].opc = ICMD_IFGT;
+ goto icmd_if_icmp_tail;
+ case ICMD_IF_ICMPGE:
+ iptr[0].opc = ICMD_IFGE;
+ goto icmd_if_icmp_tail;
+
+ case ICMD_IASTORE:
+ iptr[0].opc = ICMD_IASTORECONST;
+ icmd_astore_tail:
+ iptr[1].opc = ICMD_NOP;
+ OPTT2_0(TYPE_INT, TYPE_ADR);
+ COUNT(count_pcmd_op);
+ break;
+ case ICMD_BASTORE:
+ iptr[0].opc = ICMD_BASTORECONST;
+ goto icmd_astore_tail;
+ case ICMD_CASTORE:
+ iptr[0].opc = ICMD_CASTORECONST;
+ goto icmd_astore_tail;
+ case ICMD_SASTORE:
+ iptr[0].opc = ICMD_SASTORECONST;
+ goto icmd_astore_tail;
+
+ default:
+ PUSHCONST(TYPE_INT);
+ }
+ }
+ else
+ PUSHCONST(TYPE_INT);
+ break;
+
+ case ICMD_LCONST:
+ COUNT(count_pcmd_load);
+ if (len > 0) {
+ switch (iptr[1].opc) {
+#if SUPPORT_LONG_ADD
+ case ICMD_LADD:
+ iptr[0].opc = ICMD_LADDCONST;
+ icmd_lconst_tail:
+ iptr[1].opc = ICMD_NOP;
+ OP1_1(TYPE_LNG,TYPE_LNG);
+ COUNT(count_pcmd_op);
+ break;
+ case ICMD_LSUB:
+ iptr[0].opc = ICMD_LSUBCONST;
+ goto icmd_lconst_tail;
+#endif
+#if SUPPORT_LONG_MUL
+ case ICMD_LMUL:
+ iptr[0].opc = ICMD_LMULCONST;
+#if defined(__I386__)
+ method_uses_ecx = true;
+ method_uses_edx = true;
+#endif
+ goto icmd_lconst_tail;
+#endif
+#if SUPPORT_LONG_DIV
+ case ICMD_LDIV:
+ if (iptr[0].val.l == 0x00000002)
+ iptr[0].val.i = 1;
+ else if (iptr[0].val.l == 0x00000004)
+ iptr[0].val.i = 2;
+ else if (iptr[0].val.l == 0x00000008)
+ iptr[0].val.i = 3;
+ else if (iptr[0].val.l == 0x00000010)
+ iptr[0].val.i = 4;
+ else if (iptr[0].val.l == 0x00000020)
+ iptr[0].val.i = 5;
+ else if (iptr[0].val.l == 0x00000040)
+ iptr[0].val.i = 6;
+ else if (iptr[0].val.l == 0x00000080)
+ iptr[0].val.i = 7;
+ else if (iptr[0].val.l == 0x00000100)
+ iptr[0].val.i = 8;
+ else if (iptr[0].val.l == 0x00000200)
+ iptr[0].val.i = 9;
+ else if (iptr[0].val.l == 0x00000400)
+ iptr[0].val.i = 10;
+ else if (iptr[0].val.l == 0x00000800)
+ iptr[0].val.i = 11;
+ else if (iptr[0].val.l == 0x00001000)
+ iptr[0].val.i = 12;
+ else if (iptr[0].val.l == 0x00002000)
+ iptr[0].val.i = 13;
+ else if (iptr[0].val.l == 0x00004000)
+ iptr[0].val.i = 14;
+ else if (iptr[0].val.l == 0x00008000)
+ iptr[0].val.i = 15;
+ else if (iptr[0].val.l == 0x00010000)
+ iptr[0].val.i = 16;
+ else if (iptr[0].val.l == 0x00020000)
+ iptr[0].val.i = 17;
+ else if (iptr[0].val.l == 0x00040000)
+ iptr[0].val.i = 18;
+ else if (iptr[0].val.l == 0x00080000)
+ iptr[0].val.i = 19;
+ else if (iptr[0].val.l == 0x00100000)
+ iptr[0].val.i = 20;
+ else if (iptr[0].val.l == 0x00200000)
+ iptr[0].val.i = 21;
+ else if (iptr[0].val.l == 0x00400000)
+ iptr[0].val.i = 22;
+ else if (iptr[0].val.l == 0x00800000)
+ iptr[0].val.i = 23;
+ else if (iptr[0].val.l == 0x01000000)
+ iptr[0].val.i = 24;
+ else if (iptr[0].val.l == 0x02000000)
+ iptr[0].val.i = 25;
+ else if (iptr[0].val.l == 0x04000000)
+ iptr[0].val.i = 26;
+ else if (iptr[0].val.l == 0x08000000)
+ iptr[0].val.i = 27;
+ else if (iptr[0].val.l == 0x10000000)
+ iptr[0].val.i = 28;
+ else if (iptr[0].val.l == 0x20000000)
+ iptr[0].val.i = 29;
+ else if (iptr[0].val.l == 0x40000000)
+ iptr[0].val.i = 30;
+ else if (iptr[0].val.l == 0x80000000)
+ iptr[0].val.i = 31;
+ else {
+ PUSHCONST(TYPE_LNG);
+ break;
+ }
+ iptr[0].opc = ICMD_LDIVPOW2;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ goto icmd_lconst_tail;
+ case ICMD_LREM:
+#if !defined(NO_DIV_OPT)
+ if (iptr[0].val.l == 0x10001) {
+ iptr[0].opc = ICMD_LREM0X10001;
+ goto icmd_lconst_tail;
+ }
+#endif
+ if ((iptr[0].val.l == 0x00000002) ||
+ (iptr[0].val.l == 0x00000004) ||
+ (iptr[0].val.l == 0x00000008) ||
+ (iptr[0].val.l == 0x00000010) ||
+ (iptr[0].val.l == 0x00000020) ||
+ (iptr[0].val.l == 0x00000040) ||
+ (iptr[0].val.l == 0x00000080) ||
+ (iptr[0].val.l == 0x00000100) ||
+ (iptr[0].val.l == 0x00000200) ||
+ (iptr[0].val.l == 0x00000400) ||
+ (iptr[0].val.l == 0x00000800) ||
+ (iptr[0].val.l == 0x00001000) ||
+ (iptr[0].val.l == 0x00002000) ||
+ (iptr[0].val.l == 0x00004000) ||
+ (iptr[0].val.l == 0x00008000) ||
+ (iptr[0].val.l == 0x00010000) ||
+ (iptr[0].val.l == 0x00020000) ||
+ (iptr[0].val.l == 0x00040000) ||
+ (iptr[0].val.l == 0x00080000) ||
+ (iptr[0].val.l == 0x00100000) ||
+ (iptr[0].val.l == 0x00200000) ||
+ (iptr[0].val.l == 0x00400000) ||
+ (iptr[0].val.l == 0x00800000) ||
+ (iptr[0].val.l == 0x01000000) ||
+ (iptr[0].val.l == 0x02000000) ||
+ (iptr[0].val.l == 0x04000000) ||
+ (iptr[0].val.l == 0x08000000) ||
+ (iptr[0].val.l == 0x10000000) ||
+ (iptr[0].val.l == 0x20000000) ||
+ (iptr[0].val.l == 0x40000000) ||
+ (iptr[0].val.l == 0x80000000)) {
+ iptr[0].opc = ICMD_LREMPOW2;
+ iptr[0].val.l -= 1;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ goto icmd_lconst_tail;
+ }
+ PUSHCONST(TYPE_LNG);
+ break;
+#endif
+#if SUPPORT_LONG_LOG
+ case ICMD_LAND:
+ iptr[0].opc = ICMD_LANDCONST;
+ goto icmd_lconst_tail;
+ case ICMD_LOR:
+ iptr[0].opc = ICMD_LORCONST;
+ goto icmd_lconst_tail;
+ case ICMD_LXOR:
+ iptr[0].opc = ICMD_LXORCONST;
+ goto icmd_lconst_tail;
+#endif
+#if !defined(NOLONG_CONDITIONAL)
+ case ICMD_LCMP:
+ if ((len > 1) && (iptr[2].val.i == 0)) {
+ switch (iptr[2].opc) {
+ case ICMD_IFEQ:
+ iptr[0].opc = ICMD_IF_LEQ;
+#if defined(__I386__)
+ method_uses_ecx = true;
+#endif
+ icmd_lconst_lcmp_tail:
+ iptr[0].op1 = iptr[2].op1;
+ bptr->icount -= 2;
+ len -= 2;
+ /* iptr[1].opc = ICMD_NOP;
+ iptr[2].opc = ICMD_NOP; */
+ OP1_0(TYPE_LNG);
+ tbptr = m->basicblocks + m->basicblockindex[iptr->op1];