src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 8031320_8u Cdiff src/share/vm/ci/ciEnv.cpp

src/share/vm/ci/ciEnv.cpp

Print this page
rev 5968 : 8031320: Use Intel RTM instructions for locks
Summary: Use RTM for inflated locks and stack locks.
Reviewed-by: iveresov, twisti, roland, dcubed

*** 924,934 **** ExceptionHandlerTable* handler_table, ImplicitExceptionTable* inc_table, AbstractCompiler* compiler, int comp_level, bool has_unsafe_access, ! bool has_wide_vectors) { VM_ENTRY_MARK; nmethod* nm = NULL; { // To prevent compile queue updates. MutexLocker locker(MethodCompileQueue_lock, THREAD); --- 924,935 ---- ExceptionHandlerTable* handler_table, ImplicitExceptionTable* inc_table, AbstractCompiler* compiler, int comp_level, bool has_unsafe_access, ! bool has_wide_vectors, ! RTMState rtm_state) { VM_ENTRY_MARK; nmethod* nm = NULL; { // To prevent compile queue updates. MutexLocker locker(MethodCompileQueue_lock, THREAD);
*** 971,980 **** --- 972,990 ---- validate_compile_task_dependencies(target); } methodHandle method(THREAD, target->get_Method()); + #if INCLUDE_RTM_OPT + if (!failing() && (rtm_state != NoRTM) && + (method()->method_data() != NULL) && + (method()->method_data()->rtm_state() != rtm_state)) { + // Preemptive decompile if rtm state was changed. + record_failure("RTM state change invalidated rtm code"); + } + #endif + if (failing()) { // While not a true deoptimization, it is a preemptive decompile. MethodData* mdo = method()->method_data(); if (mdo != NULL) { mdo->inc_decompile_count();
*** 997,1007 **** orig_pc_offset, debug_info(), dependencies(), code_buffer, frame_words, oop_map_set, handler_table, inc_table, compiler, comp_level); ! // Free codeBlobs code_buffer->free_blob(); if (nm != NULL) { nm->set_has_unsafe_access(has_unsafe_access); --- 1007,1019 ---- orig_pc_offset, debug_info(), dependencies(), code_buffer, frame_words, oop_map_set, handler_table, inc_table, compiler, comp_level); ! #if INCLUDE_RTM_OPT ! nm->set_rtm_state(rtm_state); ! #endif // Free codeBlobs code_buffer->free_blob(); if (nm != NULL) { nm->set_has_unsafe_access(has_unsafe_access);
src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File