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);
|