< 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,18 +116,18 @@
}
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);
+ 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);
+ 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_OBJECT);
- LIR_Opr tmp2 = gen->new_register(T_OBJECT);
+ 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,34 +155,28 @@
__ branch_destination(slow->continuation());
return result;
}
-LIR_Opr ShenandoahBarrierSetC1::ensure_in_register(LIRGenerator* gen, LIR_Opr obj) {
+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(T_OBJECT);
+ obj_reg = gen->new_register(type);
__ 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);
+ obj = ensure_in_register(gen, obj, T_OBJECT);
pre_barrier(gen, info, decorators, LIR_OprFact::illegalOpr, obj);
}
return obj;
}
@@ -219,11 +213,11 @@
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);
+ 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 >