< prev index next >

src/hotspot/share/c1/c1_CodeStubs.hpp

Print this page




 134     visitor->do_slow_case();
 135     visitor->do_input(_input);
 136     visitor->do_output(_result);
 137   }
 138 #ifndef PRODUCT
 139   virtual void print_name(outputStream* out) const { out->print("ConversionStub"); }
 140 #endif // PRODUCT
 141 };
 142 
 143 
 144 // Throws ArrayIndexOutOfBoundsException by default but can be
 145 // configured to throw IndexOutOfBoundsException in constructor
 146 class RangeCheckStub: public CodeStub {
 147  private:
 148   CodeEmitInfo* _info;
 149   LIR_Opr       _index;
 150   LIR_Opr       _array;
 151   bool          _throw_index_out_of_bounds_exception;
 152 
 153  public:

 154   RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, LIR_Opr array);


 155   virtual void emit_code(LIR_Assembler* e);
 156   virtual CodeEmitInfo* info() const             { return _info; }
 157   virtual bool is_exception_throw_stub() const   { return true; }
 158   virtual bool is_range_check_stub() const       { return true; }
 159   virtual void visit(LIR_OpVisitState* visitor) {
 160     visitor->do_slow_case(_info);
 161     visitor->do_input(_index);
 162     if (_array) { visitor->do_input(_array); }
 163   }
 164 #ifndef PRODUCT
 165   virtual void print_name(outputStream* out) const { out->print("RangeCheckStub"); }
 166 #endif // PRODUCT
 167 };
 168 
 169 // stub used when predicate fails and deoptimization is needed
 170 class PredicateFailedStub: public CodeStub {
 171  private:
 172   CodeEmitInfo* _info;
 173 
 174  public:




 134     visitor->do_slow_case();
 135     visitor->do_input(_input);
 136     visitor->do_output(_result);
 137   }
 138 #ifndef PRODUCT
 139   virtual void print_name(outputStream* out) const { out->print("ConversionStub"); }
 140 #endif // PRODUCT
 141 };
 142 
 143 
 144 // Throws ArrayIndexOutOfBoundsException by default but can be
 145 // configured to throw IndexOutOfBoundsException in constructor
 146 class RangeCheckStub: public CodeStub {
 147  private:
 148   CodeEmitInfo* _info;
 149   LIR_Opr       _index;
 150   LIR_Opr       _array;
 151   bool          _throw_index_out_of_bounds_exception;
 152 
 153  public:
 154   // For ArrayIndexOutOfBoundsException.
 155   RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, LIR_Opr array);
 156   // For IndexOutOfBoundsException.
 157   RangeCheckStub(CodeEmitInfo* info, LIR_Opr index);
 158   virtual void emit_code(LIR_Assembler* e);
 159   virtual CodeEmitInfo* info() const             { return _info; }
 160   virtual bool is_exception_throw_stub() const   { return true; }
 161   virtual bool is_range_check_stub() const       { return true; }
 162   virtual void visit(LIR_OpVisitState* visitor) {
 163     visitor->do_slow_case(_info);
 164     visitor->do_input(_index);
 165     if (_array) { visitor->do_input(_array); }
 166   }
 167 #ifndef PRODUCT
 168   virtual void print_name(outputStream* out) const { out->print("RangeCheckStub"); }
 169 #endif // PRODUCT
 170 };
 171 
 172 // stub used when predicate fails and deoptimization is needed
 173 class PredicateFailedStub: public CodeStub {
 174  private:
 175   CodeEmitInfo* _info;
 176 
 177  public:


< prev index next >