< prev index next >
src/cpu/x86/vm/sharedRuntime_x86_32.cpp
Print this page
*** 190,224 ****
__ movflt(Address(rsp, off*wordSize), as_XMMRegister(n));
off += delta;
}
} else if(UseSSE >= 2) {
// Save whole 128bit (16 bytes) XMM regiters
- if (VM_Version::supports_avx512novl()) {
- for (int n = 0; n < num_xmm_regs; n++) {
- __ vextractf32x4h(Address(rsp, off*wordSize), as_XMMRegister(n), 0);
- off += delta;
- }
- } else {
for (int n = 0; n < num_xmm_regs; n++) {
__ 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
- off = 0;
for (int n = 0; n < num_xmm_regs; n++) {
! __ vextractf128h(Address(rsp, off++*16), as_XMMRegister(n));
}
if (UseAVX > 2) {
__ subptr(rsp, 256); // Save upper half of ZMM registes
- off = 0;
for (int n = 0; n < num_xmm_regs; n++) {
! __ vextractf64x4h(Address(rsp, off++*32), as_XMMRegister(n));
}
}
}
// Set an oopmap for the call site. This oopmap will map all
--- 190,215 ----
__ movflt(Address(rsp, off*wordSize), as_XMMRegister(n));
off += delta;
}
} else if(UseSSE >= 2) {
// Save whole 128bit (16 bytes) XMM regiters
for (int n = 0; n < num_xmm_regs; n++) {
__ 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));
}
if (UseAVX > 2) {
__ subptr(rsp, 256); // Save upper half of ZMM registes
for (int n = 0; n < num_xmm_regs; n++) {
! __ vextractf64x4h(Address(rsp, n*32), as_XMMRegister(n), 1);
}
}
}
// Set an oopmap for the call site. This oopmap will map all
*** 283,317 ****
for (int n = 0; n < num_xmm_regs; n++) {
__ movflt(as_XMMRegister(n), Address(rsp, off*wordSize));
off += delta;
}
} else if (UseSSE >= 2) {
- if (VM_Version::supports_avx512novl()) {
- for (int n = 0; n < num_xmm_regs; n++) {
- __ vinsertf32x4h(as_XMMRegister(n), Address(rsp, off*wordSize+additional_frame_bytes), 0);
- off += delta;
- }
- } else {
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) {
if (UseAVX > 2) {
! off = 0;
for (int n = 0; n < num_xmm_regs; n++) {
! __ vinsertf64x4h(as_XMMRegister(n), Address(rsp, off++*32));
}
__ addptr(rsp, additional_frame_bytes*2); // Save upper half of ZMM registes
}
// Restore upper half of YMM registes.
- assert(additional_frame_bytes == 128, "");
- off = 0;
for (int n = 0; n < num_xmm_regs; n++) {
! __ vinsertf128h(as_XMMRegister(n), Address(rsp, off++*16));
}
__ addptr(rsp, additional_frame_bytes); // Save upper half of YMM registes
}
__ pop_FPU_state();
__ addptr(rsp, FPU_regs_live*wordSize); // Pop FPU registers
--- 274,300 ----
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++) {
! __ vinsertf64x4h(as_XMMRegister(n), Address(rsp, n*32), 1);
}
__ addptr(rsp, additional_frame_bytes*2); // Save upper half of ZMM registes
}
// Restore upper half of YMM registes.
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
}
__ pop_FPU_state();
__ addptr(rsp, FPU_regs_live*wordSize); // Pop FPU registers
< prev index next >