Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/templateInterpreter_x86_64.cpp @ 23762:a5a2ac8dfaba
Reduce the size of the deopt entry points in the interpreter
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 26 Sep 2016 13:54:28 -0700 |
parents | ca5c97226d1c |
children | 0e0a4ebf09d7 |
comparison
equal
deleted
inserted
replaced
23761:1fece5f8307c | 23762:a5a2ac8dfaba |
---|---|
203 // NULL last_sp until next java call | 203 // NULL last_sp until next java call |
204 __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); | 204 __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); |
205 __ restore_bcp(); | 205 __ restore_bcp(); |
206 __ restore_locals(); | 206 __ restore_locals(); |
207 #if INCLUDE_JVMCI | 207 #if INCLUDE_JVMCI |
208 // Check if we need to take lock at entry of synchronized method. | 208 // Check if we need to take lock at entry of synchronized method. This can |
209 { | 209 // only occur on method entry so emit it only for vtos with step 0. |
210 if (state == vtos && step == 0) { | |
210 Label L; | 211 Label L; |
211 __ cmpb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0); | 212 __ cmpb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0); |
212 __ jcc(Assembler::zero, L); | 213 __ jcc(Assembler::zero, L); |
213 // Clear flag. | 214 // Clear flag. |
214 __ movb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0); | 215 __ movb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0); |
215 // Satisfy calling convention for lock_method(). | 216 // Satisfy calling convention for lock_method(). |
216 __ get_method(rbx); | 217 __ get_method(rbx); |
217 // Take lock. | 218 // Take lock. |
218 lock_method(); | 219 lock_method(); |
219 __ bind(L); | 220 __ bind(L); |
221 } else { | |
222 #ifdef ASSERT | |
223 Label L; | |
224 __ cmpb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0); | |
225 __ jccb(Assembler::zero, L); | |
226 __ stop("unexpected pending monitor in deopt entry"); | |
227 __ bind(L); | |
228 #endif | |
220 } | 229 } |
221 #endif | 230 #endif |
222 // handle exceptions | 231 // handle exceptions |
223 { | 232 { |
224 Label L; | 233 Label L; |