src/hotspot/share/c1/c1_CodeStubs.hpp
changeset 50094 2f79462aab9b
parent 49906 4bb58f644e4e
child 51333 f6641fcf7b7e
equal deleted inserted replaced
50093:55153a374d18 50094:2f79462aab9b
   145 // configured to throw IndexOutOfBoundsException in constructor
   145 // configured to throw IndexOutOfBoundsException in constructor
   146 class RangeCheckStub: public CodeStub {
   146 class RangeCheckStub: public CodeStub {
   147  private:
   147  private:
   148   CodeEmitInfo* _info;
   148   CodeEmitInfo* _info;
   149   LIR_Opr       _index;
   149   LIR_Opr       _index;
       
   150   LIR_Opr       _array;
   150   bool          _throw_index_out_of_bounds_exception;
   151   bool          _throw_index_out_of_bounds_exception;
   151 
   152 
   152  public:
   153  public:
   153   RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, bool throw_index_out_of_bounds_exception = false);
   154   // For ArrayIndexOutOfBoundsException.
       
   155   RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, LIR_Opr array);
       
   156   // For IndexOutOfBoundsException.
       
   157   RangeCheckStub(CodeEmitInfo* info, LIR_Opr index);
   154   virtual void emit_code(LIR_Assembler* e);
   158   virtual void emit_code(LIR_Assembler* e);
   155   virtual CodeEmitInfo* info() const             { return _info; }
   159   virtual CodeEmitInfo* info() const             { return _info; }
   156   virtual bool is_exception_throw_stub() const   { return true; }
   160   virtual bool is_exception_throw_stub() const   { return true; }
   157   virtual bool is_range_check_stub() const       { return true; }
   161   virtual bool is_range_check_stub() const       { return true; }
   158   virtual void visit(LIR_OpVisitState* visitor) {
   162   virtual void visit(LIR_OpVisitState* visitor) {
   159     visitor->do_slow_case(_info);
   163     visitor->do_slow_case(_info);
   160     visitor->do_input(_index);
   164     visitor->do_input(_index);
       
   165     if (_array) { visitor->do_input(_array); }
   161   }
   166   }
   162 #ifndef PRODUCT
   167 #ifndef PRODUCT
   163   virtual void print_name(outputStream* out) const { out->print("RangeCheckStub"); }
   168   virtual void print_name(outputStream* out) const { out->print("RangeCheckStub"); }
   164 #endif // PRODUCT
   169 #endif // PRODUCT
   165 };
   170 };