< prev index next >

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

Print this page
rev 55609 : Eliminate extra forwarding pointer per object

@@ -124,26 +124,29 @@
   LIR_Opr _addr;
   LIR_Opr _cmp_value;
   LIR_Opr _new_value;
   LIR_Opr _tmp1;
   LIR_Opr _tmp2;
+  LIR_Opr _tmp3;
 
 public:
   LIR_OpShenandoahCompareAndSwap(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
-                                 LIR_Opr t1, LIR_Opr t2, LIR_Opr result)
+                                 LIR_Opr t1, LIR_Opr t2, LIR_Opr t3, LIR_Opr result)
     : LIR_Op(lir_none, result, NULL)  // no info
     , _addr(addr)
     , _cmp_value(cmp_value)
     , _new_value(new_value)
     , _tmp1(t1)
-    , _tmp2(t2)                                  { }
+    , _tmp2(t2)
+    , _tmp3(t3)                                  { }
 
   LIR_Opr addr()        const                    { return _addr;  }
   LIR_Opr cmp_value()   const                    { return _cmp_value; }
   LIR_Opr new_value()   const                    { return _new_value; }
   LIR_Opr tmp1()        const                    { return _tmp1;      }
   LIR_Opr tmp2()        const                    { return _tmp2;      }
+  LIR_Opr tmp3()        const                    { return _tmp3;      }
 
   virtual void visit(LIR_OpVisitState* state) {
       assert(_addr->is_valid(),      "used");
       assert(_cmp_value->is_valid(), "used");
       assert(_new_value->is_valid(), "used");

@@ -154,10 +157,11 @@
                                     state->do_temp(_cmp_value);
                                     state->do_input(_new_value);
                                     state->do_temp(_new_value);
       if (_tmp1->is_valid())        state->do_temp(_tmp1);
       if (_tmp2->is_valid())        state->do_temp(_tmp2);
+      if (_tmp3->is_valid())        state->do_temp(_tmp3);
       if (_result->is_valid())      state->do_output(_result);
   }
 
   virtual void emit_code(LIR_Assembler* masm);
 

@@ -165,10 +169,11 @@
     addr()->print(out);      out->print(" ");
     cmp_value()->print(out); out->print(" ");
     new_value()->print(out); out->print(" ");
     tmp1()->print(out);      out->print(" ");
     tmp2()->print(out);      out->print(" ");
+    tmp3()->print(out);      out->print(" ");
   }
 #ifndef PRODUCT
   virtual const char* name() const {
     return "shenandoah_cas_obj";
   }
< prev index next >