< prev index next >

src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp

Print this page
rev 51517 : 8207169: X86: Modularize cmpxchg-oop assembler for C1 and C2

*** 31,40 **** --- 31,41 ---- #include "c1/c1_Runtime1.hpp" #include "c1/c1_ValueStack.hpp" #include "ci/ciArray.hpp" #include "ci/ciObjArrayKlass.hpp" #include "ci/ciTypeArrayKlass.hpp" + #include "gc/shared/barrierSetAssembler.hpp" #include "gc/shared/c1/barrierSetC1.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "vmreg_x86.inline.hpp"
*** 658,668 **** LIR_Opr LIRGenerator::atomic_cmpxchg(BasicType type, LIR_Opr addr, LIRItem& cmp_value, LIRItem& new_value) { LIR_Opr ill = LIR_OprFact::illegalOpr; // for convenience if (type == T_OBJECT || type == T_ARRAY) { cmp_value.load_item_force(FrameMap::rax_oop_opr); new_value.load_item(); ! __ cas_obj(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), ill, ill); } else if (type == T_INT) { cmp_value.load_item_force(FrameMap::rax_opr); new_value.load_item(); __ cas_int(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), ill, ill); } else if (type == T_LONG) { --- 659,675 ---- LIR_Opr LIRGenerator::atomic_cmpxchg(BasicType type, LIR_Opr addr, LIRItem& cmp_value, LIRItem& new_value) { LIR_Opr ill = LIR_OprFact::illegalOpr; // for convenience if (type == T_OBJECT || type == T_ARRAY) { cmp_value.load_item_force(FrameMap::rax_oop_opr); new_value.load_item(); ! LIR_Opr tmp1 = ill; ! LIR_Opr tmp2 = ill; ! if (BarrierSet::barrier_set()->barrier_set_assembler()->handle_cmpxchg_oop()) { ! tmp1 = new_register(T_OBJECT); ! tmp2 = new_register(T_OBJECT); ! } ! __ cas_obj(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), tmp1, tmp2); } else if (type == T_INT) { cmp_value.load_item_force(FrameMap::rax_opr); new_value.load_item(); __ cas_int(addr->as_address_ptr()->base(), cmp_value.result(), new_value.result(), ill, ill); } else if (type == T_LONG) {
< prev index next >