< prev index next >

src/cpu/x86/vm/stubGenerator_x86_64.cpp

Print this page




 365     __ lea(rsp, rsp_after_call);
 366 
 367 #ifdef ASSERT
 368     // verify that threads correspond
 369     {
 370       Label L, S;
 371       __ cmpptr(r15_thread, thread);
 372       __ jcc(Assembler::notEqual, S);
 373       __ get_thread(rbx);
 374       __ cmpptr(r15_thread, rbx);
 375       __ jcc(Assembler::equal, L);
 376       __ bind(S);
 377       __ jcc(Assembler::equal, L);
 378       __ stop("StubRoutines::call_stub: threads must correspond");
 379       __ bind(L);
 380     }
 381 #endif
 382 
 383     // restore regs belonging to calling function
 384 #ifdef _WIN64
 385     for (int i = 15; i >= 6; i--) {

 386       __ movdqu(as_XMMRegister(i), xmm_save(i));






 387     }
 388 #endif
 389     __ movptr(r15, r15_save);
 390     __ movptr(r14, r14_save);
 391     __ movptr(r13, r13_save);
 392     __ movptr(r12, r12_save);
 393     __ movptr(rbx, rbx_save);
 394 
 395 #ifdef _WIN64
 396     __ movptr(rdi, rdi_save);
 397     __ movptr(rsi, rsi_save);
 398 #else
 399     __ ldmxcsr(mxcsr_save);
 400 #endif
 401 
 402     // restore rsp
 403     __ addptr(rsp, -rsp_after_call_off * wordSize);
 404 
 405     // return
 406     __ pop(rbp);




 365     __ lea(rsp, rsp_after_call);
 366 
 367 #ifdef ASSERT
 368     // verify that threads correspond
 369     {
 370       Label L, S;
 371       __ cmpptr(r15_thread, thread);
 372       __ jcc(Assembler::notEqual, S);
 373       __ get_thread(rbx);
 374       __ cmpptr(r15_thread, rbx);
 375       __ jcc(Assembler::equal, L);
 376       __ bind(S);
 377       __ jcc(Assembler::equal, L);
 378       __ stop("StubRoutines::call_stub: threads must correspond");
 379       __ bind(L);
 380     }
 381 #endif
 382 
 383     // restore regs belonging to calling function
 384 #ifdef _WIN64
 385     if (UseAVX > 2) {
 386       for (int i = 6; i <= 31; i++) {
 387         __ movdqu(as_XMMRegister(i), xmm_save(i));
 388       }
 389     }
 390     else {
 391       for (int i = 6; i <= 15; i++) {
 392         __ movdqu(as_XMMRegister(i), xmm_save(i));
 393       }
 394     }
 395 #endif
 396     __ movptr(r15, r15_save);
 397     __ movptr(r14, r14_save);
 398     __ movptr(r13, r13_save);
 399     __ movptr(r12, r12_save);
 400     __ movptr(rbx, rbx_save);
 401 
 402 #ifdef _WIN64
 403     __ movptr(rdi, rdi_save);
 404     __ movptr(rsi, rsi_save);
 405 #else
 406     __ ldmxcsr(mxcsr_save);
 407 #endif
 408 
 409     // restore rsp
 410     __ addptr(rsp, -rsp_after_call_off * wordSize);
 411 
 412     // return
 413     __ pop(rbp);


< prev index next >