85 ResourceMark rm; |
85 ResourceMark rm; |
86 // setup code generation tools |
86 // setup code generation tools |
87 CodeBuffer buffer("exception_blob", 5120, 5120); |
87 CodeBuffer buffer("exception_blob", 5120, 5120); |
88 MacroAssembler* masm = new MacroAssembler(&buffer); |
88 MacroAssembler* masm = new MacroAssembler(&buffer); |
89 |
89 |
90 // OopMapSet *oop_maps = new OopMapSet(); |
|
91 |
90 |
92 address start = __ pc(); |
91 address start = __ pc(); |
93 |
92 |
94 __ daddiu(SP, SP, -1 * framesize * wordSize); // Prolog! |
93 __ daddiu(SP, SP, -1 * framesize * wordSize); // Prolog! |
95 |
94 |
152 __ reset_last_Java_frame(thread, true, true); |
151 __ reset_last_Java_frame(thread, true, true); |
153 |
152 |
154 // Pop self-frame. |
153 // Pop self-frame. |
155 __ leave(); // Epilog! |
154 __ leave(); // Epilog! |
156 |
155 |
157 // rax,: exception handler for given <exception oop/exception pc> |
156 // V0: exception handler |
158 |
157 |
159 // We have a handler in rax, (could be deopt blob) |
158 // We have a handler in V0, (could be deopt blob) |
160 // rdx - throwing pc, deopt blob will need it. |
|
161 /* FIXME: rdx? */ |
|
162 |
|
163 // rcx contains handler address |
|
164 __ move(T9, V0); |
159 __ move(T9, V0); |
165 |
160 |
166 #ifndef OPT_THREAD |
161 #ifndef OPT_THREAD |
167 __ get_thread(thread); |
162 __ get_thread(thread); |
168 #endif |
163 #endif |