changeset 4979:18a5539bf19b

More diff vs hsx24 optimizations.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Mon, 27 Feb 2012 21:43:51 +0100
parents 99d3d8a72252
children 1c7c5be93e84
files src/cpu/sparc/vm/methodHandles_sparc.cpp src/cpu/x86/vm/sharedRuntime_x86_64.cpp src/os/windows/vm/os_windows.cpp src/share/vm/compiler/oopMap.cpp src/share/vm/interpreter/interpreterRuntime.cpp src/share/vm/oops/klass.cpp src/share/vm/oops/klassKlass.cpp src/share/vm/oops/methodDataKlass.cpp src/share/vm/oops/methodDataOop.cpp src/share/vm/oops/methodKlass.cpp src/share/vm/oops/methodOop.cpp src/share/vm/runtime/rframe.cpp src/share/vm/runtime/sharedRuntime.cpp
diffstat 13 files changed, 68 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/sparc/vm/methodHandles_sparc.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/cpu/sparc/vm/methodHandles_sparc.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -876,7 +876,14 @@
   }
 #endif
   __ cmp_and_brx_short(bottom_reg, top_reg, Assembler::greaterEqualUnsigned, Assembler::pn, L_break);
->>
+  // work top down to bottom, copying contiguous data upwards
+  // In pseudo-code:
+  //   while (--top >= bottom) *(top + distance) = *(top + 0);
+  RegisterOrConstant offset = __ argument_offset(positive_distance_in_slots, positive_distance_in_slots.register_or_noreg());
+  __ BIND(L_loop);
+  __ sub(top_reg, wordSize, top_reg);
+  __ ld_ptr(           Address(top_reg, 0     ), temp2_reg);
+  __ st_ptr(temp2_reg, Address(top_reg, offset)           );
   __ cmp_and_brx_short(top_reg, bottom_reg, Assembler::greaterUnsigned, Assembler::pt, L_loop);
   assert(Interpreter::stackElementSize == wordSize, "else change loop");
   __ BIND(L_break);
--- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -3067,7 +3067,6 @@
     __ bind(L);
   }
 #endif // ASSERT
-  
   __ mov(c_rarg0, r15_thread);
   __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info)));
 
--- a/src/os/windows/vm/os_windows.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/os/windows/vm/os_windows.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -407,6 +407,7 @@
     }
   }
 
+
   if (UseVectoredExceptions) {
     // If we are using vectored exception we don't need to set a SEH
     thread->run();
@@ -2087,9 +2088,11 @@
 #elif _M_AMD64
   PCONTEXT ctx = exceptionInfo->ContextRecord;
   address pc = (address)ctx->Rip;
-  //assert(pc[0] == 0xF7 || (pc[1] == 0xF7 && (pc[0] == 0x41 || pc[0] == 0x49)), "not an idiv opcode");
-  //assert((pc[1] & ~0x7) == 0xF8, "cannot handle non-register operands");
-  //assert((long)ctx->Rax == (long)min_jint || pc[0] == 0x49, "unexpected idiv exception");
+#ifndef GRAAL
+  assert(pc[0] == 0xF7, "not an idiv opcode");
+  assert((pc[1] & ~0x7) == 0xF8, "cannot handle non-register operands");
+  assert(ctx->Rax == min_jint, "unexpected idiv exception");
+#endif
   // set correct result values and continue after idiv instruction
   ctx->Rip = (DWORD)pc + 2;        // idiv reg, reg  is 2 bytes
   ctx->Rax = (DWORD)min_jint;      // result
--- a/src/share/vm/compiler/oopMap.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/compiler/oopMap.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -255,7 +255,7 @@
   if(om_count() > 0) {
     OopMap* last = at(om_count()-1);
     if (last->offset() == map->offset() ) {
-      fatal(err_msg("OopMap inserted twice (offset=%d)", last->offset()));
+      fatal("OopMap inserted twice");
     }
     if(last->offset() > map->offset()) {
       tty->print_cr( "WARNING, maps not sorted: pc[%d]=%d, pc[%d]=%d",
--- a/src/share/vm/interpreter/interpreterRuntime.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/interpreter/interpreterRuntime.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -445,6 +445,7 @@
     }
   } while (should_repeat == true);
 
+#ifdef GRAAL
   if (h_method->method_data() != NULL) {
     ResourceMark rm(thread);
     ProfileData* pdata = h_method->method_data()->allocate_bci_to_data(current_bci);
@@ -456,6 +457,7 @@
       }
     }
   }
