Print this page
rev 1021 : 6858164: invokedynamic code needs some cleanup (post-6655638)
Note: The bug ID for this change set was erroneously used to call for review of 6815692.
Summary: Fix several crashers, remove needless paths for boxed-style bootstrap method call, refactor & simplify APIs for rewriter constantPoolOop, remove sun.dyn.CallSiteImpl
Reviewed-by: ?
rev 1026 : imported patch indy.compiler.inline.patch

Split Close
Expand all
Collapse all
          --- old/src/share/vm/oops/generateOopMap.cpp
          +++ new/src/share/vm/oops/generateOopMap.cpp
↓ open down ↓ 1548 lines elided ↑ open up ↑
1549 1549      case Bytecodes::_jsr:               do_jsr(itr->dest());         break;
1550 1550      case Bytecodes::_jsr_w:             do_jsr(itr->dest_w());       break;
1551 1551  
1552 1552      case Bytecodes::_getstatic:         do_field(true,  true,
1553 1553                                                   itr->get_index_big(),
1554 1554                                                   itr->bci()); break;
1555 1555      case Bytecodes::_putstatic:         do_field(false, true,  itr->get_index_big(), itr->bci()); break;
1556 1556      case Bytecodes::_getfield:          do_field(true,  false, itr->get_index_big(), itr->bci()); break;
1557 1557      case Bytecodes::_putfield:          do_field(false, false, itr->get_index_big(), itr->bci()); break;
1558 1558  
1559      -   case Bytecodes::_invokevirtual:
1560      -   case Bytecodes::_invokespecial:     do_method(false, false, itr->get_index_big(), itr->bci()); break;
1561      -   case Bytecodes::_invokestatic:      do_method(true,  false, itr->get_index_big(), itr->bci()); break;
     1559 +    case Bytecodes::_invokevirtual:
     1560 +    case Bytecodes::_invokespecial:     do_method(false, false, itr->get_index_big(), itr->bci()); break;
     1561 +    case Bytecodes::_invokestatic:      do_method(true,  false, itr->get_index_big(), itr->bci()); break;
1562 1562      case Bytecodes::_invokedynamic:     do_method(true,  false, itr->get_index_int(), itr->bci()); break;
1563      -   case Bytecodes::_invokeinterface:   do_method(false, true,  itr->get_index_big(), itr->bci()); break;
1564      -   case Bytecodes::_newarray:
1565      -   case Bytecodes::_anewarray:         pp_new_ref(vCTS, itr->bci()); break;
     1563 +    case Bytecodes::_invokeinterface:   do_method(false, true,  itr->get_index_big(), itr->bci()); break;
     1564 +    case Bytecodes::_newarray:
     1565 +    case Bytecodes::_anewarray:         pp_new_ref(vCTS, itr->bci()); break;
1566 1566      case Bytecodes::_checkcast:         do_checkcast(); break;
1567 1567      case Bytecodes::_arraylength:
1568 1568      case Bytecodes::_instanceof:        pp(rCTS, vCTS); break;
1569 1569      case Bytecodes::_monitorenter:      do_monitorenter(itr->bci()); break;
1570 1570      case Bytecodes::_monitorexit:       do_monitorexit(itr->bci()); break;
1571 1571  
1572 1572      case Bytecodes::_athrow:            // handled by do_exception_edge() BUT ...
1573 1573                                          // vlh(apple): do_exception_edge() does not get
1574 1574                                          // called if method has no exception handlers
1575 1575                                          if ((!_has_exceptions) && (_monitor_top > 0)) {
↓ open down ↓ 247 lines elided ↑ open up ↑
1823 1823    }
1824 1824  }
1825 1825  
1826 1826  void GenerateOopMap::do_jsr(int targ_bci) {
1827 1827    push(CellTypeState::make_addr(targ_bci));
1828 1828  }
1829 1829  
1830 1830  
1831 1831  
1832 1832  void GenerateOopMap::do_ldc(int idx, int bci) {
1833      -  constantPoolOop cp = method()->constants();
1834      -  constantTag tag    = cp->tag_at(idx);
1835      -
1836      -  CellTypeState cts = (tag.is_string() || tag.is_unresolved_string() ||
1837      -                       tag.is_klass()  || tag.is_unresolved_klass())
1838      -                    ? CellTypeState::make_line_ref(bci) : valCTS;
     1833 +  constantPoolOop cp  = method()->constants();
     1834 +  CellTypeState   cts = cp->is_pointer_entry(idx) ? CellTypeState::make_line_ref(bci) : valCTS;
1839 1835    ppush1(cts);
1840 1836  }
1841 1837  
1842 1838  void GenerateOopMap::do_multianewarray(int dims, int bci) {
1843 1839    assert(dims >= 1, "sanity check");
1844 1840    for(int i = dims -1; i >=0; i--) {
1845 1841      ppop1(valCTS);
1846 1842    }
1847 1843    ppush1(CellTypeState::make_line_ref(bci));
1848 1844  }
↓ open down ↓ 678 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX