0001: /*
0002: * ProGuard -- shrinking, optimization, obfuscation, and preverification
0003: * of Java bytecode.
0004: *
0005: * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
0006: *
0007: * This program is free software; you can redistribute it and/or modify it
0008: * under the terms of the GNU General Public License as published by the Free
0009: * Software Foundation; either version 2 of the License, or (at your option)
0010: * any later version.
0011: *
0012: * This program is distributed in the hope that it will be useful, but WITHOUT
0013: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0014: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
0015: * more details.
0016: *
0017: * You should have received a copy of the GNU General Public License along
0018: * with this program; if not, write to the Free Software Foundation, Inc.,
0019: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0020: */
0021: package proguard.optimize.peephole;
0022:
0023: import proguard.classfile.constant.*;
0024: import proguard.classfile.instruction.*;
0025: import proguard.classfile.util.InstructionSequenceMatcher;
0026:
0027: /**
0028: * This class contains a set of instruction sequences and their suggested
0029: * replacements.
0030: *
0031: * @see InstructionSequencesReplacer
0032: * @author Eric Lafortune
0033: */
0034: public class InstructionSequenceConstants {
0035: public static final int X = InstructionSequenceMatcher.X;
0036: public static final int Y = InstructionSequenceMatcher.Y;
0037: public static final int Z = InstructionSequenceMatcher.Z;
0038:
0039: public static final int A = InstructionSequenceMatcher.A;
0040: public static final int B = InstructionSequenceMatcher.B;
0041: public static final int C = InstructionSequenceMatcher.C;
0042: public static final int D = InstructionSequenceMatcher.D;
0043:
0044: private static final int I_32768 = 0;
0045: private static final int I_65536 = 1;
0046: private static final int I_16777216 = 2;
0047:
0048: // private static final int I_0x000000ff
0049: private static final int I_0x0000ff00 = 3;
0050: private static final int I_0x00ff0000 = 4;
0051: private static final int I_0xff000000 = 5;
0052: private static final int I_0x0000ffff = 6;
0053: private static final int I_0xffff0000 = 7;
0054:
0055: private static final int L_M1 = 8;
0056: private static final int L_2 = 9;
0057: private static final int L_4 = 10;
0058: private static final int L_8 = 11;
0059: private static final int L_16 = 12;
0060: private static final int L_32 = 13;
0061: private static final int L_64 = 14;
0062: private static final int L_128 = 15;
0063: private static final int L_256 = 16;
0064: private static final int L_512 = 17;
0065: private static final int L_1024 = 18;
0066: private static final int L_2048 = 19;
0067: private static final int L_4096 = 20;
0068: private static final int L_8192 = 21;
0069: private static final int L_16384 = 22;
0070: private static final int L_32768 = 23;
0071: private static final int L_65536 = 24;
0072: private static final int L_16777216 = 25;
0073: private static final int L_4294967296 = 26;
0074:
0075: private static final int L_0x00000000ffffffff = 27;
0076: private static final int L_0xffffffff00000000 = 28;
0077:
0078: private static final int F_M1 = 29;
0079:
0080: private static final int D_M1 = 30;
0081:
0082: private static final int FIELD_I = 31;
0083: private static final int FIELD_L = 32;
0084: private static final int FIELD_F = 33;
0085: private static final int FIELD_D = 34;
0086:
0087: private static final int NAME_AND_TYPE_I = 35;
0088: private static final int NAME_AND_TYPE_L = 36;
0089: private static final int NAME_AND_TYPE_F = 37;
0090: private static final int NAME_AND_TYPE_D = 38;
0091:
0092: private static final int TYPE_I = 39;
0093: private static final int TYPE_L = 40;
0094: private static final int TYPE_F = 41;
0095: private static final int TYPE_D = 42;
0096:
0097: public static final Constant[] PATTERN_CONSTANTS = new Constant[] {
0098: new IntegerConstant(32768), new IntegerConstant(65536),
0099: new IntegerConstant(16777216),
0100:
0101: new IntegerConstant(0x0000ff00),
0102: new IntegerConstant(0x00ff0000),
0103: new IntegerConstant(0xff000000),
0104: new IntegerConstant(0x0000ffff),
0105: new IntegerConstant(0xffff0000),
0106:
0107: new LongConstant(-1L), new LongConstant(2L),
0108: new LongConstant(4L), new LongConstant(8L),
0109: new LongConstant(16L), new LongConstant(32L),
0110: new LongConstant(64L), new LongConstant(128L),
0111: new LongConstant(256L), new LongConstant(512L),
0112: new LongConstant(1024L), new LongConstant(2048L),
0113: new LongConstant(4096L), new LongConstant(8192L),
0114: new LongConstant(16384L), new LongConstant(32768L),
0115: new LongConstant(65536L), new LongConstant(16777216L),
0116: new LongConstant(4294967296L),
0117:
0118: new LongConstant(0x00000000ffffffffL),
0119: new LongConstant(0xffffffff00000000L),
0120:
0121: new FloatConstant(-1f),
0122:
0123: new DoubleConstant(-1d),
0124:
0125: new FieldrefConstant(X, NAME_AND_TYPE_I, null, null),
0126: new FieldrefConstant(X, NAME_AND_TYPE_L, null, null),
0127: new FieldrefConstant(X, NAME_AND_TYPE_F, null, null),
0128: new FieldrefConstant(X, NAME_AND_TYPE_D, null, null),
0129:
0130: new NameAndTypeConstant(Y, TYPE_I),
0131: new NameAndTypeConstant(Y, TYPE_L),
0132: new NameAndTypeConstant(Y, TYPE_F),
0133: new NameAndTypeConstant(Y, TYPE_D),
0134:
0135: new Utf8Constant("I"), new Utf8Constant("J"),
0136: new Utf8Constant("F"), new Utf8Constant("D"), };
0137:
0138: public static final Instruction[][][] INSTRUCTION_SEQUENCES = new Instruction[][][] {
0139: { // nop = nothing
0140: { new SimpleInstruction(InstructionConstants.OP_NOP), }, {
0141: // Nothing.
0142: }, },
0143: { // i = i = nothing
0144: {
0145: new VariableInstruction(
0146: InstructionConstants.OP_ILOAD, X),
0147: new VariableInstruction(
0148: InstructionConstants.OP_ISTORE, X), },
0149: {
0150: // Nothing.
0151: }, },
0152: { // l = l = nothing
0153: {
0154: new VariableInstruction(
0155: InstructionConstants.OP_LLOAD, X),
0156: new VariableInstruction(
0157: InstructionConstants.OP_LSTORE, X), },
0158: {
0159: // Nothing.
0160: }, },
0161: { // f = f = nothing
0162: {
0163: new VariableInstruction(
0164: InstructionConstants.OP_FLOAD, X),
0165: new VariableInstruction(
0166: InstructionConstants.OP_FSTORE, X), },
0167: {
0168: // Nothing.
0169: }, },
0170: { // d = d = nothing
0171: {
0172: new VariableInstruction(
0173: InstructionConstants.OP_DLOAD, X),
0174: new VariableInstruction(
0175: InstructionConstants.OP_DSTORE, X), },
0176: {
0177: // Nothing.
0178: }, },
0179: { // a = a = nothing
0180: {
0181: new VariableInstruction(
0182: InstructionConstants.OP_ALOAD, X),
0183: new VariableInstruction(
0184: InstructionConstants.OP_ASTORE, X), },
0185: {
0186: // Nothing.
0187: }, },
0188: { // istore/istore = pop/istore
0189: {
0190: new VariableInstruction(
0191: InstructionConstants.OP_ISTORE, X),
0192: new VariableInstruction(
0193: InstructionConstants.OP_ISTORE, X), },
0194: {
0195: new SimpleInstruction(
0196: InstructionConstants.OP_POP),
0197: new VariableInstruction(
0198: InstructionConstants.OP_ISTORE, X), }, },
0199: { // lstore/lstore = pop2/lstore
0200: {
0201: new VariableInstruction(
0202: InstructionConstants.OP_LSTORE, X),
0203: new VariableInstruction(
0204: InstructionConstants.OP_LSTORE, X), },
0205: {
0206: new SimpleInstruction(
0207: InstructionConstants.OP_POP2),
0208: new VariableInstruction(
0209: InstructionConstants.OP_LSTORE, X), }, },
0210: { // fstore/fstore = pop/fstore
0211: {
0212: new VariableInstruction(
0213: InstructionConstants.OP_FSTORE, X),
0214: new VariableInstruction(
0215: InstructionConstants.OP_FSTORE, X), },
0216: {
0217: new SimpleInstruction(
0218: InstructionConstants.OP_POP),
0219: new VariableInstruction(
0220: InstructionConstants.OP_FSTORE, X), }, },
0221: { // dstore/dstore = pop2/dstore
0222: {
0223: new VariableInstruction(
0224: InstructionConstants.OP_DSTORE, X),
0225: new VariableInstruction(
0226: InstructionConstants.OP_DSTORE, X), },
0227: {
0228: new SimpleInstruction(
0229: InstructionConstants.OP_POP2),
0230: new VariableInstruction(
0231: InstructionConstants.OP_DSTORE, X), }, },
0232: { // astore/astore = pop/astore
0233: {
0234: new VariableInstruction(
0235: InstructionConstants.OP_ASTORE, X),
0236: new VariableInstruction(
0237: InstructionConstants.OP_ASTORE, X), },
0238: {
0239: new SimpleInstruction(
0240: InstructionConstants.OP_POP),
0241: new VariableInstruction(
0242: InstructionConstants.OP_ASTORE, X), }, },
0243: { // istore/iload = dup/istore
0244: {
0245: new VariableInstruction(
0246: InstructionConstants.OP_ISTORE, X),
0247: new VariableInstruction(
0248: InstructionConstants.OP_ILOAD, X), },
0249: {
0250: new SimpleInstruction(
0251: InstructionConstants.OP_DUP),
0252: new VariableInstruction(
0253: InstructionConstants.OP_ISTORE, X), }, },
0254: { // lstore/lload = dup2/lstore
0255: {
0256: new VariableInstruction(
0257: InstructionConstants.OP_LSTORE, X),
0258: new VariableInstruction(
0259: InstructionConstants.OP_LLOAD, X), },
0260: {
0261: new SimpleInstruction(
0262: InstructionConstants.OP_DUP2),
0263: new VariableInstruction(
0264: InstructionConstants.OP_LSTORE, X), }, },
0265: { // fstore/fload = dup/fstore
0266: {
0267: new VariableInstruction(
0268: InstructionConstants.OP_FSTORE, X),
0269: new VariableInstruction(
0270: InstructionConstants.OP_FLOAD, X), },
0271: {
0272: new SimpleInstruction(
0273: InstructionConstants.OP_DUP),
0274: new VariableInstruction(
0275: InstructionConstants.OP_FSTORE, X), }, },
0276: { // dstore/dload = dup2/dstore
0277: {
0278: new VariableInstruction(
0279: InstructionConstants.OP_DSTORE, X),
0280: new VariableInstruction(
0281: InstructionConstants.OP_DLOAD, X), },
0282: {
0283: new SimpleInstruction(
0284: InstructionConstants.OP_DUP2),
0285: new VariableInstruction(
0286: InstructionConstants.OP_DSTORE, X), }, },
0287: { // astore/aload = dup/astore
0288: {
0289: new VariableInstruction(
0290: InstructionConstants.OP_ASTORE, X),
0291: new VariableInstruction(
0292: InstructionConstants.OP_ALOAD, X), },
0293: {
0294: new SimpleInstruction(
0295: InstructionConstants.OP_DUP),
0296: new VariableInstruction(
0297: InstructionConstants.OP_ASTORE, X), }, },
0298: { // c + i = i + c
0299: {
0300: new SimpleInstruction(
0301: InstructionConstants.OP_ICONST_0, A),
0302: new VariableInstruction(
0303: InstructionConstants.OP_ILOAD, X),
0304: new SimpleInstruction(
0305: InstructionConstants.OP_IADD), },
0306: {
0307: new VariableInstruction(
0308: InstructionConstants.OP_ILOAD, X),
0309: new SimpleInstruction(
0310: InstructionConstants.OP_ICONST_0, A),
0311: new SimpleInstruction(
0312: InstructionConstants.OP_IADD), }, },
0313: { // b + i = i + b
0314: {
0315: new SimpleInstruction(
0316: InstructionConstants.OP_BIPUSH, A),
0317: new VariableInstruction(
0318: InstructionConstants.OP_ILOAD, X),
0319: new SimpleInstruction(
0320: InstructionConstants.OP_IADD), },
0321: {
0322: new VariableInstruction(
0323: InstructionConstants.OP_ILOAD, X),
0324: new SimpleInstruction(
0325: InstructionConstants.OP_BIPUSH, A),
0326: new SimpleInstruction(
0327: InstructionConstants.OP_IADD), }, },
0328: { // s + i = i + s
0329: {
0330: new SimpleInstruction(
0331: InstructionConstants.OP_SIPUSH, A),
0332: new VariableInstruction(
0333: InstructionConstants.OP_ILOAD, X),
0334: new SimpleInstruction(
0335: InstructionConstants.OP_IADD), },
0336: {
0337: new VariableInstruction(
0338: InstructionConstants.OP_ILOAD, X),
0339: new SimpleInstruction(
0340: InstructionConstants.OP_SIPUSH, A),
0341: new SimpleInstruction(
0342: InstructionConstants.OP_IADD), }, },
0343: { // c + i = i + c
0344: {
0345: new ConstantInstruction(
0346: InstructionConstants.OP_LDC, A),
0347: new VariableInstruction(
0348: InstructionConstants.OP_ILOAD, X),
0349: new SimpleInstruction(
0350: InstructionConstants.OP_IADD), },
0351: {
0352: new VariableInstruction(
0353: InstructionConstants.OP_ILOAD, X),
0354: new ConstantInstruction(
0355: InstructionConstants.OP_LDC, A),
0356: new SimpleInstruction(
0357: InstructionConstants.OP_IADD), }, },
0358: { // c * i = i * c
0359: {
0360: new SimpleInstruction(
0361: InstructionConstants.OP_ICONST_0, A),
0362: new VariableInstruction(
0363: InstructionConstants.OP_ILOAD, X),
0364: new SimpleInstruction(
0365: InstructionConstants.OP_IMUL), },
0366: {
0367: new VariableInstruction(
0368: InstructionConstants.OP_ILOAD, X),
0369: new SimpleInstruction(
0370: InstructionConstants.OP_ICONST_0, A),
0371: new SimpleInstruction(
0372: InstructionConstants.OP_IMUL), }, },
0373: { // b * i = i * b
0374: {
0375: new SimpleInstruction(
0376: InstructionConstants.OP_BIPUSH, A),
0377: new VariableInstruction(
0378: InstructionConstants.OP_ILOAD, X),
0379: new SimpleInstruction(
0380: InstructionConstants.OP_IMUL), },
0381: {
0382: new VariableInstruction(
0383: InstructionConstants.OP_ILOAD, X),
0384: new SimpleInstruction(
0385: InstructionConstants.OP_BIPUSH, A),
0386: new SimpleInstruction(
0387: InstructionConstants.OP_IMUL), }, },
0388: { // s * i = i * s
0389: {
0390: new SimpleInstruction(
0391: InstructionConstants.OP_SIPUSH, A),
0392: new VariableInstruction(
0393: InstructionConstants.OP_ILOAD, X),
0394: new SimpleInstruction(
0395: InstructionConstants.OP_IMUL), },
0396: {
0397: new VariableInstruction(
0398: InstructionConstants.OP_ILOAD, X),
0399: new SimpleInstruction(
0400: InstructionConstants.OP_SIPUSH, A),
0401: new SimpleInstruction(
0402: InstructionConstants.OP_IMUL), }, },
0403: { // c * i = i * c
0404: {
0405: new ConstantInstruction(
0406: InstructionConstants.OP_LDC, A),
0407: new VariableInstruction(
0408: InstructionConstants.OP_ILOAD, X),
0409: new SimpleInstruction(
0410: InstructionConstants.OP_IMUL), },
0411: {
0412: new VariableInstruction(
0413: InstructionConstants.OP_ILOAD, X),
0414: new ConstantInstruction(
0415: InstructionConstants.OP_LDC, A),
0416: new SimpleInstruction(
0417: InstructionConstants.OP_IMUL), }, },
0418: { // c + l = l + c
0419: {
0420: new SimpleInstruction(
0421: InstructionConstants.OP_LCONST_0, A),
0422: new VariableInstruction(
0423: InstructionConstants.OP_LLOAD, X),
0424: new SimpleInstruction(
0425: InstructionConstants.OP_LADD), },
0426: {
0427: new VariableInstruction(
0428: InstructionConstants.OP_LLOAD, X),
0429: new SimpleInstruction(
0430: InstructionConstants.OP_LCONST_0, A),
0431: new SimpleInstruction(
0432: InstructionConstants.OP_LADD), }, },
0433: { // c + l = l + c
0434: {
0435: new ConstantInstruction(
0436: InstructionConstants.OP_LDC2_W, A),
0437: new VariableInstruction(
0438: InstructionConstants.OP_LLOAD, X),
0439: new SimpleInstruction(
0440: InstructionConstants.OP_LADD), },
0441: {
0442: new VariableInstruction(
0443: InstructionConstants.OP_LLOAD, X),
0444: new ConstantInstruction(
0445: InstructionConstants.OP_LDC2_W, A),
0446: new SimpleInstruction(
0447: InstructionConstants.OP_LADD), }, },
0448: { // c * l = l * c
0449: {
0450: new SimpleInstruction(
0451: InstructionConstants.OP_LCONST_0, A),
0452: new VariableInstruction(
0453: InstructionConstants.OP_LLOAD, X),
0454: new SimpleInstruction(
0455: InstructionConstants.OP_LMUL), },
0456: {
0457: new VariableInstruction(
0458: InstructionConstants.OP_LLOAD, X),
0459: new SimpleInstruction(
0460: InstructionConstants.OP_LCONST_0, A),
0461: new SimpleInstruction(
0462: InstructionConstants.OP_LMUL), }, },
0463: { // c + f = f + c
0464: {
0465: new SimpleInstruction(
0466: InstructionConstants.OP_FCONST_0, A),
0467: new VariableInstruction(
0468: InstructionConstants.OP_FLOAD, X),
0469: new SimpleInstruction(
0470: InstructionConstants.OP_FADD), },
0471: {
0472: new VariableInstruction(
0473: InstructionConstants.OP_FLOAD, X),
0474: new SimpleInstruction(
0475: InstructionConstants.OP_FCONST_0, A),
0476: new SimpleInstruction(
0477: InstructionConstants.OP_FADD), }, },
0478: { // c + f = f + c
0479: {
0480: new ConstantInstruction(
0481: InstructionConstants.OP_LDC, A),
0482: new VariableInstruction(
0483: InstructionConstants.OP_FLOAD, X),
0484: new SimpleInstruction(
0485: InstructionConstants.OP_FADD), },
0486: {
0487: new VariableInstruction(
0488: InstructionConstants.OP_FLOAD, X),
0489: new ConstantInstruction(
0490: InstructionConstants.OP_LDC, A),
0491: new SimpleInstruction(
0492: InstructionConstants.OP_FADD), }, },
0493: { // c * f = f * c
0494: {
0495: new SimpleInstruction(
0496: InstructionConstants.OP_FCONST_0, A),
0497: new VariableInstruction(
0498: InstructionConstants.OP_FLOAD, X),
0499: new SimpleInstruction(
0500: InstructionConstants.OP_FMUL), },
0501: {
0502: new VariableInstruction(
0503: InstructionConstants.OP_FLOAD, X),
0504: new SimpleInstruction(
0505: InstructionConstants.OP_FCONST_0, A),
0506: new SimpleInstruction(
0507: InstructionConstants.OP_FMUL), }, },
0508: { // c * f = f * c
0509: {
0510: new ConstantInstruction(
0511: InstructionConstants.OP_LDC, A),
0512: new VariableInstruction(
0513: InstructionConstants.OP_FLOAD, X),
0514: new SimpleInstruction(
0515: InstructionConstants.OP_LMUL), },
0516: {
0517: new VariableInstruction(
0518: InstructionConstants.OP_FLOAD, X),
0519: new ConstantInstruction(
0520: InstructionConstants.OP_LDC, A),
0521: new SimpleInstruction(
0522: InstructionConstants.OP_LMUL), }, },
0523: { // c + d = d + c
0524: {
0525: new SimpleInstruction(
0526: InstructionConstants.OP_DCONST_0, A),
0527: new VariableInstruction(
0528: InstructionConstants.OP_DLOAD, X),
0529: new SimpleInstruction(
0530: InstructionConstants.OP_DADD), },
0531: {
0532: new VariableInstruction(
0533: InstructionConstants.OP_DLOAD, X),
0534: new SimpleInstruction(
0535: InstructionConstants.OP_DCONST_0, A),
0536: new SimpleInstruction(
0537: InstructionConstants.OP_DADD), }, },
0538: { // c + d = d + c
0539: {
0540: new ConstantInstruction(
0541: InstructionConstants.OP_LDC2_W, A),
0542: new VariableInstruction(
0543: InstructionConstants.OP_DLOAD, X),
0544: new SimpleInstruction(
0545: InstructionConstants.OP_DADD), },
0546: {
0547: new VariableInstruction(
0548: InstructionConstants.OP_DLOAD, X),
0549: new ConstantInstruction(
0550: InstructionConstants.OP_LDC2_W, A),
0551: new SimpleInstruction(
0552: InstructionConstants.OP_DADD), }, },
0553: { // c * d = d * c
0554: {
0555: new SimpleInstruction(
0556: InstructionConstants.OP_DCONST_0, A),
0557: new VariableInstruction(
0558: InstructionConstants.OP_DLOAD, X),
0559: new SimpleInstruction(
0560: InstructionConstants.OP_DMUL), },
0561: {
0562: new VariableInstruction(
0563: InstructionConstants.OP_DLOAD, X),
0564: new SimpleInstruction(
0565: InstructionConstants.OP_DCONST_0, A),
0566: new SimpleInstruction(
0567: InstructionConstants.OP_DMUL), }, },
0568: { // c * d = d * c
0569: {
0570: new ConstantInstruction(
0571: InstructionConstants.OP_LDC2_W, A),
0572: new VariableInstruction(
0573: InstructionConstants.OP_DLOAD, X),
0574: new SimpleInstruction(
0575: InstructionConstants.OP_DMUL), },
0576: {
0577: new VariableInstruction(
0578: InstructionConstants.OP_DLOAD, X),
0579: new ConstantInstruction(
0580: InstructionConstants.OP_LDC2_W, A),
0581: new SimpleInstruction(
0582: InstructionConstants.OP_DMUL), }, },
0583: { // i = i + c = i += c
0584: {
0585: new VariableInstruction(
0586: InstructionConstants.OP_ILOAD, X),
0587: new SimpleInstruction(
0588: InstructionConstants.OP_ICONST_0, A),
0589: new SimpleInstruction(
0590: InstructionConstants.OP_IADD),
0591: new VariableInstruction(
0592: InstructionConstants.OP_ISTORE, X), },
0593: { new VariableInstruction(
0594: InstructionConstants.OP_IINC, X, A), }, },
0595: { // i = i + b = i += b
0596: {
0597: new VariableInstruction(
0598: InstructionConstants.OP_ILOAD, X),
0599: new SimpleInstruction(
0600: InstructionConstants.OP_BIPUSH, A),
0601: new SimpleInstruction(
0602: InstructionConstants.OP_IADD),
0603: new VariableInstruction(
0604: InstructionConstants.OP_ISTORE, X), },
0605: { new VariableInstruction(
0606: InstructionConstants.OP_IINC, X, A), }, },
0607: { // i = i + s = i += s
0608: {
0609: new VariableInstruction(
0610: InstructionConstants.OP_ILOAD, X),
0611: new SimpleInstruction(
0612: InstructionConstants.OP_SIPUSH, A),
0613: new SimpleInstruction(
0614: InstructionConstants.OP_IADD),
0615: new VariableInstruction(
0616: InstructionConstants.OP_ISTORE, X), },
0617: { new VariableInstruction(
0618: InstructionConstants.OP_IINC, X, A), }, },
0619: { // i = i - -1 = i++
0620: {
0621: new VariableInstruction(
0622: InstructionConstants.OP_ILOAD, X),
0623: new SimpleInstruction(
0624: InstructionConstants.OP_ICONST_M1),
0625: new SimpleInstruction(
0626: InstructionConstants.OP_ISUB),
0627: new VariableInstruction(
0628: InstructionConstants.OP_ISTORE, X), },
0629: { new VariableInstruction(
0630: InstructionConstants.OP_IINC, X, 1), }, },
0631: { // i = i - 1 = i--
0632: {
0633: new VariableInstruction(
0634: InstructionConstants.OP_ILOAD, X),
0635: new SimpleInstruction(
0636: InstructionConstants.OP_ICONST_1),
0637: new SimpleInstruction(
0638: InstructionConstants.OP_ISUB),
0639: new VariableInstruction(
0640: InstructionConstants.OP_ISTORE, X), },
0641: { new VariableInstruction(
0642: InstructionConstants.OP_IINC, X, -1), }, },
0643: { // i = i - 2 = i -= 2
0644: {
0645: new VariableInstruction(
0646: InstructionConstants.OP_ILOAD, X),
0647: new SimpleInstruction(
0648: InstructionConstants.OP_ICONST_2),
0649: new SimpleInstruction(
0650: InstructionConstants.OP_ISUB),
0651: new VariableInstruction(
0652: InstructionConstants.OP_ISTORE, X), },
0653: { new VariableInstruction(
0654: InstructionConstants.OP_IINC, X, -2), }, },
0655: { // i = i - 3 = i -= 3
0656: {
0657: new VariableInstruction(
0658: InstructionConstants.OP_ILOAD, X),
0659: new SimpleInstruction(
0660: InstructionConstants.OP_ICONST_3),
0661: new SimpleInstruction(
0662: InstructionConstants.OP_ISUB),
0663: new VariableInstruction(
0664: InstructionConstants.OP_ISTORE, X), },
0665: { new VariableInstruction(
0666: InstructionConstants.OP_IINC, X, -3), }, },
0667: { // i = i - 4 = i -= 4
0668: {
0669: new VariableInstruction(
0670: InstructionConstants.OP_ILOAD, X),
0671: new SimpleInstruction(
0672: InstructionConstants.OP_ICONST_4),
0673: new SimpleInstruction(
0674: InstructionConstants.OP_ISUB),
0675: new VariableInstruction(
0676: InstructionConstants.OP_ISTORE, X), },
0677: { new VariableInstruction(
0678: InstructionConstants.OP_IINC, X, -4), }, },
0679: { // i = i - 5 = i -= 5
0680: {
0681: new VariableInstruction(
0682: InstructionConstants.OP_ILOAD, X),
0683: new SimpleInstruction(
0684: InstructionConstants.OP_ICONST_5),
0685: new SimpleInstruction(
0686: InstructionConstants.OP_ISUB),
0687: new VariableInstruction(
0688: InstructionConstants.OP_ISTORE, X), },
0689: { new VariableInstruction(
0690: InstructionConstants.OP_IINC, X, -5), }, },
0691: { // ... + 0 = ...
0692: {
0693: new SimpleInstruction(
0694: InstructionConstants.OP_ICONST_0),
0695: new SimpleInstruction(
0696: InstructionConstants.OP_IADD), }, {
0697: // Nothing.
0698: }, },
0699: { // ... + 0L = ...
0700: {
0701: new SimpleInstruction(
0702: InstructionConstants.OP_LCONST_0),
0703: new SimpleInstruction(
0704: InstructionConstants.OP_LADD), }, {
0705: // Nothing.
0706: }, },
0707: { // ... + 0f = ...
0708: {
0709: new SimpleInstruction(
0710: InstructionConstants.OP_FCONST_0),
0711: new SimpleInstruction(
0712: InstructionConstants.OP_FADD), }, {
0713: // Nothing.
0714: }, },
0715: { // ... + 0d = ...
0716: {
0717: new SimpleInstruction(
0718: InstructionConstants.OP_DCONST_0),
0719: new SimpleInstruction(
0720: InstructionConstants.OP_DADD), }, {
0721: // Nothing.
0722: }, },
0723: { // ... - 0 = ...
0724: {
0725: new SimpleInstruction(
0726: InstructionConstants.OP_ICONST_0),
0727: new SimpleInstruction(
0728: InstructionConstants.OP_ISUB), }, {
0729: // Nothing.
0730: }, },
0731: { // ... - 0L = ...
0732: {
0733: new SimpleInstruction(
0734: InstructionConstants.OP_LCONST_0),
0735: new SimpleInstruction(
0736: InstructionConstants.OP_LSUB), }, {
0737: // Nothing.
0738: }, },
0739: { // ... - 0f = ...
0740: {
0741: new SimpleInstruction(
0742: InstructionConstants.OP_FCONST_0),
0743: new SimpleInstruction(
0744: InstructionConstants.OP_FSUB), }, {
0745: // Nothing.
0746: }, },
0747: { // ... - 0d = ...
0748: {
0749: new SimpleInstruction(
0750: InstructionConstants.OP_DCONST_0),
0751: new SimpleInstruction(
0752: InstructionConstants.OP_DSUB), }, {
0753: // Nothing.
0754: }, },
0755: { // ... * -1 = -...
0756: {
0757: new SimpleInstruction(
0758: InstructionConstants.OP_ICONST_M1),
0759: new SimpleInstruction(
0760: InstructionConstants.OP_IMUL), },
0761: { new SimpleInstruction(
0762: InstructionConstants.OP_INEG), }, },
0763: { // ... * 0 = 0
0764: {
0765: new SimpleInstruction(
0766: InstructionConstants.OP_ICONST_0),
0767: new SimpleInstruction(
0768: InstructionConstants.OP_IMUL), },
0769: {
0770: new SimpleInstruction(
0771: InstructionConstants.OP_POP),
0772: new SimpleInstruction(
0773: InstructionConstants.OP_ICONST_0), }, },
0774: { // ... * 1 = ...
0775: {
0776: new SimpleInstruction(
0777: InstructionConstants.OP_ICONST_1),
0778: new SimpleInstruction(
0779: InstructionConstants.OP_IMUL), }, {
0780: // Nothing.
0781: }, },
0782: { // ... * 2 = ... << 1
0783: {
0784: new SimpleInstruction(
0785: InstructionConstants.OP_ICONST_2),
0786: new SimpleInstruction(
0787: InstructionConstants.OP_IMUL), },
0788: {
0789: new SimpleInstruction(
0790: InstructionConstants.OP_ICONST_1),
0791: new SimpleInstruction(
0792: InstructionConstants.OP_ISHL), }, },
0793: { // ... * 4 = ... << 2
0794: {
0795: new SimpleInstruction(
0796: InstructionConstants.OP_ICONST_4),
0797: new SimpleInstruction(
0798: InstructionConstants.OP_IMUL), },
0799: {
0800: new SimpleInstruction(
0801: InstructionConstants.OP_ICONST_2),
0802: new SimpleInstruction(
0803: InstructionConstants.OP_ISHL), }, },
0804: { // ... * 8 = ... << 3
0805: {
0806: new SimpleInstruction(
0807: InstructionConstants.OP_BIPUSH, 8),
0808: new SimpleInstruction(
0809: InstructionConstants.OP_IMUL), },
0810: {
0811: new SimpleInstruction(
0812: InstructionConstants.OP_ICONST_3),
0813: new SimpleInstruction(
0814: InstructionConstants.OP_ISHL), }, },
0815: { // ... * 16 = ... << 4
0816: {
0817: new SimpleInstruction(
0818: InstructionConstants.OP_BIPUSH, 16),
0819: new SimpleInstruction(
0820: InstructionConstants.OP_IMUL), },
0821: {
0822: new SimpleInstruction(
0823: InstructionConstants.OP_BIPUSH, 4),
0824: new SimpleInstruction(
0825: InstructionConstants.OP_ISHL), }, },
0826: { // ... * 32 = ... << 5
0827: {
0828: new SimpleInstruction(
0829: InstructionConstants.OP_BIPUSH, 32),
0830: new SimpleInstruction(
0831: InstructionConstants.OP_IMUL), },
0832: {
0833: new SimpleInstruction(
0834: InstructionConstants.OP_BIPUSH, 5),
0835: new SimpleInstruction(
0836: InstructionConstants.OP_ISHL), }, },
0837: { // ... * 64 = ... << 6
0838: {
0839: new SimpleInstruction(
0840: InstructionConstants.OP_BIPUSH, 64),
0841: new SimpleInstruction(
0842: InstructionConstants.OP_IMUL), },
0843: {
0844: new SimpleInstruction(
0845: InstructionConstants.OP_BIPUSH, 6),
0846: new SimpleInstruction(
0847: InstructionConstants.OP_ISHL), }, },
0848: { // ... * 128 = ... << 7
0849: {
0850: new SimpleInstruction(
0851: InstructionConstants.OP_SIPUSH, 128),
0852: new SimpleInstruction(
0853: InstructionConstants.OP_IMUL), },
0854: {
0855: new SimpleInstruction(
0856: InstructionConstants.OP_BIPUSH, 7),
0857: new SimpleInstruction(
0858: InstructionConstants.OP_ISHL), }, },
0859: { // ... * 256 = ... << 8
0860: {
0861: new SimpleInstruction(
0862: InstructionConstants.OP_SIPUSH, 256),
0863: new SimpleInstruction(
0864: InstructionConstants.OP_IMUL), },
0865: {
0866: new SimpleInstruction(
0867: InstructionConstants.OP_BIPUSH, 8),
0868: new SimpleInstruction(
0869: InstructionConstants.OP_ISHL), }, },
0870: { // ... * 512 = ... << 9
0871: {
0872: new SimpleInstruction(
0873: InstructionConstants.OP_SIPUSH, 512),
0874: new SimpleInstruction(
0875: InstructionConstants.OP_IMUL), },
0876: {
0877: new SimpleInstruction(
0878: InstructionConstants.OP_BIPUSH, 9),
0879: new SimpleInstruction(
0880: InstructionConstants.OP_ISHL), }, },
0881: { // ... * 1024 = ... << 10
0882: {
0883: new SimpleInstruction(
0884: InstructionConstants.OP_SIPUSH,
0885: 1024),
0886: new SimpleInstruction(
0887: InstructionConstants.OP_IMUL), },
0888: {
0889: new SimpleInstruction(
0890: InstructionConstants.OP_BIPUSH, 10),
0891: new SimpleInstruction(
0892: InstructionConstants.OP_ISHL), }, },
0893: { // ... * 2048 = ... << 11
0894: {
0895: new SimpleInstruction(
0896: InstructionConstants.OP_SIPUSH,
0897: 2048),
0898: new SimpleInstruction(
0899: InstructionConstants.OP_IMUL), },
0900: {
0901: new SimpleInstruction(
0902: InstructionConstants.OP_BIPUSH, 11),
0903: new SimpleInstruction(
0904: InstructionConstants.OP_ISHL), }, },
0905: { // ... * 4096 = ... << 12
0906: {
0907: new SimpleInstruction(
0908: InstructionConstants.OP_SIPUSH,
0909: 4096),
0910: new SimpleInstruction(
0911: InstructionConstants.OP_IMUL), },
0912: {
0913: new SimpleInstruction(
0914: InstructionConstants.OP_BIPUSH, 12),
0915: new SimpleInstruction(
0916: InstructionConstants.OP_ISHL), }, },
0917: { // ... * 8192 = ... << 13
0918: {
0919: new SimpleInstruction(
0920: InstructionConstants.OP_SIPUSH,
0921: 8192),
0922: new SimpleInstruction(
0923: InstructionConstants.OP_IMUL), },
0924: {
0925: new SimpleInstruction(
0926: InstructionConstants.OP_BIPUSH, 13),
0927: new SimpleInstruction(
0928: InstructionConstants.OP_ISHL), }, },
0929: { // ... * 16384 = ... << 14
0930: {
0931: new SimpleInstruction(
0932: InstructionConstants.OP_SIPUSH,
0933: 16384),
0934: new SimpleInstruction(
0935: InstructionConstants.OP_IMUL), },
0936: {
0937: new SimpleInstruction(
0938: InstructionConstants.OP_BIPUSH, 14),
0939: new SimpleInstruction(
0940: InstructionConstants.OP_ISHL), }, },
0941: { // ... * 32768 = ... << 15
0942: {
0943: new ConstantInstruction(
0944: InstructionConstants.OP_LDC,
0945: I_32768),
0946: new SimpleInstruction(
0947: InstructionConstants.OP_IMUL), },
0948: {
0949: new SimpleInstruction(
0950: InstructionConstants.OP_BIPUSH, 15),
0951: new SimpleInstruction(
0952: InstructionConstants.OP_ISHL), }, },
0953: { // ... * 65536 = ... << 16
0954: {
0955: new ConstantInstruction(
0956: InstructionConstants.OP_LDC,
0957: I_65536),
0958: new SimpleInstruction(
0959: InstructionConstants.OP_IMUL), },
0960: {
0961: new SimpleInstruction(
0962: InstructionConstants.OP_BIPUSH, 16),
0963: new SimpleInstruction(
0964: InstructionConstants.OP_ISHL), }, },
0965: { // ... * 16777216 = ... << 24
0966: {
0967: new ConstantInstruction(
0968: InstructionConstants.OP_LDC,
0969: I_16777216),
0970: new SimpleInstruction(
0971: InstructionConstants.OP_IMUL), },
0972: {
0973: new SimpleInstruction(
0974: InstructionConstants.OP_BIPUSH, 24),
0975: new SimpleInstruction(
0976: InstructionConstants.OP_ISHL), }, },
0977: { // ... * -1L = -...
0978: {
0979: new ConstantInstruction(
0980: InstructionConstants.OP_LDC2_W,
0981: L_M1),
0982: new SimpleInstruction(
0983: InstructionConstants.OP_LMUL), },
0984: { new SimpleInstruction(
0985: InstructionConstants.OP_LNEG), }, },
0986: { // ... * 0L = 0L
0987: {
0988: new SimpleInstruction(
0989: InstructionConstants.OP_LCONST_0),
0990: new SimpleInstruction(
0991: InstructionConstants.OP_LMUL), },
0992: {
0993: new SimpleInstruction(
0994: InstructionConstants.OP_POP2),
0995: new SimpleInstruction(
0996: InstructionConstants.OP_LCONST_0), }, },
0997: { // ... * 1L = ...
0998: {
0999: new SimpleInstruction(
1000: InstructionConstants.OP_LCONST_1),
1001: new SimpleInstruction(
1002: InstructionConstants.OP_LMUL), }, {
1003: // Nothing.
1004: }, },
1005: { // ... * 2L = ... << 1
1006: {
1007: new ConstantInstruction(
1008: InstructionConstants.OP_LDC2_W, L_2),
1009: new SimpleInstruction(
1010: InstructionConstants.OP_LMUL), },
1011: {
1012: new SimpleInstruction(
1013: InstructionConstants.OP_ICONST_1),
1014: new SimpleInstruction(
1015: InstructionConstants.OP_LSHL), }, },
1016: { // ... * 4L = ... << 2
1017: {
1018: new ConstantInstruction(
1019: InstructionConstants.OP_LDC2_W, L_4),
1020: new SimpleInstruction(
1021: InstructionConstants.OP_LMUL), },
1022: {
1023: new SimpleInstruction(
1024: InstructionConstants.OP_ICONST_2),
1025: new SimpleInstruction(
1026: InstructionConstants.OP_LSHL), }, },
1027: { // ... * 8L = ... << 3
1028: {
1029: new ConstantInstruction(
1030: InstructionConstants.OP_LDC2_W, L_8),
1031: new SimpleInstruction(
1032: InstructionConstants.OP_LMUL), },
1033: {
1034: new SimpleInstruction(
1035: InstructionConstants.OP_ICONST_3),
1036: new SimpleInstruction(
1037: InstructionConstants.OP_LSHL), }, },
1038: { // ... * 16L = ... << 4
1039: {
1040: new ConstantInstruction(
1041: InstructionConstants.OP_LDC2_W,
1042: L_16),
1043: new SimpleInstruction(
1044: InstructionConstants.OP_LMUL), },
1045: {
1046: new SimpleInstruction(
1047: InstructionConstants.OP_BIPUSH, 4),
1048: new SimpleInstruction(
1049: InstructionConstants.OP_LSHL), }, },
1050: { // ... * 32L = ... << 5
1051: {
1052: new ConstantInstruction(
1053: InstructionConstants.OP_LDC2_W,
1054: L_32),
1055: new SimpleInstruction(
1056: InstructionConstants.OP_LMUL), },
1057: {
1058: new SimpleInstruction(
1059: InstructionConstants.OP_BIPUSH, 5),
1060: new SimpleInstruction(
1061: InstructionConstants.OP_LSHL), }, },
1062: { // ... * 64L = ... << 6
1063: {
1064: new ConstantInstruction(
1065: InstructionConstants.OP_LDC2_W,
1066: L_64),
1067: new SimpleInstruction(
1068: InstructionConstants.OP_LMUL), },
1069: {
1070: new SimpleInstruction(
1071: InstructionConstants.OP_BIPUSH, 6),
1072: new SimpleInstruction(
1073: InstructionConstants.OP_LSHL), }, },
1074: { // ... * 128L = ... << 7
1075: {
1076: new ConstantInstruction(
1077: InstructionConstants.OP_LDC2_W,
1078: L_128),
1079: new SimpleInstruction(
1080: InstructionConstants.OP_LMUL), },
1081: {
1082: new SimpleInstruction(
1083: InstructionConstants.OP_BIPUSH, 7),
1084: new SimpleInstruction(
1085: InstructionConstants.OP_LSHL), }, },
1086: { // ... * 256L = ... << 8
1087: {
1088: new ConstantInstruction(
1089: InstructionConstants.OP_LDC2_W,
1090: L_256),
1091: new SimpleInstruction(
1092: InstructionConstants.OP_LMUL), },
1093: {
1094: new SimpleInstruction(
1095: InstructionConstants.OP_BIPUSH, 8),
1096: new SimpleInstruction(
1097: InstructionConstants.OP_LSHL), }, },
1098: { // ... * 512L = ... << 9
1099: {
1100: new ConstantInstruction(
1101: InstructionConstants.OP_LDC2_W,
1102: L_512),
1103: new SimpleInstruction(
1104: InstructionConstants.OP_LMUL), },
1105: {
1106: new SimpleInstruction(
1107: InstructionConstants.OP_BIPUSH, 9),
1108: new SimpleInstruction(
1109: InstructionConstants.OP_LSHL), }, },
1110: { // ... * 1024L = ... << 10
1111: {
1112: new ConstantInstruction(
1113: InstructionConstants.OP_LDC2_W,
1114: L_1024),
1115: new SimpleInstruction(
1116: InstructionConstants.OP_LMUL), },
1117: {
1118: new SimpleInstruction(
1119: InstructionConstants.OP_BIPUSH, 10),
1120: new SimpleInstruction(
1121: InstructionConstants.OP_LSHL), }, },
1122: { // ... * 2048L = ... << 11
1123: {
1124: new ConstantInstruction(
1125: InstructionConstants.OP_LDC2_W,
1126: L_2048),
1127: new SimpleInstruction(
1128: InstructionConstants.OP_LMUL), },
1129: {
1130: new SimpleInstruction(
1131: InstructionConstants.OP_BIPUSH, 11),
1132: new SimpleInstruction(
1133: InstructionConstants.OP_LSHL), }, },
1134: { // ... * 4096L = ... << 12
1135: {
1136: new ConstantInstruction(
1137: InstructionConstants.OP_LDC2_W,
1138: L_4096),
1139: new SimpleInstruction(
1140: InstructionConstants.OP_LMUL), },
1141: {
1142: new SimpleInstruction(
1143: InstructionConstants.OP_BIPUSH, 12),
1144: new SimpleInstruction(
1145: InstructionConstants.OP_LSHL), }, },
1146: { // ... * 8192L = ... << 13
1147: {
1148: new ConstantInstruction(
1149: InstructionConstants.OP_LDC2_W,
1150: L_8192),
1151: new SimpleInstruction(
1152: InstructionConstants.OP_LMUL), },
1153: {
1154: new SimpleInstruction(
1155: InstructionConstants.OP_BIPUSH, 13),
1156: new SimpleInstruction(
1157: InstructionConstants.OP_LSHL), }, },
1158: { // ... * 16384L = ... << 14
1159: {
1160: new ConstantInstruction(
1161: InstructionConstants.OP_LDC2_W,
1162: L_16384),
1163: new SimpleInstruction(
1164: InstructionConstants.OP_LMUL), },
1165: {
1166: new SimpleInstruction(
1167: InstructionConstants.OP_BIPUSH, 14),
1168: new SimpleInstruction(
1169: InstructionConstants.OP_LSHL), }, },
1170: { // ... * 32768L = ... << 15
1171: {
1172: new ConstantInstruction(
1173: InstructionConstants.OP_LDC2_W,
1174: L_32768),
1175: new SimpleInstruction(
1176: InstructionConstants.OP_LMUL), },
1177: {
1178: new SimpleInstruction(
1179: InstructionConstants.OP_BIPUSH, 15),
1180: new SimpleInstruction(
1181: InstructionConstants.OP_LSHL), }, },
1182: { // ... * 65536LL = ... << 16
1183: {
1184: new ConstantInstruction(
1185: InstructionConstants.OP_LDC2_W,
1186: L_65536),
1187: new SimpleInstruction(
1188: InstructionConstants.OP_LMUL), },
1189: {
1190: new SimpleInstruction(
1191: InstructionConstants.OP_BIPUSH, 16),
1192: new SimpleInstruction(
1193: InstructionConstants.OP_LSHL), }, },
1194: { // ... * 16777216L = ... << 24
1195: {
1196: new ConstantInstruction(
1197: InstructionConstants.OP_LDC2_W,
1198: L_16777216),
1199: new SimpleInstruction(
1200: InstructionConstants.OP_LMUL), },
1201: {
1202: new SimpleInstruction(
1203: InstructionConstants.OP_BIPUSH, 24),
1204: new SimpleInstruction(
1205: InstructionConstants.OP_LSHL), }, },
1206: { // ... * 4294967296L = ... << 32
1207: {
1208: new ConstantInstruction(
1209: InstructionConstants.OP_LDC2_W,
1210: L_4294967296),
1211: new SimpleInstruction(
1212: InstructionConstants.OP_LMUL), },
1213: {
1214: new SimpleInstruction(
1215: InstructionConstants.OP_BIPUSH, 32),
1216: new SimpleInstruction(
1217: InstructionConstants.OP_LSHL), }, },
1218: { // ... * -1f = -...
1219: {
1220: new ConstantInstruction(
1221: InstructionConstants.OP_LDC, F_M1),
1222: new SimpleInstruction(
1223: InstructionConstants.OP_FMUL), },
1224: { new SimpleInstruction(
1225: InstructionConstants.OP_FNEG), }, },
1226: // { // ... * 0f = 0f (or NaN)
1227: // {
1228: // new SimpleInstruction(InstructionConstants.OP_FCONST_0),
1229: // new SimpleInstruction(InstructionConstants.OP_FMUL),
1230: // },{
1231: // new SimpleInstruction(InstructionConstants.OP_POP),
1232: // new SimpleInstruction(InstructionConstants.OP_FCONST_0),
1233: // },
1234: // },
1235: { // ... * 1f = ...
1236: {
1237: new SimpleInstruction(
1238: InstructionConstants.OP_FCONST_1),
1239: new SimpleInstruction(
1240: InstructionConstants.OP_FMUL), }, {
1241: // Nothing.
1242: }, },
1243: { // ... * -1d = -...
1244: {
1245: new ConstantInstruction(
1246: InstructionConstants.OP_LDC2_W,
1247: D_M1),
1248: new SimpleInstruction(
1249: InstructionConstants.OP_DMUL), },
1250: { new SimpleInstruction(
1251: InstructionConstants.OP_DNEG), }, },
1252: // { // ... * 0d = 0d (or NaN)
1253: // {
1254: // new SimpleInstruction(InstructionConstants.OP_DCONST_0),
1255: // new SimpleInstruction(InstructionConstants.OP_DMUL),
1256: // },{
1257: // new SimpleInstruction(InstructionConstants.OP_POP2),
1258: // new SimpleInstruction(InstructionConstants.OP_DCONST_0),
1259: // },
1260: // },
1261: { // ... * 1d = ...
1262: {
1263: new SimpleInstruction(
1264: InstructionConstants.OP_DCONST_1),
1265: new SimpleInstruction(
1266: InstructionConstants.OP_DMUL), }, {
1267: // Nothing.
1268: }, },
1269: { // ... / -1 = -...
1270: {
1271: new SimpleInstruction(
1272: InstructionConstants.OP_ICONST_M1),
1273: new SimpleInstruction(
1274: InstructionConstants.OP_IDIV), },
1275: { new SimpleInstruction(
1276: InstructionConstants.OP_INEG), }, },
1277: { // ... / 1 = ...
1278: {
1279: new SimpleInstruction(
1280: InstructionConstants.OP_ICONST_1),
1281: new SimpleInstruction(
1282: InstructionConstants.OP_IDIV), }, {
1283: // Nothing.
1284: }, },
1285: // { // ... / 2 = ... >> 1
1286: // {
1287: // new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1288: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1289: // },{
1290: // new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1291: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1292: // },
1293: // },
1294: // { // ... / 4 = ... >> 2
1295: // {
1296: // new SimpleInstruction(InstructionConstants.OP_ICONST_4),
1297: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1298: // },{
1299: // new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1300: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1301: // },
1302: // },
1303: // { // ... / 8 = ... >> 3
1304: // {
1305: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1306: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1307: // },{
1308: // new SimpleInstruction(InstructionConstants.OP_ICONST_3),
1309: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1310: // },
1311: // },
1312: // { // ... / 16 = ... >> 4
1313: // {
1314: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1315: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1316: // },{
1317: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4),
1318: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1319: // },
1320: // },
1321: // { // ... / 32 = ... >> 5
1322: // {
1323: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1324: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1325: // },{
1326: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5),
1327: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1328: // },
1329: // },
1330: // { // ... / 64 = ... >> 6
1331: // {
1332: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64),
1333: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1334: // },{
1335: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6),
1336: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1337: // },
1338: // },
1339: // { // ... / 128 = ... >> 7
1340: // {
1341: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128),
1342: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1343: // },{
1344: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7),
1345: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1346: // },
1347: // },
1348: // { // ... / 256 = ... >> 8
1349: // {
1350: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256),
1351: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1352: // },{
1353: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1354: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1355: // },
1356: // },
1357: // { // ... / 512 = ... >> 9
1358: // {
1359: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512),
1360: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1361: // },{
1362: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9),
1363: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1364: // },
1365: // },
1366: // { // ... / 1024 = ... >> 10
1367: // {
1368: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024),
1369: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1370: // },{
1371: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10),
1372: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1373: // },
1374: // },
1375: // { // ... / 2048 = ... >> 11
1376: // {
1377: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048),
1378: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1379: // },{
1380: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11),
1381: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1382: // },
1383: // },
1384: // { // ... / 4096 = ... >> 12
1385: // {
1386: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096),
1387: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1388: // },{
1389: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12),
1390: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1391: // },
1392: // },
1393: // { // ... / 8192 = ... >> 13
1394: // {
1395: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192),
1396: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1397: // },{
1398: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13),
1399: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1400: // },
1401: // },
1402: // { // ... / 16384 = ... >> 14
1403: // {
1404: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384),
1405: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1406: // },{
1407: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14),
1408: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1409: // },
1410: // },
1411: // { // ... / 32768 = ... >> 15
1412: // {
1413: // new ConstantInstruction(InstructionConstants.OP_LDC, I_32768),
1414: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1415: // },{
1416: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15),
1417: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1418: // },
1419: // },
1420: // { // ... / 65536 = ... >> 16
1421: // {
1422: // new ConstantInstruction(InstructionConstants.OP_LDC, I_65536),
1423: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1424: // },{
1425: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1426: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1427: // },
1428: // },
1429: // { // ... / 16777216 = ... >> 24
1430: // {
1431: // new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216),
1432: // new SimpleInstruction(InstructionConstants.OP_IDIV),
1433: // },{
1434: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1435: // new SimpleInstruction(InstructionConstants.OP_ISHR),
1436: // },
1437: // },
1438: { // ... / -1L = -...
1439: {
1440: new ConstantInstruction(
1441: InstructionConstants.OP_LDC2_W,
1442: L_M1),
1443: new SimpleInstruction(
1444: InstructionConstants.OP_LDIV), },
1445: { new SimpleInstruction(
1446: InstructionConstants.OP_LNEG), }, },
1447: { // ... / 1L = ...
1448: {
1449: new SimpleInstruction(
1450: InstructionConstants.OP_LCONST_1),
1451: new SimpleInstruction(
1452: InstructionConstants.OP_LDIV), }, {
1453: // Nothing.
1454: }, },
1455: // { // ... / 2L = ... >> 1
1456: // {
1457: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2),
1458: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1459: // },{
1460: // new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1461: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1462: // },
1463: // },
1464: // { // ... / 4L = ... >> 2
1465: // {
1466: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4),
1467: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1468: // },{
1469: // new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1470: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1471: // },
1472: // },
1473: // { // ... / 8L = ... >> 3
1474: // {
1475: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8),
1476: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1477: // },{
1478: // new SimpleInstruction(InstructionConstants.OP_ICONST_3),
1479: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1480: // },
1481: // },
1482: // { // ... / 16L = ... >> 4
1483: // {
1484: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16),
1485: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1486: // },{
1487: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4),
1488: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1489: // },
1490: // },
1491: // { // ... / 32L = ... >> 5
1492: // {
1493: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32),
1494: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1495: // },{
1496: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5),
1497: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1498: // },
1499: // },
1500: // { // ... / 64L = ... >> 6
1501: // {
1502: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64),
1503: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1504: // },{
1505: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6),
1506: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1507: // },
1508: // },
1509: // { // ... / 128L = ... >> 7
1510: // {
1511: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128),
1512: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1513: // },{
1514: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7),
1515: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1516: // },
1517: // },
1518: // { // ... / 256L = ... >> 8
1519: // {
1520: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256),
1521: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1522: // },{
1523: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1524: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1525: // },
1526: // },
1527: // { // ... / 512L = ... >> 9
1528: // {
1529: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512),
1530: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1531: // },{
1532: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9),
1533: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1534: // },
1535: // },
1536: // { // ... / 1024L = ... >> 10
1537: // {
1538: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024),
1539: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1540: // },{
1541: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10),
1542: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1543: // },
1544: // },
1545: // { // ... / 2048L = ... >> 11
1546: // {
1547: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048),
1548: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1549: // },{
1550: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11),
1551: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1552: // },
1553: // },
1554: // { // ... / 4096L = ... >> 12
1555: // {
1556: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096),
1557: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1558: // },{
1559: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12),
1560: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1561: // },
1562: // },
1563: // { // ... / 8192L = ... >> 13
1564: // {
1565: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192),
1566: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1567: // },{
1568: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13),
1569: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1570: // },
1571: // },
1572: // { // ... / 16384L = ... >> 14
1573: // {
1574: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384),
1575: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1576: // },{
1577: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14),
1578: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1579: // },
1580: // },
1581: // { // ... / 32768L = ... >> 15
1582: // {
1583: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768),
1584: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1585: // },{
1586: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15),
1587: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1588: // },
1589: // },
1590: // { // ... / 65536LL = ... >> 16
1591: // {
1592: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536),
1593: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1594: // },{
1595: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1596: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1597: // },
1598: // },
1599: // { // ... / 16777216L = ... >> 24
1600: // {
1601: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216),
1602: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1603: // },{
1604: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1605: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1606: // },
1607: // },
1608: // { // ... / 4294967296L = ... >> 32
1609: // {
1610: // new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296),
1611: // new SimpleInstruction(InstructionConstants.OP_LDIV),
1612: // },{
1613: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1614: // new SimpleInstruction(InstructionConstants.OP_LSHR),
1615: // },
1616: // },
1617: { // ... / -1f = -...
1618: {
1619: new ConstantInstruction(
1620: InstructionConstants.OP_LDC, F_M1),
1621: new SimpleInstruction(
1622: InstructionConstants.OP_FDIV), },
1623: { new SimpleInstruction(
1624: InstructionConstants.OP_FNEG), }, },
1625: { // ... / 1f = ...
1626: {
1627: new SimpleInstruction(
1628: InstructionConstants.OP_FCONST_1),
1629: new SimpleInstruction(
1630: InstructionConstants.OP_FDIV), }, {
1631: // Nothing.
1632: }, },
1633: { // ... / -1d = -...
1634: {
1635: new ConstantInstruction(
1636: InstructionConstants.OP_LDC2_W,
1637: D_M1),
1638: new SimpleInstruction(
1639: InstructionConstants.OP_DDIV), },
1640: { new SimpleInstruction(
1641: InstructionConstants.OP_DNEG), }, },
1642: { // ... / 1d = ...
1643: {
1644: new SimpleInstruction(
1645: InstructionConstants.OP_DCONST_1),
1646: new SimpleInstruction(
1647: InstructionConstants.OP_DDIV), }, {
1648: // Nothing.
1649: }, },
1650: { // ... % 1 = 0
1651: {
1652: new SimpleInstruction(
1653: InstructionConstants.OP_ICONST_1),
1654: new SimpleInstruction(
1655: InstructionConstants.OP_IREM), },
1656: {
1657: new SimpleInstruction(
1658: InstructionConstants.OP_POP),
1659: new SimpleInstruction(
1660: InstructionConstants.OP_ICONST_0), }, },
1661: // { // ... % 2 = ... & 0x1
1662: // {
1663: // new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1664: // new SimpleInstruction(InstructionConstants.OP_IREM),
1665: // },{
1666: // new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1667: // new SimpleInstruction(InstructionConstants.OP_IAND),
1668: // },
1669: // },
1670: // { // ... % 4 = ... & 0x3
1671: // {
1672: // new SimpleInstruction(InstructionConstants.OP_ICONST_4),
1673: // new SimpleInstruction(InstructionConstants.OP_IREM),
1674: // },{
1675: // new SimpleInstruction(InstructionConstants.OP_ICONST_3),
1676: // new SimpleInstruction(InstructionConstants.OP_IAND),
1677: // },
1678: // },
1679: // { // ... % 8 = ... & 0x07
1680: // {
1681: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1682: // new SimpleInstruction(InstructionConstants.OP_IREM),
1683: // },{
1684: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x07),
1685: // new SimpleInstruction(InstructionConstants.OP_IAND),
1686: // },
1687: // },
1688: // { // ... % 16 = ... & 0x0f
1689: // {
1690: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1691: // new SimpleInstruction(InstructionConstants.OP_IREM),
1692: // },{
1693: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x0f),
1694: // new SimpleInstruction(InstructionConstants.OP_IAND),
1695: // },
1696: // },
1697: // { // ... % 32 = ... & 0x1f
1698: // {
1699: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1700: // new SimpleInstruction(InstructionConstants.OP_IREM),
1701: // },{
1702: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x1f),
1703: // new SimpleInstruction(InstructionConstants.OP_IAND),
1704: // },
1705: // },
1706: // { // ... % 64 = ... & 0x3f
1707: // {
1708: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64),
1709: // new SimpleInstruction(InstructionConstants.OP_IREM),
1710: // },{
1711: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x3f),
1712: // new SimpleInstruction(InstructionConstants.OP_IAND),
1713: // },
1714: // },
1715: // { // ... % 128 = ... & 0x7f
1716: // {
1717: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128),
1718: // new SimpleInstruction(InstructionConstants.OP_IREM),
1719: // },{
1720: // new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x7f),
1721: // new SimpleInstruction(InstructionConstants.OP_IAND),
1722: // },
1723: // },
1724: // { // ... % 256 = ... & 0x00ff
1725: // {
1726: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256),
1727: // new SimpleInstruction(InstructionConstants.OP_IREM),
1728: // },{
1729: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x00ff),
1730: // new SimpleInstruction(InstructionConstants.OP_IAND),
1731: // },
1732: // },
1733: // { // ... % 512 = ... & 0x01ff
1734: // {
1735: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512),
1736: // new SimpleInstruction(InstructionConstants.OP_IREM),
1737: // },{
1738: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x01ff),
1739: // new SimpleInstruction(InstructionConstants.OP_IAND),
1740: // },
1741: // },
1742: // { // ... % 1024 = ... & 0x03ff
1743: // {
1744: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024),
1745: // new SimpleInstruction(InstructionConstants.OP_IREM),
1746: // },{
1747: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x03ff),
1748: // new SimpleInstruction(InstructionConstants.OP_IAND),
1749: // },
1750: // },
1751: // { // ... % 2048 = ... & 0x07ff
1752: // {
1753: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048),
1754: // new SimpleInstruction(InstructionConstants.OP_IREM),
1755: // },{
1756: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x07ff),
1757: // new SimpleInstruction(InstructionConstants.OP_IAND),
1758: // },
1759: // },
1760: // { // ... % 4096 = ... & 0x0fff
1761: // {
1762: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096),
1763: // new SimpleInstruction(InstructionConstants.OP_IREM),
1764: // },{
1765: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x0fff),
1766: // new SimpleInstruction(InstructionConstants.OP_IAND),
1767: // },
1768: // },
1769: // { // ... % 8192 = ... & 0x1fff
1770: // {
1771: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192),
1772: // new SimpleInstruction(InstructionConstants.OP_IREM),
1773: // },{
1774: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x1fff),
1775: // new SimpleInstruction(InstructionConstants.OP_IAND),
1776: // },
1777: // },
1778: // { // ... % 16384 = ... & 0x3fff
1779: // {
1780: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384),
1781: // new SimpleInstruction(InstructionConstants.OP_IREM),
1782: // },{
1783: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x3fff),
1784: // new SimpleInstruction(InstructionConstants.OP_IAND),
1785: // },
1786: // },
1787: { // ... % 1L = 0L
1788: {
1789: new SimpleInstruction(
1790: InstructionConstants.OP_LCONST_1),
1791: new SimpleInstruction(
1792: InstructionConstants.OP_LREM), },
1793: {
1794: new SimpleInstruction(
1795: InstructionConstants.OP_POP2),
1796: new SimpleInstruction(
1797: InstructionConstants.OP_LCONST_0), }, },
1798: // { // ... % 1f = 0f
1799: // {
1800: // new SimpleInstruction(InstructionConstants.OP_FCONST_1),
1801: // new SimpleInstruction(InstructionConstants.OP_FREM),
1802: // },{
1803: // new SimpleInstruction(InstructionConstants.OP_POP),
1804: // new SimpleInstruction(InstructionConstants.OP_FCONST_0),
1805: // },
1806: // },
1807: // { // ... % 1d = 0d
1808: // {
1809: // new SimpleInstruction(InstructionConstants.OP_DCONST_1),
1810: // new SimpleInstruction(InstructionConstants.OP_DREM),
1811: // },{
1812: // new SimpleInstruction(InstructionConstants.OP_POP2),
1813: // new SimpleInstruction(InstructionConstants.OP_DCONST_0),
1814: // },
1815: // },
1816: { // -(-...) = ...
1817: {
1818: new SimpleInstruction(
1819: InstructionConstants.OP_INEG),
1820: new SimpleInstruction(
1821: InstructionConstants.OP_INEG), }, {
1822: // Nothing.
1823: }, },
1824: { // -(-...) = ...
1825: {
1826: new SimpleInstruction(
1827: InstructionConstants.OP_LNEG),
1828: new SimpleInstruction(
1829: InstructionConstants.OP_LNEG), }, {
1830: // Nothing.
1831: }, },
1832: { // -(-...) = ...
1833: {
1834: new SimpleInstruction(
1835: InstructionConstants.OP_FNEG),
1836: new SimpleInstruction(
1837: InstructionConstants.OP_FNEG), }, {
1838: // Nothing.
1839: }, },
1840: { // -(-...) = ...
1841: {
1842: new SimpleInstruction(
1843: InstructionConstants.OP_DNEG),
1844: new SimpleInstruction(
1845: InstructionConstants.OP_DNEG), }, {
1846: // Nothing.
1847: }, },
1848: { // +(-...) = -...
1849: {
1850: new SimpleInstruction(
1851: InstructionConstants.OP_INEG),
1852: new SimpleInstruction(
1853: InstructionConstants.OP_IADD), },
1854: { new SimpleInstruction(
1855: InstructionConstants.OP_ISUB), }, },
1856: { // +(-...) = -...
1857: {
1858: new SimpleInstruction(
1859: InstructionConstants.OP_LNEG),
1860: new SimpleInstruction(
1861: InstructionConstants.OP_LADD), },
1862: { new SimpleInstruction(
1863: InstructionConstants.OP_LSUB), }, },
1864: { // +(-...) = -...
1865: {
1866: new SimpleInstruction(
1867: InstructionConstants.OP_FNEG),
1868: new SimpleInstruction(
1869: InstructionConstants.OP_FADD), },
1870: { new SimpleInstruction(
1871: InstructionConstants.OP_FSUB), }, },
1872: { // +(-...) = -...
1873: {
1874: new SimpleInstruction(
1875: InstructionConstants.OP_DNEG),
1876: new SimpleInstruction(
1877: InstructionConstants.OP_DADD), },
1878: { new SimpleInstruction(
1879: InstructionConstants.OP_DSUB), }, },
1880: { // ... << 0 = ...
1881: {
1882: new SimpleInstruction(
1883: InstructionConstants.OP_ICONST_0),
1884: new SimpleInstruction(
1885: InstructionConstants.OP_ISHL), }, {
1886: // Nothing.
1887: }, },
1888: { // ... << 0 = ...
1889: {
1890: new SimpleInstruction(
1891: InstructionConstants.OP_ICONST_0),
1892: new SimpleInstruction(
1893: InstructionConstants.OP_LSHL), }, {
1894: // Nothing.
1895: }, },
1896: { // ... >> 0 = ...
1897: {
1898: new SimpleInstruction(
1899: InstructionConstants.OP_ICONST_0),
1900: new SimpleInstruction(
1901: InstructionConstants.OP_ISHR), }, {
1902: // Nothing.
1903: }, },
1904: { // ... >> 0 = ...
1905: {
1906: new SimpleInstruction(
1907: InstructionConstants.OP_ICONST_0),
1908: new SimpleInstruction(
1909: InstructionConstants.OP_LSHR), }, {
1910: // Nothing.
1911: }, },
1912: { // ... >>> 0 = ...
1913: {
1914: new SimpleInstruction(
1915: InstructionConstants.OP_ICONST_0),
1916: new SimpleInstruction(
1917: InstructionConstants.OP_IUSHR), },
1918: {
1919: // Nothing.
1920: }, },
1921: { // ... >>> 0 = ...
1922: {
1923: new SimpleInstruction(
1924: InstructionConstants.OP_ICONST_0),
1925: new SimpleInstruction(
1926: InstructionConstants.OP_LUSHR), },
1927: {
1928: // Nothing.
1929: }, },
1930: { // ... & -1 = ...
1931: {
1932: new SimpleInstruction(
1933: InstructionConstants.OP_ICONST_M1),
1934: new SimpleInstruction(
1935: InstructionConstants.OP_IAND), }, {
1936: // Nothing.
1937: }, },
1938: { // ... & 0 = 0
1939: {
1940: new SimpleInstruction(
1941: InstructionConstants.OP_ICONST_0),
1942: new SimpleInstruction(
1943: InstructionConstants.OP_IAND), },
1944: {
1945: new SimpleInstruction(
1946: InstructionConstants.OP_POP),
1947: new SimpleInstruction(
1948: InstructionConstants.OP_ICONST_0), }, },
1949: { // ... & -1L = ...
1950: {
1951: new ConstantInstruction(
1952: InstructionConstants.OP_LDC2_W,
1953: L_M1),
1954: new SimpleInstruction(
1955: InstructionConstants.OP_LAND), }, {
1956: // Nothing.
1957: }, },
1958: { // ... & 0L = 0L
1959: {
1960: new SimpleInstruction(
1961: InstructionConstants.OP_LCONST_0),
1962: new SimpleInstruction(
1963: InstructionConstants.OP_LAND), },
1964: {
1965: new SimpleInstruction(
1966: InstructionConstants.OP_POP2),
1967: new SimpleInstruction(
1968: InstructionConstants.OP_LCONST_0), }, },
1969: { // ... | -1 = -1
1970: {
1971: new SimpleInstruction(
1972: InstructionConstants.OP_ICONST_M1),
1973: new SimpleInstruction(
1974: InstructionConstants.OP_IOR), },
1975: {
1976: new SimpleInstruction(
1977: InstructionConstants.OP_POP),
1978: new SimpleInstruction(
1979: InstructionConstants.OP_ICONST_M1), }, },
1980: { // ... | 0 = ...
1981: {
1982: new SimpleInstruction(
1983: InstructionConstants.OP_ICONST_0),
1984: new SimpleInstruction(
1985: InstructionConstants.OP_IOR), }, {
1986: // Nothing.
1987: }, },
1988: { // ... | -1L = -1L
1989: {
1990: new ConstantInstruction(
1991: InstructionConstants.OP_LDC2_W,
1992: L_M1),
1993: new SimpleInstruction(
1994: InstructionConstants.OP_LAND), },
1995: {
1996: new SimpleInstruction(
1997: InstructionConstants.OP_POP2),
1998: new ConstantInstruction(
1999: InstructionConstants.OP_LDC2_W,
2000: L_M1), }, },
2001: { // ... | 0L = ...
2002: {
2003: new SimpleInstruction(
2004: InstructionConstants.OP_LCONST_0),
2005: new SimpleInstruction(
2006: InstructionConstants.OP_LOR), }, {
2007: // Nothing.
2008: }, },
2009: { // ... ^ 0 = ...
2010: {
2011: new SimpleInstruction(
2012: InstructionConstants.OP_ICONST_0),
2013: new SimpleInstruction(
2014: InstructionConstants.OP_IXOR), }, {
2015: // Nothing.
2016: }, },
2017: { // ... ^ 0L = ...
2018: {
2019: new SimpleInstruction(
2020: InstructionConstants.OP_LCONST_0),
2021: new SimpleInstruction(
2022: InstructionConstants.OP_LXOR), }, {
2023: // Nothing.
2024: }, },
2025: { // (... & 0x0000ff00) >> 8 = (... >> 8) & 0xff
2026: {
2027: new ConstantInstruction(
2028: InstructionConstants.OP_LDC,
2029: I_0x0000ff00),
2030: new SimpleInstruction(
2031: InstructionConstants.OP_IAND),
2032: new SimpleInstruction(
2033: InstructionConstants.OP_BIPUSH, 8),
2034: new SimpleInstruction(
2035: InstructionConstants.OP_ISHR), },
2036: {
2037: new SimpleInstruction(
2038: InstructionConstants.OP_BIPUSH, 8),
2039: new SimpleInstruction(
2040: InstructionConstants.OP_ISHR),
2041: new SimpleInstruction(
2042: InstructionConstants.OP_SIPUSH,
2043: 0xff),
2044: new SimpleInstruction(
2045: InstructionConstants.OP_IAND), }, },
2046: { // (... & 0x0000ff00) >>> 8 = (... >>> 8) & 0xff
2047: {
2048: new ConstantInstruction(
2049: InstructionConstants.OP_LDC,
2050: I_0x0000ff00),
2051: new SimpleInstruction(
2052: InstructionConstants.OP_IAND),
2053: new SimpleInstruction(
2054: InstructionConstants.OP_BIPUSH, 8),
2055: new SimpleInstruction(
2056: InstructionConstants.OP_IUSHR), },
2057: {
2058: new SimpleInstruction(
2059: InstructionConstants.OP_BIPUSH, 8),
2060: new SimpleInstruction(
2061: InstructionConstants.OP_IUSHR),
2062: new SimpleInstruction(
2063: InstructionConstants.OP_SIPUSH,
2064: 0xff),
2065: new SimpleInstruction(
2066: InstructionConstants.OP_IAND), }, },
2067: { // (... & 0x00ff0000) >> 16 = (... >> 16) & 0xff
2068: {
2069: new ConstantInstruction(
2070: InstructionConstants.OP_LDC,
2071: I_0x00ff0000),
2072: new SimpleInstruction(
2073: InstructionConstants.OP_IAND),
2074: new SimpleInstruction(
2075: InstructionConstants.OP_BIPUSH, 16),
2076: new SimpleInstruction(
2077: InstructionConstants.OP_ISHR), },
2078: {
2079: new SimpleInstruction(
2080: InstructionConstants.OP_BIPUSH, 16),
2081: new SimpleInstruction(
2082: InstructionConstants.OP_ISHR),
2083: new SimpleInstruction(
2084: InstructionConstants.OP_SIPUSH,
2085: 0xff),
2086: new SimpleInstruction(
2087: InstructionConstants.OP_IAND), }, },
2088: { // (... & 0x00ff0000) >>> 16 = (... >>> 16) & 0xff
2089: {
2090: new ConstantInstruction(
2091: InstructionConstants.OP_LDC,
2092: I_0x00ff0000),
2093: new SimpleInstruction(
2094: InstructionConstants.OP_IAND),
2095: new SimpleInstruction(
2096: InstructionConstants.OP_BIPUSH, 16),
2097: new SimpleInstruction(
2098: InstructionConstants.OP_IUSHR), },
2099: {
2100: new SimpleInstruction(
2101: InstructionConstants.OP_BIPUSH, 16),
2102: new SimpleInstruction(
2103: InstructionConstants.OP_IUSHR),
2104: new SimpleInstruction(
2105: InstructionConstants.OP_SIPUSH,
2106: 0xff),
2107: new SimpleInstruction(
2108: InstructionConstants.OP_IAND), }, },
2109: { // (... & 0xff000000) >> 24 = ... >> 24
2110: {
2111: new ConstantInstruction(
2112: InstructionConstants.OP_LDC,
2113: I_0xff000000),
2114: new SimpleInstruction(
2115: InstructionConstants.OP_IAND),
2116: new SimpleInstruction(
2117: InstructionConstants.OP_BIPUSH, 24),
2118: new SimpleInstruction(
2119: InstructionConstants.OP_ISHR), },
2120: {
2121: new SimpleInstruction(
2122: InstructionConstants.OP_BIPUSH, 24),
2123: new SimpleInstruction(
2124: InstructionConstants.OP_ISHR), }, },
2125: { // (... & 0xffff0000) >> 16 = ... >> 16
2126: {
2127: new ConstantInstruction(
2128: InstructionConstants.OP_LDC,
2129: I_0xffff0000),
2130: new SimpleInstruction(
2131: InstructionConstants.OP_IAND),
2132: new SimpleInstruction(
2133: InstructionConstants.OP_BIPUSH, 16),
2134: new SimpleInstruction(
2135: InstructionConstants.OP_ISHR), },
2136: {
2137: new SimpleInstruction(
2138: InstructionConstants.OP_BIPUSH, 16),
2139: new SimpleInstruction(
2140: InstructionConstants.OP_ISHR), }, },
2141: { // (... & 0xffff0000) >>> 16 = ... >>> 16
2142: {
2143: new ConstantInstruction(
2144: InstructionConstants.OP_LDC,
2145: I_0xffff0000),
2146: new SimpleInstruction(
2147: InstructionConstants.OP_IAND),
2148: new SimpleInstruction(
2149: InstructionConstants.OP_BIPUSH, 16),
2150: new SimpleInstruction(
2151: InstructionConstants.OP_IUSHR), },
2152: {
2153: new SimpleInstruction(
2154: InstructionConstants.OP_BIPUSH, 16),
2155: new SimpleInstruction(
2156: InstructionConstants.OP_IUSHR), }, },
2157: { // (... >> 24) & 0xff = ... >>> 24
2158: {
2159: new SimpleInstruction(
2160: InstructionConstants.OP_BIPUSH, 24),
2161: new SimpleInstruction(
2162: InstructionConstants.OP_ISHR),
2163: new SimpleInstruction(
2164: InstructionConstants.OP_SIPUSH,
2165: 0xff),
2166: new SimpleInstruction(
2167: InstructionConstants.OP_IAND), },
2168: {
2169: new SimpleInstruction(
2170: InstructionConstants.OP_BIPUSH, 24),
2171: new SimpleInstruction(
2172: InstructionConstants.OP_IUSHR), }, },
2173: { // (... >>> 24) & 0xff = ... >>> 24
2174: {
2175: new SimpleInstruction(
2176: InstructionConstants.OP_BIPUSH, 24),
2177: new SimpleInstruction(
2178: InstructionConstants.OP_IUSHR),
2179: new SimpleInstruction(
2180: InstructionConstants.OP_SIPUSH,
2181: 0xff),
2182: new SimpleInstruction(
2183: InstructionConstants.OP_IAND), },
2184: {
2185: new SimpleInstruction(
2186: InstructionConstants.OP_BIPUSH, 24),
2187: new SimpleInstruction(
2188: InstructionConstants.OP_IUSHR), }, },
2189: { // (byte)(... & 0x000000ff) = (byte)...
2190: {
2191: new SimpleInstruction(
2192: InstructionConstants.OP_SIPUSH,
2193: 0xff),
2194: new SimpleInstruction(
2195: InstructionConstants.OP_IAND),
2196: new SimpleInstruction(
2197: InstructionConstants.OP_I2B), },
2198: { new SimpleInstruction(InstructionConstants.OP_I2B), }, },
2199: { // (char)(... & 0x0000ffff) = (char)...
2200: {
2201: new ConstantInstruction(
2202: InstructionConstants.OP_LDC,
2203: I_0x0000ffff),
2204: new SimpleInstruction(
2205: InstructionConstants.OP_IAND),
2206: new SimpleInstruction(
2207: InstructionConstants.OP_I2C), },
2208: { new SimpleInstruction(InstructionConstants.OP_I2C), }, },
2209: { // (short)(... & 0x0000ffff) = (short)...
2210: {
2211: new ConstantInstruction(
2212: InstructionConstants.OP_LDC,
2213: I_0x0000ffff),
2214: new SimpleInstruction(
2215: InstructionConstants.OP_IAND),
2216: new SimpleInstruction(
2217: InstructionConstants.OP_I2S), },
2218: { new SimpleInstruction(InstructionConstants.OP_I2S), }, },
2219: { // (byte)(... >> 24) = ... >> 24
2220: {
2221: new SimpleInstruction(
2222: InstructionConstants.OP_BIPUSH, 24),
2223: new SimpleInstruction(
2224: InstructionConstants.OP_ISHR),
2225: new SimpleInstruction(
2226: InstructionConstants.OP_I2B), },
2227: {
2228: new SimpleInstruction(
2229: InstructionConstants.OP_BIPUSH, 24),
2230: new SimpleInstruction(
2231: InstructionConstants.OP_ISHR), }, },
2232: { // (byte)(... >>> 24) = ... >> 24
2233: {
2234: new SimpleInstruction(
2235: InstructionConstants.OP_BIPUSH, 24),
2236: new SimpleInstruction(
2237: InstructionConstants.OP_IUSHR),
2238: new SimpleInstruction(
2239: InstructionConstants.OP_I2B), },
2240: {
2241: new SimpleInstruction(
2242: InstructionConstants.OP_BIPUSH, 24),
2243: new SimpleInstruction(
2244: InstructionConstants.OP_ISHR), }, },
2245: { // (char)(... >> 16) = ... >>> 16
2246: {
2247: new SimpleInstruction(
2248: InstructionConstants.OP_BIPUSH, 16),
2249: new SimpleInstruction(
2250: InstructionConstants.OP_ISHR),
2251: new SimpleInstruction(
2252: InstructionConstants.OP_I2C), },
2253: {
2254: new SimpleInstruction(
2255: InstructionConstants.OP_BIPUSH, 16),
2256: new SimpleInstruction(
2257: InstructionConstants.OP_IUSHR), }, },
2258: { // (char)(... >>> 16) = ... >>> 16
2259: {
2260: new SimpleInstruction(
2261: InstructionConstants.OP_BIPUSH, 16),
2262: new SimpleInstruction(
2263: InstructionConstants.OP_IUSHR),
2264: new SimpleInstruction(
2265: InstructionConstants.OP_I2C), },
2266: {
2267: new SimpleInstruction(
2268: InstructionConstants.OP_BIPUSH, 16),
2269: new SimpleInstruction(
2270: InstructionConstants.OP_IUSHR), }, },
2271: { // (short)(... >> 16) = ... >> 16
2272: {
2273: new SimpleInstruction(
2274: InstructionConstants.OP_BIPUSH, 16),
2275: new SimpleInstruction(
2276: InstructionConstants.OP_ISHR),
2277: new SimpleInstruction(
2278: InstructionConstants.OP_I2S), },
2279: {
2280: new SimpleInstruction(
2281: InstructionConstants.OP_BIPUSH, 16),
2282: new SimpleInstruction(
2283: InstructionConstants.OP_ISHR), }, },
2284: { // (short)(... >>> 16) = ... >> 16
2285: {
2286: new SimpleInstruction(
2287: InstructionConstants.OP_BIPUSH, 16),
2288: new SimpleInstruction(
2289: InstructionConstants.OP_IUSHR),
2290: new SimpleInstruction(
2291: InstructionConstants.OP_I2S), },
2292: {
2293: new SimpleInstruction(
2294: InstructionConstants.OP_BIPUSH, 16),
2295: new SimpleInstruction(
2296: InstructionConstants.OP_ISHR), }, },
2297: { // ... << 24 >> 24 = (byte)...
2298: {
2299: new SimpleInstruction(
2300: InstructionConstants.OP_BIPUSH, 24),
2301: new SimpleInstruction(
2302: InstructionConstants.OP_ISHL),
2303: new SimpleInstruction(
2304: InstructionConstants.OP_BIPUSH, 24),
2305: new SimpleInstruction(
2306: InstructionConstants.OP_ISHR), },
2307: { new SimpleInstruction(InstructionConstants.OP_I2B), }, },
2308: { // ... << 16 >>> 16 = (char)...
2309: {
2310: new SimpleInstruction(
2311: InstructionConstants.OP_BIPUSH, 16),
2312: new SimpleInstruction(
2313: InstructionConstants.OP_ISHL),
2314: new SimpleInstruction(
2315: InstructionConstants.OP_BIPUSH, 16),
2316: new SimpleInstruction(
2317: InstructionConstants.OP_IUSHR), },
2318: { new SimpleInstruction(InstructionConstants.OP_I2C), }, },
2319: { // ... << 16 >> 16 = (short)...
2320: {
2321: new SimpleInstruction(
2322: InstructionConstants.OP_BIPUSH, 16),
2323: new SimpleInstruction(
2324: InstructionConstants.OP_ISHL),
2325: new SimpleInstruction(
2326: InstructionConstants.OP_BIPUSH, 16),
2327: new SimpleInstruction(
2328: InstructionConstants.OP_ISHR), },
2329: { new SimpleInstruction(InstructionConstants.OP_I2S), }, },
2330: { // ... << 32 >> 32 = (long)(int)...
2331: {
2332: new SimpleInstruction(
2333: InstructionConstants.OP_BIPUSH, 32),
2334: new SimpleInstruction(
2335: InstructionConstants.OP_LSHL),
2336: new SimpleInstruction(
2337: InstructionConstants.OP_BIPUSH, 32),
2338: new SimpleInstruction(
2339: InstructionConstants.OP_LSHR), },
2340: {
2341: new SimpleInstruction(
2342: InstructionConstants.OP_L2I),
2343: new SimpleInstruction(
2344: InstructionConstants.OP_I2L), }, },
2345: { // (int)(... & 0x00000000ffffffffL) = (int)...
2346: {
2347: new ConstantInstruction(
2348: InstructionConstants.OP_LDC2_W,
2349: L_0x00000000ffffffff),
2350: new SimpleInstruction(
2351: InstructionConstants.OP_LAND),
2352: new SimpleInstruction(
2353: InstructionConstants.OP_L2I), },
2354: { new SimpleInstruction(InstructionConstants.OP_L2I), }, },
2355: { // (... & 0xffffffff00000000L) >> 32 = ... >> 32
2356: {
2357: new ConstantInstruction(
2358: InstructionConstants.OP_LDC2_W,
2359: L_0xffffffff00000000),
2360: new SimpleInstruction(
2361: InstructionConstants.OP_LAND),
2362: new SimpleInstruction(
2363: InstructionConstants.OP_BIPUSH, 32),
2364: new SimpleInstruction(
2365: InstructionConstants.OP_LSHR), },
2366: {
2367: new SimpleInstruction(
2368: InstructionConstants.OP_BIPUSH, 32),
2369: new SimpleInstruction(
2370: InstructionConstants.OP_LSHR), }, },
2371: { // (... & 0xffffffff00000000L) >>> 32 = ... >>> 32
2372: {
2373: new ConstantInstruction(
2374: InstructionConstants.OP_LDC2_W,
2375: L_0xffffffff00000000),
2376: new SimpleInstruction(
2377: InstructionConstants.OP_LAND),
2378: new SimpleInstruction(
2379: InstructionConstants.OP_BIPUSH, 32),
2380: new SimpleInstruction(
2381: InstructionConstants.OP_LUSHR), },
2382: {
2383: new SimpleInstruction(
2384: InstructionConstants.OP_BIPUSH, 32),
2385: new SimpleInstruction(
2386: InstructionConstants.OP_LUSHR), }, },
2387: { // ... += 0 = nothing
2388: { new VariableInstruction(
2389: InstructionConstants.OP_IINC, X, 0), }, {
2390: // Nothing.
2391: }, },
2392: { // getfield/putfield = nothing
2393: {
2394: new VariableInstruction(
2395: InstructionConstants.OP_ALOAD, X),
2396: new VariableInstruction(
2397: InstructionConstants.OP_ALOAD, X),
2398: new ConstantInstruction(
2399: InstructionConstants.OP_GETFIELD, Y),
2400: new ConstantInstruction(
2401: InstructionConstants.OP_PUTFIELD, Y), },
2402: {
2403: // Nothing.
2404: }, },
2405: // { // putfield_L/putfield_L = pop2_x1/putfield
2406: // {
2407: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2408: // // ...
2409: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2410: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2411: // // ...
2412: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2413: // },{
2414: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2415: // // ...
2416: // new SimpleInstruction(InstructionConstants.OP_POP2),
2417: // // ...
2418: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2419: // },
2420: // },
2421: // { // putfield_D/putfield_D = pop2_x1/putfield
2422: // {
2423: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2424: // // ...
2425: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2426: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2427: // // ...
2428: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2429: // },{
2430: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2431: // // ...
2432: // new SimpleInstruction(InstructionConstants.OP_POP2),
2433: // // ...
2434: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2435: // },
2436: // },
2437: // { // putfield/putfield = pop_x1/putfield
2438: // {
2439: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2440: // // ...
2441: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2442: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2443: // // ...
2444: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2445: // },{
2446: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2447: // // ...
2448: // new SimpleInstruction(InstructionConstants.OP_POP),
2449: // // ...
2450: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2451: // },
2452: // },
2453: // { // putfield_L/getfield_L = dup2_x1/putfield
2454: // {
2455: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2456: // // ...
2457: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2458: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2459: // new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_L),
2460: // },{
2461: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2462: // // ...
2463: // new SimpleInstruction(InstructionConstants.OP_DUP2_X1),
2464: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2465: // },
2466: // },
2467: // { // putfield_D/getfield_D = dup2_x1/putfield
2468: // {
2469: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2470: // // ...
2471: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2472: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2473: // new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_D),
2474: // },{
2475: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2476: // // ...
2477: // new SimpleInstruction(InstructionConstants.OP_DUP2_X1),
2478: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2479: // },
2480: // },
2481: // { // putfield/getfield = dup_x1/putfield
2482: // {
2483: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2484: // // ...
2485: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2486: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2487: // new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y),
2488: // },{
2489: // new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2490: // // ...
2491: // new SimpleInstruction(InstructionConstants.OP_DUP_X1),
2492: // new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2493: // },
2494: // },
2495: { // getstatic/putstatic = nothing
2496: {
2497: new ConstantInstruction(
2498: InstructionConstants.OP_GETSTATIC,
2499: X),
2500: new ConstantInstruction(
2501: InstructionConstants.OP_PUTSTATIC,
2502: X), }, {
2503: // Nothing.
2504: }, },
2505: { // putstatic_L/putstatic_L = pop2/putstatic
2506: {
2507: new ConstantInstruction(
2508: InstructionConstants.OP_PUTSTATIC,
2509: FIELD_L),
2510: new ConstantInstruction(
2511: InstructionConstants.OP_PUTSTATIC,
2512: FIELD_L), },
2513: {
2514: new SimpleInstruction(
2515: InstructionConstants.OP_POP2),
2516: new ConstantInstruction(
2517: InstructionConstants.OP_PUTSTATIC,
2518: FIELD_L), }, },
2519: { // putstatic_D/putstatic_D = pop2/putstatic
2520: {
2521: new ConstantInstruction(
2522: InstructionConstants.OP_PUTSTATIC,
2523: FIELD_D),
2524: new ConstantInstruction(
2525: InstructionConstants.OP_PUTSTATIC,
2526: FIELD_D), },
2527: {
2528: new SimpleInstruction(
2529: InstructionConstants.OP_POP2),
2530: new ConstantInstruction(
2531: InstructionConstants.OP_PUTSTATIC,
2532: FIELD_D), }, },
2533: { // putstatic/putstatic = pop/putstatic
2534: {
2535: new ConstantInstruction(
2536: InstructionConstants.OP_PUTSTATIC,
2537: X),
2538: new ConstantInstruction(
2539: InstructionConstants.OP_PUTSTATIC,
2540: X), },
2541: {
2542: new SimpleInstruction(
2543: InstructionConstants.OP_POP),
2544: new ConstantInstruction(
2545: InstructionConstants.OP_PUTSTATIC,
2546: X), }, },
2547: { // putstatic_L/getstatic_L = dup2/putstatic
2548: {
2549: new ConstantInstruction(
2550: InstructionConstants.OP_PUTSTATIC,
2551: FIELD_L),
2552: new ConstantInstruction(
2553: InstructionConstants.OP_GETSTATIC,
2554: FIELD_L), },
2555: {
2556: new SimpleInstruction(
2557: InstructionConstants.OP_DUP2),
2558: new ConstantInstruction(
2559: InstructionConstants.OP_PUTSTATIC,
2560: FIELD_L), }, },
2561: { // putstatic_D/getstatic_D = dup2/putstatic
2562: {
2563: new ConstantInstruction(
2564: InstructionConstants.OP_PUTSTATIC,
2565: FIELD_D),
2566: new ConstantInstruction(
2567: InstructionConstants.OP_GETSTATIC,
2568: FIELD_D), },
2569: {
2570: new SimpleInstruction(
2571: InstructionConstants.OP_DUP2),
2572: new ConstantInstruction(
2573: InstructionConstants.OP_PUTSTATIC,
2574: FIELD_D), }, },
2575: { // putstatic/getstatic = dup/putstatic
2576: {
2577: new ConstantInstruction(
2578: InstructionConstants.OP_PUTSTATIC,
2579: X),
2580: new ConstantInstruction(
2581: InstructionConstants.OP_GETSTATIC,
2582: X), },
2583: {
2584: new SimpleInstruction(
2585: InstructionConstants.OP_DUP),
2586: new ConstantInstruction(
2587: InstructionConstants.OP_PUTSTATIC,
2588: X), }, },
2589: { // (byte)(byte)... = (byte)...
2590: {
2591: new SimpleInstruction(
2592: InstructionConstants.OP_I2B),
2593: new SimpleInstruction(
2594: InstructionConstants.OP_I2B), },
2595: { new SimpleInstruction(InstructionConstants.OP_I2B), }, },
2596: { // (byte)(char)... = (byte)...
2597: {
2598: new SimpleInstruction(
2599: InstructionConstants.OP_I2C),
2600: new SimpleInstruction(
2601: InstructionConstants.OP_I2B), },
2602: { new SimpleInstruction(InstructionConstants.OP_I2B), }, },
2603: { // (byte)(short)... = (byte)...
2604: {
2605: new SimpleInstruction(
2606: InstructionConstants.OP_I2S),
2607: new SimpleInstruction(
2608: InstructionConstants.OP_I2B), },
2609: { new SimpleInstruction(InstructionConstants.OP_I2B), }, },
2610: { // (char)(char)... = (char)...
2611: {
2612: new SimpleInstruction(
2613: InstructionConstants.OP_I2C),
2614: new SimpleInstruction(
2615: InstructionConstants.OP_I2C), },
2616: { new SimpleInstruction(InstructionConstants.OP_I2C), }, },
2617: { // (char)(short)... = (char)...
2618: {
2619: new SimpleInstruction(
2620: InstructionConstants.OP_I2S),
2621: new SimpleInstruction(
2622: InstructionConstants.OP_I2C), },
2623: { new SimpleInstruction(InstructionConstants.OP_I2C), }, },
2624: { // (short)(byte)... = (byte)...
2625: {
2626: new SimpleInstruction(
2627: InstructionConstants.OP_I2B),
2628: new SimpleInstruction(
2629: InstructionConstants.OP_I2S), },
2630: { new SimpleInstruction(InstructionConstants.OP_I2B), }, },
2631: { // (short)(char)... = (short)...
2632: {
2633: new SimpleInstruction(
2634: InstructionConstants.OP_I2C),
2635: new SimpleInstruction(
2636: InstructionConstants.OP_I2S), },
2637: { new SimpleInstruction(InstructionConstants.OP_I2S), }, },
2638: { // (short)(short)... = (short)...
2639: {
2640: new SimpleInstruction(
2641: InstructionConstants.OP_I2S),
2642: new SimpleInstruction(
2643: InstructionConstants.OP_I2S), },
2644: { new SimpleInstruction(InstructionConstants.OP_I2S), }, },
2645: { // (int)(long)... = ...
2646: {
2647: new SimpleInstruction(
2648: InstructionConstants.OP_I2L),
2649: new SimpleInstruction(
2650: InstructionConstants.OP_L2I), }, {
2651: // Nothing.
2652: }, },
2653: // Not handled correctly in all cases by VMs prior to Java 6...
2654: // { // (byte)bytes[...] = bytes[...]
2655: // {
2656: // new SimpleInstruction(InstructionConstants.OP_BALOAD),
2657: // new SimpleInstruction(InstructionConstants.OP_I2B),
2658: // },{
2659: // new SimpleInstruction(InstructionConstants.OP_BALOAD),
2660: // },
2661: // },
2662: // { // (short)bytes[...] = bytes[...]
2663: // {
2664: // new SimpleInstruction(InstructionConstants.OP_BALOAD),
2665: // new SimpleInstruction(InstructionConstants.OP_I2S),
2666: // },{
2667: // new SimpleInstruction(InstructionConstants.OP_BALOAD),
2668: // },
2669: // },
2670: // { // (char)chars[...] = chars[...]
2671: // {
2672: // new SimpleInstruction(InstructionConstants.OP_CALOAD),
2673: // new SimpleInstruction(InstructionConstants.OP_I2C),
2674: // },{
2675: // new SimpleInstruction(InstructionConstants.OP_CALOAD),
2676: // },
2677: // },
2678: // { // (short)shorts[...] = shorts[...]
2679: // {
2680: // new SimpleInstruction(InstructionConstants.OP_SALOAD),
2681: // new SimpleInstruction(InstructionConstants.OP_I2S),
2682: // },{
2683: // new SimpleInstruction(InstructionConstants.OP_SALOAD),
2684: // },
2685: // },
2686: // { // bytes[...] = (byte)... = bytes[...] = ...
2687: // {
2688: // new SimpleInstruction(InstructionConstants.OP_I2B),
2689: // new SimpleInstruction(InstructionConstants.OP_BASTORE),
2690: // },{
2691: // new SimpleInstruction(InstructionConstants.OP_BASTORE),
2692: // },
2693: // },
2694: // { // chars[...] = (char)... = chars[...] = ...
2695: // {
2696: // new SimpleInstruction(InstructionConstants.OP_I2C),
2697: // new SimpleInstruction(InstructionConstants.OP_CASTORE),
2698: // },{
2699: // new SimpleInstruction(InstructionConstants.OP_CASTORE),
2700: // },
2701: // },
2702: // { // shorts[...] = (short)... = shorts[...] = ...
2703: // {
2704: // new SimpleInstruction(InstructionConstants.OP_I2S),
2705: // new SimpleInstruction(InstructionConstants.OP_SASTORE),
2706: // },{
2707: // new SimpleInstruction(InstructionConstants.OP_SASTORE),
2708: // },
2709: // },
2710: { // goto +3 = nothing
2711: { new BranchInstruction(
2712: InstructionConstants.OP_GOTO, 3), }, {
2713: // Nothing.
2714: }, },
2715: { // ifeq +3 = pop
2716: { new BranchInstruction(
2717: InstructionConstants.OP_IFEQ, 3), },
2718: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2719: { // ifne +3 = pop
2720: { new BranchInstruction(
2721: InstructionConstants.OP_IFNE, 3), },
2722: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2723: { // iflt +3 = pop
2724: { new BranchInstruction(
2725: InstructionConstants.OP_IFLT, 3), },
2726: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2727: { // ifge +3 = pop
2728: { new BranchInstruction(
2729: InstructionConstants.OP_IFGE, 3), },
2730: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2731: { // ifgt +3 = pop
2732: { new BranchInstruction(
2733: InstructionConstants.OP_IFGT, 3), },
2734: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2735: { // ifle +3 = pop
2736: { new BranchInstruction(
2737: InstructionConstants.OP_IFLE, 3), },
2738: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2739: { // ificmpeq +3 = pop2
2740: { new BranchInstruction(
2741: InstructionConstants.OP_IFICMPEQ, 3), },
2742: { new SimpleInstruction(
2743: InstructionConstants.OP_POP2), }, },
2744: { // ificmpne +3 = pop2
2745: { new BranchInstruction(
2746: InstructionConstants.OP_IFICMPNE, 3), },
2747: { new SimpleInstruction(
2748: InstructionConstants.OP_POP2), }, },
2749: { // ificmplt +3 = pop2
2750: { new BranchInstruction(
2751: InstructionConstants.OP_IFICMPLT, 3), },
2752: { new SimpleInstruction(
2753: InstructionConstants.OP_POP2), }, },
2754: { // ificmpge +3 = pop2
2755: { new BranchInstruction(
2756: InstructionConstants.OP_IFICMPGE, 3), },
2757: { new SimpleInstruction(
2758: InstructionConstants.OP_POP2), }, },
2759: { // ificmpgt +3 = pop2
2760: { new BranchInstruction(
2761: InstructionConstants.OP_IFICMPGT, 3), },
2762: { new SimpleInstruction(
2763: InstructionConstants.OP_POP2), }, },
2764: { // ificmple +3 = pop2
2765: { new BranchInstruction(
2766: InstructionConstants.OP_IFICMPLE, 3), },
2767: { new SimpleInstruction(
2768: InstructionConstants.OP_POP2), }, },
2769: { // ifacmpeq +3 = pop2
2770: { new BranchInstruction(
2771: InstructionConstants.OP_IFACMPEQ, 3), },
2772: { new SimpleInstruction(
2773: InstructionConstants.OP_POP2), }, },
2774: { // ifacmpne +3 = pop2
2775: { new BranchInstruction(
2776: InstructionConstants.OP_IFACMPNE, 3), },
2777: { new SimpleInstruction(
2778: InstructionConstants.OP_POP2), }, },
2779: { // ifnull +3 = pop
2780: { new BranchInstruction(
2781: InstructionConstants.OP_IFNULL, 3), },
2782: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2783: { // ifnonnull +3 = pop
2784: { new BranchInstruction(
2785: InstructionConstants.OP_IFNONNULL, 3), },
2786: { new SimpleInstruction(InstructionConstants.OP_POP), }, },
2787: { // if (... == 0) = ifeq
2788: {
2789: new SimpleInstruction(
2790: InstructionConstants.OP_ICONST_0),
2791: new BranchInstruction(
2792: InstructionConstants.OP_IFICMPEQ, X), },
2793: { new BranchInstruction(
2794: InstructionConstants.OP_IFEQ, X), }, },
2795: { // if (... != 0) = ifne
2796: {
2797: new SimpleInstruction(
2798: InstructionConstants.OP_ICONST_0),
2799: new BranchInstruction(
2800: InstructionConstants.OP_IFICMPNE, X), },
2801: { new BranchInstruction(
2802: InstructionConstants.OP_IFNE, X), }, },
2803: { // if (... < 0) = iflt
2804: {
2805: new SimpleInstruction(
2806: InstructionConstants.OP_ICONST_0),
2807: new BranchInstruction(
2808: InstructionConstants.OP_IFICMPLT, X), },
2809: { new BranchInstruction(
2810: InstructionConstants.OP_IFLT, X), }, },
2811: { // if (... >= 0) = ifge
2812: {
2813: new SimpleInstruction(
2814: InstructionConstants.OP_ICONST_0),
2815: new BranchInstruction(
2816: InstructionConstants.OP_IFICMPGE, X), },
2817: { new BranchInstruction(
2818: InstructionConstants.OP_IFGE, X), }, },
2819: { // if (... > 0) = ifgt
2820: {
2821: new SimpleInstruction(
2822: InstructionConstants.OP_ICONST_0),
2823: new BranchInstruction(
2824: InstructionConstants.OP_IFICMPGT, X), },
2825: { new BranchInstruction(
2826: InstructionConstants.OP_IFGT, X), }, },
2827: { // if (... <= 0) = ifle
2828: {
2829: new SimpleInstruction(
2830: InstructionConstants.OP_ICONST_0),
2831: new BranchInstruction(
2832: InstructionConstants.OP_IFICMPLE, X), },
2833: { new BranchInstruction(
2834: InstructionConstants.OP_IFLE, X), }, },
2835: { // if (... == null) = ifnull
2836: {
2837: new SimpleInstruction(
2838: InstructionConstants.OP_ACONST_NULL),
2839: new BranchInstruction(
2840: InstructionConstants.OP_IFACMPEQ, X), },
2841: { new BranchInstruction(
2842: InstructionConstants.OP_IFNULL, X), }, },
2843: { // if (... != null) = ifnonnull
2844: {
2845: new SimpleInstruction(
2846: InstructionConstants.OP_ACONST_NULL),
2847: new BranchInstruction(
2848: InstructionConstants.OP_IFACMPNE, X), },
2849: { new BranchInstruction(
2850: InstructionConstants.OP_IFNONNULL, X), }, },
2851: { // iconst_0/ifeq = goto
2852: {
2853: new SimpleInstruction(
2854: InstructionConstants.OP_ICONST_0),
2855: new BranchInstruction(
2856: InstructionConstants.OP_IFEQ, X), },
2857: { new BranchInstruction(
2858: InstructionConstants.OP_GOTO, X), }, },
2859: { // iconst/ifeq = nothing
2860: {
2861: new SimpleInstruction(
2862: InstructionConstants.OP_ICONST_0, A),
2863: new BranchInstruction(
2864: InstructionConstants.OP_IFEQ, X), },
2865: {
2866: // Nothing.
2867: }, },
2868: { // bipush/ifeq = nothing
2869: {
2870: new SimpleInstruction(
2871: InstructionConstants.OP_BIPUSH, A),
2872: new BranchInstruction(
2873: InstructionConstants.OP_IFEQ, X), },
2874: {
2875: // Nothing.
2876: }, },
2877: { // sipush/ifeq = nothing
2878: {
2879: new SimpleInstruction(
2880: InstructionConstants.OP_SIPUSH, A),
2881: new BranchInstruction(
2882: InstructionConstants.OP_IFEQ, X), },
2883: {
2884: // Nothing.
2885: }, },
2886: { // iconst_0/ifne = nothing
2887: {
2888: new SimpleInstruction(
2889: InstructionConstants.OP_ICONST_0),
2890: new BranchInstruction(
2891: InstructionConstants.OP_IFNE, X), },
2892: {
2893: // Nothing.
2894: }, },
2895: { // iconst/ifne = goto
2896: {
2897: new SimpleInstruction(
2898: InstructionConstants.OP_ICONST_0, A),
2899: new BranchInstruction(
2900: InstructionConstants.OP_IFNE, X), },
2901: { new BranchInstruction(
2902: InstructionConstants.OP_GOTO, X), }, },
2903: { // bipush/ifne = goto
2904: {
2905: new SimpleInstruction(
2906: InstructionConstants.OP_BIPUSH, A),
2907: new BranchInstruction(
2908: InstructionConstants.OP_IFNE, X), },
2909: { new BranchInstruction(
2910: InstructionConstants.OP_GOTO, X), }, },
2911: { // sipush/ifne = goto
2912: {
2913: new SimpleInstruction(
2914: InstructionConstants.OP_SIPUSH, A),
2915: new BranchInstruction(
2916: InstructionConstants.OP_IFNE, X), },
2917: { new BranchInstruction(
2918: InstructionConstants.OP_GOTO, X), }, },
2919: { // iconst_0/iflt = nothing
2920: {
2921: new SimpleInstruction(
2922: InstructionConstants.OP_ICONST_0),
2923: new BranchInstruction(
2924: InstructionConstants.OP_IFLT, X), },
2925: {
2926: // Nothing.
2927: }, },
2928: { // iconst_0/ifge = goto
2929: {
2930: new SimpleInstruction(
2931: InstructionConstants.OP_ICONST_0),
2932: new BranchInstruction(
2933: InstructionConstants.OP_IFGE, X), },
2934: { new BranchInstruction(
2935: InstructionConstants.OP_GOTO, X), }, },
2936: { // iconst_0/ifgt = nothing
2937: {
2938: new SimpleInstruction(
2939: InstructionConstants.OP_ICONST_0),
2940: new BranchInstruction(
2941: InstructionConstants.OP_IFGT, X), },
2942: {
2943: // Nothing.
2944: }, },
2945: { // iconst_0/ifle = goto
2946: {
2947: new SimpleInstruction(
2948: InstructionConstants.OP_ICONST_0),
2949: new BranchInstruction(
2950: InstructionConstants.OP_IFLE, X), },
2951: { new BranchInstruction(
2952: InstructionConstants.OP_GOTO, X), }, },
2953: { // aconst_null/ifnull = goto
2954: {
2955: new SimpleInstruction(
2956: InstructionConstants.OP_ACONST_NULL),
2957: new BranchInstruction(
2958: InstructionConstants.OP_IFNULL, X), },
2959: { new BranchInstruction(
2960: InstructionConstants.OP_GOTO, X), }, },
2961: { // aconst_null/ifnonnul = nothing
2962: {
2963: new SimpleInstruction(
2964: InstructionConstants.OP_ACONST_NULL),
2965: new BranchInstruction(
2966: InstructionConstants.OP_IFNONNULL,
2967: X), }, {
2968: // Nothing.
2969: }, },
2970: { // ifeq/goto = ifne
2971: {
2972: new BranchInstruction(
2973: InstructionConstants.OP_IFEQ, 6),
2974: new BranchInstruction(
2975: InstructionConstants.OP_GOTO, X), },
2976: { new BranchInstruction(
2977: InstructionConstants.OP_IFNE, X), }, },
2978: { // ifne/goto = ifeq
2979: {
2980: new BranchInstruction(
2981: InstructionConstants.OP_IFNE, 6),
2982: new BranchInstruction(
2983: InstructionConstants.OP_GOTO, X), },
2984: { new BranchInstruction(
2985: InstructionConstants.OP_IFEQ, X), }, },
2986: { // iflt/goto = ifge
2987: {
2988: new BranchInstruction(
2989: InstructionConstants.OP_IFLT, 6),
2990: new BranchInstruction(
2991: InstructionConstants.OP_GOTO, X), },
2992: { new BranchInstruction(
2993: InstructionConstants.OP_IFGE, X), }, },
2994: { // ifge/goto = iflt
2995: {
2996: new BranchInstruction(
2997: InstructionConstants.OP_IFGE, 6),
2998: new BranchInstruction(
2999: InstructionConstants.OP_GOTO, X), },
3000: { new BranchInstruction(
3001: InstructionConstants.OP_IFLT, X), }, },
3002: { // ifgt/goto = ifle
3003: {
3004: new BranchInstruction(
3005: InstructionConstants.OP_IFGT, 6),
3006: new BranchInstruction(
3007: InstructionConstants.OP_GOTO, X), },
3008: { new BranchInstruction(
3009: InstructionConstants.OP_IFLE, X), }, },
3010: { // ifle/goto = ifgt
3011: {
3012: new BranchInstruction(
3013: InstructionConstants.OP_IFLE, 6),
3014: new BranchInstruction(
3015: InstructionConstants.OP_GOTO, X), },
3016: { new BranchInstruction(
3017: InstructionConstants.OP_IFGT, X), }, },
3018: { // ificmpeq/goto = ificmpne
3019: {
3020: new BranchInstruction(
3021: InstructionConstants.OP_IFICMPEQ, 6),
3022: new BranchInstruction(
3023: InstructionConstants.OP_GOTO, X), },
3024: { new BranchInstruction(
3025: InstructionConstants.OP_IFICMPNE, X), }, },
3026: { // ificmpne/goto = ificmpeq
3027: {
3028: new BranchInstruction(
3029: InstructionConstants.OP_IFICMPNE, 6),
3030: new BranchInstruction(
3031: InstructionConstants.OP_GOTO, X), },
3032: { new BranchInstruction(
3033: InstructionConstants.OP_IFICMPEQ, X), }, },
3034: { // ificmplt/goto = ificmpge
3035: {
3036: new BranchInstruction(
3037: InstructionConstants.OP_IFICMPLT, 6),
3038: new BranchInstruction(
3039: InstructionConstants.OP_GOTO, X), },
3040: { new BranchInstruction(
3041: InstructionConstants.OP_IFICMPGE, X), }, },
3042: { // ificmpge/goto = ificmplt
3043: {
3044: new BranchInstruction(
3045: InstructionConstants.OP_IFICMPGE, 6),
3046: new BranchInstruction(
3047: InstructionConstants.OP_GOTO, X), },
3048: { new BranchInstruction(
3049: InstructionConstants.OP_IFICMPLT, X), }, },
3050: { // ificmpgt/goto = ificmple
3051: {
3052: new BranchInstruction(
3053: InstructionConstants.OP_IFICMPGT, 6),
3054: new BranchInstruction(
3055: InstructionConstants.OP_GOTO, X), },
3056: { new BranchInstruction(
3057: InstructionConstants.OP_IFICMPLE, X), }, },
3058: { // ificmple/goto = ificmpgt
3059: {
3060: new BranchInstruction(
3061: InstructionConstants.OP_IFICMPLE, 6),
3062: new BranchInstruction(
3063: InstructionConstants.OP_GOTO, X), },
3064: { new BranchInstruction(
3065: InstructionConstants.OP_IFICMPGT, X), }, },
3066: { // ifacmpeq/goto = ifacmpne
3067: {
3068: new BranchInstruction(
3069: InstructionConstants.OP_IFACMPEQ, 6),
3070: new BranchInstruction(
3071: InstructionConstants.OP_GOTO, X), },
3072: { new BranchInstruction(
3073: InstructionConstants.OP_IFACMPNE, X), }, },
3074: { // ifacmpne/goto = ifacmpeq
3075: {
3076: new BranchInstruction(
3077: InstructionConstants.OP_IFACMPNE, 6),
3078: new BranchInstruction(
3079: InstructionConstants.OP_GOTO, X), },
3080: { new BranchInstruction(
3081: InstructionConstants.OP_IFACMPEQ, X), }, },
3082: { // ifnull/goto = ifnonnull
3083: {
3084: new BranchInstruction(
3085: InstructionConstants.OP_IFNULL, 6),
3086: new BranchInstruction(
3087: InstructionConstants.OP_GOTO, X), },
3088: { new BranchInstruction(
3089: InstructionConstants.OP_IFNONNULL, X), }, },
3090: { // ifnonnull/goto = ifnull
3091: {
3092: new BranchInstruction(
3093: InstructionConstants.OP_IFNONNULL,
3094: 6),
3095: new BranchInstruction(
3096: InstructionConstants.OP_GOTO, X), },
3097: { new BranchInstruction(
3098: InstructionConstants.OP_IFNULL, X), }, },
3099: // { // switch (...) { default: ... } = pop/goto ...
3100: // {
3101: // new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 0, new int[0]),
3102: // },{
3103: // new SimpleInstruction(InstructionConstants.OP_POP),
3104: // new BranchInstruction(InstructionConstants.OP_GOTO, A),
3105: // },
3106: // },
3107: // { // switch (...) { default: ... } = pop/goto ...
3108: // {
3109: // new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 0, new int[0], new int[0]),
3110: // },{
3111: // new SimpleInstruction(InstructionConstants.OP_POP),
3112: // new BranchInstruction(InstructionConstants.OP_GOTO, A),
3113: // },
3114: // },
3115: { // switch (...) { case/case/default: ... } = switch (...) { case/default: ... }
3116: { new LookUpSwitchInstruction(
3117: InstructionConstants.OP_LOOKUPSWITCH, A,
3118: new int[] { X, Y }, new int[] { A, B }), },
3119: { new LookUpSwitchInstruction(
3120: InstructionConstants.OP_LOOKUPSWITCH, A,
3121: new int[] { Y }, new int[] { B }), }, },
3122: { // switch (...) { case/case/default: ... } = switch (...) { case/default: ... }
3123: { new LookUpSwitchInstruction(
3124: InstructionConstants.OP_LOOKUPSWITCH, B,
3125: new int[] { X, Y }, new int[] { A, B }), },
3126: { new LookUpSwitchInstruction(
3127: InstructionConstants.OP_LOOKUPSWITCH, B,
3128: new int[] { X }, new int[] { A }), }, },
3129: { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... }
3130: { new LookUpSwitchInstruction(
3131: InstructionConstants.OP_LOOKUPSWITCH, A,
3132: new int[] { X, Y, Z },
3133: new int[] { A, B, C }), },
3134: { new LookUpSwitchInstruction(
3135: InstructionConstants.OP_LOOKUPSWITCH, A,
3136: new int[] { Y, Z }, new int[] { B, C }), }, },
3137: { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... }
3138: { new LookUpSwitchInstruction(
3139: InstructionConstants.OP_LOOKUPSWITCH, B,
3140: new int[] { X, Y, Z },
3141: new int[] { A, B, C }), },
3142: { new LookUpSwitchInstruction(
3143: InstructionConstants.OP_LOOKUPSWITCH, B,
3144: new int[] { X, Z }, new int[] { A, C }), }, },
3145: { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... }
3146: { new LookUpSwitchInstruction(
3147: InstructionConstants.OP_LOOKUPSWITCH, C,
3148: new int[] { X, Y, Z },
3149: new int[] { A, B, C }), },
3150: { new LookUpSwitchInstruction(
3151: InstructionConstants.OP_LOOKUPSWITCH, C,
3152: new int[] { X, Y }, new int[] { A, B }), }, },
3153: // { // switch (...) { case ...: ... default: ... }
3154: // // = if (... == ...) ... else ...
3155: // {
3156: // new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 1, new int[] { B }),
3157: // },{
3158: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, X),
3159: // new BranchInstruction(InstructionConstants.OP_IFICMPNE, A),
3160: // new BranchInstruction(InstructionConstants.OP_GOTO, B),
3161: // },
3162: // },
3163: // { // switch (...) { case ...: ... default: ... }
3164: // // = if (... == ...) ... else ...
3165: // {
3166: // new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 1, new int[] { X }, new int[] { B }),
3167: // },{
3168: // new SimpleInstruction(InstructionConstants.OP_SIPUSH, X),
3169: // new BranchInstruction(InstructionConstants.OP_IFICMPNE, A),
3170: // new BranchInstruction(InstructionConstants.OP_GOTO, B),
3171: // },
3172: // }
3173: };
3174: }
|