< prev index next >

src/hotspot/share/interpreter/templateInterpreter.cpp

Print this page
rev 55577 : imported patch 8227117.cr0
rev 55579 : [mq]: 8227338.cr0

*** 29,39 **** --- 29,41 ---- #include "interpreter/templateInterpreter.hpp" #include "interpreter/templateInterpreterGenerator.hpp" #include "interpreter/templateTable.hpp" #include "logging/log.hpp" #include "memory/resourceArea.hpp" + #include "runtime/safepoint.hpp" #include "runtime/timerTrace.hpp" + #include "utilities/copy.hpp" #ifndef CC_INTERP # define __ _masm->
*** 273,287 **** return (int)state; } //------------------------------------------------------------------------------------------------------------------------ ! // Safepoint suppport static inline void copy_table(address* from, address* to, int size) { ! // Copy non-overlapping tables. The copy has to occur word wise for MT safety. while (size-- > 0) *to++ = *from++; } void TemplateInterpreter::notice_safepoints() { if (!_notice_safepoints) { log_debug(interpreter, safepoint)("switching active_table to safept_table."); --- 275,295 ---- return (int)state; } //------------------------------------------------------------------------------------------------------------------------ ! // Safepoint support static inline void copy_table(address* from, address* to, int size) { ! // Copy non-overlapping tables. ! if (SafepointSynchronize::is_at_safepoint()) { ! // Nothing is using the table at a safepoint so skip atomic word copy. while (size-- > 0) *to++ = *from++; + } else { + // Use atomic word copy when not at a safepoint for safety. + Copy::disjoint_words_atomic((HeapWord*)from, (HeapWord*)to, (size_t)size); + } } void TemplateInterpreter::notice_safepoints() { if (!_notice_safepoints) { log_debug(interpreter, safepoint)("switching active_table to safept_table.");
< prev index next >