< 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 >