< prev index next >
src/cpu/x86/vm/sharedRuntime_x86_32.cpp
Print this page
*** 196,206 ****
__ movdqu(Address(rsp, off*wordSize), as_XMMRegister(n));
off += delta;
}
}
! if (vect_words > 0) {
assert(vect_words*wordSize == 128, "");
__ subptr(rsp, 128); // Save upper half of YMM registes
for (int n = 0; n < num_xmm_regs; n++) {
__ vextractf128h(Address(rsp, n*16), as_XMMRegister(n));
}
--- 196,206 ----
__ movdqu(Address(rsp, off*wordSize), as_XMMRegister(n));
off += delta;
}
}
! if (save_vectors) {
assert(vect_words*wordSize == 128, "");
__ subptr(rsp, 128); // Save upper half of YMM registes
for (int n = 0; n < num_xmm_regs; n++) {
__ vextractf128h(Address(rsp, n*16), as_XMMRegister(n));
}
*** 264,288 ****
additional_frame_bytes = 128;
}
#else
assert(!restore_vectors, "vectors are generated only by C2");
#endif
- int off = xmm0_off;
- int delta = xmm1_off - off;
- if (UseSSE == 1) {
- assert(additional_frame_bytes == 0, "");
- for (int n = 0; n < num_xmm_regs; n++) {
- __ movflt(as_XMMRegister(n), Address(rsp, off*wordSize));
- off += delta;
- }
- } else if (UseSSE >= 2) {
- for (int n = 0; n < num_xmm_regs; n++) {
- __ movdqu(as_XMMRegister(n), Address(rsp, off*wordSize+additional_frame_bytes));
- off += delta;
- }
- }
if (restore_vectors) {
assert(additional_frame_bytes == 128, "");
if (UseAVX > 2) {
// Restore upper half of ZMM registers.
for (int n = 0; n < num_xmm_regs; n++) {
--- 264,274 ----
*** 294,303 ****
--- 280,306 ----
for (int n = 0; n < num_xmm_regs; n++) {
__ vinsertf128h(as_XMMRegister(n), Address(rsp, n*16));
}
__ addptr(rsp, additional_frame_bytes); // Save upper half of YMM registes
}
+
+ int off = xmm0_off;
+ int delta = xmm1_off - off;
+
+ if (UseSSE == 1) {
+ for (int n = 0; n < num_xmm_regs; n++) {
+ __ movflt(as_XMMRegister(n), Address(rsp, off*wordSize));
+ off += delta;
+ }
+ } else if (UseSSE >= 2) {
+ // additional_frame_bytes only populated for the restore_vector case, else it is 0
+ for (int n = 0; n < num_xmm_regs; n++) {
+ __ movdqu(as_XMMRegister(n), Address(rsp, off*wordSize+additional_frame_bytes));
+ off += delta;
+ }
+ }
+
__ pop_FPU_state();
__ addptr(rsp, FPU_regs_live*wordSize); // Pop FPU registers
__ popf();
__ popa();
< prev index next >