< prev index next >

src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp

Print this page

        

*** 21,33 **** --- 21,35 ---- * questions. * */ #include "precompiled.hpp" + #include "asm/macroAssembler.inline.hpp" #include "gc/shared/barrierSet.hpp" #include "gc/shared/barrierSetAssembler.hpp" #include "gc/shared/barrierSetNMethod.hpp" + #include "gc/shared/barrierSetRuntime.hpp" #include "gc/shared/collectedHeap.hpp" #include "interpreter/interp_masm.hpp" #include "memory/universe.hpp" #include "runtime/jniHandles.hpp" #include "runtime/sharedRuntime.hpp"
*** 193,202 **** --- 195,218 ---- break; default: Unimplemented(); } } + void BarrierSetAssembler::value_copy(MacroAssembler* masm, DecoratorSet decorators, + Register src, Register dst, Register value_klass) { + // value_copy implementation is fairly complex, and there are not any + // "short-cuts" to be made from asm. What there is, appears to have the same + // cost in C++, so just "call_VM_leaf" for now rather than maintain hundreds + // of hand-rolled instructions... + if (decorators & IS_DEST_UNINITIALIZED) { + __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSetRuntime::value_copy_is_dest_uninitialized), src, dst, value_klass); + } else { + __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSetRuntime::value_copy), src, dst, value_klass); + } + } + + #ifndef _LP64 void BarrierSetAssembler::obj_equals(MacroAssembler* masm, Address obj1, jobject obj2) { __ cmpoop_raw(obj1, obj2); }
< prev index next >