src/hotspot/share/oops/cpCache.cpp
changeset 59056 15936b142f86
parent 58447 319173c62caa
child 59247 56bf71d64d51
equal deleted inserted replaced
59055:57ad70bcf06c 59056:15936b142f86
   399     Thread* THREAD = Thread::current();
   399     Thread* THREAD = Thread::current();
   400     ConstantPool::throw_resolution_error(cpool, encoded_index, THREAD);
   400     ConstantPool::throw_resolution_error(cpool, encoded_index, THREAD);
   401     return;
   401     return;
   402   }
   402   }
   403 
   403 
   404   const methodHandle adapter = call_info.resolved_method();
   404   Method* adapter            = call_info.resolved_method();
   405   const Handle appendix      = call_info.resolved_appendix();
   405   const Handle appendix      = call_info.resolved_appendix();
   406   const bool has_appendix    = appendix.not_null();
   406   const bool has_appendix    = appendix.not_null();
   407 
   407 
   408   // Write the flags.
   408   // Write the flags.
   409   // MHs and indy are always sig-poly and have a local signature.
   409   // MHs and indy are always sig-poly and have a local signature.
   417     ttyLocker ttyl;
   417     ttyLocker ttyl;
   418     tty->print_cr("set_method_handle bc=%d appendix=" PTR_FORMAT "%s method=" PTR_FORMAT " (local signature) ",
   418     tty->print_cr("set_method_handle bc=%d appendix=" PTR_FORMAT "%s method=" PTR_FORMAT " (local signature) ",
   419                   invoke_code,
   419                   invoke_code,
   420                   p2i(appendix()),
   420                   p2i(appendix()),
   421                   (has_appendix ? "" : " (unused)"),
   421                   (has_appendix ? "" : " (unused)"),
   422                   p2i(adapter()));
   422                   p2i(adapter));
   423     adapter->print();
   423     adapter->print();
   424     if (has_appendix)  appendix()->print();
   424     if (has_appendix)  appendix()->print();
   425   }
   425   }
   426 
   426 
   427   // Method handle invokes and invokedynamic sites use both cp cache words.
   427   // Method handle invokes and invokedynamic sites use both cp cache words.
   449     assert(appendix_index >= 0 && appendix_index < resolved_references->length(), "oob");
   449     assert(appendix_index >= 0 && appendix_index < resolved_references->length(), "oob");
   450     assert(resolved_references->obj_at(appendix_index) == NULL, "init just once");
   450     assert(resolved_references->obj_at(appendix_index) == NULL, "init just once");
   451     resolved_references->obj_at_put(appendix_index, appendix());
   451     resolved_references->obj_at_put(appendix_index, appendix());
   452   }
   452   }
   453 
   453 
   454   release_set_f1(adapter());  // This must be the last one to set (see NOTE above)!
   454   release_set_f1(adapter);  // This must be the last one to set (see NOTE above)!
   455 
   455 
   456   // The interpreter assembly code does not check byte_2,
   456   // The interpreter assembly code does not check byte_2,
   457   // but it is used by is_resolved, method_if_resolved, etc.
   457   // but it is used by is_resolved, method_if_resolved, etc.
   458   set_bytecode_1(invoke_code);
   458   set_bytecode_1(invoke_code);
   459   NOT_PRODUCT(verify(tty));
   459   NOT_PRODUCT(verify(tty));
   721 
   721 
   722   InstanceKlass* ik = constant_pool()->pool_holder();
   722   InstanceKlass* ik = constant_pool()->pool_holder();
   723   bool* f2_used = NEW_RESOURCE_ARRAY(bool, length());
   723   bool* f2_used = NEW_RESOURCE_ARRAY(bool, length());
   724   memset(f2_used, 0, sizeof(bool) * length());
   724   memset(f2_used, 0, sizeof(bool) * length());
   725 
   725 
       
   726   Thread* THREAD = Thread::current();
       
   727 
   726   // Find all the slots that we need to preserve f2
   728   // Find all the slots that we need to preserve f2
   727   for (int i = 0; i < ik->methods()->length(); i++) {
   729   for (int i = 0; i < ik->methods()->length(); i++) {
   728     Method* m = ik->methods()->at(i);
   730     Method* m = ik->methods()->at(i);
   729     RawBytecodeStream bcs(m);
   731     RawBytecodeStream bcs(methodHandle(THREAD, m));
   730     while (!bcs.is_last_bytecode()) {
   732     while (!bcs.is_last_bytecode()) {
   731       Bytecodes::Code opcode = bcs.raw_next();
   733       Bytecodes::Code opcode = bcs.raw_next();
   732       switch (opcode) {
   734       switch (opcode) {
   733       case Bytecodes::_invokedynamic: {
   735       case Bytecodes::_invokedynamic: {
   734           int index = Bytes::get_native_u4(bcs.bcp() + 1);
   736           int index = Bytes::get_native_u4(bcs.bcp() + 1);