comparison src/cpu/zero/vm/frame_zero.inline.hpp @ 7599:c566b81b3323

8005817: Shark: implement deoptimization support Reviewed-by: twisti Contributed-by: Roman Kennke <rkennke@redhat.com>
author twisti
date Fri, 11 Jan 2013 16:47:23 -0800
parents a3e2f723f2a5
children c54a3122f9c8
comparison
equal deleted inserted replaced
7598:f9bda35f4226 7599:c566b81b3323
43 _sp = sp; 43 _sp = sp;
44 switch (zeroframe()->type()) { 44 switch (zeroframe()->type()) {
45 case ZeroFrame::ENTRY_FRAME: 45 case ZeroFrame::ENTRY_FRAME:
46 _pc = StubRoutines::call_stub_return_pc(); 46 _pc = StubRoutines::call_stub_return_pc();
47 _cb = NULL; 47 _cb = NULL;
48 _deopt_state = not_deoptimized;
48 break; 49 break;
49 50
50 case ZeroFrame::INTERPRETER_FRAME: 51 case ZeroFrame::INTERPRETER_FRAME:
51 _pc = NULL; 52 _pc = NULL;
52 _cb = NULL; 53 _cb = NULL;
54 _deopt_state = not_deoptimized;
53 break; 55 break;
54 56
55 case ZeroFrame::SHARK_FRAME: 57 case ZeroFrame::SHARK_FRAME: {
56 _pc = zero_sharkframe()->pc(); 58 _pc = zero_sharkframe()->pc();
57 _cb = CodeCache::find_blob_unsafe(pc()); 59 _cb = CodeCache::find_blob_unsafe(pc());
60 address original_pc = nmethod::get_deopt_original_pc(this);
61 if (original_pc != NULL) {
62 _pc = original_pc;
63 _deopt_state = is_deoptimized;
64 } else {
65 _deopt_state = not_deoptimized;
66 }
58 break; 67 break;
59 68 }
60 case ZeroFrame::FAKE_STUB_FRAME: 69 case ZeroFrame::FAKE_STUB_FRAME:
61 _pc = NULL; 70 _pc = NULL;
62 _cb = NULL; 71 _cb = NULL;
72 _deopt_state = not_deoptimized;
63 break; 73 break;
64 74
65 default: 75 default:
66 ShouldNotReachHere(); 76 ShouldNotReachHere();
67 } 77 }
68 _deopt_state = not_deoptimized;
69 } 78 }
70 79
71 // Accessors 80 // Accessors
72 81
73 inline intptr_t* frame::sender_sp() const { 82 inline intptr_t* frame::sender_sp() const {