+#endif
 
   // notify JVMTI of an exception throw; JVMTI will detect if this is a first
   // time throw or a stack unwinding throw and accordingly notify the debugger
--- a/src/share/vm/oops/klass.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/oops/klass.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -148,7 +148,9 @@
   }
 
   kl->set_java_mirror(NULL);
+#ifdef GRAAL
   kl->set_graal_mirror(NULL);
+#endif
   kl->set_modifier_flags(0);
   kl->set_layout_helper(Klass::_lh_neutral_value);
   kl->set_name(NULL);
--- a/src/share/vm/oops/klassKlass.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/oops/klassKlass.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -73,7 +73,9 @@
   MarkSweep::mark_and_push(k->adr_secondary_super_cache());
   MarkSweep::mark_and_push(k->adr_secondary_supers());
   MarkSweep::mark_and_push(k->adr_java_mirror());
+#ifdef GRAAL
   MarkSweep::mark_and_push(k->adr_graal_mirror());
+#endif
   // We follow the subklass and sibling links at the end of the
   // marking phase, since otherwise following them will prevent
   // class unloading (all classes are transitively linked from
@@ -93,7 +95,9 @@
   PSParallelCompact::mark_and_push(cm, k->adr_secondary_super_cache());
   PSParallelCompact::mark_and_push(cm, k->adr_secondary_supers());
   PSParallelCompact::mark_and_push(cm, k->adr_java_mirror());
+#ifdef GRAAL
   PSParallelCompact::mark_and_push(cm, k->adr_graal_mirror());
+#endif
   // We follow the subklass and sibling links at the end of the
   // marking phase, since otherwise following them will prevent
   // class unloading (all classes are transitively linked from
@@ -113,7 +117,9 @@
   blk->do_oop(k->adr_secondary_super_cache());
   blk->do_oop(k->adr_secondary_supers());
   blk->do_oop(k->adr_java_mirror());
+#ifdef GRAAL
   blk->do_oop(k->adr_graal_mirror());
+#endif
   // The following are in the perm gen and are treated
   // specially in a later phase of a perm gen collection; ...
   assert(oop(k)->is_perm(), "should be in perm");
@@ -147,8 +153,10 @@
   if (mr.contains(adr)) blk->do_oop(adr);
   adr = k->adr_java_mirror();
   if (mr.contains(adr)) blk->do_oop(adr);
+#ifdef GRAAL
   adr = k->adr_graal_mirror();
   if (mr.contains(adr)) blk->do_oop(adr);
+#endif
   // The following are "weak links" in the perm gen and are
   // treated specially in a later phase of a perm gen collection.
   assert(oop(k)->is_perm(), "should be in perm");
@@ -177,7 +185,9 @@
   MarkSweep::adjust_pointer(k->adr_secondary_super_cache());
   MarkSweep::adjust_pointer(k->adr_secondary_supers());
   MarkSweep::adjust_pointer(k->adr_java_mirror());
+#ifdef GRAAL
   MarkSweep::adjust_pointer(k->adr_graal_mirror());
+#endif
   MarkSweep::adjust_pointer(k->adr_subklass());
   MarkSweep::adjust_pointer(k->adr_next_sibling());
   return size;
--- a/src/share/vm/oops/methodDataKlass.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/oops/methodDataKlass.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -35,7 +35,6 @@
 #include "oops/oop.inline2.hpp"
 #include "runtime/handles.inline.hpp"
 #ifndef SERIALGC
-#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
 #include "oops/oop.pcgc.inline.hpp"
 #endif
@@ -85,7 +84,9 @@
 
   obj->follow_header();
   MarkSweep::mark_and_push(m->adr_method());
+#ifdef GRAAL
   MarkSweep::mark_and_push(m->adr_graal_mirror());
