# HG changeset patch # User Thomas Wuerthinger # Date 1330375431 -3600 # Node ID 18a5539bf19bbcdf42b5592c94db49baa362cf47 # Parent 99d3d8a7225248c6a446a418bd6f9249c9f1f0b2 More diff vs hsx24 optimizations. diff -r 99d3d8a72252 -r 18a5539bf19b src/cpu/sparc/vm/methodHandles_sparc.cpp --- 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); diff -r 99d3d8a72252 -r 18a5539bf19b src/cpu/x86/vm/sharedRuntime_x86_64.cpp --- 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))); diff -r 99d3d8a72252 -r 18a5539bf19b src/os/windows/vm/os_windows.cpp --- 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 diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/compiler/oopMap.cpp --- 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", diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/interpreter/interpreterRuntime.cpp --- 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 diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/oops/klass.cpp --- 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); diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/oops/klassKlass.cpp --- 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; diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/oops/methodDataKlass.cpp --- 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; diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/oops/methodDataOop.cpp --- 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(); diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/oops/methodKlass.cpp --- 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 diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/oops/methodOop.cpp --- 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(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"); diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/runtime/rframe.cpp --- 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()); diff -r 99d3d8a72252 -r 18a5539bf19b src/share/vm/runtime/sharedRuntime.cpp --- 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