136 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack |
136 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack |
137 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack |
137 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack |
138 intptr_t* _register_block; // Block for storing callee-saved registers. |
138 intptr_t* _register_block; // Block for storing callee-saved registers. |
139 BasicType _return_type; // Tells if we have to restore double or long return value |
139 BasicType _return_type; // Tells if we have to restore double or long return value |
140 intptr_t _initial_fp; // FP of the sender frame |
140 intptr_t _initial_fp; // FP of the sender frame |
|
141 int _caller_actual_parameters; // The number of actual arguments at the |
|
142 // interpreted caller of the deoptimized frame |
|
143 |
141 // The following fields are used as temps during the unpacking phase |
144 // The following fields are used as temps during the unpacking phase |
142 // (which is tight on registers, especially on x86). They really ought |
145 // (which is tight on registers, especially on x86). They really ought |
143 // to be PD variables but that involves moving this class into its own |
146 // to be PD variables but that involves moving this class into its own |
144 // file to use the pd include mechanism. Maybe in a later cleanup ... |
147 // file to use the pd include mechanism. Maybe in a later cleanup ... |
145 intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) |
148 intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) |
147 intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) |
150 intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) |
148 public: |
151 public: |
149 // Constructor |
152 // Constructor |
150 UnrollBlock(int size_of_deoptimized_frame, |
153 UnrollBlock(int size_of_deoptimized_frame, |
151 int caller_adjustment, |
154 int caller_adjustment, |
|
155 int caller_actual_parameters, |
152 int number_of_frames, |
156 int number_of_frames, |
153 intptr_t* frame_sizes, |
157 intptr_t* frame_sizes, |
154 address* frames_pcs, |
158 address* frames_pcs, |
155 BasicType return_type); |
159 BasicType return_type); |
156 ~UnrollBlock(); |
160 ~UnrollBlock(); |
165 |
169 |
166 // Returns the total size of frames |
170 // Returns the total size of frames |
167 int size_of_frames() const; |
171 int size_of_frames() const; |
168 |
172 |
169 void set_initial_fp(intptr_t fp) { _initial_fp = fp; } |
173 void set_initial_fp(intptr_t fp) { _initial_fp = fp; } |
|
174 |
|
175 int caller_actual_parameters() const { return _caller_actual_parameters; } |
170 |
176 |
171 // Accessors used by the code generator for the unpack stub. |
177 // Accessors used by the code generator for the unpack stub. |
172 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); } |
178 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); } |
173 static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); } |
179 static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); } |
174 static int number_of_frames_offset_in_bytes() { return offset_of(UnrollBlock, _number_of_frames); } |
180 static int number_of_frames_offset_in_bytes() { return offset_of(UnrollBlock, _number_of_frames); } |