< prev index next >

src/hotspot/share/c1/c1_CodeStubs.hpp

Print this page
@@ -241,10 +241,87 @@
    virtual void print_name(outputStream* out) const { out->print("ImplicitNullCheckStub"); }
  #endif // PRODUCT
  };
  
  
+ class LoadFlattenedArrayStub: public CodeStub {
+  private:
+   LIR_Opr          _array;
+   LIR_Opr          _index;
+   LIR_Opr          _result;
+   LIR_Opr          _scratch_reg;
+   CodeEmitInfo*    _info;
+ 
+  public:
+   LoadFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr result, CodeEmitInfo* info);
+   virtual void emit_code(LIR_Assembler* e);
+   virtual CodeEmitInfo* info() const             { return _info; }
+   virtual void visit(LIR_OpVisitState* visitor) {
+     visitor->do_slow_case(_info);
+     visitor->do_input(_array);
+     visitor->do_input(_index);
+     visitor->do_output(_result);
+     if (_scratch_reg != LIR_OprFact::illegalOpr) {
+       visitor->do_temp(_scratch_reg);
+     }
+   }
+ 
+ #ifndef PRODUCT
+   virtual void print_name(outputStream* out) const { out->print("LoadFlattenedArrayStub"); }
+ #endif // PRODUCT
+ };
+ 
+ 
+ class StoreFlattenedArrayStub: public CodeStub {
+  private:
+   LIR_Opr          _array;
+   LIR_Opr          _index;
+   LIR_Opr          _value;
+   LIR_Opr          _scratch_reg;
+   CodeEmitInfo*    _info;
+ 
+  public:
+   StoreFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr value, CodeEmitInfo* info);
+   virtual void emit_code(LIR_Assembler* e);
+   virtual CodeEmitInfo* info() const             { return _info; }
+   virtual void visit(LIR_OpVisitState* visitor) {
+     visitor->do_slow_case(_info);
+     visitor->do_input(_array);
+     visitor->do_input(_index);
+     visitor->do_input(_value);
+     if (_scratch_reg != LIR_OprFact::illegalOpr) {
+       visitor->do_temp(_scratch_reg);
+     }
+   }
+ #ifndef PRODUCT
+   virtual void print_name(outputStream* out) const { out->print("StoreFlattenedArrayStub"); }
+ #endif // PRODUCT
+ };
+ 
+ class SubstitutabilityCheckStub: public CodeStub {
+  private:
+   LIR_Opr          _left;
+   LIR_Opr          _right;
+   LIR_Opr          _scratch_reg;
+   CodeEmitInfo*    _info;
+  public:
+   SubstitutabilityCheckStub(LIR_Opr left, LIR_Opr right, CodeEmitInfo* info);
+   virtual void emit_code(LIR_Assembler* e);
+   virtual CodeEmitInfo* info() const             { return _info; }
+   virtual void visit(LIR_OpVisitState* visitor) {
+     visitor->do_slow_case(_info);
+     visitor->do_input(_left);
+     visitor->do_input(_right);
+     if (_scratch_reg != LIR_OprFact::illegalOpr) {
+       visitor->do_temp(_scratch_reg);
+     }
+   }
+ #ifndef PRODUCT
+   virtual void print_name(outputStream* out) const { out->print("SubstitutabilityCheckStub"); }
+ #endif // PRODUCT
+ };
+ 
  class NewInstanceStub: public CodeStub {
   private:
    ciInstanceKlass* _klass;
    LIR_Opr          _klass_reg;
    LIR_Opr          _result;

@@ -293,13 +370,13 @@
   private:
    LIR_Opr        _klass_reg;
    LIR_Opr        _length;
    LIR_Opr        _result;
    CodeEmitInfo*  _info;
- 
+   bool           _is_null_free;
   public:
-   NewObjectArrayStub(LIR_Opr klass_reg, LIR_Opr length, LIR_Opr result, CodeEmitInfo* info);
+   NewObjectArrayStub(LIR_Opr klass_reg, LIR_Opr length, LIR_Opr result, CodeEmitInfo* info, bool is_null_free);
    virtual void emit_code(LIR_Assembler* e);
    virtual CodeEmitInfo* info() const             { return _info; }
    virtual void visit(LIR_OpVisitState* visitor) {
      visitor->do_slow_case(_info);
      visitor->do_input(_klass_reg);

@@ -330,19 +407,24 @@
  
  
  class MonitorEnterStub: public MonitorAccessStub {
   private:
    CodeEmitInfo* _info;
+   CodeStub* _throw_imse_stub;
+   LIR_Opr _scratch_reg;
  
   public:
-   MonitorEnterStub(LIR_Opr obj_reg, LIR_Opr lock_reg, CodeEmitInfo* info);
+   MonitorEnterStub(LIR_Opr obj_reg, LIR_Opr lock_reg, CodeEmitInfo* info, CodeStub* throw_imse_stub = NULL, LIR_Opr scratch_reg = LIR_OprFact::illegalOpr);
  
    virtual void emit_code(LIR_Assembler* e);
    virtual CodeEmitInfo* info() const             { return _info; }
    virtual void visit(LIR_OpVisitState* visitor) {
      visitor->do_input(_obj_reg);
      visitor->do_input(_lock_reg);
+     if (_scratch_reg != LIR_OprFact::illegalOpr) {
+       visitor->do_temp(_scratch_reg);
+     }
      visitor->do_slow_case(_info);
    }
  #ifndef PRODUCT
    virtual void print_name(outputStream* out) const { out->print("MonitorEnterStub"); }
  #endif // PRODUCT
< prev index next >