Mercurial > hg > truffle
comparison src/share/vm/runtime/vframeArray.cpp @ 1936:8d88c9ac9247
Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Thu, 23 Dec 2010 18:13:28 +0100 |
parents | fd5d4527cdf5 |
children | 06f017f7daa7 |
comparison
equal
deleted
inserted
replaced
1935:98dbef29f10b | 1936:8d88c9ac9247 |
---|---|
298 StackValue *value = expressions()->at(i); | 298 StackValue *value = expressions()->at(i); |
299 intptr_t* addr = iframe()->interpreter_frame_expression_stack_at(i); | 299 intptr_t* addr = iframe()->interpreter_frame_expression_stack_at(i); |
300 switch(value->type()) { | 300 switch(value->type()) { |
301 case T_INT: | 301 case T_INT: |
302 *addr = value->get_int(); | 302 *addr = value->get_int(); |
303 #ifndef PRODUCT | |
304 if (TraceDeoptimization) { | |
305 tty->print_cr("Reconstructed expression %d (INT): %d", i, (int)(*addr)); | |
306 } | |
307 #endif | |
303 break; | 308 break; |
304 case T_OBJECT: | 309 case T_OBJECT: |
305 *addr = value->get_int(T_OBJECT); | 310 *addr = value->get_int(T_OBJECT); |
311 #ifndef PRODUCT | |
312 if (TraceDeoptimization) { | |
313 tty->print("Reconstructed expression %d (OBJECT): ", i); | |
314 oop o = (oop)(*addr); | |
315 if (o == NULL) { | |
316 tty->print_cr("NULL"); | |
317 } else { | |
318 tty->print_cr(err_msg("%s", o->blueprint()->name()->as_C_string())); | |
319 } | |
320 } | |
321 #endif | |
306 break; | 322 break; |
307 case T_CONFLICT: | 323 case T_CONFLICT: |
308 // A dead stack slot. Initialize to null in case it is an oop. | 324 // A dead stack slot. Initialize to null in case it is an oop. |
309 *addr = NULL_WORD; | 325 *addr = NULL_WORD; |
310 break; | 326 break; |
319 StackValue *value = locals()->at(i); | 335 StackValue *value = locals()->at(i); |
320 intptr_t* addr = iframe()->interpreter_frame_local_at(i); | 336 intptr_t* addr = iframe()->interpreter_frame_local_at(i); |
321 switch(value->type()) { | 337 switch(value->type()) { |
322 case T_INT: | 338 case T_INT: |
323 *addr = value->get_int(); | 339 *addr = value->get_int(); |
340 #ifndef PRODUCT | |
341 if (TraceDeoptimization) { | |
342 tty->print_cr("Reconstructed local %d (INT): %d", i, (int)(*addr)); | |
343 } | |
344 #endif | |
324 break; | 345 break; |
325 case T_OBJECT: | 346 case T_OBJECT: |
326 *addr = value->get_int(T_OBJECT); | 347 *addr = value->get_int(T_OBJECT); |
348 #ifndef PRODUCT | |
349 if (TraceDeoptimization) { | |
350 tty->print("Reconstructed local %d (OBJECT): ", i); | |
351 oop o = (oop)(*addr); | |
352 if (o == NULL) { | |
353 tty->print_cr("NULL"); | |
354 } else { | |
355 tty->print_cr(err_msg("%s", o->blueprint()->name()->as_C_string())); | |
356 } | |
357 } | |
358 #endif | |
327 break; | 359 break; |
328 case T_CONFLICT: | 360 case T_CONFLICT: |
329 // A dead location. If it is an oop then we need a NULL to prevent GC from following it | 361 // A dead location. If it is an oop then we need a NULL to prevent GC from following it |
330 *addr = NULL_WORD; | 362 *addr = NULL_WORD; |
331 break; | 363 break; |