968 { Label L; |
968 { Label L; |
969 __ movptr(rax, STATE(_stack_base)); |
969 __ movptr(rax, STATE(_stack_base)); |
970 #ifdef _LP64 |
970 #ifdef _LP64 |
971 // duplicate the alignment rsp got after setting stack_base |
971 // duplicate the alignment rsp got after setting stack_base |
972 __ subptr(rax, frame::arg_reg_save_area_bytes); // windows |
972 __ subptr(rax, frame::arg_reg_save_area_bytes); // windows |
973 __ andptr(rax, -16); // must be 16 byte boundry (see amd64 ABI) |
973 __ andptr(rax, -16); // must be 16 byte boundary (see amd64 ABI) |
974 #endif // _LP64 |
974 #endif // _LP64 |
975 __ cmpptr(rax, rsp); |
975 __ cmpptr(rax, rsp); |
976 __ jcc(Assembler::equal, L); |
976 __ jcc(Assembler::equal, L); |
977 __ stop("broken stack frame setup in interpreter"); |
977 __ stop("broken stack frame setup in interpreter"); |
978 __ bind(L); |
978 __ bind(L); |
1065 __ load_unsigned_word(t, Address(method, methodOopDesc::size_of_parameters_offset())); |
1065 __ load_unsigned_word(t, Address(method, methodOopDesc::size_of_parameters_offset())); |
1066 __ shll(t, 2); |
1066 __ shll(t, 2); |
1067 #ifdef _LP64 |
1067 #ifdef _LP64 |
1068 __ subptr(rsp, t); |
1068 __ subptr(rsp, t); |
1069 __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows |
1069 __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows |
1070 __ andptr(rsp, -16); // must be 16 byte boundry (see amd64 ABI) |
1070 __ andptr(rsp, -16); // must be 16 byte boundary (see amd64 ABI) |
1071 #else |
1071 #else |
1072 __ addptr(t, 2*wordSize); // allocate two more slots for JNIEnv and possible mirror |
1072 __ addptr(t, 2*wordSize); // allocate two more slots for JNIEnv and possible mirror |
1073 __ subptr(rsp, t); |
1073 __ subptr(rsp, t); |
1074 __ andptr(rsp, -(StackAlignmentInBytes)); // gcc needs 16 byte aligned stacks to do XMM intrinsics |
1074 __ andptr(rsp, -(StackAlignmentInBytes)); // gcc needs 16 byte aligned stacks to do XMM intrinsics |
1075 #endif // _LP64 |
1075 #endif // _LP64 |