+#endif
   ResourceMark rm;
   for (ProfileData* data = m->first_data();
        m->is_valid(data);
@@ -102,7 +103,9 @@
 
   obj->follow_header(cm);
   PSParallelCompact::mark_and_push(cm, m->adr_method());
+#ifdef GRAAL
   PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror());
+#endif
   ResourceMark rm;
   for (ProfileData* data = m->first_data();
        m->is_valid(data);
@@ -122,7 +125,9 @@
 
   obj->oop_iterate_header(blk);
   blk->do_oop(m->adr_method());
+#ifdef GRAAL
   blk->do_oop(m->adr_graal_mirror());
+#endif
   ResourceMark rm;
   for (ProfileData* data = m->first_data();
        m->is_valid(data);
@@ -144,11 +149,12 @@
   if (mr.contains(adr)) {
     blk->do_oop(m->adr_method());
   }
+#ifdef GRAAL
   adr = m->adr_graal_mirror();
   if(mr.contains(adr)) {
     blk->do_oop(m->adr_graal_mirror());
   }
-
+#endif
   ResourceMark rm;
   for (ProfileData* data = m->first_data();
        m->is_valid(data);
@@ -167,7 +173,9 @@
 
   obj->adjust_header();
   MarkSweep::adjust_pointer(m->adr_method());
+#ifdef GRAAL
   MarkSweep::adjust_pointer(m->adr_graal_mirror());
+#endif
   ResourceMark rm;
   ProfileData* data;
   for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) {
@@ -183,11 +191,12 @@
   methodDataOop m = methodDataOop(obj);
   // This should never point into the young gen.
   assert(!PSScavenge::should_scavenge(m->adr_method()), "Sanity");
- 
+#ifdef GRAAL
   oop* adr = m->adr_graal_mirror();
   if(PSScavenge::should_scavenge(adr)) {
     pm->claim_or_forward_depth(adr);
   }
+#endif
 }
 
 int methodDataKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
@@ -195,7 +204,9 @@
   methodDataOop m = methodDataOop(obj);
 
   PSParallelCompact::adjust_pointer(m->adr_method());
+#ifdef GRAAL
   PSParallelCompact::adjust_pointer(m->adr_graal_mirror());
+#endif
 
   ResourceMark rm;
   ProfileData* data;
--- a/src/share/vm/oops/methodDataOop.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/oops/methodDataOop.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -761,7 +761,9 @@
   ResourceMark rm;
   // Set the method back-pointer.
   _method = method();
+#ifdef GRAAL
   _graal_mirror = NULL;
+#endif
 
   if (TieredCompilation) {
     _invocation_counter.init();
--- a/src/share/vm/oops/methodKlass.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/oops/methodKlass.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -103,7 +103,9 @@
   m->invocation_counter()->init();
   m->backedge_counter()->init();
   m->clear_number_of_breakpoints();
+#ifdef GRAAL
   m->set_graal_mirror(NULL);
+#endif
 
 #ifdef TIERED
   m->set_rate(0);
@@ -129,7 +131,9 @@
   // know that Universe::methodKlassObj never moves.
   MarkSweep::mark_and_push(m->adr_constMethod());
   MarkSweep::mark_and_push(m->adr_constants());
+#ifdef GRAAL
   MarkSweep::mark_and_push(m->adr_graal_mirror());
+#endif
   if (m->method_data() != NULL) {
     MarkSweep::mark_and_push(m->adr_method_data());
   }
@@ -144,10 +148,14 @@
   // know that Universe::methodKlassObj never moves.
   PSParallelCompact::mark_and_push(cm, m->adr_constMethod());
   PSParallelCompact::mark_and_push(cm, m->adr_constants());
+#ifdef GRAAL
   PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror());
+#endif
+#ifdef COMPILER2
   if (m->method_data() != NULL) {
     PSParallelCompact::mark_and_push(cm, m->adr_method_data());
   }
+#endif
 }
 #endif // SERIALGC
 
@@ -161,7 +169,9 @@
   // know that Universe::methodKlassObj never moves
   blk->do_oop(m->adr_constMethod());
   blk->do_oop(m->adr_constants());
+#ifdef GRAAL
   blk->do_oop(m->adr_graal_mirror());
+#endif
   if (m->method_data() != NULL) {
     blk->do_oop(m->adr_method_data());
   }
@@ -182,8 +192,10 @@
   if (mr.contains(adr)) blk->do_oop(adr);
   adr = m->adr_constants();
   if (mr.contains(adr)) blk->do_oop(adr);
+#ifdef GRAAL
   adr = m->adr_graal_mirror();
   if (mr.contains(adr)) blk->do_oop(adr);
+#endif
   if (m->method_data() != NULL) {
     adr = m->adr_method_data();
     if (mr.contains(adr)) blk->do_oop(adr);
@@ -202,7 +214,9 @@
   // know that Universe::methodKlassObj never moves.
   MarkSweep::adjust_pointer(m->adr_constMethod());
   MarkSweep::adjust_pointer(m->adr_constants());
+#ifdef GRAAL
   MarkSweep::adjust_pointer(m->adr_graal_mirror());
+#endif
   if (m->method_data() != NULL) {
     MarkSweep::adjust_pointer(m->adr_method_data());
   }
@@ -219,10 +233,14 @@
   methodOop m = methodOop(obj);
   PSParallelCompact::adjust_pointer(m->adr_constMethod());
   PSParallelCompact::adjust_pointer(m->adr_constants());
+#ifdef GRAAL
   PSParallelCompact::adjust_pointer(m->adr_graal_mirror());
+#endif
+#ifdef COMPILER2
   if (m->method_data() != NULL) {
     PSParallelCompact::adjust_pointer(m->adr_method_data());
   }
+#endif // COMPILER2
   return m->object_size();
 }
 #endif // SERIALGC
--- a/src/share/vm/oops/methodOop.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/oops/methodOop.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -207,12 +207,6 @@
 }
 
 address methodOopDesc::bcp_from(int bci) const {
-#ifdef ASSERT
-  if (!((is_native() && bci == 0)  || (!is_native() && 0 <= bci && bci < code_size()))) {
-    char buf[1024];
-    tty->print_cr("bci: %i, size: %i, method: %s", bci, code_size(), const_cast<methodOop>(this)->name_and_sig_as_C_string(buf, 1024));
-  }
-#endif // ASSERT
   assert((is_native() && bci == 0)  || (!is_native() && 0 <= bci && bci < code_size()), "illegal bci");
   address bcp = code_base() + bci;
   assert(is_native() && bcp == code_base() || contains(bcp), "bcp doesn't belong to this method");
--- a/src/share/vm/runtime/rframe.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/runtime/rframe.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -152,11 +152,11 @@
 
 void RFrame::print(const char* kind) {
 #ifndef PRODUCT
-//#ifdef COMPILER2
+#if defined(COMPILER2) || defined(GRAAL)
   int cnt = top_method()->interpreter_invocation_count();
-//#else
-//  int cnt = top_method()->invocation_count();
-//#endif
+#else
+  int cnt = top_method()->invocation_count();
+#endif
   tty->print("%3d %s ", _num, is_interpreted() ? "I" : "C");
   top_method()->print_short_name(tty);
   tty->print_cr(": inv=%5d(%d) cst=%4d", _invocations, cnt, cost());
--- a/src/share/vm/runtime/sharedRuntime.cpp	Mon Feb 27 18:31:27 2012 +0100
+++ b/src/share/vm/runtime/sharedRuntime.cpp	Mon Feb 27 21:43:51 2012 +0100
@@ -811,10 +811,6 @@
 {
   address target_pc = NULL;
 
-  if (TraceSignals) {
-    tty->print_cr("Searching for continuation for implicit exception at %d!", pc);
-  }
-
   if (Interpreter::contains(pc)) {
 #ifdef CC_INTERP
     // C++ interpreter doesn't throw implicit exceptions
@@ -2823,7 +2819,7 @@
   // ResourceObject, so do not put any ResourceMarks in here.
   char *s = sig->as_C_string();
   int len = (int)strlen(s);
-  s++; len--;                  // Skip opening paren
+  *s++; len--;                  // Skip opening paren
   char *t = s+len;
   while( *(--t) != ')' ) ;      // Find close paren