src/share/vm/runtime/sharedRuntime.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/runtime/sharedRuntime.cpp	Thu Jun  2 14:57:23 2011
--- new/src/share/vm/runtime/sharedRuntime.cpp	Thu Jun  2 14:57:23 2011

*** 78,97 **** --- 78,161 ---- #endif #ifdef COMPILER1 #include "c1/c1_Runtime1.hpp" #endif + // Shared stub locations + RuntimeStub* SharedRuntime::_wrong_method_blob; + RuntimeStub* SharedRuntime::_ic_miss_blob; + RuntimeStub* SharedRuntime::_resolve_opt_virtual_call_blob; + RuntimeStub* SharedRuntime::_resolve_virtual_call_blob; + RuntimeStub* SharedRuntime::_resolve_static_call_blob; + + DeoptimizationBlob* SharedRuntime::_deopt_blob; + RicochetBlob* SharedRuntime::_ricochet_blob; + + SafepointBlob* SharedRuntime::_polling_page_safepoint_handler_blob; + SafepointBlob* SharedRuntime::_polling_page_return_handler_blob; + + #ifdef COMPILER2 + UncommonTrapBlob* SharedRuntime::_uncommon_trap_blob; + #endif // COMPILER2 + + + //----------------------------generate_stubs----------------------------------- + void SharedRuntime::generate_stubs() { + _wrong_method_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::handle_wrong_method), "wrong_method_stub"); + _ic_miss_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::handle_wrong_method_ic_miss), "ic_miss_stub"); + _resolve_opt_virtual_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_opt_virtual_call_C), "resolve_opt_virtual_call"); + _resolve_virtual_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_virtual_call_C), "resolve_virtual_call"); + _resolve_static_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_static_call_C), "resolve_static_call"); + + _polling_page_safepoint_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), false); + _polling_page_return_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), true); + + generate_ricochet_blob(); + generate_deopt_blob(); + + #ifdef COMPILER2 + generate_uncommon_trap_blob(); + #endif // COMPILER2 + } + + //----------------------------generate_ricochet_blob--------------------------- + void SharedRuntime::generate_ricochet_blob() { + if (!EnableInvokeDynamic) return; // leave it as a null + + #ifndef TARGET_ARCH_NYI_6939861 + // allocate space for the code + ResourceMark rm; + // setup code generation tools + CodeBuffer buffer("ricochet_blob", 256, 256); // XXX x86 LP64L: 512, 512 + MacroAssembler* masm = new MacroAssembler(&buffer); + + int bounce_offset = -1, exception_offset = -1, frame_size_in_words = -1; + MethodHandles::RicochetFrame::generate_ricochet_blob(masm, &bounce_offset, &exception_offset, &frame_size_in_words); + + // ------------- + // make sure all code is generated + masm->flush(); + + // failed to generate? + if (bounce_offset < 0 || exception_offset < 0 || frame_size_in_words < 0) { + assert(false, "bad ricochet blob"); + return; + } + + _ricochet_blob = RicochetBlob::create(&buffer, bounce_offset, exception_offset, frame_size_in_words); + #endif + } + + #include <math.h> HS_DTRACE_PROBE_DECL4(hotspot, object__alloc, Thread*, char*, int, size_t); HS_DTRACE_PROBE_DECL7(hotspot, method__entry, int, char*, int, char*, int, char*, int); HS_DTRACE_PROBE_DECL7(hotspot, method__return, int, char*, int, char*, int, char*, int); RicochetBlob* SharedRuntime::_ricochet_blob = NULL; // Implementation of SharedRuntime #ifndef PRODUCT // For statistics int SharedRuntime::_ic_miss_ctr = 0;
*** 141,150 **** --- 205,215 ---- int SharedRuntime::_ICmiss_index = 0; int SharedRuntime::_ICmiss_count[SharedRuntime::maxICmiss_count]; address SharedRuntime::_ICmiss_at[SharedRuntime::maxICmiss_count]; + void SharedRuntime::trace_ic_miss(address at) { for (int i = 0; i < _ICmiss_index; i++) { if (_ICmiss_at[i] == at) { _ICmiss_count[i]++; return;

src/share/vm/runtime/sharedRuntime.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File