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 }