1 /*
   2  * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright 2008, 2009, 2010 Red Hat, Inc.
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * This code is free software; you can redistribute it and/or modify it
   7  * under the terms of the GNU General Public License version 2 only, as
   8  * published by the Free Software Foundation.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  *
  24  */
  25 
  26 #include "precompiled.hpp"
  27 #include "interpreter/bytecodes.hpp"
  28 #include "shark/llvmHeaders.hpp"
  29 #include "shark/llvmValue.hpp"
  30 #include "shark/sharkBlock.hpp"
  31 #include "shark/sharkBuilder.hpp"
  32 #include "shark/sharkConstant.hpp"
  33 #include "shark/sharkState.hpp"
  34 #include "shark/sharkValue.hpp"
  35 #include "shark/shark_globals.hpp"
  36 #include "utilities/debug.hpp"
  37 
  38 using namespace llvm;
  39 
  40 void SharkBlock::parse_bytecode(int start, int limit) {
  41   SharkValue *a, *b, *c, *d;
  42   int i;
  43 
  44   // Ensure the current state is initialized before we emit any code,
  45   // so that any setup code for the state is at the start of the block
  46   current_state();
  47 
  48   // Parse the bytecodes
  49   iter()->reset_to_bci(start);
  50   while (iter()->next_bci() < limit) {
  51     NOT_PRODUCT(a = b = c = d = NULL);
  52     iter()->next();
  53 
  54     if (SharkTraceBytecodes)
  55       tty->print_cr("%4d: %s", bci(), Bytecodes::name(bc()));
  56 
  57     if (has_trap() && trap_bci() == bci()) {
  58       do_trap(trap_request());
  59       return;
  60     }
  61 
  62     if (UseLoopSafepoints) {
  63       // XXX if a lcmp is followed by an if_?? then C2 maybe-inserts
  64       // the safepoint before the lcmp rather than before the if.
  65       // Maybe we should do this too.  See parse2.cpp for details.
  66       switch (bc()) {
  67       case Bytecodes::_goto:
  68       case Bytecodes::_ifnull:
  69       case Bytecodes::_ifnonnull:
  70       case Bytecodes::_if_acmpeq:
  71       case Bytecodes::_if_acmpne:
  72       case Bytecodes::_ifeq:
  73       case Bytecodes::_ifne:
  74       case Bytecodes::_iflt:
  75       case Bytecodes::_ifle:
  76       case Bytecodes::_ifgt:
  77       case Bytecodes::_ifge:
  78       case Bytecodes::_if_icmpeq:
  79       case Bytecodes::_if_icmpne:
  80       case Bytecodes::_if_icmplt:
  81       case Bytecodes::_if_icmple:
  82       case Bytecodes::_if_icmpgt:
  83       case Bytecodes::_if_icmpge:
  84         if (iter()->get_dest() <= bci())
  85           maybe_add_backedge_safepoint();
  86         break;
  87 
  88       case Bytecodes::_goto_w:
  89         if (iter()->get_far_dest() <= bci())
  90           maybe_add_backedge_safepoint();
  91         break;
  92 
  93       case Bytecodes::_tableswitch:
  94       case Bytecodes::_lookupswitch:
  95         if (switch_default_dest() <= bci()) {
  96           maybe_add_backedge_safepoint();
  97           break;
  98         }
  99         int len = switch_table_length();
 100         for (int i = 0; i < len; i++) {
 101           if (switch_dest(i) <= bci()) {
 102             maybe_add_backedge_safepoint();
 103             break;
 104           }
 105         }
 106         break;
 107       }
 108     }
 109 
 110     switch (bc()) {
 111     case Bytecodes::_nop:
 112       break;
 113 
 114     case Bytecodes::_aconst_null:
 115       push(SharkValue::null());
 116       break;
 117 
 118     case Bytecodes::_iconst_m1:
 119       push(SharkValue::jint_constant(-1));
 120       break;
 121     case Bytecodes::_iconst_0:
 122       push(SharkValue::jint_constant(0));
 123       break;
 124     case Bytecodes::_iconst_1:
 125       push(SharkValue::jint_constant(1));
 126       break;
 127     case Bytecodes::_iconst_2:
 128       push(SharkValue::jint_constant(2));
 129       break;
 130     case Bytecodes::_iconst_3:
 131       push(SharkValue::jint_constant(3));
 132       break;
 133     case Bytecodes::_iconst_4:
 134       push(SharkValue::jint_constant(4));
 135       break;
 136     case Bytecodes::_iconst_5:
 137       push(SharkValue::jint_constant(5));
 138       break;
 139 
 140     case Bytecodes::_lconst_0:
 141       push(SharkValue::jlong_constant(0));
 142       break;
 143     case Bytecodes::_lconst_1:
 144       push(SharkValue::jlong_constant(1));
 145       break;
 146 
 147     case Bytecodes::_fconst_0:
 148       push(SharkValue::jfloat_constant(0));
 149       break;
 150     case Bytecodes::_fconst_1:
 151       push(SharkValue::jfloat_constant(1));
 152       break;
 153     case Bytecodes::_fconst_2:
 154       push(SharkValue::jfloat_constant(2));
 155       break;
 156 
 157     case Bytecodes::_dconst_0:
 158       push(SharkValue::jdouble_constant(0));
 159       break;
 160     case Bytecodes::_dconst_1:
 161       push(SharkValue::jdouble_constant(1));
 162       break;
 163 
 164     case Bytecodes::_bipush:
 165       push(SharkValue::jint_constant(iter()->get_constant_u1()));
 166       break;
 167     case Bytecodes::_sipush:
 168       push(SharkValue::jint_constant(iter()->get_constant_u2()));
 169       break;
 170 
 171     case Bytecodes::_ldc:
 172     case Bytecodes::_ldc_w:
 173     case Bytecodes::_ldc2_w: {
 174       SharkConstant* constant = SharkConstant::for_ldc(iter());
 175       assert(constant->is_loaded(), "trap should handle unloaded classes");
 176       push(constant->value(builder()));
 177       break;
 178     }
 179     case Bytecodes::_iload_0:
 180     case Bytecodes::_lload_0:
 181     case Bytecodes::_fload_0:
 182     case Bytecodes::_dload_0:
 183     case Bytecodes::_aload_0:
 184       push(local(0));
 185       break;
 186     case Bytecodes::_iload_1:
 187     case Bytecodes::_lload_1:
 188     case Bytecodes::_fload_1:
 189     case Bytecodes::_dload_1:
 190     case Bytecodes::_aload_1:
 191       push(local(1));
 192       break;
 193     case Bytecodes::_iload_2:
 194     case Bytecodes::_lload_2:
 195     case Bytecodes::_fload_2:
 196     case Bytecodes::_dload_2:
 197     case Bytecodes::_aload_2:
 198       push(local(2));
 199       break;
 200     case Bytecodes::_iload_3:
 201     case Bytecodes::_lload_3:
 202     case Bytecodes::_fload_3:
 203     case Bytecodes::_dload_3:
 204     case Bytecodes::_aload_3:
 205       push(local(3));
 206       break;
 207     case Bytecodes::_iload:
 208     case Bytecodes::_lload:
 209     case Bytecodes::_fload:
 210     case Bytecodes::_dload:
 211     case Bytecodes::_aload:
 212       push(local(iter()->get_index()));
 213       break;
 214 
 215     case Bytecodes::_baload:
 216       do_aload(T_BYTE);
 217       break;
 218     case Bytecodes::_caload:
 219       do_aload(T_CHAR);
 220       break;
 221     case Bytecodes::_saload:
 222       do_aload(T_SHORT);
 223       break;
 224     case Bytecodes::_iaload:
 225       do_aload(T_INT);
 226       break;
 227     case Bytecodes::_laload:
 228       do_aload(T_LONG);
 229       break;
 230     case Bytecodes::_faload:
 231       do_aload(T_FLOAT);
 232       break;
 233     case Bytecodes::_daload:
 234       do_aload(T_DOUBLE);
 235       break;
 236     case Bytecodes::_aaload:
 237       do_aload(T_OBJECT);
 238       break;
 239 
 240     case Bytecodes::_istore_0:
 241     case Bytecodes::_lstore_0:
 242     case Bytecodes::_fstore_0:
 243     case Bytecodes::_dstore_0:
 244     case Bytecodes::_astore_0:
 245       set_local(0, pop());
 246       break;
 247     case Bytecodes::_istore_1:
 248     case Bytecodes::_lstore_1:
 249     case Bytecodes::_fstore_1:
 250     case Bytecodes::_dstore_1:
 251     case Bytecodes::_astore_1:
 252       set_local(1, pop());
 253       break;
 254     case Bytecodes::_istore_2:
 255     case Bytecodes::_lstore_2:
 256     case Bytecodes::_fstore_2:
 257     case Bytecodes::_dstore_2:
 258     case Bytecodes::_astore_2:
 259       set_local(2, pop());
 260       break;
 261     case Bytecodes::_istore_3:
 262     case Bytecodes::_lstore_3:
 263     case Bytecodes::_fstore_3:
 264     case Bytecodes::_dstore_3:
 265     case Bytecodes::_astore_3:
 266       set_local(3, pop());
 267       break;
 268     case Bytecodes::_istore:
 269     case Bytecodes::_lstore:
 270     case Bytecodes::_fstore:
 271     case Bytecodes::_dstore:
 272     case Bytecodes::_astore:
 273       set_local(iter()->get_index(), pop());
 274       break;
 275 
 276     case Bytecodes::_bastore:
 277       do_astore(T_BYTE);
 278       break;
 279     case Bytecodes::_castore:
 280       do_astore(T_CHAR);
 281       break;
 282     case Bytecodes::_sastore:
 283       do_astore(T_SHORT);
 284       break;
 285     case Bytecodes::_iastore:
 286       do_astore(T_INT);
 287       break;
 288     case Bytecodes::_lastore:
 289       do_astore(T_LONG);
 290       break;
 291     case Bytecodes::_fastore:
 292       do_astore(T_FLOAT);
 293       break;
 294     case Bytecodes::_dastore:
 295       do_astore(T_DOUBLE);
 296       break;
 297     case Bytecodes::_aastore:
 298       do_astore(T_OBJECT);
 299       break;
 300 
 301     case Bytecodes::_pop:
 302       xpop();
 303       break;
 304     case Bytecodes::_pop2:
 305       xpop();
 306       xpop();
 307       break;
 308     case Bytecodes::_swap:
 309       a = xpop();
 310       b = xpop();
 311       xpush(a);
 312       xpush(b);
 313       break;
 314     case Bytecodes::_dup:
 315       a = xpop();
 316       xpush(a);
 317       xpush(a);
 318       break;
 319     case Bytecodes::_dup_x1:
 320       a = xpop();
 321       b = xpop();
 322       xpush(a);
 323       xpush(b);
 324       xpush(a);
 325       break;
 326     case Bytecodes::_dup_x2:
 327       a = xpop();
 328       b = xpop();
 329       c = xpop();
 330       xpush(a);
 331       xpush(c);
 332       xpush(b);
 333       xpush(a);
 334       break;
 335     case Bytecodes::_dup2:
 336       a = xpop();
 337       b = xpop();
 338       xpush(b);
 339       xpush(a);
 340       xpush(b);
 341       xpush(a);
 342       break;
 343     case Bytecodes::_dup2_x1:
 344       a = xpop();
 345       b = xpop();
 346       c = xpop();
 347       xpush(b);
 348       xpush(a);
 349       xpush(c);
 350       xpush(b);
 351       xpush(a);
 352       break;
 353     case Bytecodes::_dup2_x2:
 354       a = xpop();
 355       b = xpop();
 356       c = xpop();
 357       d = xpop();
 358       xpush(b);
 359       xpush(a);
 360       xpush(d);
 361       xpush(c);
 362       xpush(b);
 363       xpush(a);
 364       break;
 365 
 366     case Bytecodes::_arraylength:
 367       do_arraylength();
 368       break;
 369 
 370     case Bytecodes::_getfield:
 371       do_getfield();
 372       break;
 373     case Bytecodes::_getstatic:
 374       do_getstatic();
 375       break;
 376     case Bytecodes::_putfield:
 377       do_putfield();
 378       break;
 379     case Bytecodes::_putstatic:
 380       do_putstatic();
 381       break;
 382 
 383     case Bytecodes::_iadd:
 384       b = pop();
 385       a = pop();
 386       push(SharkValue::create_jint(
 387         builder()->CreateAdd(a->jint_value(), b->jint_value()), false));
 388       break;
 389     case Bytecodes::_isub:
 390       b = pop();
 391       a = pop();
 392       push(SharkValue::create_jint(
 393         builder()->CreateSub(a->jint_value(), b->jint_value()), false));
 394       break;
 395     case Bytecodes::_imul:
 396       b = pop();
 397       a = pop();
 398       push(SharkValue::create_jint(
 399         builder()->CreateMul(a->jint_value(), b->jint_value()), false));
 400       break;
 401     case Bytecodes::_idiv:
 402       do_idiv();
 403       break;
 404     case Bytecodes::_irem:
 405       do_irem();
 406       break;
 407     case Bytecodes::_ineg:
 408       a = pop();
 409       push(SharkValue::create_jint(
 410         builder()->CreateNeg(a->jint_value()), a->zero_checked()));
 411       break;
 412     case Bytecodes::_ishl:
 413       b = pop();
 414       a = pop();
 415       push(SharkValue::create_jint(
 416         builder()->CreateShl(
 417           a->jint_value(),
 418           builder()->CreateAnd(
 419             b->jint_value(), LLVMValue::jint_constant(0x1f))), false));
 420       break;
 421     case Bytecodes::_ishr:
 422       b = pop();
 423       a = pop();
 424       push(SharkValue::create_jint(
 425         builder()->CreateAShr(
 426           a->jint_value(),
 427           builder()->CreateAnd(
 428             b->jint_value(), LLVMValue::jint_constant(0x1f))), false));
 429       break;
 430     case Bytecodes::_iushr:
 431       b = pop();
 432       a = pop();
 433       push(SharkValue::create_jint(
 434         builder()->CreateLShr(
 435           a->jint_value(),
 436           builder()->CreateAnd(
 437             b->jint_value(), LLVMValue::jint_constant(0x1f))), false));
 438       break;
 439     case Bytecodes::_iand:
 440       b = pop();
 441       a = pop();
 442       push(SharkValue::create_jint(
 443         builder()->CreateAnd(a->jint_value(), b->jint_value()), false));
 444       break;
 445     case Bytecodes::_ior:
 446       b = pop();
 447       a = pop();
 448       push(SharkValue::create_jint(
 449         builder()->CreateOr(a->jint_value(), b->jint_value()),
 450         a->zero_checked() && b->zero_checked()));
 451       break;
 452     case Bytecodes::_ixor:
 453       b = pop();
 454       a = pop();
 455       push(SharkValue::create_jint(
 456         builder()->CreateXor(a->jint_value(), b->jint_value()), false));
 457       break;
 458 
 459     case Bytecodes::_ladd:
 460       b = pop();
 461       a = pop();
 462       push(SharkValue::create_jlong(
 463         builder()->CreateAdd(a->jlong_value(), b->jlong_value()), false));
 464       break;
 465     case Bytecodes::_lsub:
 466       b = pop();
 467       a = pop();
 468       push(SharkValue::create_jlong(
 469         builder()->CreateSub(a->jlong_value(), b->jlong_value()), false));
 470       break;
 471     case Bytecodes::_lmul:
 472       b = pop();
 473       a = pop();
 474       push(SharkValue::create_jlong(
 475         builder()->CreateMul(a->jlong_value(), b->jlong_value()), false));
 476       break;
 477     case Bytecodes::_ldiv:
 478       do_ldiv();
 479       break;
 480     case Bytecodes::_lrem:
 481       do_lrem();
 482       break;
 483     case Bytecodes::_lneg:
 484       a = pop();
 485       push(SharkValue::create_jlong(
 486         builder()->CreateNeg(a->jlong_value()), a->zero_checked()));
 487       break;
 488     case Bytecodes::_lshl:
 489       b = pop();
 490       a = pop();
 491       push(SharkValue::create_jlong(
 492         builder()->CreateShl(
 493           a->jlong_value(),
 494           builder()->CreateIntCast(
 495             builder()->CreateAnd(
 496               b->jint_value(), LLVMValue::jint_constant(0x3f)),
 497             SharkType::jlong_type(), true)), false));
 498       break;
 499     case Bytecodes::_lshr:
 500       b = pop();
 501       a = pop();
 502       push(SharkValue::create_jlong(
 503         builder()->CreateAShr(
 504           a->jlong_value(),
 505           builder()->CreateIntCast(
 506             builder()->CreateAnd(
 507               b->jint_value(), LLVMValue::jint_constant(0x3f)),
 508             SharkType::jlong_type(), true)), false));
 509       break;
 510     case Bytecodes::_lushr:
 511       b = pop();
 512       a = pop();
 513       push(SharkValue::create_jlong(
 514         builder()->CreateLShr(
 515           a->jlong_value(),
 516           builder()->CreateIntCast(
 517             builder()->CreateAnd(
 518               b->jint_value(), LLVMValue::jint_constant(0x3f)),
 519             SharkType::jlong_type(), true)), false));
 520       break;
 521     case Bytecodes::_land:
 522       b = pop();
 523       a = pop();
 524       push(SharkValue::create_jlong(
 525         builder()->CreateAnd(a->jlong_value(), b->jlong_value()), false));
 526       break;
 527     case Bytecodes::_lor:
 528       b = pop();
 529       a = pop();
 530       push(SharkValue::create_jlong(
 531         builder()->CreateOr(a->jlong_value(), b->jlong_value()),
 532         a->zero_checked() && b->zero_checked()));
 533       break;
 534     case Bytecodes::_lxor:
 535       b = pop();
 536       a = pop();
 537       push(SharkValue::create_jlong(
 538         builder()->CreateXor(a->jlong_value(), b->jlong_value()), false));
 539       break;
 540 
 541     case Bytecodes::_fadd:
 542       b = pop();
 543       a = pop();
 544       push(SharkValue::create_jfloat(
 545         builder()->CreateFAdd(a->jfloat_value(), b->jfloat_value())));
 546       break;
 547     case Bytecodes::_fsub:
 548       b = pop();
 549       a = pop();
 550       push(SharkValue::create_jfloat(
 551         builder()->CreateFSub(a->jfloat_value(), b->jfloat_value())));
 552       break;
 553     case Bytecodes::_fmul:
 554       b = pop();
 555       a = pop();
 556       push(SharkValue::create_jfloat(
 557         builder()->CreateFMul(a->jfloat_value(), b->jfloat_value())));
 558       break;
 559     case Bytecodes::_fdiv:
 560       b = pop();
 561       a = pop();
 562       push(SharkValue::create_jfloat(
 563         builder()->CreateFDiv(a->jfloat_value(), b->jfloat_value())));
 564       break;
 565     case Bytecodes::_frem:
 566       b = pop();
 567       a = pop();
 568       push(SharkValue::create_jfloat(
 569         builder()->CreateFRem(a->jfloat_value(), b->jfloat_value())));
 570       break;
 571     case Bytecodes::_fneg:
 572       a = pop();
 573       push(SharkValue::create_jfloat(
 574         builder()->CreateFNeg(a->jfloat_value())));
 575       break;
 576 
 577     case Bytecodes::_dadd:
 578       b = pop();
 579       a = pop();
 580       push(SharkValue::create_jdouble(
 581         builder()->CreateFAdd(a->jdouble_value(), b->jdouble_value())));
 582       break;
 583     case Bytecodes::_dsub:
 584       b = pop();
 585       a = pop();
 586       push(SharkValue::create_jdouble(
 587         builder()->CreateFSub(a->jdouble_value(), b->jdouble_value())));
 588       break;
 589     case Bytecodes::_dmul:
 590       b = pop();
 591       a = pop();
 592       push(SharkValue::create_jdouble(
 593         builder()->CreateFMul(a->jdouble_value(), b->jdouble_value())));
 594       break;
 595     case Bytecodes::_ddiv:
 596       b = pop();
 597       a = pop();
 598       push(SharkValue::create_jdouble(
 599         builder()->CreateFDiv(a->jdouble_value(), b->jdouble_value())));
 600       break;
 601     case Bytecodes::_drem:
 602       b = pop();
 603       a = pop();
 604       push(SharkValue::create_jdouble(
 605         builder()->CreateFRem(a->jdouble_value(), b->jdouble_value())));
 606       break;
 607     case Bytecodes::_dneg:
 608       a = pop();
 609       push(SharkValue::create_jdouble(
 610         builder()->CreateFNeg(a->jdouble_value())));
 611       break;
 612 
 613     case Bytecodes::_iinc:
 614       i = iter()->get_index();
 615       set_local(
 616         i,
 617         SharkValue::create_jint(
 618           builder()->CreateAdd(
 619             LLVMValue::jint_constant(iter()->get_iinc_con()),
 620             local(i)->jint_value()), false));
 621       break;
 622 
 623     case Bytecodes::_lcmp:
 624       do_lcmp();
 625       break;
 626 
 627     case Bytecodes::_fcmpl:
 628       do_fcmp(false, false);
 629       break;
 630     case Bytecodes::_fcmpg:
 631       do_fcmp(false, true);
 632       break;
 633     case Bytecodes::_dcmpl:
 634       do_fcmp(true, false);
 635       break;
 636     case Bytecodes::_dcmpg:
 637       do_fcmp(true, true);
 638       break;
 639 
 640     case Bytecodes::_i2l:
 641       a = pop();
 642       push(SharkValue::create_jlong(
 643         builder()->CreateIntCast(
 644           a->jint_value(), SharkType::jlong_type(), true), a->zero_checked()));
 645       break;
 646     case Bytecodes::_i2f:
 647       push(SharkValue::create_jfloat(
 648         builder()->CreateSIToFP(
 649           pop()->jint_value(), SharkType::jfloat_type())));
 650       break;
 651     case Bytecodes::_i2d:
 652       push(SharkValue::create_jdouble(
 653         builder()->CreateSIToFP(
 654           pop()->jint_value(), SharkType::jdouble_type())));
 655       break;
 656 
 657     case Bytecodes::_l2i:
 658       push(SharkValue::create_jint(
 659         builder()->CreateIntCast(
 660           pop()->jlong_value(), SharkType::jint_type(), true), false));
 661       break;
 662     case Bytecodes::_l2f:
 663       push(SharkValue::create_jfloat(
 664         builder()->CreateSIToFP(
 665           pop()->jlong_value(), SharkType::jfloat_type())));
 666       break;
 667     case Bytecodes::_l2d:
 668       push(SharkValue::create_jdouble(
 669         builder()->CreateSIToFP(
 670           pop()->jlong_value(), SharkType::jdouble_type())));
 671       break;
 672 
 673     case Bytecodes::_f2i:
 674       push(SharkValue::create_jint(
 675         builder()->CreateCall(
 676           builder()->f2i(), pop()->jfloat_value()), false));
 677       break;
 678     case Bytecodes::_f2l:
 679       push(SharkValue::create_jlong(
 680         builder()->CreateCall(
 681           builder()->f2l(), pop()->jfloat_value()), false));
 682       break;
 683     case Bytecodes::_f2d:
 684       push(SharkValue::create_jdouble(
 685         builder()->CreateFPExt(
 686           pop()->jfloat_value(), SharkType::jdouble_type())));
 687       break;
 688 
 689     case Bytecodes::_d2i:
 690       push(SharkValue::create_jint(
 691         builder()->CreateCall(
 692           builder()->d2i(), pop()->jdouble_value()), false));
 693       break;
 694     case Bytecodes::_d2l:
 695       push(SharkValue::create_jlong(
 696         builder()->CreateCall(
 697           builder()->d2l(), pop()->jdouble_value()), false));
 698       break;
 699     case Bytecodes::_d2f:
 700       push(SharkValue::create_jfloat(
 701         builder()->CreateFPTrunc(
 702           pop()->jdouble_value(), SharkType::jfloat_type())));
 703       break;
 704 
 705     case Bytecodes::_i2b:
 706       push(SharkValue::create_jint(
 707         builder()->CreateAShr(
 708           builder()->CreateShl(
 709             pop()->jint_value(),
 710             LLVMValue::jint_constant(24)),
 711           LLVMValue::jint_constant(24)), false));
 712       break;
 713     case Bytecodes::_i2c:
 714       push(SharkValue::create_jint(
 715         builder()->CreateAnd(
 716             pop()->jint_value(),
 717             LLVMValue::jint_constant(0xffff)), false));
 718       break;
 719     case Bytecodes::_i2s:
 720       push(SharkValue::create_jint(
 721         builder()->CreateAShr(
 722           builder()->CreateShl(
 723             pop()->jint_value(),
 724             LLVMValue::jint_constant(16)),
 725           LLVMValue::jint_constant(16)), false));
 726       break;
 727 
 728     case Bytecodes::_return:
 729       do_return(T_VOID);
 730       break;
 731     case Bytecodes::_ireturn:
 732       do_return(T_INT);
 733       break;
 734     case Bytecodes::_lreturn:
 735       do_return(T_LONG);
 736       break;
 737     case Bytecodes::_freturn:
 738       do_return(T_FLOAT);
 739       break;
 740     case Bytecodes::_dreturn:
 741       do_return(T_DOUBLE);
 742       break;
 743     case Bytecodes::_areturn:
 744       do_return(T_OBJECT);
 745       break;
 746 
 747     case Bytecodes::_athrow:
 748       do_athrow();
 749       break;
 750 
 751     case Bytecodes::_goto:
 752     case Bytecodes::_goto_w:
 753       do_goto();
 754       break;
 755 
 756     case Bytecodes::_jsr:
 757     case Bytecodes::_jsr_w:
 758       do_jsr();
 759       break;
 760 
 761     case Bytecodes::_ret:
 762       do_ret();
 763       break;
 764 
 765     case Bytecodes::_ifnull:
 766       do_if(ICmpInst::ICMP_EQ, SharkValue::null(), pop());
 767       break;
 768     case Bytecodes::_ifnonnull:
 769       do_if(ICmpInst::ICMP_NE, SharkValue::null(), pop());
 770       break;
 771     case Bytecodes::_if_acmpeq:
 772       b = pop();
 773       a = pop();
 774       do_if(ICmpInst::ICMP_EQ, b, a);
 775       break;
 776     case Bytecodes::_if_acmpne:
 777       b = pop();
 778       a = pop();
 779       do_if(ICmpInst::ICMP_NE, b, a);
 780       break;
 781     case Bytecodes::_ifeq:
 782       do_if(ICmpInst::ICMP_EQ, SharkValue::jint_constant(0), pop());
 783       break;
 784     case Bytecodes::_ifne:
 785       do_if(ICmpInst::ICMP_NE, SharkValue::jint_constant(0), pop());
 786       break;
 787     case Bytecodes::_iflt:
 788       do_if(ICmpInst::ICMP_SLT, SharkValue::jint_constant(0), pop());
 789       break;
 790     case Bytecodes::_ifle:
 791       do_if(ICmpInst::ICMP_SLE, SharkValue::jint_constant(0), pop());
 792       break;
 793     case Bytecodes::_ifgt:
 794       do_if(ICmpInst::ICMP_SGT, SharkValue::jint_constant(0), pop());
 795       break;
 796     case Bytecodes::_ifge:
 797       do_if(ICmpInst::ICMP_SGE, SharkValue::jint_constant(0), pop());
 798       break;
 799     case Bytecodes::_if_icmpeq:
 800       b = pop();
 801       a = pop();
 802       do_if(ICmpInst::ICMP_EQ, b, a);
 803       break;
 804     case Bytecodes::_if_icmpne:
 805       b = pop();
 806       a = pop();
 807       do_if(ICmpInst::ICMP_NE, b, a);
 808       break;
 809     case Bytecodes::_if_icmplt:
 810       b = pop();
 811       a = pop();
 812       do_if(ICmpInst::ICMP_SLT, b, a);
 813       break;
 814     case Bytecodes::_if_icmple:
 815       b = pop();
 816       a = pop();
 817       do_if(ICmpInst::ICMP_SLE, b, a);
 818       break;
 819     case Bytecodes::_if_icmpgt:
 820       b = pop();
 821       a = pop();
 822       do_if(ICmpInst::ICMP_SGT, b, a);
 823       break;
 824     case Bytecodes::_if_icmpge:
 825       b = pop();
 826       a = pop();
 827       do_if(ICmpInst::ICMP_SGE, b, a);
 828       break;
 829 
 830     case Bytecodes::_tableswitch:
 831     case Bytecodes::_lookupswitch:
 832       do_switch();
 833       break;
 834 
 835     case Bytecodes::_invokestatic:
 836     case Bytecodes::_invokespecial:
 837     case Bytecodes::_invokevirtual:
 838     case Bytecodes::_invokeinterface:
 839       do_call();
 840       break;
 841 
 842     case Bytecodes::_instanceof:
 843       // This is a very common construct:
 844       //
 845       //  if (object instanceof Klass) {
 846       //    something = (Klass) object;
 847       //    ...
 848       //  }
 849       //
 850       // which gets compiled to something like this:
 851       //
 852       //  28: aload 9
 853       //  30: instanceof <Class Klass>
 854       //  33: ifeq 52
 855       //  36: aload 9
 856       //  38: checkcast <Class Klass>
 857       //
 858       // Handling both bytecodes at once allows us
 859       // to eliminate the checkcast.
 860       if (iter()->next_bci() < limit &&
 861           (iter()->next_bc() == Bytecodes::_ifeq ||
 862            iter()->next_bc() == Bytecodes::_ifne) &&
 863           (!UseLoopSafepoints ||
 864            iter()->next_get_dest() > iter()->next_bci())) {
 865         if (maybe_do_instanceof_if()) {
 866           iter()->next();
 867           if (SharkTraceBytecodes)
 868             tty->print_cr("%4d: %s", bci(), Bytecodes::name(bc()));
 869           break;
 870         }
 871       }
 872       // fall through
 873     case Bytecodes::_checkcast:
 874       do_instance_check();
 875       break;
 876 
 877     case Bytecodes::_new:
 878       do_new();
 879       break;
 880     case Bytecodes::_newarray:
 881       do_newarray();
 882       break;
 883     case Bytecodes::_anewarray:
 884       do_anewarray();
 885       break;
 886     case Bytecodes::_multianewarray:
 887       do_multianewarray();
 888       break;
 889 
 890     case Bytecodes::_monitorenter:
 891       do_monitorenter();
 892       break;
 893     case Bytecodes::_monitorexit:
 894       do_monitorexit();
 895       break;
 896 
 897     default:
 898       ShouldNotReachHere();
 899     }
 900   }
 901 }
 902 
 903 SharkState* SharkBlock::initial_current_state() {
 904   return entry_state()->copy();
 905 }
 906 
 907 int SharkBlock::switch_default_dest() {
 908   return iter()->get_dest_table(0);
 909 }
 910 
 911 int SharkBlock::switch_table_length() {
 912   switch(bc()) {
 913   case Bytecodes::_tableswitch:
 914     return iter()->get_int_table(2) - iter()->get_int_table(1) + 1;
 915 
 916   case Bytecodes::_lookupswitch:
 917     return iter()->get_int_table(1);
 918 
 919   default:
 920     ShouldNotReachHere();
 921   }
 922 }
 923 
 924 int SharkBlock::switch_key(int i) {
 925   switch(bc()) {
 926   case Bytecodes::_tableswitch:
 927     return iter()->get_int_table(1) + i;
 928 
 929   case Bytecodes::_lookupswitch:
 930     return iter()->get_int_table(2 + 2 * i);
 931 
 932   default:
 933     ShouldNotReachHere();
 934   }
 935 }
 936 
 937 int SharkBlock::switch_dest(int i) {
 938   switch(bc()) {
 939   case Bytecodes::_tableswitch:
 940     return iter()->get_dest_table(i + 3);
 941 
 942   case Bytecodes::_lookupswitch:
 943     return iter()->get_dest_table(2 + 2 * i + 1);
 944 
 945   default:
 946     ShouldNotReachHere();
 947   }
 948 }
 949 
 950 void SharkBlock::do_div_or_rem(bool is_long, bool is_rem) {
 951   SharkValue *sb = pop();
 952   SharkValue *sa = pop();
 953 
 954   check_divide_by_zero(sb);
 955 
 956   Value *a, *b, *p, *q;
 957   if (is_long) {
 958     a = sa->jlong_value();
 959     b = sb->jlong_value();
 960     p = LLVMValue::jlong_constant(0x8000000000000000LL);
 961     q = LLVMValue::jlong_constant(-1);
 962   }
 963   else {
 964     a = sa->jint_value();
 965     b = sb->jint_value();
 966     p = LLVMValue::jint_constant(0x80000000);
 967     q = LLVMValue::jint_constant(-1);
 968   }
 969 
 970   BasicBlock *ip           = builder()->GetBlockInsertionPoint();
 971   BasicBlock *special_case = builder()->CreateBlock(ip, "special_case");
 972   BasicBlock *general_case = builder()->CreateBlock(ip, "general_case");
 973   BasicBlock *done         = builder()->CreateBlock(ip, "done");
 974 
 975   builder()->CreateCondBr(
 976     builder()->CreateAnd(
 977       builder()->CreateICmpEQ(a, p),
 978       builder()->CreateICmpEQ(b, q)),
 979     special_case, general_case);
 980 
 981   builder()->SetInsertPoint(special_case);
 982   Value *special_result;
 983   if (is_rem) {
 984     if (is_long)
 985       special_result = LLVMValue::jlong_constant(0);
 986     else
 987       special_result = LLVMValue::jint_constant(0);
 988   }
 989   else {
 990     special_result = a;
 991   }
 992   builder()->CreateBr(done);
 993 
 994   builder()->SetInsertPoint(general_case);
 995   Value *general_result;
 996   if (is_rem)
 997     general_result = builder()->CreateSRem(a, b);
 998   else
 999     general_result = builder()->CreateSDiv(a, b);
1000   builder()->CreateBr(done);
1001 
1002   builder()->SetInsertPoint(done);
1003   PHINode *result;
1004   if (is_long)
1005     result = builder()->CreatePHI(SharkType::jlong_type(), 0, "result");
1006   else
1007     result = builder()->CreatePHI(SharkType::jint_type(), 0, "result");
1008   result->addIncoming(special_result, special_case);
1009   result->addIncoming(general_result, general_case);
1010 
1011   if (is_long)
1012     push(SharkValue::create_jlong(result, false));
1013   else
1014     push(SharkValue::create_jint(result, false));
1015 }
1016 
1017 void SharkBlock::do_field_access(bool is_get, bool is_field) {
1018   bool will_link;
1019   ciField *field = iter()->get_field(will_link);
1020   assert(will_link, "typeflow responsibility");
1021   assert(is_field != field->is_static(), "mismatch");
1022 
1023   // Pop the value off the stack where necessary
1024   SharkValue *value = NULL;
1025   if (!is_get)
1026     value = pop();
1027 
1028   // Find the object we're accessing, if necessary
1029   Value *object = NULL;
1030   if (is_field) {
1031     SharkValue *value = pop();
1032     check_null(value);
1033     object = value->generic_value();
1034   }
1035   if (is_get && field->is_constant() && field->is_static()) {
1036     SharkConstant *constant = SharkConstant::for_field(iter());
1037     if (constant->is_loaded())
1038       value = constant->value(builder());
1039   }
1040   if (!is_get || value == NULL) {
1041     if (!is_field) {
1042       object = builder()->CreateInlineOop(field->holder()->java_mirror());
1043     }
1044     BasicType   basic_type = field->type()->basic_type();
1045     Type *stack_type = SharkType::to_stackType(basic_type);
1046     Type *field_type = SharkType::to_arrayType(basic_type);
1047     Type *type = field_type;
1048     if (field->is_volatile()) {
1049       if (field_type == SharkType::jfloat_type()) {
1050         type = SharkType::jint_type();
1051       } else if (field_type == SharkType::jdouble_type()) {
1052         type = SharkType::jlong_type();
1053       }
1054     }
1055     Value *addr = builder()->CreateAddressOfStructEntry(
1056       object, in_ByteSize(field->offset_in_bytes()),
1057       PointerType::getUnqual(type),
1058       "addr");
1059 
1060     // Do the access
1061     if (is_get) {
1062       Value* field_value;
1063       if (field->is_volatile()) {
1064         field_value = builder()->CreateAtomicLoad(addr);
1065         field_value = builder()->CreateBitCast(field_value, field_type);
1066       } else {
1067         field_value = builder()->CreateLoad(addr);
1068       }
1069       if (field_type != stack_type) {
1070         field_value = builder()->CreateIntCast(
1071           field_value, stack_type, basic_type != T_CHAR);
1072       }
1073 
1074       value = SharkValue::create_generic(field->type(), field_value, false);
1075     }
1076     else {
1077       Value *field_value = value->generic_value();
1078 
1079       if (field_type != stack_type) {
1080         field_value = builder()->CreateIntCast(
1081           field_value, field_type, basic_type != T_CHAR);
1082       }
1083 
1084       if (field->is_volatile()) {
1085         field_value = builder()->CreateBitCast(field_value, type);
1086         builder()->CreateAtomicStore(field_value, addr);
1087       } else {
1088         builder()->CreateStore(field_value, addr);
1089       }
1090 
1091       if (!field->type()->is_primitive_type()) {
1092         builder()->CreateUpdateBarrierSet(oopDesc::bs(), addr);
1093       }
1094     }
1095   }
1096 
1097   // Push the value onto the stack where necessary
1098   if (is_get)
1099     push(value);
1100 }
1101 
1102 void SharkBlock::do_lcmp() {
1103   Value *b = pop()->jlong_value();
1104   Value *a = pop()->jlong_value();
1105 
1106   BasicBlock *ip   = builder()->GetBlockInsertionPoint();
1107   BasicBlock *ne   = builder()->CreateBlock(ip, "lcmp_ne");
1108   BasicBlock *lt   = builder()->CreateBlock(ip, "lcmp_lt");
1109   BasicBlock *gt   = builder()->CreateBlock(ip, "lcmp_gt");
1110   BasicBlock *done = builder()->CreateBlock(ip, "done");
1111 
1112   BasicBlock *eq = builder()->GetInsertBlock();
1113   builder()->CreateCondBr(builder()->CreateICmpEQ(a, b), done, ne);
1114 
1115   builder()->SetInsertPoint(ne);
1116   builder()->CreateCondBr(builder()->CreateICmpSLT(a, b), lt, gt);
1117 
1118   builder()->SetInsertPoint(lt);
1119   builder()->CreateBr(done);
1120 
1121   builder()->SetInsertPoint(gt);
1122   builder()->CreateBr(done);
1123 
1124   builder()->SetInsertPoint(done);
1125   PHINode *result = builder()->CreatePHI(SharkType::jint_type(), 0, "result");
1126   result->addIncoming(LLVMValue::jint_constant(-1), lt);
1127   result->addIncoming(LLVMValue::jint_constant(0),  eq);
1128   result->addIncoming(LLVMValue::jint_constant(1),  gt);
1129 
1130   push(SharkValue::create_jint(result, false));
1131 }
1132 
1133 void SharkBlock::do_fcmp(bool is_double, bool unordered_is_greater) {
1134   Value *a, *b;
1135   if (is_double) {
1136     b = pop()->jdouble_value();
1137     a = pop()->jdouble_value();
1138   }
1139   else {
1140     b = pop()->jfloat_value();
1141     a = pop()->jfloat_value();
1142   }
1143 
1144   BasicBlock *ip      = builder()->GetBlockInsertionPoint();
1145   BasicBlock *ordered = builder()->CreateBlock(ip, "ordered");
1146   BasicBlock *ge      = builder()->CreateBlock(ip, "fcmp_ge");
1147   BasicBlock *lt      = builder()->CreateBlock(ip, "fcmp_lt");
1148   BasicBlock *eq      = builder()->CreateBlock(ip, "fcmp_eq");
1149   BasicBlock *gt      = builder()->CreateBlock(ip, "fcmp_gt");
1150   BasicBlock *done    = builder()->CreateBlock(ip, "done");
1151 
1152   builder()->CreateCondBr(
1153     builder()->CreateFCmpUNO(a, b),
1154     unordered_is_greater ? gt : lt, ordered);
1155 
1156   builder()->SetInsertPoint(ordered);
1157   builder()->CreateCondBr(builder()->CreateFCmpULT(a, b), lt, ge);
1158 
1159   builder()->SetInsertPoint(ge);
1160   builder()->CreateCondBr(builder()->CreateFCmpUGT(a, b), gt, eq);
1161 
1162   builder()->SetInsertPoint(lt);
1163   builder()->CreateBr(done);
1164 
1165   builder()->SetInsertPoint(gt);
1166   builder()->CreateBr(done);
1167 
1168   builder()->SetInsertPoint(eq);
1169   builder()->CreateBr(done);
1170 
1171   builder()->SetInsertPoint(done);
1172   PHINode *result = builder()->CreatePHI(SharkType::jint_type(), 0, "result");
1173   result->addIncoming(LLVMValue::jint_constant(-1), lt);
1174   result->addIncoming(LLVMValue::jint_constant(0),  eq);
1175   result->addIncoming(LLVMValue::jint_constant(1),  gt);
1176 
1177   push(SharkValue::create_jint(result, false));
1178 }
1179 
1180 void SharkBlock::emit_IR() {
1181   ShouldNotCallThis();
1182 }
1183 
1184 SharkState* SharkBlock::entry_state() {
1185   ShouldNotCallThis();
1186 }
1187 
1188 void SharkBlock::do_zero_check(SharkValue* value) {
1189   ShouldNotCallThis();
1190 }
1191 
1192 void SharkBlock::maybe_add_backedge_safepoint() {
1193   ShouldNotCallThis();
1194 }
1195 
1196 bool SharkBlock::has_trap() {
1197   return false;
1198 }
1199 
1200 int SharkBlock::trap_request() {
1201   ShouldNotCallThis();
1202 }
1203 
1204 int SharkBlock::trap_bci() {
1205   ShouldNotCallThis();
1206 }
1207 
1208 void SharkBlock::do_trap(int trap_request) {
1209   ShouldNotCallThis();
1210 }
1211 
1212 void SharkBlock::do_arraylength() {
1213   ShouldNotCallThis();
1214 }
1215 
1216 void SharkBlock::do_aload(BasicType basic_type) {
1217   ShouldNotCallThis();
1218 }
1219 
1220 void SharkBlock::do_astore(BasicType basic_type) {
1221   ShouldNotCallThis();
1222 }
1223 
1224 void SharkBlock::do_return(BasicType type) {
1225   ShouldNotCallThis();
1226 }
1227 
1228 void SharkBlock::do_athrow() {
1229   ShouldNotCallThis();
1230 }
1231 
1232 void SharkBlock::do_goto() {
1233   ShouldNotCallThis();
1234 }
1235 
1236 void SharkBlock::do_jsr() {
1237   ShouldNotCallThis();
1238 }
1239 
1240 void SharkBlock::do_ret() {
1241   ShouldNotCallThis();
1242 }
1243 
1244 void SharkBlock::do_if(ICmpInst::Predicate p, SharkValue* b, SharkValue* a) {
1245   ShouldNotCallThis();
1246 }
1247 
1248 void SharkBlock::do_switch() {
1249   ShouldNotCallThis();
1250 }
1251 
1252 void SharkBlock::do_call() {
1253   ShouldNotCallThis();
1254 }
1255 
1256 void SharkBlock::do_instance_check() {
1257   ShouldNotCallThis();
1258 }
1259 
1260 bool SharkBlock::maybe_do_instanceof_if() {
1261   ShouldNotCallThis();
1262 }
1263 
1264 void SharkBlock::do_new() {
1265   ShouldNotCallThis();
1266 }
1267 
1268 void SharkBlock::do_newarray() {
1269   ShouldNotCallThis();
1270 }
1271 
1272 void SharkBlock::do_anewarray() {
1273   ShouldNotCallThis();
1274 }
1275 
1276 void SharkBlock::do_multianewarray() {
1277   ShouldNotCallThis();
1278 }
1279 
1280 void SharkBlock::do_monitorenter() {
1281   ShouldNotCallThis();
1282 }
1283 
1284 void SharkBlock::do_monitorexit() {
1285   ShouldNotCallThis();
1286 }