@@ -110,6 +110,8 @@ class CounterOverflowStub: public CodeStub {
110110
111111public:
112112 CounterOverflowStub (CodeEmitInfo* info, int bci, LIR_Opr method) : _info(info), _bci(bci), _method(method) {
113+ FrameMap* f = Compilation::current ()->frame_map ();
114+ f->update_reserved_argument_area_size (2 * BytesPerWord);
113115 }
114116
115117 virtual void emit_code (LIR_Assembler* e);
@@ -166,9 +168,21 @@ class RangeCheckStub: public CodeStub {
166168
167169 public:
168170 // For ArrayIndexOutOfBoundsException.
169- RangeCheckStub (CodeEmitInfo* info, LIR_Opr index, LIR_Opr array);
171+ RangeCheckStub (CodeEmitInfo* info, LIR_Opr index, LIR_Opr array)
172+ : _index(index), _array(array), _throw_index_out_of_bounds_exception(false ) {
173+ assert (info != NULL , " must have info" );
174+ _info = new CodeEmitInfo (info);
175+ FrameMap* f = Compilation::current ()->frame_map ();
176+ f->update_reserved_argument_area_size (2 * BytesPerWord);
177+ }
170178 // For IndexOutOfBoundsException.
171- RangeCheckStub (CodeEmitInfo* info, LIR_Opr index);
179+ RangeCheckStub (CodeEmitInfo* info, LIR_Opr index)
180+ : _index(index), _array(), _throw_index_out_of_bounds_exception(true ) {
181+ assert (info != NULL , " must have info" );
182+ _info = new CodeEmitInfo (info);
183+ FrameMap* f = Compilation::current ()->frame_map ();
184+ f->update_reserved_argument_area_size (2 * BytesPerWord);
185+ }
172186 virtual void emit_code (LIR_Assembler* e);
173187 virtual CodeEmitInfo* info () const { return _info; }
174188 virtual bool is_exception_throw_stub () const { return true ; }
@@ -335,7 +349,12 @@ class MonitorEnterStub: public MonitorAccessStub {
335349 CodeEmitInfo* _info;
336350
337351 public:
338- MonitorEnterStub (LIR_Opr obj_reg, LIR_Opr lock_reg, CodeEmitInfo* info);
352+ MonitorEnterStub (LIR_Opr obj_reg, LIR_Opr lock_reg, CodeEmitInfo* info)
353+ : MonitorAccessStub(obj_reg, lock_reg) {
354+ _info = new CodeEmitInfo (info);
355+ FrameMap* f = Compilation::current ()->frame_map ();
356+ f->update_reserved_argument_area_size (2 * BytesPerWord);
357+ }
339358
340359 virtual void emit_code (LIR_Assembler* e);
341360 virtual CodeEmitInfo* info () const { return _info; }
@@ -476,7 +495,10 @@ class DeoptimizeStub : public CodeStub {
476495
477496public:
478497 DeoptimizeStub (CodeEmitInfo* info, Deoptimization::DeoptReason reason, Deoptimization::DeoptAction action) :
479- _info (new CodeEmitInfo(info)), _trap_request(Deoptimization::make_trap_request(reason, action)) {}
498+ _info (new CodeEmitInfo(info)), _trap_request(Deoptimization::make_trap_request(reason, action)) {
499+ FrameMap* f = Compilation::current ()->frame_map ();
500+ f->update_reserved_argument_area_size (2 * BytesPerWord);
501+ }
480502
481503 virtual void emit_code (LIR_Assembler* e);
482504 virtual CodeEmitInfo* info () const { return _info; }
@@ -499,6 +521,8 @@ class SimpleExceptionStub: public CodeStub {
499521 public:
500522 SimpleExceptionStub (Runtime1::StubID stub, LIR_Opr obj, CodeEmitInfo* info):
501523 _obj (obj), _stub(stub), _info(info) {
524+ FrameMap* f = Compilation::current ()->frame_map ();
525+ f->update_reserved_argument_area_size (2 * BytesPerWord);
502526 }
503527
504528 void set_obj (LIR_Opr obj) {
@@ -534,7 +558,14 @@ class ArrayCopyStub: public CodeStub {
534558 LIR_OpArrayCopy* _op;
535559
536560 public:
537- ArrayCopyStub (LIR_OpArrayCopy* op): _op(op) { }
561+ ArrayCopyStub (LIR_OpArrayCopy* op): _op(op) {
562+ FrameMap* f = Compilation::current ()->frame_map ();
563+ #if defined(X86)
564+ f->update_reserved_argument_area_size (5 * BytesPerWord);
565+ #else
566+ f->update_reserved_argument_area_size (2 * BytesPerWord);
567+ #endif
568+ }
538569
539570 LIR_Opr src () const { return _op->src (); }
540571 LIR_Opr src_pos () const { return _op->src_pos (); }
0 commit comments