< prev index next >
src/cpu/x86/vm/vm_version_x86.cpp
Print this page
*** 501,510 ****
--- 501,511 ----
VM_Version::clean_cpuFeatures();
UseAVX = saved_useavx;
UseSSE = saved_usesse;
__ bind(wrapup);
+ __ vzeroupper();
__ popf();
__ pop(rsi);
__ pop(rbx);
__ pop(rbp);
__ ret(0);
*** 916,935 ****
if (MaxVectorSize > 0) {
if (!is_power_of_2(MaxVectorSize)) {
warning("MaxVectorSize must be a power of 2");
FLAG_SET_DEFAULT(MaxVectorSize, 64);
}
! if (MaxVectorSize > 64) {
! FLAG_SET_DEFAULT(MaxVectorSize, 64);
}
! if (MaxVectorSize > 16 && (UseAVX == 0 || !os_supports_avx_vectors())) {
// 32 bytes vectors (in YMM) are only supported with AVX+
FLAG_SET_DEFAULT(MaxVectorSize, 16);
}
! if (UseSSE < 2) {
! // Vectors (in XMM) are only supported with SSE2+
! FLAG_SET_DEFAULT(MaxVectorSize, 0);
}
#if defined(COMPILER2) && defined(ASSERT)
if (supports_avx() && PrintMiscellaneous && Verbose && TraceNewVectors) {
tty->print_cr("State of YMM registers after signal handle:");
int nreg = 2 LP64_ONLY(+2);
--- 917,956 ----
if (MaxVectorSize > 0) {
if (!is_power_of_2(MaxVectorSize)) {
warning("MaxVectorSize must be a power of 2");
FLAG_SET_DEFAULT(MaxVectorSize, 64);
}
! if (UseSSE < 2) {
! // Vectors (in XMM) are only supported with SSE2+
! if (MaxVectorSize > 0) {
! if (!FLAG_IS_DEFAULT(MaxVectorSize))
! warning("MaxVectorSize must be 0");
! FLAG_SET_DEFAULT(MaxVectorSize, 0);
}
! }
! else if (UseAVX == 0 || !os_supports_avx_vectors()) {
// 32 bytes vectors (in YMM) are only supported with AVX+
+ if (MaxVectorSize > 16) {
+ if (!FLAG_IS_DEFAULT(MaxVectorSize))
+ warning("MaxVectorSize must be <= 16");
FLAG_SET_DEFAULT(MaxVectorSize, 16);
}
! }
! else if (UseAVX == 1 || UseAVX == 2) {
! // 64 bytes vectors (in ZMM) are only supported with AVX 3
! if (MaxVectorSize > 32) {
! if (!FLAG_IS_DEFAULT(MaxVectorSize))
! warning("MaxVectorSize must be <= 32");
! FLAG_SET_DEFAULT(MaxVectorSize, 32);
! }
! }
! else if (UseAVX > 2 ) {
! if (MaxVectorSize > 64) {
! if (!FLAG_IS_DEFAULT(MaxVectorSize))
! warning("MaxVectorSize must be <= 64");
! FLAG_SET_DEFAULT(MaxVectorSize, 64);
! }
}
#if defined(COMPILER2) && defined(ASSERT)
if (supports_avx() && PrintMiscellaneous && Verbose && TraceNewVectors) {
tty->print_cr("State of YMM registers after signal handle:");
int nreg = 2 LP64_ONLY(+2);
*** 1149,1159 ****
--- 1170,1188 ----
}
}
if(FLAG_IS_DEFAULT(AllocatePrefetchInstr) && supports_3dnow_prefetch()) {
AllocatePrefetchInstr = 3;
}
+ if ((cpu_family() == 0x06) &&
+ ((extended_cpu_model() == 0x57) || // Xeon Phi 3200/5200/7200
+ (extended_cpu_model() == 0x85))) { // Future Xeon Phi
+ if (FLAG_IS_DEFAULT(UseVzeroupper)) {
+ FLAG_SET_DEFAULT(UseVzeroupper, false);
+ }
}
+ }
+
#ifdef _LP64
if (UseSSE42Intrinsics) {
if (FLAG_IS_DEFAULT(UseVectorizedMismatchIntrinsic)) {
UseVectorizedMismatchIntrinsic = true;
< prev index next >