1/* 2 * ProGuard -- shrinking, optimization, obfuscation, and preverification 3 * of Java bytecode. 4 * 5 * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu) 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the Free 9 * Software Foundation; either version 2 of the License, or (at your option) 10 * any later version. 11 * 12 * This program is distributed in the hope that it will be useful, but WITHOUT 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15 * more details. 16 * 17 * You should have received a copy of the GNU General Public License along 18 * with this program; if not, write to the Free Software Foundation, Inc., 19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21package proguard.optimize.peephole; 22 23import proguard.classfile.constant.*; 24import proguard.classfile.instruction.*; 25import proguard.classfile.util.InstructionSequenceMatcher; 26 27/** 28 * This class contains a set of instruction sequences and their suggested 29 * replacements. 30 * 31 * @see InstructionSequencesReplacer 32 * @author Eric Lafortune 33 */ 34public class InstructionSequenceConstants 35{ 36 public static final int X = InstructionSequenceMatcher.X; 37 public static final int Y = InstructionSequenceMatcher.Y; 38 public static final int Z = InstructionSequenceMatcher.Z; 39 40 public static final int A = InstructionSequenceMatcher.A; 41 public static final int B = InstructionSequenceMatcher.B; 42 public static final int C = InstructionSequenceMatcher.C; 43 public static final int D = InstructionSequenceMatcher.D; 44 45 46 private static final int I_32768 = 0; 47 private static final int I_65536 = 1; 48 private static final int I_16777216 = 2; 49 50// private static final int I_0x000000ff 51 private static final int I_0x0000ff00 = 3; 52 private static final int I_0x00ff0000 = 4; 53 private static final int I_0xff000000 = 5; 54 private static final int I_0x0000ffff = 6; 55 private static final int I_0xffff0000 = 7; 56 57 private static final int L_M1 = 8; 58 private static final int L_2 = 9; 59 private static final int L_4 = 10; 60 private static final int L_8 = 11; 61 private static final int L_16 = 12; 62 private static final int L_32 = 13; 63 private static final int L_64 = 14; 64 private static final int L_128 = 15; 65 private static final int L_256 = 16; 66 private static final int L_512 = 17; 67 private static final int L_1024 = 18; 68 private static final int L_2048 = 19; 69 private static final int L_4096 = 20; 70 private static final int L_8192 = 21; 71 private static final int L_16384 = 22; 72 private static final int L_32768 = 23; 73 private static final int L_65536 = 24; 74 private static final int L_16777216 = 25; 75 private static final int L_4294967296 = 26; 76 77 private static final int L_0x00000000ffffffff = 27; 78 private static final int L_0xffffffff00000000 = 28; 79 80 private static final int F_M1 = 29; 81 82 private static final int D_M1 = 30; 83 84 private static final int FIELD_I = 31; 85 private static final int FIELD_L = 32; 86 private static final int FIELD_F = 33; 87 private static final int FIELD_D = 34; 88 89 private static final int NAME_AND_TYPE_I = 35; 90 private static final int NAME_AND_TYPE_L = 36; 91 private static final int NAME_AND_TYPE_F = 37; 92 private static final int NAME_AND_TYPE_D = 38; 93 94 private static final int TYPE_I = 39; 95 private static final int TYPE_L = 40; 96 private static final int TYPE_F = 41; 97 private static final int TYPE_D = 42; 98 99 100 public static final Constant[] CONSTANTS = new Constant[] 101 { 102 new IntegerConstant(32768), 103 new IntegerConstant(65536), 104 new IntegerConstant(16777216), 105 106 new IntegerConstant(0x0000ff00), 107 new IntegerConstant(0x00ff0000), 108 new IntegerConstant(0xff000000), 109 new IntegerConstant(0x0000ffff), 110 new IntegerConstant(0xffff0000), 111 112 new LongConstant(-1L), 113 new LongConstant(2L), 114 new LongConstant(4L), 115 new LongConstant(8L), 116 new LongConstant(16L), 117 new LongConstant(32L), 118 new LongConstant(64L), 119 new LongConstant(128L), 120 new LongConstant(256L), 121 new LongConstant(512L), 122 new LongConstant(1024L), 123 new LongConstant(2048L), 124 new LongConstant(4096L), 125 new LongConstant(8192L), 126 new LongConstant(16384L), 127 new LongConstant(32768L), 128 new LongConstant(65536L), 129 new LongConstant(16777216L), 130 new LongConstant(4294967296L), 131 132 new LongConstant(0x00000000ffffffffL), 133 new LongConstant(0xffffffff00000000L), 134 135 new FloatConstant(-1f), 136 137 new DoubleConstant(-1d), 138 139 new FieldrefConstant(X, NAME_AND_TYPE_I, null, null), 140 new FieldrefConstant(X, NAME_AND_TYPE_L, null, null), 141 new FieldrefConstant(X, NAME_AND_TYPE_F, null, null), 142 new FieldrefConstant(X, NAME_AND_TYPE_D, null, null), 143 144 new NameAndTypeConstant(Y, TYPE_I), 145 new NameAndTypeConstant(Y, TYPE_L), 146 new NameAndTypeConstant(Y, TYPE_F), 147 new NameAndTypeConstant(Y, TYPE_D), 148 149 new Utf8Constant("I"), 150 new Utf8Constant("J"), 151 new Utf8Constant("F"), 152 new Utf8Constant("D"), 153 }; 154 155 156 public static final Instruction[][][] VARIABLE = new Instruction[][][] 157 { 158 { // nop = nothing 159 { 160 new SimpleInstruction(InstructionConstants.OP_NOP), 161 },{ 162 // Nothing. 163 }, 164 }, 165 { // iload/pop = nothing 166 { 167 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 168 new SimpleInstruction(InstructionConstants.OP_POP), 169 },{ 170 // Nothing. 171 }, 172 }, 173 { // lload/pop2 = nothing 174 { 175 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 176 new SimpleInstruction(InstructionConstants.OP_POP2), 177 },{ 178 // Nothing. 179 }, 180 }, 181 { // fload/pop = nothing 182 { 183 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 184 new SimpleInstruction(InstructionConstants.OP_POP), 185 },{ 186 // Nothing. 187 }, 188 }, 189 { // dload/pop2 = nothing 190 { 191 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 192 new SimpleInstruction(InstructionConstants.OP_POP2), 193 },{ 194 // Nothing. 195 }, 196 }, 197 { // aload/pop = nothing 198 { 199 new VariableInstruction(InstructionConstants.OP_ALOAD, X), 200 new SimpleInstruction(InstructionConstants.OP_POP), 201 },{ 202 // Nothing. 203 }, 204 }, 205 { // i = i = nothing 206 { 207 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 208 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 209 },{ 210 // Nothing. 211 }, 212 }, 213 { // l = l = nothing 214 { 215 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 216 new VariableInstruction(InstructionConstants.OP_LSTORE, X), 217 },{ 218 // Nothing. 219 }, 220 }, 221 { // f = f = nothing 222 { 223 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 224 new VariableInstruction(InstructionConstants.OP_FSTORE, X), 225 },{ 226 // Nothing. 227 }, 228 }, 229 { // d = d = nothing 230 { 231 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 232 new VariableInstruction(InstructionConstants.OP_DSTORE, X), 233 },{ 234 // Nothing. 235 }, 236 }, 237 { // a = a = nothing 238 { 239 new VariableInstruction(InstructionConstants.OP_ALOAD, X), 240 new SimpleInstruction(InstructionConstants.OP_POP), 241 },{ 242 // Nothing. 243 }, 244 }, 245 { // istore/istore = pop/istore 246 { 247 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 248 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 249 },{ 250 new SimpleInstruction(InstructionConstants.OP_POP), 251 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 252 }, 253 }, 254 { // lstore/lstore = pop2/lstore 255 { 256 new VariableInstruction(InstructionConstants.OP_LSTORE, X), 257 new VariableInstruction(InstructionConstants.OP_LSTORE, X), 258 },{ 259 new SimpleInstruction(InstructionConstants.OP_POP2), 260 new VariableInstruction(InstructionConstants.OP_LSTORE, X), 261 }, 262 }, 263 { // fstore/fstore = pop/fstore 264 { 265 new VariableInstruction(InstructionConstants.OP_FSTORE, X), 266 new VariableInstruction(InstructionConstants.OP_FSTORE, X), 267 },{ 268 new SimpleInstruction(InstructionConstants.OP_POP), 269 new VariableInstruction(InstructionConstants.OP_FSTORE, X), 270 }, 271 }, 272 { // dstore/dstore = pop2/dstore 273 { 274 new VariableInstruction(InstructionConstants.OP_DSTORE, X), 275 new VariableInstruction(InstructionConstants.OP_DSTORE, X), 276 },{ 277 new SimpleInstruction(InstructionConstants.OP_POP2), 278 new VariableInstruction(InstructionConstants.OP_DSTORE, X), 279 }, 280 }, 281 { // astore/astore = pop/astore 282 { 283 new VariableInstruction(InstructionConstants.OP_ASTORE, X), 284 new VariableInstruction(InstructionConstants.OP_ASTORE, X), 285 },{ 286 new SimpleInstruction(InstructionConstants.OP_POP), 287 new VariableInstruction(InstructionConstants.OP_ASTORE, X), 288 }, 289 }, 290 { // istore/iload = dup/istore 291 { 292 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 293 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 294 },{ 295 new SimpleInstruction(InstructionConstants.OP_DUP), 296 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 297 }, 298 }, 299 { // lstore/lload = dup2/lstore 300 { 301 new VariableInstruction(InstructionConstants.OP_LSTORE, X), 302 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 303 },{ 304 new SimpleInstruction(InstructionConstants.OP_DUP2), 305 new VariableInstruction(InstructionConstants.OP_LSTORE, X), 306 }, 307 }, 308 { // fstore/fload = dup/fstore 309 { 310 new VariableInstruction(InstructionConstants.OP_FSTORE, X), 311 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 312 },{ 313 new SimpleInstruction(InstructionConstants.OP_DUP), 314 new VariableInstruction(InstructionConstants.OP_FSTORE, X), 315 }, 316 }, 317 { // dstore/dload = dup2/dstore 318 { 319 new VariableInstruction(InstructionConstants.OP_DSTORE, X), 320 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 321 },{ 322 new SimpleInstruction(InstructionConstants.OP_DUP2), 323 new VariableInstruction(InstructionConstants.OP_DSTORE, X), 324 }, 325 }, 326 { // astore/aload = dup/astore 327 { 328 new VariableInstruction(InstructionConstants.OP_ASTORE, X), 329 new VariableInstruction(InstructionConstants.OP_ALOAD, X), 330 },{ 331 new SimpleInstruction(InstructionConstants.OP_DUP), 332 new VariableInstruction(InstructionConstants.OP_ASTORE, X), 333 }, 334 }, 335 }; 336 337 public static final Instruction[][][] ARITHMETIC = new Instruction[][][] 338 { 339 { // c + i = i + c 340 { 341 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 342 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 343 new SimpleInstruction(InstructionConstants.OP_IADD), 344 },{ 345 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 346 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 347 new SimpleInstruction(InstructionConstants.OP_IADD), 348 }, 349 }, 350 { // b + i = i + b 351 { 352 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 353 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 354 new SimpleInstruction(InstructionConstants.OP_IADD), 355 },{ 356 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 357 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 358 new SimpleInstruction(InstructionConstants.OP_IADD), 359 }, 360 }, 361 { // s + i = i + s 362 { 363 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 364 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 365 new SimpleInstruction(InstructionConstants.OP_IADD), 366 },{ 367 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 368 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 369 new SimpleInstruction(InstructionConstants.OP_IADD), 370 }, 371 }, 372 { // c + i = i + c 373 { 374 new ConstantInstruction(InstructionConstants.OP_LDC, A), 375 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 376 new SimpleInstruction(InstructionConstants.OP_IADD), 377 },{ 378 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 379 new ConstantInstruction(InstructionConstants.OP_LDC, A), 380 new SimpleInstruction(InstructionConstants.OP_IADD), 381 }, 382 }, 383 { // c * i = i * c 384 { 385 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 386 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 387 new SimpleInstruction(InstructionConstants.OP_IMUL), 388 },{ 389 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 390 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 391 new SimpleInstruction(InstructionConstants.OP_IMUL), 392 }, 393 }, 394 { // b * i = i * b 395 { 396 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 397 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 398 new SimpleInstruction(InstructionConstants.OP_IMUL), 399 },{ 400 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 401 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 402 new SimpleInstruction(InstructionConstants.OP_IMUL), 403 }, 404 }, 405 { // s * i = i * s 406 { 407 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 408 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 409 new SimpleInstruction(InstructionConstants.OP_IMUL), 410 },{ 411 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 412 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 413 new SimpleInstruction(InstructionConstants.OP_IMUL), 414 }, 415 }, 416 { // c * i = i * c 417 { 418 new ConstantInstruction(InstructionConstants.OP_LDC, A), 419 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 420 new SimpleInstruction(InstructionConstants.OP_IMUL), 421 },{ 422 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 423 new ConstantInstruction(InstructionConstants.OP_LDC, A), 424 new SimpleInstruction(InstructionConstants.OP_IMUL), 425 }, 426 }, 427 { // c + l = l + c 428 { 429 new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), 430 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 431 new SimpleInstruction(InstructionConstants.OP_LADD), 432 },{ 433 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 434 new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), 435 new SimpleInstruction(InstructionConstants.OP_LADD), 436 }, 437 }, 438 { // c + l = l + c 439 { 440 new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), 441 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 442 new SimpleInstruction(InstructionConstants.OP_LADD), 443 },{ 444 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 445 new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), 446 new SimpleInstruction(InstructionConstants.OP_LADD), 447 }, 448 }, 449 { // c * l = l * c 450 { 451 new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), 452 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 453 new SimpleInstruction(InstructionConstants.OP_LMUL), 454 },{ 455 new VariableInstruction(InstructionConstants.OP_LLOAD, X), 456 new SimpleInstruction(InstructionConstants.OP_LCONST_0, A), 457 new SimpleInstruction(InstructionConstants.OP_LMUL), 458 }, 459 }, 460 { // c + f = f + c 461 { 462 new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), 463 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 464 new SimpleInstruction(InstructionConstants.OP_FADD), 465 },{ 466 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 467 new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), 468 new SimpleInstruction(InstructionConstants.OP_FADD), 469 }, 470 }, 471 { // c + f = f + c 472 { 473 new ConstantInstruction(InstructionConstants.OP_LDC, A), 474 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 475 new SimpleInstruction(InstructionConstants.OP_FADD), 476 },{ 477 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 478 new ConstantInstruction(InstructionConstants.OP_LDC, A), 479 new SimpleInstruction(InstructionConstants.OP_FADD), 480 }, 481 }, 482 { // c * f = f * c 483 { 484 new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), 485 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 486 new SimpleInstruction(InstructionConstants.OP_FMUL), 487 },{ 488 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 489 new SimpleInstruction(InstructionConstants.OP_FCONST_0, A), 490 new SimpleInstruction(InstructionConstants.OP_FMUL), 491 }, 492 }, 493 { // c * f = f * c 494 { 495 new ConstantInstruction(InstructionConstants.OP_LDC, A), 496 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 497 new SimpleInstruction(InstructionConstants.OP_LMUL), 498 },{ 499 new VariableInstruction(InstructionConstants.OP_FLOAD, X), 500 new ConstantInstruction(InstructionConstants.OP_LDC, A), 501 new SimpleInstruction(InstructionConstants.OP_LMUL), 502 }, 503 }, 504 { // c + d = d + c 505 { 506 new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), 507 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 508 new SimpleInstruction(InstructionConstants.OP_DADD), 509 },{ 510 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 511 new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), 512 new SimpleInstruction(InstructionConstants.OP_DADD), 513 }, 514 }, 515 { // c + d = d + c 516 { 517 new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), 518 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 519 new SimpleInstruction(InstructionConstants.OP_DADD), 520 },{ 521 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 522 new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), 523 new SimpleInstruction(InstructionConstants.OP_DADD), 524 }, 525 }, 526 { // c * d = d * c 527 { 528 new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), 529 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 530 new SimpleInstruction(InstructionConstants.OP_DMUL), 531 },{ 532 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 533 new SimpleInstruction(InstructionConstants.OP_DCONST_0, A), 534 new SimpleInstruction(InstructionConstants.OP_DMUL), 535 }, 536 }, 537 { // c * d = d * c 538 { 539 new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), 540 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 541 new SimpleInstruction(InstructionConstants.OP_DMUL), 542 },{ 543 new VariableInstruction(InstructionConstants.OP_DLOAD, X), 544 new ConstantInstruction(InstructionConstants.OP_LDC2_W, A), 545 new SimpleInstruction(InstructionConstants.OP_DMUL), 546 }, 547 }, 548 { // i = i + c = i += c 549 { 550 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 551 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 552 new SimpleInstruction(InstructionConstants.OP_IADD), 553 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 554 },{ 555 new VariableInstruction(InstructionConstants.OP_IINC, X, A), 556 }, 557 }, 558 { // i = i + b = i += b 559 { 560 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 561 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 562 new SimpleInstruction(InstructionConstants.OP_IADD), 563 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 564 },{ 565 new VariableInstruction(InstructionConstants.OP_IINC, X, A), 566 }, 567 }, 568 { // i = i + s = i += s 569 { 570 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 571 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 572 new SimpleInstruction(InstructionConstants.OP_IADD), 573 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 574 },{ 575 new VariableInstruction(InstructionConstants.OP_IINC, X, A), 576 }, 577 }, 578 { // i = i - -1 = i++ 579 { 580 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 581 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 582 new SimpleInstruction(InstructionConstants.OP_ISUB), 583 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 584 },{ 585 new VariableInstruction(InstructionConstants.OP_IINC, X, 1), 586 }, 587 }, 588 { // i = i - 1 = i-- 589 { 590 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 591 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 592 new SimpleInstruction(InstructionConstants.OP_ISUB), 593 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 594 },{ 595 new VariableInstruction(InstructionConstants.OP_IINC, X, -1), 596 }, 597 }, 598 { // i = i - 2 = i -= 2 599 { 600 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 601 new SimpleInstruction(InstructionConstants.OP_ICONST_2), 602 new SimpleInstruction(InstructionConstants.OP_ISUB), 603 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 604 },{ 605 new VariableInstruction(InstructionConstants.OP_IINC, X, -2), 606 }, 607 }, 608 { // i = i - 3 = i -= 3 609 { 610 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 611 new SimpleInstruction(InstructionConstants.OP_ICONST_3), 612 new SimpleInstruction(InstructionConstants.OP_ISUB), 613 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 614 },{ 615 new VariableInstruction(InstructionConstants.OP_IINC, X, -3), 616 }, 617 }, 618 { // i = i - 4 = i -= 4 619 { 620 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 621 new SimpleInstruction(InstructionConstants.OP_ICONST_4), 622 new SimpleInstruction(InstructionConstants.OP_ISUB), 623 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 624 },{ 625 new VariableInstruction(InstructionConstants.OP_IINC, X, -4), 626 }, 627 }, 628 { // i = i - 5 = i -= 5 629 { 630 new VariableInstruction(InstructionConstants.OP_ILOAD, X), 631 new SimpleInstruction(InstructionConstants.OP_ICONST_5), 632 new SimpleInstruction(InstructionConstants.OP_ISUB), 633 new VariableInstruction(InstructionConstants.OP_ISTORE, X), 634 },{ 635 new VariableInstruction(InstructionConstants.OP_IINC, X, -5), 636 }, 637 }, 638 { // ... + 0 = ... 639 { 640 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 641 new SimpleInstruction(InstructionConstants.OP_IADD), 642 },{ 643 // Nothing. 644 }, 645 }, 646 { // ... + 0L = ... 647 { 648 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 649 new SimpleInstruction(InstructionConstants.OP_LADD), 650 },{ 651 // Nothing. 652 }, 653 }, 654 { // ... + 0f = ... 655 { 656 new SimpleInstruction(InstructionConstants.OP_FCONST_0), 657 new SimpleInstruction(InstructionConstants.OP_FADD), 658 },{ 659 // Nothing. 660 }, 661 }, 662 { // ... + 0d = ... 663 { 664 new SimpleInstruction(InstructionConstants.OP_DCONST_0), 665 new SimpleInstruction(InstructionConstants.OP_DADD), 666 },{ 667 // Nothing. 668 }, 669 }, 670 { // ... - 0 = ... 671 { 672 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 673 new SimpleInstruction(InstructionConstants.OP_ISUB), 674 },{ 675 // Nothing. 676 }, 677 }, 678 { // ... - 0L = ... 679 { 680 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 681 new SimpleInstruction(InstructionConstants.OP_LSUB), 682 },{ 683 // Nothing. 684 }, 685 }, 686 { // ... - 0f = ... 687 { 688 new SimpleInstruction(InstructionConstants.OP_FCONST_0), 689 new SimpleInstruction(InstructionConstants.OP_FSUB), 690 },{ 691 // Nothing. 692 }, 693 }, 694 { // ... - 0d = ... 695 { 696 new SimpleInstruction(InstructionConstants.OP_DCONST_0), 697 new SimpleInstruction(InstructionConstants.OP_DSUB), 698 },{ 699 // Nothing. 700 }, 701 }, 702 { // ... * -1 = -... 703 { 704 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 705 new SimpleInstruction(InstructionConstants.OP_IMUL), 706 },{ 707 new SimpleInstruction(InstructionConstants.OP_INEG), 708 }, 709 }, 710 { // ... * 0 = 0 711 { 712 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 713 new SimpleInstruction(InstructionConstants.OP_IMUL), 714 },{ 715 new SimpleInstruction(InstructionConstants.OP_POP), 716 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 717 }, 718 }, 719 { // ... * 1 = ... 720 { 721 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 722 new SimpleInstruction(InstructionConstants.OP_IMUL), 723 },{ 724 // Nothing. 725 }, 726 }, 727 { // ... * 2 = ... << 1 728 { 729 new SimpleInstruction(InstructionConstants.OP_ICONST_2), 730 new SimpleInstruction(InstructionConstants.OP_IMUL), 731 },{ 732 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 733 new SimpleInstruction(InstructionConstants.OP_ISHL), 734 }, 735 }, 736 { // ... * 4 = ... << 2 737 { 738 new SimpleInstruction(InstructionConstants.OP_ICONST_4), 739 new SimpleInstruction(InstructionConstants.OP_IMUL), 740 },{ 741 new SimpleInstruction(InstructionConstants.OP_ICONST_2), 742 new SimpleInstruction(InstructionConstants.OP_ISHL), 743 }, 744 }, 745 { // ... * 8 = ... << 3 746 { 747 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 748 new SimpleInstruction(InstructionConstants.OP_IMUL), 749 },{ 750 new SimpleInstruction(InstructionConstants.OP_ICONST_3), 751 new SimpleInstruction(InstructionConstants.OP_ISHL), 752 }, 753 }, 754 { // ... * 16 = ... << 4 755 { 756 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 757 new SimpleInstruction(InstructionConstants.OP_IMUL), 758 },{ 759 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), 760 new SimpleInstruction(InstructionConstants.OP_ISHL), 761 }, 762 }, 763 { // ... * 32 = ... << 5 764 { 765 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 766 new SimpleInstruction(InstructionConstants.OP_IMUL), 767 },{ 768 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), 769 new SimpleInstruction(InstructionConstants.OP_ISHL), 770 }, 771 }, 772 { // ... * 64 = ... << 6 773 { 774 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64), 775 new SimpleInstruction(InstructionConstants.OP_IMUL), 776 },{ 777 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), 778 new SimpleInstruction(InstructionConstants.OP_ISHL), 779 }, 780 }, 781 { // ... * 128 = ... << 7 782 { 783 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128), 784 new SimpleInstruction(InstructionConstants.OP_IMUL), 785 },{ 786 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), 787 new SimpleInstruction(InstructionConstants.OP_ISHL), 788 }, 789 }, 790 { // ... * 256 = ... << 8 791 { 792 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256), 793 new SimpleInstruction(InstructionConstants.OP_IMUL), 794 },{ 795 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 796 new SimpleInstruction(InstructionConstants.OP_ISHL), 797 }, 798 }, 799 { // ... * 512 = ... << 9 800 { 801 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512), 802 new SimpleInstruction(InstructionConstants.OP_IMUL), 803 },{ 804 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), 805 new SimpleInstruction(InstructionConstants.OP_ISHL), 806 }, 807 }, 808 { // ... * 1024 = ... << 10 809 { 810 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024), 811 new SimpleInstruction(InstructionConstants.OP_IMUL), 812 },{ 813 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), 814 new SimpleInstruction(InstructionConstants.OP_ISHL), 815 }, 816 }, 817 { // ... * 2048 = ... << 11 818 { 819 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048), 820 new SimpleInstruction(InstructionConstants.OP_IMUL), 821 },{ 822 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), 823 new SimpleInstruction(InstructionConstants.OP_ISHL), 824 }, 825 }, 826 { // ... * 4096 = ... << 12 827 { 828 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096), 829 new SimpleInstruction(InstructionConstants.OP_IMUL), 830 },{ 831 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), 832 new SimpleInstruction(InstructionConstants.OP_ISHL), 833 }, 834 }, 835 { // ... * 8192 = ... << 13 836 { 837 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192), 838 new SimpleInstruction(InstructionConstants.OP_IMUL), 839 },{ 840 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), 841 new SimpleInstruction(InstructionConstants.OP_ISHL), 842 }, 843 }, 844 { // ... * 16384 = ... << 14 845 { 846 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384), 847 new SimpleInstruction(InstructionConstants.OP_IMUL), 848 },{ 849 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), 850 new SimpleInstruction(InstructionConstants.OP_ISHL), 851 }, 852 }, 853 { // ... * 32768 = ... << 15 854 { 855 new ConstantInstruction(InstructionConstants.OP_LDC, I_32768), 856 new SimpleInstruction(InstructionConstants.OP_IMUL), 857 },{ 858 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), 859 new SimpleInstruction(InstructionConstants.OP_ISHL), 860 }, 861 }, 862 { // ... * 65536 = ... << 16 863 { 864 new ConstantInstruction(InstructionConstants.OP_LDC, I_65536), 865 new SimpleInstruction(InstructionConstants.OP_IMUL), 866 },{ 867 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 868 new SimpleInstruction(InstructionConstants.OP_ISHL), 869 }, 870 }, 871 { // ... * 16777216 = ... << 24 872 { 873 new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216), 874 new SimpleInstruction(InstructionConstants.OP_IMUL), 875 },{ 876 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 877 new SimpleInstruction(InstructionConstants.OP_ISHL), 878 }, 879 }, 880 { // ... * -1L = -... 881 { 882 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), 883 new SimpleInstruction(InstructionConstants.OP_LMUL), 884 },{ 885 new SimpleInstruction(InstructionConstants.OP_LNEG), 886 }, 887 }, 888 { // ... * 0L = 0L 889 { 890 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 891 new SimpleInstruction(InstructionConstants.OP_LMUL), 892 },{ 893 new SimpleInstruction(InstructionConstants.OP_POP2), 894 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 895 }, 896 }, 897 { // ... * 1L = ... 898 { 899 new SimpleInstruction(InstructionConstants.OP_LCONST_1), 900 new SimpleInstruction(InstructionConstants.OP_LMUL), 901 },{ 902 // Nothing. 903 }, 904 }, 905 { // ... * 2L = ... << 1 906 { 907 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2), 908 new SimpleInstruction(InstructionConstants.OP_LMUL), 909 },{ 910 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 911 new SimpleInstruction(InstructionConstants.OP_LSHL), 912 }, 913 }, 914 { // ... * 4L = ... << 2 915 { 916 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4), 917 new SimpleInstruction(InstructionConstants.OP_LMUL), 918 },{ 919 new SimpleInstruction(InstructionConstants.OP_ICONST_2), 920 new SimpleInstruction(InstructionConstants.OP_LSHL), 921 }, 922 }, 923 { // ... * 8L = ... << 3 924 { 925 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8), 926 new SimpleInstruction(InstructionConstants.OP_LMUL), 927 },{ 928 new SimpleInstruction(InstructionConstants.OP_ICONST_3), 929 new SimpleInstruction(InstructionConstants.OP_LSHL), 930 }, 931 }, 932 { // ... * 16L = ... << 4 933 { 934 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16), 935 new SimpleInstruction(InstructionConstants.OP_LMUL), 936 },{ 937 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), 938 new SimpleInstruction(InstructionConstants.OP_LSHL), 939 }, 940 }, 941 { // ... * 32L = ... << 5 942 { 943 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32), 944 new SimpleInstruction(InstructionConstants.OP_LMUL), 945 },{ 946 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), 947 new SimpleInstruction(InstructionConstants.OP_LSHL), 948 }, 949 }, 950 { // ... * 64L = ... << 6 951 { 952 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64), 953 new SimpleInstruction(InstructionConstants.OP_LMUL), 954 },{ 955 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), 956 new SimpleInstruction(InstructionConstants.OP_LSHL), 957 }, 958 }, 959 { // ... * 128L = ... << 7 960 { 961 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128), 962 new SimpleInstruction(InstructionConstants.OP_LMUL), 963 },{ 964 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), 965 new SimpleInstruction(InstructionConstants.OP_LSHL), 966 }, 967 }, 968 { // ... * 256L = ... << 8 969 { 970 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256), 971 new SimpleInstruction(InstructionConstants.OP_LMUL), 972 },{ 973 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 974 new SimpleInstruction(InstructionConstants.OP_LSHL), 975 }, 976 }, 977 { // ... * 512L = ... << 9 978 { 979 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512), 980 new SimpleInstruction(InstructionConstants.OP_LMUL), 981 },{ 982 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), 983 new SimpleInstruction(InstructionConstants.OP_LSHL), 984 }, 985 }, 986 { // ... * 1024L = ... << 10 987 { 988 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024), 989 new SimpleInstruction(InstructionConstants.OP_LMUL), 990 },{ 991 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), 992 new SimpleInstruction(InstructionConstants.OP_LSHL), 993 }, 994 }, 995 { // ... * 2048L = ... << 11 996 { 997 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048), 998 new SimpleInstruction(InstructionConstants.OP_LMUL), 999 },{ 1000 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), 1001 new SimpleInstruction(InstructionConstants.OP_LSHL), 1002 }, 1003 }, 1004 { // ... * 4096L = ... << 12 1005 { 1006 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096), 1007 new SimpleInstruction(InstructionConstants.OP_LMUL), 1008 },{ 1009 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), 1010 new SimpleInstruction(InstructionConstants.OP_LSHL), 1011 }, 1012 }, 1013 { // ... * 8192L = ... << 13 1014 { 1015 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192), 1016 new SimpleInstruction(InstructionConstants.OP_LMUL), 1017 },{ 1018 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), 1019 new SimpleInstruction(InstructionConstants.OP_LSHL), 1020 }, 1021 }, 1022 { // ... * 16384L = ... << 14 1023 { 1024 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384), 1025 new SimpleInstruction(InstructionConstants.OP_LMUL), 1026 },{ 1027 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), 1028 new SimpleInstruction(InstructionConstants.OP_LSHL), 1029 }, 1030 }, 1031 { // ... * 32768L = ... << 15 1032 { 1033 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768), 1034 new SimpleInstruction(InstructionConstants.OP_LMUL), 1035 },{ 1036 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), 1037 new SimpleInstruction(InstructionConstants.OP_LSHL), 1038 }, 1039 }, 1040 { // ... * 65536LL = ... << 16 1041 { 1042 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536), 1043 new SimpleInstruction(InstructionConstants.OP_LMUL), 1044 },{ 1045 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1046 new SimpleInstruction(InstructionConstants.OP_LSHL), 1047 }, 1048 }, 1049 { // ... * 16777216L = ... << 24 1050 { 1051 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216), 1052 new SimpleInstruction(InstructionConstants.OP_LMUL), 1053 },{ 1054 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1055 new SimpleInstruction(InstructionConstants.OP_LSHL), 1056 }, 1057 }, 1058 { // ... * 4294967296L = ... << 32 1059 { 1060 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296), 1061 new SimpleInstruction(InstructionConstants.OP_LMUL), 1062 },{ 1063 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 1064 new SimpleInstruction(InstructionConstants.OP_LSHL), 1065 }, 1066 }, 1067 { // ... * -1f = -... 1068 { 1069 new ConstantInstruction(InstructionConstants.OP_LDC, F_M1), 1070 new SimpleInstruction(InstructionConstants.OP_FMUL), 1071 },{ 1072 new SimpleInstruction(InstructionConstants.OP_FNEG), 1073 }, 1074 }, 1075// { // ... * 0f = 0f (or NaN) 1076// { 1077// new SimpleInstruction(InstructionConstants.OP_FCONST_0), 1078// new SimpleInstruction(InstructionConstants.OP_FMUL), 1079// },{ 1080// new SimpleInstruction(InstructionConstants.OP_POP), 1081// new SimpleInstruction(InstructionConstants.OP_FCONST_0), 1082// }, 1083// }, 1084 { // ... * 1f = ... 1085 { 1086 new SimpleInstruction(InstructionConstants.OP_FCONST_1), 1087 new SimpleInstruction(InstructionConstants.OP_FMUL), 1088 },{ 1089 // Nothing. 1090 }, 1091 }, 1092 { // ... * -1d = -... 1093 { 1094 new ConstantInstruction(InstructionConstants.OP_LDC2_W, D_M1), 1095 new SimpleInstruction(InstructionConstants.OP_DMUL), 1096 },{ 1097 new SimpleInstruction(InstructionConstants.OP_DNEG), 1098 }, 1099 }, 1100// { // ... * 0d = 0d (or NaN) 1101// { 1102// new SimpleInstruction(InstructionConstants.OP_DCONST_0), 1103// new SimpleInstruction(InstructionConstants.OP_DMUL), 1104// },{ 1105// new SimpleInstruction(InstructionConstants.OP_POP2), 1106// new SimpleInstruction(InstructionConstants.OP_DCONST_0), 1107// }, 1108// }, 1109 { // ... * 1d = ... 1110 { 1111 new SimpleInstruction(InstructionConstants.OP_DCONST_1), 1112 new SimpleInstruction(InstructionConstants.OP_DMUL), 1113 },{ 1114 // Nothing. 1115 }, 1116 }, 1117 { // ... / -1 = -... 1118 { 1119 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 1120 new SimpleInstruction(InstructionConstants.OP_IDIV), 1121 },{ 1122 new SimpleInstruction(InstructionConstants.OP_INEG), 1123 }, 1124 }, 1125 { // ... / 1 = ... 1126 { 1127 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 1128 new SimpleInstruction(InstructionConstants.OP_IDIV), 1129 },{ 1130 // Nothing. 1131 }, 1132 }, 1133 // Not valid for negative values. 1134// { // ... / 2 = ... >> 1 1135// { 1136// new SimpleInstruction(InstructionConstants.OP_ICONST_2), 1137// new SimpleInstruction(InstructionConstants.OP_IDIV), 1138// },{ 1139// new SimpleInstruction(InstructionConstants.OP_ICONST_1), 1140// new SimpleInstruction(InstructionConstants.OP_ISHR), 1141// }, 1142// }, 1143// { // ... / 4 = ... >> 2 1144// { 1145// new SimpleInstruction(InstructionConstants.OP_ICONST_4), 1146// new SimpleInstruction(InstructionConstants.OP_IDIV), 1147// },{ 1148// new SimpleInstruction(InstructionConstants.OP_ICONST_2), 1149// new SimpleInstruction(InstructionConstants.OP_ISHR), 1150// }, 1151// }, 1152// { // ... / 8 = ... >> 3 1153// { 1154// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1155// new SimpleInstruction(InstructionConstants.OP_IDIV), 1156// },{ 1157// new SimpleInstruction(InstructionConstants.OP_ICONST_3), 1158// new SimpleInstruction(InstructionConstants.OP_ISHR), 1159// }, 1160// }, 1161// { // ... / 16 = ... >> 4 1162// { 1163// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1164// new SimpleInstruction(InstructionConstants.OP_IDIV), 1165// },{ 1166// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), 1167// new SimpleInstruction(InstructionConstants.OP_ISHR), 1168// }, 1169// }, 1170// { // ... / 32 = ... >> 5 1171// { 1172// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 1173// new SimpleInstruction(InstructionConstants.OP_IDIV), 1174// },{ 1175// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), 1176// new SimpleInstruction(InstructionConstants.OP_ISHR), 1177// }, 1178// }, 1179// { // ... / 64 = ... >> 6 1180// { 1181// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64), 1182// new SimpleInstruction(InstructionConstants.OP_IDIV), 1183// },{ 1184// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), 1185// new SimpleInstruction(InstructionConstants.OP_ISHR), 1186// }, 1187// }, 1188// { // ... / 128 = ... >> 7 1189// { 1190// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128), 1191// new SimpleInstruction(InstructionConstants.OP_IDIV), 1192// },{ 1193// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), 1194// new SimpleInstruction(InstructionConstants.OP_ISHR), 1195// }, 1196// }, 1197// { // ... / 256 = ... >> 8 1198// { 1199// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256), 1200// new SimpleInstruction(InstructionConstants.OP_IDIV), 1201// },{ 1202// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1203// new SimpleInstruction(InstructionConstants.OP_ISHR), 1204// }, 1205// }, 1206// { // ... / 512 = ... >> 9 1207// { 1208// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512), 1209// new SimpleInstruction(InstructionConstants.OP_IDIV), 1210// },{ 1211// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), 1212// new SimpleInstruction(InstructionConstants.OP_ISHR), 1213// }, 1214// }, 1215// { // ... / 1024 = ... >> 10 1216// { 1217// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024), 1218// new SimpleInstruction(InstructionConstants.OP_IDIV), 1219// },{ 1220// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), 1221// new SimpleInstruction(InstructionConstants.OP_ISHR), 1222// }, 1223// }, 1224// { // ... / 2048 = ... >> 11 1225// { 1226// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048), 1227// new SimpleInstruction(InstructionConstants.OP_IDIV), 1228// },{ 1229// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), 1230// new SimpleInstruction(InstructionConstants.OP_ISHR), 1231// }, 1232// }, 1233// { // ... / 4096 = ... >> 12 1234// { 1235// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096), 1236// new SimpleInstruction(InstructionConstants.OP_IDIV), 1237// },{ 1238// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), 1239// new SimpleInstruction(InstructionConstants.OP_ISHR), 1240// }, 1241// }, 1242// { // ... / 8192 = ... >> 13 1243// { 1244// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192), 1245// new SimpleInstruction(InstructionConstants.OP_IDIV), 1246// },{ 1247// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), 1248// new SimpleInstruction(InstructionConstants.OP_ISHR), 1249// }, 1250// }, 1251// { // ... / 16384 = ... >> 14 1252// { 1253// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384), 1254// new SimpleInstruction(InstructionConstants.OP_IDIV), 1255// },{ 1256// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), 1257// new SimpleInstruction(InstructionConstants.OP_ISHR), 1258// }, 1259// }, 1260// { // ... / 32768 = ... >> 15 1261// { 1262// new ConstantInstruction(InstructionConstants.OP_LDC, I_32768), 1263// new SimpleInstruction(InstructionConstants.OP_IDIV), 1264// },{ 1265// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), 1266// new SimpleInstruction(InstructionConstants.OP_ISHR), 1267// }, 1268// }, 1269// { // ... / 65536 = ... >> 16 1270// { 1271// new ConstantInstruction(InstructionConstants.OP_LDC, I_65536), 1272// new SimpleInstruction(InstructionConstants.OP_IDIV), 1273// },{ 1274// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1275// new SimpleInstruction(InstructionConstants.OP_ISHR), 1276// }, 1277// }, 1278// { // ... / 16777216 = ... >> 24 1279// { 1280// new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216), 1281// new SimpleInstruction(InstructionConstants.OP_IDIV), 1282// },{ 1283// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1284// new SimpleInstruction(InstructionConstants.OP_ISHR), 1285// }, 1286// }, 1287 { // ... / -1L = -... 1288 { 1289 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), 1290 new SimpleInstruction(InstructionConstants.OP_LDIV), 1291 },{ 1292 new SimpleInstruction(InstructionConstants.OP_LNEG), 1293 }, 1294 }, 1295 { // ... / 1L = ... 1296 { 1297 new SimpleInstruction(InstructionConstants.OP_LCONST_1), 1298 new SimpleInstruction(InstructionConstants.OP_LDIV), 1299 },{ 1300 // Nothing. 1301 }, 1302 }, 1303 // Not valid for negative values. 1304// { // ... / 2L = ... >> 1 1305// { 1306// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2), 1307// new SimpleInstruction(InstructionConstants.OP_LDIV), 1308// },{ 1309// new SimpleInstruction(InstructionConstants.OP_ICONST_1), 1310// new SimpleInstruction(InstructionConstants.OP_LSHR), 1311// }, 1312// }, 1313// { // ... / 4L = ... >> 2 1314// { 1315// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4), 1316// new SimpleInstruction(InstructionConstants.OP_LDIV), 1317// },{ 1318// new SimpleInstruction(InstructionConstants.OP_ICONST_2), 1319// new SimpleInstruction(InstructionConstants.OP_LSHR), 1320// }, 1321// }, 1322// { // ... / 8L = ... >> 3 1323// { 1324// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8), 1325// new SimpleInstruction(InstructionConstants.OP_LDIV), 1326// },{ 1327// new SimpleInstruction(InstructionConstants.OP_ICONST_3), 1328// new SimpleInstruction(InstructionConstants.OP_LSHR), 1329// }, 1330// }, 1331// { // ... / 16L = ... >> 4 1332// { 1333// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16), 1334// new SimpleInstruction(InstructionConstants.OP_LDIV), 1335// },{ 1336// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4), 1337// new SimpleInstruction(InstructionConstants.OP_LSHR), 1338// }, 1339// }, 1340// { // ... / 32L = ... >> 5 1341// { 1342// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32), 1343// new SimpleInstruction(InstructionConstants.OP_LDIV), 1344// },{ 1345// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5), 1346// new SimpleInstruction(InstructionConstants.OP_LSHR), 1347// }, 1348// }, 1349// { // ... / 64L = ... >> 6 1350// { 1351// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64), 1352// new SimpleInstruction(InstructionConstants.OP_LDIV), 1353// },{ 1354// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6), 1355// new SimpleInstruction(InstructionConstants.OP_LSHR), 1356// }, 1357// }, 1358// { // ... / 128L = ... >> 7 1359// { 1360// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128), 1361// new SimpleInstruction(InstructionConstants.OP_LDIV), 1362// },{ 1363// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7), 1364// new SimpleInstruction(InstructionConstants.OP_LSHR), 1365// }, 1366// }, 1367// { // ... / 256L = ... >> 8 1368// { 1369// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256), 1370// new SimpleInstruction(InstructionConstants.OP_LDIV), 1371// },{ 1372// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1373// new SimpleInstruction(InstructionConstants.OP_LSHR), 1374// }, 1375// }, 1376// { // ... / 512L = ... >> 9 1377// { 1378// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512), 1379// new SimpleInstruction(InstructionConstants.OP_LDIV), 1380// },{ 1381// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9), 1382// new SimpleInstruction(InstructionConstants.OP_LSHR), 1383// }, 1384// }, 1385// { // ... / 1024L = ... >> 10 1386// { 1387// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024), 1388// new SimpleInstruction(InstructionConstants.OP_LDIV), 1389// },{ 1390// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10), 1391// new SimpleInstruction(InstructionConstants.OP_LSHR), 1392// }, 1393// }, 1394// { // ... / 2048L = ... >> 11 1395// { 1396// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048), 1397// new SimpleInstruction(InstructionConstants.OP_LDIV), 1398// },{ 1399// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11), 1400// new SimpleInstruction(InstructionConstants.OP_LSHR), 1401// }, 1402// }, 1403// { // ... / 4096L = ... >> 12 1404// { 1405// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096), 1406// new SimpleInstruction(InstructionConstants.OP_LDIV), 1407// },{ 1408// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12), 1409// new SimpleInstruction(InstructionConstants.OP_LSHR), 1410// }, 1411// }, 1412// { // ... / 8192L = ... >> 13 1413// { 1414// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192), 1415// new SimpleInstruction(InstructionConstants.OP_LDIV), 1416// },{ 1417// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13), 1418// new SimpleInstruction(InstructionConstants.OP_LSHR), 1419// }, 1420// }, 1421// { // ... / 16384L = ... >> 14 1422// { 1423// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384), 1424// new SimpleInstruction(InstructionConstants.OP_LDIV), 1425// },{ 1426// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14), 1427// new SimpleInstruction(InstructionConstants.OP_LSHR), 1428// }, 1429// }, 1430// { // ... / 32768L = ... >> 15 1431// { 1432// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768), 1433// new SimpleInstruction(InstructionConstants.OP_LDIV), 1434// },{ 1435// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15), 1436// new SimpleInstruction(InstructionConstants.OP_LSHR), 1437// }, 1438// }, 1439// { // ... / 65536LL = ... >> 16 1440// { 1441// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536), 1442// new SimpleInstruction(InstructionConstants.OP_LDIV), 1443// },{ 1444// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1445// new SimpleInstruction(InstructionConstants.OP_LSHR), 1446// }, 1447// }, 1448// { // ... / 16777216L = ... >> 24 1449// { 1450// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216), 1451// new SimpleInstruction(InstructionConstants.OP_LDIV), 1452// },{ 1453// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1454// new SimpleInstruction(InstructionConstants.OP_LSHR), 1455// }, 1456// }, 1457// { // ... / 4294967296L = ... >> 32 1458// { 1459// new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296), 1460// new SimpleInstruction(InstructionConstants.OP_LDIV), 1461// },{ 1462// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 1463// new SimpleInstruction(InstructionConstants.OP_LSHR), 1464// }, 1465// }, 1466 { // ... / -1f = -... 1467 { 1468 new ConstantInstruction(InstructionConstants.OP_LDC, F_M1), 1469 new SimpleInstruction(InstructionConstants.OP_FDIV), 1470 },{ 1471 new SimpleInstruction(InstructionConstants.OP_FNEG), 1472 }, 1473 }, 1474 { // ... / 1f = ... 1475 { 1476 new SimpleInstruction(InstructionConstants.OP_FCONST_1), 1477 new SimpleInstruction(InstructionConstants.OP_FDIV), 1478 },{ 1479 // Nothing. 1480 }, 1481 }, 1482 { // ... / -1d = -... 1483 { 1484 new ConstantInstruction(InstructionConstants.OP_LDC2_W, D_M1), 1485 new SimpleInstruction(InstructionConstants.OP_DDIV), 1486 },{ 1487 new SimpleInstruction(InstructionConstants.OP_DNEG), 1488 }, 1489 }, 1490 { // ... / 1d = ... 1491 { 1492 new SimpleInstruction(InstructionConstants.OP_DCONST_1), 1493 new SimpleInstruction(InstructionConstants.OP_DDIV), 1494 },{ 1495 // Nothing. 1496 }, 1497 }, 1498 { // ... % 1 = 0 1499 { 1500 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 1501 new SimpleInstruction(InstructionConstants.OP_IREM), 1502 },{ 1503 new SimpleInstruction(InstructionConstants.OP_POP), 1504 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1505 }, 1506 }, 1507// { // ... % 2 = ... & 0x1 1508// { 1509// new SimpleInstruction(InstructionConstants.OP_ICONST_2), 1510// new SimpleInstruction(InstructionConstants.OP_IREM), 1511// },{ 1512// new SimpleInstruction(InstructionConstants.OP_ICONST_1), 1513// new SimpleInstruction(InstructionConstants.OP_IAND), 1514// }, 1515// }, 1516// { // ... % 4 = ... & 0x3 1517// { 1518// new SimpleInstruction(InstructionConstants.OP_ICONST_4), 1519// new SimpleInstruction(InstructionConstants.OP_IREM), 1520// },{ 1521// new SimpleInstruction(InstructionConstants.OP_ICONST_3), 1522// new SimpleInstruction(InstructionConstants.OP_IAND), 1523// }, 1524// }, 1525// { // ... % 8 = ... & 0x07 1526// { 1527// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1528// new SimpleInstruction(InstructionConstants.OP_IREM), 1529// },{ 1530// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x07), 1531// new SimpleInstruction(InstructionConstants.OP_IAND), 1532// }, 1533// }, 1534// { // ... % 16 = ... & 0x0f 1535// { 1536// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1537// new SimpleInstruction(InstructionConstants.OP_IREM), 1538// },{ 1539// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x0f), 1540// new SimpleInstruction(InstructionConstants.OP_IAND), 1541// }, 1542// }, 1543// { // ... % 32 = ... & 0x1f 1544// { 1545// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 1546// new SimpleInstruction(InstructionConstants.OP_IREM), 1547// },{ 1548// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x1f), 1549// new SimpleInstruction(InstructionConstants.OP_IAND), 1550// }, 1551// }, 1552// { // ... % 64 = ... & 0x3f 1553// { 1554// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64), 1555// new SimpleInstruction(InstructionConstants.OP_IREM), 1556// },{ 1557// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x3f), 1558// new SimpleInstruction(InstructionConstants.OP_IAND), 1559// }, 1560// }, 1561// { // ... % 128 = ... & 0x7f 1562// { 1563// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128), 1564// new SimpleInstruction(InstructionConstants.OP_IREM), 1565// },{ 1566// new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x7f), 1567// new SimpleInstruction(InstructionConstants.OP_IAND), 1568// }, 1569// }, 1570// { // ... % 256 = ... & 0x00ff 1571// { 1572// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256), 1573// new SimpleInstruction(InstructionConstants.OP_IREM), 1574// },{ 1575// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x00ff), 1576// new SimpleInstruction(InstructionConstants.OP_IAND), 1577// }, 1578// }, 1579// { // ... % 512 = ... & 0x01ff 1580// { 1581// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512), 1582// new SimpleInstruction(InstructionConstants.OP_IREM), 1583// },{ 1584// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x01ff), 1585// new SimpleInstruction(InstructionConstants.OP_IAND), 1586// }, 1587// }, 1588// { // ... % 1024 = ... & 0x03ff 1589// { 1590// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024), 1591// new SimpleInstruction(InstructionConstants.OP_IREM), 1592// },{ 1593// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x03ff), 1594// new SimpleInstruction(InstructionConstants.OP_IAND), 1595// }, 1596// }, 1597// { // ... % 2048 = ... & 0x07ff 1598// { 1599// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048), 1600// new SimpleInstruction(InstructionConstants.OP_IREM), 1601// },{ 1602// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x07ff), 1603// new SimpleInstruction(InstructionConstants.OP_IAND), 1604// }, 1605// }, 1606// { // ... % 4096 = ... & 0x0fff 1607// { 1608// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096), 1609// new SimpleInstruction(InstructionConstants.OP_IREM), 1610// },{ 1611// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x0fff), 1612// new SimpleInstruction(InstructionConstants.OP_IAND), 1613// }, 1614// }, 1615// { // ... % 8192 = ... & 0x1fff 1616// { 1617// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192), 1618// new SimpleInstruction(InstructionConstants.OP_IREM), 1619// },{ 1620// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x1fff), 1621// new SimpleInstruction(InstructionConstants.OP_IAND), 1622// }, 1623// }, 1624// { // ... % 16384 = ... & 0x3fff 1625// { 1626// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384), 1627// new SimpleInstruction(InstructionConstants.OP_IREM), 1628// },{ 1629// new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x3fff), 1630// new SimpleInstruction(InstructionConstants.OP_IAND), 1631// }, 1632// }, 1633 { // ... % 1L = 0L 1634 { 1635 new SimpleInstruction(InstructionConstants.OP_LCONST_1), 1636 new SimpleInstruction(InstructionConstants.OP_LREM), 1637 },{ 1638 new SimpleInstruction(InstructionConstants.OP_POP2), 1639 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 1640 }, 1641 }, 1642// { // ... % 1f = 0f 1643// { 1644// new SimpleInstruction(InstructionConstants.OP_FCONST_1), 1645// new SimpleInstruction(InstructionConstants.OP_FREM), 1646// },{ 1647// new SimpleInstruction(InstructionConstants.OP_POP), 1648// new SimpleInstruction(InstructionConstants.OP_FCONST_0), 1649// }, 1650// }, 1651// { // ... % 1d = 0d 1652// { 1653// new SimpleInstruction(InstructionConstants.OP_DCONST_1), 1654// new SimpleInstruction(InstructionConstants.OP_DREM), 1655// },{ 1656// new SimpleInstruction(InstructionConstants.OP_POP2), 1657// new SimpleInstruction(InstructionConstants.OP_DCONST_0), 1658// }, 1659// }, 1660 { // -(-...) = ... 1661 { 1662 new SimpleInstruction(InstructionConstants.OP_INEG), 1663 new SimpleInstruction(InstructionConstants.OP_INEG), 1664 },{ 1665 // Nothing. 1666 }, 1667 }, 1668 { // -(-...) = ... 1669 { 1670 new SimpleInstruction(InstructionConstants.OP_LNEG), 1671 new SimpleInstruction(InstructionConstants.OP_LNEG), 1672 },{ 1673 // Nothing. 1674 }, 1675 }, 1676 { // -(-...) = ... 1677 { 1678 new SimpleInstruction(InstructionConstants.OP_FNEG), 1679 new SimpleInstruction(InstructionConstants.OP_FNEG), 1680 },{ 1681 // Nothing. 1682 }, 1683 }, 1684 { // -(-...) = ... 1685 { 1686 new SimpleInstruction(InstructionConstants.OP_DNEG), 1687 new SimpleInstruction(InstructionConstants.OP_DNEG), 1688 },{ 1689 // Nothing. 1690 }, 1691 }, 1692 { // +(-...) = -... 1693 { 1694 new SimpleInstruction(InstructionConstants.OP_INEG), 1695 new SimpleInstruction(InstructionConstants.OP_IADD), 1696 },{ 1697 new SimpleInstruction(InstructionConstants.OP_ISUB), 1698 }, 1699 }, 1700 { // +(-...) = -... 1701 { 1702 new SimpleInstruction(InstructionConstants.OP_LNEG), 1703 new SimpleInstruction(InstructionConstants.OP_LADD), 1704 },{ 1705 new SimpleInstruction(InstructionConstants.OP_LSUB), 1706 }, 1707 }, 1708 { // +(-...) = -... 1709 { 1710 new SimpleInstruction(InstructionConstants.OP_FNEG), 1711 new SimpleInstruction(InstructionConstants.OP_FADD), 1712 },{ 1713 new SimpleInstruction(InstructionConstants.OP_FSUB), 1714 }, 1715 }, 1716 { // +(-...) = -... 1717 { 1718 new SimpleInstruction(InstructionConstants.OP_DNEG), 1719 new SimpleInstruction(InstructionConstants.OP_DADD), 1720 },{ 1721 new SimpleInstruction(InstructionConstants.OP_DSUB), 1722 }, 1723 }, 1724 { // ... << 0 = ... 1725 { 1726 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1727 new SimpleInstruction(InstructionConstants.OP_ISHL), 1728 },{ 1729 // Nothing. 1730 }, 1731 }, 1732 { // ... << 0 = ... 1733 { 1734 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1735 new SimpleInstruction(InstructionConstants.OP_LSHL), 1736 },{ 1737 // Nothing. 1738 }, 1739 }, 1740 { // ... >> 0 = ... 1741 { 1742 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1743 new SimpleInstruction(InstructionConstants.OP_ISHR), 1744 },{ 1745 // Nothing. 1746 }, 1747 }, 1748 { // ... >> 0 = ... 1749 { 1750 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1751 new SimpleInstruction(InstructionConstants.OP_LSHR), 1752 },{ 1753 // Nothing. 1754 }, 1755 }, 1756 { // ... >>> 0 = ... 1757 { 1758 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1759 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1760 },{ 1761 // Nothing. 1762 }, 1763 }, 1764 { // ... >>> 0 = ... 1765 { 1766 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1767 new SimpleInstruction(InstructionConstants.OP_LUSHR), 1768 },{ 1769 // Nothing. 1770 }, 1771 }, 1772 { // ... & -1 = ... 1773 { 1774 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 1775 new SimpleInstruction(InstructionConstants.OP_IAND), 1776 },{ 1777 // Nothing. 1778 }, 1779 }, 1780 { // ... & 0 = 0 1781 { 1782 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1783 new SimpleInstruction(InstructionConstants.OP_IAND), 1784 },{ 1785 new SimpleInstruction(InstructionConstants.OP_POP), 1786 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1787 }, 1788 }, 1789 { // ... & -1L = ... 1790 { 1791 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), 1792 new SimpleInstruction(InstructionConstants.OP_LAND), 1793 },{ 1794 // Nothing. 1795 }, 1796 }, 1797 { // ... & 0L = 0L 1798 { 1799 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 1800 new SimpleInstruction(InstructionConstants.OP_LAND), 1801 },{ 1802 new SimpleInstruction(InstructionConstants.OP_POP2), 1803 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 1804 }, 1805 }, 1806 { // ... | -1 = -1 1807 { 1808 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 1809 new SimpleInstruction(InstructionConstants.OP_IOR), 1810 },{ 1811 new SimpleInstruction(InstructionConstants.OP_POP), 1812 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 1813 }, 1814 }, 1815 { // ... | 0 = ... 1816 { 1817 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1818 new SimpleInstruction(InstructionConstants.OP_IOR), 1819 },{ 1820 // Nothing. 1821 }, 1822 }, 1823 { // ... | -1L = -1L 1824 { 1825 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), 1826 new SimpleInstruction(InstructionConstants.OP_LAND), 1827 },{ 1828 new SimpleInstruction(InstructionConstants.OP_POP2), 1829 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1), 1830 }, 1831 }, 1832 { // ... | 0L = ... 1833 { 1834 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 1835 new SimpleInstruction(InstructionConstants.OP_LOR), 1836 },{ 1837 // Nothing. 1838 }, 1839 }, 1840 { // ... ^ 0 = ... 1841 { 1842 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 1843 new SimpleInstruction(InstructionConstants.OP_IXOR), 1844 },{ 1845 // Nothing. 1846 }, 1847 }, 1848 { // ... ^ 0L = ... 1849 { 1850 new SimpleInstruction(InstructionConstants.OP_LCONST_0), 1851 new SimpleInstruction(InstructionConstants.OP_LXOR), 1852 },{ 1853 // Nothing. 1854 }, 1855 }, 1856 { // (... & 0x0000ff00) >> 8 = (... >> 8) & 0xff 1857 { 1858 new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ff00), 1859 new SimpleInstruction(InstructionConstants.OP_IAND), 1860 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1861 new SimpleInstruction(InstructionConstants.OP_ISHR), 1862 },{ 1863 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1864 new SimpleInstruction(InstructionConstants.OP_ISHR), 1865 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1866 new SimpleInstruction(InstructionConstants.OP_IAND), 1867 }, 1868 }, 1869 { // (... & 0x0000ff00) >>> 8 = (... >>> 8) & 0xff 1870 { 1871 new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ff00), 1872 new SimpleInstruction(InstructionConstants.OP_IAND), 1873 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1874 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1875 },{ 1876 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8), 1877 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1878 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1879 new SimpleInstruction(InstructionConstants.OP_IAND), 1880 }, 1881 }, 1882 { // (... & 0x00ff0000) >> 16 = (... >> 16) & 0xff 1883 { 1884 new ConstantInstruction(InstructionConstants.OP_LDC, I_0x00ff0000), 1885 new SimpleInstruction(InstructionConstants.OP_IAND), 1886 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1887 new SimpleInstruction(InstructionConstants.OP_ISHR), 1888 },{ 1889 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1890 new SimpleInstruction(InstructionConstants.OP_ISHR), 1891 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1892 new SimpleInstruction(InstructionConstants.OP_IAND), 1893 }, 1894 }, 1895 { // (... & 0x00ff0000) >>> 16 = (... >>> 16) & 0xff 1896 { 1897 new ConstantInstruction(InstructionConstants.OP_LDC, I_0x00ff0000), 1898 new SimpleInstruction(InstructionConstants.OP_IAND), 1899 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1900 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1901 },{ 1902 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1903 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1904 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1905 new SimpleInstruction(InstructionConstants.OP_IAND), 1906 }, 1907 }, 1908 { // (... & 0xff000000) >> 24 = ... >> 24 1909 { 1910 new ConstantInstruction(InstructionConstants.OP_LDC, I_0xff000000), 1911 new SimpleInstruction(InstructionConstants.OP_IAND), 1912 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1913 new SimpleInstruction(InstructionConstants.OP_ISHR), 1914 },{ 1915 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1916 new SimpleInstruction(InstructionConstants.OP_ISHR), 1917 }, 1918 }, 1919 { // (... & 0xffff0000) >> 16 = ... >> 16 1920 { 1921 new ConstantInstruction(InstructionConstants.OP_LDC, I_0xffff0000), 1922 new SimpleInstruction(InstructionConstants.OP_IAND), 1923 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1924 new SimpleInstruction(InstructionConstants.OP_ISHR), 1925 },{ 1926 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1927 new SimpleInstruction(InstructionConstants.OP_ISHR), 1928 }, 1929 }, 1930 { // (... & 0xffff0000) >>> 16 = ... >>> 16 1931 { 1932 new ConstantInstruction(InstructionConstants.OP_LDC, I_0xffff0000), 1933 new SimpleInstruction(InstructionConstants.OP_IAND), 1934 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1935 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1936 },{ 1937 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 1938 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1939 }, 1940 }, 1941 { // (... >> 24) & 0xff = ... >>> 24 1942 { 1943 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1944 new SimpleInstruction(InstructionConstants.OP_ISHR), 1945 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1946 new SimpleInstruction(InstructionConstants.OP_IAND), 1947 },{ 1948 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1949 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1950 }, 1951 }, 1952 { // (... >>> 24) & 0xff = ... >>> 24 1953 { 1954 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1955 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1956 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1957 new SimpleInstruction(InstructionConstants.OP_IAND), 1958 },{ 1959 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1960 new SimpleInstruction(InstructionConstants.OP_IUSHR), 1961 }, 1962 }, 1963 { // (byte)(... & 0x000000ff) = (byte)... 1964 { 1965 new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff), 1966 new SimpleInstruction(InstructionConstants.OP_IAND), 1967 new SimpleInstruction(InstructionConstants.OP_I2B), 1968 },{ 1969 new SimpleInstruction(InstructionConstants.OP_I2B), 1970 }, 1971 }, 1972 { // (char)(... & 0x0000ffff) = (char)... 1973 { 1974 new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ffff), 1975 new SimpleInstruction(InstructionConstants.OP_IAND), 1976 new SimpleInstruction(InstructionConstants.OP_I2C), 1977 },{ 1978 new SimpleInstruction(InstructionConstants.OP_I2C), 1979 }, 1980 }, 1981 { // (short)(... & 0x0000ffff) = (short)... 1982 { 1983 new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ffff), 1984 new SimpleInstruction(InstructionConstants.OP_IAND), 1985 new SimpleInstruction(InstructionConstants.OP_I2S), 1986 },{ 1987 new SimpleInstruction(InstructionConstants.OP_I2S), 1988 }, 1989 }, 1990 { // (byte)(... >> 24) = ... >> 24 1991 { 1992 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1993 new SimpleInstruction(InstructionConstants.OP_ISHR), 1994 new SimpleInstruction(InstructionConstants.OP_I2B), 1995 },{ 1996 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 1997 new SimpleInstruction(InstructionConstants.OP_ISHR), 1998 }, 1999 }, 2000 { // (byte)(... >>> 24) = ... >> 24 2001 { 2002 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 2003 new SimpleInstruction(InstructionConstants.OP_IUSHR), 2004 new SimpleInstruction(InstructionConstants.OP_I2B), 2005 },{ 2006 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 2007 new SimpleInstruction(InstructionConstants.OP_ISHR), 2008 }, 2009 }, 2010 { // (char)(... >> 16) = ... >>> 16 2011 { 2012 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2013 new SimpleInstruction(InstructionConstants.OP_ISHR), 2014 new SimpleInstruction(InstructionConstants.OP_I2C), 2015 },{ 2016 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2017 new SimpleInstruction(InstructionConstants.OP_IUSHR), 2018 }, 2019 }, 2020 { // (char)(... >>> 16) = ... >>> 16 2021 { 2022 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2023 new SimpleInstruction(InstructionConstants.OP_IUSHR), 2024 new SimpleInstruction(InstructionConstants.OP_I2C), 2025 },{ 2026 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2027 new SimpleInstruction(InstructionConstants.OP_IUSHR), 2028 }, 2029 }, 2030 { // (short)(... >> 16) = ... >> 16 2031 { 2032 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2033 new SimpleInstruction(InstructionConstants.OP_ISHR), 2034 new SimpleInstruction(InstructionConstants.OP_I2S), 2035 },{ 2036 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2037 new SimpleInstruction(InstructionConstants.OP_ISHR), 2038 }, 2039 }, 2040 { // (short)(... >>> 16) = ... >> 16 2041 { 2042 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2043 new SimpleInstruction(InstructionConstants.OP_IUSHR), 2044 new SimpleInstruction(InstructionConstants.OP_I2S), 2045 },{ 2046 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2047 new SimpleInstruction(InstructionConstants.OP_ISHR), 2048 }, 2049 }, 2050 { // ... << 24 >> 24 = (byte)... 2051 { 2052 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 2053 new SimpleInstruction(InstructionConstants.OP_ISHL), 2054 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24), 2055 new SimpleInstruction(InstructionConstants.OP_ISHR), 2056 },{ 2057 new SimpleInstruction(InstructionConstants.OP_I2B), 2058 }, 2059 }, 2060 { // ... << 16 >>> 16 = (char)... 2061 { 2062 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2063 new SimpleInstruction(InstructionConstants.OP_ISHL), 2064 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2065 new SimpleInstruction(InstructionConstants.OP_IUSHR), 2066 },{ 2067 new SimpleInstruction(InstructionConstants.OP_I2C), 2068 }, 2069 }, 2070 { // ... << 16 >> 16 = (short)... 2071 { 2072 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2073 new SimpleInstruction(InstructionConstants.OP_ISHL), 2074 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16), 2075 new SimpleInstruction(InstructionConstants.OP_ISHR), 2076 },{ 2077 new SimpleInstruction(InstructionConstants.OP_I2S), 2078 }, 2079 }, 2080 { // ... << 32 >> 32 = (long)(int)... 2081 { 2082 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 2083 new SimpleInstruction(InstructionConstants.OP_LSHL), 2084 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 2085 new SimpleInstruction(InstructionConstants.OP_LSHR), 2086 },{ 2087 new SimpleInstruction(InstructionConstants.OP_L2I), 2088 new SimpleInstruction(InstructionConstants.OP_I2L), 2089 }, 2090 }, 2091 { // (int)(... & 0x00000000ffffffffL) = (int)... 2092 { 2093 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0x00000000ffffffff), 2094 new SimpleInstruction(InstructionConstants.OP_LAND), 2095 new SimpleInstruction(InstructionConstants.OP_L2I), 2096 },{ 2097 new SimpleInstruction(InstructionConstants.OP_L2I), 2098 }, 2099 }, 2100 { // (... & 0xffffffff00000000L) >> 32 = ... >> 32 2101 { 2102 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0xffffffff00000000), 2103 new SimpleInstruction(InstructionConstants.OP_LAND), 2104 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 2105 new SimpleInstruction(InstructionConstants.OP_LSHR), 2106 },{ 2107 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 2108 new SimpleInstruction(InstructionConstants.OP_LSHR), 2109 }, 2110 }, 2111 { // (... & 0xffffffff00000000L) >>> 32 = ... >>> 32 2112 { 2113 new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0xffffffff00000000), 2114 new SimpleInstruction(InstructionConstants.OP_LAND), 2115 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 2116 new SimpleInstruction(InstructionConstants.OP_LUSHR), 2117 },{ 2118 new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32), 2119 new SimpleInstruction(InstructionConstants.OP_LUSHR), 2120 }, 2121 }, 2122 { // ... += 0 = nothing 2123 { 2124 new VariableInstruction(InstructionConstants.OP_IINC, X, 0), 2125 },{ 2126 // Nothing. 2127 }, 2128 }, 2129 }; 2130 2131 public static final Instruction[][][] FIELD = new Instruction[][][] 2132 { 2133 { // getfield/putfield = nothing 2134 { 2135 new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2136 new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2137 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y), 2138 new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), 2139 },{ 2140 // Nothing. 2141 }, 2142 }, 2143// { // putfield_L/putfield_L = pop2_x1/putfield 2144// { 2145// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2146// // ... 2147// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), 2148// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2149// // ... 2150// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), 2151// },{ 2152// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2153// // ... 2154// new SimpleInstruction(InstructionConstants.OP_POP2), 2155// // ... 2156// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), 2157// }, 2158// }, 2159// { // putfield_D/putfield_D = pop2_x1/putfield 2160// { 2161// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2162// // ... 2163// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), 2164// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2165// // ... 2166// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), 2167// },{ 2168// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2169// // ... 2170// new SimpleInstruction(InstructionConstants.OP_POP2), 2171// // ... 2172// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), 2173// }, 2174// }, 2175// { // putfield/putfield = pop_x1/putfield 2176// { 2177// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2178// // ... 2179// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), 2180// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2181// // ... 2182// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), 2183// },{ 2184// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2185// // ... 2186// new SimpleInstruction(InstructionConstants.OP_POP), 2187// // ... 2188// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), 2189// }, 2190// }, 2191// { // putfield_L/getfield_L = dup2_x1/putfield 2192// { 2193// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2194// // ... 2195// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), 2196// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2197// new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_L), 2198// },{ 2199// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2200// // ... 2201// new SimpleInstruction(InstructionConstants.OP_DUP2_X1), 2202// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L), 2203// }, 2204// }, 2205// { // putfield_D/getfield_D = dup2_x1/putfield 2206// { 2207// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2208// // ... 2209// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), 2210// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2211// new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_D), 2212// },{ 2213// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2214// // ... 2215// new SimpleInstruction(InstructionConstants.OP_DUP2_X1), 2216// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D), 2217// }, 2218// }, 2219// { // putfield/getfield = dup_x1/putfield 2220// { 2221// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2222// // ... 2223// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), 2224// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2225// new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y), 2226// },{ 2227// new VariableInstruction(InstructionConstants.OP_ALOAD, X), 2228// // ... 2229// new SimpleInstruction(InstructionConstants.OP_DUP_X1), 2230// new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y), 2231// }, 2232// }, 2233 { // getstatic/putstatic = nothing 2234 { 2235 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, X), 2236 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), 2237 },{ 2238 // Nothing. 2239 }, 2240 }, 2241 { // putstatic_L/putstatic_L = pop2/putstatic 2242 { 2243 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), 2244 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), 2245 },{ 2246 new SimpleInstruction(InstructionConstants.OP_POP2), 2247 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), 2248 }, 2249 }, 2250 { // putstatic_D/putstatic_D = pop2/putstatic 2251 { 2252 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), 2253 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), 2254 },{ 2255 new SimpleInstruction(InstructionConstants.OP_POP2), 2256 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), 2257 }, 2258 }, 2259 { // putstatic/putstatic = pop/putstatic 2260 { 2261 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), 2262 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), 2263 },{ 2264 new SimpleInstruction(InstructionConstants.OP_POP), 2265 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), 2266 }, 2267 }, 2268 { // putstatic_L/getstatic_L = dup2/putstatic 2269 { 2270 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), 2271 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, FIELD_L), 2272 },{ 2273 new SimpleInstruction(InstructionConstants.OP_DUP2), 2274 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L), 2275 }, 2276 }, 2277 { // putstatic_D/getstatic_D = dup2/putstatic 2278 { 2279 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), 2280 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, FIELD_D), 2281 },{ 2282 new SimpleInstruction(InstructionConstants.OP_DUP2), 2283 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D), 2284 }, 2285 }, 2286 { // putstatic/getstatic = dup/putstatic 2287 { 2288 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), 2289 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, X), 2290 },{ 2291 new SimpleInstruction(InstructionConstants.OP_DUP), 2292 new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X), 2293 }, 2294 }, 2295 }; 2296 2297 public static final Instruction[][][] CAST = new Instruction[][][] 2298 { 2299 { // (byte)(byte)... = (byte)... 2300 { 2301 new SimpleInstruction(InstructionConstants.OP_I2B), 2302 new SimpleInstruction(InstructionConstants.OP_I2B), 2303 },{ 2304 new SimpleInstruction(InstructionConstants.OP_I2B), 2305 }, 2306 }, 2307 { // (byte)(char)... = (byte)... 2308 { 2309 new SimpleInstruction(InstructionConstants.OP_I2C), 2310 new SimpleInstruction(InstructionConstants.OP_I2B), 2311 },{ 2312 new SimpleInstruction(InstructionConstants.OP_I2B), 2313 }, 2314 }, 2315 { // (byte)(short)... = (byte)... 2316 { 2317 new SimpleInstruction(InstructionConstants.OP_I2S), 2318 new SimpleInstruction(InstructionConstants.OP_I2B), 2319 },{ 2320 new SimpleInstruction(InstructionConstants.OP_I2B), 2321 }, 2322 }, 2323 { // (char)(char)... = (char)... 2324 { 2325 new SimpleInstruction(InstructionConstants.OP_I2C), 2326 new SimpleInstruction(InstructionConstants.OP_I2C), 2327 },{ 2328 new SimpleInstruction(InstructionConstants.OP_I2C), 2329 }, 2330 }, 2331 { // (char)(short)... = (char)... 2332 { 2333 new SimpleInstruction(InstructionConstants.OP_I2S), 2334 new SimpleInstruction(InstructionConstants.OP_I2C), 2335 },{ 2336 new SimpleInstruction(InstructionConstants.OP_I2C), 2337 }, 2338 }, 2339 { // (short)(byte)... = (byte)... 2340 { 2341 new SimpleInstruction(InstructionConstants.OP_I2B), 2342 new SimpleInstruction(InstructionConstants.OP_I2S), 2343 },{ 2344 new SimpleInstruction(InstructionConstants.OP_I2B), 2345 }, 2346 }, 2347 { // (short)(char)... = (short)... 2348 { 2349 new SimpleInstruction(InstructionConstants.OP_I2C), 2350 new SimpleInstruction(InstructionConstants.OP_I2S), 2351 },{ 2352 new SimpleInstruction(InstructionConstants.OP_I2S), 2353 }, 2354 }, 2355 { // (short)(short)... = (short)... 2356 { 2357 new SimpleInstruction(InstructionConstants.OP_I2S), 2358 new SimpleInstruction(InstructionConstants.OP_I2S), 2359 },{ 2360 new SimpleInstruction(InstructionConstants.OP_I2S), 2361 }, 2362 }, 2363 { // (int)(long)... = ... 2364 { 2365 new SimpleInstruction(InstructionConstants.OP_I2L), 2366 new SimpleInstruction(InstructionConstants.OP_L2I), 2367 },{ 2368 // Nothing. 2369 }, 2370 }, 2371 { // (X)(X)... = (X)... 2372 { 2373 new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X), 2374 new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X), 2375 },{ 2376 new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X), 2377 }, 2378 }, 2379 // Not handled correctly in all cases by VMs prior to Java 6... 2380// { // (byte)bytes[...] = bytes[...] 2381// { 2382// new SimpleInstruction(InstructionConstants.OP_BALOAD), 2383// new SimpleInstruction(InstructionConstants.OP_I2B), 2384// },{ 2385// new SimpleInstruction(InstructionConstants.OP_BALOAD), 2386// }, 2387// }, 2388// { // (short)bytes[...] = bytes[...] 2389// { 2390// new SimpleInstruction(InstructionConstants.OP_BALOAD), 2391// new SimpleInstruction(InstructionConstants.OP_I2S), 2392// },{ 2393// new SimpleInstruction(InstructionConstants.OP_BALOAD), 2394// }, 2395// }, 2396// { // (char)chars[...] = chars[...] 2397// { 2398// new SimpleInstruction(InstructionConstants.OP_CALOAD), 2399// new SimpleInstruction(InstructionConstants.OP_I2C), 2400// },{ 2401// new SimpleInstruction(InstructionConstants.OP_CALOAD), 2402// }, 2403// }, 2404// { // (short)shorts[...] = shorts[...] 2405// { 2406// new SimpleInstruction(InstructionConstants.OP_SALOAD), 2407// new SimpleInstruction(InstructionConstants.OP_I2S), 2408// },{ 2409// new SimpleInstruction(InstructionConstants.OP_SALOAD), 2410// }, 2411// }, 2412// { // bytes[...] = (byte)... = bytes[...] = ... 2413// { 2414// new SimpleInstruction(InstructionConstants.OP_I2B), 2415// new SimpleInstruction(InstructionConstants.OP_BASTORE), 2416// },{ 2417// new SimpleInstruction(InstructionConstants.OP_BASTORE), 2418// }, 2419// }, 2420// { // chars[...] = (char)... = chars[...] = ... 2421// { 2422// new SimpleInstruction(InstructionConstants.OP_I2C), 2423// new SimpleInstruction(InstructionConstants.OP_CASTORE), 2424// },{ 2425// new SimpleInstruction(InstructionConstants.OP_CASTORE), 2426// }, 2427// }, 2428// { // shorts[...] = (short)... = shorts[...] = ... 2429// { 2430// new SimpleInstruction(InstructionConstants.OP_I2S), 2431// new SimpleInstruction(InstructionConstants.OP_SASTORE), 2432// },{ 2433// new SimpleInstruction(InstructionConstants.OP_SASTORE), 2434// }, 2435// }, 2436 }; 2437 2438 public static final Instruction[][][] BRANCH = new Instruction[][][] 2439 { 2440 { // goto +3 = nothing 2441 { 2442 new BranchInstruction(InstructionConstants.OP_GOTO, 3), 2443 },{ 2444 // Nothing. 2445 }, 2446 }, 2447 { // ifeq +3 = pop 2448 { 2449 new BranchInstruction(InstructionConstants.OP_IFEQ, 3), 2450 },{ 2451 new SimpleInstruction(InstructionConstants.OP_POP), 2452 }, 2453 }, 2454 { // ifne +3 = pop 2455 { 2456 new BranchInstruction(InstructionConstants.OP_IFNE, 3), 2457 },{ 2458 new SimpleInstruction(InstructionConstants.OP_POP), 2459 }, 2460 }, 2461 { // iflt +3 = pop 2462 { 2463 new BranchInstruction(InstructionConstants.OP_IFLT, 3), 2464 },{ 2465 new SimpleInstruction(InstructionConstants.OP_POP), 2466 }, 2467 }, 2468 { // ifge +3 = pop 2469 { 2470 new BranchInstruction(InstructionConstants.OP_IFGE, 3), 2471 },{ 2472 new SimpleInstruction(InstructionConstants.OP_POP), 2473 }, 2474 }, 2475 { // ifgt +3 = pop 2476 { 2477 new BranchInstruction(InstructionConstants.OP_IFGT, 3), 2478 },{ 2479 new SimpleInstruction(InstructionConstants.OP_POP), 2480 }, 2481 }, 2482 { // ifle +3 = pop 2483 { 2484 new BranchInstruction(InstructionConstants.OP_IFLE, 3), 2485 },{ 2486 new SimpleInstruction(InstructionConstants.OP_POP), 2487 }, 2488 }, 2489 { // ificmpeq +3 = pop2 2490 { 2491 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, 3), 2492 },{ 2493 new SimpleInstruction(InstructionConstants.OP_POP2), 2494 }, 2495 }, 2496 { // ificmpne +3 = pop2 2497 { 2498 new BranchInstruction(InstructionConstants.OP_IFICMPNE, 3), 2499 },{ 2500 new SimpleInstruction(InstructionConstants.OP_POP2), 2501 }, 2502 }, 2503 { // ificmplt +3 = pop2 2504 { 2505 new BranchInstruction(InstructionConstants.OP_IFICMPLT, 3), 2506 },{ 2507 new SimpleInstruction(InstructionConstants.OP_POP2), 2508 }, 2509 }, 2510 { // ificmpge +3 = pop2 2511 { 2512 new BranchInstruction(InstructionConstants.OP_IFICMPGE, 3), 2513 },{ 2514 new SimpleInstruction(InstructionConstants.OP_POP2), 2515 }, 2516 }, 2517 { // ificmpgt +3 = pop2 2518 { 2519 new BranchInstruction(InstructionConstants.OP_IFICMPGT, 3), 2520 },{ 2521 new SimpleInstruction(InstructionConstants.OP_POP2), 2522 }, 2523 }, 2524 { // ificmple +3 = pop2 2525 { 2526 new BranchInstruction(InstructionConstants.OP_IFICMPLE, 3), 2527 },{ 2528 new SimpleInstruction(InstructionConstants.OP_POP2), 2529 }, 2530 }, 2531 { // ifacmpeq +3 = pop2 2532 { 2533 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, 3), 2534 },{ 2535 new SimpleInstruction(InstructionConstants.OP_POP2), 2536 }, 2537 }, 2538 { // ifacmpne +3 = pop2 2539 { 2540 new BranchInstruction(InstructionConstants.OP_IFACMPNE, 3), 2541 },{ 2542 new SimpleInstruction(InstructionConstants.OP_POP2), 2543 }, 2544 }, 2545 { // ifnull +3 = pop 2546 { 2547 new BranchInstruction(InstructionConstants.OP_IFNULL, 3), 2548 },{ 2549 new SimpleInstruction(InstructionConstants.OP_POP), 2550 }, 2551 }, 2552 { // ifnonnull +3 = pop 2553 { 2554 new BranchInstruction(InstructionConstants.OP_IFNONNULL, 3), 2555 },{ 2556 new SimpleInstruction(InstructionConstants.OP_POP), 2557 }, 2558 }, 2559 { // if (... == 0) = ifeq 2560 { 2561 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2562 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), 2563 },{ 2564 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 2565 }, 2566 }, 2567 { // if (0 == i) = iload/ifeq 2568 { 2569 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2570 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2571 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), 2572 },{ 2573 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2574 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 2575 }, 2576 }, 2577 { // if (0 == i) = getstatic/ifeq 2578 { 2579 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2580 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2581 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), 2582 },{ 2583 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2584 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 2585 }, 2586 }, 2587 { // if (0 == i) = getfield/ifeq 2588 { 2589 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2590 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2591 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2592 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), 2593 },{ 2594 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2595 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2596 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 2597 }, 2598 }, 2599 { // if (... != 0) = ifne 2600 { 2601 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2602 new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), 2603 },{ 2604 new BranchInstruction(InstructionConstants.OP_IFNE, X), 2605 }, 2606 }, 2607 { // if (0 != i) = iload/ifeq 2608 { 2609 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2610 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2611 new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), 2612 },{ 2613 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2614 new BranchInstruction(InstructionConstants.OP_IFNE, X), 2615 }, 2616 }, 2617 { // if (0 != i) = getstatic/ifeq 2618 { 2619 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2620 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2621 new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), 2622 },{ 2623 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2624 new BranchInstruction(InstructionConstants.OP_IFNE, X), 2625 }, 2626 }, 2627 { // if (0 != i) = getfield/ifeq 2628 { 2629 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2630 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2631 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2632 new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), 2633 },{ 2634 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2635 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2636 new BranchInstruction(InstructionConstants.OP_IFNE, X), 2637 }, 2638 }, 2639 { // if (... < 0) = iflt 2640 { 2641 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2642 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2643 },{ 2644 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2645 }, 2646 }, 2647 { // if (... < 1) = ifle 2648 { 2649 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2650 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2651 },{ 2652 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2653 }, 2654 }, 2655 { // if (0 > i) = iload/iflt 2656 { 2657 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2658 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2659 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2660 },{ 2661 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2662 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2663 }, 2664 }, 2665 { // if (1 > i) = iload/ifle 2666 { 2667 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2668 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2669 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2670 },{ 2671 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2672 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2673 }, 2674 }, 2675 { // if (0 > i) = getstatic/iflt 2676 { 2677 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2678 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2679 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2680 },{ 2681 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2682 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2683 }, 2684 }, 2685 { // if (1 > i) = getstatic/ifle 2686 { 2687 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2688 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2689 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2690 },{ 2691 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2692 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2693 }, 2694 }, 2695 { // if (0 > i) = getfield/iflt 2696 { 2697 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2698 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2699 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2700 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2701 },{ 2702 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2703 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2704 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2705 }, 2706 }, 2707 { // if (1 > i) = getfield/ifle 2708 { 2709 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2710 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2711 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2712 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2713 },{ 2714 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2715 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2716 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2717 }, 2718 }, 2719 { // if (... >= 0) = ifge 2720 { 2721 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2722 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2723 },{ 2724 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2725 }, 2726 }, 2727 { // if (... >= 1) = ifgt 2728 { 2729 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2730 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2731 },{ 2732 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2733 }, 2734 }, 2735 { // if (0 <= i) = iload/ifge 2736 { 2737 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2738 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2739 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2740 },{ 2741 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2742 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2743 }, 2744 }, 2745 { // if (1 <= i) = iload/ifgt 2746 { 2747 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2748 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2749 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2750 },{ 2751 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2752 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2753 }, 2754 }, 2755 { // if (0 <= i) = getstatic/ifge 2756 { 2757 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2758 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2759 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2760 },{ 2761 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2762 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2763 }, 2764 }, 2765 { // if (1 <= i) = getstatic/ifgt 2766 { 2767 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2768 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2769 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2770 },{ 2771 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2772 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2773 }, 2774 }, 2775 { // if (0 <= i) = getfield/ifge 2776 { 2777 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2778 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2779 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2780 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2781 },{ 2782 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2783 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2784 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2785 }, 2786 }, 2787 { // if (1 <= i) = getfield/ifgt 2788 { 2789 new SimpleInstruction(InstructionConstants.OP_ICONST_1), 2790 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2791 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2792 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2793 },{ 2794 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2795 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2796 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2797 }, 2798 }, 2799 { // if (... > 0) = ifgt 2800 { 2801 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2802 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2803 },{ 2804 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2805 }, 2806 }, 2807 { // if (... > -1) = ifge 2808 { 2809 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2810 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 2811 },{ 2812 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2813 }, 2814 }, 2815 { // if (0 < i) = iload/ifgt 2816 { 2817 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2818 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2819 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2820 },{ 2821 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2822 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2823 }, 2824 }, 2825 { // if (-1 < i) = iload/ifge 2826 { 2827 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2828 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2829 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2830 },{ 2831 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2832 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2833 }, 2834 }, 2835 { // if (0 < i) = getstatic/ifgt 2836 { 2837 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2838 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2839 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2840 },{ 2841 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2842 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2843 }, 2844 }, 2845 { // if (-1 < i) = getstatic/ifge 2846 { 2847 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2848 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2849 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2850 },{ 2851 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2852 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2853 }, 2854 }, 2855 { // if (0 < i) = getfield/ifgt 2856 { 2857 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2858 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2859 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2860 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2861 },{ 2862 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2863 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2864 new BranchInstruction(InstructionConstants.OP_IFGT, X), 2865 }, 2866 }, 2867 { // if (-1 < i) = getfield/ifge 2868 { 2869 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2870 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2871 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2872 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 2873 },{ 2874 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2875 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2876 new BranchInstruction(InstructionConstants.OP_IFGE, X), 2877 }, 2878 }, 2879 { // if (... <= 0) = ifle 2880 { 2881 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2882 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2883 },{ 2884 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2885 }, 2886 }, 2887 { // if (... <= -1) = iflt 2888 { 2889 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2890 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 2891 },{ 2892 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2893 }, 2894 }, 2895 { // if (0 >= i) = iload/ifle 2896 { 2897 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2898 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2899 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2900 },{ 2901 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2902 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2903 }, 2904 }, 2905 { // if (-1 >= i) = iload/iflt 2906 { 2907 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2908 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2909 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2910 },{ 2911 new VariableInstruction(InstructionConstants.OP_ILOAD, Y), 2912 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2913 }, 2914 }, 2915 { // if (0 >= i) = getstatic/ifle 2916 { 2917 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2918 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2919 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2920 },{ 2921 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2922 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2923 }, 2924 }, 2925 { // if (-1 >= i) = getstatic/iflt 2926 { 2927 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2928 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2929 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2930 },{ 2931 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2932 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2933 }, 2934 }, 2935 { // if (0 >= i) = getfield/ifle 2936 { 2937 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 2938 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2939 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2940 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2941 },{ 2942 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2943 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2944 new BranchInstruction(InstructionConstants.OP_IFLE, X), 2945 }, 2946 }, 2947 { // if (-1 >= i) = getfield/iflt 2948 { 2949 new SimpleInstruction(InstructionConstants.OP_ICONST_M1), 2950 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2951 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2952 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 2953 },{ 2954 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2955 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2956 new BranchInstruction(InstructionConstants.OP_IFLT, X), 2957 }, 2958 }, 2959 { // if (... == null) = ifnull 2960 { 2961 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 2962 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), 2963 },{ 2964 new BranchInstruction(InstructionConstants.OP_IFNULL, X), 2965 }, 2966 }, 2967 { // if (null == a) = aload/ifnull 2968 { 2969 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 2970 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2971 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), 2972 },{ 2973 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2974 new BranchInstruction(InstructionConstants.OP_IFNULL, X), 2975 }, 2976 }, 2977 { // if (null == a) = getstatic/ifnull 2978 { 2979 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 2980 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2981 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), 2982 },{ 2983 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 2984 new BranchInstruction(InstructionConstants.OP_IFNULL, X), 2985 }, 2986 }, 2987 { // if (null == a) = getfield/ifnull 2988 { 2989 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 2990 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2991 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2992 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), 2993 },{ 2994 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 2995 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 2996 new BranchInstruction(InstructionConstants.OP_IFNULL, X), 2997 }, 2998 }, 2999 { // if (... != null) = ifnonnull 3000 { 3001 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 3002 new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), 3003 },{ 3004 new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), 3005 }, 3006 }, 3007 { // if (null != a) = aload/ifnonnull 3008 { 3009 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 3010 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 3011 new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), 3012 },{ 3013 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 3014 new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), 3015 }, 3016 }, 3017 { // if (null != a) = getstatic/ifnonnull 3018 { 3019 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 3020 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 3021 new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), 3022 },{ 3023 new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y), 3024 new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), 3025 }, 3026 }, 3027 { // if (null != a) = getfield/ifnonnull 3028 { 3029 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 3030 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 3031 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 3032 new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), 3033 },{ 3034 new VariableInstruction(InstructionConstants.OP_ALOAD, Y), 3035 new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z), 3036 new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), 3037 }, 3038 }, 3039 { // iconst_0/ifeq = goto 3040 { 3041 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 3042 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 3043 },{ 3044 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3045 }, 3046 }, 3047 { // iconst/ifeq = nothing 3048 { 3049 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 3050 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 3051 },{ 3052 // Nothing. 3053 }, 3054 }, 3055 { // bipush/ifeq = nothing 3056 { 3057 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 3058 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 3059 },{ 3060 // Nothing. 3061 }, 3062 }, 3063 { // sipush/ifeq = nothing 3064 { 3065 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 3066 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 3067 },{ 3068 // Nothing. 3069 }, 3070 }, 3071 { // iconst_0/ifne = nothing 3072 { 3073 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 3074 new BranchInstruction(InstructionConstants.OP_IFNE, X), 3075 },{ 3076 // Nothing. 3077 }, 3078 }, 3079 { // iconst/ifne = goto 3080 { 3081 new SimpleInstruction(InstructionConstants.OP_ICONST_0, A), 3082 new BranchInstruction(InstructionConstants.OP_IFNE, X), 3083 },{ 3084 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3085 }, 3086 }, 3087 { // bipush/ifne = goto 3088 { 3089 new SimpleInstruction(InstructionConstants.OP_BIPUSH, A), 3090 new BranchInstruction(InstructionConstants.OP_IFNE, X), 3091 },{ 3092 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3093 }, 3094 }, 3095 { // sipush/ifne = goto 3096 { 3097 new SimpleInstruction(InstructionConstants.OP_SIPUSH, A), 3098 new BranchInstruction(InstructionConstants.OP_IFNE, X), 3099 },{ 3100 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3101 }, 3102 }, 3103 { // iconst_0/iflt = nothing 3104 { 3105 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 3106 new BranchInstruction(InstructionConstants.OP_IFLT, X), 3107 },{ 3108 // Nothing. 3109 }, 3110 }, 3111 { // iconst_0/ifge = goto 3112 { 3113 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 3114 new BranchInstruction(InstructionConstants.OP_IFGE, X), 3115 },{ 3116 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3117 }, 3118 }, 3119 { // iconst_0/ifgt = nothing 3120 { 3121 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 3122 new BranchInstruction(InstructionConstants.OP_IFGT, X), 3123 },{ 3124 // Nothing. 3125 }, 3126 }, 3127 { // iconst_0/ifle = goto 3128 { 3129 new SimpleInstruction(InstructionConstants.OP_ICONST_0), 3130 new BranchInstruction(InstructionConstants.OP_IFLE, X), 3131 },{ 3132 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3133 }, 3134 }, 3135 { // aconst_null/ifnull = goto 3136 { 3137 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 3138 new BranchInstruction(InstructionConstants.OP_IFNULL, X), 3139 },{ 3140 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3141 }, 3142 }, 3143 { // aconst_null/ifnonnul = nothing 3144 { 3145 new SimpleInstruction(InstructionConstants.OP_ACONST_NULL), 3146 new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), 3147 },{ 3148 // Nothing. 3149 }, 3150 }, 3151 { // ifeq/goto = ifne 3152 { 3153 new BranchInstruction(InstructionConstants.OP_IFEQ, 6), 3154 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3155 },{ 3156 new BranchInstruction(InstructionConstants.OP_IFNE, X), 3157 }, 3158 }, 3159 { // ifne/goto = ifeq 3160 { 3161 new BranchInstruction(InstructionConstants.OP_IFNE, 6), 3162 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3163 },{ 3164 new BranchInstruction(InstructionConstants.OP_IFEQ, X), 3165 }, 3166 }, 3167 { // iflt/goto = ifge 3168 { 3169 new BranchInstruction(InstructionConstants.OP_IFLT, 6), 3170 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3171 },{ 3172 new BranchInstruction(InstructionConstants.OP_IFGE, X), 3173 }, 3174 }, 3175 { // ifge/goto = iflt 3176 { 3177 new BranchInstruction(InstructionConstants.OP_IFGE, 6), 3178 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3179 },{ 3180 new BranchInstruction(InstructionConstants.OP_IFLT, X), 3181 }, 3182 }, 3183 { // ifgt/goto = ifle 3184 { 3185 new BranchInstruction(InstructionConstants.OP_IFGT, 6), 3186 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3187 },{ 3188 new BranchInstruction(InstructionConstants.OP_IFLE, X), 3189 }, 3190 }, 3191 { // ifle/goto = ifgt 3192 { 3193 new BranchInstruction(InstructionConstants.OP_IFLE, 6), 3194 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3195 },{ 3196 new BranchInstruction(InstructionConstants.OP_IFGT, X), 3197 }, 3198 }, 3199 { // ificmpeq/goto = ificmpne 3200 { 3201 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, 6), 3202 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3203 },{ 3204 new BranchInstruction(InstructionConstants.OP_IFICMPNE, X), 3205 }, 3206 }, 3207 { // ificmpne/goto = ificmpeq 3208 { 3209 new BranchInstruction(InstructionConstants.OP_IFICMPNE, 6), 3210 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3211 },{ 3212 new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X), 3213 }, 3214 }, 3215 { // ificmplt/goto = ificmpge 3216 { 3217 new BranchInstruction(InstructionConstants.OP_IFICMPLT, 6), 3218 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3219 },{ 3220 new BranchInstruction(InstructionConstants.OP_IFICMPGE, X), 3221 }, 3222 }, 3223 { // ificmpge/goto = ificmplt 3224 { 3225 new BranchInstruction(InstructionConstants.OP_IFICMPGE, 6), 3226 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3227 },{ 3228 new BranchInstruction(InstructionConstants.OP_IFICMPLT, X), 3229 }, 3230 }, 3231 { // ificmpgt/goto = ificmple 3232 { 3233 new BranchInstruction(InstructionConstants.OP_IFICMPGT, 6), 3234 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3235 },{ 3236 new BranchInstruction(InstructionConstants.OP_IFICMPLE, X), 3237 }, 3238 }, 3239 { // ificmple/goto = ificmpgt 3240 { 3241 new BranchInstruction(InstructionConstants.OP_IFICMPLE, 6), 3242 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3243 },{ 3244 new BranchInstruction(InstructionConstants.OP_IFICMPGT, X), 3245 }, 3246 }, 3247 { // ifacmpeq/goto = ifacmpne 3248 { 3249 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, 6), 3250 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3251 },{ 3252 new BranchInstruction(InstructionConstants.OP_IFACMPNE, X), 3253 }, 3254 }, 3255 { // ifacmpne/goto = ifacmpeq 3256 { 3257 new BranchInstruction(InstructionConstants.OP_IFACMPNE, 6), 3258 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3259 },{ 3260 new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X), 3261 }, 3262 }, 3263 { // ifnull/goto = ifnonnull 3264 { 3265 new BranchInstruction(InstructionConstants.OP_IFNULL, 6), 3266 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3267 },{ 3268 new BranchInstruction(InstructionConstants.OP_IFNONNULL, X), 3269 }, 3270 }, 3271 { // ifnonnull/goto = ifnull 3272 { 3273 new BranchInstruction(InstructionConstants.OP_IFNONNULL, 6), 3274 new BranchInstruction(InstructionConstants.OP_GOTO, X), 3275 },{ 3276 new BranchInstruction(InstructionConstants.OP_IFNULL, X), 3277 }, 3278 }, 3279// { // switch (...) { default: ... } = pop/goto ... 3280// { 3281// new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 0, new int[0]), 3282// },{ 3283// new SimpleInstruction(InstructionConstants.OP_POP), 3284// new BranchInstruction(InstructionConstants.OP_GOTO, A), 3285// }, 3286// }, 3287// { // switch (...) { default: ... } = pop/goto ... 3288// { 3289// new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 0, new int[0], new int[0]), 3290// },{ 3291// new SimpleInstruction(InstructionConstants.OP_POP), 3292// new BranchInstruction(InstructionConstants.OP_GOTO, A), 3293// }, 3294// }, 3295 { // switch (...) { case/case/default: ... } = switch (...) { case/default: ... } 3296 { 3297 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { X, Y }, new int[] { A, B }), 3298 },{ 3299 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { Y }, new int[] { B }), 3300 }, 3301 }, 3302 { // switch (...) { case/case/default: ... } = switch (...) { case/default: ... } 3303 { 3304 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Y }, new int[] { A, B }), 3305 },{ 3306 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X }, new int[] { A }), 3307 }, 3308 }, 3309 { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... } 3310 { 3311 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { X, Y, Z }, new int[] { A, B, C }), 3312 },{ 3313 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { Y, Z }, new int[] { B, C }), 3314 }, 3315 }, 3316 { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... } 3317 { 3318 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Y, Z }, new int[] { A, B, C }), 3319 },{ 3320 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Z }, new int[] { A, C }), 3321 }, 3322 }, 3323 { // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... } 3324 { 3325 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, C, new int[] { X, Y, Z }, new int[] { A, B, C }), 3326 },{ 3327 new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, C, new int[] { X, Y }, new int[] { A, B }), 3328 }, 3329 }, 3330// { // switch (...) { case ...: ... default: ... } 3331// // = if (... == ...) ... else ... 3332// { 3333// new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 1, new int[] { B }), 3334// },{ 3335// new SimpleInstruction(InstructionConstants.OP_SIPUSH, X), 3336// new BranchInstruction(InstructionConstants.OP_IFICMPNE, A), 3337// new BranchInstruction(InstructionConstants.OP_GOTO, B), 3338// }, 3339// }, 3340// { // switch (...) { case ...: ... default: ... } 3341// // = if (... == ...) ... else ... 3342// { 3343// new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 1, new int[] { X }, new int[] { B }), 3344// },{ 3345// new SimpleInstruction(InstructionConstants.OP_SIPUSH, X), 3346// new BranchInstruction(InstructionConstants.OP_IFICMPNE, A), 3347// new BranchInstruction(InstructionConstants.OP_GOTO, B), 3348// }, 3349// } 3350 }; 3351}