Home | History | Annotate | Download | only in opcodes
      1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
      2  *
      3  * This program and the accompanying materials are made available under
      4  * the terms of the Common Public License v1.0 which accompanies this distribution,
      5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
      6  *
      7  * $Id: IOpcodes.java,v 1.1.1.1.2.1 2004/07/10 03:34:52 vlad_r Exp $
      8  */
      9 package com.vladium.jcd.opcodes;
     10 
     11 // ----------------------------------------------------------------------------
     12 /**
     13  * @author Vlad Roubtsov, (C) 2003
     14  */
     15 public
     16 interface IOpcodes
     17 {
     18     // public: ................................................................
     19 
     20     //  opcode              hex     dec opbytes stackwords wideable
     21     int _nop              = 0x00; // 00     0   0
     22     int _aconst_null      = 0x01; // 01     0   +1
     23     int _iconst_m1        = 0x02; // 02     0   +1
     24     int _iconst_0         = 0x03; // 03     0   +1
     25     int _iconst_1         = 0x04; // 04     0   +1
     26     int _iconst_2         = 0x05; // 05     0   +1
     27     int _iconst_3         = 0x06; // 06     0   +1
     28     int _iconst_4         = 0x07; // 07     0   +1
     29     int _iconst_5         = 0x08; // 08     0   +1
     30     int _lconst_0         = 0x09; // 09     0   +2
     31     int _lconst_1         = 0x0A; // 10     0   +2
     32     int _fconst_0         = 0x0B; // 11     0   +1
     33     int _fconst_1         = 0x0C; // 12     0   +1
     34     int _fconst_2         = 0x0D; // 13     0   +1
     35     int _dconst_0         = 0x0E; // 14     0   +2
     36     int _dconst_1         = 0x0F; // 15     0   +2
     37     int _bipush           = 0x10; // 16     1   +1
     38     int _sipush           = 0x11; // 17     2   +1
     39     int _ldc              = 0x12; // 18     1   +1
     40     int _ldc_w            = 0x13; // 19     2   +1
     41     int _ldc2_w           = 0x14; // 20     2   +2
     42     int _iload            = 0x15; // 21     1   +1  true
     43     int _lload            = 0x16; // 22     1   +2  true
     44     int _fload            = 0x17; // 23     1   +1  true
     45     int _dload            = 0x18; // 24     1   +2  true
     46     int _aload            = 0x19; // 25     1   +1  true
     47     int _iload_0          = 0x1A; // 26     0   +1
     48     int _iload_1          = 0x1B; // 27     0   +1
     49     int _iload_2          = 0x1C; // 28     0   +1
     50     int _iload_3          = 0x1D; // 29     0   +1
     51     int _lload_0          = 0x1E; // 30     0   +2
     52     int _lload_1          = 0x1F; // 31     0   +2
     53     int _lload_2          = 0x20; // 32     0   +2
     54     int _lload_3          = 0x21; // 33     0   +2
     55     int _fload_0          = 0x22; // 34     0   +1
     56     int _fload_1          = 0x23; // 35     0   +1
     57     int _fload_2          = 0x24; // 36     0   +1
     58     int _fload_3          = 0x25; // 37     0   +1
     59     int _dload_0          = 0x26; // 38     0   +2
     60     int _dload_1          = 0x27; // 39     0   +2
     61     int _dload_2          = 0x28; // 40     0   +2
     62     int _dload_3          = 0x29; // 41     0   +2
     63     int _aload_0          = 0x2A; // 42     0   +1
     64     int _aload_1          = 0x2B; // 43     0   +1
     65     int _aload_2          = 0x2C; // 44     0   +1
     66     int _aload_3          = 0x2D; // 45     0   +1
     67     int _iaload           = 0x2E; // 46     0   -1
     68     int _laload           = 0x2F; // 47     0   0
     69     int _faload           = 0x30; // 48     0   -1
     70     int _daload           = 0x31; // 49     0   0
     71     int _aaload           = 0x32; // 50     0   -1
     72     int _baload           = 0x33; // 51     0   -1
     73     int _caload           = 0x34; // 52     0   -1
     74     int _saload           = 0x35; // 53     0   -1
     75     int _istore           = 0x36; // 54     1   -1  true
     76     int _lstore           = 0x37; // 55     1   -2  true
     77     int _fstore           = 0x38; // 56     1   -1  true
     78     int _dstore           = 0x39; // 57     1   -2  true
     79     int _astore           = 0x3A; // 58     1   -1  true
     80     int _istore_0         = 0x3B; // 59     0   -1
     81     int _istore_1         = 0x3C; // 60     0   -1
     82     int _istore_2         = 0x3D; // 61     0   -1
     83     int _istore_3         = 0x3E; // 62     0   -1
     84     int _lstore_0         = 0x3F; // 63     0   -2
     85     int _lstore_1         = 0x40; // 64     0   -2
     86     int _lstore_2         = 0x41; // 65     0   -2
     87     int _lstore_3         = 0x42; // 66     0   -2
     88     int _fstore_0         = 0x43; // 67     0   -1
     89     int _fstore_1         = 0x44; // 68     0   -1
     90     int _fstore_2         = 0x45; // 69     0   -1
     91     int _fstore_3         = 0x46; // 70     0   -1
     92     int _dstore_0         = 0x47; // 71     0   -2
     93     int _dstore_1         = 0x48; // 72     0   -2
     94     int _dstore_2         = 0x49; // 73     0   -2
     95     int _dstore_3         = 0x4A; // 74     0   -2
     96     int _astore_0         = 0x4B; // 75     0   -1
     97     int _astore_1         = 0x4C; // 76     0   -1
     98     int _astore_2         = 0x4D; // 77     0   -1
     99     int _astore_3         = 0x4E; // 78     0   -1
    100     int _iastore          = 0x4F; // 79     0   -3
    101     int _lastore          = 0x50; // 80     0   -4
    102     int _fastore          = 0x51; // 81     0   -3
    103     int _dastore          = 0x52; // 82     0   -4
    104     int _aastore          = 0x53; // 83     0   -3
    105     int _bastore          = 0x54; // 84     0   -3
    106     int _castore          = 0x55; // 85     0   -3
    107     int _sastore          = 0x56; // 86     0   -3
    108     int _pop              = 0x57; // 87     0   -1
    109     int _pop2             = 0x58; // 88     0   -2
    110     int _dup              = 0x59; // 89     0   +1
    111     int _dup_x1           = 0x5A; // 90     0   +1
    112     int _dup_x2           = 0x5B; // 91     0   +1
    113     int _dup2             = 0x5C; // 92     0   +2
    114     int _dup2_x1          = 0x5D; // 93     0   +2
    115     int _dup2_x2          = 0x5E; // 94     0   +2
    116     int _swap             = 0x5F; // 95     0   0
    117     int _iadd             = 0x60; // 96     0   -1
    118     int _ladd             = 0x61; // 97     0   -2
    119     int _fadd             = 0x62; // 98     0   -1
    120     int _dadd             = 0x63; // 99     0   -2
    121     int _isub             = 0x64; // 100    0   -1
    122     int _lsub             = 0x65; // 101    0   -2
    123     int _fsub             = 0x66; // 102    0   -1
    124     int _dsub             = 0x67; // 103    0   -2
    125     int _imul             = 0x68; // 104    0   -1
    126     int _lmul             = 0x69; // 105    0   -2
    127     int _fmul             = 0x6A; // 106    0   -1
    128     int _dmul             = 0x6B; // 107    0   -2
    129     int _idiv             = 0x6C; // 108    0   -1
    130     int _ldiv             = 0x6D; // 109    0   -2
    131     int _fdiv             = 0x6E; // 110    0   -1
    132     int _ddiv             = 0x6F; // 111    0   -2
    133     int _irem             = 0x70; // 112    0   -1
    134     int _lrem             = 0x71; // 113    0   -2
    135     int _frem             = 0x72; // 114    0   -1
    136     int _drem             = 0x73; // 115    0   -2
    137     int _ineg             = 0x74; // 116    0   0
    138     int _lneg             = 0x75; // 117    0   0
    139     int _fneg             = 0x76; // 118    0   0
    140     int _dneg             = 0x77; // 119    0   0
    141     int _ishl             = 0x78; // 120    0   -1
    142     int _lshl             = 0x79; // 121    0   -1
    143     int _ishr             = 0x7A; // 122    0   -1
    144     int _lshr             = 0x7B; // 123    0   -1
    145     int _iushr            = 0x7C; // 124    0   -1
    146     int _lushr            = 0x7D; // 125    0   -2
    147     int _iand             = 0x7E; // 126    0   -1
    148     int _land             = 0x7F; // 127    0   -2
    149     int _ior              = 0x80; // 128    0   -1
    150     int _lor              = 0x81; // 129    0   -2
    151     int _ixor             = 0x82; // 130    0   -1
    152     int _lxor             = 0x83; // 131    0   -2
    153     int _iinc             = 0x84; // 132    2   0   true    [widening is tricky here]
    154     int _i2l              = 0x85; // 133    0   +1
    155     int _i2f              = 0x86; // 134    0   0
    156     int _i2d              = 0x87; // 135    0   +1
    157     int _l2i              = 0x88; // 136    0   -1
    158     int _l2f              = 0x89; // 137    0   -1
    159     int _l2d              = 0x8A; // 138    0   0
    160     int _f2i              = 0x8B; // 139    0   0
    161     int _f2l              = 0x8C; // 140    0   +1
    162     int _f2d              = 0x8D; // 141    0   +1
    163     int _d2i              = 0x8E; // 142    0   -1
    164     int _d2l              = 0x8F; // 143    0   0
    165     int _d2f              = 0x90; // 144    0   -1
    166     int _i2b              = 0x91; // 145    0   0
    167     int _i2c              = 0x92; // 146    0   0
    168     int _i2s              = 0x93; // 147    0   0
    169     int _lcmp             = 0x94; // 148    0   -3
    170     int _fcmpl            = 0x95; // 149    0   -1
    171     int _fcmpg            = 0x96; // 150    0   -1
    172     int _dcmpl            = 0x97; // 151    0   -3
    173     int _dcmpg            = 0x98; // 152    0   -3
    174     int _ifeq             = 0x99; // 153    2   -1
    175     int _ifne             = 0x9A; // 154    2   -1
    176     int _iflt             = 0x9B; // 155    2   -1
    177     int _ifge             = 0x9C; // 156    2   -1
    178     int _ifgt             = 0x9D; // 157    2   -1
    179     int _ifle             = 0x9E; // 158    2   -1
    180     int _if_icmpeq        = 0x9F; // 159    2   -2
    181     int _if_icmpne        = 0xA0; // 160    2   -2
    182     int _if_icmplt        = 0xA1; // 161    2   -2
    183     int _if_icmpge        = 0xA2; // 162    2   -2
    184     int _if_icmpgt        = 0xA3; // 163    2   -2
    185     int _if_icmple        = 0xA4; // 164    2   -2
    186     int _if_acmpeq        = 0xA5; // 165    2   -2
    187     int _if_acmpne        = 0xA6; // 166    2   -2
    188     int _goto             = 0xA7; // 167    2   0
    189     int _jsr              = 0xA8; // 168    2   +1
    190     int _ret              = 0xA9; // 169    1   0   true
    191     int _tableswitch      = 0xAA; // 170    *   -1      [there are padding bytes and variable number of operands]
    192     int _lookupswitch     = 0xAB; // 171    *   -1      [there are padding bytes and variable number of operands]
    193     int _ireturn          = 0xAC; // 172    0   -1*     [current method returns]
    194     int _lreturn          = 0xAD; // 173    0   -2*     [current method returns]
    195     int _freturn          = 0xAE; // 174    0   -1*     [current method returns]
    196     int _dreturn          = 0xAF; // 175    0   -2*     [current method returns]
    197     int _areturn          = 0xB0; // 176    0   -1*     [current method returns]
    198     int _return           = 0xB1; // 177    0   0*      [current method returns]
    199     int _getstatic        = 0xB2; // 178    2   +1 or +2*   [after stack depends on the field type]
    200     int _putstatic        = 0xB3; // 179    2   -1 or -2*   [after stack depends on the field type]
    201     int _getfield         = 0xB4; // 180    2   0 or +1*    [after stack depends on the field type]
    202     int _putfield         = 0xB5; // 181    2   -2 or -3*   [after stack depends on the field type]
    203     int _invokevirtual    = 0xB6; // 182    2   *   *   [stack words pushed for the call are emptied]
    204     int _invokespecial    = 0xB7; // 183    2   *   *   [stack words pushed for the call are emptied]
    205     int _invokestatic     = 0xB8; // 184    2   *   *   [stack words pushed for the call are emptied]
    206     int _invokeinterface  = 0xB9; // 185    4   *   *   [last operand is 0; stack words pushed for the call are emptied]
    207     int _unused           = 0xBA; // 186    *   *   *   [for historical reasons, opcode value 186 is not used]
    208     int _new              = 0xBB; // 187    2   +1
    209     int _newarray         = 0xBC; // 188    1   0
    210     int _anewarray        = 0xBD; // 189    2   0
    211     int _arraylength      = 0xBE; // 190    0   0
    212     int _athrow           = 0xBF; // 191    0   0*  *   [stack frame is emptied except for 1 obj ref]
    213     int _checkcast        = 0xC0; // 192    2   0
    214     int _instanceof       = 0xC1; // 193    2   0
    215     int _monitorenter     = 0xC2; // 194    0   -1
    216     int _monitorexit      = 0xC3; // 195    0   -1
    217     int _wide             = 0xC4; // 196    *   *       [depends on instruction being modified]
    218     int _multianewarray   = 0xC5; // 197    3   *       [variable number of stack operands]
    219     int _ifnull           = 0xC6; // 198    2   -1
    220     int _ifnonnull        = 0xC7; // 199    2   -1
    221     int _goto_w           = 0xC8; // 200    4   0
    222     int _jsr_w            = 0xC9; // 201    4   +1
    223     // reserved opcodes:
    224     int _breakpoint       = 0xCA; // 202
    225     int _impdep1          = 0xFE; // 254
    226     int _impdep2          = 0xFF; // 255
    227 
    228 
    229     String [] MNEMONICS =
    230     {
    231         "nop",              // 0x00    00
    232         "aconst_null",      // 0x01    01
    233         "iconst_m1",        // 0x02    02
    234         "iconst_0",         // 0x03    03
    235         "iconst_1",         // 0x04    04
    236         "iconst_2",         // 0x05    05
    237         "iconst_3",         // 0x06    06
    238         "iconst_4",         // 0x07    07
    239         "iconst_5",         // 0x08    08
    240         "lconst_0",         // 0x09    09
    241         "lconst_1",         // 0x0A    10
    242         "fconst_0",         // 0x0B    11
    243         "fconst_1",         // 0x0C    12
    244         "fconst_2",         // 0x0D    13
    245         "dconst_0",         // 0x0E    14
    246         "dconst_1",         // 0x0F    15
    247         "bipush",           // 0x10    16
    248         "sipush",           // 0x11    17
    249         "ldc",              // 0x12    18
    250         "ldc_w",            // 0x13    19
    251         "ldc2_w",           // 0x14    20
    252         "iload",            // 0x15    21
    253         "lload",            // 0x16    22
    254         "fload",            // 0x17    23
    255         "dload",            // 0x18    24
    256         "aload",            // 0x19    25
    257         "iload_0",          // 0x1A    26
    258         "iload_1",          // 0x1B    27
    259         "iload_2",          // 0x1C    28
    260         "iload_3",          // 0x1D    29
    261         "lload_0",          // 0x1E    30
    262         "lload_1",          // 0x1F    31
    263         "lload_2",          // 0x20    32
    264         "lload_3",          // 0x21    33
    265         "fload_0",          // 0x22    34
    266         "fload_1",          // 0x23    35
    267         "fload_2",          // 0x24    36
    268         "fload_3",          // 0x25    37
    269         "dload_0",          // 0x26    38
    270         "dload_1",          // 0x27    39
    271         "dload_2",          // 0x28    40
    272         "dload_3",          // 0x29    41
    273         "aload_0",          // 0x2A    42
    274         "aload_1",          // 0x2B    43
    275         "aload_2",          // 0x2C    44
    276         "aload_3",          // 0x2D    45
    277         "iaload",           // 0x2E    46
    278         "laload",           // 0x2F    47
    279         "faload",           // 0x30    48
    280         "daload",           // 0x31    49
    281         "aaload",           // 0x32    50
    282         "baload",           // 0x33    51
    283         "caload",           // 0x34    52
    284         "saload",           // 0x35    53
    285         "istore",           // 0x36    54
    286         "lstore",           // 0x37    55
    287         "fstore",           // 0x38    56
    288         "dstore",           // 0x39    57
    289         "astore",           // 0x3A    58
    290         "istore_0",         // 0x3B    59
    291         "istore_1",         // 0x3C    60
    292         "istore_2",         // 0x3D    61
    293         "istore_3",         // 0x3E    62
    294         "lstore_0",         // 0x3F    63
    295         "lstore_1",         // 0x40    64
    296         "lstore_2",         // 0x41    65
    297         "lstore_3",         // 0x42    66
    298         "fstore_0",         // 0x43    67
    299         "fstore_1",         // 0x44    68
    300         "fstore_2",         // 0x45    69
    301         "fstore_3",         // 0x46    70
    302         "dstore_0",         // 0x47    71
    303         "dstore_1",         // 0x48    72
    304         "dstore_2",         // 0x49    73
    305         "dstore_3",         // 0x4A    74
    306         "astore_0",         // 0x4B    75
    307         "astore_1",         // 0x4C    76
    308         "astore_2",         // 0x4D    77
    309         "astore_3",         // 0x4E    78
    310         "iastore",          // 0x4F    79
    311         "lastore",          // 0x50    80
    312         "fastore",          // 0x51    81
    313         "dastore",          // 0x52    82
    314         "aastore",          // 0x53    83
    315         "bastore",          // 0x54    84
    316         "castore",          // 0x55    85
    317         "sastore",          // 0x56    86
    318         "pop",              // 0x57    87
    319         "pop2",             // 0x58    88
    320         "dup",              // 0x59    089
    321         "dup_x1",           // 0x5A    090
    322         "dup_x2",           // 0x5B    091
    323         "dup2",             // 0x5C    092
    324         "dup2_x1",          // 0x5D    093
    325         "dup2_x2",          // 0x5E    094
    326         "swap",             // 0x5F    095
    327         "iadd",             // 0x60    096
    328         "ladd",             // 0x61    097
    329         "fadd",             // 0x62    098
    330         "dadd",             // 0x63    099
    331         "isub",             // 0x64    100
    332         "lsub",             // 0x65    101
    333         "fsub",             // 0x66    102
    334         "dsub",             // 0x67    103
    335         "imul",             // 0x68    104
    336         "lmul",             // 0x69    105
    337         "fmul",             // 0x6A    106
    338         "dmul",             // 0x6B    107
    339         "idiv",             // 0x6C    108
    340         "ldiv",             // 0x6D    109
    341         "fdiv",             // 0x6E    110
    342         "ddiv",             // 0x6F    111
    343         "irem",             // 0x70    112
    344         "lrem",             // 0x71    113
    345         "frem",             // 0x72    114
    346         "drem",             // 0x73    115
    347         "ineg",             // 0x74    116
    348         "lneg",             // 0x75    117
    349         "fneg",             // 0x76    118
    350         "dneg",             // 0x77    119
    351         "ishl",             // 0x78    120
    352         "lshl",             // 0x79    121
    353         "ishr",             // 0x7A    122
    354         "lshr",             // 0x7B    123
    355         "iushr",            // 0x7C    124
    356         "lushr",            // 0x7D    125
    357         "iand",             // 0x7E    126
    358         "land",             // 0x7F    127
    359         "ior",              // 0x80    128
    360         "lor",              // 0x81    129
    361         "ixor",             // 0x82    130
    362         "lxor",             // 0x83    131
    363         "iinc",             // 0x84    132
    364         "i2l",              // 0x85    133
    365         "i2f",              // 0x86    134
    366         "i2d",              // 0x87    135
    367         "l2i",              // 0x88    136
    368         "l2f",              // 0x89    137
    369         "l2d",              // 0x8A    138
    370         "f2i",              // 0x8B    139
    371         "f2l",              // 0x8C    140
    372         "f2d",              // 0x8D    141
    373         "d2i",              // 0x8E    142
    374         "d2l",              // 0x8F    143
    375         "d2f",              // 0x90    144
    376         "i2b",              // 0x91    145
    377         "i2c",              // 0x92    146
    378         "i2s",              // 0x93    147
    379         "lcmp",             // 0x94    148
    380         "fcmpl",            // 0x95    149
    381         "fcmpg",            // 0x96    150
    382         "dcmpl",            // 0x97    151
    383         "dcmpg",            // 0x98    152
    384         "ifeq",             // 0x99    153
    385         "ifne",             // 0x9A    154
    386         "iflt",             // 0x9B    155
    387         "ifge",             // 0x9C    156
    388         "ifgt",             // 0x9D    157
    389         "ifle",             // 0x9E    158
    390         "if_icmpeq",        // 0x9F    159
    391         "if_icmpne",        // 0xA0    160
    392         "if_icmplt",        // 0xA1    161
    393         "if_icmpge",        // 0xA2    162
    394         "if_icmpgt",        // 0xA3    163
    395         "if_icmple",        // 0xA4    164
    396         "if_acmpeq",        // 0xA5    165
    397         "if_acmpne",        // 0xA6    166
    398         "goto",             // 0xA7    167
    399         "jsr",              // 0xA8    168
    400         "ret",              // 0xA9    169
    401         "tableswitch",      // 0xAA    170
    402         "lookupswitch",     // 0xAB    171
    403         "ireturn",          // 0xAC    172
    404         "lreturn",          // 0xAD    173
    405         "freturn",          // 0xAE    174
    406         "dreturn",          // 0xAF    175
    407         "areturn",          // 0xB0    176
    408         "return",           // 0xB1    177
    409         "getstatic",        // 0xB2    178
    410         "putstatic",        // 0xB3    179
    411         "getfield",         // 0xB4    180
    412         "putfield",         // 0xB5    181
    413         "invokevirtual",    // 0xB6    182
    414         "invokespecial",    // 0xB7    183
    415         "invokestatic",     // 0xB8    184
    416         "invokeinterface",  // 0xB9    185
    417         "unused",           // 0xBA    186
    418         "new",              // 0xBB    187
    419         "newarray",         // 0xBC    188
    420         "anewarray",        // 0xBD    189
    421         "arraylength",      // 0xBE    190
    422         "athrow",           // 0xBF    191
    423         "checkcast",        // 0xC0    192
    424         "instanceof",       // 0xC1    193
    425         "monitorenter",     // 0xC2    194
    426         "monitorexit",      // 0xC3    195
    427         "[wide]",           // 0xC4    196
    428         "multianewarray",   // 0xC5    197
    429         "ifnull",           // 0xC6    198
    430         "ifnonnull",        // 0xC7    199
    431         "goto_w",           // 0xC8    200
    432         "jsr_w"             // 0xC9    201
    433     };
    434 
    435 
    436     boolean [] CONDITIONAL_BRANCHES = clinit._CONDITIONAL_BRANCHES;
    437     boolean [] COMPOUND_CONDITIONAL_BRANCHES = clinit._COMPOUND_CONDITIONAL_BRANCHES;
    438     boolean [] UNCONDITIONAL_BRANCHES = clinit._UNCONDITIONAL_BRANCHES;
    439     boolean [] BRANCHES = clinit._BRANCHES;
    440 
    441     int [] NARROW_SIZE = clinit._NARROW_SIZE; // including the opcode itself
    442     int [] WIDE_SIZE = clinit._WIDE_SIZE; // including the opcode itself
    443 
    444 
    445     static final class clinit
    446     {
    447         static final boolean [] _CONDITIONAL_BRANCHES;
    448         static final boolean [] _COMPOUND_CONDITIONAL_BRANCHES;
    449         static final boolean [] _UNCONDITIONAL_BRANCHES;
    450         static final boolean [] _BRANCHES;
    451         static final int [] _NARROW_SIZE;
    452         static final int [] _WIDE_SIZE;
    453 
    454         static
    455         {
    456             final int opcodeCount = MNEMONICS.length;
    457 
    458             _CONDITIONAL_BRANCHES = new boolean [opcodeCount];
    459 
    460             _CONDITIONAL_BRANCHES [_ifeq] = true;
    461             _CONDITIONAL_BRANCHES [_iflt] = true;
    462             _CONDITIONAL_BRANCHES [_ifle] = true;
    463             _CONDITIONAL_BRANCHES [_ifne] = true;
    464             _CONDITIONAL_BRANCHES [_ifgt] = true;
    465             _CONDITIONAL_BRANCHES [_ifge] = true;
    466             _CONDITIONAL_BRANCHES [_ifnull] = true;
    467             _CONDITIONAL_BRANCHES [_ifnonnull] = true;
    468             _CONDITIONAL_BRANCHES [_if_icmpeq] = true;
    469             _CONDITIONAL_BRANCHES [_if_icmpne] = true;
    470             _CONDITIONAL_BRANCHES [_if_icmplt] = true;
    471             _CONDITIONAL_BRANCHES [_if_icmpgt] = true;
    472             _CONDITIONAL_BRANCHES [_if_icmple] = true;
    473             _CONDITIONAL_BRANCHES [_if_icmpge] = true;
    474             _CONDITIONAL_BRANCHES [_if_acmpeq] = true;
    475             _CONDITIONAL_BRANCHES [_if_acmpne] = true;
    476 
    477 
    478             _COMPOUND_CONDITIONAL_BRANCHES = new boolean [opcodeCount];
    479 
    480             _COMPOUND_CONDITIONAL_BRANCHES [_tableswitch] = true;
    481             _COMPOUND_CONDITIONAL_BRANCHES [_lookupswitch] = true;
    482 
    483 
    484             _UNCONDITIONAL_BRANCHES = new boolean  [opcodeCount];
    485 
    486             _UNCONDITIONAL_BRANCHES [_goto] = true;
    487             _UNCONDITIONAL_BRANCHES [_goto_w] = true;
    488             _UNCONDITIONAL_BRANCHES [_jsr] = true;
    489             _UNCONDITIONAL_BRANCHES [_jsr_w] = true;
    490             _UNCONDITIONAL_BRANCHES [_ret] = true;
    491 
    492             _UNCONDITIONAL_BRANCHES [_ireturn] = true;
    493             _UNCONDITIONAL_BRANCHES [_lreturn] = true;
    494             _UNCONDITIONAL_BRANCHES [_freturn] = true;
    495             _UNCONDITIONAL_BRANCHES [_dreturn] = true;
    496             _UNCONDITIONAL_BRANCHES [_areturn] = true;
    497             _UNCONDITIONAL_BRANCHES [_return] = true;
    498 
    499             _UNCONDITIONAL_BRANCHES [_athrow] = true;
    500 
    501 
    502             _BRANCHES = new boolean [opcodeCount];
    503 
    504             for (int o = 0; o < opcodeCount; ++ o)
    505                 if (_CONDITIONAL_BRANCHES [o]) _BRANCHES [o] = true;
    506 
    507             for (int o = 0; o < opcodeCount; ++ o)
    508                 if (_COMPOUND_CONDITIONAL_BRANCHES [o]) _BRANCHES [o] = true;
    509 
    510             for (int o = 0; o < opcodeCount; ++ o)
    511                 if (_UNCONDITIONAL_BRANCHES [o]) _BRANCHES [o] = true;
    512 
    513 
    514             _NARROW_SIZE = new int [opcodeCount];
    515 
    516             for (int o = 0; o < opcodeCount; ++ o) _NARROW_SIZE [o] = 1;
    517 
    518             _NARROW_SIZE [_bipush] = 2;
    519             _NARROW_SIZE [_sipush] = 3;
    520 
    521             _NARROW_SIZE [_ldc] = 2;
    522             _NARROW_SIZE [_ldc_w] = 3;
    523             _NARROW_SIZE [_ldc2_w] = 3;
    524 
    525             _NARROW_SIZE [_iload] = 2;
    526             _NARROW_SIZE [_lload] = 2;
    527             _NARROW_SIZE [_fload] = 2;
    528             _NARROW_SIZE [_dload] = 2;
    529             _NARROW_SIZE [_aload] = 2;
    530             _NARROW_SIZE [_istore] = 2;
    531             _NARROW_SIZE [_lstore] = 2;
    532             _NARROW_SIZE [_fstore] = 2;
    533             _NARROW_SIZE [_dstore] = 2;
    534             _NARROW_SIZE [_astore] = 2;
    535 
    536             _NARROW_SIZE [_iinc] = 3;
    537 
    538             _NARROW_SIZE [_ifeq] = 3;
    539             _NARROW_SIZE [_ifne] = 3;
    540             _NARROW_SIZE [_iflt] = 3;
    541             _NARROW_SIZE [_ifge] = 3;
    542             _NARROW_SIZE [_ifgt] = 3;
    543             _NARROW_SIZE [_ifle] = 3;
    544             _NARROW_SIZE [_if_icmpeq] = 3;
    545             _NARROW_SIZE [_if_icmpne] = 3;
    546             _NARROW_SIZE [_if_icmplt] = 3;
    547             _NARROW_SIZE [_if_icmpge] = 3;
    548             _NARROW_SIZE [_if_icmpgt] = 3;
    549             _NARROW_SIZE [_if_icmple] = 3;
    550             _NARROW_SIZE [_if_acmpeq] = 3;
    551             _NARROW_SIZE [_if_acmpne] = 3;
    552             _NARROW_SIZE [_goto] = 3;
    553             _NARROW_SIZE [_jsr] = 3;
    554             _NARROW_SIZE [_ifnull] = 3;
    555             _NARROW_SIZE [_ifnonnull] = 3;
    556 
    557             _NARROW_SIZE [_ret] = 2;
    558 
    559             _NARROW_SIZE [_lookupswitch] = -1;   // special case #2
    560             _NARROW_SIZE [_tableswitch] = 0;    // special case #1
    561 
    562             _NARROW_SIZE [_getstatic] = 3;
    563             _NARROW_SIZE [_putstatic] = 3;
    564             _NARROW_SIZE [_getfield] = 3;
    565             _NARROW_SIZE [_putfield] = 3;
    566 
    567             _NARROW_SIZE [_invokevirtual] = 3;
    568             _NARROW_SIZE [_invokespecial] = 3;
    569             _NARROW_SIZE [_invokestatic] = 3;
    570 
    571             _NARROW_SIZE [_invokeinterface] = 5;
    572 
    573             _NARROW_SIZE [_new] = 3;
    574             _NARROW_SIZE [_checkcast] = 3;
    575             _NARROW_SIZE [_instanceof] = 3;
    576 
    577             _NARROW_SIZE [_newarray] = 2;
    578             _NARROW_SIZE [_anewarray] = 3;
    579             _NARROW_SIZE [_multianewarray] = 4;
    580 
    581             _NARROW_SIZE [_goto_w] = 5;
    582             _NARROW_SIZE [_jsr_w] = 5;
    583 
    584 
    585             _WIDE_SIZE = (int []) _NARROW_SIZE.clone ();
    586 
    587             _WIDE_SIZE [_iload] = 3;
    588             _WIDE_SIZE [_lload] = 3;
    589             _WIDE_SIZE [_fload] = 3;
    590             _WIDE_SIZE [_dload] = 3;
    591             _WIDE_SIZE [_aload] = 3;
    592             _WIDE_SIZE [_istore] = 3;
    593             _WIDE_SIZE [_lstore] = 3;
    594             _WIDE_SIZE [_fstore] = 3;
    595             _WIDE_SIZE [_dstore] = 3;
    596             _WIDE_SIZE [_astore] = 3;
    597 
    598             _WIDE_SIZE [_iinc] = 5;
    599 
    600             _WIDE_SIZE [_ret] = 3;
    601         }
    602 
    603     } // end of nested class
    604 
    605 } // end of interface
    606 // ----------------------------------------------------------------------------
    607 
    608