jjg@46: /* xdono@54: * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. jjg@46: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. jjg@46: * jjg@46: * This code is free software; you can redistribute it and/or modify it jjg@46: * under the terms of the GNU General Public License version 2 only, as jjg@46: * published by the Free Software Foundation. Sun designates this jjg@46: * particular file as subject to the "Classpath" exception as provided jjg@46: * by Sun in the LICENSE file that accompanied this code. jjg@46: * jjg@46: * This code is distributed in the hope that it will be useful, but WITHOUT jjg@46: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or jjg@46: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License jjg@46: * version 2 for more details (a copy is included in the LICENSE file that jjg@46: * accompanied this code). jjg@46: * jjg@46: * You should have received a copy of the GNU General Public License version jjg@46: * 2 along with this work; if not, write to the Free Software Foundation, jjg@46: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. jjg@46: * jjg@46: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, jjg@46: * CA 95054 USA or visit www.sun.com if you need additional information or jjg@46: * have any questions. jjg@46: */ jjg@46: jjg@46: package com.sun.tools.classfile; jjg@46: jjg@46: import java.util.HashMap; jjg@46: jjg@46: /** jjg@46: * See JVMS3, section 6. jjg@46: * jjg@46: *

This is NOT part of any API supported by Sun Microsystems. If jjg@46: * you write code that depends on this, you do so at your own risk. jjg@46: * This code and its internal interfaces are subject to change or jjg@46: * deletion without notice. jjg@46: */ jjg@46: public class OpCodes { jjg@46: jjg@46: public static int opcLength(int opc) throws IllegalArgumentException { jjg@46: switch (opc >> 8) { jjg@46: case 0: jjg@46: return opcLengthsTab[opc]; jjg@46: case opc_wide: jjg@46: switch (opc & 0xFF) { jjg@46: case opc_aload: jjg@46: case opc_astore: jjg@46: case opc_fload: jjg@46: case opc_fstore: jjg@46: case opc_iload: jjg@46: case opc_istore: jjg@46: case opc_lload: jjg@46: case opc_lstore: jjg@46: case opc_dload: jjg@46: case opc_dstore: jjg@46: case opc_ret: jjg@46: return 4; jjg@46: case opc_iinc: jjg@46: return 6; jjg@46: default: jjg@46: throw new IllegalArgumentException(); jjg@46: } jjg@46: case opc_nonpriv: jjg@46: case opc_priv: jjg@46: return 2; jjg@46: default: jjg@46: throw new IllegalArgumentException(); jjg@46: } jjg@46: } jjg@46: jjg@46: public static String opcName(int opc) { jjg@46: try { jjg@46: switch (opc >> 8) { jjg@46: case 0: jjg@46: return opcNamesTab[opc]; jjg@46: case opc_wide: jjg@46: { jjg@46: String mnem = opcNamesTab[opc & 0xFF] + "_w"; jjg@46: if (mnemocodes.get(mnem) == null) { jjg@46: return null; // non-existent opcode jjg@46: } jjg@46: return mnem; jjg@46: } jjg@46: case opc_nonpriv: jjg@46: return opcExtNamesTab[opc & 0xFF]; jjg@46: case opc_priv: jjg@46: return opcPrivExtNamesTab[opc & 0xFF]; jjg@46: default: jjg@46: return null; jjg@46: } jjg@46: } catch (ArrayIndexOutOfBoundsException e) { jjg@46: switch (opc) { jjg@46: case opc_nonpriv: jjg@46: return "nonpriv"; jjg@46: case opc_priv: jjg@46: return "priv"; jjg@46: default: jjg@46: return null; jjg@46: } jjg@46: } jjg@46: } jjg@46: jjg@46: /* Opcodes */ jjg@46: public static final int opc_dead = -2; jjg@46: public static final int opc_label = -1; jjg@46: public static final int opc_nop = 0; jjg@46: public static final int opc_aconst_null = 1; jjg@46: public static final int opc_iconst_m1 = 2; jjg@46: public static final int opc_iconst_0 = 3; jjg@46: public static final int opc_iconst_1 = 4; jjg@46: public static final int opc_iconst_2 = 5; jjg@46: public static final int opc_iconst_3 = 6; jjg@46: public static final int opc_iconst_4 = 7; jjg@46: public static final int opc_iconst_5 = 8; jjg@46: public static final int opc_lconst_0 = 9; jjg@46: public static final int opc_lconst_1 = 10; jjg@46: public static final int opc_fconst_0 = 11; jjg@46: public static final int opc_fconst_1 = 12; jjg@46: public static final int opc_fconst_2 = 13; jjg@46: public static final int opc_dconst_0 = 14; jjg@46: public static final int opc_dconst_1 = 15; jjg@46: public static final int opc_bipush = 16; jjg@46: public static final int opc_sipush = 17; jjg@46: public static final int opc_ldc = 18; jjg@46: public static final int opc_ldc_w = 19; jjg@46: public static final int opc_ldc2_w = 20; jjg@46: public static final int opc_iload = 21; jjg@46: public static final int opc_lload = 22; jjg@46: public static final int opc_fload = 23; jjg@46: public static final int opc_dload = 24; jjg@46: public static final int opc_aload = 25; jjg@46: public static final int opc_iload_0 = 26; jjg@46: public static final int opc_iload_1 = 27; jjg@46: public static final int opc_iload_2 = 28; jjg@46: public static final int opc_iload_3 = 29; jjg@46: public static final int opc_lload_0 = 30; jjg@46: public static final int opc_lload_1 = 31; jjg@46: public static final int opc_lload_2 = 32; jjg@46: public static final int opc_lload_3 = 33; jjg@46: public static final int opc_fload_0 = 34; jjg@46: public static final int opc_fload_1 = 35; jjg@46: public static final int opc_fload_2 = 36; jjg@46: public static final int opc_fload_3 = 37; jjg@46: public static final int opc_dload_0 = 38; jjg@46: public static final int opc_dload_1 = 39; jjg@46: public static final int opc_dload_2 = 40; jjg@46: public static final int opc_dload_3 = 41; jjg@46: public static final int opc_aload_0 = 42; jjg@46: public static final int opc_aload_1 = 43; jjg@46: public static final int opc_aload_2 = 44; jjg@46: public static final int opc_aload_3 = 45; jjg@46: public static final int opc_iaload = 46; jjg@46: public static final int opc_laload = 47; jjg@46: public static final int opc_faload = 48; jjg@46: public static final int opc_daload = 49; jjg@46: public static final int opc_aaload = 50; jjg@46: public static final int opc_baload = 51; jjg@46: public static final int opc_caload = 52; jjg@46: public static final int opc_saload = 53; jjg@46: public static final int opc_istore = 54; jjg@46: public static final int opc_lstore = 55; jjg@46: public static final int opc_fstore = 56; jjg@46: public static final int opc_dstore = 57; jjg@46: public static final int opc_astore = 58; jjg@46: public static final int opc_istore_0 = 59; jjg@46: public static final int opc_istore_1 = 60; jjg@46: public static final int opc_istore_2 = 61; jjg@46: public static final int opc_istore_3 = 62; jjg@46: public static final int opc_lstore_0 = 63; jjg@46: public static final int opc_lstore_1 = 64; jjg@46: public static final int opc_lstore_2 = 65; jjg@46: public static final int opc_lstore_3 = 66; jjg@46: public static final int opc_fstore_0 = 67; jjg@46: public static final int opc_fstore_1 = 68; jjg@46: public static final int opc_fstore_2 = 69; jjg@46: public static final int opc_fstore_3 = 70; jjg@46: public static final int opc_dstore_0 = 71; jjg@46: public static final int opc_dstore_1 = 72; jjg@46: public static final int opc_dstore_2 = 73; jjg@46: public static final int opc_dstore_3 = 74; jjg@46: public static final int opc_astore_0 = 75; jjg@46: public static final int opc_astore_1 = 76; jjg@46: public static final int opc_astore_2 = 77; jjg@46: public static final int opc_astore_3 = 78; jjg@46: public static final int opc_iastore = 79; jjg@46: public static final int opc_lastore = 80; jjg@46: public static final int opc_fastore = 81; jjg@46: public static final int opc_dastore = 82; jjg@46: public static final int opc_aastore = 83; jjg@46: public static final int opc_bastore = 84; jjg@46: public static final int opc_castore = 85; jjg@46: public static final int opc_sastore = 86; jjg@46: public static final int opc_pop = 87; jjg@46: public static final int opc_pop2 = 88; jjg@46: public static final int opc_dup = 89; jjg@46: public static final int opc_dup_x1 = 90; jjg@46: public static final int opc_dup_x2 = 91; jjg@46: public static final int opc_dup2 = 92; jjg@46: public static final int opc_dup2_x1 = 93; jjg@46: public static final int opc_dup2_x2 = 94; jjg@46: public static final int opc_swap = 95; jjg@46: public static final int opc_iadd = 96; jjg@46: public static final int opc_ladd = 97; jjg@46: public static final int opc_fadd = 98; jjg@46: public static final int opc_dadd = 99; jjg@46: public static final int opc_isub = 100; jjg@46: public static final int opc_lsub = 101; jjg@46: public static final int opc_fsub = 102; jjg@46: public static final int opc_dsub = 103; jjg@46: public static final int opc_imul = 104; jjg@46: public static final int opc_lmul = 105; jjg@46: public static final int opc_fmul = 106; jjg@46: public static final int opc_dmul = 107; jjg@46: public static final int opc_idiv = 108; jjg@46: public static final int opc_ldiv = 109; jjg@46: public static final int opc_fdiv = 110; jjg@46: public static final int opc_ddiv = 111; jjg@46: public static final int opc_irem = 112; jjg@46: public static final int opc_lrem = 113; jjg@46: public static final int opc_frem = 114; jjg@46: public static final int opc_drem = 115; jjg@46: public static final int opc_ineg = 116; jjg@46: public static final int opc_lneg = 117; jjg@46: public static final int opc_fneg = 118; jjg@46: public static final int opc_dneg = 119; jjg@46: public static final int opc_ishl = 120; jjg@46: public static final int opc_lshl = 121; jjg@46: public static final int opc_ishr = 122; jjg@46: public static final int opc_lshr = 123; jjg@46: public static final int opc_iushr = 124; jjg@46: public static final int opc_lushr = 125; jjg@46: public static final int opc_iand = 126; jjg@46: public static final int opc_land = 127; jjg@46: public static final int opc_ior = 128; jjg@46: public static final int opc_lor = 129; jjg@46: public static final int opc_ixor = 130; jjg@46: public static final int opc_lxor = 131; jjg@46: public static final int opc_iinc = 132; jjg@46: public static final int opc_i2l = 133; jjg@46: public static final int opc_i2f = 134; jjg@46: public static final int opc_i2d = 135; jjg@46: public static final int opc_l2i = 136; jjg@46: public static final int opc_l2f = 137; jjg@46: public static final int opc_l2d = 138; jjg@46: public static final int opc_f2i = 139; jjg@46: public static final int opc_f2l = 140; jjg@46: public static final int opc_f2d = 141; jjg@46: public static final int opc_d2i = 142; jjg@46: public static final int opc_d2l = 143; jjg@46: public static final int opc_d2f = 144; jjg@46: public static final int opc_i2b = 145; jjg@46: public static final int opc_int2byte = 145; jjg@46: public static final int opc_i2c = 146; jjg@46: public static final int opc_int2char = 146; jjg@46: public static final int opc_i2s = 147; jjg@46: public static final int opc_int2short = 147; jjg@46: public static final int opc_lcmp = 148; jjg@46: public static final int opc_fcmpl = 149; jjg@46: public static final int opc_fcmpg = 150; jjg@46: public static final int opc_dcmpl = 151; jjg@46: public static final int opc_dcmpg = 152; jjg@46: public static final int opc_ifeq = 153; jjg@46: public static final int opc_ifne = 154; jjg@46: public static final int opc_iflt = 155; jjg@46: public static final int opc_ifge = 156; jjg@46: public static final int opc_ifgt = 157; jjg@46: public static final int opc_ifle = 158; jjg@46: public static final int opc_if_icmpeq = 159; jjg@46: public static final int opc_if_icmpne = 160; jjg@46: public static final int opc_if_icmplt = 161; jjg@46: public static final int opc_if_icmpge = 162; jjg@46: public static final int opc_if_icmpgt = 163; jjg@46: public static final int opc_if_icmple = 164; jjg@46: public static final int opc_if_acmpeq = 165; jjg@46: public static final int opc_if_acmpne = 166; jjg@46: public static final int opc_goto = 167; jjg@46: public static final int opc_jsr = 168; jjg@46: public static final int opc_ret = 169; jjg@46: public static final int opc_tableswitch = 170; jjg@46: public static final int opc_lookupswitch = 171; jjg@46: public static final int opc_ireturn = 172; jjg@46: public static final int opc_lreturn = 173; jjg@46: public static final int opc_freturn = 174; jjg@46: public static final int opc_dreturn = 175; jjg@46: public static final int opc_areturn = 176; jjg@46: public static final int opc_return = 177; jjg@46: public static final int opc_getstatic = 178; jjg@46: public static final int opc_putstatic = 179; jjg@46: public static final int opc_getfield = 180; jjg@46: public static final int opc_putfield = 181; jjg@46: public static final int opc_invokevirtual = 182; jjg@46: public static final int opc_invokenonvirtual = 183; jjg@46: public static final int opc_invokespecial = 183; jjg@46: public static final int opc_invokestatic = 184; jjg@46: public static final int opc_invokeinterface = 185; jjg@46: // public static final int opc_xxxunusedxxx = 186; jjg@46: public static final int opc_new = 187; jjg@46: public static final int opc_newarray = 188; jjg@46: public static final int opc_anewarray = 189; jjg@46: public static final int opc_arraylength = 190; jjg@46: public static final int opc_athrow = 191; jjg@46: public static final int opc_checkcast = 192; jjg@46: public static final int opc_instanceof = 193; jjg@46: public static final int opc_monitorenter = 194; jjg@46: public static final int opc_monitorexit = 195; jjg@46: public static final int opc_wide = 196; jjg@46: public static final int opc_multianewarray = 197; jjg@46: public static final int opc_ifnull = 198; jjg@46: public static final int opc_ifnonnull = 199; jjg@46: public static final int opc_goto_w = 200; jjg@46: public static final int opc_jsr_w = 201; jjg@46: jjg@46: /* Pseudo-instructions */ jjg@46: public static final int opc_bytecode = 203; jjg@46: public static final int opc_try = 204; jjg@46: public static final int opc_endtry = 205; jjg@46: public static final int opc_catch = 206; jjg@46: public static final int opc_var = 207; jjg@46: public static final int opc_endvar = 208; jjg@46: public static final int opc_localsmap = 209; jjg@46: public static final int opc_stackmap = 210; jjg@46: jjg@46: /* PicoJava prefixes */ jjg@46: public static final int opc_nonpriv = 254; jjg@46: public static final int opc_priv = 255; jjg@46: jjg@46: /* Wide instructions */ jjg@46: public static final int opc_iload_w = (opc_wide << 8 ) | opc_iload; jjg@46: public static final int opc_lload_w = (opc_wide << 8 ) | opc_lload; jjg@46: public static final int opc_fload_w = (opc_wide << 8 ) | opc_fload; jjg@46: public static final int opc_dload_w = (opc_wide << 8 ) | opc_dload; jjg@46: public static final int opc_aload_w = (opc_wide << 8 ) | opc_aload; jjg@46: public static final int opc_istore_w = (opc_wide << 8 ) | opc_istore; jjg@46: public static final int opc_lstore_w = (opc_wide << 8 ) | opc_lstore; jjg@46: public static final int opc_fstore_w = (opc_wide << 8 ) | opc_fstore; jjg@46: public static final int opc_dstore_w = (opc_wide << 8 ) | opc_dstore; jjg@46: public static final int opc_astore_w = (opc_wide << 8 ) | opc_astore; jjg@46: public static final int opc_ret_w = (opc_wide << 8 ) | opc_ret; jjg@46: public static final int opc_iinc_w = (opc_wide << 8 ) | opc_iinc; jjg@46: jjg@46: /* Opcode Names */ jjg@46: private static final String opcNamesTab[] = { jjg@46: "nop", jjg@46: "aconst_null", jjg@46: "iconst_m1", jjg@46: "iconst_0", jjg@46: "iconst_1", jjg@46: "iconst_2", jjg@46: "iconst_3", jjg@46: "iconst_4", jjg@46: "iconst_5", jjg@46: "lconst_0", jjg@46: "lconst_1", jjg@46: "fconst_0", jjg@46: "fconst_1", jjg@46: "fconst_2", jjg@46: "dconst_0", jjg@46: "dconst_1", jjg@46: "bipush", jjg@46: "sipush", jjg@46: "ldc", jjg@46: "ldc_w", jjg@46: "ldc2_w", jjg@46: "iload", jjg@46: "lload", jjg@46: "fload", jjg@46: "dload", jjg@46: "aload", jjg@46: "iload_0", jjg@46: "iload_1", jjg@46: "iload_2", jjg@46: "iload_3", jjg@46: "lload_0", jjg@46: "lload_1", jjg@46: "lload_2", jjg@46: "lload_3", jjg@46: "fload_0", jjg@46: "fload_1", jjg@46: "fload_2", jjg@46: "fload_3", jjg@46: "dload_0", jjg@46: "dload_1", jjg@46: "dload_2", jjg@46: "dload_3", jjg@46: "aload_0", jjg@46: "aload_1", jjg@46: "aload_2", jjg@46: "aload_3", jjg@46: "iaload", jjg@46: "laload", jjg@46: "faload", jjg@46: "daload", jjg@46: "aaload", jjg@46: "baload", jjg@46: "caload", jjg@46: "saload", jjg@46: "istore", jjg@46: "lstore", jjg@46: "fstore", jjg@46: "dstore", jjg@46: "astore", jjg@46: "istore_0", jjg@46: "istore_1", jjg@46: "istore_2", jjg@46: "istore_3", jjg@46: "lstore_0", jjg@46: "lstore_1", jjg@46: "lstore_2", jjg@46: "lstore_3", jjg@46: "fstore_0", jjg@46: "fstore_1", jjg@46: "fstore_2", jjg@46: "fstore_3", jjg@46: "dstore_0", jjg@46: "dstore_1", jjg@46: "dstore_2", jjg@46: "dstore_3", jjg@46: "astore_0", jjg@46: "astore_1", jjg@46: "astore_2", jjg@46: "astore_3", jjg@46: "iastore", jjg@46: "lastore", jjg@46: "fastore", jjg@46: "dastore", jjg@46: "aastore", jjg@46: "bastore", jjg@46: "castore", jjg@46: "sastore", jjg@46: "pop", jjg@46: "pop2", jjg@46: "dup", jjg@46: "dup_x1", jjg@46: "dup_x2", jjg@46: "dup2", jjg@46: "dup2_x1", jjg@46: "dup2_x2", jjg@46: "swap", jjg@46: "iadd", jjg@46: "ladd", jjg@46: "fadd", jjg@46: "dadd", jjg@46: "isub", jjg@46: "lsub", jjg@46: "fsub", jjg@46: "dsub", jjg@46: "imul", jjg@46: "lmul", jjg@46: "fmul", jjg@46: "dmul", jjg@46: "idiv", jjg@46: "ldiv", jjg@46: "fdiv", jjg@46: "ddiv", jjg@46: "irem", jjg@46: "lrem", jjg@46: "frem", jjg@46: "drem", jjg@46: "ineg", jjg@46: "lneg", jjg@46: "fneg", jjg@46: "dneg", jjg@46: "ishl", jjg@46: "lshl", jjg@46: "ishr", jjg@46: "lshr", jjg@46: "iushr", jjg@46: "lushr", jjg@46: "iand", jjg@46: "land", jjg@46: "ior", jjg@46: "lor", jjg@46: "ixor", jjg@46: "lxor", jjg@46: "iinc", jjg@46: "i2l", jjg@46: "i2f", jjg@46: "i2d", jjg@46: "l2i", jjg@46: "l2f", jjg@46: "l2d", jjg@46: "f2i", jjg@46: "f2l", jjg@46: "f2d", jjg@46: "d2i", jjg@46: "d2l", jjg@46: "d2f", jjg@46: "i2b", jjg@46: "i2c", jjg@46: "i2s", jjg@46: "lcmp", jjg@46: "fcmpl", jjg@46: "fcmpg", jjg@46: "dcmpl", jjg@46: "dcmpg", jjg@46: "ifeq", jjg@46: "ifne", jjg@46: "iflt", jjg@46: "ifge", jjg@46: "ifgt", jjg@46: "ifle", jjg@46: "if_icmpeq", jjg@46: "if_icmpne", jjg@46: "if_icmplt", jjg@46: "if_icmpge", jjg@46: "if_icmpgt", jjg@46: "if_icmple", jjg@46: "if_acmpeq", jjg@46: "if_acmpne", jjg@46: "goto", jjg@46: "jsr", jjg@46: "ret", jjg@46: "tableswitch", jjg@46: "lookupswitch", jjg@46: "ireturn", jjg@46: "lreturn", jjg@46: "freturn", jjg@46: "dreturn", jjg@46: "areturn", jjg@46: "return", jjg@46: "getstatic", jjg@46: "putstatic", jjg@46: "getfield", jjg@46: "putfield", jjg@46: "invokevirtual", jjg@46: "invokespecial", // was "invokenonvirtual", jjg@46: "invokestatic", jjg@46: "invokeinterface", jjg@46: "bytecode 186", //"xxxunusedxxx", jjg@46: "new", jjg@46: "newarray", jjg@46: "anewarray", jjg@46: "arraylength", jjg@46: "athrow", jjg@46: "checkcast", jjg@46: "instanceof", jjg@46: "monitorenter", jjg@46: "monitorexit", jjg@46: null, // "wide", jjg@46: "multianewarray", jjg@46: "ifnull", jjg@46: "ifnonnull", jjg@46: "goto_w", jjg@46: "jsr_w", jjg@46: "bytecode 202", // "breakpoint", jjg@46: "bytecode", jjg@46: "try", jjg@46: "endtry", jjg@46: "catch", jjg@46: "var", jjg@46: "endvar", jjg@46: "locals_map", jjg@46: "stack_map" jjg@46: }; jjg@46: jjg@46: /* Opcode Lengths */ jjg@46: private static final int opcLengthsTab[] = { jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 2, jjg@46: 3, jjg@46: 2, jjg@46: 3, jjg@46: 3, jjg@46: 2, jjg@46: 2, jjg@46: 2, jjg@46: 2, jjg@46: 2, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 2, jjg@46: 2, jjg@46: 2, jjg@46: 2, jjg@46: 2, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 3, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 2, jjg@46: 99, jjg@46: 99, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 1, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 3, jjg@46: 5, jjg@46: 0, jjg@46: 3, jjg@46: 2, jjg@46: 3, jjg@46: 1, jjg@46: 1, jjg@46: 3, jjg@46: 3, jjg@46: 1, jjg@46: 1, jjg@46: 0, // wide jjg@46: 4, jjg@46: 3, jjg@46: 3, jjg@46: 5, jjg@46: 5, jjg@46: 1, jjg@46: 1, 0, 0, 0, 0, 0 // pseudo jjg@46: }; jjg@46: jjg@46: /* Type codes, used in newarray opcode */ jjg@46: public static final int T_CLASS = 0x00000002; jjg@46: public static final int T_BOOLEAN = 0x00000004; jjg@46: public static final int T_CHAR = 0x00000005; jjg@46: public static final int T_FLOAT = 0x00000006; jjg@46: public static final int T_DOUBLE = 0x00000007; jjg@46: public static final int T_BYTE = 0x00000008; jjg@46: public static final int T_SHORT = 0x00000009; jjg@46: public static final int T_INT = 0x0000000a; jjg@46: public static final int T_LONG = 0x0000000b; jjg@46: jjg@46: private static HashMap mnemocodes = new HashMap(301, 0.5f); jjg@46: private static String opcExtNamesTab[]=new String[128]; jjg@46: private static String opcPrivExtNamesTab[]=new String[128]; jjg@46: jjg@46: private static void defineNonPriv(int opc, String mnem) { jjg@46: mnemocodes.put(opcExtNamesTab[opc] = mnem, opc_nonpriv * 256 + opc); jjg@46: } jjg@46: jjg@46: private static void definePriv(int opc, String mnem) { jjg@46: mnemocodes.put(opcPrivExtNamesTab[opc] = "priv_" + mnem, opc_priv * 256 + opc); jjg@46: } jjg@46: jjg@46: private static void defineExt(int opc, String mnem) { jjg@46: defineNonPriv(opc, mnem); jjg@46: definePriv(opc, mnem); jjg@46: } jjg@46: jjg@46: static { jjg@46: for (int i = 0; i < opc_wide; i++) { jjg@46: mnemocodes.put(opcNamesTab[i], i); jjg@46: } jjg@46: for (int i = opc_wide + 1; i < opcNamesTab.length; i++) { jjg@46: mnemocodes.put(opcNamesTab[i], i); jjg@46: } jjg@46: mnemocodes.put("invokenonvirtual", opc_invokespecial); jjg@46: jjg@46: mnemocodes.put("iload_w", opc_iload_w); jjg@46: mnemocodes.put("lload_w", opc_lload_w); jjg@46: mnemocodes.put("fload_w", opc_fload_w); jjg@46: mnemocodes.put("dload_w", opc_dload_w); jjg@46: mnemocodes.put("aload_w", opc_aload_w); jjg@46: mnemocodes.put("istore_w", opc_istore_w); jjg@46: mnemocodes.put("lstore_w", opc_lstore_w); jjg@46: mnemocodes.put("fstore_w", opc_fstore_w); jjg@46: mnemocodes.put("dstore_w", opc_dstore_w); jjg@46: mnemocodes.put("astore_w", opc_astore_w); jjg@46: mnemocodes.put("ret_w", opc_ret_w); jjg@46: mnemocodes.put("iinc_w", opc_iinc_w); jjg@46: jjg@46: mnemocodes.put("nonpriv", opc_nonpriv); jjg@46: mnemocodes.put("priv", opc_priv); jjg@46: jjg@46: defineExt(0, "load_ubyte"); jjg@46: defineExt(1, "load_byte"); jjg@46: defineExt(2, "load_char"); jjg@46: defineExt(3, "load_short"); jjg@46: defineExt(4, "load_word"); jjg@46: defineExt(10, "load_char_oe"); jjg@46: defineExt(11, "load_short_oe"); jjg@46: defineExt(12, "load_word_oe"); jjg@46: defineExt(16, "ncload_ubyte"); jjg@46: defineExt(17, "ncload_byte"); jjg@46: defineExt(18, "ncload_char"); jjg@46: defineExt(19, "ncload_short"); jjg@46: defineExt(20, "ncload_word"); jjg@46: defineExt(26, "ncload_char_oe"); jjg@46: defineExt(27, "ncload_short_oe"); jjg@46: defineExt(28, "ncload_word_oe"); jjg@46: defineExt(30, "cache_flush"); jjg@46: defineExt(32, "store_byte"); jjg@46: defineExt(34, "store_short"); jjg@46: defineExt(36, "store_word"); jjg@46: defineExt(42, "store_short_oe"); jjg@46: defineExt(44, "store_word_oe"); jjg@46: defineExt(48, "ncstore_byte"); jjg@46: defineExt(50, "ncstore_short"); jjg@46: defineExt(52, "ncstore_word"); jjg@46: defineExt(58, "ncstore_short_oe"); jjg@46: defineExt(60, "ncstore_word_oe"); jjg@46: defineExt(62, "zero_line"); jjg@46: defineNonPriv(5, "ret_from_sub"); jjg@46: defineNonPriv(63, "enter_sync_method"); jjg@46: definePriv(5, "ret_from_trap"); jjg@46: definePriv(6, "read_dcache_tag"); jjg@46: definePriv(7, "read_dcache_data"); jjg@46: definePriv(14, "read_icache_tag"); jjg@46: definePriv(15, "read_icache_data"); jjg@46: definePriv(22, "powerdown"); jjg@46: definePriv(23, "read_scache_data"); jjg@46: definePriv(31, "cache_index_flush"); jjg@46: definePriv(38, "write_dcache_tag"); jjg@46: definePriv(39, "write_dcache_data"); jjg@46: definePriv(46, "write_icache_tag"); jjg@46: definePriv(47, "write_icache_data"); jjg@46: definePriv(54, "reset"); jjg@46: definePriv(55, "write_scache_data"); jjg@46: for (int i = 0; i < 32; i++) { jjg@46: definePriv(i + 64, "read_reg_" + i); jjg@46: } jjg@46: for (int i = 0; i < 32; i++) { jjg@46: definePriv(i + 96, "write_reg_" + i); jjg@46: } jjg@46: } jjg@46: }