Mercurial > hg > truffle
comparison src/share/vm/runtime/deoptimization.cpp @ 2491:0654ee04b214
Merge with OpenJDK.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 22 Apr 2011 15:30:53 +0200 |
parents | 0cd39a385a72 4f148718983e |
children | c7783b6773ea |
comparison
equal
deleted
inserted
replaced
2490:29246b1d2d3c | 2491:0654ee04b214 |
---|---|
99 _number_of_frames = number_of_frames; | 99 _number_of_frames = number_of_frames; |
100 _frame_sizes = frame_sizes; | 100 _frame_sizes = frame_sizes; |
101 _frame_pcs = frame_pcs; | 101 _frame_pcs = frame_pcs; |
102 _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2); | 102 _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2); |
103 _return_type = return_type; | 103 _return_type = return_type; |
104 _initial_fp = 0; | |
104 // PD (x86 only) | 105 // PD (x86 only) |
105 _counter_temp = 0; | 106 _counter_temp = 0; |
106 _initial_fp = 0; | |
107 _unpack_kind = 0; | 107 _unpack_kind = 0; |
108 _sender_sp_temp = 0; | 108 _sender_sp_temp = 0; |
109 | 109 |
110 _total_frame_sizes = size_of_frames(); | 110 _total_frame_sizes = size_of_frames(); |
111 } | 111 } |
461 caller_adjustment * BytesPerWord, | 461 caller_adjustment * BytesPerWord, |
462 number_of_frames, | 462 number_of_frames, |
463 frame_sizes, | 463 frame_sizes, |
464 frame_pcs, | 464 frame_pcs, |
465 return_type); | 465 return_type); |
466 #if defined(IA32) || defined(AMD64) | 466 // On some platforms, we need a way to pass fp to the unpacking code |
467 // We need a way to pass fp to the unpacking code so the skeletal frames | 467 // so the skeletal frames come out correct. |
468 // come out correct. This is only needed for x86 because of c2 using ebp | 468 info->set_initial_fp((intptr_t) array->sender().fp()); |
469 // as an allocatable register. So this update is useless (and harmless) | |
470 // on the other platforms. It would be nice to do this in a different | |
471 // way but even the old style deoptimization had a problem with deriving | |
472 // this value. NEEDS_CLEANUP | |
473 // Note: now that c1 is using c2's deopt blob we must do this on all | |
474 // x86 based platforms | |
475 intptr_t** fp_addr = (intptr_t**) (((address)info) + info->initial_fp_offset_in_bytes()); | |
476 *fp_addr = array->sender().fp(); // was adapter_caller | |
477 #endif /* IA32 || AMD64 */ | |
478 | 469 |
479 if (array->frames() > 1) { | 470 if (array->frames() > 1) { |
480 if (VerifyStack && TraceDeoptimization) { | 471 if (VerifyStack && TraceDeoptimization) { |
481 tty->print_cr("Deoptimizing method containing inlining"); | 472 tty->print_cr("Deoptimizing method containing inlining"); |
482 } | 473 } |