214 class ImplicitNullCheckStub: public CodeStub { 215 private: 216 CodeEmitInfo* _info; 217 int _offset; 218 219 public: 220 ImplicitNullCheckStub(int offset, CodeEmitInfo* info) 221 : _info(info), _offset(offset) { 222 } 223 virtual void emit_code(LIR_Assembler* e); 224 virtual CodeEmitInfo* info() const { return _info; } 225 virtual bool is_exception_throw_stub() const { return true; } 226 virtual void visit(LIR_OpVisitState* visitor) { 227 visitor->do_slow_case(_info); 228 } 229 #ifndef PRODUCT 230 virtual void print_name(outputStream* out) const { out->print("ImplicitNullCheckStub"); } 231 #endif // PRODUCT 232 }; 233 234 235 class NewInstanceStub: public CodeStub { 236 private: 237 ciInstanceKlass* _klass; 238 LIR_Opr _klass_reg; 239 LIR_Opr _result; 240 CodeEmitInfo* _info; 241 Runtime1::StubID _stub_id; 242 243 public: 244 NewInstanceStub(LIR_Opr klass_reg, LIR_Opr result, ciInstanceKlass* klass, CodeEmitInfo* info, Runtime1::StubID stub_id); 245 virtual void emit_code(LIR_Assembler* e); 246 virtual CodeEmitInfo* info() const { return _info; } 247 virtual void visit(LIR_OpVisitState* visitor) { 248 visitor->do_slow_case(_info); 249 visitor->do_input(_klass_reg); 250 visitor->do_output(_result); 251 } 252 #ifndef PRODUCT 253 virtual void print_name(outputStream* out) const { out->print("NewInstanceStub"); } | 214 class ImplicitNullCheckStub: public CodeStub { 215 private: 216 CodeEmitInfo* _info; 217 int _offset; 218 219 public: 220 ImplicitNullCheckStub(int offset, CodeEmitInfo* info) 221 : _info(info), _offset(offset) { 222 } 223 virtual void emit_code(LIR_Assembler* e); 224 virtual CodeEmitInfo* info() const { return _info; } 225 virtual bool is_exception_throw_stub() const { return true; } 226 virtual void visit(LIR_OpVisitState* visitor) { 227 visitor->do_slow_case(_info); 228 } 229 #ifndef PRODUCT 230 virtual void print_name(outputStream* out) const { out->print("ImplicitNullCheckStub"); } 231 #endif // PRODUCT 232 }; 233 234 class LoadFlattenedArrayStub: public CodeStub { 235 private: 236 LIR_Opr _array; 237 LIR_Opr _index; 238 LIR_Opr _result; 239 CodeEmitInfo* _info; 240 241 public: 242 LoadFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr result, CodeEmitInfo* info); 243 virtual void emit_code(LIR_Assembler* e); 244 virtual CodeEmitInfo* info() const { return _info; } 245 virtual void visit(LIR_OpVisitState* visitor) { 246 visitor->do_slow_case(_info); 247 visitor->do_input(_array); 248 visitor->do_input(_index); 249 visitor->do_output(_result); 250 } 251 #ifndef PRODUCT 252 virtual void print_name(outputStream* out) const { out->print("LoadFlattenedArrayStub"); } 253 #endif // PRODUCT 254 }; 255 256 257 258 class NewInstanceStub: public CodeStub { 259 private: 260 ciInstanceKlass* _klass; 261 LIR_Opr _klass_reg; 262 LIR_Opr _result; 263 CodeEmitInfo* _info; 264 Runtime1::StubID _stub_id; 265 266 public: 267 NewInstanceStub(LIR_Opr klass_reg, LIR_Opr result, ciInstanceKlass* klass, CodeEmitInfo* info, Runtime1::StubID stub_id); 268 virtual void emit_code(LIR_Assembler* e); 269 virtual CodeEmitInfo* info() const { return _info; } 270 virtual void visit(LIR_OpVisitState* visitor) { 271 visitor->do_slow_case(_info); 272 visitor->do_input(_klass_reg); 273 visitor->do_output(_result); 274 } 275 #ifndef PRODUCT 276 virtual void print_name(outputStream* out) const { out->print("NewInstanceStub"); } |