< prev index next >

src/hotspot/share/interpreter/rewriter.hpp

Print this page
rev 52749 : Bootstrap method consolidation
* clean up and simplify JDK support code for BSM invocation
* simplify JVM bootstrap handshake: use BootstrapCallInfo only
* remove unused JVM paths and data fields
* move bootstrap argument processing from MethodHandleNatives to ConstantPool
* remove ConstantGroup; merge argument access into BootstrapCallInfo
* adjust BSM argument access: remove copyArguments, add argumentRef API
* add metadata-free BSM modes, including symbolic arguments from CP

@@ -39,11 +39,11 @@
   GrowableArray<int>  _cp_map;
   GrowableArray<int>  _cp_cache_map;  // for Methodref, Fieldref,
                                       // InterfaceMethodref and InvokeDynamic
   GrowableArray<int>  _reference_map; // maps from cp index to resolved_refs index (or -1)
   GrowableArray<int>  _resolved_references_map; // for strings, methodHandle, methodType
-  GrowableArray<int>  _invokedynamic_references_map; // for invokedynamic resolved refs
+  GrowableArray<int>  _appendix_references_map; // for invokedynamic and invokehandle resolved refs
   GrowableArray<int>  _method_handle_invokers;
   int                 _resolved_reference_limit;
 
   // For mapping invokedynamic bytecodes, which are discovered during method
   // scanning.  The invokedynamic entries are added at the end of the cpCache.

@@ -65,11 +65,11 @@
     _reference_map.trunc_to(0);
     _reference_map.at_grow(length, -1);
 
     _method_handle_invokers.trunc_to(0);
     _resolved_references_map.trunc_to(0);
-    _invokedynamic_references_map.trunc_to(0);
+    _appendix_references_map.trunc_to(0);
     _resolved_reference_limit = -1;
     _first_iteration_cp_cache_limit = -1;
 
     // invokedynamic specific fields
     _invokedynamic_cp_cache_map.trunc_to(0);

@@ -158,22 +158,15 @@
     assert(cp_entry_to_resolved_references(cp_index) == ref_index, "");
     return ref_index;
   }
 
   // add a new entries to the resolved_references map (for invokedynamic and invokehandle only)
-  int add_invokedynamic_resolved_references_entries(int cp_index, int cache_index) {
+  int add_appendix_references_entry(int cp_index, int cache_index) {
     assert(_resolved_reference_limit >= 0, "must add indy refs after first iteration");
-    int ref_index = -1;
-    for (int entry = 0; entry < ConstantPoolCacheEntry::_indy_resolved_references_entries; entry++) {
-      const int index = _resolved_references_map.append(cp_index);  // many-to-one
-      assert(index >= _resolved_reference_limit, "");
-      if (entry == 0) {
-        ref_index = index;
-      }
-      assert((index - entry) == ref_index, "entries must be consecutive");
-      _invokedynamic_references_map.at_put_grow(index, cache_index, -1);
-    }
+    const int ref_index = _resolved_references_map.append(cp_index);  // many-to-one
+    assert(ref_index >= _resolved_reference_limit, "");
+    _appendix_references_map.at_put_grow(ref_index, cache_index, -1);
     return ref_index;
   }
 
   int resolved_references_entry_to_pool_index(int ref_index) {
     int cp_index = _resolved_references_map.at(ref_index);
< prev index next >