src/share/classes/com/sun/tools/classfile/OpCodes.java

changeset 46
7708bd6d800d
child 54
eaf608c64fec
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/share/classes/com/sun/tools/classfile/OpCodes.java	Tue Jun 03 13:26:47 2008 -0700
     1.3 @@ -0,0 +1,868 @@
     1.4 +/*
     1.5 + * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
     1.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.7 + *
     1.8 + * This code is free software; you can redistribute it and/or modify it
     1.9 + * under the terms of the GNU General Public License version 2 only, as
    1.10 + * published by the Free Software Foundation.  Sun designates this
    1.11 + * particular file as subject to the "Classpath" exception as provided
    1.12 + * by Sun in the LICENSE file that accompanied this code.
    1.13 + *
    1.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
    1.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    1.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    1.17 + * version 2 for more details (a copy is included in the LICENSE file that
    1.18 + * accompanied this code).
    1.19 + *
    1.20 + * You should have received a copy of the GNU General Public License version
    1.21 + * 2 along with this work; if not, write to the Free Software Foundation,
    1.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    1.23 + *
    1.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    1.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
    1.26 + * have any questions.
    1.27 + */
    1.28 +
    1.29 +package com.sun.tools.classfile;
    1.30 +
    1.31 +import java.util.HashMap;
    1.32 +
    1.33 +/**
    1.34 + * See JVMS3, section 6.
    1.35 + *
    1.36 + *  <p><b>This is NOT part of any API supported by Sun Microsystems.  If
    1.37 + *  you write code that depends on this, you do so at your own risk.
    1.38 + *  This code and its internal interfaces are subject to change or
    1.39 + *  deletion without notice.</b>
    1.40 + */
    1.41 +public class OpCodes {
    1.42 +
    1.43 +    public static int opcLength(int opc) throws IllegalArgumentException {
    1.44 +        switch (opc >> 8) {
    1.45 +            case 0:
    1.46 +                return opcLengthsTab[opc];
    1.47 +            case opc_wide:
    1.48 +                switch (opc & 0xFF) {
    1.49 +                    case opc_aload:
    1.50 +                    case opc_astore:
    1.51 +                    case opc_fload:
    1.52 +                    case opc_fstore:
    1.53 +                    case opc_iload:
    1.54 +                    case opc_istore:
    1.55 +                    case opc_lload:
    1.56 +                    case opc_lstore:
    1.57 +                    case opc_dload:
    1.58 +                    case opc_dstore:
    1.59 +                    case opc_ret:
    1.60 +                        return 4;
    1.61 +                    case opc_iinc:
    1.62 +                        return 6;
    1.63 +                    default:
    1.64 +                        throw new IllegalArgumentException();
    1.65 +                }
    1.66 +            case opc_nonpriv:
    1.67 +            case opc_priv:
    1.68 +                return 2;
    1.69 +            default:
    1.70 +                throw new IllegalArgumentException();
    1.71 +        }
    1.72 +    }
    1.73 +
    1.74 +    public static String opcName(int opc) {
    1.75 +        try {
    1.76 +            switch (opc >> 8) {
    1.77 +                case 0:
    1.78 +                    return opcNamesTab[opc];
    1.79 +                case opc_wide:
    1.80 +                    {
    1.81 +                        String mnem = opcNamesTab[opc & 0xFF] + "_w";
    1.82 +                        if (mnemocodes.get(mnem) == null) {
    1.83 +                            return null; // non-existent opcode
    1.84 +                        }
    1.85 +                        return mnem;
    1.86 +                    }
    1.87 +                case opc_nonpriv:
    1.88 +                    return opcExtNamesTab[opc & 0xFF];
    1.89 +                case opc_priv:
    1.90 +                    return opcPrivExtNamesTab[opc & 0xFF];
    1.91 +                default:
    1.92 +                    return null;
    1.93 +            }
    1.94 +        } catch (ArrayIndexOutOfBoundsException e) {
    1.95 +            switch (opc) {
    1.96 +                case opc_nonpriv:
    1.97 +                    return "nonpriv";
    1.98 +                case opc_priv:
    1.99 +                    return "priv";
   1.100 +                default:
   1.101 +                    return null;
   1.102 +            }
   1.103 +        }
   1.104 +    }
   1.105 +
   1.106 +    /* Opcodes */
   1.107 +    public static final int opc_dead                     = -2;
   1.108 +    public static final int opc_label                    = -1;
   1.109 +    public static final int opc_nop                      = 0;
   1.110 +    public static final int opc_aconst_null              = 1;
   1.111 +    public static final int opc_iconst_m1                = 2;
   1.112 +    public static final int opc_iconst_0                 = 3;
   1.113 +    public static final int opc_iconst_1                 = 4;
   1.114 +    public static final int opc_iconst_2                 = 5;
   1.115 +    public static final int opc_iconst_3                 = 6;
   1.116 +    public static final int opc_iconst_4                 = 7;
   1.117 +    public static final int opc_iconst_5                 = 8;
   1.118 +    public static final int opc_lconst_0                 = 9;
   1.119 +    public static final int opc_lconst_1                 = 10;
   1.120 +    public static final int opc_fconst_0                 = 11;
   1.121 +    public static final int opc_fconst_1                 = 12;
   1.122 +    public static final int opc_fconst_2                 = 13;
   1.123 +    public static final int opc_dconst_0                 = 14;
   1.124 +    public static final int opc_dconst_1                 = 15;
   1.125 +    public static final int opc_bipush                   = 16;
   1.126 +    public static final int opc_sipush                   = 17;
   1.127 +    public static final int opc_ldc                      = 18;
   1.128 +    public static final int opc_ldc_w                    = 19;
   1.129 +    public static final int opc_ldc2_w                   = 20;
   1.130 +    public static final int opc_iload                    = 21;
   1.131 +    public static final int opc_lload                    = 22;
   1.132 +    public static final int opc_fload                    = 23;
   1.133 +    public static final int opc_dload                    = 24;
   1.134 +    public static final int opc_aload                    = 25;
   1.135 +    public static final int opc_iload_0                  = 26;
   1.136 +    public static final int opc_iload_1                  = 27;
   1.137 +    public static final int opc_iload_2                  = 28;
   1.138 +    public static final int opc_iload_3                  = 29;
   1.139 +    public static final int opc_lload_0                  = 30;
   1.140 +    public static final int opc_lload_1                  = 31;
   1.141 +    public static final int opc_lload_2                  = 32;
   1.142 +    public static final int opc_lload_3                  = 33;
   1.143 +    public static final int opc_fload_0                  = 34;
   1.144 +    public static final int opc_fload_1                  = 35;
   1.145 +    public static final int opc_fload_2                  = 36;
   1.146 +    public static final int opc_fload_3                  = 37;
   1.147 +    public static final int opc_dload_0                  = 38;
   1.148 +    public static final int opc_dload_1                  = 39;
   1.149 +    public static final int opc_dload_2                  = 40;
   1.150 +    public static final int opc_dload_3                  = 41;
   1.151 +    public static final int opc_aload_0                  = 42;
   1.152 +    public static final int opc_aload_1                  = 43;
   1.153 +    public static final int opc_aload_2                  = 44;
   1.154 +    public static final int opc_aload_3                  = 45;
   1.155 +    public static final int opc_iaload                   = 46;
   1.156 +    public static final int opc_laload                   = 47;
   1.157 +    public static final int opc_faload                   = 48;
   1.158 +    public static final int opc_daload                   = 49;
   1.159 +    public static final int opc_aaload                   = 50;
   1.160 +    public static final int opc_baload                   = 51;
   1.161 +    public static final int opc_caload                   = 52;
   1.162 +    public static final int opc_saload                   = 53;
   1.163 +    public static final int opc_istore                   = 54;
   1.164 +    public static final int opc_lstore                   = 55;
   1.165 +    public static final int opc_fstore                   = 56;
   1.166 +    public static final int opc_dstore                   = 57;
   1.167 +    public static final int opc_astore                   = 58;
   1.168 +    public static final int opc_istore_0                 = 59;
   1.169 +    public static final int opc_istore_1                 = 60;
   1.170 +    public static final int opc_istore_2                 = 61;
   1.171 +    public static final int opc_istore_3                 = 62;
   1.172 +    public static final int opc_lstore_0                 = 63;
   1.173 +    public static final int opc_lstore_1                 = 64;
   1.174 +    public static final int opc_lstore_2                 = 65;
   1.175 +    public static final int opc_lstore_3                 = 66;
   1.176 +    public static final int opc_fstore_0                 = 67;
   1.177 +    public static final int opc_fstore_1                 = 68;
   1.178 +    public static final int opc_fstore_2                 = 69;
   1.179 +    public static final int opc_fstore_3                 = 70;
   1.180 +    public static final int opc_dstore_0                 = 71;
   1.181 +    public static final int opc_dstore_1                 = 72;
   1.182 +    public static final int opc_dstore_2                 = 73;
   1.183 +    public static final int opc_dstore_3                 = 74;
   1.184 +    public static final int opc_astore_0                 = 75;
   1.185 +    public static final int opc_astore_1                 = 76;
   1.186 +    public static final int opc_astore_2                 = 77;
   1.187 +    public static final int opc_astore_3                 = 78;
   1.188 +    public static final int opc_iastore                  = 79;
   1.189 +    public static final int opc_lastore                  = 80;
   1.190 +    public static final int opc_fastore                  = 81;
   1.191 +    public static final int opc_dastore                  = 82;
   1.192 +    public static final int opc_aastore                  = 83;
   1.193 +    public static final int opc_bastore                  = 84;
   1.194 +    public static final int opc_castore                  = 85;
   1.195 +    public static final int opc_sastore                  = 86;
   1.196 +    public static final int opc_pop                      = 87;
   1.197 +    public static final int opc_pop2                     = 88;
   1.198 +    public static final int opc_dup                      = 89;
   1.199 +    public static final int opc_dup_x1                   = 90;
   1.200 +    public static final int opc_dup_x2                   = 91;
   1.201 +    public static final int opc_dup2                     = 92;
   1.202 +    public static final int opc_dup2_x1                  = 93;
   1.203 +    public static final int opc_dup2_x2                  = 94;
   1.204 +    public static final int opc_swap                     = 95;
   1.205 +    public static final int opc_iadd                     = 96;
   1.206 +    public static final int opc_ladd                     = 97;
   1.207 +    public static final int opc_fadd                     = 98;
   1.208 +    public static final int opc_dadd                     = 99;
   1.209 +    public static final int opc_isub                     = 100;
   1.210 +    public static final int opc_lsub                     = 101;
   1.211 +    public static final int opc_fsub                     = 102;
   1.212 +    public static final int opc_dsub                     = 103;
   1.213 +    public static final int opc_imul                     = 104;
   1.214 +    public static final int opc_lmul                     = 105;
   1.215 +    public static final int opc_fmul                     = 106;
   1.216 +    public static final int opc_dmul                     = 107;
   1.217 +    public static final int opc_idiv                     = 108;
   1.218 +    public static final int opc_ldiv                     = 109;
   1.219 +    public static final int opc_fdiv                     = 110;
   1.220 +    public static final int opc_ddiv                     = 111;
   1.221 +    public static final int opc_irem                     = 112;
   1.222 +    public static final int opc_lrem                     = 113;
   1.223 +    public static final int opc_frem                     = 114;
   1.224 +    public static final int opc_drem                     = 115;
   1.225 +    public static final int opc_ineg                     = 116;
   1.226 +    public static final int opc_lneg                     = 117;
   1.227 +    public static final int opc_fneg                     = 118;
   1.228 +    public static final int opc_dneg                     = 119;
   1.229 +    public static final int opc_ishl                     = 120;
   1.230 +    public static final int opc_lshl                     = 121;
   1.231 +    public static final int opc_ishr                     = 122;
   1.232 +    public static final int opc_lshr                     = 123;
   1.233 +    public static final int opc_iushr                    = 124;
   1.234 +    public static final int opc_lushr                    = 125;
   1.235 +    public static final int opc_iand                     = 126;
   1.236 +    public static final int opc_land                     = 127;
   1.237 +    public static final int opc_ior                      = 128;
   1.238 +    public static final int opc_lor                      = 129;
   1.239 +    public static final int opc_ixor                     = 130;
   1.240 +    public static final int opc_lxor                     = 131;
   1.241 +    public static final int opc_iinc                     = 132;
   1.242 +    public static final int opc_i2l                      = 133;
   1.243 +    public static final int opc_i2f                      = 134;
   1.244 +    public static final int opc_i2d                      = 135;
   1.245 +    public static final int opc_l2i                      = 136;
   1.246 +    public static final int opc_l2f                      = 137;
   1.247 +    public static final int opc_l2d                      = 138;
   1.248 +    public static final int opc_f2i                      = 139;
   1.249 +    public static final int opc_f2l                      = 140;
   1.250 +    public static final int opc_f2d                      = 141;
   1.251 +    public static final int opc_d2i                      = 142;
   1.252 +    public static final int opc_d2l                      = 143;
   1.253 +    public static final int opc_d2f                      = 144;
   1.254 +    public static final int opc_i2b                      = 145;
   1.255 +    public static final int opc_int2byte                 = 145;
   1.256 +    public static final int opc_i2c                      = 146;
   1.257 +    public static final int opc_int2char                 = 146;
   1.258 +    public static final int opc_i2s                      = 147;
   1.259 +    public static final int opc_int2short                = 147;
   1.260 +    public static final int opc_lcmp                     = 148;
   1.261 +    public static final int opc_fcmpl                    = 149;
   1.262 +    public static final int opc_fcmpg                    = 150;
   1.263 +    public static final int opc_dcmpl                    = 151;
   1.264 +    public static final int opc_dcmpg                    = 152;
   1.265 +    public static final int opc_ifeq                     = 153;
   1.266 +    public static final int opc_ifne                     = 154;
   1.267 +    public static final int opc_iflt                     = 155;
   1.268 +    public static final int opc_ifge                     = 156;
   1.269 +    public static final int opc_ifgt                     = 157;
   1.270 +    public static final int opc_ifle                     = 158;
   1.271 +    public static final int opc_if_icmpeq                = 159;
   1.272 +    public static final int opc_if_icmpne                = 160;
   1.273 +    public static final int opc_if_icmplt                = 161;
   1.274 +    public static final int opc_if_icmpge                = 162;
   1.275 +    public static final int opc_if_icmpgt                = 163;
   1.276 +    public static final int opc_if_icmple                = 164;
   1.277 +    public static final int opc_if_acmpeq                = 165;
   1.278 +    public static final int opc_if_acmpne                = 166;
   1.279 +    public static final int opc_goto                     = 167;
   1.280 +    public static final int opc_jsr                      = 168;
   1.281 +    public static final int opc_ret                      = 169;
   1.282 +    public static final int opc_tableswitch              = 170;
   1.283 +    public static final int opc_lookupswitch             = 171;
   1.284 +    public static final int opc_ireturn                  = 172;
   1.285 +    public static final int opc_lreturn                  = 173;
   1.286 +    public static final int opc_freturn                  = 174;
   1.287 +    public static final int opc_dreturn                  = 175;
   1.288 +    public static final int opc_areturn                  = 176;
   1.289 +    public static final int opc_return                   = 177;
   1.290 +    public static final int opc_getstatic                = 178;
   1.291 +    public static final int opc_putstatic                = 179;
   1.292 +    public static final int opc_getfield                 = 180;
   1.293 +    public static final int opc_putfield                 = 181;
   1.294 +    public static final int opc_invokevirtual            = 182;
   1.295 +    public static final int opc_invokenonvirtual         = 183;
   1.296 +    public static final int opc_invokespecial            = 183;
   1.297 +    public static final int opc_invokestatic             = 184;
   1.298 +    public static final int opc_invokeinterface          = 185;
   1.299 +//  public static final int opc_xxxunusedxxx             = 186;
   1.300 +    public static final int opc_new                      = 187;
   1.301 +    public static final int opc_newarray                 = 188;
   1.302 +    public static final int opc_anewarray                = 189;
   1.303 +    public static final int opc_arraylength              = 190;
   1.304 +    public static final int opc_athrow                   = 191;
   1.305 +    public static final int opc_checkcast                = 192;
   1.306 +    public static final int opc_instanceof               = 193;
   1.307 +    public static final int opc_monitorenter             = 194;
   1.308 +    public static final int opc_monitorexit              = 195;
   1.309 +    public static final int opc_wide                     = 196;
   1.310 +    public static final int opc_multianewarray           = 197;
   1.311 +    public static final int opc_ifnull                   = 198;
   1.312 +    public static final int opc_ifnonnull                = 199;
   1.313 +    public static final int opc_goto_w                   = 200;
   1.314 +    public static final int opc_jsr_w                    = 201;
   1.315 +
   1.316 +    /* Pseudo-instructions */
   1.317 +    public static final int opc_bytecode                 = 203;
   1.318 +    public static final int opc_try                      = 204;
   1.319 +    public static final int opc_endtry                   = 205;
   1.320 +    public static final int opc_catch                    = 206;
   1.321 +    public static final int opc_var                      = 207;
   1.322 +    public static final int opc_endvar                   = 208;
   1.323 +    public static final int opc_localsmap                = 209;
   1.324 +    public static final int opc_stackmap                 = 210;
   1.325 +
   1.326 +    /* PicoJava prefixes */
   1.327 +    public static final int opc_nonpriv                  = 254;
   1.328 +    public static final int opc_priv                     = 255;
   1.329 +
   1.330 +    /* Wide instructions */
   1.331 +    public static final int opc_iload_w         = (opc_wide << 8 ) | opc_iload;
   1.332 +    public static final int opc_lload_w         = (opc_wide << 8 ) | opc_lload;
   1.333 +    public static final int opc_fload_w         = (opc_wide << 8 ) | opc_fload;
   1.334 +    public static final int opc_dload_w         = (opc_wide << 8 ) | opc_dload;
   1.335 +    public static final int opc_aload_w         = (opc_wide << 8 ) | opc_aload;
   1.336 +    public static final int opc_istore_w        = (opc_wide << 8 ) | opc_istore;
   1.337 +    public static final int opc_lstore_w        = (opc_wide << 8 ) | opc_lstore;
   1.338 +    public static final int opc_fstore_w        = (opc_wide << 8 ) | opc_fstore;
   1.339 +    public static final int opc_dstore_w        = (opc_wide << 8 ) | opc_dstore;
   1.340 +    public static final int opc_astore_w        = (opc_wide << 8 ) | opc_astore;
   1.341 +    public static final int opc_ret_w           = (opc_wide << 8 ) | opc_ret;
   1.342 +    public static final int opc_iinc_w          = (opc_wide << 8 ) | opc_iinc;
   1.343 +
   1.344 +    /* Opcode Names */
   1.345 +    private static final String opcNamesTab[] = {
   1.346 +        "nop",
   1.347 +        "aconst_null",
   1.348 +        "iconst_m1",
   1.349 +        "iconst_0",
   1.350 +        "iconst_1",
   1.351 +        "iconst_2",
   1.352 +        "iconst_3",
   1.353 +        "iconst_4",
   1.354 +        "iconst_5",
   1.355 +        "lconst_0",
   1.356 +        "lconst_1",
   1.357 +        "fconst_0",
   1.358 +        "fconst_1",
   1.359 +        "fconst_2",
   1.360 +        "dconst_0",
   1.361 +        "dconst_1",
   1.362 +        "bipush",
   1.363 +        "sipush",
   1.364 +        "ldc",
   1.365 +        "ldc_w",
   1.366 +        "ldc2_w",
   1.367 +        "iload",
   1.368 +        "lload",
   1.369 +        "fload",
   1.370 +        "dload",
   1.371 +        "aload",
   1.372 +        "iload_0",
   1.373 +        "iload_1",
   1.374 +        "iload_2",
   1.375 +        "iload_3",
   1.376 +        "lload_0",
   1.377 +        "lload_1",
   1.378 +        "lload_2",
   1.379 +        "lload_3",
   1.380 +        "fload_0",
   1.381 +        "fload_1",
   1.382 +        "fload_2",
   1.383 +        "fload_3",
   1.384 +        "dload_0",
   1.385 +        "dload_1",
   1.386 +        "dload_2",
   1.387 +        "dload_3",
   1.388 +        "aload_0",
   1.389 +        "aload_1",
   1.390 +        "aload_2",
   1.391 +        "aload_3",
   1.392 +        "iaload",
   1.393 +        "laload",
   1.394 +        "faload",
   1.395 +        "daload",
   1.396 +        "aaload",
   1.397 +        "baload",
   1.398 +        "caload",
   1.399 +        "saload",
   1.400 +        "istore",
   1.401 +        "lstore",
   1.402 +        "fstore",
   1.403 +        "dstore",
   1.404 +        "astore",
   1.405 +        "istore_0",
   1.406 +        "istore_1",
   1.407 +        "istore_2",
   1.408 +        "istore_3",
   1.409 +        "lstore_0",
   1.410 +        "lstore_1",
   1.411 +        "lstore_2",
   1.412 +        "lstore_3",
   1.413 +        "fstore_0",
   1.414 +        "fstore_1",
   1.415 +        "fstore_2",
   1.416 +        "fstore_3",
   1.417 +        "dstore_0",
   1.418 +        "dstore_1",
   1.419 +        "dstore_2",
   1.420 +        "dstore_3",
   1.421 +        "astore_0",
   1.422 +        "astore_1",
   1.423 +        "astore_2",
   1.424 +        "astore_3",
   1.425 +        "iastore",
   1.426 +        "lastore",
   1.427 +        "fastore",
   1.428 +        "dastore",
   1.429 +        "aastore",
   1.430 +        "bastore",
   1.431 +        "castore",
   1.432 +        "sastore",
   1.433 +        "pop",
   1.434 +        "pop2",
   1.435 +        "dup",
   1.436 +        "dup_x1",
   1.437 +        "dup_x2",
   1.438 +        "dup2",
   1.439 +        "dup2_x1",
   1.440 +        "dup2_x2",
   1.441 +        "swap",
   1.442 +        "iadd",
   1.443 +        "ladd",
   1.444 +        "fadd",
   1.445 +        "dadd",
   1.446 +        "isub",
   1.447 +        "lsub",
   1.448 +        "fsub",
   1.449 +        "dsub",
   1.450 +        "imul",
   1.451 +        "lmul",
   1.452 +        "fmul",
   1.453 +        "dmul",
   1.454 +        "idiv",
   1.455 +        "ldiv",
   1.456 +        "fdiv",
   1.457 +        "ddiv",
   1.458 +        "irem",
   1.459 +        "lrem",
   1.460 +        "frem",
   1.461 +        "drem",
   1.462 +        "ineg",
   1.463 +        "lneg",
   1.464 +        "fneg",
   1.465 +        "dneg",
   1.466 +        "ishl",
   1.467 +        "lshl",
   1.468 +        "ishr",
   1.469 +        "lshr",
   1.470 +        "iushr",
   1.471 +        "lushr",
   1.472 +        "iand",
   1.473 +        "land",
   1.474 +        "ior",
   1.475 +        "lor",
   1.476 +        "ixor",
   1.477 +        "lxor",
   1.478 +        "iinc",
   1.479 +        "i2l",
   1.480 +        "i2f",
   1.481 +        "i2d",
   1.482 +        "l2i",
   1.483 +        "l2f",
   1.484 +        "l2d",
   1.485 +        "f2i",
   1.486 +        "f2l",
   1.487 +        "f2d",
   1.488 +        "d2i",
   1.489 +        "d2l",
   1.490 +        "d2f",
   1.491 +        "i2b",
   1.492 +        "i2c",
   1.493 +        "i2s",
   1.494 +        "lcmp",
   1.495 +        "fcmpl",
   1.496 +        "fcmpg",
   1.497 +        "dcmpl",
   1.498 +        "dcmpg",
   1.499 +        "ifeq",
   1.500 +        "ifne",
   1.501 +        "iflt",
   1.502 +        "ifge",
   1.503 +        "ifgt",
   1.504 +        "ifle",
   1.505 +        "if_icmpeq",
   1.506 +        "if_icmpne",
   1.507 +        "if_icmplt",
   1.508 +        "if_icmpge",
   1.509 +        "if_icmpgt",
   1.510 +        "if_icmple",
   1.511 +        "if_acmpeq",
   1.512 +        "if_acmpne",
   1.513 +        "goto",
   1.514 +        "jsr",
   1.515 +        "ret",
   1.516 +        "tableswitch",
   1.517 +        "lookupswitch",
   1.518 +        "ireturn",
   1.519 +        "lreturn",
   1.520 +        "freturn",
   1.521 +        "dreturn",
   1.522 +        "areturn",
   1.523 +        "return",
   1.524 +        "getstatic",
   1.525 +        "putstatic",
   1.526 +        "getfield",
   1.527 +        "putfield",
   1.528 +        "invokevirtual",
   1.529 +        "invokespecial",        //      was "invokenonvirtual",
   1.530 +        "invokestatic",
   1.531 +        "invokeinterface",
   1.532 +        "bytecode 186",         //"xxxunusedxxx",
   1.533 +        "new",
   1.534 +        "newarray",
   1.535 +        "anewarray",
   1.536 +        "arraylength",
   1.537 +        "athrow",
   1.538 +        "checkcast",
   1.539 +        "instanceof",
   1.540 +        "monitorenter",
   1.541 +        "monitorexit",
   1.542 +         null, // "wide",
   1.543 +        "multianewarray",
   1.544 +        "ifnull",
   1.545 +        "ifnonnull",
   1.546 +        "goto_w",
   1.547 +        "jsr_w",
   1.548 +        "bytecode 202",         // "breakpoint",
   1.549 +        "bytecode",
   1.550 +        "try",
   1.551 +        "endtry",
   1.552 +        "catch",
   1.553 +        "var",
   1.554 +        "endvar",
   1.555 +        "locals_map",
   1.556 +        "stack_map"
   1.557 +    };
   1.558 +
   1.559 +    /* Opcode Lengths */
   1.560 +    private static final int opcLengthsTab[] = {
   1.561 +        1,
   1.562 +        1,
   1.563 +        1,
   1.564 +        1,
   1.565 +        1,
   1.566 +        1,
   1.567 +        1,
   1.568 +        1,
   1.569 +        1,
   1.570 +        1,
   1.571 +        1,
   1.572 +        1,
   1.573 +        1,
   1.574 +        1,
   1.575 +        1,
   1.576 +        1,
   1.577 +        2,
   1.578 +        3,
   1.579 +        2,
   1.580 +        3,
   1.581 +        3,
   1.582 +        2,
   1.583 +        2,
   1.584 +        2,
   1.585 +        2,
   1.586 +        2,
   1.587 +        1,
   1.588 +        1,
   1.589 +        1,
   1.590 +        1,
   1.591 +        1,
   1.592 +        1,
   1.593 +        1,
   1.594 +        1,
   1.595 +        1,
   1.596 +        1,
   1.597 +        1,
   1.598 +        1,
   1.599 +        1,
   1.600 +        1,
   1.601 +        1,
   1.602 +        1,
   1.603 +        1,
   1.604 +        1,
   1.605 +        1,
   1.606 +        1,
   1.607 +        1,
   1.608 +        1,
   1.609 +        1,
   1.610 +        1,
   1.611 +        1,
   1.612 +        1,
   1.613 +        1,
   1.614 +        1,
   1.615 +        2,
   1.616 +        2,
   1.617 +        2,
   1.618 +        2,
   1.619 +        2,
   1.620 +        1,
   1.621 +        1,
   1.622 +        1,
   1.623 +        1,
   1.624 +        1,
   1.625 +        1,
   1.626 +        1,
   1.627 +        1,
   1.628 +        1,
   1.629 +        1,
   1.630 +        1,
   1.631 +        1,
   1.632 +        1,
   1.633 +        1,
   1.634 +        1,
   1.635 +        1,
   1.636 +        1,
   1.637 +        1,
   1.638 +        1,
   1.639 +        1,
   1.640 +        1,
   1.641 +        1,
   1.642 +        1,
   1.643 +        1,
   1.644 +        1,
   1.645 +        1,
   1.646 +        1,
   1.647 +        1,
   1.648 +        1,
   1.649 +        1,
   1.650 +        1,
   1.651 +        1,
   1.652 +        1,
   1.653 +        1,
   1.654 +        1,
   1.655 +        1,
   1.656 +        1,
   1.657 +        1,
   1.658 +        1,
   1.659 +        1,
   1.660 +        1,
   1.661 +        1,
   1.662 +        1,
   1.663 +        1,
   1.664 +        1,
   1.665 +        1,
   1.666 +        1,
   1.667 +        1,
   1.668 +        1,
   1.669 +        1,
   1.670 +        1,
   1.671 +        1,
   1.672 +        1,
   1.673 +        1,
   1.674 +        1,
   1.675 +        1,
   1.676 +        1,
   1.677 +        1,
   1.678 +        1,
   1.679 +        1,
   1.680 +        1,
   1.681 +        1,
   1.682 +        1,
   1.683 +        1,
   1.684 +        1,
   1.685 +        1,
   1.686 +        1,
   1.687 +        1,
   1.688 +        1,
   1.689 +        1,
   1.690 +        1,
   1.691 +        1,
   1.692 +        1,
   1.693 +        3,
   1.694 +        1,
   1.695 +        1,
   1.696 +        1,
   1.697 +        1,
   1.698 +        1,
   1.699 +        1,
   1.700 +        1,
   1.701 +        1,
   1.702 +        1,
   1.703 +        1,
   1.704 +        1,
   1.705 +        1,
   1.706 +        1,
   1.707 +        1,
   1.708 +        1,
   1.709 +        1,
   1.710 +        1,
   1.711 +        1,
   1.712 +        1,
   1.713 +        1,
   1.714 +        3,
   1.715 +        3,
   1.716 +        3,
   1.717 +        3,
   1.718 +        3,
   1.719 +        3,
   1.720 +        3,
   1.721 +        3,
   1.722 +        3,
   1.723 +        3,
   1.724 +        3,
   1.725 +        3,
   1.726 +        3,
   1.727 +        3,
   1.728 +        3,
   1.729 +        3,
   1.730 +        2,
   1.731 +        99,
   1.732 +        99,
   1.733 +        1,
   1.734 +        1,
   1.735 +        1,
   1.736 +        1,
   1.737 +        1,
   1.738 +        1,
   1.739 +        3,
   1.740 +        3,
   1.741 +        3,
   1.742 +        3,
   1.743 +        3,
   1.744 +        3,
   1.745 +        3,
   1.746 +        5,
   1.747 +        0,
   1.748 +        3,
   1.749 +        2,
   1.750 +        3,
   1.751 +        1,
   1.752 +        1,
   1.753 +        3,
   1.754 +        3,
   1.755 +        1,
   1.756 +        1,
   1.757 +        0, // wide
   1.758 +        4,
   1.759 +        3,
   1.760 +        3,
   1.761 +        5,
   1.762 +        5,
   1.763 +        1,
   1.764 +        1, 0, 0, 0, 0, 0 // pseudo
   1.765 +    };
   1.766 +
   1.767 +    /* Type codes, used in newarray opcode */
   1.768 +    public static final int T_CLASS                      = 0x00000002;
   1.769 +    public static final int T_BOOLEAN                    = 0x00000004;
   1.770 +    public static final int T_CHAR                       = 0x00000005;
   1.771 +    public static final int T_FLOAT                      = 0x00000006;
   1.772 +    public static final int T_DOUBLE                     = 0x00000007;
   1.773 +    public static final int T_BYTE                       = 0x00000008;
   1.774 +    public static final int T_SHORT                      = 0x00000009;
   1.775 +    public static final int T_INT                        = 0x0000000a;
   1.776 +    public static final int T_LONG                       = 0x0000000b;
   1.777 +
   1.778 +    private static HashMap<String,Integer> mnemocodes = new HashMap<String,Integer>(301, 0.5f);
   1.779 +    private static String opcExtNamesTab[]=new String[128];
   1.780 +    private static String opcPrivExtNamesTab[]=new String[128];
   1.781 +
   1.782 +    private static void defineNonPriv(int opc, String mnem) {
   1.783 +        mnemocodes.put(opcExtNamesTab[opc] = mnem, opc_nonpriv * 256 + opc);
   1.784 +    }
   1.785 +
   1.786 +    private static void definePriv(int opc, String mnem) {
   1.787 +        mnemocodes.put(opcPrivExtNamesTab[opc] = "priv_" + mnem, opc_priv * 256 + opc);
   1.788 +    }
   1.789 +
   1.790 +    private static void defineExt(int opc, String mnem) {
   1.791 +        defineNonPriv(opc, mnem);
   1.792 +        definePriv(opc, mnem);
   1.793 +    }
   1.794 +
   1.795 +    static {
   1.796 +        for (int i = 0; i < opc_wide; i++) {
   1.797 +            mnemocodes.put(opcNamesTab[i], i);
   1.798 +        }
   1.799 +        for (int i = opc_wide + 1; i < opcNamesTab.length; i++) {
   1.800 +            mnemocodes.put(opcNamesTab[i], i);
   1.801 +        }
   1.802 +        mnemocodes.put("invokenonvirtual", opc_invokespecial);
   1.803 +
   1.804 +        mnemocodes.put("iload_w", opc_iload_w);
   1.805 +        mnemocodes.put("lload_w", opc_lload_w);
   1.806 +        mnemocodes.put("fload_w", opc_fload_w);
   1.807 +        mnemocodes.put("dload_w", opc_dload_w);
   1.808 +        mnemocodes.put("aload_w", opc_aload_w);
   1.809 +        mnemocodes.put("istore_w", opc_istore_w);
   1.810 +        mnemocodes.put("lstore_w", opc_lstore_w);
   1.811 +        mnemocodes.put("fstore_w", opc_fstore_w);
   1.812 +        mnemocodes.put("dstore_w", opc_dstore_w);
   1.813 +        mnemocodes.put("astore_w", opc_astore_w);
   1.814 +        mnemocodes.put("ret_w", opc_ret_w);
   1.815 +        mnemocodes.put("iinc_w", opc_iinc_w);
   1.816 +
   1.817 +        mnemocodes.put("nonpriv", opc_nonpriv);
   1.818 +        mnemocodes.put("priv", opc_priv);
   1.819 +
   1.820 +        defineExt(0, "load_ubyte");
   1.821 +        defineExt(1, "load_byte");
   1.822 +        defineExt(2, "load_char");
   1.823 +        defineExt(3, "load_short");
   1.824 +        defineExt(4, "load_word");
   1.825 +        defineExt(10, "load_char_oe");
   1.826 +        defineExt(11, "load_short_oe");
   1.827 +        defineExt(12, "load_word_oe");
   1.828 +        defineExt(16, "ncload_ubyte");
   1.829 +        defineExt(17, "ncload_byte");
   1.830 +        defineExt(18, "ncload_char");
   1.831 +        defineExt(19, "ncload_short");
   1.832 +        defineExt(20, "ncload_word");
   1.833 +        defineExt(26, "ncload_char_oe");
   1.834 +        defineExt(27, "ncload_short_oe");
   1.835 +        defineExt(28, "ncload_word_oe");
   1.836 +        defineExt(30, "cache_flush");
   1.837 +        defineExt(32, "store_byte");
   1.838 +        defineExt(34, "store_short");
   1.839 +        defineExt(36, "store_word");
   1.840 +        defineExt(42, "store_short_oe");
   1.841 +        defineExt(44, "store_word_oe");
   1.842 +        defineExt(48, "ncstore_byte");
   1.843 +        defineExt(50, "ncstore_short");
   1.844 +        defineExt(52, "ncstore_word");
   1.845 +        defineExt(58, "ncstore_short_oe");
   1.846 +        defineExt(60, "ncstore_word_oe");
   1.847 +        defineExt(62, "zero_line");
   1.848 +        defineNonPriv(5, "ret_from_sub");
   1.849 +        defineNonPriv(63, "enter_sync_method");
   1.850 +        definePriv(5, "ret_from_trap");
   1.851 +        definePriv(6, "read_dcache_tag");
   1.852 +        definePriv(7, "read_dcache_data");
   1.853 +        definePriv(14, "read_icache_tag");
   1.854 +        definePriv(15, "read_icache_data");
   1.855 +        definePriv(22, "powerdown");
   1.856 +        definePriv(23, "read_scache_data");
   1.857 +        definePriv(31, "cache_index_flush");
   1.858 +        definePriv(38, "write_dcache_tag");
   1.859 +        definePriv(39, "write_dcache_data");
   1.860 +        definePriv(46, "write_icache_tag");
   1.861 +        definePriv(47, "write_icache_data");
   1.862 +        definePriv(54, "reset");
   1.863 +        definePriv(55, "write_scache_data");
   1.864 +        for (int i = 0; i < 32; i++) {
   1.865 +            definePriv(i + 64, "read_reg_" + i);
   1.866 +        }
   1.867 +        for (int i = 0; i < 32; i++) {
   1.868 +            definePriv(i + 96, "write_reg_" + i);
   1.869 +        }
   1.870 +    }
   1.871 +}

mercurial