1193 |
1193 |
1194 // restore the thread (cannot use the pushed argument since arguments |
1194 // restore the thread (cannot use the pushed argument since arguments |
1195 // may be overwritten by C code generated by an optimizing compiler); |
1195 // may be overwritten by C code generated by an optimizing compiler); |
1196 // however can use the register value directly if it is callee saved. |
1196 // however can use the register value directly if it is callee saved. |
1197 #ifndef OPT_THREAD |
1197 #ifndef OPT_THREAD |
1198 if (java_thread >=S0 && java_thread <=S7) { |
1198 get_thread(java_thread); |
|
1199 #else |
1199 #ifdef ASSERT |
1200 #ifdef ASSERT |
1200 { Label L; |
1201 { |
1201 get_thread(AT); |
1202 Label L; |
1202 beq(java_thread, AT, L); |
1203 get_thread(AT); |
1203 delayed()->nop(); |
1204 beq(java_thread, AT, L); |
1204 stop("MacroAssembler::call_VM_base: edi not callee saved?"); |
1205 delayed()->nop(); |
1205 bind(L); |
1206 stop("MacroAssembler::call_VM_base: edi not callee saved?"); |
1206 } |
1207 bind(L); |
1207 #endif |
1208 } |
1208 } else { |
1209 #endif |
1209 get_thread(java_thread); |
|
1210 } |
|
1211 #endif |
1210 #endif |
1212 |
1211 |
1213 // discard thread and arguments |
1212 // discard thread and arguments |
1214 ld_ptr(SP, java_thread, in_bytes(JavaThread::last_Java_sp_offset())); |
1213 ld_ptr(SP, java_thread, in_bytes(JavaThread::last_Java_sp_offset())); |
1215 // reset last Java frame |
1214 // reset last Java frame |