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 LoadFlattenedArrayStub: public CodeStub {
236 private:
237 LIR_Opr _array;
238 LIR_Opr _index;
239 LIR_Opr _result;
240 CodeEmitInfo* _info;
241
242 public:
243 LoadFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr result, CodeEmitInfo* info);
244 virtual void emit_code(LIR_Assembler* e);
245 virtual CodeEmitInfo* info() const { return _info; }
246 virtual void visit(LIR_OpVisitState* visitor);
247 #ifndef PRODUCT
248 virtual void print_name(outputStream* out) const { out->print("LoadFlattenedArrayStub"); }
249 #endif // PRODUCT
250 };
251
252
253 class StoreFlattenedArrayStub: public CodeStub {
254 private:
255 LIR_Opr _array;
256 LIR_Opr _index;
257 LIR_Opr _value;
258 CodeEmitInfo* _info;
259
260 public:
261 StoreFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr value, CodeEmitInfo* info);
262 virtual void emit_code(LIR_Assembler* e);
263 virtual CodeEmitInfo* info() const { return _info; }
264 virtual void visit(LIR_OpVisitState* visitor) {
265 visitor->do_slow_case(_info);
266 visitor->do_input(_array);
|
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 LoadFlattenedArrayStub: public CodeStub {
236 private:
237 LIR_Opr _array;
238 LIR_Opr _index;
239 LIR_Opr _result;
240 LIR_Opr _scratch_reg;
241 CodeEmitInfo* _info;
242
243 public:
244 LoadFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr result, CodeEmitInfo* info);
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(_array);
250 visitor->do_input(_index);
251 visitor->do_output(_result);
252 if (_scratch_reg != LIR_OprFact::illegalOpr) {
253 visitor->do_temp(_scratch_reg);
254 }
255 // Tell the register allocator that the runtime call will scratch rax.
256 visitor->do_output(FrameMap::rax_oop_opr);
257 }
258
259
260 #ifndef PRODUCT
261 virtual void print_name(outputStream* out) const { out->print("LoadFlattenedArrayStub"); }
262 #endif // PRODUCT
263 };
264
265
266 class StoreFlattenedArrayStub: public CodeStub {
267 private:
268 LIR_Opr _array;
269 LIR_Opr _index;
270 LIR_Opr _value;
271 CodeEmitInfo* _info;
272
273 public:
274 StoreFlattenedArrayStub(LIR_Opr array, LIR_Opr index, LIR_Opr value, CodeEmitInfo* info);
275 virtual void emit_code(LIR_Assembler* e);
276 virtual CodeEmitInfo* info() const { return _info; }
277 virtual void visit(LIR_OpVisitState* visitor) {
278 visitor->do_slow_case(_info);
279 visitor->do_input(_array);
|