< prev index next >

src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp

Print this page
rev 58025 : Shenandoah: C1: Resolve into registers of correct type

*** 116,133 **** } LIR_Opr ShenandoahBarrierSetC1::load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr) { assert(ShenandoahLoadRefBarrier, "Should be enabled"); ! obj = ensure_in_register(gen, obj); assert(obj->is_register(), "must be a register at this point"); ! addr = ensure_in_register(gen, addr); assert(addr->is_register(), "must be a register at this point"); LIR_Opr result = gen->result_register_for(obj->value_type()); __ move(obj, result); ! LIR_Opr tmp1 = gen->new_register(T_OBJECT); ! LIR_Opr tmp2 = gen->new_register(T_OBJECT); LIR_Opr thrd = gen->getThreadPointer(); LIR_Address* active_flag_addr = new LIR_Address(thrd, in_bytes(ShenandoahThreadLocalData::gc_state_offset()), --- 116,133 ---- } LIR_Opr ShenandoahBarrierSetC1::load_reference_barrier_impl(LIRGenerator* gen, LIR_Opr obj, LIR_Opr addr) { assert(ShenandoahLoadRefBarrier, "Should be enabled"); ! obj = ensure_in_register(gen, obj, T_OBJECT); assert(obj->is_register(), "must be a register at this point"); ! addr = ensure_in_register(gen, addr, T_ADDRESS); assert(addr->is_register(), "must be a register at this point"); LIR_Opr result = gen->result_register_for(obj->value_type()); __ move(obj, result); ! LIR_Opr tmp1 = gen->new_register(T_ADDRESS); ! LIR_Opr tmp2 = gen->new_register(T_ADDRESS); LIR_Opr thrd = gen->getThreadPointer(); LIR_Address* active_flag_addr = new LIR_Address(thrd, in_bytes(ShenandoahThreadLocalData::gc_state_offset()),
*** 155,188 **** __ branch_destination(slow->continuation()); return result; } ! LIR_Opr ShenandoahBarrierSetC1::ensure_in_register(LIRGenerator* gen, LIR_Opr obj) { if (!obj->is_register()) { LIR_Opr obj_reg; if (obj->is_constant()) { ! obj_reg = gen->new_register(T_OBJECT); __ move(obj, obj_reg); } else { - #ifdef AARCH64 - // AArch64 expects double-size register. obj_reg = gen->new_pointer_register(); - #else - // x86 expects single-size register. - obj_reg = gen->new_register(T_OBJECT); - #endif __ leal(obj, obj_reg); } obj = obj_reg; } return obj; } LIR_Opr ShenandoahBarrierSetC1::storeval_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators) { if (ShenandoahStoreValEnqueueBarrier) { ! obj = ensure_in_register(gen, obj); pre_barrier(gen, info, decorators, LIR_OprFact::illegalOpr, obj); } return obj; } --- 155,182 ---- __ branch_destination(slow->continuation()); return result; } ! LIR_Opr ShenandoahBarrierSetC1::ensure_in_register(LIRGenerator* gen, LIR_Opr obj, BasicType type) { if (!obj->is_register()) { LIR_Opr obj_reg; if (obj->is_constant()) { ! obj_reg = gen->new_register(type); __ move(obj, obj_reg); } else { obj_reg = gen->new_pointer_register(); __ leal(obj, obj_reg); } obj = obj_reg; } return obj; } LIR_Opr ShenandoahBarrierSetC1::storeval_barrier(LIRGenerator* gen, LIR_Opr obj, CodeEmitInfo* info, DecoratorSet decorators) { if (ShenandoahStoreValEnqueueBarrier) { ! obj = ensure_in_register(gen, obj, T_OBJECT); pre_barrier(gen, info, decorators, LIR_OprFact::illegalOpr, obj); } return obj; }
*** 219,229 **** if (ShenandoahBarrierSet::need_load_reference_barrier(decorators, type)) { if (ShenandoahBarrierSet::use_load_reference_barrier_native(decorators, type)) { BarrierSetC1::load_at_resolved(access, result); LIR_OprList* args = new LIR_OprList(); LIR_Opr addr = access.resolved_addr(); ! addr = ensure_in_register(gen, addr); args->append(result); args->append(addr); BasicTypeList signature; signature.append(T_OBJECT); signature.append(T_ADDRESS); --- 213,223 ---- if (ShenandoahBarrierSet::need_load_reference_barrier(decorators, type)) { if (ShenandoahBarrierSet::use_load_reference_barrier_native(decorators, type)) { BarrierSetC1::load_at_resolved(access, result); LIR_OprList* args = new LIR_OprList(); LIR_Opr addr = access.resolved_addr(); ! addr = ensure_in_register(gen, addr, T_ADDRESS); args->append(result); args->append(addr); BasicTypeList signature; signature.append(T_OBJECT); signature.append(T_ADDRESS);
< prev index next >