< prev index next >

src/cpu/x86/vm/vm_version_x86.cpp

Print this page

        

*** 63,72 **** --- 63,73 ---- const uint32_t HS_EFL_ID = 0x200000; // Values for when we don't have a CPUID instruction. const int CPU_FAMILY_SHIFT = 8; const uint32_t CPU_FAMILY_386 = (3 << CPU_FAMILY_SHIFT); const uint32_t CPU_FAMILY_486 = (4 << CPU_FAMILY_SHIFT); + bool use_evex = FLAG_IS_DEFAULT(UseAVX) || (UseAVX > 2); Label detect_486, cpu486, detect_586, std_cpuid1, std_cpuid4; Label sef_cpuid, ext_cpuid, ext_cpuid1, ext_cpuid5, ext_cpuid7, done, wrapup; Label legacy_setup, save_restore_except, legacy_save_restore, start_simd_check;
*** 356,365 **** --- 357,368 ---- __ movl(rax, 0xE0); __ andl(rax, Address(rbp, in_bytes(VM_Version::xem_xcr0_offset()))); // xcr0 bits sse | ymm __ cmpl(rax, 0xE0); __ jccb(Assembler::notEqual, legacy_setup); // jump if EVEX is not supported + // If UseAVX is unitialized or is set by the user to include EVEX + if (use_evex) { // EVEX setup: run in lowest evex mode VM_Version::set_evex_cpuFeatures(); // Enable temporary to pass asserts UseAVX = 3; UseSSE = 2; #ifdef _WINDOWS
*** 386,395 **** --- 389,399 ---- __ evmovdqul(xmm8, xmm0, Assembler::AVX_512bit); __ evmovdqul(xmm31, xmm0, Assembler::AVX_512bit); #endif VM_Version::clean_cpuFeatures(); __ jmp(save_restore_except); + } __ bind(legacy_setup); // AVX setup VM_Version::set_avx_cpuFeatures(); // Enable temporary to pass asserts UseAVX = 1;
*** 439,448 **** --- 443,454 ---- __ movl(rax, 0xE0); __ andl(rax, Address(rbp, in_bytes(VM_Version::xem_xcr0_offset()))); // xcr0 bits sse | ymm __ cmpl(rax, 0xE0); __ jccb(Assembler::notEqual, legacy_save_restore); + // If UseAVX is unitialized or is set by the user to include EVEX + if (use_evex) { // EVEX check: run in lowest evex mode VM_Version::set_evex_cpuFeatures(); // Enable temporary to pass asserts UseAVX = 3; UseSSE = 2; __ lea(rsi, Address(rbp, in_bytes(VM_Version::zmm_save_offset())));
*** 465,474 **** --- 471,481 ---- #endif // _WINDOWS VM_Version::clean_cpuFeatures(); UseAVX = saved_useavx; UseSSE = saved_usesse; __ jmp(wrapup); + } __ bind(legacy_save_restore); // AVX check VM_Version::set_avx_cpuFeatures(); // Enable temporary to pass asserts UseAVX = 1;
< prev index next >