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