diff options
Diffstat (limited to 'src/proguard/optimize/peephole/InstructionSequenceConstants.java')
-rw-r--r-- | src/proguard/optimize/peephole/InstructionSequenceConstants.java | 5090 |
1 files changed, 0 insertions, 5090 deletions
diff --git a/src/proguard/optimize/peephole/InstructionSequenceConstants.java b/src/proguard/optimize/peephole/InstructionSequenceConstants.java deleted file mode 100644 index df96dda..0000000 --- a/src/proguard/optimize/peephole/InstructionSequenceConstants.java +++ /dev/null @@ -1,5090 +0,0 @@ -/* - * ProGuard -- shrinking, optimization, obfuscation, and preverification - * of Java bytecode. - * - * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package proguard.optimize.peephole; - -import proguard.classfile.*; -import proguard.classfile.constant.*; -import proguard.classfile.instruction.*; -import proguard.classfile.visitor.ClassPrinter; - -/** - * This class contains a set of instruction sequences and their suggested - * replacements. - * - * @see InstructionSequencesReplacer - * @see InstructionSequenceReplacer - * @author Eric Lafortune - */ -public class InstructionSequenceConstants -{ - private static final int X = InstructionSequenceReplacer.X; - private static final int Y = InstructionSequenceReplacer.Y; - private static final int Z = InstructionSequenceReplacer.Z; - - private static final int A = InstructionSequenceReplacer.A; - private static final int B = InstructionSequenceReplacer.B; - private static final int C = InstructionSequenceReplacer.C; - private static final int D = InstructionSequenceReplacer.D; - - private static final int STRING_A_LENGTH = InstructionSequenceReplacer.STRING_A_LENGTH; - private static final int BOOLEAN_A_STRING = InstructionSequenceReplacer.BOOLEAN_A_STRING; - private static final int CHAR_A_STRING = InstructionSequenceReplacer.CHAR_A_STRING; - private static final int INT_A_STRING = InstructionSequenceReplacer.INT_A_STRING; - private static final int LONG_A_STRING = InstructionSequenceReplacer.LONG_A_STRING; - private static final int FLOAT_A_STRING = InstructionSequenceReplacer.FLOAT_A_STRING; - private static final int DOUBLE_A_STRING = InstructionSequenceReplacer.DOUBLE_A_STRING; - private static final int STRING_A_STRING = InstructionSequenceReplacer.STRING_A_STRING; - private static final int BOOLEAN_B_STRING = InstructionSequenceReplacer.BOOLEAN_B_STRING; - private static final int CHAR_B_STRING = InstructionSequenceReplacer.CHAR_B_STRING; - private static final int INT_B_STRING = InstructionSequenceReplacer.INT_B_STRING; - private static final int LONG_B_STRING = InstructionSequenceReplacer.LONG_B_STRING; - private static final int FLOAT_B_STRING = InstructionSequenceReplacer.FLOAT_B_STRING; - private static final int DOUBLE_B_STRING = InstructionSequenceReplacer.DOUBLE_B_STRING; - private static final int STRING_B_STRING = InstructionSequenceReplacer.STRING_B_STRING; - - private static final int I_32768 = 0; - private static final int I_65536 = 1; - private static final int I_16777216 = 2; - -// private static final int I_0x000000ff - private static final int I_0x0000ff00 = 3; - private static final int I_0x00ff0000 = 4; - private static final int I_0xff000000 = 5; - private static final int I_0x0000ffff = 6; - private static final int I_0xffff0000 = 7; - - private static final int L_M1 = 8; - private static final int L_2 = 9; - private static final int L_4 = 10; - private static final int L_8 = 11; - private static final int L_16 = 12; - private static final int L_32 = 13; - private static final int L_64 = 14; - private static final int L_128 = 15; - private static final int L_256 = 16; - private static final int L_512 = 17; - private static final int L_1024 = 18; - private static final int L_2048 = 19; - private static final int L_4096 = 20; - private static final int L_8192 = 21; - private static final int L_16384 = 22; - private static final int L_32768 = 23; - private static final int L_65536 = 24; - private static final int L_16777216 = 25; - private static final int L_4294967296 = 26; - - private static final int L_0x00000000ffffffff = 27; - private static final int L_0xffffffff00000000 = 28; - - private static final int F_M1 = 29; - - private static final int D_M1 = 30; - - private static final int STRING_EMPTY = 31; - - private static final int FIELD_I = 32; // Implicitly uses X and Y. - private static final int FIELD_L = 33; // Implicitly uses X and Y. - private static final int FIELD_F = 34; // Implicitly uses X and Y. - private static final int FIELD_D = 35; // Implicitly uses X and Y. - - private static final int METHOD_STRING_EQUALS = 36; - private static final int METHOD_STRING_LENGTH = 37; - private static final int METHOD_STRING_VALUEOF_Z = 38; - private static final int METHOD_STRING_VALUEOF_C = 39; - private static final int METHOD_STRING_VALUEOF_I = 40; - private static final int METHOD_STRING_VALUEOF_J = 41; - private static final int METHOD_STRING_VALUEOF_F = 42; - private static final int METHOD_STRING_VALUEOF_D = 43; - private static final int METHOD_STRING_VALUEOF_OBJECT = 44; - private static final int METHOD_STRINGBUFFER_INIT = 45; - private static final int METHOD_STRINGBUFFER_INIT_STRING = 46; - private static final int METHOD_STRINGBUFFER_APPEND_Z = 47; - private static final int METHOD_STRINGBUFFER_APPEND_C = 48; - private static final int METHOD_STRINGBUFFER_APPEND_I = 49; - private static final int METHOD_STRINGBUFFER_APPEND_J = 50; - private static final int METHOD_STRINGBUFFER_APPEND_F = 51; - private static final int METHOD_STRINGBUFFER_APPEND_D = 52; - private static final int METHOD_STRINGBUFFER_APPEND_STRING = 53; - private static final int METHOD_STRINGBUFFER_APPEND_OBJECT = 54; - private static final int METHOD_STRINGBUFFER_LENGTH = 55; - private static final int METHOD_STRINGBUFFER_TOSTRING = 56; - private static final int METHOD_STRINGBUILDER_INIT = 57; - private static final int METHOD_STRINGBUILDER_INIT_STRING = 58; - private static final int METHOD_STRINGBUILDER_APPEND_Z = 59; - private static final int METHOD_STRINGBUILDER_APPEND_C = 60; - private static final int METHOD_STRINGBUILDER_APPEND_I = 61; - private static final int METHOD_STRINGBUILDER_APPEND_J = 62; - private static final int METHOD_STRINGBUILDER_APPEND_F = 63; - private static final int METHOD_STRINGBUILDER_APPEND_D = 64; - private static final int METHOD_STRINGBUILDER_APPEND_STRING = 65; - private static final int METHOD_STRINGBUILDER_APPEND_OBJECT = 66; - private static final int METHOD_STRINGBUILDER_LENGTH = 67; - private static final int METHOD_STRINGBUILDER_TOSTRING = 68; - - private static final int CLASS_STRING = 69; - private static final int CLASS_STRINGBUFFER = 70; - private static final int CLASS_STRINGBUILDER = 71; - - private static final int NAME_AND_TYPE_I = 72; // Implicitly uses Y. - private static final int NAME_AND_TYPE_L = 73; // Implicitly uses Y. - private static final int NAME_AND_TYPE_F = 74; // Implicitly uses Y. - private static final int NAME_AND_TYPE_D = 75; // Implicitly uses Y. - - private static final int NAME_AND_TYPE_EQUALS = 76; - private static final int NAME_AND_TYPE_LENGTH = 77; - private static final int NAME_AND_TYPE_VALUEOF_Z = 78; - private static final int NAME_AND_TYPE_VALUEOF_C = 79; - private static final int NAME_AND_TYPE_VALUEOF_I = 80; - private static final int NAME_AND_TYPE_VALUEOF_J = 81; - private static final int NAME_AND_TYPE_VALUEOF_F = 82; - private static final int NAME_AND_TYPE_VALUEOF_D = 83; - private static final int NAME_AND_TYPE_VALUEOF_OBJECT = 84; - private static final int NAME_AND_TYPE_INIT = 85; - private static final int NAME_AND_TYPE_INIT_STRING = 86; - private static final int NAME_AND_TYPE_APPEND_Z_STRINGBUFFER = 87; - private static final int NAME_AND_TYPE_APPEND_C_STRINGBUFFER = 88; - private static final int NAME_AND_TYPE_APPEND_I_STRINGBUFFER = 89; - private static final int NAME_AND_TYPE_APPEND_J_STRINGBUFFER = 90; - private static final int NAME_AND_TYPE_APPEND_F_STRINGBUFFER = 91; - private static final int NAME_AND_TYPE_APPEND_D_STRINGBUFFER = 92; - private static final int NAME_AND_TYPE_APPEND_STRING_STRINGBUFFER = 93; - private static final int NAME_AND_TYPE_APPEND_OBJECT_STRINGBUFFER = 94; - private static final int NAME_AND_TYPE_APPEND_Z_STRINGBUILDER = 95; - private static final int NAME_AND_TYPE_APPEND_C_STRINGBUILDER = 96; - private static final int NAME_AND_TYPE_APPEND_I_STRINGBUILDER = 97; - private static final int NAME_AND_TYPE_APPEND_J_STRINGBUILDER = 98; - private static final int NAME_AND_TYPE_APPEND_F_STRINGBUILDER = 99; - private static final int NAME_AND_TYPE_APPEND_D_STRINGBUILDER = 100; - private static final int NAME_AND_TYPE_APPEND_STRING_STRINGBUILDER = 101; - private static final int NAME_AND_TYPE_APPEND_OBJECT_STRINGBUILDER = 102; - private static final int NAME_AND_TYPE_TOSTRING = 103; - - private static final int UTF8_EMPTY = 104; - private static final int UTF8_I = 105; - private static final int UTF8_L = 106; - private static final int UTF8_F = 107; - private static final int UTF8_D = 108; - private static final int UTF8_STRING = 109; - private static final int UTF8_STRINGBUFFER = 110; - private static final int UTF8_STRINGBUILDER = 111; - private static final int UTF8_EQUALS = 112; - private static final int UTF8_OBJECT_Z = 113; - private static final int UTF8_LENGTH = 114; - private static final int UTF8__I = 115; - private static final int UTF8_VALUEOF = 116; - private static final int UTF8_Z_STRING = 117; - private static final int UTF8_C_STRING = 118; - private static final int UTF8_I_STRING = 119; - private static final int UTF8_J_STRING = 120; - private static final int UTF8_F_STRING = 121; - private static final int UTF8_D_STRING = 122; - private static final int UTF8_OBJECT_STRING = 123; - private static final int UTF8_INIT = 124; - private static final int UTF8__VOID = 125; - private static final int UTF8_STRING_VOID = 126; - private static final int UTF8_TOSTRING = 127; - private static final int UTF8__STRING = 128; - private static final int UTF8_APPEND = 129; - private static final int UTF8_Z_STRINGBUFFER = 130; - private static final int UTF8_C_STRINGBUFFER = 131; - private static final int UTF8_I_STRINGBUFFER = 132; - private static final int UTF8_J_STRINGBUFFER = 133; - private static final int UTF8_F_STRINGBUFFER = 134; - private static final int UTF8_D_STRINGBUFFER = 135; - private static final int UTF8_STRING_STRINGBUFFER = 136; - private static final int UTF8_OBJECT_STRINGBUFFER = 137; - private static final int UTF8_Z_STRINGBUILDER = 138; - private static final int UTF8_C_STRINGBUILDER = 139; - private static final int UTF8_I_STRINGBUILDER = 140; - private static final int UTF8_J_STRINGBUILDER = 141; - private static final int UTF8_F_STRINGBUILDER = 142; - private static final int UTF8_D_STRINGBUILDER = 143; - private static final int UTF8_STRING_STRINGBUILDER = 144; - private static final int UTF8_OBJECT_STRINGBUILDER = 145; - - private static final int SENTINEL = 146; - - - public static final Constant[] CONSTANTS = new Constant[] - { - new IntegerConstant(32768), - new IntegerConstant(65536), - new IntegerConstant(16777216), - - new IntegerConstant(0x0000ff00), - new IntegerConstant(0x00ff0000), - new IntegerConstant(0xff000000), - new IntegerConstant(0x0000ffff), - new IntegerConstant(0xffff0000), - - new LongConstant(-1L), - new LongConstant(2L), - new LongConstant(4L), - new LongConstant(8L), - new LongConstant(16L), - new LongConstant(32L), - new LongConstant(64L), - new LongConstant(128L), - new LongConstant(256L), - new LongConstant(512L), - new LongConstant(1024L), - new LongConstant(2048L), - new LongConstant(4096L), - new LongConstant(8192L), - new LongConstant(16384L), - new LongConstant(32768L), - new LongConstant(65536L), - new LongConstant(16777216L), - new LongConstant(4294967296L), - - new LongConstant(0x00000000ffffffffL), - new LongConstant(0xffffffff00000000L), - - new FloatConstant(-1f), - - new DoubleConstant(-1d), - - new StringConstant(UTF8_EMPTY, null, null), - - new FieldrefConstant(X, NAME_AND_TYPE_I, null, null), - new FieldrefConstant(X, NAME_AND_TYPE_L, null, null), - new FieldrefConstant(X, NAME_AND_TYPE_F, null, null), - new FieldrefConstant(X, NAME_AND_TYPE_D, null, null), - - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_EQUALS, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_LENGTH, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_Z, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_C, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_I, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_J, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_F, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_D, null, null), - new MethodrefConstant(CLASS_STRING, NAME_AND_TYPE_VALUEOF_OBJECT, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_INIT, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_INIT_STRING, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_Z_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_C_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_I_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_J_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_F_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_D_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_STRING_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_APPEND_OBJECT_STRINGBUFFER, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_LENGTH, null, null), - new MethodrefConstant(CLASS_STRINGBUFFER, NAME_AND_TYPE_TOSTRING, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_INIT, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_INIT_STRING, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_Z_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_C_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_I_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_J_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_F_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_D_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_STRING_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_APPEND_OBJECT_STRINGBUILDER, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_LENGTH, null, null), - new MethodrefConstant(CLASS_STRINGBUILDER, NAME_AND_TYPE_TOSTRING, null, null), - - new ClassConstant(UTF8_STRING, null), - new ClassConstant(UTF8_STRINGBUFFER, null), - new ClassConstant(UTF8_STRINGBUILDER, null), - - new NameAndTypeConstant(Y, UTF8_I), - new NameAndTypeConstant(Y, UTF8_L), - new NameAndTypeConstant(Y, UTF8_F), - new NameAndTypeConstant(Y, UTF8_D), - new NameAndTypeConstant(UTF8_EQUALS, UTF8_OBJECT_Z), - new NameAndTypeConstant(UTF8_LENGTH, UTF8__I), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_Z_STRING), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_C_STRING), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_I_STRING), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_J_STRING), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_F_STRING), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_D_STRING), - new NameAndTypeConstant(UTF8_VALUEOF, UTF8_OBJECT_STRING), - new NameAndTypeConstant(UTF8_INIT, UTF8__VOID), - new NameAndTypeConstant(UTF8_INIT, UTF8_STRING_VOID), - new NameAndTypeConstant(UTF8_APPEND, UTF8_Z_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_C_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_I_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_J_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_F_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_D_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_STRING_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_OBJECT_STRINGBUFFER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_Z_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_C_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_I_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_J_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_F_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_D_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_STRING_STRINGBUILDER), - new NameAndTypeConstant(UTF8_APPEND, UTF8_OBJECT_STRINGBUILDER), - new NameAndTypeConstant(UTF8_TOSTRING, UTF8__STRING), - - new Utf8Constant(""), - new Utf8Constant("I"), - new Utf8Constant("J"), - new Utf8Constant("F"), - new Utf8Constant("D"), - new Utf8Constant(ClassConstants.NAME_JAVA_LANG_STRING), - new Utf8Constant(ClassConstants.NAME_JAVA_LANG_STRING_BUFFER), - new Utf8Constant(ClassConstants.NAME_JAVA_LANG_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_NAME_EQUALS), - new Utf8Constant(ClassConstants.METHOD_TYPE_EQUALS), - new Utf8Constant(ClassConstants.METHOD_NAME_LENGTH), - new Utf8Constant(ClassConstants.METHOD_TYPE_LENGTH), - new Utf8Constant(ClassConstants.METHOD_NAME_VALUEOF), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_BOOLEAN), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_CHAR), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_INT), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_LONG), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_FLOAT), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_DOUBLE), - new Utf8Constant(ClassConstants.METHOD_TYPE_VALUEOF_OBJECT), - new Utf8Constant(ClassConstants.METHOD_NAME_INIT), - new Utf8Constant(ClassConstants.METHOD_TYPE_INIT), - new Utf8Constant(ClassConstants.METHOD_TYPE_STRING_VOID), - new Utf8Constant(ClassConstants.METHOD_NAME_TOSTRING), - new Utf8Constant(ClassConstants.METHOD_TYPE_TOSTRING), - new Utf8Constant(ClassConstants.METHOD_NAME_APPEND), - new Utf8Constant(ClassConstants.METHOD_TYPE_BOOLEAN_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_CHAR_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_INT_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_LONG_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_FLOAT_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_DOUBLE_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_STRING_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_OBJECT_STRING_BUFFER), - new Utf8Constant(ClassConstants.METHOD_TYPE_BOOLEAN_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_CHAR_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_INT_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_LONG_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_FLOAT_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_DOUBLE_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_STRING_STRING_BUILDER), - new Utf8Constant(ClassConstants.METHOD_TYPE_OBJECT_STRING_BUILDER), - }; - - public static final Instruction[][][] VARIABLE = new Instruction[][][] - { - { // nop = nothing - { - new SimpleInstruction(InstructionConstants.OP_NOP), - },{ - // Nothing. - }, - }, - { // iload/pop = nothing - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // lload/pop2 = nothing - { - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new SimpleInstruction(InstructionConstants.OP_POP2), - },{ - // Nothing. - }, - }, - { // fload/pop = nothing - { - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // dload/pop2 = nothing - { - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_POP2), - },{ - // Nothing. - }, - }, - { // aload/pop = nothing - { - new VariableInstruction(InstructionConstants.OP_ALOAD, X), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // i = i = nothing - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - // Nothing. - }, - }, - { // l = l = nothing - { - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new VariableInstruction(InstructionConstants.OP_LSTORE, X), - },{ - // Nothing. - }, - }, - { // f = f = nothing - { - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new VariableInstruction(InstructionConstants.OP_FSTORE, X), - },{ - // Nothing. - }, - }, - { // d = d = nothing - { - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new VariableInstruction(InstructionConstants.OP_DSTORE, X), - },{ - // Nothing. - }, - }, - { // a = a = nothing - { - new VariableInstruction(InstructionConstants.OP_ALOAD, X), - new VariableInstruction(InstructionConstants.OP_ASTORE, X), - },{ - // Nothing. - }, - }, - { // istore/istore = pop/istore - { - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - }, - }, - { // lstore/lstore = pop2/lstore - { - new VariableInstruction(InstructionConstants.OP_LSTORE, X), - new VariableInstruction(InstructionConstants.OP_LSTORE, X), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new VariableInstruction(InstructionConstants.OP_LSTORE, X), - }, - }, - { // fstore/fstore = pop/fstore - { - new VariableInstruction(InstructionConstants.OP_FSTORE, X), - new VariableInstruction(InstructionConstants.OP_FSTORE, X), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new VariableInstruction(InstructionConstants.OP_FSTORE, X), - }, - }, - { // dstore/dstore = pop2/dstore - { - new VariableInstruction(InstructionConstants.OP_DSTORE, X), - new VariableInstruction(InstructionConstants.OP_DSTORE, X), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new VariableInstruction(InstructionConstants.OP_DSTORE, X), - }, - }, - { // astore/astore = pop/astore - { - new VariableInstruction(InstructionConstants.OP_ASTORE, X), - new VariableInstruction(InstructionConstants.OP_ASTORE, X), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new VariableInstruction(InstructionConstants.OP_ASTORE, X), - }, - }, - { // istore/iload = dup/istore - { - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - }, - }, - { // lstore/lload = dup2/lstore - { - new VariableInstruction(InstructionConstants.OP_LSTORE, X), - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP2), - new VariableInstruction(InstructionConstants.OP_LSTORE, X), - }, - }, - { // fstore/fload = dup/fstore - { - new VariableInstruction(InstructionConstants.OP_FSTORE, X), - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP), - new VariableInstruction(InstructionConstants.OP_FSTORE, X), - }, - }, - { // dstore/dload = dup2/dstore - { - new VariableInstruction(InstructionConstants.OP_DSTORE, X), - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP2), - new VariableInstruction(InstructionConstants.OP_DSTORE, X), - }, - }, - { // astore/aload = dup/astore - { - new VariableInstruction(InstructionConstants.OP_ASTORE, X), - new VariableInstruction(InstructionConstants.OP_ALOAD, X), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP), - new VariableInstruction(InstructionConstants.OP_ASTORE, X), - }, - }, - }; - - public static final Instruction[][][] ARITHMETIC = new Instruction[][][] - { - { // c + i = i + c - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IADD), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - }, - }, - { // b + i = i + b - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IADD), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - }, - }, - { // s + i = i + s - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IADD), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - }, - }, - { // c + i = i + c - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IADD), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - }, - }, - { // c * i = i * c - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IMUL), - }, - }, - { // b * i = i * b - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IMUL), - }, - }, - { // s * i = i * s - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IMUL), - }, - }, - { // c * i = i * c - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new SimpleInstruction(InstructionConstants.OP_IMUL), - }, - }, - { // c + l = l + c - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new SimpleInstruction(InstructionConstants.OP_LADD), - },{ - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new SimpleInstruction(InstructionConstants.OP_LADD), - }, - }, - { // c + l = l + c - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new SimpleInstruction(InstructionConstants.OP_LADD), - },{ - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new SimpleInstruction(InstructionConstants.OP_LADD), - }, - }, - { // c * l = l * c - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new VariableInstruction(InstructionConstants.OP_LLOAD, X), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new SimpleInstruction(InstructionConstants.OP_LMUL), - }, - }, - { // c + f = f + c - { - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_FADD), - },{ - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new SimpleInstruction(InstructionConstants.OP_FADD), - }, - }, - { // c + f = f + c - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_FADD), - },{ - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new SimpleInstruction(InstructionConstants.OP_FADD), - }, - }, - { // c * f = f * c - { - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_FMUL), - },{ - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new SimpleInstruction(InstructionConstants.OP_FMUL), - }, - }, - { // c * f = f * c - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new VariableInstruction(InstructionConstants.OP_FLOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new SimpleInstruction(InstructionConstants.OP_LMUL), - }, - }, - { // c + d = d + c - { - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_DADD), - },{ - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new SimpleInstruction(InstructionConstants.OP_DADD), - }, - }, - { // c + d = d + c - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_DADD), - },{ - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new SimpleInstruction(InstructionConstants.OP_DADD), - }, - }, - { // c * d = d * c - { - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_DMUL), - },{ - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new SimpleInstruction(InstructionConstants.OP_DMUL), - }, - }, - { // c * d = d * c - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new SimpleInstruction(InstructionConstants.OP_DMUL), - },{ - new VariableInstruction(InstructionConstants.OP_DLOAD, X), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new SimpleInstruction(InstructionConstants.OP_DMUL), - }, - }, - { // i = i + c = i += c - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, A), - }, - }, - { // i = i + b = i += b - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, A), - }, - }, - { // i = i + s = i += s - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new SimpleInstruction(InstructionConstants.OP_IADD), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, A), - }, - }, - { // i = i - -1 = i++ - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new SimpleInstruction(InstructionConstants.OP_ISUB), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, 1), - }, - }, - { // i = i - 1 = i-- - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new SimpleInstruction(InstructionConstants.OP_ISUB), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, -1), - }, - }, - { // i = i - 2 = i -= 2 - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_2), - new SimpleInstruction(InstructionConstants.OP_ISUB), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, -2), - }, - }, - { // i = i - 3 = i -= 3 - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_3), - new SimpleInstruction(InstructionConstants.OP_ISUB), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, -3), - }, - }, - { // i = i - 4 = i -= 4 - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_4), - new SimpleInstruction(InstructionConstants.OP_ISUB), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, -4), - }, - }, - { // i = i - 5 = i -= 5 - { - new VariableInstruction(InstructionConstants.OP_ILOAD, X), - new SimpleInstruction(InstructionConstants.OP_ICONST_5), - new SimpleInstruction(InstructionConstants.OP_ISUB), - new VariableInstruction(InstructionConstants.OP_ISTORE, X), - },{ - new VariableInstruction(InstructionConstants.OP_IINC, X, -5), - }, - }, - { // ... + 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_IADD), - },{ - // Nothing. - }, - }, - { // ... + 0L = ... - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - new SimpleInstruction(InstructionConstants.OP_LADD), - },{ - // Nothing. - }, - }, - // Not valid for -0.0. -// { // ... + 0f = ... -// { -// new SimpleInstruction(InstructionConstants.OP_FCONST_0), -// new SimpleInstruction(InstructionConstants.OP_FADD), -// },{ -// // Nothing. -// }, -// }, -// { // ... + 0d = ... -// { -// new SimpleInstruction(InstructionConstants.OP_DCONST_0), -// new SimpleInstruction(InstructionConstants.OP_DADD), -// },{ -// // Nothing. -// }, -// }, - { // ... - 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_ISUB), - },{ - // Nothing. - }, - }, - { // ... - 0L = ... - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - new SimpleInstruction(InstructionConstants.OP_LSUB), - },{ - // Nothing. - }, - }, - { // ... - 0f = ... - { - new SimpleInstruction(InstructionConstants.OP_FCONST_0), - new SimpleInstruction(InstructionConstants.OP_FSUB), - },{ - // Nothing. - }, - }, - { // ... - 0d = ... - { - new SimpleInstruction(InstructionConstants.OP_DCONST_0), - new SimpleInstruction(InstructionConstants.OP_DSUB), - },{ - // Nothing. - }, - }, - { // ... * -1 = -... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_INEG), - }, - }, - { // ... * 0 = 0 - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - }, - }, - { // ... * 1 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - // Nothing. - }, - }, - { // ... * 2 = ... << 1 - { - new SimpleInstruction(InstructionConstants.OP_ICONST_2), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 4 = ... << 2 - { - new SimpleInstruction(InstructionConstants.OP_ICONST_4), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_2), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 8 = ... << 3 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_3), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 16 = ... << 4 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 32 = ... << 5 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 64 = ... << 6 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 128 = ... << 7 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 256 = ... << 8 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 512 = ... << 9 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 1024 = ... << 10 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 2048 = ... << 11 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 4096 = ... << 12 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 8192 = ... << 13 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 16384 = ... << 14 - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 32768 = ... << 15 - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_32768), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 65536 = ... << 16 - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_65536), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * 16777216 = ... << 24 - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216), - new SimpleInstruction(InstructionConstants.OP_IMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHL), - }, - }, - { // ... * -1L = -... - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_LNEG), - }, - }, - { // ... * 0L = 0L - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - }, - }, - { // ... * 1L = ... - { - new SimpleInstruction(InstructionConstants.OP_LCONST_1), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - // Nothing. - }, - }, - { // ... * 2L = ... << 1 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 4L = ... << 2 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_2), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 8L = ... << 3 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_3), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 16L = ... << 4 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 32L = ... << 5 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 64L = ... << 6 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 128L = ... << 7 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 256L = ... << 8 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 512L = ... << 9 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 1024L = ... << 10 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 2048L = ... << 11 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 4096L = ... << 12 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 8192L = ... << 13 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 16384L = ... << 14 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 32768L = ... << 15 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 65536LL = ... << 16 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 16777216L = ... << 24 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * 4294967296L = ... << 32 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296), - new SimpleInstruction(InstructionConstants.OP_LMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LSHL), - }, - }, - { // ... * -1f = -... - { - new ConstantInstruction(InstructionConstants.OP_LDC, F_M1), - new SimpleInstruction(InstructionConstants.OP_FMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_FNEG), - }, - }, - // Not valid for -0.0 and for NaN. -// { // ... * 0f = 0f -// { -// new SimpleInstruction(InstructionConstants.OP_FCONST_0), -// new SimpleInstruction(InstructionConstants.OP_FMUL), -// },{ -// new SimpleInstruction(InstructionConstants.OP_POP), -// new SimpleInstruction(InstructionConstants.OP_FCONST_0), -// }, -// }, - { // ... * 1f = ... - { - new SimpleInstruction(InstructionConstants.OP_FCONST_1), - new SimpleInstruction(InstructionConstants.OP_FMUL), - },{ - // Nothing. - }, - }, - { // ... * -1d = -... - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, D_M1), - new SimpleInstruction(InstructionConstants.OP_DMUL), - },{ - new SimpleInstruction(InstructionConstants.OP_DNEG), - }, - }, - // Not valid for -0.0 and for NaN. -// { // ... * 0d = 0d -// { -// new SimpleInstruction(InstructionConstants.OP_DCONST_0), -// new SimpleInstruction(InstructionConstants.OP_DMUL), -// },{ -// new SimpleInstruction(InstructionConstants.OP_POP2), -// new SimpleInstruction(InstructionConstants.OP_DCONST_0), -// }, -// }, - { // ... * 1d = ... - { - new SimpleInstruction(InstructionConstants.OP_DCONST_1), - new SimpleInstruction(InstructionConstants.OP_DMUL), - },{ - // Nothing. - }, - }, - { // ... / -1 = -... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new SimpleInstruction(InstructionConstants.OP_IDIV), - },{ - new SimpleInstruction(InstructionConstants.OP_INEG), - }, - }, - { // ... / 1 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new SimpleInstruction(InstructionConstants.OP_IDIV), - },{ - // Nothing. - }, - }, - // Not valid for negative values. -// { // ... / 2 = ... >> 1 -// { -// new SimpleInstruction(InstructionConstants.OP_ICONST_2), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_1), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 4 = ... >> 2 -// { -// new SimpleInstruction(InstructionConstants.OP_ICONST_4), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_2), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 8 = ... >> 3 -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_3), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 16 = ... >> 4 -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 32 = ... >> 5 -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 64 = ... >> 6 -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 128 = ... >> 7 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 256 = ... >> 8 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 512 = ... >> 9 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 1024 = ... >> 10 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 2048 = ... >> 11 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 4096 = ... >> 12 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 8192 = ... >> 13 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 16384 = ... >> 14 -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 32768 = ... >> 15 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC, I_32768), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 65536 = ... >> 16 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC, I_65536), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, -// { // ... / 16777216 = ... >> 24 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216), -// new SimpleInstruction(InstructionConstants.OP_IDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), -// new SimpleInstruction(InstructionConstants.OP_ISHR), -// }, -// }, - { // ... / -1L = -... - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), - new SimpleInstruction(InstructionConstants.OP_LDIV), - },{ - new SimpleInstruction(InstructionConstants.OP_LNEG), - }, - }, - { // ... / 1L = ... - { - new SimpleInstruction(InstructionConstants.OP_LCONST_1), - new SimpleInstruction(InstructionConstants.OP_LDIV), - },{ - // Nothing. - }, - }, - // Not valid for negative values. -// { // ... / 2L = ... >> 1 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_1), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 4L = ... >> 2 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_2), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 8L = ... >> 3 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_3), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 16L = ... >> 4 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 32L = ... >> 5 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 64L = ... >> 6 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 128L = ... >> 7 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 256L = ... >> 8 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 512L = ... >> 9 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 1024L = ... >> 10 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 2048L = ... >> 11 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 4096L = ... >> 12 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 8192L = ... >> 13 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 16384L = ... >> 14 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 32768L = ... >> 15 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 65536LL = ... >> 16 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 16777216L = ... >> 24 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, -// { // ... / 4294967296L = ... >> 32 -// { -// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296), -// new SimpleInstruction(InstructionConstants.OP_LDIV), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), -// new SimpleInstruction(InstructionConstants.OP_LSHR), -// }, -// }, - { // ... / -1f = -... - { - new ConstantInstruction(InstructionConstants.OP_LDC, F_M1), - new SimpleInstruction(InstructionConstants.OP_FDIV), - },{ - new SimpleInstruction(InstructionConstants.OP_FNEG), - }, - }, - { // ... / 1f = ... - { - new SimpleInstruction(InstructionConstants.OP_FCONST_1), - new SimpleInstruction(InstructionConstants.OP_FDIV), - },{ - // Nothing. - }, - }, - { // ... / -1d = -... - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, D_M1), - new SimpleInstruction(InstructionConstants.OP_DDIV), - },{ - new SimpleInstruction(InstructionConstants.OP_DNEG), - }, - }, - { // ... / 1d = ... - { - new SimpleInstruction(InstructionConstants.OP_DCONST_1), - new SimpleInstruction(InstructionConstants.OP_DDIV), - },{ - // Nothing. - }, - }, - { // ... % 1 = 0 - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new SimpleInstruction(InstructionConstants.OP_IREM), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - }, - }, - // Not valid for negative values. -// { // ... % 2 = ... & 0x1 -// { -// new SimpleInstruction(InstructionConstants.OP_ICONST_2), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_1), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 4 = ... & 0x3 -// { -// new SimpleInstruction(InstructionConstants.OP_ICONST_4), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_ICONST_3), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 8 = ... & 0x07 -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x07), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 16 = ... & 0x0f -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x0f), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 32 = ... & 0x1f -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x1f), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 64 = ... & 0x3f -// { -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x3f), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 128 = ... & 0x7f -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x7f), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 256 = ... & 0x00ff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x00ff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 512 = ... & 0x01ff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x01ff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 1024 = ... & 0x03ff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x03ff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 2048 = ... & 0x07ff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x07ff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 4096 = ... & 0x0fff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x0fff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 8192 = ... & 0x1fff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x1fff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, -// { // ... % 16384 = ... & 0x3fff -// { -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384), -// new SimpleInstruction(InstructionConstants.OP_IREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x3fff), -// new SimpleInstruction(InstructionConstants.OP_IAND), -// }, -// }, - { // ... % 1L = 0L - { - new SimpleInstruction(InstructionConstants.OP_LCONST_1), - new SimpleInstruction(InstructionConstants.OP_LREM), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - }, - }, -// { // ... % 1f = 0f -// { -// new SimpleInstruction(InstructionConstants.OP_FCONST_1), -// new SimpleInstruction(InstructionConstants.OP_FREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_POP), -// new SimpleInstruction(InstructionConstants.OP_FCONST_0), -// }, -// }, -// { // ... % 1d = 0d -// { -// new SimpleInstruction(InstructionConstants.OP_DCONST_1), -// new SimpleInstruction(InstructionConstants.OP_DREM), -// },{ -// new SimpleInstruction(InstructionConstants.OP_POP2), -// new SimpleInstruction(InstructionConstants.OP_DCONST_0), -// }, -// }, - { // -(-...) = ... - { - new SimpleInstruction(InstructionConstants.OP_INEG), - new SimpleInstruction(InstructionConstants.OP_INEG), - },{ - // Nothing. - }, - }, - { // -(-...) = ... - { - new SimpleInstruction(InstructionConstants.OP_LNEG), - new SimpleInstruction(InstructionConstants.OP_LNEG), - },{ - // Nothing. - }, - }, - { // -(-...) = ... - { - new SimpleInstruction(InstructionConstants.OP_FNEG), - new SimpleInstruction(InstructionConstants.OP_FNEG), - },{ - // Nothing. - }, - }, - { // -(-...) = ... - { - new SimpleInstruction(InstructionConstants.OP_DNEG), - new SimpleInstruction(InstructionConstants.OP_DNEG), - },{ - // Nothing. - }, - }, - { // +(-...) = -... - { - new SimpleInstruction(InstructionConstants.OP_INEG), - new SimpleInstruction(InstructionConstants.OP_IADD), - },{ - new SimpleInstruction(InstructionConstants.OP_ISUB), - }, - }, - { // +(-...) = -... - { - new SimpleInstruction(InstructionConstants.OP_LNEG), - new SimpleInstruction(InstructionConstants.OP_LADD), - },{ - new SimpleInstruction(InstructionConstants.OP_LSUB), - }, - }, - { // +(-...) = -... - { - new SimpleInstruction(InstructionConstants.OP_FNEG), - new SimpleInstruction(InstructionConstants.OP_FADD), - },{ - new SimpleInstruction(InstructionConstants.OP_FSUB), - }, - }, - { // +(-...) = -... - { - new SimpleInstruction(InstructionConstants.OP_DNEG), - new SimpleInstruction(InstructionConstants.OP_DADD), - },{ - new SimpleInstruction(InstructionConstants.OP_DSUB), - }, - }, - { // ... << 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_ISHL), - },{ - // Nothing. - }, - }, - { // ... << 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_LSHL), - },{ - // Nothing. - }, - }, - { // ... >> 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - // Nothing. - }, - }, - { // ... >> 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_LSHR), - },{ - // Nothing. - }, - }, - { // ... >>> 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - },{ - // Nothing. - }, - }, - { // ... >>> 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_LUSHR), - },{ - // Nothing. - }, - }, - { // ... & -1 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new SimpleInstruction(InstructionConstants.OP_IAND), - },{ - // Nothing. - }, - }, - { // ... & 0 = 0 - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_IAND), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - }, - }, - { // ... & -1L = ... - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), - new SimpleInstruction(InstructionConstants.OP_LAND), - },{ - // Nothing. - }, - }, - { // ... & 0L = 0L - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - new SimpleInstruction(InstructionConstants.OP_LAND), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - }, - }, - { // ... | -1 = -1 - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new SimpleInstruction(InstructionConstants.OP_IOR), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - }, - }, - { // ... | 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_IOR), - },{ - // Nothing. - }, - }, - { // ... | -1L = -1L - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), - new SimpleInstruction(InstructionConstants.OP_LAND), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), - }, - }, - { // ... | 0L = ... - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - new SimpleInstruction(InstructionConstants.OP_LOR), - },{ - // Nothing. - }, - }, - { // ... ^ 0 = ... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new SimpleInstruction(InstructionConstants.OP_IXOR), - },{ - // Nothing. - }, - }, - { // ... ^ 0L = ... - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0), - new SimpleInstruction(InstructionConstants.OP_LXOR), - },{ - // Nothing. - }, - }, - { // (... & 0x0000ff00) >> 8 = (... >> 8) & 0xff - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ff00), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_ISHR), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - }, - }, - { // (... & 0x0000ff00) >>> 8 = (... >>> 8) & 0xff - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ff00), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - }, - }, - { // (... & 0x00ff0000) >> 16 = (... >> 16) & 0xff - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0x00ff0000), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - }, - }, - { // (... & 0x00ff0000) >>> 16 = (... >>> 16) & 0xff - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0x00ff0000), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - }, - }, - { // (... & 0xff000000) >> 24 = ... >> 24 - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0xff000000), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - }, - }, - { // (... & 0xffff0000) >> 16 = ... >> 16 - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0xffff0000), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - }, - }, - { // (... & 0xffff0000) >>> 16 = ... >>> 16 - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0xffff0000), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - }, - }, - { // (... >> 24) & 0xff = ... >>> 24 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - }, - }, - { // (... >>> 24) & 0xff = ... >>> 24 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - }, - }, - { // (byte)(... & 0x000000ff) = (byte)... - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_I2B), - },{ - new SimpleInstruction(InstructionConstants.OP_I2B), - }, - }, - { // (char)(... & 0x0000ffff) = (char)... - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ffff), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_I2C), - },{ - new SimpleInstruction(InstructionConstants.OP_I2C), - }, - }, - { // (short)(... & 0x0000ffff) = (short)... - { - new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ffff), - new SimpleInstruction(InstructionConstants.OP_IAND), - new SimpleInstruction(InstructionConstants.OP_I2S), - },{ - new SimpleInstruction(InstructionConstants.OP_I2S), - }, - }, - { // (byte)(... >> 24) = ... >> 24 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - new SimpleInstruction(InstructionConstants.OP_I2B), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - }, - }, - { // (byte)(... >>> 24) = ... >> 24 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - new SimpleInstruction(InstructionConstants.OP_I2B), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - }, - }, - { // (char)(... >> 16) = ... >>> 16 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - new SimpleInstruction(InstructionConstants.OP_I2C), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - }, - }, - { // (char)(... >>> 16) = ... >>> 16 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - new SimpleInstruction(InstructionConstants.OP_I2C), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - }, - }, - { // (short)(... >> 16) = ... >> 16 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - new SimpleInstruction(InstructionConstants.OP_I2S), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - }, - }, - { // (short)(... >>> 16) = ... >> 16 - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - new SimpleInstruction(InstructionConstants.OP_I2S), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - }, - }, - { // ... << 24 >> 24 = (byte)... - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHL), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - new SimpleInstruction(InstructionConstants.OP_I2B), - }, - }, - { // ... << 16 >>> 16 = (char)... - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHL), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_IUSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_I2C), - }, - }, - { // ... << 16 >> 16 = (short)... - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHL), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), - new SimpleInstruction(InstructionConstants.OP_ISHR), - },{ - new SimpleInstruction(InstructionConstants.OP_I2S), - }, - }, - { // ... << 32 >> 32 = (long)(int)... - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LSHL), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_L2I), - new SimpleInstruction(InstructionConstants.OP_I2L), - }, - }, - { // (int)(... & 0x00000000ffffffffL) = (int)... - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0x00000000ffffffff), - new SimpleInstruction(InstructionConstants.OP_LAND), - new SimpleInstruction(InstructionConstants.OP_L2I), - },{ - new SimpleInstruction(InstructionConstants.OP_L2I), - }, - }, - { // (... & 0xffffffff00000000L) >> 32 = ... >> 32 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0xffffffff00000000), - new SimpleInstruction(InstructionConstants.OP_LAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LSHR), - }, - }, - { // (... & 0xffffffff00000000L) >>> 32 = ... >>> 32 - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0xffffffff00000000), - new SimpleInstruction(InstructionConstants.OP_LAND), - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LUSHR), - },{ - new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), - new SimpleInstruction(InstructionConstants.OP_LUSHR), - }, - }, - { // ... += 0 = nothing - { - new VariableInstruction(InstructionConstants.OP_IINC, X, 0), - },{ - // Nothing. - }, - }, - }; - - public static final Instruction[][][] FIELD = new Instruction[][][] - { - { // getfield/putfield = nothing - { - new VariableInstruction(InstructionConstants.OP_ALOAD, X), - new VariableInstruction(InstructionConstants.OP_ALOAD, X), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y), - new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), - },{ - // Nothing. - }, - }, -// { // putfield_L/putfield_L = pop2_x1/putfield -// { -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), -// },{ -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new SimpleInstruction(InstructionConstants.OP_POP2), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), -// }, -// }, -// { // putfield_D/putfield_D = pop2_x1/putfield -// { -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), -// },{ -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new SimpleInstruction(InstructionConstants.OP_POP2), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), -// }, -// }, -// { // putfield/putfield = pop_x1/putfield -// { -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), -// },{ -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new SimpleInstruction(InstructionConstants.OP_POP), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), -// }, -// }, -// { // putfield_L/getfield_L = dup2_x1/putfield -// { -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_L), -// },{ -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new SimpleInstruction(InstructionConstants.OP_DUP2_X1), -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), -// }, -// }, -// { // putfield_D/getfield_D = dup2_x1/putfield -// { -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_D), -// },{ -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new SimpleInstruction(InstructionConstants.OP_DUP2_X1), -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), -// }, -// }, -// { // putfield/getfield = dup_x1/putfield -// { -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y), -// },{ -// new VariableInstruction(InstructionConstants.OP_ALOAD, X), -// // ... -// new SimpleInstruction(InstructionConstants.OP_DUP_X1), -// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), -// }, -// }, - { // getstatic/putstatic = nothing - { - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, X), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), - },{ - // Nothing. - }, - }, - { // putstatic_L/putstatic_L = pop2/putstatic - { - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), - }, - }, - { // putstatic_D/putstatic_D = pop2/putstatic - { - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), - }, - }, - { // putstatic/putstatic = pop/putstatic - { - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), - }, - }, - { // putstatic_L/getstatic_L = dup2/putstatic - { - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, FIELD_L), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP2), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), - }, - }, - { // putstatic_D/getstatic_D = dup2/putstatic - { - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, FIELD_D), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP2), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), - }, - }, - { // putstatic/getstatic = dup/putstatic - { - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, X), - },{ - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), - }, - }, - }; - - public static final Instruction[][][] CAST = new Instruction[][][] - { - { // (byte)(byte)... = (byte)... - { - new SimpleInstruction(InstructionConstants.OP_I2B), - new SimpleInstruction(InstructionConstants.OP_I2B), - },{ - new SimpleInstruction(InstructionConstants.OP_I2B), - }, - }, - { // (byte)(char)... = (byte)... - { - new SimpleInstruction(InstructionConstants.OP_I2C), - new SimpleInstruction(InstructionConstants.OP_I2B), - },{ - new SimpleInstruction(InstructionConstants.OP_I2B), - }, - }, - { // (byte)(short)... = (byte)... - { - new SimpleInstruction(InstructionConstants.OP_I2S), - new SimpleInstruction(InstructionConstants.OP_I2B), - },{ - new SimpleInstruction(InstructionConstants.OP_I2B), - }, - }, - { // (char)(char)... = (char)... - { - new SimpleInstruction(InstructionConstants.OP_I2C), - new SimpleInstruction(InstructionConstants.OP_I2C), - },{ - new SimpleInstruction(InstructionConstants.OP_I2C), - }, - }, - { // (char)(short)... = (char)... - { - new SimpleInstruction(InstructionConstants.OP_I2S), - new SimpleInstruction(InstructionConstants.OP_I2C), - },{ - new SimpleInstruction(InstructionConstants.OP_I2C), - }, - }, - { // (short)(byte)... = (byte)... - { - new SimpleInstruction(InstructionConstants.OP_I2B), - new SimpleInstruction(InstructionConstants.OP_I2S), - },{ - new SimpleInstruction(InstructionConstants.OP_I2B), - }, - }, - { // (short)(char)... = (short)... - { - new SimpleInstruction(InstructionConstants.OP_I2C), - new SimpleInstruction(InstructionConstants.OP_I2S), - },{ - new SimpleInstruction(InstructionConstants.OP_I2S), - }, - }, - { // (short)(short)... = (short)... - { - new SimpleInstruction(InstructionConstants.OP_I2S), - new SimpleInstruction(InstructionConstants.OP_I2S), - },{ - new SimpleInstruction(InstructionConstants.OP_I2S), - }, - }, - { // (int)(long)... = ... - { - new SimpleInstruction(InstructionConstants.OP_I2L), - new SimpleInstruction(InstructionConstants.OP_L2I), - },{ - // Nothing. - }, - }, - { // (X)(X)... = (X)... - { - new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X), - new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X), - },{ - new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X), - }, - }, - // Not handled correctly in all cases by VMs prior to Java 6... -// { // (byte)bytes[...] = bytes[...] -// { -// new SimpleInstruction(InstructionConstants.OP_BALOAD), -// new SimpleInstruction(InstructionConstants.OP_I2B), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BALOAD), -// }, -// }, -// { // (short)bytes[...] = bytes[...] -// { -// new SimpleInstruction(InstructionConstants.OP_BALOAD), -// new SimpleInstruction(InstructionConstants.OP_I2S), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BALOAD), -// }, -// }, -// { // (char)chars[...] = chars[...] -// { -// new SimpleInstruction(InstructionConstants.OP_CALOAD), -// new SimpleInstruction(InstructionConstants.OP_I2C), -// },{ -// new SimpleInstruction(InstructionConstants.OP_CALOAD), -// }, -// }, -// { // (short)shorts[...] = shorts[...] -// { -// new SimpleInstruction(InstructionConstants.OP_SALOAD), -// new SimpleInstruction(InstructionConstants.OP_I2S), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SALOAD), -// }, -// }, -// { // bytes[...] = (byte)... = bytes[...] = ... -// { -// new SimpleInstruction(InstructionConstants.OP_I2B), -// new SimpleInstruction(InstructionConstants.OP_BASTORE), -// },{ -// new SimpleInstruction(InstructionConstants.OP_BASTORE), -// }, -// }, -// { // chars[...] = (char)... = chars[...] = ... -// { -// new SimpleInstruction(InstructionConstants.OP_I2C), -// new SimpleInstruction(InstructionConstants.OP_CASTORE), -// },{ -// new SimpleInstruction(InstructionConstants.OP_CASTORE), -// }, -// }, -// { // shorts[...] = (short)... = shorts[...] = ... -// { -// new SimpleInstruction(InstructionConstants.OP_I2S), -// new SimpleInstruction(InstructionConstants.OP_SASTORE), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SASTORE), -// }, -// }, - }; - - public static final Instruction[][][] BRANCH = new Instruction[][][] - { - { // goto +3 = nothing - { - new BranchInstruction(InstructionConstants.OP_GOTO, 3), - },{ - // Nothing. - }, - }, - { // ifeq +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFEQ, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // ifne +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFNE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // iflt +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFLT, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // ifge +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFGE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // ifgt +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFGT, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // ifle +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFLE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // ificmpeq +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ificmpne +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFICMPNE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ificmplt +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFICMPLT, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ificmpge +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFICMPGE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ificmpgt +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFICMPGT, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ificmple +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFICMPLE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ifacmpeq +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ifacmpne +3 = pop2 - { - new BranchInstruction(InstructionConstants.OP_IFACMPNE, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP2), - }, - }, - { // ifnull +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFNULL, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // ifnonnull +3 = pop - { - new BranchInstruction(InstructionConstants.OP_IFNONNULL, 3), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // if (... == 0) = ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - }, - }, - { // if (0 == i) = iload/ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - }, - }, - { // if (0 == i) = getstatic/ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - }, - }, - { // if (0 == i) = getfield/ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - }, - }, - { // if (... != 0) = ifne - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFNE, X), - }, - }, - { // if (0 != i) = iload/ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - }, - }, - { // if (0 != i) = getstatic/ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - }, - }, - { // if (0 != i) = getfield/ifeq - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - }, - }, - { // if (... < 0) = iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (... < 1) = ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (0 > i) = iload/iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (1 > i) = iload/ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (0 > i) = getstatic/iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (1 > i) = getstatic/ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (0 > i) = getfield/iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (1 > i) = getfield/ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (... >= 0) = ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (... >= 1) = ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (0 <= i) = iload/ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (1 <= i) = iload/ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (0 <= i) = getstatic/ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (1 <= i) = getstatic/ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (0 <= i) = getfield/ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (1 <= i) = getfield/ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (... > 0) = ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (... > -1) = ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (0 < i) = iload/ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (-1 < i) = iload/ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (0 < i) = getstatic/ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (-1 < i) = getstatic/ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (0 < i) = getfield/ifgt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // if (-1 < i) = getfield/ifge - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // if (... <= 0) = ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (... <= -1) = iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (0 >= i) = iload/ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (-1 >= i) = iload/iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (0 >= i) = getstatic/ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (-1 >= i) = getstatic/iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (0 >= i) = getfield/ifle - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // if (-1 >= i) = getfield/iflt - { - new SimpleInstruction(InstructionConstants.OP_ICONST_M1), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // if (... == null) = ifnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFNULL, X), - }, - }, - { // if (null == a) = aload/ifnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFNULL, X), - }, - }, - { // if (null == a) = getstatic/ifnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFNULL, X), - }, - }, - { // if (null == a) = getfield/ifnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFNULL, X), - }, - }, - { // if (... != null) = ifnonnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), - }, - }, - { // if (null != a) = aload/ifnonnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), - }, - }, - { // if (null != a) = getstatic/ifnonnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), - },{ - new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), - new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), - }, - }, - { // if (null != a) = getfield/ifnonnull - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, Y), - new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), - new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), - }, - }, - { // iconst_0/ifeq = goto - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // iconst/ifeq = nothing - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - },{ - // Nothing. - }, - }, - { // bipush/ifeq = nothing - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - },{ - // Nothing. - }, - }, - { // sipush/ifeq = nothing - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - },{ - // Nothing. - }, - }, - { // iconst_0/ifne = nothing - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - },{ - // Nothing. - }, - }, - { // iconst/ifne = goto - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // bipush/ifne = goto - { - new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // sipush/ifne = goto - { - new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), - new BranchInstruction(InstructionConstants.OP_IFNE, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // iconst_0/iflt = nothing - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFLT, X), - },{ - // Nothing. - }, - }, - { // iconst_0/ifge = goto - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFGE, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // iconst_0/ifgt = nothing - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFGT, X), - },{ - // Nothing. - }, - }, - { // iconst_0/ifle = goto - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0), - new BranchInstruction(InstructionConstants.OP_IFLE, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // aconst_null/ifnull = goto - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new BranchInstruction(InstructionConstants.OP_IFNULL, X), - },{ - new BranchInstruction(InstructionConstants.OP_GOTO, X), - }, - }, - { // aconst_null/ifnonnul = nothing - { - new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), - new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), - },{ - // Nothing. - }, - }, - { // ifeq/goto = ifne - { - new BranchInstruction(InstructionConstants.OP_IFEQ, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFNE, X), - }, - }, - { // ifne/goto = ifeq - { - new BranchInstruction(InstructionConstants.OP_IFNE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFEQ, X), - }, - }, - { // iflt/goto = ifge - { - new BranchInstruction(InstructionConstants.OP_IFLT, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFGE, X), - }, - }, - { // ifge/goto = iflt - { - new BranchInstruction(InstructionConstants.OP_IFGE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFLT, X), - }, - }, - { // ifgt/goto = ifle - { - new BranchInstruction(InstructionConstants.OP_IFGT, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFLE, X), - }, - }, - { // ifle/goto = ifgt - { - new BranchInstruction(InstructionConstants.OP_IFLE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFGT, X), - }, - }, - { // ificmpeq/goto = ificmpne - { - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), - }, - }, - { // ificmpne/goto = ificmpeq - { - new BranchInstruction(InstructionConstants.OP_IFICMPNE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), - }, - }, - { // ificmplt/goto = ificmpge - { - new BranchInstruction(InstructionConstants.OP_IFICMPLT, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), - }, - }, - { // ificmpge/goto = ificmplt - { - new BranchInstruction(InstructionConstants.OP_IFICMPGE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), - }, - }, - { // ificmpgt/goto = ificmple - { - new BranchInstruction(InstructionConstants.OP_IFICMPGT, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), - }, - }, - { // ificmple/goto = ificmpgt - { - new BranchInstruction(InstructionConstants.OP_IFICMPLE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), - }, - }, - { // ifacmpeq/goto = ifacmpne - { - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), - }, - }, - { // ifacmpne/goto = ifacmpeq - { - new BranchInstruction(InstructionConstants.OP_IFACMPNE, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), - }, - }, - { // ifnull/goto = ifnonnull - { - new BranchInstruction(InstructionConstants.OP_IFNULL, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), - }, - }, - { // ifnonnull/goto = ifnull - { - new BranchInstruction(InstructionConstants.OP_IFNONNULL, 6), - new BranchInstruction(InstructionConstants.OP_GOTO, X), - },{ - new BranchInstruction(InstructionConstants.OP_IFNULL, X), - }, - }, -// { // switch (...) { default: ... } = pop/goto ... -// { -// new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 0, new int[0]), -// },{ -// new SimpleInstruction(InstructionConstants.OP_POP), -// new BranchInstruction(InstructionConstants.OP_GOTO, A), -// }, -// }, -// { // switch (...) { default: ... } = pop/goto ... -// { -// new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 0, new int[0], new int[0]), -// },{ -// new SimpleInstruction(InstructionConstants.OP_POP), -// new BranchInstruction(InstructionConstants.OP_GOTO, A), -// }, -// }, - { // switch (...) { case/case/default: ... } = switch (...) { case/default: ... } - { - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { X, Y }, new int[] { A, B }), - },{ - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { Y }, new int[] { B }), - }, - }, - { // switch (...) { case/case/default: ... } = switch (...) { case/default: ... } - { - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Y }, new int[] { A, B }), - },{ - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X }, new int[] { A }), - }, - }, - { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... } - { - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { X, Y, Z }, new int[] { A, B, C }), - },{ - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { Y, Z }, new int[] { B, C }), - }, - }, - { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... } - { - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Y, Z }, new int[] { A, B, C }), - },{ - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Z }, new int[] { A, C }), - }, - }, - { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... } - { - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, C, new int[] { X, Y, Z }, new int[] { A, B, C }), - },{ - new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, C, new int[] { X, Y }, new int[] { A, B }), - }, - }, -// { // switch (...) { case ...: ... default: ... } -// // = if (... == ...) ... else ... -// { -// new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 1, new int[] { B }), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, X), -// new BranchInstruction(InstructionConstants.OP_IFICMPNE, A), -// new BranchInstruction(InstructionConstants.OP_GOTO, B), -// }, -// }, -// { // switch (...) { case ...: ... default: ... } -// // = if (... == ...) ... else ... -// { -// new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 1, new int[] { X }, new int[] { B }), -// },{ -// new SimpleInstruction(InstructionConstants.OP_SIPUSH, X), -// new BranchInstruction(InstructionConstants.OP_IFICMPNE, A), -// new BranchInstruction(InstructionConstants.OP_GOTO, B), -// }, -// } - }; - - public static final Instruction[][][] STRING = new Instruction[][][] - { - { // "...".equals("...") = true - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRING_EQUALS), - },{ - new SimpleInstruction(InstructionConstants.OP_ICONST_1), - }, - }, - { // "...".length() = ... - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRING_LENGTH), - },{ - new SimpleInstruction(InstructionConstants.OP_SIPUSH, STRING_A_LENGTH), - }, - }, - { // String.valueOf(Z) = ".... - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, BOOLEAN_A_STRING), - }, - }, - { // String.valueOf(C) = "...." - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, CHAR_A_STRING), - }, - }, - { // String.valueOf(Cc) = "...." - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, CHAR_A_STRING), - }, - }, - { // String.valueOf(I) = "...." - { - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, INT_A_STRING), - }, - }, - { // String.valueOf(Ic) = "...." - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, INT_A_STRING), - }, - }, - { // String.valueOf(J) = "...." - { - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, LONG_A_STRING), - }, - }, - { // String.valueOf(Jc) = "...." - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, LONG_A_STRING), - }, - }, - { // String.valueOf(F) = "...." - { - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, FLOAT_A_STRING), - }, - }, - { // String.valueOf(Fc) = "...." - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, FLOAT_A_STRING), - }, - }, - { // String.valueOf(D) = "...." - { - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, DOUBLE_A_STRING), - }, - }, - { // String.valueOf(Dc) = "...." - { - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, DOUBLE_A_STRING), - }, - }, - - { // new StringBuffer("...").toString() = "..." (ignoring identity) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, A), - }, - }, - { // new StringBuffer(string).toString() = string (ignoring identity) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - }, - }, - { // new StringBuffer("...").length() = length - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_LENGTH), - },{ - new SimpleInstruction(InstructionConstants.OP_SIPUSH, STRING_A_LENGTH), - }, - }, - { // new StringBuffer() (without dup) = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...") (without dup) = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - },{ - // Nothing. - }, - }, - { // new StringBuffer()/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...")/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(z)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ILOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_Z), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(c)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ILOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(i)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ILOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(l)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_LLOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(f)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_FLOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(d)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_DLOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuffer("...").append(s)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ALOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // StringBuffer#toString()/pop = pop - { - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // StringBuffer#append("") = nothing - { - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_EMPTY), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - },{ - // Nothing. - }, - }, - { // new StringBuffer().append(Z) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, BOOLEAN_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(C) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, CHAR_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(Cc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, CHAR_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(I) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, INT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(Ic) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, INT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(J) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, LONG_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(Jc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, LONG_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(F) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, FLOAT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(Fc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, FLOAT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(D) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, DOUBLE_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append(Dc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, DOUBLE_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer().append("...") = new StringBuffer("...") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(Z) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | BOOLEAN_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(C) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(Cc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(I) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(Ic) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(J) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(Jc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(F) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(Fc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(D) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append(Dc) = new StringBuffer("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // new StringBuffer("...").append("...") = new StringBuffer("......") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | STRING_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT_STRING), - }, - }, - { // StringBuffer#append("...").append(Z) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | BOOLEAN_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(C) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(Cc) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(I) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(Ic) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(J) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(Jc) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(F) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(Fc) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(D) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append(Dc) = StringBuffer#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // StringBuffer#append("...").append("...") = StringBuffer#append("......") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | STRING_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - }, - }, - { // new StringBuffer().append(z).toString() = String.valueOf(z) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_Z), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_Z), - }, - }, - { // new StringBuffer().append(c).toString() = String.valueOf(c) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_C), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_C), - }, - }, - { // new StringBuffer().append(i).toString() = String.valueOf(i) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_I), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_I), - }, - }, - { // new StringBuffer().append(j).toString() = String.valueOf(j) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_LLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_J), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_LLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_J), - }, - }, - { // new StringBuffer().append(f).toString() = String.valueOf(f) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_FLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_F), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_FLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_F), - }, - }, - { // new StringBuffer().append(d).toString() = String.valueOf(d) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_DLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_D), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_DLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_D), - }, - }, - { // new StringBuffer().append(string).toString() = string - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - }, - }, - { // new StringBuffer().append(object).toString() = String.valueOf(object) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUFFER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUFFER_INIT), - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_APPEND_OBJECT), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUFFER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_OBJECT), - }, - }, - - { // new StringBuilder("...").toString() = "..." (ignoring identity) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, A), - }, - }, - { // new StringBuilder(string).toString() = string (ignoring identity) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - }, - }, - { // new StringBuilder("...").length() = length - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_LENGTH), - },{ - new SimpleInstruction(InstructionConstants.OP_SIPUSH, STRING_A_LENGTH), - }, - }, - { // new StringBuilder() (without dup) = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...") (without dup) = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - },{ - // Nothing. - }, - }, - { // new StringBuilder()/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...")/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(z)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ILOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_Z), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(c)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ILOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(i)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ILOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(l)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_LLOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(f)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_FLOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(d)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_DLOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // new StringBuilder("...").append(s)/pop = nothing - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new VariableInstruction(InstructionConstants.OP_ALOAD, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - // Nothing. - }, - }, - { // StringBuilder#toString()/pop = pop - { - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - new SimpleInstruction(InstructionConstants.OP_POP), - },{ - new SimpleInstruction(InstructionConstants.OP_POP), - }, - }, - { // StringBuilder#append("") = nothing - { - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_EMPTY), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - },{ - // Nothing. - }, - }, - { // new StringBuilder().append(Z) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, BOOLEAN_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(C) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, CHAR_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(Cc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, CHAR_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(I) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, INT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(Ic) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, INT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(J) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, LONG_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(Jc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, LONG_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(F) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, FLOAT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(Fc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, FLOAT_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(D) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, DOUBLE_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append(Dc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, DOUBLE_A_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder().append("...") = new StringBuilder("...") - { - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(Z) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | BOOLEAN_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(C) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(Cc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(I) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(Ic) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(J) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(Jc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(F) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(Fc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(D) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append(Dc) = new StringBuilder("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // new StringBuilder("...").append("...") = new StringBuilder("......") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | STRING_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT_STRING), - }, - }, - { // StringBuilder#append("...").append(Z) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_Z), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | BOOLEAN_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(C) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(Cc) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | CHAR_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(I) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_ICONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(Ic) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | INT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(J) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_LCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(Jc) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | LONG_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(F) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_FCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(Fc) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | FLOAT_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(D) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new SimpleInstruction(InstructionConstants.OP_DCONST_0, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append(Dc) = StringBuilder#append("....") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC2_W, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | DOUBLE_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // StringBuilder#append("...").append("...") = StringBuilder#append("......") - { - new ConstantInstruction(InstructionConstants.OP_LDC, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_LDC, B), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - },{ - new ConstantInstruction(InstructionConstants.OP_LDC, STRING_A_STRING | STRING_B_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - }, - }, - { // new StringBuilder().append(z).toString() = String.valueOf(z) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_Z), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_Z), - }, - }, - { // new StringBuilder().append(c).toString() = String.valueOf(c) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_C), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_C), - }, - }, - { // new StringBuilder().append(i).toString() = String.valueOf(i) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_I), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ILOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_I), - }, - }, - { // new StringBuilder().append(j).toString() = String.valueOf(j) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_LLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_J), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_LLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_J), - }, - }, - { // new StringBuilder().append(f).toString() = String.valueOf(f) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_FLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_F), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_FLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_F), - }, - }, - { // new StringBuilder().append(d).toString() = String.valueOf(d) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_DLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_D), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_DLOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_D), - }, - }, - { // new StringBuilder().append(string).toString() = string - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_STRING), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - }, - }, - { // new StringBuilder().append(object).toString() = String.valueOf(object) - { - new ConstantInstruction(InstructionConstants.OP_NEW, CLASS_STRINGBUILDER), - new SimpleInstruction(InstructionConstants.OP_DUP), - new ConstantInstruction(InstructionConstants.OP_INVOKESPECIAL, METHOD_STRINGBUILDER_INIT), - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_APPEND_OBJECT), - new ConstantInstruction(InstructionConstants.OP_INVOKEVIRTUAL, METHOD_STRINGBUILDER_TOSTRING), - },{ - new VariableInstruction(InstructionConstants.OP_ALOAD, A), - new ConstantInstruction(InstructionConstants.OP_INVOKESTATIC, METHOD_STRING_VALUEOF_OBJECT), - }, - }, - }; - - - /** - * Prints out the constants and the instruction sequences. - */ - public static void main(String[] args) - { - ProgramClass clazz = new ProgramClass(); - clazz.constantPool = CONSTANTS; - - ClassPrinter printer = new ClassPrinter(); - - for (int index = 0; index < CONSTANTS.length; index++) - { - System.out.print("["+index+"] "); - try - { - CONSTANTS[index].accept(clazz, printer); - } - catch (Exception e) - { - System.out.println("("+e.getClass().getName()+")"); - } - } - - if (CONSTANTS.length != SENTINEL) - { - throw new IllegalStateException("Constants length ["+CONSTANTS.length+"] different from number of constant names ["+SENTINEL+"]"); - } - - Instruction[][][] sequences = STRING; - - for (int sequence = 0; sequence < sequences.length; sequence++) - { - System.out.println(); - Instruction[] instructions = sequences[sequence][0]; - for (int index = 0; index < instructions.length; index++) - { - Instruction instruction = instructions[index]; - try - { - instruction.accept(clazz, null, null, index, new ClassPrinter()); - } - catch (Exception e) {} - } - - System.out.println("=>"); - instructions = sequences[sequence][1]; - for (int index = 0; index < instructions.length; index++) - { - Instruction instruction = instructions[index]; - try - { - instruction.accept(clazz, null, null, index, new ClassPrinter()); - } - catch (Exception e) {} - } - } - } -} |