diff --git a/src/hotspot/cpu/x86/frame_x86.hpp b/src/hotspot/cpu/x86/frame_x86.hpp index 3658fa23467..122f640a92a 100644 --- a/src/hotspot/cpu/x86/frame_x86.hpp +++ b/src/hotspot/cpu/x86/frame_x86.hpp @@ -82,7 +82,7 @@ // Entry frames #ifdef AMD64 #ifdef _WIN64 - entry_frame_after_call_words = 60, + entry_frame_after_call_words = 28, entry_frame_call_wrapper_offset = 2, arg_reg_save_area_bytes = 32, // Register argument save area diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp index 6cec069d0c1..c6178836df2 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp @@ -106,10 +106,8 @@ // [ return_from_Java ] <--- rsp // [ argument word n ] // ... -// -60 [ argument word 1 ] -// -59 [ saved xmm31 ] <--- rsp after_call -// [ saved xmm16-xmm30 ] (EVEX enabled, else the space is blank) -// -27 [ saved xmm15 ] +// -28 [ argument word 1 ] +// -27 [ saved xmm15 ] <--- rsp after_call // [ saved xmm7-xmm14 ] // -9 [ saved xmm6 ] (each xmm register takes 2 slots) // -7 [ saved r15 ] @@ -137,7 +135,7 @@ #ifdef _WIN64 enum call_stub_layout { xmm_save_first = 6, // save from xmm6 - xmm_save_last = 31, // to xmm31 + xmm_save_last = 15, // to xmm15 xmm_save_base = -9, rsp_after_call_off = xmm_save_base - 2 * (xmm_save_last - xmm_save_first), // -27 r15_off = -7, @@ -237,17 +235,8 @@ address StubGenerator::generate_call_stub(address& return_address) { #ifdef _WIN64 int last_reg = 15; - if (UseAVX > 2) { - last_reg = 31; - } - if (VM_Version::supports_evex()) { - for (int i = xmm_save_first; i <= last_reg; i++) { - __ vextractf32x4(xmm_save(i), as_XMMRegister(i), 0); - } - } else { - for (int i = xmm_save_first; i <= last_reg; i++) { - __ movdqu(xmm_save(i), as_XMMRegister(i)); - } + for (int i = xmm_save_first; i <= last_reg; i++) { + __ movdqu(xmm_save(i), as_XMMRegister(i)); } const Address rdi_save(rbp, rdi_off * wordSize); @@ -370,14 +359,8 @@ address StubGenerator::generate_call_stub(address& return_address) { // restore regs belonging to calling function #ifdef _WIN64 // emit the restores for xmm regs - if (VM_Version::supports_evex()) { - for (int i = xmm_save_first; i <= last_reg; i++) { - __ vinsertf32x4(as_XMMRegister(i), as_XMMRegister(i), xmm_save(i), 0); - } - } else { - for (int i = xmm_save_first; i <= last_reg; i++) { - __ movdqu(as_XMMRegister(i), xmm_save(i)); - } + for (int i = xmm_save_first; i <= last_reg; i++) { + __ movdqu(as_XMMRegister(i), xmm_save(i)); } #endif __ movptr(r15, r15_save); diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index a7a982edd07..56d3634fa12 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -71,7 +71,7 @@ register %{ // // Linux ABI: No register preserved across function calls // XMM0-XMM7 might hold parameters -// Windows ABI: XMM6-XMM31 preserved across function calls +// Windows ABI: XMM6-XMM15 preserved across function calls // XMM0-XMM3 might hold parameters reg_def XMM0 ( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg());