< prev index next >

src/hotspot/share/code/nmethod.cpp

Print this page

        

@@ -586,10 +586,11 @@
     _nmethod_end_offset      = _nul_chk_table_offset;
     _compile_id              = compile_id;
     _comp_level              = CompLevel_none;
     _entry_point             = code_begin()          + offsets->value(CodeOffsets::Entry);
     _verified_entry_point    = code_begin()          + offsets->value(CodeOffsets::Verified_Entry);
+    _verified_value_entry_point = _verified_entry_point;
     _osr_entry_point         = NULL;
     _exception_cache         = NULL;
     _pc_desc_container.reset_to(NULL);
     _hotness_counter         = NMethodSweeper::hotness_counter_reset_val();
 

@@ -743,10 +744,11 @@
     _handler_table_offset    = _dependencies_offset  + align_up((int)dependencies->size_in_bytes (), oopSize);
     _nul_chk_table_offset    = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize);
     _nmethod_end_offset      = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize);
     _entry_point             = code_begin()          + offsets->value(CodeOffsets::Entry);
     _verified_entry_point    = code_begin()          + offsets->value(CodeOffsets::Verified_Entry);
+    _verified_value_entry_point = code_begin()       + offsets->value(CodeOffsets::Verified_Value_Entry);
     _osr_entry_point         = code_begin()          + offsets->value(CodeOffsets::OSR_Entry);
     _exception_cache         = NULL;
 
     _scopes_data_begin = (address) this + scopes_data_offset;
 

@@ -2477,11 +2479,11 @@
   }
   return NULL;
 }
 
 void nmethod::print_nmethod_labels(outputStream* stream, address block_begin) const {
-  address low = entry_point();
+  address low = verified_value_entry_point() != NULL ? verified_value_entry_point() : entry_point();
   if (block_begin == low) {
     // Print method arguments before the method entry
     methodHandle m = method();
     if (m.not_null()) {
       stream->print("  # ");

@@ -2493,22 +2495,19 @@
       int sizeargs = 0;
       BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, 256);
       VMRegPair* regs   = NEW_RESOURCE_ARRAY(VMRegPair, 256);
       Symbol* sig = m->signature();
       bool has_value_arg = false;
-      if (ValueTypePassFieldsAsArgs && m->adapter()->get_sig_extended() != NULL) {
+      if (m->has_scalarized_args()) {
         // Use extended signature if value type arguments are passed as fields
-        sig = m->adapter()->get_sig_extended();
+        sig = SigEntry::create_symbol(m->adapter()->get_sig_cc());
         has_value_arg = true;
       } else if (!m->is_static()) {
         sig_bt[sizeargs++] = T_OBJECT; // 'this'
       }
       for (SignatureStream ss(sig); !ss.at_return_type(); ss.next()) {
         BasicType t = ss.type();
-        if (!ValueTypePassFieldsAsArgs && t == T_VALUETYPE) {
-          t = T_VALUETYPEPTR; // Pass value types by reference
-        }
         sig_bt[sizeargs++] = t;
         if (type2size[t] == 2) {
           sig_bt[sizeargs++] = T_VOID;
         } else {
           assert(type2size[t] == 1, "size is 1 or 2");

@@ -2519,17 +2518,15 @@
       int stack_slot_offset = this->frame_size() * wordSize;
       int tab1 = 14, tab2 = 24;
       int sig_index = 0;
       int arg_index = ((m->is_static() || has_value_arg) ? 0 : -1);
       bool did_old_sp = false;
+      SigEntry res_entry = m->get_res_entry();
       for (SignatureStream ss(sig); !ss.at_return_type(); ) {
         bool at_this = (arg_index == -1);
         bool at_old_sp = false;
         BasicType t = (at_this ? T_OBJECT : ss.type());
-        if (!ValueTypePassFieldsAsArgs && t == T_VALUETYPE) {
-          t = T_VALUETYPEPTR; // Pass value types by reference
-        }
         assert(t == sig_bt[sig_index], "sigs in sync");
         if (at_this) {
           stream->print("  # this: ");
         } else {
           stream->print("  # parm%d: ", arg_index);

@@ -2564,10 +2561,13 @@
             }
           }
           if (!did_name)
             stream->print("%s", type2name(t));
         }
+        if (sig_index == res_entry._offset) {
+          stream->print(" [RESERVED] ");
+        }
         if (at_old_sp) {
           stream->print("  (%s of caller)", spname);
           did_old_sp = true;
         }
         stream->cr();

@@ -2585,10 +2585,11 @@
     }
   }
 
   if (block_begin == entry_point())             stream->print_cr("[Entry Point]");
   if (block_begin == verified_entry_point())    stream->print_cr("[Verified Entry Point]");
+  if (block_begin == verified_value_entry_point()) stream->print_cr("[Verified Value Entry Point]");
   if (JVMCI_ONLY(_exception_offset >= 0 &&) block_begin == exception_begin())         stream->print_cr("[Exception Handler]");
   if (block_begin == stub_begin())              stream->print_cr("[Stub Code]");
   if (JVMCI_ONLY(_deopt_handler_begin != NULL &&) block_begin == deopt_handler_begin())     stream->print_cr("[Deopt Handler Code]");
 
   if (has_method_handle_invokes())
< prev index next >