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