224 |
224 |
225 VMReg name = frame_map()->regname(opr); |
225 VMReg name = frame_map()->regname(opr); |
226 _oop_map->set_oop(name); |
226 _oop_map->set_oop(name); |
227 } |
227 } |
228 |
228 |
229 |
229 // Mirror the stack size calculation in the deopt code |
230 |
230 // How much stack space would we need at this point in the program in |
|
231 // case of deoptimization? |
|
232 int CodeEmitInfo::interpreter_frame_size() const { |
|
233 ValueStack* state = _stack; |
|
234 int size = 0; |
|
235 int callee_parameters = 0; |
|
236 int callee_locals = 0; |
|
237 int extra_args = state->scope()->method()->max_stack() - state->stack_size(); |
|
238 |
|
239 while (state != NULL) { |
|
240 int locks = state->locks_size(); |
|
241 int temps = state->stack_size(); |
|
242 bool is_top_frame = (state == _stack); |
|
243 ciMethod* method = state->scope()->method(); |
|
244 |
|
245 int frame_size = BytesPerWord * Interpreter::size_activation(method->max_stack(), |
|
246 temps + callee_parameters, |
|
247 extra_args, |
|
248 locks, |
|
249 callee_parameters, |
|
250 callee_locals, |
|
251 is_top_frame); |
|
252 size += frame_size; |
|
253 |
|
254 callee_parameters = method->size_of_parameters(); |
|
255 callee_locals = method->max_locals(); |
|
256 extra_args = 0; |
|
257 state = state->caller_state(); |
|
258 } |
|
259 return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord; |
|
260 } |
231 |
261 |
232 // Implementation of IR |
262 // Implementation of IR |
233 |
263 |
234 IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) : |
264 IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) : |
235 _locals_size(in_WordSize(-1)) |
265 _locals_size(in_WordSize(-1)) |